05 05 2021 chemoinformatics q-chem Tweet
Japan is under a state of emergency for the third time, which forced me to do self-quarantine. After all, my five days of GW holidays were spent developing the pygamess library.
This is an example of storing GAMESS calculation results into RDKit's Chem object. I will calculate the two molecules, ethane, and ethanol, to export as an SDF file later.
>>> from pygamess import Gamess >>> from pygamess.utils import rdkit_optimize >>> from rdkit import Chem >>> ethane = rdkit_optimize("CC") >>> ethanol = rdkit_optimize("CCO") >>> g = Gamess() >>> g.run_type("optimize") >>> ethane_result = g.run(ethane) >>> optimized_ethane = ethane_result.mol >>> ethanol_result = g.run(ethanol) >>> optimized_ethanol = ethanol_result.mol
Orbital energies and dipole moments including HOMO and LUMO energies are stored in the object. Each atom is also assigned a mulliken charge/lowdin charge.
>>> optimized_ethane.GetProp("HOMO") '-0.46029999999999999' >>> optimized_ethane.GetProp("LUMO") '0.65559999999999996' >>> optimized_ethane.GetProp("dipole_moment") '1.9999999999999999e-06' >>> optimized_ethane.GetProp("orbital_energies") '-11.0355 -11.0352 -0.981 -0.8121 -0.572 -0.572 -0.4717 -0.4603 -0.4603 0.6556 0.6556 0.687 0.737 0.7814 0.7893 0.7893' >>> for a in optimized_ethane.GetAtoms(): ... print("{}:\t{:.4f}".format(a.GetSymbol(), float(a.GetProp("mulliken_charge")))) ... C: -0.1748 C: -0.1748 H: 0.0583 H: 0.0583 H: 0.0583 H: 0.0583 H: 0.0583 H: 0.0583
Finally, I'll export the object to SDF.
>>> optimized_mols = [optimized_ethane, optimized_ethanol] >>> w = Chem.SDWriter('test.sdf') >>> for m in optimized_mols: ... w.write(m) ... >>> w.close()
Looking at the exported SDF, we can see these results are persisted.
$ cat test.sdf RDKit 3D 8 7 0 0 0 0 0 0 0 0999 V2000 -0.7687 0.0082 -0.0152 C 0 0 0 0 0 0 0 0 0 0 0 0 0.7687 -0.0082 0.0152 C 0 0 0 0 0 0 0 0 0 0 0 0 -1.1742 -0.1016 0.9863 H 0 0 0 0 0 0 0 0 0 0 0 0 -1.1352 0.9432 -0.4285 H 0 0 0 0 0 0 0 0 0 0 0 0 -1.1499 -0.8048 -0.6260 H 0 0 0 0 0 0 0 0 0 0 0 0 1.1499 0.8048 0.6260 H 0 0 0 0 0 0 0 0 0 0 0 0 1.1742 0.1016 -0.9863 H 0 0 0 0 0 0 0 0 0 0 0 0 1.1352 -0.9432 0.4285 H 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 1 3 1 0 1 4 1 0 1 5 1 0 2 6 1 0 2 7 1 0 2 8 1 0 M END > <total_energy> (1) -78.306179626800002 > <HOMO> (1) -0.46029999999999999 > <LUMO> (1) 0.65559999999999996 > <nHOMO> (1) -0.46029999999999999 > <nLUMO> (1) 0.65559999999999996 > <dipole_moment> (1) 1.9999999999999999e-06 > <dx> (1) -0 > <dy> (1) -1.9999999999999999e-06 > <dz> (1) 0 > <orbital_energies> (1) -11.0355 -11.0352 -0.981 -0.8121 -0.572 -0.572 -0.4717 -0.4603 -0.4603 0.6556 0.6556 0.687 0.737 0.7814 0.7893 0.7893 > <atom.dprop.mulliken_charge> (1) -0.174764 -0.174764 0.058255000000000001 0.058255000000000001 0.058254 0.058255000000000001 0.058255000000000001 0.058255000000000001
TODO: Add GAMESS calculation conditions as attributes, like "HF/6-31G**".