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

Change geometries handling

This commit is contained in:
Mickaël Véril 2020-09-28 15:39:46 +02:00
parent a65fe57d35
commit 85ab5b9968
3 changed files with 71 additions and 0 deletions

View File

@ -0,0 +1,16 @@
class GeometriesLoader{
static async loadForAsync(array){
var xyzs=[]
for (const item of array) {
const mymol=mhchemCE.extract(item.molecule).toLowerCase().replace(" ","_")
const myset=item.set.split("#").join("")
try {
const mol=await Geometry.loadXYZAsync(`/${myset}/${mymol}.xyz`)
xyzs.push(mol)
} catch (error) {
console.error("Geometry not found",item)
}
}
return xyzs.flat()
}
}

35
static/js/Geometry.js Normal file
View File

@ -0,0 +1,35 @@
class Geometry {
constructor(molecule, comment) {
this.molecule = molecule
this.comment = comment
}
static async loadXYZAsync(file) {
switch (trueTypeOf(file)) {
case String.name:
file = getFullDataPath("/structures/"+file)
var str = await getTextFromFileUrlAsync(file)
break;
case File.name:
var str = await getTextFromUploadedFileAsync(file)
break
}
var xyz = this.loadXYZString(str);
xyz.sourceFile = new websiteFile(file)
return xyz
}
static loadXYZString(text) {
var lines = text.split("\n")
var indexes = lines.findAllIndexes((line) => {
return line.match(/^\d+$/)
})
indexes.push(lines.length)
var geoms = []
for (let i = 0; i < indexes.length - 1; i++) {
const mollines = lines.slice(indexes[i], indexes[i + 1])
const comment = mollines[1]
const molecule = ChemDoodle.readXYZ(mollines.join("\n"))
geoms.push(new Geometry(molecule, comment))
}
return geoms
}
}

View File

@ -0,0 +1,20 @@
if (!Geometry.prototype.parseMetadata) {
Geometry.prototype.parseMetadata = function () {
const Ametadata = this.comment.split(",")
const molecule = Ametadata[0]
const stateRegExp = /^\^(\d+)(.+)$/
const m = Ametadata[1].match(stateRegExp)
const mul = m[1]
const sym = m[2]
var meth = null
if (Ametadata.length>2) {
meth = new method(Ametadata[2],Ametadata[3])
}
return {
molecule:molecule,
multiplicity:mul,
symmetry:sym,
method:meth
}
}
}