[docs]class QCEssential(object):
"""Class to link literature and external representation of some
aspect of quantum chemistry (basis set, method, etc.) with a
shorthand and indexed representation of same.
"""
def __init__(self, name, fullname=None, latex=None, citation=None, pdfdatabase=None, comment=None):
"""
"""
self.name = name.lower()
self.fullname = fullname
if fullname is not None and latex is None:
self.latex = fullname
else:
self.latex = latex
self.citation = citation
self.dsdbid = pdfdatabase
self.comment = comment
def __str__(self):
text = ''
text += """ ==> %s BasisSet <==\n\n""" % (self.name)
text += """ Formal name: %s\n""" % (self.fullname)
text += """ LaTeX representation: %s\n""" % (self.latex)
text += """ PDF database id: %s\n""" % (self.dsdbid)
text += """ Literature citation: %s\n""" % (self.citation)
text += """ Comment: %s\n""" % (self.comment)
text += """\n"""
return text
[docs]class BasisSet(QCEssential):
"""Specialization of :pyclass:`QCEssential` for basis sets.
"""
def __init__(self, name, fullname=None, latex=None, citation=None, pdfdatabase=None, comment=None, zeta=None, build=None):
QCEssential.__init__(self, name, fullname, latex, citation, pdfdatabase, comment)
self.name = name.lower()
self.zeta = zeta
self.build = [[self.name]] if build is None else build
def __str__(self):
text = ''
text += """ ==> %s BasisSet Treatment <==\n\n""" % (self.name)
text += """ Formal name: %s\n""" % (self.fullname)
text += """ LaTeX representation: %s\n""" % (self.latex)
text += """ Zeta: %s\n""" % (self.zeta)
text += """ CBS build: %s\n""" % (self.build)
text += """ PDF database id: %s\n""" % (self.dsdbid)
text += """ Literature citation: %s\n""" % (self.citation)
text += """ Comment: %s\n""" % (self.comment)
text += """\n"""
return text
[docs]class Method(QCEssential):
"""Specialization of :pyclass:`QCEssential` for quantum chemical methods.
"""
def __init__(self, name, fullname=None, latex=None, citation=None, pdfdatabase=None, comment=None):
QCEssential.__init__(self, name, fullname, latex, citation, pdfdatabase, comment)
self.name = name.upper()
def __str__(self):
text = ''
text += """ ==> %s Method <==\n\n""" % (self.name)
text += """ Formal name: %s\n""" % (self.fullname)
text += """ LaTeX representation: %s\n""" % (self.latex)
text += """ PDF database id: %s\n""" % (self.dsdbid)
text += """ Literature citation: %s\n""" % (self.citation)
text += """ Comment: %s\n""" % (self.comment)
text += """\n"""
return text
[docs]class Error(QCEssential):
"""Specialization of :pyclass:`QCEssential` for measures of error.
"""
def __init__(self, name, fullname=None, latex=None, citation=None, pdfdatabase=None, comment=None):
QCEssential.__init__(self, name, fullname, latex, citation, pdfdatabase, comment)
self.name = name.lower()
def __str__(self):
text = ''
text += """ ==> %s Error Measure <==\n\n""" % (self.name)
text += """ Formal name: %s\n""" % (self.fullname)
text += """ LaTeX representation: %s\n""" % (self.latex)
text += """ PDF database id: %s\n""" % (self.dsdbid)
text += """ Literature citation: %s\n""" % (self.citation)
text += """ Comment: %s\n""" % (self.comment)
text += """\n"""
return text
_tlist = [
BasisSet('dz', fullname='cc-pVDZ'),
BasisSet('jadz', fullname='jun-cc-pVDZ'),
BasisSet('hadz', fullname='heavy-aug-cc-pVDZ'),
BasisSet('adz', fullname='aug-cc-pVDZ'),
BasisSet('addz', fullname='aug-cc-pV(D+d)Z'),
BasisSet('tz', fullname='cc-pVTZ'),
BasisSet('matz', fullname='may-cc-pVTZ'),
BasisSet('jatz', fullname='jun-cc-pVTZ'),
BasisSet('hatz', fullname='heavy-aug-cc-pVTZ'),
BasisSet('atz', fullname='aug-cc-pVTZ'),
BasisSet('qz', fullname='cc-pVQZ'),
BasisSet('aaqz', fullname='apr-cc-pVQZ'),
BasisSet('maqz', fullname='may-cc-pVQZ'),
BasisSet('jaqz', fullname='jun-cc-pVQZ'),
BasisSet('haqz', fullname='heavy-aug-cc-pVQZ'),
BasisSet('aqz', fullname='aug-cc-pVQZ'),
BasisSet('a5z', fullname='aug-cc-pV5Z'),
BasisSet('dtz', fullname='cc-pVDTZ', build=[None, ['tz', 'dtz']]),
BasisSet('jadtz', fullname='jun-cc-pVDTZ', build=[None, ['jatz', 'jadtz']]),
BasisSet('hadtz', fullname='heavy-aug-cc-pVDTZ', build=[None, ['hatz', 'hadtz']]),
BasisSet('adtz', fullname='aug-cc-pVDTZ', build=[['adtz'], ['atz', 'adtz']]),
BasisSet('tqz', fullname='cc-pVTQZ', build=[None, ['qz', 'tqz']]),
BasisSet('matqz', fullname='may-cc-pVTQZ', build=[None, ['maqz', 'matqz']]),
BasisSet('jatqz', fullname='jun-cc-pVTQZ', build=[None, ['jaqz', 'jatqz']]),
BasisSet('hatqz', fullname='heavy-aug-cc-pVTQZ', build=[None, ['haqz', 'hatqz']]),
BasisSet('atqz', fullname='aug-cc-pVTQZ', build=[['atqz'], ['aqz', 'atqz']]),
BasisSet('aq5z', fullname='aug-cc-pVQ5Z', build=[['aq5z'], ['a5z', 'aq5z']]),
BasisSet('a6z', fullname='aug-cc-pV6Z'),
BasisSet('a56z', fullname='aug-cc-pV56Z', build=[['a56z'], ['a6z', 'a56z']]),
BasisSet('atzdz', fullname='[aTZ; D:DZ]', latex="""[aTZ; $\delta$:DZ]""",
build=[None, None, ['atz', 'atz', 'dz']]),
BasisSet('adtzdz', fullname='[aDTZ; D:DZ]', latex="""[aDTZ; $\delta$:DZ]""",
build=[None, None, ['atz', 'adtz', 'dz']]),
BasisSet('atqzdz', fullname='[aTQZ; D:DZ]', latex="""[aTQZ; $\delta$:DZ]""",
build=[None, None, ['aqz', 'atqz', 'dz']]),
BasisSet('atzjadz', fullname='[aTZ; D:jaDZ]', latex="""[aTZ; $\delta$:jaDZ]""",
build=[None, None, ['atz', 'atz', 'jadz']]),
BasisSet('adtzjadz', fullname='[aDTZ; D:jaDZ]', latex="""[aDTZ; $\delta$:jaDZ]""",
build=[None, None, ['atz', 'adtz', 'jadz']]),
BasisSet('atqzjadz', fullname='[aTQZ; D:jaDZ]', latex="""[aTQZ; $\delta$:jaDZ]""",
build=[None, None, ['aqz', 'atqz', 'jadz']]),
BasisSet('atzhadz', fullname='[aTZ; D:haDZ]', latex="""[aTZ; $\delta$:haDZ]""",
build=[None, None, ['atz', 'atz', 'hadz']]),
BasisSet('adtzhadz', fullname='[aDTZ; D:haDZ]', latex="""[aDTZ; $\delta$:haDZ]""",
build=[None, None, ['atz', 'adtz', 'hadz']]),
BasisSet('atqzhadz', fullname='[aTQZ; D:haDZ]', latex="""[aTQZ; $\delta$:haDZ]""",
build=[None, None, ['aqz', 'atqz', 'hadz']]),
BasisSet('atzadz', fullname='[aTZ; D:aDZ]', latex="""[aTZ; $\delta$:aDZ]""",
build=[None, None, ['atz', 'atz', 'adz']]),
BasisSet('adtzadz', fullname='[aDTZ; D:aDZ]', latex="""[aDTZ; $\delta$:aDZ]""",
build=[None, None, ['atz', 'adtz', 'adz']]),
BasisSet('atqzadz', fullname='[aTQZ; D:aDZ]', latex="""[aTQZ; $\delta$:aDZ]""",
build=[None, None, ['aqz', 'atqz', 'adz']]),
BasisSet('aq5zadz', fullname='[aQ5Z; D:aDZ]', latex="""[aQ5Z; $\delta$:aDZ]""",
build=[None, None, ['a5z', 'aq5z', 'adz']]),
BasisSet('atzdtz', fullname='[aTZ; D:DTZ]', latex="""[aTZ; $\delta$:DTZ]""",
build=[None, None, ['atz', 'atz', 'dtz']]),
BasisSet('atqzdtz', fullname='[aTQZ; D:DTZ]', latex="""[aTQZ; $\delta$:DTZ]""",
build=[None, None, ['aqz', 'atqz', 'dtz']]),
BasisSet('atzjadtz', fullname='[aTZ; D:jaDTZ]', latex="""[aTZ; $\delta$:jaDTZ]""",
build=[None, None, ['atz', 'atz', 'jadtz']]),
BasisSet('atqzjadtz', fullname='[aTQZ; D:jaDTZ]', latex="""[aTQZ; $\delta$:jaDTZ]""",
build=[None, None, ['aqz', 'atqz', 'jadtz']]),
BasisSet('atzhadtz', fullname='[aTZ; D:haDTZ]', latex="""[aTZ; $\delta$:haDTZ]""",
build=[None, None, ['atz', 'atz', 'hadtz']]),
BasisSet('atqzhadtz', fullname='[aTQZ; D:haDTZ]', latex="""[aTQZ; $\delta$:haDTZ]""",
build=[None, None, ['aqz', 'atqz', 'hadtz']]),
BasisSet('atzadtz', fullname='[aTZ; D:aDTZ]', latex="""[aTZ; $\delta$:aDTZ]""",
build=[None, None, ['atz', 'atz', 'adtz']]),
BasisSet('atqzadtz', fullname='[aTQZ; D:aDTZ]', latex="""[aTQZ; $\delta$:aDTZ]""",
build=[None, None, ['aqz', 'atqz', 'adtz']]),
BasisSet('aq5zadtz', fullname='[aQ5Z; D:aDTZ]', latex="""[aQ5Z; $\delta$:aDTZ]""",
build=[None, None, ['a5z', 'aq5z', 'adtz']]),
BasisSet('atqztz', fullname='[aTQZ; D:TZ]', latex="""[aTQZ; $\delta$:TZ]""",
build=[None, None, ['aqz', 'atqz', 'tz']]),
BasisSet('atqzjatz', fullname='[aTQZ; D:jaTZ]', latex="""[aTQZ; $\delta$:jaTZ]""",
build=[None, None, ['aqz', 'atqz', 'jatz']]),
BasisSet('atqzmatz', fullname='[aTQZ; D:maTZ]', latex="""[aTQZ; $\delta$:maTZ]""",
build=[None, None, ['aqz', 'atqz', 'matz']]),
BasisSet('atqzhatz', fullname='[aTQZ; D:haTZ]', latex="""[aTQZ; $\delta$:haTZ]""",
build=[None, None, ['aqz', 'atqz', 'hatz']]),
BasisSet('atqzatz', fullname='[aTQZ; D:aTZ]', latex="""[aTQZ; $\delta$:aTZ]""",
build=[None, None, ['aqz', 'atqz', 'atz']]),
BasisSet('aq5zatz', fullname='[aQ5Z; D:aTZ]', latex="""[aQ5Z; $\delta$:aTZ]""",
build=[None, None, ['a5z', 'aq5z', 'atz']]),
BasisSet('dzf12', fullname='cc-pVDZ-F12'),
BasisSet('tzf12', fullname='cc-pVTZ-F12'),
BasisSet('qzf12', fullname='cc-pVQZ-F12'),
BasisSet('dtzf12', fullname='cc-pVDTZ-F12', build=[['dtzf12'], ['tzf12', 'dtzf12']]),
BasisSet('tqzf12', fullname='cc-pVTQZ-F12', build=[['tqzf12'], ['qzf12', 'tqzf12']]),
BasisSet('hill1_adtz', build=[['hillcc_adtz'], ['atz', 'hillcc_adtz']]), # TODO should have None or non-xtpl first element?
BasisSet('hill1_atqz', build=[['hillcc_atqz'], ['aqz', 'hillcc_atqz']]),
BasisSet('hill1_aq5z', build=[['hillcc_aq5z'], ['a5z', 'hillcc_aq5z']]),
BasisSet('hill1_dtzf12', build=[['hillcc_dtzf12'], ['tzf12', 'hillcc_dtzf12']]),
BasisSet('hill1_tqzf12', build=[['hillcc_tqzf12'], ['qzf12', 'hillcc_tqzf12']]),
BasisSet('hill2_dtzf12', build=[None, None, ['tzf12', 'hillcc_dtzf12', 'hillt_dtzf12']]),
BasisSet('hill2_tqzf12', build=[None, None, ['qzf12', 'hillcc_tqzf12', 'hillt_tqzf12']]),
BasisSet('hill2_adtz', build=[None, None, ['atz', 'hillcc_adtz', 'hillt_adtz']]),
BasisSet('hill2_atqz', build=[None, None, ['aqz', 'hillcc_atqz', 'hillt_atqz']]),
BasisSet('hill2_aq5z', build=[None, None, ['a5z', 'hillcc_aq5z', 'hillt_aq5z']]),
BasisSet('dadz', fullname='double-aug-cc-pVDZ'),
BasisSet('datz', fullname='double-aug-cc-pVTZ'),
BasisSet('631pgs', fullname='6-31+G(d)'),
BasisSet('6311pg_3df_2p_', fullname='6-311+G(3df,2p)'),
BasisSet('6311ppg_3df_2p_', fullname='6-311++G(3df,2p)'),
]
bases = {}
for item in _tlist:
bases[item.name] = item
# Key name must be [A-Z], [0-9], and _, being either all upper or all lowercase according to Essential
# fullname can be anything on the keyboard, no ascii codes
# latex can contain escape codes for LaTeX
_tlist = [
Method('SAPT0', fullname='SAPT0'),
Method('SAPT0S', fullname='sSAPT0', latex="""\\textit{s}SAPT0"""),
Method('SAPTSCS', fullname='SCS-SAPT0'),
Method('SAPTDFT', fullname='DFT-SAPT'),
Method('SAPT2', fullname='SAPT2'),
Method('SAPT2P', fullname='SAPT2+'),
Method('SAPT3', fullname='SAPT2+(3)'),
Method('SAPT3F', fullname='SAPT2+3'),
Method('SAPT2PC', fullname='SAPT2+(CCD)'),
Method('SAPT3C', fullname='SAPT2+(3)(CCD)'),
Method('SAPT3FC', fullname='SAPT2+3(CCD)'),
Method('SAPT2PM', fullname='SAPT2+dMP2', latex="""SAPT2+$\delta$MP2"""),
Method('SAPT3M', fullname='SAPT2+(3)dMP2', latex="""SAPT2+(3)$\delta$MP2"""),
Method('SAPT3FM', fullname='SAPT2+3dMP2', latex="""SAPT2+3$\delta$MP2"""),
Method('SAPT2PCM', fullname='SAPT2+(CCD)dMP2', latex="""SAPT2+(CCD)$\delta$MP2"""),
Method('SAPT3CM', fullname='SAPT2+(3)(CCD)dMP2', latex="""SAPT2+(3)(CCD)$\delta$MP2"""),
Method('SAPT3FCM', fullname='SAPT2+3(CCD)dMP2', latex="""SAPT2+3(CCD)$\delta$MP2"""),
Method('SAPT2LCM', fullname='MP2(CCD)', comment="""Identical to SAPT2+(CCD)dMP2"""),
Method('HF', fullname='HF'),
Method('MP2', fullname='MP2'),
Method('SCSMP2', fullname='SCS-MP2'),
Method('SCSNMP2', fullname='SCS(N)-MP2'),
Method('SCSMIMP2', fullname='SCS(MI)-MP2'),
Method('DWMP2', fullname='DW-MP2'),
Method('MP2C', fullname='MP2C'),
Method('MP3', fullname='MP3'),
Method('MP25', fullname='MP2.5'),
Method('CCSD', fullname='CCSD'),
Method('SCSCCSD', fullname='SCS-CCSD'),
Method('SCSMICCSD', fullname='SCS(MI)-CCSD'),
Method('CCSDT', fullname='CCSD(T)'),
Method('HFCABS', fullname='HF-CABS'),
Method('MP2F12', fullname='MP2-F12'),
Method('SCSMP2F12', fullname='SCS-MP2-F12'),
Method('SCSNMP2F12', fullname='SCS(N)-MP2-F12'),
Method('SCSMIMP2F12', fullname='SCS(MI)-MP2-F12'),
Method('DWMP2F12', fullname='DW-MP2-F12'),
Method('MP2CF12', fullname='MP2C-F12'),
Method('CCSDAF12', fullname='CCSD-F12a'),
Method('CCSDBF12', fullname='CCSD-F12b'),
Method('CCSDCF12', fullname='CCSD-F12c'),
Method('SCSCCSDAF12', fullname='SCS-CCSD-F12a'),
Method('SCSCCSDBF12', fullname='SCS-CCSD-F12b'),
Method('SCSCCSDCF12', fullname='SCS-CCSD-F12c'),
Method('SCMICCSDAF12', fullname='SCS(MI)-CCSD-F12a'),
Method('SCMICCSDBF12', fullname='SCS(MI)-CCSD-F12b'),
Method('SCMICCSDCF12', fullname='SCS(MI)-CCSD-F12c'),
Method('CCSDTAF12', fullname='CCSD(T**)-F12a'),
Method('CCSDTBF12', fullname='CCSD(T**)-F12b'),
Method('CCSDTCF12', fullname='CCSD(T**)-F12c'),
Method('DWCCSDTF12', fullname='DW-CCSD(T**)-F12'),
# build=lambda: ['DW-CCSD(T**)-F12 TOTAL ENERGY'],
# ['HF-CABS TOTAL ENERGY', 'DW-CCSD(T**)-F12 CORRELATION ENERGY'],
# ['HF-CABS TOTAL ENERGY', 'MP2-F12 CORRELATION ENERGY', 'DW-CCSD(T**)-F12 CC CORRECTION ENERGY'],
# ['HF-CABS TOTAL ENERGY', 'MP2-F12 CORRELATION ENERGY', 'DW-CCSD-F12 CC CORRECTION ENERGY', 'DW-(T**)-F12 CORRECTION ENERGY'])
Method('B97', fullname='B97'),
Method('B97D2', fullname='B97-D2'),
Method('B97D3', fullname='B97-D3'),
Method('B97D3BJ', fullname='B97-D3bj'),
Method('B3LYP', fullname='B3LYP'),
Method('B3LYPD2', fullname='B3LYP-D2'),
Method('B3LYPD3', fullname='B3LYP-D3'),
Method('B3LYPD3', fullname='B3LYP-D3'),
Method('B3LYPXDM', fullname='B3LYP-XDM'),
Method('B2PLYP', fullname='B2PLYP'),
Method('B2PLYPD2', fullname='B2PLYP-D2'),
Method('B2PLYPD3', fullname='B2PLYP-D3'),
Method('B2PLYPD3BJ', fullname='B2PLYP-D3bj'),
Method('M052X', fullname='M05-2X'),
Method('M052XD3', fullname='M05-2X-D3'),
Method('M062X', fullname='M06-2X'),
Method('M062XD3', fullname='M06-2X-D3'),
Method('M08HX', fullname='M08-HX'),
Method('M08SO', fullname='M08-SO'),
Method('M11', fullname='M11'),
Method('M11L', fullname='M11L'),
Method('XYG3', fullname='XYG3'),
Method('DLDFD', fullname='dlDF+D'),
Method('DSDPBEP86', fullname='DSD-PBEP86'),
Method('VV10', fullname='VV10'),
Method('LCVV10', fullname='LC-VV10'),
Method('WB97XD', fullname='wB97X-D', latex="""$\omega$B97X-D"""),
Method('WB97X2', fullname='wB97X-2', latex="""$\omega$B97X-2"""),
Method('PBE', fullname='PBE'),
Method('PBED2', fullname='PBE-D2'),
Method('PBED3', fullname='PBE-D3'),
Method('PBED3BJ', fullname='PBE-D3bj'),
Method('PBE0', fullname='PBE0'),
Method('PBE0D2', fullname='PBE0-D2'),
Method('PBE0D3', fullname='PBE0-D3'),
Method('PBE0D3BJ', fullname='PBE0-D3BJ'),
Method('PBE02', fullname='PBE0-2'),
Method('CCSDTNSAF12', fullname='CCSD(T)-F12a'),
Method('CCSDTNSBF12', fullname='CCSD(T)-F12b'),
Method('CCSDTNSCF12', fullname='CCSD(T)-F12c'),
Method('B970', fullname='B970'),
Method('B970D2', fullname='B970-D2'),
Method('BP86', fullname='BP86'),
Method('BP86D2', fullname='BP86-D2'),
Method('BP86D3', fullname='BP86-D3'),
Method('BP86D3BJ', fullname='BP86-D3bj'),
Method('CCSDTQ', fullname='CCSDT(Q)'),
Method('CCSDFULLT', fullname='CCSDT'),
Method('CCSDTSAF12', fullname='CCSD(T*)-F12a'),
Method('CCSDTSBF12', fullname='CCSD(T*)-F12b'),
Method('CCSDTSCF12', fullname='CCSD(T*)-F12c'),
Method('DWCCSDTNSF12', fullname='DW-CCSD(T)-F12'),
Method('DWCCSDTSF12', fullname='DW-CCSD(T*)-F12'),
Method('DELTQ', fullname='d(TQ)', latex="""$\delta$(TQ)"""), # TODO kill this once non-IE impl in reap-DB
Method('DEL2T', fullname='d(T)', latex="""$\delta$(T)"""), # TODO kill this once non-IE impl in reap-DB
]
methods = {}
for item in _tlist:
methods[item.name] = item
_tlist = [
Error('maxe', fullname='maxE'),
Error('mine', fullname='minE'),
Error('me', fullname='ME'),
Error('mae', fullname='MAE'),
Error('rmse', fullname='rmsE'),
Error('stde', fullname='stdE'),
Error('maxpe', fullname='maxPE'),
Error('minpe', fullname='minPE'),
Error('mpe', fullname='MPE'),
Error('mape', fullname='MAPE', latex="""MA\%E"""),
Error('rmspe', fullname='rmsPE'),
Error('stdpe', fullname='stdPE'),
Error('maxpbe', fullname='maxPBE'),
Error('minpbe', fullname='minPBE'),
Error('mpbe', fullname='MPBE'),
Error('mapbe', fullname='MAPBE', latex="""MA\%BE"""),
Error('rmspbe', fullname='rmsPBE'),
Error('stdpbe', fullname='stdPBE'),
]
errors = {}
for item in _tlist:
errors[item.name] = item