01-Gaussian Parse and Inspect¶
Parse a real Gaussian log fixture with AutoParser, inspect frame status, and output a compact, verifiable summary.
import os
from pathlib import Path
os.environ.setdefault("TQDM_DISABLE", "1")
from molop.io import AutoParser
def find_repo_root(start: Path | None = None) -> Path:
current = (start or Path.cwd()).resolve()
for parent in [current, *current.parents]:
if (parent / "pyproject.toml").exists():
return parent
raise FileNotFoundError("Could not find repository root containing pyproject.toml")
repo_root = find_repo_root()
fixture_path = repo_root / "tests/test_files/g16log/2-TS1-Opt.log"
relative_fixture_path = fixture_path.relative_to(repo_root)
batch = AutoParser(fixture_path.as_posix(), n_jobs=1)
parsed_file = batch[0]
last_frame = parsed_file[-1]
print("summary_snippet:")
parsed_file.to_summary_df()
MolOP parsing with single process: 0%| | 0/1 [00:00<?, ?it/s]
summary_snippet:
| DiskStorage | General | Calc Parameter | Environment | Status | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FilePath | FileFormat | Charge | Multiplicity | CanonicalSMILES | NumAtoms | FrameID | Software | Version | Method | ... | Functional | Keywords | SolventModel | Solvent | Temperature (kelvin) | Pressure (standard_atmosphere) | IsError | IsNormal | IsTS | IsOptimized | |
| 0 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 0 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 1 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 1 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 2 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 2 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 3 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 3 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 4 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 4 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 101 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 101 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 102 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 102 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 103 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 103 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | True |
| 104 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 104 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP-GD3BJ | # opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdi... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | False | False |
| 105 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 105 | Gaussian | ES64L-G16RevC.01 | DFT | ... | RB3LYP | #N Geom=AllCheck Guess=TCheck SCRF=Check GenCh... | None | None | 298.15 kelvin | 1.0 standard_atmosphere | False | True | True | False |
106 rows × 21 columns
A richer summary can be obtained by setting brief=False.
parsed_file.to_summary_df(brief=False)
| DiskStorage | General | Calc Parameter | ... | Thermal | Vibration | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FilePath | FileFormat | Charge | Multiplicity | CanonicalSMILES | NumAtoms | FrameID | Software | Version | Method | ... | TCH (kilocalorie / mole) | TCG (kilocalorie / mole) | U_0 (kilocalorie / mole) | U_T (kilocalorie / mole) | H_T (kilocalorie / mole) | G_T (kilocalorie / mole) | S (calorie / kelvin / mole) | C_V (calorie / kelvin / mole) | num_imaginary | num_vibrations | |
| 0 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 0 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 1 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 2 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 3 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 3 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 4 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 4 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 101 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 101 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 102 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 102 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 103 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 103 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 104 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 104 | Gaussian | ES64L-G16RevC.01 | DFT | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 105 | /Users/tmj/Documents/proj/MolOP/tests/test_fil... | .log | 0 | 1 | CC1=C=C2[CH-]C=CC=C2C=C1.Cc1ccc(C[N+]2[C@H](C[... | 101 | 105 | Gaussian | ES64L-G16RevC.01 | DFT | ... | 536.632297 | 444.716592 | -2301115.979432 | -2301081.95775 | -2301081.365382 | -2301173.280459 | 208.673 | 308.286 | 1 | 297 |
106 rows × 41 columns
File Information¶
parsed_file
frames=106, G16LogFileDisk(charge=0, multiplicity=1, qm_software='Gaussian', qm_software_version='ES64L-G16RevC.01', keywords='# opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdiis) freq b3lyp/genecp em=gd3bj', method='DFT', basis_set='pseudopotential', functional='RB3LYP-GD3BJ', resources_raw='', solvent=None, temperature=<Quantity(298.15, 'kelvin')>, pressure=<Quantity(1.0, 'standard_atmosphere')>, running_time=<Quantity(1065479.2, 'second')>, status=Status(scf_converged=True, normal_terminated=True), geometry_optimization_status=None, options='%nprocs=32\n%mem=80GB', title_card='Title Card Required', job_type='FTS', filename='2-TS1-Opt.log')
parsed_file.model_dump()
{'charge': 0,
'multiplicity': 1,
'qm_software': 'Gaussian',
'qm_software_version': 'ES64L-G16RevC.01',
'keywords': '# opt=(calcfc,ts,noeigen,maxstep=1,notrust,gdiis) freq b3lyp/genecp em=gd3bj',
'method': 'DFT',
'basis_set': 'pseudopotential',
'functional': 'RB3LYP-GD3BJ',
'resources_raw': '',
'solvent': None,
'temperature': <Quantity(298.15, 'kelvin')>,
'pressure': <Quantity(1.0, 'standard_atmosphere')>,
'running_time': <Quantity(1065479.2, 'second')>,
'status': {'scf_converged': True, 'normal_terminated': True},
'geometry_optimization_status': None,
'options': '%nprocs=32\n%mem=80GB',
'title_card': 'Title Card Required',
'job_type': 'FTS',
'standard_orientation_transformation_matrix': array([[ 1.00000000e+00, -7.15316281e-08, 9.67269248e-08,
2.43332149e-07],
[ 7.15316216e-08, 1.00000000e+00, 6.57111532e-08,
-1.92074856e-07],
[-9.67269293e-08, -6.57111463e-08, 1.00000000e+00,
1.30262744e-07],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00]]),
'file_path': '/Users/tmj/Documents/proj/MolOP/tests/test_files/g16log/2-TS1-Opt.log',
'detected_format_id': 'g16log',
'filename': '2-TS1-Opt.log'}
Properties with units are represented with pint and support unit conversion.
parsed_file.running_time
parsed_file.running_time.to("h")
Frame Object Information¶
MolOP integrates rdkit-dof. The default RDKit molecule rendering includes a depth-of-field effect. If you don't like this style, you can disable it via the global configuration.
from molop.config import molopconfig
molopconfig.set_dof_effect_drawer(False)
last_frame.rdmol
Accessing Data in a Frame¶
last_frame.model_dump().keys()
dict_keys(['atoms', 'coords', 'charge', 'multiplicity', 'bonds', 'formal_charges', 'formal_num_radicals', 'frame_id', 'qm_software', 'qm_software_version', 'keywords', 'method', 'basis_set', 'functional', 'resources_raw', 'solvent', 'temperature', 'pressure', 'forces', 'hessian', 'rotation_constants', 'energies', 'thermal_informations', 'molecular_orbitals', 'vibrations', 'charge_spin_populations', 'polarizability', 'bond_orders', 'total_spin', 'single_point_properties', 'status', 'geometry_optimization_status', 'running_time', 'options', 'title_card', 'job_type', 'standard_orientation_transformation_matrix', 'standard_coords', 'file_path', 'detected_format_id', 'smiles', 'canonical_smiles', 'is_error', 'is_normal', 'is_TS', 'is_optimized', 'filename'])
If multiple energy levels are available, total_energy automatically selects the highest-level energy.
last_frame.energies.model_dump()
{'electronic_energy': None,
'scf_energy': <Quantity(-3667.86175, 'hartree')>,
'mp2_energy': None,
'mp3_energy': None,
'mp4_energy': None,
'ccsd_energy': None,
'total_energy': <Quantity(-3667.86175, 'hartree')>}
Thermal properties
last_frame.thermal_informations.model_dump()
{'ZPVE': <Quantity(502.017619, 'kilocalorie / mole')>,
'TCE': <Quantity(536.039928, 'kilocalorie / mole')>,
'TCH': <Quantity(536.632297, 'kilocalorie / mole')>,
'TCG': <Quantity(444.716592, 'kilocalorie / mole')>,
'U_0': <Quantity(-2301115.98, 'kilocalorie / mole')>,
'U_T': <Quantity(-2301081.96, 'kilocalorie / mole')>,
'H_T': <Quantity(-2301081.37, 'kilocalorie / mole')>,
'G_T': <Quantity(-2301173.28, 'kilocalorie / mole')>,
'S': <Quantity(208.673, 'calorie / mole / kelvin')>,
'C_V': <Quantity(308.286, 'calorie / mole / kelvin')>}
Optimization status
last_frame.geometry_optimization_status.model_dump()
{'geometry_optimized': False,
'rms_force_threshold': 0.0003,
'max_force_threshold': 0.00045,
'rms_displacement_threshold': 0.0012,
'max_displacement_threshold': 0.0018,
'energy_change': -2.689102e-08,
'rms_force': 4e-06,
'max_force': 3.7e-05,
'rms_displacement': 0.001014,
'max_displacement': 0.004373,
'energy_change_converged': None,
'rms_force_converged': True,
'max_force_converged': True,
'rms_displacement_converged': True,
'max_displacement_converged': False}
Or view it as a table
last_frame.geometry_optimization_status.to_df()
| value | threshold | converged | |
|---|---|---|---|
| energy_change | -2.689102e-08 | NaN | None |
| rms_force | 4.000000e-06 | 0.00030 | True |
| max_force | 3.700000e-05 | 0.00045 | True |
| rms_displacement | 1.014000e-03 | 0.00120 | True |
| max_displacement | 4.373000e-03 | 0.00180 | False |
Polarizability-related information
last_frame.polarizability.model_dump()
{'electronic_spatial_extent': <Quantity(32064.5204, 'bohr ** 2')>,
'isotropic_polarizability': <Quantity(567.607, 'bohr ** 3')>,
'anisotropic_polarizability': <Quantity(151.035, 'bohr ** 3')>,
'polarizability_tensor': <Quantity([604.564 32.9301 583.745 -56.4015 -33.4024 514.513 ], 'bohr ** 3')>,
'dipole': <Quantity([ 3.68616 -0.880583 2.95738 ], 'debye')>,
'quadrupole': <Quantity([-349.5223 -319.1229 -351.3398 -7.7821 -26.9199 -17.9296], 'debye * angstrom')>,
'traceless_quadrupole': <Quantity([ -9.5273 20.8721 -11.3448 -7.7821 -26.9199 -17.9296], 'debye * angstrom')>,
'octapole': <Quantity([ 83.6646 -58.9773 74.3053 -25.8942 -43.5558 65.9372 30.8367 34.1059
6.7378 -16.6707], 'debye * angstrom ** 2')>,
'hexadecapole': <Quantity([-1.73940777e+04 -1.25671001e+04 -1.14539245e+04 4.65876000e+01
-1.53457800e+02 2.62174600e+02 -7.24701000e+01 -1.91710500e+02
-2.66604000e+01 -5.09340340e+03 -4.82498970e+03 -3.94426940e+03
-1.91343500e+02 4.34870000e+00 -4.70990000e+00], 'debye * angstrom ** 3')>}
molecular_orbitals can be indexed like a list to access a specific orbital. MolOP also provides shortcuts for commonly used orbitals, for example:
last_frame.molecular_orbitals.model_dump().keys()
dict_keys(['electronic_state', 'alpha_energies', 'beta_energies', 'alpha_occupancies', 'beta_occupancies', 'alpha_symmetries', 'beta_symmetries', 'coefficients', 'HOMO_id', 'LUMO_id', 'beta_HOMO_id', 'beta_LUMO_id', 'SOMO_ids', 'NHOMO_id', 'SLUMO_id', 'HOMO_energy', 'LUMO_energy', 'NHOMO_energy', 'SLUMO_energy', 'HOMO_LUMO_gap', 'beta_HOMO_energy', 'beta_LUMO_energy', 'beta_HOMO_LUMO_gap', 'beta_NHOMO_id', 'beta_NHOMO_energy', 'beta_SLUMO_id', 'beta_SLUMO_energy'])
last_frame.molecular_orbitals[0].model_dump()
{'alpha_energy': <Quantity(-89.0746, 'hartree')>,
'beta_energy': None,
'alpha_occupancy': True,
'alpha_symmetry': '(A)',
'beta_occupancy': None,
'beta_symmetry': None,
'coefficient': None}
last_frame.molecular_orbitals.HOMO.model_dump()
{'alpha_energy': <Quantity(-0.18767, 'hartree')>,
'beta_energy': None,
'alpha_occupancy': True,
'alpha_symmetry': '(A)',
'beta_occupancy': None,
'beta_symmetry': None,
'coefficient': None}
last_frame.molecular_orbitals.LUMO.model_dump()
{'alpha_energy': <Quantity(-0.06315, 'hartree')>,
'beta_energy': None,
'alpha_occupancy': False,
'alpha_symmetry': '(A)',
'beta_occupancy': None,
'beta_symmetry': None,
'coefficient': None}
vibrations can also be indexed like a list to access information for a specific vibrational mode, for example:
last_frame.vibrations.model_dump().keys()
dict_keys(['frequencies', 'reduced_masses', 'force_constants', 'IR_intensities', 'vibration_modes'])
last_frame.vibrations[0].model_dump()
{'frequency': <Quantity(-44.2376, 'reciprocal_centimeter')>,
'reduced_mass': <Quantity(9.5785, 'unified_atomic_mass_unit')>,
'force_constant': <Quantity(0.011, 'millidyne / angstrom')>,
'IR_intensity': <Quantity(19.3851, 'kilometer / mole')>,
'vibration_mode': <Quantity([[-0.04353013 -0.0568171 -0.01688054]
[ 0.01008565 -0.0033201 0.2121684 ]
[-0.0093313 0.00927325 0.18452081]
[-0.00480192 -0.0812717 -0.01543192]
[-0.02312481 -0.05325445 0.04998448]
[-0.01445755 -0.07534108 -0.00233244]
[-0.00480192 -0.0812717 -0.01543192]
[-0.0141281 -0.06995574 0.01074004]
[-0.00531579 -0.0904913 -0.01927053]
[-0.00428806 -0.0720521 -0.01159332]
[-0.02458769 -0.07634687 -0.02461177]
[-0.04488732 -0.08064165 -0.03763022]
[-0.01445755 -0.07534108 -0.00233244]
[-0.05505681 -0.08393063 -0.02836933]
[-0.05538627 -0.08931597 -0.04144181]
[-0.01445755 -0.07534108 -0.00233244]
[ 0.00602648 -0.06721204 0.00145214]
[-0.03475718 -0.07963586 -0.01535089]
[-0.06485749 -0.07955109 -0.03757619]
[-0.00414301 -0.07050102 0.01071303]
[-0.04441281 -0.07370524 -0.0022514 ]
[-0.0146026 -0.07689215 -0.02463878]
[-0.00601406 -0.10354517 -0.01387526]
[-0.02286169 -0.0448538 -0.02232984]
[-0.00480192 -0.0812717 -0.01543192]
[ 0.0027589 -0.12636392 -0.0123456 ]
[-0.02234783 -0.03563419 -0.01849124]
[-0.03214851 -0.03125465 -0.0276981 ]
[-0.01357488 -0.05845295 -0.01696158]
[ 0.00448489 -0.09487085 -0.01006367]
[-0.03112078 -0.01281544 -0.02002089]
[-0.01306101 -0.04923334 -0.01312298]
[-0.04342444 -0.05754922 0.03696603]
[-0.0249565 -0.0840154 -0.00614403]
[-0.01515582 -0.08839495 0.00306283]
[-0.02514091 -0.08784967 0.00308985]
[-0.02514091 -0.08784967 0.00308985]
[-0.01548528 -0.09378029 -0.01000964]
[-0.02462705 -0.07863006 0.00692845]
[-0.02462705 -0.07863006 0.00692845]
[-0.02532532 -0.09168393 0.01232372]
[-0.01515582 -0.08839495 0.00306283]
[-0.02481145 -0.08246433 0.01616232]
[-0.02481145 -0.08246433 0.01616232]
[-0.04342444 -0.05754922 0.03696603]
[-0.0437539 -0.06293456 0.02389355]
[-0.04356949 -0.0591003 0.01465968]
[-0.0437539 -0.06293456 0.02389355]
[-0.05373898 -0.06238928 0.02392056]
[-0.04360885 -0.06138349 0.0461999 ]
[-0.04379326 -0.06521775 0.05543377]
[-0.04342444 -0.05754922 0.03696603]
[-0.04412271 -0.07060309 0.0423613 ]
[-0.03395322 -0.06731411 0.03310041]
[-0.03413763 -0.07114837 0.04233428]
[-0.01398305 -0.06840467 0.03304639]
[-0.03325495 -0.05426024 0.02770514]
[-0.03461213 -0.07808478 0.00695546]
[-0.04511108 -0.08675911 0.00314387]
[-0.06456739 -0.07644894 0.0070365 ]
[-0.05542562 -0.09159916 -0.00990159]
[-0.03494159 -0.08347012 -0.00611701]
[-0.03498095 -0.08575331 0.02542321]
[-0.03508664 -0.08502119 -0.02842336]
[-0.02499586 -0.08629859 0.02539619]
[-0.03516535 -0.08958758 0.03465708]
[-0.02528596 -0.08940074 -0.0192165 ]
[-0.03504728 -0.082738 -0.05996358]
[-0.01482637 -0.08300961 0.01613531]
[-0.02485081 -0.08474752 0.04770254]
[-0.02543101 -0.09095181 -0.04152285]
[-0.01482637 -0.08300961 0.01613531]
[-0.01482637 -0.08300961 0.01613531]
[-0.00521009 -0.09122342 0.03457604]
[ 0.0051438 -0.08410017 0.01608128]
[-0.04471529 -0.08438908 0.10160314]
[-0.10345303 -0.06112712 0.13174876]
[-0.08161181 -0.02917353 0.15628302]
[ 0.00858342 -0.02869572 0.16911238]
[ 0.06662289 -0.06501155 0.14436202]
[ 0.03549485 -0.08336599 0.11445951]
[-0.17059491 -0.00737787 0.14189699]
[-0.06604264 -0.10712306 0.08090748]
[-0.16387741 -0.06707503 0.12807224]
[-0.13032511 -0.00417365 0.15486142]
[ 0.13703235 -0.05960891 0.14801153]
[ 0.07440747 -0.10398632 0.10667425]
[-0.09882826 0.02184931 0.16629618]
[-0.12929738 0.01426555 0.16253862]
[-0.18799577 0.03981071 0.16114403]
[-0.03980043 0.00168949 0.18076325]
[-0.02122679 -0.0255088 0.19149976]
[-0.06098273 -0.01949342 0.18237394]
[-0.01894758 0.01748707 0.16608008]
[ 0.02706374 -0.0475802 -0.0224649 ]
[ 0.2817611 -0.14783608 -0.10232735]
[-0.12317468 -0.0387557 -0.20590576]
[ 0.09640612 -0.06289996 0.00504762]
[ 0.13348705 -0.11428125 -0.05886613]
[ 0.0280521 -0.03142419 0.01675252]
[ 0.14639788 -0.06864168 0.09029935]], 'angstrom')>,
'is_imaginary': True}
For other available fields, see Model Field Map.
TS-Specific Features¶
For transition states (TS), MolOP can use the imaginary frequency information for quick inspection to assess whether a TS is reasonable. Bonds that are likely changing connectivity are marked with dashed lines.
last_frame.to_diff_rdmol()
MolOP successfully validated a reductive elimination step, where Ni changes oxidation state from +2 to +0.
from rdkit.Chem import Draw
Draw.MolsToGridImage(last_frame.possible_pre_post_ts(show_3D=True), molsPerRow=2, subImgSize=(500, 500))