10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-12-25 22:03:49 +01:00

Handle .dat format and delete json

This commit is contained in:
Mickaël Véril 2019-08-28 11:59:18 +02:00
parent 501333d92c
commit fd3cc0ae29
4 changed files with 126 additions and 121 deletions

View File

@ -1,100 +0,0 @@
{
"molecule": "water",
"code": {
"name": "",
"version": ""
},
"basis": {
"type": "gaussian",
"name": "aug-cc-pVDZ"
},
"method": "CC3",
"exitations": [
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symetry": "A_1"
},
"end": {
"num": 1,
"multiplicity": 1,
"symetry": "B_1"
},
"energy": 7.51
},
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symetry": "A_1"
},
"end": {
"number": 1,
"multiplicity": 1,
"symetry": "A_2"
},
"energy": 9.29
},
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symetry": "A_1"
},
"end": {
"number": 2,
"multiplicity": 1,
"symetry": "A_1"
},
"energy": 9.92
},
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symetry": "A_1"
},
"end": {
"number": 1,
"multiplicity": 3,
"symetry": "B_1"
},
"energy": 7.13
},
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symetry": "A_1"
},
"end": {
"number": 1,
"multiplicity": 3,
"symetry": "A_2"
},
"energy": 9.12,
"error": 0.0
},
{
"type": "vert",
"start": {
"number": 1,
"multiplicity": 1,
"symmetry": "A_1"
},
"end": {
"number": 1,
"multiplicity": 3,
"symetry": "A_1"
},
"energy": 9.47
}
],
"doi": "10.1021/acs.jctc.8b00406"
}

View File

@ -2,20 +2,21 @@
<html> <html>
<head> <head>
<script src="scripts/data.js" type="text/javascript"></script> <script src="scripts/data.js" type="text/javascript"></script>
<script src="scripts/getFullDataPath.js" type="text/javascript"></script>
<script src="https://cdn.rawgit.com/larsgw/citation.js/archive/citation.js/citation-0.4.0-9.js" type="text/javascript"></script> <script src="https://cdn.rawgit.com/larsgw/citation.js/archive/citation.js/citation-0.4.0-9.js" type="text/javascript"></script>
<script> <script>
function update_file(filename) { function update_file(filename) {
file=filename+'.json' file=filename+'.dat'
lnk_file.setAttribute('href',getFullDataPath(file)); lnk_file.setAttribute('href',getFullDataPath(file));
lnk_file=document.getElementById('lnk_file'); lnk_file=document.getElementById('lnk_file');
getDataFromFile(file,onApplyData); data.load(file,onApplyData);
} }
function onApplyData(data) { function onApplyData(dat) {
lnk_doi=document.getElementById('lnk_doi'); lnk_doi=document.getElementById('lnk_doi');
doiurl=getDoiUrl(data.doi); doiurl=dat.doi.url;
lnk_doi.setAttribute('href',doiurl); lnk_doi.setAttribute('href',doiurl);
const Cite = require('citation-js'); const Cite = require('citation-js');
let publi = new Cite(data.doi) let publi = new Cite(dat.doi.string)
lnk_doi.innerHTML=publi.format('citation'); lnk_doi.innerHTML=publi.format('citation');
} }
</script> </script>

View File

@ -1,21 +1,122 @@
function getDataFromFile(file,fn) { class code {
var result = null; constructor(name,version){
var xmlhttp = new XMLHttpRequest(); this.name=name
xmlhttp this.version=version
xmlhttp.open("GET",getFullDataPath(file), true);
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {//when a good response is given do this
var data = JSON.parse(this.responseText); // convert the response to a json object
fn(data)
} }
}
class basis {
constructor(name,type){
this.name=name
this.type=type
} }
xmlhttp.send();
} }
function getDoiUrl(doi) { class state{
constructor(number,multiplicity,symetry){
this.number=number;
this.multiplicity=multiplicity;
this.symetry=symetry;
}
}
class doi{
constructor(doistring){
this.string=doistring
}
get url() {
return 'https://doi.org/'+doi return 'https://doi.org/'+doi
}
} }
function getFullDataPath(path) { class excitation{
return 'data/'+path constructor(start,end,Evert){
this.start=start;
this.end=end;
this.Evert=Evert;
}
}
class data {
constructor(){
this.title="";
this.code=null;
this.basis=null;
this.doi=null;
this.excitations=[];
}
static load(file,fn) {
var req = new XMLHttpRequest();
req.open("GET",getFullDataPath(file), true);
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {//when a good response is given do this
var text = req.responseText;
fn(data.loadstring(text));
}
}
req.send();
}
static loadstring(text) {
// for each line with metadata
var ismetaArea=true;
//metadata RegExp (start with #; maybe somme spaces; : ; maybe somme space; datas)
var meta=/^#\s*([A-Za-z]+)\s*:\s*(.*)$/;
var dat=new data();
function readmeta(line){
// get key value
var match=line.match(meta);
// normalize key to lower
var key=match[1].toLowerCase();
//if data has value
if(match.length==3 && match[2]) {
var val=match[2];
switch(key) {
case "title":
dat.title=val;
break;
case "code":
var vals=val.split(",")
if(vals.length>=2){
dat.code=new code(vals[0],vals[1]);
} else {
dat.code=new code(vals[0],null);
}
break;
case "basis":
var vals=val.split(",")
if(vals.length>=2){
dat.basis=new basis(vals[0],vals[1])
} else {
dat.basis=new basis(vals[0],null);
}
break;
case "doi":
dat.doi=new doi(val);
break;
}
}
}
function readrow(line){
var vals=line.split(/\s+/);
var start=new state(vals[0],vals[1],vals[2]);
var end=new state(vals[3],vals[4],vals[5]);
var ex=new excitation(start,end,vals[6]);
dat.excitations.push(ex);
};
text.split("\n").forEach(function(line) {
//if it's not empty line
line=line.trim();
if (line){
//if # may be metadata or comment
if (line.charAt(0)=="#") {
//if it's metadata
if(ismetaArea && meta.test(line)) {
readmeta(line);
}
} else { //else its row
ismetaArea=false;
readrow(line);
}
}
});
return dat
}
} }

View File

@ -0,0 +1,3 @@
function getFullDataPath(path) {
return 'data/' + path;
}