From 92da17ea23b02506a26435be7be2291380a6f69b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20V=C3=A9ril?= Date: Tue, 19 Nov 2019 13:52:53 +0100 Subject: [PATCH] Support molecule on first column instead of on first line on tex (see example2.tex) --- docs/example2.tex | 66 ++++++++++++++++++++++++++++++++++++++++ tools/datafileBuilder.py | 10 ++++-- tools/lib/Orientation.py | 5 +++ tools/lib/data.py | 60 +++++++++++++++++++++++++----------- 4 files changed, 121 insertions(+), 20 deletions(-) create mode 100644 docs/example2.tex create mode 100644 tools/lib/Orientation.py diff --git a/docs/example2.tex b/docs/example2.tex new file mode 100644 index 00000000..4efeef9f --- /dev/null +++ b/docs/example2.tex @@ -0,0 +1,66 @@ +\newcommand{\TDDFT}{TD-DFT} +\newcommand{\CASSCF}{CASSCF} +\newcommand{\CASPT}{CASPT2} +\newcommand{\ADC}[1]{ADC(#1)} +\newcommand{\CC}[1]{CC#1} +\newcommand{\CCSD}{CCSD} +\newcommand{\EOMCCSD}{EOM-CCSD} +\newcommand{\CCSDT}{CCSDT} +\newcommand{\CCSDTQ}{CCSDTQ} +\newcommand{\CCSDTQP}{CCSDTQP} +\newcommand{\CI}{CI} +\newcommand{\sCI}{sCI} +\newcommand{\exCI}{exFCI} +\newcommand{\FCI}{FCI} + +% basis +\newcommand{\AVDZ}{\emph{aug}-cc-pVDZ} +\newcommand{\AVTZ}{\emph{aug}-cc-pVTZ} +\newcommand{\DAVTZ}{d-\emph{aug}-cc-pVTZ} +\newcommand{\AVQZ}{\emph{aug}-cc-pVQZ} +\newcommand{\DAVQZ}{d-\emph{aug}-cc-pVQZ} +\newcommand{\TAVQZ}{t-\emph{aug}-cc-pVQZ} +\newcommand{\AVPZ}{\emph{aug}-cc-pV5Z} +\newcommand{\DAVPZ}{d-\emph{aug}-cc-pV5Z} +\newcommand{\PopleDZ}{6-31+G(d)} + +\begin{tabular}{ll|ccc|ccc|cc} + & & \multicolumn{3}{c}{\AVDZ} & \multicolumn{3}{c}{\AVTZ} & \multicolumn{2}{c}{Litt.}\\ + Molecule &State & {\CC{3}} & {\CCSDT} & {\exCI} & {\CC{3}} & {\CCSDT} & {\exCI}& Exp. & Theo. \\ + Acetaldehyde &$^1A'' (n \rightarrow \pis)$ &4.34&4.32&4.34& 4.31&4.29&4.31 & 4.27$^a$ &4.29$^b$ \\ + &$^3A'' (n \rightarrow \pis)$ &3.96&3.95&3.98& 3.95&3.94&4.0$^c$ & 3.97$^a$ &3.97$^b$ \\ + Cyclopropene &$^1B_1 (\sigma \rightarrow \pis)$ &6.72&6.71&6.7$^c$&6.68&6.68&6.6$^c$& 6.45$^d$ & 6.89$^e$ \\ + &$^1B_2 (\pi \rightarrow \pis)$ &6.77&6.78&6.82& 6.73&6.75&6.7$^c$ & 7.00$^f$ & 7.11$^e$ \\ + &$^3B_2 (\pi \rightarrow \pis)$ &4.34&4.35&4.35& 4.34& &4.38 & 4.16$^f$ & 4.28$^g$ \\ + &$^3B_1 (\sigma \rightarrow \pis)$ &6.43&6.43&6.43& 6.40& &6.45 & & 6.40$^g$ \\ + Diazomethane &$^1A_2 (\pi \rightarrow \pis)$ &3.10&3.10&3.09& 3.07&3.07&3.14 & 3.14$^h$ &3.21$^i$ \\ + &$^1B_1 (\pi \rightarrow 3s)$ &5.32&5.35&5.35& 5.45&5.48&5.54 & &5.33$^i$ \\ + &$^1A_1 (\pi \rightarrow \pis)$ &5.80&5.82&5.79& 5.84&5.86&5.90 & 5.9$^h$ &5.85$^i$ \\ + &$^3A_2 (\pi \rightarrow \pis)$ &2.84&2.84&2.81& 2.83&2.82&2.8$^c$ & &2.92$^j$ \\ + &$^3A_1 (\pi \rightarrow \pis)$ &4.05&4.04&4.03& 4.03&4.02&4.05 & &3.97$^j$ \\ + &$^3B_1 (\pi \rightarrow 3s)$ &5.17&5.20&5.18& 5.31&5.34&5.35 & & \\ + &$^3A_1 (\pi \rightarrow 3p)$ &6.83&6.83&6.81& 6.80& &6.82 & &7.02$^j$ \\ + &$^1A'' [\mathrm{F}] (\pi \rightarrow \pis)$ &0.68&0.67&0.65& 0.68&0.67&0.71 & & \\ + Formamide &$^1A'' (n \rightarrow \pis)$ &5.71&5.68&5.70 &5.66&5.63&5.7$^c$&5.8$^k$ &5.63$^l$ \\ + &$^1A' (n \rightarrow 3s)$ &6.65&6.64&6.67 &6.74&6.74& &6.35$^k$ &6.62$^l$ \\ + &$^1A' (\pi \rightarrow \pis)$$^m$ &7.63&7.62&7.64 &7.62& &7.63 &7.37$^k$ &7.22$^l$ \\ + &$^1A' (n \rightarrow 3p)$$^m$ &7.31&7.29& &7.40&7.38& &7.73$^k$ &7.66$^l$ \\ + &$^3A'' (n \rightarrow \pis)$ &5.42&5.39&5.42 &5.38& &5.4$^c$ &5.2$^k$ &5.34$^l$ \\ + &$^3A' (\pi \rightarrow \pis)$ &5.83&5.81&5.82 &5.82& &5.7$^c$ & &5.74$^l$ \\ + Ketene &$^1A_2 (\pi \rightarrow \pis)$ &3.89&3.88&3.84& 3.88&3.87&3.86 &3.7$^n$ &3.74$^o$ \\ + &$^1B_1 (n \rightarrow 3s)$ &5.83&5.86&5.88& 5.96&5.99&6.01 &5.86$^n$&5.82$^o$ \\ + &$^1A_2 (\pi \rightarrow 3p)$ &7.05&7.09&7.08& 7.16&7.20&7.18 & &7.00$^o$ \\ + &$^3A_2 (n \rightarrow \pis)$ &3.79&3.78&3.79& 3.78&3.78&3.77 &3.8$^p$ &3.62$^q$\\ + &$^3A_1 (\pi \rightarrow \pis)$ &5.62&5.61&5.64& 5.61&5.60&5.61 &5$^p$ &5.42$^q$\\ + &$^3B_1 (n \rightarrow 3s)$ &5.63&5.66&5.68& 5.76&5.80&5.79 &5.8$^p$ &5.69$^q$\\ + &$^3A_2 (\pi \rightarrow 3p)$ &7.01&7.05&7.07& 7.12&7.17&7.12 & & \\ + &$^1A''[\mathrm{F}] (\pi \rightarrow \pis)$ &1.00&0.99&0.96& 1.00&1.00&1.00 & & \\ + Nitrosomethane&$^1A'' (n \rightarrow \pis)$ &2.00&1.98&1.99& 1.96&1.95&2.0$^c$ &1.83$^r$&1.76$^s$\\ + &$^1A' (n,n \rightarrow \pis,\pis)$ &5.75&5.26&4.81& 5.76&5.29 &4.72 & &4.96$^s$\\ + &$^1A' (n \rightarrow 3s/3p)$ &6.20&6.19&6.29& 6.31&6.30&6.4$^c$ & &6.54$^s$\\ + &$^3A'' (n \rightarrow \pis)$ &1.13&1.12&1.15& 1.14&1.13&1.16 & &1.42$^t$\\ + &$^3A' (\pi \rightarrow \pis)$ &5.54&5.54&5.56& 5.51& &5.60 & &5.55$^t$\\ + &$^1A'' [\mathrm{F}] (n \rightarrow \pis)$ &1.70&1.69&1.70& 1.69&1.66 &1.7$^c$ & & \\ + Streptocyanine-C1&$^1B_2 (\pi \rightarrow \pis)$ &7.14&7.12&7.14& 7.13&7.11&7.1$^c$ & &7.16$^u$\\ + & $^3B_2 (\pi \rightarrow \pis)$ &5.48&5.47&5.47& 5.48&5.47&5.52 & & \\ + \end{tabular} \ No newline at end of file diff --git a/tools/datafileBuilder.py b/tools/datafileBuilder.py index 95f3a7c0..23704ea1 100755 --- a/tools/datafileBuilder.py +++ b/tools/datafileBuilder.py @@ -1,16 +1,19 @@ #!/usr/bin/env python3 import sys import re +from enum import IntEnum,auto,unique import numpy as np from pathlib import Path from lib import LaTeX +from lib.Orientation import Orientation from TexSoup import TexSoup from lib.data import AbsDataFile,ZPEDataFile,FluoDataFile,dataType import argparse -DEBUG=False +DEBUG=True parser = argparse.ArgumentParser() parser.add_argument('--file', type=argparse.FileType('r')) parser.add_argument('--type', type=str, choices=[t.name for t in list(dataType)]) +parser.add_argument('--MoleculeOrentation',type=str, choices=[t.name for t in list(Orientation)],default=Orientation.LINE.name) args = parser.parse_args() print(args) lines=args.file.readlines() @@ -29,5 +32,6 @@ switcher={ dataType.ZPE: ZPEDataFile } filecls=switcher.get(dataType[args.type]) -for col in range(1,np.size(dat,1)): - filecls.readFromTable(dat,col).toFile(datapath) \ No newline at end of file +datalst=filecls.readFromTable(dat,Orientation[args.MoleculeOrentation]) +for data in datalst: + data.toFile(datapath) \ No newline at end of file diff --git a/tools/lib/Orientation.py b/tools/lib/Orientation.py new file mode 100644 index 00000000..43a97308 --- /dev/null +++ b/tools/lib/Orientation.py @@ -0,0 +1,5 @@ +from enum import IntEnum,auto,unique +@unique +class Orientation(IntEnum): + LINE=auto() + COLUMN=auto() \ No newline at end of file diff --git a/tools/lib/data.py b/tools/lib/data.py index 62227ec9..83df3ad0 100644 --- a/tools/lib/data.py +++ b/tools/lib/data.py @@ -1,6 +1,8 @@ from collections import OrderedDict from enum import IntEnum,auto,unique +from .Orientation import Orientation import re +import numpy as np class state: def __init__(self,number, multiplicity, symetry): @@ -43,19 +45,43 @@ class dataFileBase(object): return lst @classmethod - def readFromTable(cls, table,column,firstState=state(1,1,"A_1")): - data=cls() - col=table[:,column] - data.molecule=str(col[0]) - data.method=method(str(col[2]),str(col[1])) - finsts=cls.convertState(table[3:,0],firstState) - for index,cell in enumerate(col[3:]): - if str(cell)!="": - val= list(cell.contents)[0] - val=float(str(val)) - data.excitations.append(excitationValue(firstState,finsts[index],val)) - return data - + def readFromTable(cls, table,orientation=Orientation.LINE ,firstState=state(1,1,"A_1")): + datalist=list() + if orientation==Orientation.LINE: + for col in range(1,np.size(table,1)): + data=cls() + col=table[:,col] + data.molecule=str(col[0]) + data.method=method(str(col[2]),str(col[1])) + finsts=cls.convertState(table[3:,0],firstState) + for index,cell in enumerate(col[3:]): + if str(cell)!="": + val= list(cell.contents)[0] + val=float(str(val)) + data.excitations.append(excitationValue(firstState,finsts[index],val)) + datalist.append(data) + return datalist + else: + subtablesindex=list() + firstindex=2 + for i in range(3,np.size(table,0)): + if str(table[i,0])!="": + subtablesindex.append((firstindex,i-1)) + firstindex=i + for first, last in subtablesindex: + for col in range(2,np.size(table,1)): + data=cls() + col=table[:,col] + data.molecule=str(table[first,0]) + data.method=method(str(col[1]),str(col[0])) + finsts=cls.convertState(table[first:last+1,1],firstState) + for index,cell in enumerate(col[first:last+1]): + if str(cell)!="": + val= list(cell.contents)[0] + val=float(str(val)) + data.excitations.append(excitationValue(firstState,finsts[index],val)) + datalist.append(data) + return datalist def getMetadata(self): dic=OrderedDict() dic["Molecule"]=self.molecule @@ -130,8 +156,8 @@ class oneStateDataFileBase(dataFileBase): return dic @classmethod - def readFromTable(cls, table,column,firstState=state(1,1,"A_1")): - data=super().readFromTable(table,column,firstState=firstState) + def readFromTable(cls, table,orientation=Orientation.LINE,firstState=state(1,1,"A_1")): + data=super().readFromTable(table,orientation,firstState=firstState) return data class AbsDataFile(oneStateDataFileBase): def __init__(self): @@ -156,8 +182,8 @@ class twoStateDataFileBase(dataFileBase): self.ES=None @classmethod - def readFromTable(cls, table,column,firstState=state(1,1,"A_1")): - data=super().readFromTable(table,column,firstState=firstState) + def readFromTable(cls, table,orientation=Orientation.LINE,firstState=state(1,1,"A_1")): + data=super().readFromTable(table,Orientation,firstState=firstState) return data def getMetadata(self): dic=super(twoStateDataFileBase,self).getMetadata()