10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-11-04 05:03:53 +01:00
QUESTDB_website/tools/lib/formats/default/doubleColumnHandler.py

63 lines
2.9 KiB
Python

from ..formatHandlerBase import formatHandlerBase
from ..formatName import formatName
from ...data import dataFileBase,DataType,method,excitationValue,datafileSelector,AbsDataFile,getSubtableIndex
from ...LaTeX import newCommand
import re
from ...utils import getValFromCell
@formatName("doubleColumn")
class doubleColumnHandler(formatHandlerBase):
def readFromTable(self,table):
datacls=dict()
subtablesMol=getSubtableIndex(table)
for firstMol, lastMol in subtablesMol:
mymolecule=str(table[firstMol,0])
moltable=table[firstMol:lastMol+1,:]
subtablestrans=getSubtableIndex(moltable,firstindex=0,column=1,count=2)
for firstTrans,lastTrans in subtablestrans:
mytrans=moltable[firstTrans:lastTrans+1,:]
mytransdesc=mytrans[0:2,1]
for i in range(2):
try:
mathsoup=TexSoup(mytransdesc[i])
except:
print(f"Error when parsing latex state: {str(mytransdesc[i])}")
exit(-1)
newCommand.runAll(mathsoup,commands)
mytransdesc[i]=str(mathsoup)
for colindex in range(3,np.size(table,1)):
col=mytrans[:,colindex]
mybasis=str(table[1,colindex])
for index,cell in enumerate(col):
methodnameAT1=str(mytrans[index,2])
PTString=r"($\%T_1$)"
HasT1=methodnameAT1.endswith(PTString)
if HasT1:
methodname=methodnameAT1[:-len(PTString)]
else:
methodname=str(methodnameAT1)
mymethod=method(methodname,mybasis)
strcell=str(cell)
if strcell!="":
if HasT1:
m=re.match(r"^(?P<value>[-+]?\d+\.?\d*)\s*(?:\((?P<T1>\d+\.?\d*)\\\%\))?",strcell)
val,unsafe=getValFromCell(TexSoup(m.group("value")))
T1=m.group("T1")
else:
m=re.match(r"^[-+]?\d+\.?\d*",strcell)
val,unsafe=getValFromCell(TexSoup(m.group(0)))
T1=None
if (mymolecule,mymethod.name,mymethod.basis) in datacls:
data=datacls[(mymolecule,mymethod.name,mymethod.basis)]
else:
data=AbsDataFile()
data.molecule=mymolecule
data.method=mymethod
datacls[(mymolecule,mymethod.name,mymethod.basis)]=data
infin=mytransdesc[0].split(r"\rightarrow")
for i,item in enumerate(infin):
m=re.match(r"^(?P<number>\d)\\[,:;\s]\s*\^(?P<multiplicity>\d)(?P<sym>\S*)",item.strip())
infin[i]=state(m.group("number"),m.group("multiplicity"),m.group("sym"))
data.excitations.append(excitationValue(infin[0],infin[1],val,type=mytransdesc[1],isUnsafe=unsafe,T1=T1))
for value in datacls.values():
datalist.append(value)
return datalist