digichem-core 6.0.0rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- digichem/__init__.py +75 -0
- digichem/basis.py +116 -0
- digichem/config/README +3 -0
- digichem/config/__init__.py +5 -0
- digichem/config/base.py +321 -0
- digichem/config/locations.py +14 -0
- digichem/config/parse.py +90 -0
- digichem/config/util.py +117 -0
- digichem/data/README +4 -0
- digichem/data/batoms/COPYING +18 -0
- digichem/data/batoms/LICENSE +674 -0
- digichem/data/batoms/README +2 -0
- digichem/data/batoms/__init__.py +0 -0
- digichem/data/batoms/batoms-renderer.py +351 -0
- digichem/data/config/digichem.yaml +714 -0
- digichem/data/functionals.csv +15 -0
- digichem/data/solvents.csv +185 -0
- digichem/data/tachyon/COPYING.md +5 -0
- digichem/data/tachyon/LICENSE +30 -0
- digichem/data/tachyon/tachyon_LINUXAMD64 +0 -0
- digichem/data/vmd/common.tcl +468 -0
- digichem/data/vmd/generate_combined_orbital_images.tcl +70 -0
- digichem/data/vmd/generate_density_images.tcl +45 -0
- digichem/data/vmd/generate_dipole_images.tcl +68 -0
- digichem/data/vmd/generate_orbital_images.tcl +57 -0
- digichem/data/vmd/generate_spin_images.tcl +66 -0
- digichem/data/vmd/generate_structure_images.tcl +40 -0
- digichem/datas.py +14 -0
- digichem/exception/__init__.py +7 -0
- digichem/exception/base.py +133 -0
- digichem/exception/uncatchable.py +63 -0
- digichem/file/__init__.py +1 -0
- digichem/file/base.py +364 -0
- digichem/file/cube.py +284 -0
- digichem/file/fchk.py +94 -0
- digichem/file/prattle.py +277 -0
- digichem/file/types.py +97 -0
- digichem/image/__init__.py +6 -0
- digichem/image/base.py +113 -0
- digichem/image/excited_states.py +335 -0
- digichem/image/graph.py +293 -0
- digichem/image/orbitals.py +239 -0
- digichem/image/render.py +617 -0
- digichem/image/spectroscopy.py +797 -0
- digichem/image/structure.py +115 -0
- digichem/image/vmd.py +826 -0
- digichem/input/__init__.py +3 -0
- digichem/input/base.py +78 -0
- digichem/input/digichem_input.py +500 -0
- digichem/input/gaussian.py +140 -0
- digichem/log.py +179 -0
- digichem/memory.py +166 -0
- digichem/misc/__init__.py +4 -0
- digichem/misc/argparse.py +44 -0
- digichem/misc/base.py +61 -0
- digichem/misc/io.py +239 -0
- digichem/misc/layered_dict.py +285 -0
- digichem/misc/text.py +139 -0
- digichem/misc/time.py +73 -0
- digichem/parse/__init__.py +13 -0
- digichem/parse/base.py +220 -0
- digichem/parse/cclib.py +138 -0
- digichem/parse/dump.py +253 -0
- digichem/parse/gaussian.py +130 -0
- digichem/parse/orca.py +96 -0
- digichem/parse/turbomole.py +201 -0
- digichem/parse/util.py +523 -0
- digichem/result/__init__.py +6 -0
- digichem/result/alignment/AA.py +114 -0
- digichem/result/alignment/AAA.py +61 -0
- digichem/result/alignment/FAP.py +148 -0
- digichem/result/alignment/__init__.py +3 -0
- digichem/result/alignment/base.py +310 -0
- digichem/result/angle.py +153 -0
- digichem/result/atom.py +742 -0
- digichem/result/base.py +258 -0
- digichem/result/dipole_moment.py +332 -0
- digichem/result/emission.py +402 -0
- digichem/result/energy.py +323 -0
- digichem/result/excited_state.py +821 -0
- digichem/result/ground_state.py +94 -0
- digichem/result/metadata.py +644 -0
- digichem/result/multi.py +98 -0
- digichem/result/nmr.py +1086 -0
- digichem/result/orbital.py +647 -0
- digichem/result/result.py +244 -0
- digichem/result/soc.py +272 -0
- digichem/result/spectroscopy.py +514 -0
- digichem/result/tdm.py +267 -0
- digichem/result/vibration.py +167 -0
- digichem/test/__init__.py +6 -0
- digichem/test/conftest.py +4 -0
- digichem/test/test_basis.py +71 -0
- digichem/test/test_calculate.py +30 -0
- digichem/test/test_config.py +78 -0
- digichem/test/test_cube.py +369 -0
- digichem/test/test_exception.py +16 -0
- digichem/test/test_file.py +104 -0
- digichem/test/test_image.py +337 -0
- digichem/test/test_input.py +64 -0
- digichem/test/test_parsing.py +79 -0
- digichem/test/test_prattle.py +36 -0
- digichem/test/test_result.py +489 -0
- digichem/test/test_translate.py +112 -0
- digichem/test/util.py +207 -0
- digichem/translate.py +591 -0
- digichem_core-6.0.0rc1.dist-info/METADATA +96 -0
- digichem_core-6.0.0rc1.dist-info/RECORD +111 -0
- digichem_core-6.0.0rc1.dist-info/WHEEL +4 -0
- digichem_core-6.0.0rc1.dist-info/licenses/COPYING.md +10 -0
- digichem_core-6.0.0rc1.dist-info/licenses/LICENSE +11 -0
digichem/result/multi.py
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# General imports.
|
|
2
|
+
import hashlib
|
|
3
|
+
|
|
4
|
+
# Digichem imports.
|
|
5
|
+
from digichem.result.result import Result_set
|
|
6
|
+
from digichem.result.metadata import Metadata
|
|
7
|
+
from digichem.result.atom import Atom_list
|
|
8
|
+
from digichem.result.ground_state import Ground_state
|
|
9
|
+
from digichem.result.excited_state import Excited_state_list
|
|
10
|
+
from digichem.result.emission import Relaxed_excited_state
|
|
11
|
+
from digichem.result.orbital import Molecular_orbital_list
|
|
12
|
+
from digichem.result.alignment.base import Alignment, Minimal
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Merged(Result_set):
|
|
16
|
+
"""
|
|
17
|
+
A type of result set that represents one or more separate calculations merged into one result set.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, results, *args, vertical_emission = None, adiabatic_emission = None, **kwargs):
|
|
21
|
+
"""
|
|
22
|
+
Constructor for Merged result sets.
|
|
23
|
+
:param vertical_emission: An optional dictionary of Relaxed_excited_state objects representing vertical emission energies (one for each multiplicity).
|
|
24
|
+
:param adiabatic_emission: An optional dictionary of Relaxed_excited_state objects representing vertical adiabatic energies (one for each multiplicity).
|
|
25
|
+
"""
|
|
26
|
+
super().__init__(*args, **kwargs)
|
|
27
|
+
self.results = results
|
|
28
|
+
self.emission.vertical = vertical_emission if vertical_emission is not None else {}
|
|
29
|
+
self.emission.adiabatic = adiabatic_emission if adiabatic_emission is not None else {}
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_results(self, *results, options):
|
|
33
|
+
"""
|
|
34
|
+
Create a Merged result set object from a number of result sets.
|
|
35
|
+
|
|
36
|
+
:param *results: List of result sets to merge.
|
|
37
|
+
:param options: A Digichem config nested dictionary containing options to control parsing.
|
|
38
|
+
"""
|
|
39
|
+
# First, get a merged metadata object.
|
|
40
|
+
metadatas = [result.metadata for result in results]
|
|
41
|
+
merged_metadata = Metadata.merge(*metadatas)
|
|
42
|
+
|
|
43
|
+
# 'Merge' our atoms.
|
|
44
|
+
raw_atoms = Atom_list.merge(*[result.raw_atoms for result in results], charge = merged_metadata.charge)
|
|
45
|
+
# And alignment.
|
|
46
|
+
alignment_class = Alignment.from_class_handle(options['alignment']) if options['alignment'] is not None else Minimal
|
|
47
|
+
atoms = alignment_class(raw_atoms, charge = merged_metadata.charge)
|
|
48
|
+
|
|
49
|
+
# Use special method for merging orbitals.
|
|
50
|
+
orbitals, beta_orbitals = Molecular_orbital_list.merge_orbitals([result.orbitals for result in results], [result.beta_orbitals for result in results])
|
|
51
|
+
|
|
52
|
+
# Merge NMR (which depends on atoms and options).
|
|
53
|
+
nmr = type(getattr(results[0], "nmr")).merge(*[getattr(result, "nmr") for result in results], atoms = atoms, options = options)
|
|
54
|
+
|
|
55
|
+
# Merge remaining attributes.
|
|
56
|
+
attrs = {}
|
|
57
|
+
for attr in ["energies", "pdm", "excited_states", "vibrations", "soc"]:
|
|
58
|
+
attrs[attr] = type(getattr(results[0], attr)).merge(*[getattr(result, attr) for result in results])
|
|
59
|
+
|
|
60
|
+
# Get a new ground state.
|
|
61
|
+
ground_state = Ground_state.from_energies(merged_metadata.charge, merged_metadata.multiplicity, attrs['energies'])
|
|
62
|
+
|
|
63
|
+
# Build new list of energy states.
|
|
64
|
+
energy_states = Excited_state_list()
|
|
65
|
+
energy_states.append(ground_state)
|
|
66
|
+
energy_states.extend(attrs['excited_states'])
|
|
67
|
+
|
|
68
|
+
# Get a new ID for the merged object.
|
|
69
|
+
# This is generated by combining the hashes of each of the contributing results.
|
|
70
|
+
hasher = hashlib.sha1()
|
|
71
|
+
|
|
72
|
+
for result in results:
|
|
73
|
+
if result._id:
|
|
74
|
+
byte_hash = bytes.fromhex(result._id)
|
|
75
|
+
|
|
76
|
+
hasher.update(byte_hash)
|
|
77
|
+
|
|
78
|
+
_id = hasher.hexdigest()
|
|
79
|
+
|
|
80
|
+
merged_results = self(
|
|
81
|
+
_id = _id,
|
|
82
|
+
metadata = merged_metadata,
|
|
83
|
+
results = results,
|
|
84
|
+
ground_state = ground_state,
|
|
85
|
+
raw_atoms = raw_atoms,
|
|
86
|
+
atoms = atoms,
|
|
87
|
+
energy_states = energy_states,
|
|
88
|
+
orbitals = orbitals,
|
|
89
|
+
beta_orbitals = beta_orbitals,
|
|
90
|
+
nmr = nmr,
|
|
91
|
+
**attrs
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Try and guess emission.
|
|
95
|
+
merged_results.emission.vertical, merged_results.emission.adiabatic = Relaxed_excited_state.guess_from_results(*results)
|
|
96
|
+
|
|
97
|
+
# Done.
|
|
98
|
+
return merged_results
|