10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-12-25 13:53:48 +01:00

Fix DOUBLECOLUMN format

This commit is contained in:
Mickaël Véril 2020-03-26 16:29:18 +01:00
parent 7fb707ec85
commit 782677f88b

View File

@ -75,10 +75,14 @@ class dataFileBase(object):
def readFromTable(table,format=Format.LINE,default=dataType.ABS ,firstState=state(1,1,"A_1"),commands=[]): def readFromTable(table,format=Format.LINE,default=dataType.ABS ,firstState=state(1,1,"A_1"),commands=[]):
def getSubtableIndex(table,firstindex=2,column=0,count=1): def getSubtableIndex(table,firstindex=2,column=0,count=1):
subtablesindex=list() subtablesindex=list()
for i in range(firstindex+count,np.size(table,0)): i=firstindex+count
while i<np.size(table,0):
if str(table[i,column])!="": if str(table[i,column])!="":
subtablesindex.append((firstindex,i-1)) subtablesindex.append((firstindex,i-1))
firstindex=i firstindex=i
i+=count
else:
i+=1
subtablesindex.append((firstindex,np.size(table,0))) subtablesindex.append((firstindex,np.size(table,0)))
return subtablesindex return subtablesindex
@ -138,55 +142,59 @@ class dataFileBase(object):
datalist.append(value) datalist.append(value)
return datalist return datalist
elif format==Format.DOUBLECOLUMN: elif format==Format.DOUBLECOLUMN:
subtablesindex=getSubtableIndex(table) datacls=dict()
for first, last in subtablesindex: subtablesMol=getSubtableIndex(table)
mymolecule=table[first,0] for firstMol, lastMol in subtablesMol:
mytrans=table[first:first+1,1] mymolecule=str(table[firstMol,0])
for i,mystr in enumerate(mytrans): subtablestrans=getSubtableIndex(table[firstMol:lastMol+1,:],firstindex=0,column=1,count=2)
mystr=mytrans[i] for firstTrans,lastTrans in subtablestrans:
try: mytrans=table[firstMol+firstTrans:firstMol+lastTrans+1,:]
mathsoup=TexSoup(mystr) mytransdesc=mytrans[0:2,1]
except: for i in range(2):
print(f"Error when parsing latex state: {mystr}") try:
exit(-1) mathsoup=TexSoup(mytransdesc[i])
newCommand.runAll(mathsoup,commands) except:
mytrans[i]=str(mathsoup) print(f"Error when parsing latex state: {str(mytransdesc[i])}")
for col in range(3,np.size(table,1)): exit(-1)
col=table[:,col] newCommand.runAll(mathsoup,commands)
mybasis=col[1] mytransdesc[i]=str(mathsoup)
for index,cell in enumerate(col[first:last+1]): for col in range(3,np.size(table,1)):
methodnameAT1=str(table[first+index,2]) col=table[:,col]
PTString="($\%T_1$)" mybasis=str(col[1])
HasT1=methodnameAT1.endswith(PTString) for index,cell in enumerate(col[firstMol+firstTrans:firstMol+lastTrans+1]):
if HasT1: methodnameAT1=str(table[firstMol+firstTrans+index,2])
methodname=methodnameAT1[:-len(PTString)] PTString=r"($\%T_1$)"
else: HasT1=methodnameAT1.endswith(PTString)
methodname=methodnameAT1
mymethod=method(methodname,mybasis)
strcell=str(cell)
if strcell!="":
if HasT1: if HasT1:
m=re.match(r"^(?P<value>[-+]?\d+\.?\d*)\s*\((?P<T1>\d*\.?\d+)\%\)$",strcell) methodname=methodnameAT1[:-len(PTString)]
val,unsafe=getValFromCell(TexSoup(m.group("value")))
T1=m.group("T1")
else: else:
m=re.match(r"^[-+]?\d+\.?\d*",strcell) methodname=str(methodnameAT1)
val,unsafe=getValFromCell(TexSoup(m.group(0))) mymethod=method(methodname,mybasis)
T1=None strcell=str(cell)
finst=finsts[index] if strcell!="":
if (mymolecule,mymethod) in datacls: if HasT1:
data=datacls[(mymolecule,mymethod)] m=re.match(r"^(?P<value>[-+]?\d+\.?\d*)\s*(?:\((?P<T1>\d+\.?\d*)\\\%\))?",strcell)
else: val,unsafe=getValFromCell(TexSoup(m.group("value")))
data=AbsDataFile() T1=m.group("T1")
data.molecule=mymolecule else:
data.method=mymethod m=re.match(r"^[-+]?\d+\.?\d*",strcell)
infin=mytrans.split("\rightarrow") 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): for i,item in enumerate(infin):
m=re.match(r"^(?P<number>\d)\\[,:;\s]\s*\^(?P<multiplicity>\d)(?P<sym>\S*)",item) 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")) infin[i]=state(m.group("number"),m.group("multiplicity"),m.group("sym"))
data.excitations.append(excitationValue(infin[0],infin[1],val,type=mytrans[1],isUnsafe=unsafe,T1=T1)) data.excitations.append(excitationValue(infin[0],infin[1],val,type=mytransdesc[1],isUnsafe=unsafe,T1=T1))
for value in datacls.values(): for value in datacls.values():
datalist.append(value) datalist.append(value)
return datalist
elif format==Format.TBE: elif format==Format.TBE:
subtablesindex=getSubtableIndex(table) subtablesindex=getSubtableIndex(table)
for first, last in subtablesindex: for first, last in subtablesindex: