diff --git a/content/onedataset.html b/content/onedataset.html index 9a66e515..3a9eb98e 100644 --- a/content/onedataset.html +++ b/content/onedataset.html @@ -19,12 +19,12 @@ draft: false window.dats=await loadAllData() window.data=new CombinedData() molecules=new Set(Object.values(window.dats).flat().map((d)=>d.molecule)) - molecules.forEach(el=>{ + for (const el of molecules) { op=document.createElement("option") op.value=el op.innerText=el document.getElementById("select_mol").appendChild(op) - }) + } } function select_mol_onchange(event){ update_mol(event.target.value) @@ -39,20 +39,20 @@ draft: false update_ZPE(window.dats["ZPE"][event.target.value]) } async function update_mol(molecule){ - Object.keys(window.dats).forEach((key)=>{ + for (const [key,dat] of Object.entries(window.dats)) { var s=document.getElementById(String.raw`select_${key}`) while (s.options[s.options.length-1].value!= "") { s.options.remove(s.options[s.options.length-1]) } - window.dats[key].forEach(val=>{ + dat.forEach((val,index)=>{ if(val.molecule==molecule){ var op=document.createElement("option") - op.value=window.dats[key].indexOf(val) + op.value=index op.innerText=val.method.toString() s.appendChild(op) } }) - }) + } } async function update_abs(abs){ window.data.Abs=abs @@ -91,7 +91,7 @@ draft: false } div=document.getElementById("meta_div") div.innerHTML="" - for (element of md) { + for (const element of md) { var node =null; switch (trueTypeOf(element)) { case "string": @@ -123,19 +123,19 @@ draft: false } var tb=document.getElementById("ex_table_b"); tb.innerHTML='' - window.data.excitations.forEach(el=> { + for (const el of window.data.excitations) { var row=document.createElement("tr") var rowd=[] rowd.push(String.raw`${LatexInline[0]} ${el.initial.toLaTeX()} \rightarrow ${el.final.toLaTeX()}${LatexInline[1]}`) var e=[el.Eabs,el.Efluo,el.EZPE,el.Eadia,el.Ezz] e.forEach((val)=>rowd.push(noNanPrecision(val,3))) - rowd.forEach((d)=>{ + for(d of rowd) { td=document.createElement("td") td.innerText=d row.appendChild(td) - }) + } tb.appendChild(row) - }); + } await MathJax.typesetPromise(); document.getElementById("ex_div").hidden=false var plotdat = [{ diff --git a/static/scripts/data.js b/static/scripts/data.js index 3e5f34ed..5f1e0d65 100644 --- a/static/scripts/data.js +++ b/static/scripts/data.js @@ -1,200 +1,198 @@ class code { - constructor(name,version){ - this.name=name; - this.version=version; + constructor(name, version) { + this.name = name; + this.version = version; }; - toString() { - var str=this.name; + toString() { + var str = this.name; if (this.version) { - str=str+' ('+this.version+')'; + str = str + ' (' + this.version + ')'; } return str; } static fromString(str) { - var vals=str.split(",") - if(vals.length>=2){ - return new code(vals[0],vals[1]); + var vals = str.split(",") + if (vals.length >= 2) { + return new code(vals[0], vals[1]); } else { - return new code(vals[0],null); + return new code(vals[0], null); } } } class method { - constructor(name,basis){ - this.name=name; - this.basis=basis; + constructor(name, basis) { + this.name = name; + this.basis = basis; } static fromString(str) { - var vals=str.split(",") - if(vals.length==2){ - return new method(vals[0],vals[1]); + var vals = str.split(",") + if (vals.length == 2) { + return new method(vals[0], vals[1]); } - else{ - return new method(vals[0],null) + else { + return new method(vals[0], null) } } - toString() { - var str=this.name; + toString() { + var str = this.name; if (this.name) { - str=str+'/'+this.basis; + str = str + '/' + this.basis; } return str; } } -class state{ - constructor(number,multiplicity,symetry){ - this.number=number; - this.multiplicity=multiplicity; - this.symetry=symetry; +class state { + constructor(number, multiplicity, symetry) { + this.number = number; + this.multiplicity = multiplicity; + this.symetry = symetry; }; - toString() { - var str=this.number+ ' ^'+this.multiplicity+this.symetry; + toString() { + var str = this.number + ' ^' + this.multiplicity + this.symetry; return str; }; toLaTeX() { - var tex= String.raw`${this.number}\:\vphantom{\mathrm{${this.symetry.charAt(0)}}}^{${this.multiplicity}}\mathrm{${this.symetry}}`; + var tex = String.raw`${this.number}\:\vphantom{\mathrm{${this.symetry.charAt(0)}}}^{${this.multiplicity}}\mathrm{${this.symetry}}`; return tex; }; } -class doi{ - constructor(doistring){ - this.string=doistring +class doi { + constructor(doistring) { + this.string = doistring }; - toString() { + toString() { return this.string; }; get url() { - return 'https://doi.org/'+this.string; + return 'https://doi.org/' + this.string; }; } -class excitationBase{ - constructor(initial,final){ - this.initial=initial; - this.final=final +class excitationBase { + constructor(initial, final) { + this.initial = initial; + this.final = final } } -class excitationValue extends excitationBase{ - constructor(initial,final,value){ - super(initial,final) - this.value=value +class excitationValue extends excitationBase { + constructor(initial, final, value) { + super(initial, final) + this.value = value } } -class excitation extends excitationBase{ - constructor(initial,final,Eabs,Efluo,EZPE){ - super(initial,final) - this.Eabs=Eabs - this.Efluo=Efluo - this.EZPE=EZPE +class excitation extends excitationBase { + constructor(initial, final, Eabs, Efluo, EZPE) { + super(initial, final) + this.Eabs = Eabs + this.Efluo = Efluo + this.EZPE = EZPE } get Eadia() { - return (this.Eabs+this.Efluo)/2 - } + return (this.Eabs + this.Efluo) / 2 + } get Ezz() { - return this.Eadia-this.EZPE + return this.Eadia - this.EZPE } toString() { - return this.start+ ', ' + this.end +', '+ noNanPrecision(this.Eabs,3); + return this.start + ', ' + this.end + ', ' + noNanPrecision(this.Eabs, 3); } } class dataFileBase { - constructor(){ - this.molecule='' - this.comment=null - this.code=null - this.method=null - this.excitations=[] - this.DOI=null + constructor() { + this.molecule = '' + this.comment = null + this.code = null + this.method = null + this.excitations = [] + this.DOI = null } static async loadAsync(file) { - return this.loadString(await getTextFromFileAsync(getFullDataPath(file))); + return this.loadString(await getTextFromFileAsync(getFullDataPath(file))); } - static readmetaPair(key, value,dat){ - switch(key) { + static readmetaPair(key, value, dat) { + switch (key) { case "molecule": - dat.molecule=value + dat.molecule = value break; case "comment": - dat.comment=value + dat.comment = value break; case "code": - dat.code=code.fromString(value) + dat.code = code.fromString(value) break; case "method": - dat.method=method.fromString(value) - break; + dat.method = method.fromString(value) + break; case "doi": - dat.DOI=new doi(value); + dat.DOI = new doi(value); break; default: } } static loadString(text) { // for each line with metadata - var ismetaArea=true; + var ismetaArea = true; //metadata RegExp (start with #; maybe somme spaces; : ; maybe somme space; datas) - var meta=/^#\s*([A-Za-z_]+)\s*:\s*(.*)$/; - var classname=this.name - var dat=eval(String.raw`new ${this.name}()`) - function readmeta(line){ + var meta = /^#\s*([A-Za-z_]+)\s*:\s*(.*)$/; + var classname = this.name + var dat = eval(String.raw`new ${this.name}()`) + function readmeta(line) { // get key value - var match=line.match(meta) + var match = line.match(meta) // normalize key to lower - var key=match[1].toLowerCase() + var key = match[1].toLowerCase() //if data has value - if(match.length==3 && match[2]) { - var val=match[2] + if (match.length == 3 && match[2]) { + var val = match[2] eval(String.raw`${classname}.readmetaPair(key,val,dat)`) } } - function readrow(line){ - var vals=line.split(/\s+/); - while (vals.length<8){ + function readrow(line) { + var vals = line.split(/\s+/); + while (vals.length < 8) { vals.push(null); } - - var start=new state(parseInt(vals[0],10),parseInt(vals[1],10),vals[2]); - var end=new state(parseInt(vals[3],10),vals[4],vals[5]); - var ex= new excitationValue(start,end,parseFloat(vals[6],10)); + + var start = new state(parseInt(vals[0], 10), parseInt(vals[1], 10), vals[2]); + var end = new state(parseInt(vals[3], 10), vals[4], vals[5]); + var ex = new excitationValue(start, end, parseFloat(vals[6], 10)); dat.excitations.push(ex); }; - text.split("\n").forEach(function(line) { + for (var line of text.split("\n")) { //if it's not empty line - line=line.trim(); - if (line){ + line = line.trim(); + if (line) { //if # may be metadata or comment - if (line.charAt(0)=="#") { + if (line.charAt(0) == "#") { //if it's metadata - if(ismetaArea && meta.test(line)) { + if (ismetaArea && meta.test(line)) { readmeta(line); - } + } } else { //else its row - ismetaArea=false; + ismetaArea = false; readrow(line); } } - }); + } return dat } } class oneStateDataFile extends dataFileBase { - constructor(){ + constructor() { super() - this.geometry=null + this.geometry = null } - static readmetaPair(key,value,dat) - { - if(key=="geom") - { - dat.geometry=method.fromString(value) + static readmetaPair(key, value, dat) { + if (key == "geom") { + dat.geometry = method.fromString(value) } - else{ - dataFileBase.readmetaPair(key,value,dat) + else { + dataFileBase.readmetaPair(key, value, dat) } } } @@ -204,83 +202,83 @@ class AbsDataFile extends oneStateDataFile { class FluoDataFile extends oneStateDataFile { } -class twoStateDataFileBase extends dataFileBase{ - constructor(){ +class twoStateDataFileBase extends dataFileBase { + constructor() { super() - this.GS=null - this.ES=null + this.GS = null + this.ES = null } - static readmetaPair(key,value,dat){ - switch(key) { + static readmetaPair(key, value, dat) { + switch (key) { case "gs": - dat.GS=method.fromString(value) + dat.GS = method.fromString(value) break; case "es": - dat.ES=method.fromString(value) + dat.ES = method.fromString(value) break; - default: - dataFileBase.readmetaPair(key,value,dat) + default: + dataFileBase.readmetaPair(key, value, dat) } } } class ZPEDataFile extends twoStateDataFileBase { - + } -class CombinedData{ - constructor(){ - this.Abs=null - this.Fluo=null - this.ZPE=null +class CombinedData { + constructor() { + this.Abs = null + this.Fluo = null + this.ZPE = null } get excitations() { - var exs=[] - var dic=new Map() - if(this.Abs!=null){ - this.Abs.excitations.forEach((el)=>{ - var key=JSON.stringify([el.initial,el.final]) - if(!dic.has(key)){ - dic.set(key,{}) + var exs = [] + var dic = new Map() + if (this.Abs != null) { + for (const el of this.Abs.excitations) { + var key = JSON.stringify([el.initial, el.final]) + if (!dic.has(key)) { + dic.set(key, {}) } - dic.get(key)["abs"]=el.value - }) + dic.get(key)["abs"] = el.value + } + if (this.Fluo != null) { + for (const el of this.Fluo.excitations) { + var key = JSON.stringify([el.initial, el.final]) + if (!dic.has(key)) { + dic.set(key, {}) + } + dic.get(key)["fluo"] = el.value + } + } + if (this.ZPE != null) { + for (const el of this.ZPE.excitations) { + var key = JSON.stringify([el.initial, el.final]) + if (!dic.has(key)) { + dic.set(key, {}) + } + dic.get(key)["ZPE"] = el.value + } + } + dic.forEach((value, key) => { + var eabs = NaN + var efluo = NaN + var eZPE = NaN + var mykey = JSON.parse(key) + for (var el of mykey) { + Reflect.setPrototypeOf(el, state.prototype) + } + if ("abs" in value) { + eabs = value["abs"] + } + if ("fluo" in value) { + efluo = value["fluo"] + } + if ("ZPE" in value) { + eZPE = value["ZPE"] + } + exs.push(new excitation(mykey[0], mykey[1], eabs, efluo, eZPE)) + }) + return exs + } } - if(this.Fluo!=null){ - this.Fluo.excitations.forEach((el)=>{ - var key=JSON.stringify([el.initial,el.final]) - if(!dic.has(key)){ - dic.set(key,{}) - } - dic.get(key)["fluo"]=el.value - }) - } - if(this.ZPE!=null){ - this.ZPE.excitations.forEach((el)=>{ - var key=JSON.stringify([el.initial,el.final]) - if(!dic.has(key)){ - dic.set(key,{}) - } - dic.get(key)["ZPE"]=el.value - }) - } - dic.forEach((value,key)=>{ - var eabs=NaN - var efluo=NaN - var eZPE=NaN - var mykey=JSON.parse(key) - mykey.forEach(el=>{ - Reflect.setPrototypeOf(el,state.prototype) - }) - if("abs" in value){ - eabs=value["abs"] - } - if("fluo" in value){ - efluo=value["fluo"] - } - if("ZPE" in value){ - eZPE=value["ZPE"] - } - exs.push(new excitation(mykey[0],mykey[1],eabs,efluo,eZPE)) - }) - return exs - }; } \ No newline at end of file