molSimplify 1.7.4__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.
- docs/source/conf.py +224 -0
- molSimplify/Classes/__init__.py +6 -0
- molSimplify/Classes/atom3D.py +235 -0
- molSimplify/Classes/dft_obs.py +130 -0
- molSimplify/Classes/globalvars.py +827 -0
- molSimplify/Classes/helpers.py +161 -0
- molSimplify/Classes/ligand.py +2330 -0
- molSimplify/Classes/mGUI.py +2493 -0
- molSimplify/Classes/mWidgets.py +438 -0
- molSimplify/Classes/miniGUI.py +41 -0
- molSimplify/Classes/mol2D.py +260 -0
- molSimplify/Classes/mol3D.py +5846 -0
- molSimplify/Classes/monomer3D.py +253 -0
- molSimplify/Classes/partialcharges.py +226 -0
- molSimplify/Classes/protein3D.py +1178 -0
- molSimplify/Classes/rundiag.py +151 -0
- molSimplify/Data/ML.dat +212 -0
- molSimplify/Data/MLS_FSR_for_inter.dat +23 -0
- molSimplify/Data/MLS_FSR_for_inter2.dat +23 -0
- molSimplify/Data/MLS_angle_for_click.dat +8 -0
- molSimplify/Data/MLS_angle_for_inter.dat +23 -0
- molSimplify/Data/MLS_angle_for_inter2.dat +48 -0
- molSimplify/Data/MLS_angle_for_intra.dat +10 -0
- molSimplify/Data/MLS_angle_for_intra2.dat +6 -0
- molSimplify/Data/MLS_angle_for_oa.dat +18 -0
- molSimplify/Data/ML_FSR_for_inter.dat +112 -0
- molSimplify/Data/ML_FSR_for_inter2.dat +110 -0
- molSimplify/Data/ML_bond_for_cat.dat +8 -0
- molSimplify/Data/ML_bond_for_click.dat +8 -0
- molSimplify/Data/ML_bond_for_inter.dat +48 -0
- molSimplify/Data/ML_bond_for_inter2.dat +48 -0
- molSimplify/Data/ML_bond_for_intra.dat +10 -0
- molSimplify/Data/ML_bond_for_intra2.dat +6 -0
- molSimplify/Data/ML_bond_for_oa.dat +18 -0
- molSimplify/Data/bp1.dat +21 -0
- molSimplify/Data/li.dat +3 -0
- molSimplify/Data/no.dat +2 -0
- molSimplify/Data/oct.dat +7 -0
- molSimplify/Data/pbp.dat +8 -0
- molSimplify/Data/spy.dat +6 -0
- molSimplify/Data/sqap.dat +9 -0
- molSimplify/Data/sqp.dat +5 -0
- molSimplify/Data/tbp.dat +6 -0
- molSimplify/Data/tdhd.dat +9 -0
- molSimplify/Data/thd.dat +5 -0
- molSimplify/Data/tpl.dat +4 -0
- molSimplify/Data/tpr.dat +7 -0
- molSimplify/Informatics/HFXsensitivity/__init__.py +0 -0
- molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py +443 -0
- molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py +346 -0
- molSimplify/Informatics/MOF/Linker_rotation.py +179 -0
- molSimplify/Informatics/MOF/MOF_descriptors.py +1299 -0
- molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional.py +589 -0
- molSimplify/Informatics/MOF/MOF_functionalizer.py +1648 -0
- molSimplify/Informatics/MOF/PBC_functions.py +1347 -0
- molSimplify/Informatics/MOF/__init__.py +0 -0
- molSimplify/Informatics/MOF/atomic.py +267 -0
- molSimplify/Informatics/MOF/cluster_extraction.py +388 -0
- molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py +895 -0
- molSimplify/Informatics/MOF/monofunctionalized_BDC/index_information.py +10 -0
- molSimplify/Informatics/Mol2Parser.py +46 -0
- molSimplify/Informatics/RACassemble.py +408 -0
- molSimplify/Informatics/__init__.py +0 -0
- molSimplify/Informatics/active_learning/__init__.py +0 -0
- molSimplify/Informatics/active_learning/expected_improvement.py +269 -0
- molSimplify/Informatics/autocorrelation.py +1930 -0
- molSimplify/Informatics/clean_autocorrelation.py +778 -0
- molSimplify/Informatics/coulomb_analyze.py +67 -0
- molSimplify/Informatics/decoration_manager.py +193 -0
- molSimplify/Informatics/geo_analyze.py +88 -0
- molSimplify/Informatics/geometrics.py +56 -0
- molSimplify/Informatics/graph_analyze.py +163 -0
- molSimplify/Informatics/graph_racs.py +288 -0
- molSimplify/Informatics/jupyter_vis.py +172 -0
- molSimplify/Informatics/lacRACAssemble.py +2192 -0
- molSimplify/Informatics/lacRACAssemble_bisdithiolenes.py +236 -0
- molSimplify/Informatics/misc_descriptors.py +198 -0
- molSimplify/Informatics/organic_fingerprints.py +61 -0
- molSimplify/Informatics/partialcharges.py +345 -0
- molSimplify/Informatics/protein/activesite.py +53 -0
- molSimplify/Informatics/protein/pymol_add_hs.py +33 -0
- molSimplify/Informatics/rac155_geo.py +48 -0
- molSimplify/Ligands/(1_methylbenzimidazol_2_yl)pyridine.xyz +45 -0
- molSimplify/Ligands/1-4-dimethyl-1-2-3-triazole.xyz +15 -0
- molSimplify/Ligands/12crown4.mol +62 -0
- molSimplify/Ligands/Antipyrine.mol +58 -0
- molSimplify/Ligands/BPAbipy.mol +106 -0
- molSimplify/Ligands/Hpyrrole.mol +26 -0
- molSimplify/Ligands/N-quinolinylbutyramidate.xyz +31 -0
- molSimplify/Ligands/N-quinolinylmethylmethinylacetamidate.xyz +30 -0
- molSimplify/Ligands/NMe2_-1.xyz +11 -0
- molSimplify/Ligands/PCy3.mol +111 -0
- molSimplify/Ligands/PMe3.xyz +15 -0
- molSimplify/Ligands/PPh3.mol +76 -0
- molSimplify/Ligands/Propyphenazone.mol +77 -0
- molSimplify/Ligands/acac.mol +33 -0
- molSimplify/Ligands/acacen.mol +76 -0
- molSimplify/Ligands/acetate.smi +1 -0
- molSimplify/Ligands/acetate.xyz +9 -0
- molSimplify/Ligands/aceticacidbipyridine.mol +70 -0
- molSimplify/Ligands/acetonitrile.mol +17 -0
- molSimplify/Ligands/alanine.mol +30 -0
- molSimplify/Ligands/alphabetizer.py +21 -0
- molSimplify/Ligands/amine.mol +11 -0
- molSimplify/Ligands/ammonia.mol +12 -0
- molSimplify/Ligands/arginine.mol +58 -0
- molSimplify/Ligands/asparagine.mol +38 -0
- molSimplify/Ligands/aspartic_acid.mol +35 -0
- molSimplify/Ligands/azide.mol +11 -0
- molSimplify/Ligands/benzene.mol +28 -0
- molSimplify/Ligands/benzene_pi.mol +30 -0
- molSimplify/Ligands/benzenedithiol.mol +30 -0
- molSimplify/Ligands/benzenethiol.mol +30 -0
- molSimplify/Ligands/benzylisocy.mol +38 -0
- molSimplify/Ligands/bidiazine.mol +42 -0
- molSimplify/Ligands/bidiazole.mol +38 -0
- molSimplify/Ligands/bifuran.mol +38 -0
- molSimplify/Ligands/bihydrodiazine.mol +58 -0
- molSimplify/Ligands/bihydrodiazole.mol +46 -0
- molSimplify/Ligands/bihydrooxazine.mol +54 -0
- molSimplify/Ligands/bihydrooxazole.mol +42 -0
- molSimplify/Ligands/bihydrothiazine.mol +54 -0
- molSimplify/Ligands/bihydrothiazole.mol +42 -0
- molSimplify/Ligands/biimidazole.mol +38 -0
- molSimplify/Ligands/bioxazole.mol +34 -0
- molSimplify/Ligands/bipy.mol +46 -0
- molSimplify/Ligands/bipyrazine.xyz +20 -0
- molSimplify/Ligands/bipyrimidine.mol +42 -0
- molSimplify/Ligands/bipyrrole.mol +42 -0
- molSimplify/Ligands/bisnapthyridylpyridine.mol +111 -0
- molSimplify/Ligands/bithiazole.mol +34 -0
- molSimplify/Ligands/bromide.mol +7 -0
- molSimplify/Ligands/bromide.smi +1 -0
- molSimplify/Ligands/c2.mol +9 -0
- molSimplify/Ligands/caprolactone.mol +41 -0
- molSimplify/Ligands/carbonyl.mol +8 -0
- molSimplify/Ligands/carboxyl.mol +13 -0
- molSimplify/Ligands/cat.mol +30 -0
- molSimplify/Ligands/chloride.mol +7 -0
- molSimplify/Ligands/chloride.smi +1 -0
- molSimplify/Ligands/chloropyridine.mol +27 -0
- molSimplify/Ligands/co2.mol +10 -0
- molSimplify/Ligands/corrolazine.mol +72 -0
- molSimplify/Ligands/cs.mol +8 -0
- molSimplify/Ligands/cyanate.xyz +5 -0
- molSimplify/Ligands/cyanide.mol +9 -0
- molSimplify/Ligands/cyanoaceticporphyrin.mol +114 -0
- molSimplify/Ligands/cyanopyridine.mol +29 -0
- molSimplify/Ligands/cyclam.mol +81 -0
- molSimplify/Ligands/cyclen.mol +69 -0
- molSimplify/Ligands/cyclopentadienyl.mol +26 -0
- molSimplify/Ligands/cysteine.mol +32 -0
- molSimplify/Ligands/diaminomethyl.mol +19 -0
- molSimplify/Ligands/diazine.mol +25 -0
- molSimplify/Ligands/diazole.mol +23 -0
- molSimplify/Ligands/dicyanamide.mol +15 -0
- molSimplify/Ligands/dihydrofuran.mol +27 -0
- molSimplify/Ligands/dmap.xyz +35 -0
- molSimplify/Ligands/dmf.mol +28 -0
- molSimplify/Ligands/dmi.mol +41 -0
- molSimplify/Ligands/dmpe.mol +52 -0
- molSimplify/Ligands/dpmu.mol +47 -0
- molSimplify/Ligands/dppe.mol +112 -0
- molSimplify/Ligands/edta.mol +69 -0
- molSimplify/Ligands/en.mol +28 -0
- molSimplify/Ligands/ethanethiol.mol +21 -0
- molSimplify/Ligands/ethanolamine.mol +26 -0
- molSimplify/Ligands/ethbipy.mol +70 -0
- molSimplify/Ligands/ethyl.mol +19 -0
- molSimplify/Ligands/ethylamine.mol +24 -0
- molSimplify/Ligands/ethylene.mol +16 -0
- molSimplify/Ligands/ethylesteracac.mol +57 -0
- molSimplify/Ligands/fluoride.mol +7 -0
- molSimplify/Ligands/fluoride.smi +1 -0
- molSimplify/Ligands/formaldehyde.mol +12 -0
- molSimplify/Ligands/formamidate.xyz +8 -0
- molSimplify/Ligands/formate.xyz +6 -0
- molSimplify/Ligands/furan.mol +23 -0
- molSimplify/Ligands/glutamic_acid.mol +42 -0
- molSimplify/Ligands/glutamine.mol +44 -0
- molSimplify/Ligands/glycinate.mol +23 -0
- molSimplify/Ligands/glycine.mol +24 -0
- molSimplify/Ligands/h2s.mol +10 -0
- molSimplify/Ligands/helium.mol +6 -0
- molSimplify/Ligands/histidine.mol +45 -0
- molSimplify/Ligands/hmpa.mol +62 -0
- molSimplify/Ligands/hs-.mol +9 -0
- molSimplify/Ligands/hydride.mol +7 -0
- molSimplify/Ligands/hydrocarboxyacetylide.xyz +8 -0
- molSimplify/Ligands/hydrocyanide.mol +10 -0
- molSimplify/Ligands/hydrodiazine.mol +33 -0
- molSimplify/Ligands/hydrodiazole.mol +27 -0
- molSimplify/Ligands/hydrogensulfide.mol +10 -0
- molSimplify/Ligands/hydroisocyanide.mol +11 -0
- molSimplify/Ligands/hydrooxazine.mol +31 -0
- molSimplify/Ligands/hydrooxazole.mol +25 -0
- molSimplify/Ligands/hydrothiazine.mol +31 -0
- molSimplify/Ligands/hydrothiazole.mol +25 -0
- molSimplify/Ligands/hydroxyl.mol +9 -0
- molSimplify/Ligands/imidazole.mol +23 -0
- molSimplify/Ligands/imidazolidinone.mol +29 -0
- molSimplify/Ligands/imine.mol +13 -0
- molSimplify/Ligands/iminodiacetic.mol +33 -0
- molSimplify/Ligands/iodide.mol +7 -0
- molSimplify/Ligands/iodobenzene.xyz +14 -0
- molSimplify/Ligands/isoleucine.mol +48 -0
- molSimplify/Ligands/isothiocyanate.mol +11 -0
- molSimplify/Ligands/leucine.mol +48 -0
- molSimplify/Ligands/ligands.dict +257 -0
- molSimplify/Ligands/lysine.mol +54 -0
- molSimplify/Ligands/mebenzenedithiol.mol +36 -0
- molSimplify/Ligands/mebim_py.xyz +29 -0
- molSimplify/Ligands/mebim_pz.xyz +28 -0
- molSimplify/Ligands/mebipy.mol +58 -0
- molSimplify/Ligands/mecat.mol +36 -0
- molSimplify/Ligands/methanal.mol +11 -0
- molSimplify/Ligands/methanethiol.mol +15 -0
- molSimplify/Ligands/methanol.mol +16 -0
- molSimplify/Ligands/methionine.mol +44 -0
- molSimplify/Ligands/methyl.mol +13 -0
- molSimplify/Ligands/methylacetylide.xyz +8 -0
- molSimplify/Ligands/methylamine.mol +19 -0
- molSimplify/Ligands/methylazide.xyz +9 -0
- molSimplify/Ligands/methylisocy.mol +17 -0
- molSimplify/Ligands/methylpyridine.mol +33 -0
- molSimplify/Ligands/n2.mol +8 -0
- molSimplify/Ligands/n4py.xyz +51 -0
- molSimplify/Ligands/nch.mol +10 -0
- molSimplify/Ligands/nco-.mol +11 -0
- molSimplify/Ligands/nethanolamine.mol +26 -0
- molSimplify/Ligands/nitrate.mol +14 -0
- molSimplify/Ligands/nitrite.mol +11 -0
- molSimplify/Ligands/nitro.mol +11 -0
- molSimplify/Ligands/nitrobipy.mol +54 -0
- molSimplify/Ligands/nitroso.mol +8 -0
- molSimplify/Ligands/nme3.mol +30 -0
- molSimplify/Ligands/no-.mol +10 -0
- molSimplify/Ligands/no2-.mol +11 -0
- molSimplify/Ligands/noxygen.mol +8 -0
- molSimplify/Ligands/ns-.mol +10 -0
- molSimplify/Ligands/o-pyridylbenzene.xyz +23 -0
- molSimplify/Ligands/o-pyridylphenylanion.xyz +22 -0
- molSimplify/Ligands/o2-.mol +9 -0
- molSimplify/Ligands/o2.xyz +4 -0
- molSimplify/Ligands/och2.mol +12 -0
- molSimplify/Ligands/oethanolamine.mol +26 -0
- molSimplify/Ligands/ome2.mol +22 -0
- molSimplify/Ligands/ooh.xyz +5 -0
- molSimplify/Ligands/oxalate.mol +17 -0
- molSimplify/Ligands/oxalate.smi +1 -0
- molSimplify/Ligands/oxygen.mol +7 -0
- molSimplify/Ligands/pentacyanocyclopentadienide.mol +36 -0
- molSimplify/Ligands/ph2-.mol +11 -0
- molSimplify/Ligands/ph3.mol +12 -0
- molSimplify/Ligands/phen.mol +51 -0
- molSimplify/Ligands/phenacac.mol +63 -0
- molSimplify/Ligands/phenalalanine.mol +51 -0
- molSimplify/Ligands/phendione.mol +51 -0
- molSimplify/Ligands/phenphen.mol +75 -0
- molSimplify/Ligands/phenylbenzoxazole.mol +54 -0
- molSimplify/Ligands/phenylcyc.mol +99 -0
- molSimplify/Ligands/phenylenediamine.mol +37 -0
- molSimplify/Ligands/phenylisocy.mol +32 -0
- molSimplify/Ligands/phosacidbipy.mol +66 -0
- molSimplify/Ligands/phosphine.mol +13 -0
- molSimplify/Ligands/phosphorine.mol +27 -0
- molSimplify/Ligands/phosphorustrifluoride.mol +12 -0
- molSimplify/Ligands/phthalocyanine.mol +126 -0
- molSimplify/Ligands/pme3o.mol +32 -0
- molSimplify/Ligands/porphyrin.mol +82 -0
- molSimplify/Ligands/pph3o.mol +77 -0
- molSimplify/Ligands/proline.mol +39 -0
- molSimplify/Ligands/propdiol.mol +21 -0
- molSimplify/Ligands/propylene.mol +23 -0
- molSimplify/Ligands/pyridine.mol +27 -0
- molSimplify/Ligands/pyrimidone.mol +27 -0
- molSimplify/Ligands/pyrrole.mol +24 -0
- molSimplify/Ligands/quinoxalinedithiol.mol +39 -0
- molSimplify/Ligands/s2-.mol +9 -0
- molSimplify/Ligands/salen.mol +75 -0
- molSimplify/Ligands/salphen.mol +84 -0
- molSimplify/Ligands/serine.mol +32 -0
- molSimplify/Ligands/simple_ligands.dict +14 -0
- molSimplify/Ligands/sulfacidbipy.mol +63 -0
- molSimplify/Ligands/tbucat.mol +54 -0
- molSimplify/Ligands/tbuphisocy.mol +56 -0
- molSimplify/Ligands/tbutylcyclen.mol +166 -0
- molSimplify/Ligands/tbutylisocy.mol +35 -0
- molSimplify/Ligands/tbutylthiol.mol +33 -0
- molSimplify/Ligands/tcnoet.mol +43 -0
- molSimplify/Ligands/tcnoetOH.mol +45 -0
- molSimplify/Ligands/terpy.mol +65 -0
- molSimplify/Ligands/tetrahydrofuran.mol +31 -0
- molSimplify/Ligands/thiane.mol +37 -0
- molSimplify/Ligands/thiazole.mol +21 -0
- molSimplify/Ligands/thiocyanate.mol +11 -0
- molSimplify/Ligands/thiol.mol +9 -0
- molSimplify/Ligands/thiophene.mol +23 -0
- molSimplify/Ligands/thiopyridine.mol +29 -0
- molSimplify/Ligands/threonine.mol +38 -0
- molSimplify/Ligands/tpp.mol +165 -0
- molSimplify/Ligands/tricyanomethyl.mol +19 -0
- molSimplify/Ligands/trifluoromethyl.mol +13 -0
- molSimplify/Ligands/tryptophan.mol +60 -0
- molSimplify/Ligands/tyrosine.mol +53 -0
- molSimplify/Ligands/uthiol.mol +11 -0
- molSimplify/Ligands/uthiolme2.mol +23 -0
- molSimplify/Ligands/valine.mol +42 -0
- molSimplify/Ligands/water.mol +10 -0
- molSimplify/Ligands/x.mol +6 -0
- molSimplify/Scripts/__init__.py +0 -0
- molSimplify/Scripts/addtodb.py +308 -0
- molSimplify/Scripts/cellbuilder.py +1592 -0
- molSimplify/Scripts/cellbuilder_tools.py +701 -0
- molSimplify/Scripts/chains.py +342 -0
- molSimplify/Scripts/convert_2to3.py +23 -0
- molSimplify/Scripts/dbinteract.py +631 -0
- molSimplify/Scripts/distgeom.py +617 -0
- molSimplify/Scripts/findcorrelations.py +287 -0
- molSimplify/Scripts/generator.py +267 -0
- molSimplify/Scripts/geometry.py +1224 -0
- molSimplify/Scripts/grabguivars.py +845 -0
- molSimplify/Scripts/in_b3lyp_usetc.py +141 -0
- molSimplify/Scripts/inparse.py +1673 -0
- molSimplify/Scripts/io.py +1149 -0
- molSimplify/Scripts/isomers.py +415 -0
- molSimplify/Scripts/jobgen.py +247 -0
- molSimplify/Scripts/krr_prep.py +1262 -0
- molSimplify/Scripts/molSimplify_io.py +18 -0
- molSimplify/Scripts/molden2psi4wfn.py +166 -0
- molSimplify/Scripts/namegen.py +32 -0
- molSimplify/Scripts/nn_prep.py +561 -0
- molSimplify/Scripts/oct_check_mols.py +782 -0
- molSimplify/Scripts/periodic_QE.py +97 -0
- molSimplify/Scripts/postmold.py +304 -0
- molSimplify/Scripts/postmwfn.py +709 -0
- molSimplify/Scripts/postparse.py +488 -0
- molSimplify/Scripts/postproc.py +139 -0
- molSimplify/Scripts/qcgen.py +1450 -0
- molSimplify/Scripts/rmsd.py +489 -0
- molSimplify/Scripts/rungen.py +670 -0
- molSimplify/Scripts/structgen.py +3040 -0
- molSimplify/Scripts/tf_nn_prep.py +894 -0
- molSimplify/Scripts/tsgen.py +295 -0
- molSimplify/Scripts/uq_calibration.py +69 -0
- molSimplify/__init__.py +0 -0
- molSimplify/__main__.py +197 -0
- molSimplify/icons/chemdb.png +0 -0
- molSimplify/icons/hjklogo.png +0 -0
- molSimplify/icons/icon.png +0 -0
- molSimplify/icons/logo.png +0 -0
- molSimplify/icons/logo_old.png +0 -0
- molSimplify/icons/petachem.png +0 -0
- molSimplify/icons/petachem2.png +0 -0
- molSimplify/icons/petachem_full.png +0 -0
- molSimplify/icons/pythonlogo.png +0 -0
- molSimplify/icons/sge copy.png +0 -0
- molSimplify/icons/sge.png +0 -0
- molSimplify/icons/slurm.png +0 -0
- molSimplify/icons/wft1.png +0 -0
- molSimplify/icons/wft2.png +0 -0
- molSimplify/icons/wft3.png +0 -0
- molSimplify/ml/__init__.py +0 -0
- molSimplify/ml/kernels.py +36 -0
- molSimplify/ml/layers.py +29 -0
- molSimplify/molscontrol/__init__.py +14 -0
- molSimplify/molscontrol/_version.py +521 -0
- molSimplify/molscontrol/clf_tools.py +144 -0
- molSimplify/molscontrol/data/README.md +21 -0
- molSimplify/molscontrol/data/look_and_say.dat +15 -0
- molSimplify/molscontrol/dynamic_classifier.py +514 -0
- molSimplify/molscontrol/io_tools.py +363 -0
- molSimplify/molscontrol/molscontrol.py +49 -0
- molSimplify/molscontrol/terachem/jobscript_control.sh +31 -0
- molSimplify/molscontrol/terachem/terachem_input +22 -0
- molSimplify/python_krr/X_train_TS.csv +535 -0
- molSimplify/python_krr/__init__.py +0 -0
- molSimplify/python_krr/hat2_X_mean_std.csv +3 -0
- molSimplify/python_krr/hat2_feature_names.csv +1 -0
- molSimplify/python_krr/hat2_y_mean_std.csv +2 -0
- molSimplify/python_krr/hat_X_mean_std.csv +6 -0
- molSimplify/python_krr/hat_feature_names.csv +1 -0
- molSimplify/python_krr/hat_krr_X_train.csv +5205 -0
- molSimplify/python_krr/hat_krr_dual_coef.csv +1 -0
- molSimplify/python_krr/hat_y_mean_std.csv +2 -0
- molSimplify/python_krr/sklearn_models.py +34 -0
- molSimplify/python_krr/y_train_TS.csv +535 -0
- molSimplify/python_nn/ANN.py +198 -0
- molSimplify/python_nn/__init__.py +0 -0
- molSimplify/python_nn/clf_analysis_tool.py +125 -0
- molSimplify/python_nn/dictionary_toolbox.py +49 -0
- molSimplify/python_nn/ensemble_test.py +309 -0
- molSimplify/python_nn/hs_center.csv +26 -0
- molSimplify/python_nn/hs_scale.csv +26 -0
- molSimplify/python_nn/ls_center.csv +26 -0
- molSimplify/python_nn/ls_scale.csv +26 -0
- molSimplify/python_nn/ms_hs_b1.csv +50 -0
- molSimplify/python_nn/ms_hs_b2.csv +50 -0
- molSimplify/python_nn/ms_hs_b3.csv +1 -0
- molSimplify/python_nn/ms_hs_w1.csv +50 -0
- molSimplify/python_nn/ms_hs_w2.csv +50 -0
- molSimplify/python_nn/ms_hs_w3.csv +1 -0
- molSimplify/python_nn/ms_ls_b1.csv +50 -0
- molSimplify/python_nn/ms_ls_b2.csv +50 -0
- molSimplify/python_nn/ms_ls_b3.csv +1 -0
- molSimplify/python_nn/ms_ls_w1.csv +50 -0
- molSimplify/python_nn/ms_ls_w2.csv +50 -0
- molSimplify/python_nn/ms_ls_w3.csv +1 -0
- molSimplify/python_nn/ms_slope_b1.csv +50 -0
- molSimplify/python_nn/ms_slope_b2.csv +50 -0
- molSimplify/python_nn/ms_slope_b3.csv +1 -0
- molSimplify/python_nn/ms_slope_w1.csv +50 -0
- molSimplify/python_nn/ms_slope_w2.csv +50 -0
- molSimplify/python_nn/ms_slope_w3.csv +1 -0
- molSimplify/python_nn/ms_split_b1.csv +50 -0
- molSimplify/python_nn/ms_split_b2.csv +50 -0
- molSimplify/python_nn/ms_split_b3.csv +1 -0
- molSimplify/python_nn/ms_split_w1.csv +50 -0
- molSimplify/python_nn/ms_split_w2.csv +50 -0
- molSimplify/python_nn/ms_split_w3.csv +1 -0
- molSimplify/python_nn/slope_center.csv +25 -0
- molSimplify/python_nn/slope_scale.csv +25 -0
- molSimplify/python_nn/split_center.csv +26 -0
- molSimplify/python_nn/split_scale.csv +26 -0
- molSimplify/python_nn/tf_ANN.py +762 -0
- molSimplify/python_nn/train_data.csv +1211 -0
- molSimplify/tf_nn/__init__.py +0 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_model.h5 +0 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_name.csv +1591 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_x.csv +2790 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_y.csv +2790 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_vars.csv +154 -0
- molSimplify/tf_nn/geos/hs_ii_bl_x.csv +1577 -0
- molSimplify/tf_nn/geos/hs_ii_bl_y.csv +1577 -0
- molSimplify/tf_nn/geos/hs_ii_model.h5 +0 -0
- molSimplify/tf_nn/geos/hs_ii_model.json +1 -0
- molSimplify/tf_nn/geos/hs_ii_vars.csv +154 -0
- molSimplify/tf_nn/geos/hs_iii_bl_x.csv +1659 -0
- molSimplify/tf_nn/geos/hs_iii_bl_y.csv +1659 -0
- molSimplify/tf_nn/geos/hs_iii_model.h5 +0 -0
- molSimplify/tf_nn/geos/hs_iii_model.json +1 -0
- molSimplify/tf_nn/geos/hs_iii_vars.csv +154 -0
- molSimplify/tf_nn/geos/ls_ii_bl_x.csv +1374 -0
- molSimplify/tf_nn/geos/ls_ii_bl_y.csv +1374 -0
- molSimplify/tf_nn/geos/ls_ii_model.h5 +0 -0
- molSimplify/tf_nn/geos/ls_ii_model.json +1 -0
- molSimplify/tf_nn/geos/ls_ii_vars.csv +154 -0
- molSimplify/tf_nn/geos/ls_iii_bl_x.csv +1364 -0
- molSimplify/tf_nn/geos/ls_iii_bl_y.csv +1364 -0
- molSimplify/tf_nn/geos/ls_iii_model.h5 +0 -0
- molSimplify/tf_nn/geos/ls_iii_model.json +1 -0
- molSimplify/tf_nn/geos/ls_iii_vars.csv +154 -0
- molSimplify/tf_nn/homolumo/gap_model.h5 +0 -0
- molSimplify/tf_nn/homolumo/gap_model.json +1 -0
- molSimplify/tf_nn/homolumo/gap_test_names.csv +175 -0
- molSimplify/tf_nn/homolumo/gap_test_x.csv +176 -0
- molSimplify/tf_nn/homolumo/gap_test_y.csv +176 -0
- molSimplify/tf_nn/homolumo/gap_train_names.csv +699 -0
- molSimplify/tf_nn/homolumo/gap_train_x.csv +700 -0
- molSimplify/tf_nn/homolumo/gap_train_y.csv +700 -0
- molSimplify/tf_nn/homolumo/gap_vars.csv +153 -0
- molSimplify/tf_nn/homolumo/homo_model.h5 +0 -0
- molSimplify/tf_nn/homolumo/homo_model.json +126 -0
- molSimplify/tf_nn/homolumo/homo_test_names.csv +175 -0
- molSimplify/tf_nn/homolumo/homo_test_x.csv +176 -0
- molSimplify/tf_nn/homolumo/homo_test_y.csv +176 -0
- molSimplify/tf_nn/homolumo/homo_train_names.csv +699 -0
- molSimplify/tf_nn/homolumo/homo_train_x.csv +700 -0
- molSimplify/tf_nn/homolumo/homo_train_y.csv +700 -0
- molSimplify/tf_nn/homolumo/homo_vars.csv +153 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_info.json +7 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_model.h5 +0 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_model.json +1 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_x.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_y.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_names.csv +513 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_x.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_y.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_x.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_y.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_vars.csv +155 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_info.json +7 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_model.h5 +0 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_model.json +1 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_x.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_y.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_names.csv +513 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_x.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_y.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_x.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_y.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_vars.csv +154 -0
- molSimplify/tf_nn/oxocatalysis/hat_model.h5 +0 -0
- molSimplify/tf_nn/oxocatalysis/hat_model.json +1 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_names.csv +419 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_x.csv +420 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_y.csv +420 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_names.csv +1507 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_x.csv +1508 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_y.csv +1508 -0
- molSimplify/tf_nn/oxocatalysis/hat_val_x.csv +169 -0
- molSimplify/tf_nn/oxocatalysis/hat_val_y.csv +169 -0
- molSimplify/tf_nn/oxocatalysis/hat_vars.csv +162 -0
- molSimplify/tf_nn/oxocatalysis/oxo_model.h5 +0 -0
- molSimplify/tf_nn/oxocatalysis/oxo_model.json +1 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_names.csv +527 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_x.csv +528 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_y.csv +528 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_names.csv +1897 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_x.csv +1898 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_y.csv +1898 -0
- molSimplify/tf_nn/oxocatalysis/oxo_val_x.csv +212 -0
- molSimplify/tf_nn/oxocatalysis/oxo_val_y.csv +212 -0
- molSimplify/tf_nn/oxocatalysis/oxo_vars.csv +162 -0
- molSimplify/tf_nn/rescaling_data/gap_mean_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/gap_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/gap_var_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/gap_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hat_mean_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/hat_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hat_var_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/hat_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_mean_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_var_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_mean_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/homo_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_var_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/homo_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/oxo20_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/oxo20_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo20_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/oxo20_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo_mean_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/oxo_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo_var_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/oxo_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/split_mean_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/split_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/split_var_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/split_var_y.csv +1 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_model.h5 +0 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_name.csv +1591 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_x.csv +1592 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_y.csv +1592 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_vars.csv +154 -0
- molSimplify/tf_nn/split/split_model.h5 +0 -0
- molSimplify/tf_nn/split/split_model.json +1 -0
- molSimplify/tf_nn/split/split_vars.csv +155 -0
- molSimplify/tf_nn/split/split_x.csv +1902 -0
- molSimplify/tf_nn/split/split_y.csv +1902 -0
- molSimplify/tf_nn/split/train_names.csv +1901 -0
- molSimplify/utils/__init__.py +0 -0
- molSimplify/utils/decorators.py +16 -0
- molSimplify/utils/metaclasses.py +12 -0
- molSimplify/utils/tensorflow.py +23 -0
- molSimplify/utils/timer.py +16 -0
- molSimplify-1.7.4.dist-info/LICENSE +674 -0
- molSimplify-1.7.4.dist-info/METADATA +821 -0
- molSimplify-1.7.4.dist-info/RECORD +651 -0
- molSimplify-1.7.4.dist-info/WHEEL +5 -0
- molSimplify-1.7.4.dist-info/entry_points.txt +3 -0
- molSimplify-1.7.4.dist-info/top_level.txt +4 -0
- tests/generateTests.py +122 -0
- tests/helperFuncs.py +658 -0
- tests/informatics/test_MOF_descriptors.py +128 -0
- tests/informatics/test_active_learning.py +113 -0
- tests/informatics/test_coulomb_analyze.py +24 -0
- tests/informatics/test_graph_racs.py +193 -0
- tests/ml/test_kernels.py +20 -0
- tests/ml/test_layers.py +47 -0
- tests/runtest.py +10 -0
- tests/test_Mol2D.py +128 -0
- tests/test_basic_imports.py +62 -0
- tests/test_bidentate.py +25 -0
- tests/test_cli.py +20 -0
- tests/test_distgeom.py +106 -0
- tests/test_example_1.py +29 -0
- tests/test_example_3.py +31 -0
- tests/test_example_5.py +43 -0
- tests/test_example_7.py +28 -0
- tests/test_example_8.py +15 -0
- tests/test_example_tbp.py +15 -0
- tests/test_ff_xtb.py +111 -0
- tests/test_geocheck_oct.py +26 -0
- tests/test_geocheck_one_empty.py +15 -0
- tests/test_geometry.py +44 -0
- tests/test_inparse.py +76 -0
- tests/test_io.py +84 -0
- tests/test_jobgen.py +84 -0
- tests/test_joption_pythonic.py +27 -0
- tests/test_ligand_assign.py +58 -0
- tests/test_ligand_assign_consistent.py +60 -0
- tests/test_ligand_class.py +26 -0
- tests/test_ligand_from_mol_file.py +35 -0
- tests/test_ligands.py +86 -0
- tests/test_mol3D.py +337 -0
- tests/test_molcas_caspt2.py +15 -0
- tests/test_molcas_casscf.py +15 -0
- tests/test_old_ANNs.py +68 -0
- tests/test_orca_ccsdt.py +15 -0
- tests/test_orca_dft.py +15 -0
- tests/test_qcgen.py +50 -0
- tests/test_racs.py +124 -0
- tests/test_rmsd.py +68 -0
- tests/test_structgen_functions.py +198 -0
- tests/test_tetrahedral.py +29 -0
- tests/test_tutorial_10_part_one.py +16 -0
- tests/test_tutorial_10_part_two.py +15 -0
- tests/test_tutorial_2.py +11 -0
- tests/test_tutorial_3.py +15 -0
- tests/test_tutorial_4.py +57 -0
- tests/test_tutorial_6.py +10 -0
- tests/test_tutorial_8.py +29 -0
- tests/test_tutorial_9_part_one.py +15 -0
- tests/test_tutorial_9_part_two.py +15 -0
- tests/test_tutorial_qm9_part_one.py +6 -0
- tests/testresources/refs/racs/generate_references.py +85 -0
- workflows/NandyJACSAu2022/bridge_functionalizer.py +253 -0
- workflows/NandyJACSAu2022/frag_functionalizer.py +242 -0
- workflows/NandyJACSAu2022/fragment_classes.py +586 -0
- workflows/NandyJACSAu2022/macrocycle_synthesis.py +179 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
# @file postparse.py
|
|
2
|
+
# Post-processes quantum chemistry output files
|
|
3
|
+
#
|
|
4
|
+
# Written by Tim Ioannidis for HJK Group
|
|
5
|
+
#
|
|
6
|
+
# Dpt of Chemical Engineering, MIT
|
|
7
|
+
|
|
8
|
+
import time
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Gets subset of string between two substrings
|
|
13
|
+
# @param s String to be split
|
|
14
|
+
# @param first First substring
|
|
15
|
+
# @param last Last substring
|
|
16
|
+
# @return Subset of string between substrings
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def find_between(s, first, last):
|
|
20
|
+
# returns string between first and last substrings
|
|
21
|
+
s = s.split(first, 1)
|
|
22
|
+
if len(s) > 1:
|
|
23
|
+
s = s[1].split(last, 1)
|
|
24
|
+
return s[0]
|
|
25
|
+
else:
|
|
26
|
+
return ""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# List of metals
|
|
30
|
+
metals = {'Sc': 21, 'Ti': 22, 'V': 23, 'Cr': 24, 'Mn': 25, 'Fe': 26, 'Co': 27, 'Ni': 28, 'Cu': 29,
|
|
31
|
+
'Y': 39, 'Zr': 40, 'Nb': 41, 'Mo': 42, 'Tc': 43, 'Ru': 44, 'Rh': 45, 'Pd': 46, 'Pt': 78, 'Au': 79, 'In': 49}
|
|
32
|
+
|
|
33
|
+
# Parse unrestricted NBO output
|
|
34
|
+
# @param s String containing NBO output
|
|
35
|
+
# @return NBO output including d-band center and d occupancies
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def nbo_parser_unrestricted(s):
|
|
39
|
+
res = [] # list of output: [atom],[charge],[average % metal-centered hyb in NBOs],
|
|
40
|
+
# [average %d character in NBOs], [average LV orb occup], [average %d char in LVs]
|
|
41
|
+
# averages with respect to occupations
|
|
42
|
+
''' Charge parsing '''
|
|
43
|
+
# get nbo charge
|
|
44
|
+
scharge = s.split('Charge')[1].split('* Total *')[0]
|
|
45
|
+
# get atoms and summary of NP analysis
|
|
46
|
+
scharge = scharge.splitlines()[2:-2]
|
|
47
|
+
MET = False
|
|
48
|
+
# find metal charge
|
|
49
|
+
for line in scharge: # loop over atoms
|
|
50
|
+
if line.split(None)[0] in metals: # find metal in atoms
|
|
51
|
+
res.append(line.split(None)[0])
|
|
52
|
+
res.append(line.split(None)[2])
|
|
53
|
+
MET = True
|
|
54
|
+
# if no metal is found, default to first atom and get charge
|
|
55
|
+
if len(res) == 0:
|
|
56
|
+
res.append(scharge[0].split(None)[0])
|
|
57
|
+
res.append(scharge[0].split(None)[2])
|
|
58
|
+
if MET:
|
|
59
|
+
''' NLMO %NBO parsing '''
|
|
60
|
+
# get metal d occupation
|
|
61
|
+
sstxt = find_between(s, 'Natural Electron Configuration', '********')
|
|
62
|
+
smet = find_between(sstxt, res[0], '\n')
|
|
63
|
+
doccup = find_between(smet, '3d(', ')')
|
|
64
|
+
# get metal d-band center
|
|
65
|
+
sstxt = [_f for _f in find_between(
|
|
66
|
+
s, 'NATURAL POPULATIONS', 'Summary').splitlines() if _f]
|
|
67
|
+
dband = 0.0
|
|
68
|
+
for ll in sstxt:
|
|
69
|
+
la = [_f for _f in ll.split(None) if _f]
|
|
70
|
+
if len(la) > 4:
|
|
71
|
+
if(la[1] == res[0] and la[4] == 'Val(' and la[5] == '3d)'):
|
|
72
|
+
dband += 0.2*float(la[7])
|
|
73
|
+
# split output for alpha beta electrons
|
|
74
|
+
salpha = s.split('Alpha spin orbitals')[1]
|
|
75
|
+
sbeta = salpha.split('Beta spin orbitals')[1]
|
|
76
|
+
salpha = salpha.split('Beta spin orbitals')[0]
|
|
77
|
+
# parse alpha
|
|
78
|
+
# output list with [occup,%metal hyb,%d in metal hyb]
|
|
79
|
+
[alphares] = spinnbo(salpha, res[0])
|
|
80
|
+
# anlmo = spinnlmo(salpha,res[0]) # output list with [occup,%metal hyb,%d in metal hyb]
|
|
81
|
+
anlmo = [0.0, 0.0, 0.0]
|
|
82
|
+
# parse beta
|
|
83
|
+
# output list with [occup,%metal hyb,%d in metal hyb]
|
|
84
|
+
[betares] = spinnbo(sbeta, res[0])
|
|
85
|
+
# bnlmo = spinnlmo(sbeta,res[0]) # output list with [occup,%metal hyb,%d in metal hyb]
|
|
86
|
+
bnlmo = [0.0, 0.0, 0.0]
|
|
87
|
+
# average results from alpha, beta
|
|
88
|
+
hyb = 0.0
|
|
89
|
+
dper = 0.0
|
|
90
|
+
occtot = 0.0
|
|
91
|
+
for entry in alphares:
|
|
92
|
+
hyb += float(entry[0])*0.01*float(entry[1])
|
|
93
|
+
dper += float(entry[0])*1e-4*float(entry[1])*float(entry[2])
|
|
94
|
+
occtot += float(entry[0])
|
|
95
|
+
for entry in betares:
|
|
96
|
+
hyb += float(entry[0])*0.01*float(entry[1])
|
|
97
|
+
dper += float(entry[0])*1e-4*float(entry[1])*float(entry[2])
|
|
98
|
+
occtot += float(entry[0])
|
|
99
|
+
# normalize with respect to total occupation
|
|
100
|
+
if occtot > 0:
|
|
101
|
+
res.append(hyb/occtot)
|
|
102
|
+
res.append(dper/occtot)
|
|
103
|
+
else:
|
|
104
|
+
res.append(0.0)
|
|
105
|
+
res.append(0.0)
|
|
106
|
+
if (anlmo[0]+bnlmo[0]) > 0:
|
|
107
|
+
# combine nlmo data
|
|
108
|
+
nlmotot = (anlmo[1]+bnlmo[1])/(anlmo[0]+bnlmo[0])
|
|
109
|
+
res.append(nlmotot)
|
|
110
|
+
else:
|
|
111
|
+
res.append(0.0)
|
|
112
|
+
else:
|
|
113
|
+
res += [0.0, 0.0, 0.0, 0.0, 0.0]
|
|
114
|
+
doccup = 0.0
|
|
115
|
+
dband = 0.0
|
|
116
|
+
return res, doccup, dband
|
|
117
|
+
|
|
118
|
+
# Parse restricted NBO output
|
|
119
|
+
# @param s String containing NBO output
|
|
120
|
+
# @return NBO output
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def nbo_parser_restricted(s):
|
|
124
|
+
res = [] # list of output: [atom],[charge],[average % metal-centered hyb in NBOs],
|
|
125
|
+
# [average %d character in NBOs]
|
|
126
|
+
# averages with respect to occupations
|
|
127
|
+
''' Charge parsing '''
|
|
128
|
+
# get nbo charge
|
|
129
|
+
scharge = s.split('Charge')[1].split('* Total *')[0]
|
|
130
|
+
# get atoms and summary of NP analysis
|
|
131
|
+
scharge = scharge.splitlines()[2:-2]
|
|
132
|
+
MET = False
|
|
133
|
+
# find metal charge
|
|
134
|
+
for line in scharge: # loop over atoms
|
|
135
|
+
if line.split(None)[0] in metals: # find metal in atoms
|
|
136
|
+
res.append(line.split(None)[0])
|
|
137
|
+
res.append(line.split(None)[2])
|
|
138
|
+
MET = True
|
|
139
|
+
if len(res) == 0:
|
|
140
|
+
res.append(scharge[0].split(None)[0])
|
|
141
|
+
res.append(scharge[0].split(None)[2])
|
|
142
|
+
if MET:
|
|
143
|
+
''' NLMO %NBO parsing '''
|
|
144
|
+
[totres, tLV] = spinnbo(
|
|
145
|
+
s, res[0]) # output list with [occup,%metal hyb,%d in metal hyb]
|
|
146
|
+
# output list with [occup,%metal hyb,%d in metal hyb]
|
|
147
|
+
nlmores = spinnlmo(s, res[0])
|
|
148
|
+
# average results from alpha, beta
|
|
149
|
+
hyb = 0.0
|
|
150
|
+
dper = 0.0
|
|
151
|
+
occtot = 0.0
|
|
152
|
+
for entry in totres:
|
|
153
|
+
hyb += float(entry[0])*0.01*float(entry[1])
|
|
154
|
+
dper += float(entry[0])*1e-4*float(entry[1])*float(entry[2])
|
|
155
|
+
occtot += float(entry[0])
|
|
156
|
+
else:
|
|
157
|
+
# if no metal do not perform analysis
|
|
158
|
+
hyb = 0.0
|
|
159
|
+
occtot = 1.0
|
|
160
|
+
dper = 0.0
|
|
161
|
+
nlmores = [1.0, 0.0]
|
|
162
|
+
# normalize with respect to total occupation
|
|
163
|
+
res.append(hyb/occtot)
|
|
164
|
+
res.append(dper/occtot)
|
|
165
|
+
res.append(0.01*nlmores[1]/nlmores[0])
|
|
166
|
+
return res
|
|
167
|
+
|
|
168
|
+
# Get information on orbitals with metal character
|
|
169
|
+
# @param s String containing NBO output
|
|
170
|
+
# @param metal Element name of metal
|
|
171
|
+
# @return Orbital information
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def spinnbo(s, metal):
|
|
175
|
+
sNBO = []
|
|
176
|
+
# get molecular orbitals containing metal
|
|
177
|
+
ss = s.split('NATURAL BOND ORBITAL')[1]
|
|
178
|
+
ss2 = ss.split('DIRECTIONALITY')
|
|
179
|
+
if len(ss2) > 1:
|
|
180
|
+
slines = ss[1].splitlines()
|
|
181
|
+
else:
|
|
182
|
+
slines = ss.splitlines()
|
|
183
|
+
for i, line in enumerate(slines):
|
|
184
|
+
if ((metal in line) and ('BD' in line)):
|
|
185
|
+
# get NBO occupation
|
|
186
|
+
occup = find_between(line.split(None)[1], '(', ')')
|
|
187
|
+
# get block of NBO
|
|
188
|
+
no = line.split(None)[0].strip(' ')
|
|
189
|
+
# join rest of text to search
|
|
190
|
+
ttt = ''
|
|
191
|
+
for lt in slines[i:i+20]:
|
|
192
|
+
ttt += lt + '\n'
|
|
193
|
+
# find metal centered hybrid inside NBO block
|
|
194
|
+
sa = find_between(
|
|
195
|
+
ttt, no+' (', str(int(no[0:2])+1)+'. (').splitlines()
|
|
196
|
+
ml = [ll for ll in sa[1:] if metal in ll] # metal centered hybrid
|
|
197
|
+
if len(ml) > 0:
|
|
198
|
+
perhyb = find_between(ml[0], '(', '%').strip(
|
|
199
|
+
' ') # get % of metal hyb in NBO
|
|
200
|
+
perds = ml[0].rsplit('(', 1)
|
|
201
|
+
perd = perds[-1].split('%)')[0] # get d orbital character
|
|
202
|
+
# append result
|
|
203
|
+
sNBO.append([occup, perhyb, perd])
|
|
204
|
+
return [sNBO]
|
|
205
|
+
|
|
206
|
+
# Get unrestricted NLMO information
|
|
207
|
+
# @param s String containing NBO output
|
|
208
|
+
# @param metal Element name of metal
|
|
209
|
+
# @return NLMO information
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def spinnlmo(s, metal):
|
|
213
|
+
# get NLMOs containing metal
|
|
214
|
+
ss = s.split('NATURAL LOCALIZED MOLECULAR ORBITAL (NLMO) ANALYSIS')[
|
|
215
|
+
1].splitlines()
|
|
216
|
+
nlmoccup = 0.0
|
|
217
|
+
pernlmo = 0.0
|
|
218
|
+
for line in ss:
|
|
219
|
+
if ((metal in line) and ('BD' in line)):
|
|
220
|
+
# get NBO occupation
|
|
221
|
+
nlmoccup += float(find_between(line.split(None)
|
|
222
|
+
[1], '(', ')').strip(' '))
|
|
223
|
+
# get %NBO in NLMO
|
|
224
|
+
pernlmo += 0.01*float(find_between(line, ')', '%').strip(' '))
|
|
225
|
+
nlmo = [nlmoccup, pernlmo]
|
|
226
|
+
return nlmo
|
|
227
|
+
|
|
228
|
+
# Parse NBO output
|
|
229
|
+
# @param resfiles Files to be post-processed
|
|
230
|
+
# @param folder Folder containing runs
|
|
231
|
+
# @param gui GUI flag
|
|
232
|
+
# @param flog Log file name
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def nbopost(resfiles, folder, gui, flog):
|
|
236
|
+
t = time.strftime('%c')
|
|
237
|
+
headern = "Date: " + t + \
|
|
238
|
+
"\nHere are the current results for runs in folder '"+folder+"'\n"
|
|
239
|
+
headern += "\nFolder Metal MCharge AvhybNBO AvDorbNBO AvNLMO Doccup Dband-center\n"
|
|
240
|
+
headern += "----------------------------------------------------------------------------------------------------------------------------------------\n"
|
|
241
|
+
textnbo = []
|
|
242
|
+
for numi, resf in enumerate(resfiles):
|
|
243
|
+
resfp = os.path.relpath(resf, folder)
|
|
244
|
+
resd = resf.rsplit('/', 1)[0]
|
|
245
|
+
resfold = os.path.relpath(resd, folder)
|
|
246
|
+
print(('Processing ', resfp))
|
|
247
|
+
flog.write('Processing '+resfp+'\n')
|
|
248
|
+
if gui:
|
|
249
|
+
gui.iWtxt.setText('Processing '+resfp+'\n'+gui.iWtxt.toPlainText())
|
|
250
|
+
gui.app.processEvents()
|
|
251
|
+
with open(resf) as f:
|
|
252
|
+
s = f.read()
|
|
253
|
+
# split output into QC and nbo parts
|
|
254
|
+
ssp = ' N A T U R A L A T O M I C O R B I T A L'
|
|
255
|
+
if ssp in s:
|
|
256
|
+
snbo = s.split(ssp)[-1] # get nbo output
|
|
257
|
+
# check if unrestricted
|
|
258
|
+
if 'Beta spin orbitals' in s:
|
|
259
|
+
nbores, doccup, dband = nbo_parser_unrestricted(snbo)
|
|
260
|
+
tt = resfold.ljust(50) + nbores[0].ljust(6)+"{:6.4f}".format(
|
|
261
|
+
float(nbores[1])).ljust(10)+"{:6.4f}".format(nbores[2]).ljust(10)
|
|
262
|
+
tt += "{:6.4f}".format(nbores[3]).ljust(10) + \
|
|
263
|
+
"{:6.5f}".format(nbores[4]).ljust(12)
|
|
264
|
+
tt += "{:4.2f}".format(float(doccup)).ljust(12) + \
|
|
265
|
+
"{:4.2f}".format(dband).ljust(10)+'\n'
|
|
266
|
+
else:
|
|
267
|
+
nbores = nbo_parser_restricted(snbo)
|
|
268
|
+
tt = resfold.ljust(50) + nbores[0].ljust(6)+"{:6.4f}".format(
|
|
269
|
+
float(nbores[1])).ljust(10)+"{:6.4f}".format(nbores[2]).ljust(10)
|
|
270
|
+
tt += "{:6.4f}".format(nbores[3]).ljust(10)+'\n'
|
|
271
|
+
textnbo.append(tt)
|
|
272
|
+
textnbo = sorted(textnbo)
|
|
273
|
+
with open(folder+'/nbo.txt', 'w') as f:
|
|
274
|
+
f.write(headern+''.join(textnbo))
|
|
275
|
+
|
|
276
|
+
# Parse terachem output
|
|
277
|
+
# @param resfiles Files to be post-processed
|
|
278
|
+
# @param folder Folder containing runs
|
|
279
|
+
# @param gui GUI flag
|
|
280
|
+
# @param flog Log file name
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def terapost(resfiles, folder, gui, flog):
|
|
284
|
+
t = time.strftime('%c')
|
|
285
|
+
flog.write(
|
|
286
|
+
'################## Calculating results summary ##################\n\n')
|
|
287
|
+
header = "Date: " + t + "\nHere are the current results for runs in folder '"+folder+"'\n"
|
|
288
|
+
header += "\nFolder Compound Method %HF Restricted Optim Converged NoSteps Spin S^2 Charge Energy(au) Time(s)\n"
|
|
289
|
+
header += "------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"
|
|
290
|
+
# loop over folders
|
|
291
|
+
text = []
|
|
292
|
+
for numi, resf in enumerate(resfiles):
|
|
293
|
+
resfp = os.path.relpath(resf, folder)
|
|
294
|
+
resd = resf.rsplit('/', 1)[0]
|
|
295
|
+
resfold = os.path.relpath(resd, folder)
|
|
296
|
+
print(('Processing ', resfp))
|
|
297
|
+
flog.write('Processing '+resfp+'\n')
|
|
298
|
+
if gui:
|
|
299
|
+
gui.iWtxt.setText('Processing '+resfp+'\n'+gui.iWtxt.toPlainText())
|
|
300
|
+
with open(resf) as f:
|
|
301
|
+
s = f.read()
|
|
302
|
+
# split output into terachem and nbo parts
|
|
303
|
+
stera = s # get tera output
|
|
304
|
+
if 'TeraChem' in s:
|
|
305
|
+
ss = stera.splitlines()
|
|
306
|
+
# get simulation parameters
|
|
307
|
+
comp = [line for line in ss if 'XYZ coordinates' in line][0].rsplit(
|
|
308
|
+
None, 1)[-1]
|
|
309
|
+
comp = comp.split('.xyz')[0] # compound name
|
|
310
|
+
spin = [line for line in ss if 'Spin multiplicity:' in line][0].rsplit(
|
|
311
|
+
None, 1)[-1] # spin mult
|
|
312
|
+
# SPIN S-SQUARED
|
|
313
|
+
ssq = [_f for _f in [
|
|
314
|
+
line for line in ss if 'SPIN S-SQUARED' in line] if _f]
|
|
315
|
+
if (len(ssq) > 0):
|
|
316
|
+
ssqs = [_f for _f in ssq[-1].split(')') if _f]
|
|
317
|
+
ssq = ssqs[-1].split(None)[-1]
|
|
318
|
+
else:
|
|
319
|
+
ssq = 'NA'
|
|
320
|
+
tcharge = [line for line in ss if 'Total charge:' in line]
|
|
321
|
+
if len(tcharge) > 0:
|
|
322
|
+
tcharge = tcharge[0].rsplit(None, 1)[-1] # total charge
|
|
323
|
+
else:
|
|
324
|
+
tcharge = 'ERROR'
|
|
325
|
+
UR = [line for line in ss if 'Wavefunction:' in line][0].rsplit(
|
|
326
|
+
None, 1)[-1][0] # U/R (Un)restricted
|
|
327
|
+
smethod = [line for line in ss if 'Method:' in line][0].split(
|
|
328
|
+
None) # functional
|
|
329
|
+
method = smethod[1]
|
|
330
|
+
if (smethod[-2] == 'dispersion'):
|
|
331
|
+
method += '-D'
|
|
332
|
+
hfx = [line for line in ss if 'Hartree-Fock exact exchange:' in line]
|
|
333
|
+
if len(hfx) > 0:
|
|
334
|
+
hfx = hfx[0].rsplit(None, 1)[-1] # HFX
|
|
335
|
+
else:
|
|
336
|
+
hfx = '0.0'
|
|
337
|
+
# optimization?
|
|
338
|
+
optim = [line for line in ss if 'RUNNING GEOMETRY' in line]
|
|
339
|
+
optim = 'Y' if len(optim) > 0 else 'N'
|
|
340
|
+
# get results
|
|
341
|
+
en = [line for line in ss if 'FINAL ENERGY:' in line] # energy
|
|
342
|
+
en = en[-1].rsplit(None, 2)[-2] if len(en) > 0 else 'NaN'
|
|
343
|
+
if (optim == 'Y'):
|
|
344
|
+
conv = [line for line in ss if 'Converged!' in line]
|
|
345
|
+
conv = 'Y' if len(conv) > 0 else 'N'
|
|
346
|
+
if conv == 'Y':
|
|
347
|
+
lnosteps = [
|
|
348
|
+
line for line in ss if 'Number of steps' in line][-1]
|
|
349
|
+
nosteps = [_f for _f in lnosteps.split(None) if _f][-1]
|
|
350
|
+
else:
|
|
351
|
+
nosteps = 'NA'
|
|
352
|
+
else:
|
|
353
|
+
conv = 'NA'
|
|
354
|
+
nosteps = 'NA'
|
|
355
|
+
timet = [line for line in ss if 'Total processing time:' in line]
|
|
356
|
+
if (len(timet) > 0):
|
|
357
|
+
tm = timet[0].rsplit(None, 2)[-2]
|
|
358
|
+
else:
|
|
359
|
+
tm = 'NOT DONE'
|
|
360
|
+
# construct string record of results
|
|
361
|
+
tt = resfold.ljust(50)+comp.ljust(12)+method.ljust(7)+("{:3.0f}".format(100*float(hfx))+'%').ljust(
|
|
362
|
+
10)+UR.ljust(10)+optim.ljust(8)+conv.ljust(9)+nosteps.ljust(10)+spin.ljust(5)+ssq.ljust(9)
|
|
363
|
+
tt += tcharge.ljust(6) + \
|
|
364
|
+
"{:10.6f}".format(float(en)).ljust(18)+tm+'\n'
|
|
365
|
+
text.append(tt)
|
|
366
|
+
# sort alphabetically and print
|
|
367
|
+
text = sorted(text)
|
|
368
|
+
if len(text) > 0:
|
|
369
|
+
with open(folder+'/tera-results.txt', 'w') as f:
|
|
370
|
+
f.write(header+''.join(text))
|
|
371
|
+
|
|
372
|
+
# Parse GAMESS output
|
|
373
|
+
# @param resfiles Files to be post-processed
|
|
374
|
+
# @param folder Folder containing runs
|
|
375
|
+
# @param gui GUI flag
|
|
376
|
+
# @param flog Log file name
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
def gampost(resfiles, folder, gui, flog):
|
|
380
|
+
t = time.strftime('%c')
|
|
381
|
+
header = "Date: " + t + "\nHere are the current results for runs in folder '"+folder+"'\n"
|
|
382
|
+
header += "\nFolder Method %MGGA %LDA Optim Converged NoSteps S-SQ Spin Charge Energy(au) Time(MIN)\n"
|
|
383
|
+
header += "--------------------------------------------------------------------------------------------------------------------------------------------------------\n"
|
|
384
|
+
# loop over folders
|
|
385
|
+
text = []
|
|
386
|
+
flog.write(
|
|
387
|
+
'################## Calculating results summary ##################\n\n')
|
|
388
|
+
for numi, resf in enumerate(resfiles):
|
|
389
|
+
error = False
|
|
390
|
+
resfp = os.path.relpath(resf, folder)
|
|
391
|
+
resd = resf.rsplit('/', 1)[0]
|
|
392
|
+
resfold = os.path.relpath(resd, folder)
|
|
393
|
+
if gui:
|
|
394
|
+
gui.iWtxt.setText('Processing '+resfp+'\n'+gui.iWtxt.toPlainText())
|
|
395
|
+
gui.app.processEvents()
|
|
396
|
+
print(('Processing '+resfp))
|
|
397
|
+
flog.write('Processing '+resfp+'\n')
|
|
398
|
+
if len(resfold) > 1:
|
|
399
|
+
resfold = resfold[-2]
|
|
400
|
+
else:
|
|
401
|
+
resfold = resfold[-1]
|
|
402
|
+
with open(resf) as f:
|
|
403
|
+
s = f.read()
|
|
404
|
+
if 'GAMESS' in s:
|
|
405
|
+
sgam = s # get gamess output
|
|
406
|
+
''' Parse gamess output '''
|
|
407
|
+
ss = sgam.splitlines()
|
|
408
|
+
# get simulation parameters
|
|
409
|
+
comp = resfold.split('/', 1)[-1]
|
|
410
|
+
spins = [line for line in ss if 'SPIN MULTIPLICITY' in line]
|
|
411
|
+
if len(spins) > 0:
|
|
412
|
+
spin = spins[0].rsplit(None, 1)[-1] # spin mult
|
|
413
|
+
tcharge = [line for line in ss if 'CHARGE OF MOLECULE' in line]
|
|
414
|
+
if len(tcharge) > 0:
|
|
415
|
+
tcharge = tcharge[0].rsplit(None, 1)[-1] # total charge
|
|
416
|
+
else:
|
|
417
|
+
tcharge = 'ERROR'
|
|
418
|
+
smethod = [line for line in ss if 'DFTTYP=' in line][0].split(
|
|
419
|
+
'DFTTYP=') # functional
|
|
420
|
+
if len(smethod) > 0:
|
|
421
|
+
method = smethod[-1].split(None, 1)[0]
|
|
422
|
+
if (smethod[-2] == 'dispersion'):
|
|
423
|
+
method += '-D'
|
|
424
|
+
errmsgs = [line for line in ss if 'semget return an error' in line]
|
|
425
|
+
if len(errmsgs) > 0:
|
|
426
|
+
error = True
|
|
427
|
+
aplda = [line for line in ss if 'APLDA=' in line]
|
|
428
|
+
if len(aplda) > 0:
|
|
429
|
+
aplda = aplda[0].split('APLDA=', 1)[1]
|
|
430
|
+
aplda = aplda.split(None, 1)[0]
|
|
431
|
+
else:
|
|
432
|
+
aplda = 'NA'
|
|
433
|
+
apgga = [line for line in ss if 'APGGA=' in line]
|
|
434
|
+
if len(apgga) > 0:
|
|
435
|
+
apgga = apgga[0].split('APGGA=', 1)[1]
|
|
436
|
+
apgga = apgga.split(None, 1)[0]
|
|
437
|
+
else:
|
|
438
|
+
apgga = 'NA'
|
|
439
|
+
# SPIN S-SQUARED
|
|
440
|
+
ssq = [_f for _f in [line for line in ss if 'S-SQUARED' in line] if _f]
|
|
441
|
+
if (len(ssq) > 0):
|
|
442
|
+
ssqs = [_f for _f in ssq[-1].split(')') if _f]
|
|
443
|
+
ssq = ssqs[-1].split(None)[-1]
|
|
444
|
+
else:
|
|
445
|
+
ssq = 'NA'
|
|
446
|
+
# optimization?
|
|
447
|
+
optim = [line for line in ss if 'OPTIMIZE' in line]
|
|
448
|
+
optim = 'Y' if len(optim) > 0 else 'N'
|
|
449
|
+
# get results
|
|
450
|
+
en = [line for line in ss if 'FINAL U' in line] # energy
|
|
451
|
+
en = en[-1].split(None)[4] if len(en) > 0 else 'NaN'
|
|
452
|
+
conv = 'NA'
|
|
453
|
+
if (optim == 'Y'):
|
|
454
|
+
conv = [
|
|
455
|
+
line for line in ss if 'EQUILIBRIUM GEOMETRY LOCATED' in line]
|
|
456
|
+
conv = 'Y' if len(conv) > 0 else 'N'
|
|
457
|
+
if conv == 'Y':
|
|
458
|
+
lnosteps = [line for line in ss if 'NSERCH:' in line][-1]
|
|
459
|
+
nosteps = [_f for _f in lnosteps.split(None) if _f][1]
|
|
460
|
+
else:
|
|
461
|
+
nosteps = 'NA'
|
|
462
|
+
else:
|
|
463
|
+
conv = 'NA'
|
|
464
|
+
nosteps = 'NA'
|
|
465
|
+
timet = [line for line in ss if 'TOTAL WALL CLOCK TIME' in line]
|
|
466
|
+
if (len(timet) > 0):
|
|
467
|
+
tm = timet[-1].split('=', 1)[-1]
|
|
468
|
+
tm = tm.split('SECONDS', 1)[0]
|
|
469
|
+
tm = "{:10.1f}".format(float(tm)/60.0) # convert to MIN
|
|
470
|
+
else:
|
|
471
|
+
tm = 'NOT DONE'
|
|
472
|
+
# construct string record of results
|
|
473
|
+
if not error:
|
|
474
|
+
tt = resfold.ljust(50)+method.ljust(9) + \
|
|
475
|
+
apgga.ljust(8)+aplda.ljust(8)
|
|
476
|
+
tt += optim.ljust(9)+conv.ljust(9) + \
|
|
477
|
+
nosteps.ljust(8)+ssq.ljust(9)+spin.ljust(8)
|
|
478
|
+
tt += tcharge.ljust(6) + \
|
|
479
|
+
"{:10.6f}".format(float(en)).ljust(14)+tm+'\n'
|
|
480
|
+
else:
|
|
481
|
+
tt = resfold.ljust(40)+comp.ljust(12) + \
|
|
482
|
+
'ERROR in the calculation\n'
|
|
483
|
+
text.append(tt)
|
|
484
|
+
# sort alphabetically and print
|
|
485
|
+
text = sorted(text)
|
|
486
|
+
if len(text) > 0:
|
|
487
|
+
with open(folder+'/gam-results.txt', 'w') as f:
|
|
488
|
+
f.write(header+''.join(text))
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# @file postproc.py
|
|
2
|
+
# Main postprocessing driver
|
|
3
|
+
#
|
|
4
|
+
# Written by Tim Ioannidis for HJK Group
|
|
5
|
+
#
|
|
6
|
+
# Dpt of Chemical Engineering, MIT
|
|
7
|
+
|
|
8
|
+
import glob
|
|
9
|
+
import os
|
|
10
|
+
import shutil
|
|
11
|
+
import time
|
|
12
|
+
|
|
13
|
+
from molSimplify.Scripts.postmold import (moldpost)
|
|
14
|
+
from molSimplify.Scripts.postmwfn import (deloc,
|
|
15
|
+
getcharges,
|
|
16
|
+
getcubes,
|
|
17
|
+
getwfnprops,
|
|
18
|
+
globalvars,
|
|
19
|
+
mybash)
|
|
20
|
+
from molSimplify.Scripts.postparse import (gampost,
|
|
21
|
+
nbopost,
|
|
22
|
+
terapost)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Check if multiwfn exists
|
|
26
|
+
# @param mdir Multiwfn directory
|
|
27
|
+
# @return bool
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def checkmultiwfn(mdir):
|
|
31
|
+
if not glob.glob(mdir):
|
|
32
|
+
return False
|
|
33
|
+
else:
|
|
34
|
+
return True
|
|
35
|
+
|
|
36
|
+
# Main postprocessing driver
|
|
37
|
+
# @param rundir Runs directory
|
|
38
|
+
# @param args Namespace of arguments
|
|
39
|
+
# @param globs Global variables
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def postproc(rundir, args, globs):
|
|
43
|
+
globs = globalvars()
|
|
44
|
+
if args.gui:
|
|
45
|
+
from molSimplify.Classes.mWidgets import mQDialogInf
|
|
46
|
+
choice = mQDialogInf(
|
|
47
|
+
'Post processing', 'Parsing the results will take a while..Please be patient. Start?')
|
|
48
|
+
choice.setParent(args.gui.pWindow)
|
|
49
|
+
# locate output files
|
|
50
|
+
pdir = args.postdir if args.postdir else globs.rundir
|
|
51
|
+
cmd = "find '"+pdir+"' -name *out"
|
|
52
|
+
t = mybash(cmd)
|
|
53
|
+
resf = t.splitlines()
|
|
54
|
+
logfile = pdir+"/post.log"
|
|
55
|
+
if not os.path.isdir(pdir):
|
|
56
|
+
print(('\nSpecified directory '+pdir+' does not exist..\n\n'))
|
|
57
|
+
if args.gui:
|
|
58
|
+
args.gui.iWtxt.setText(
|
|
59
|
+
'\nSpecified directory '+pdir+' does not exist.\n\n'+args.gui.iWtxt.toPlainText())
|
|
60
|
+
return
|
|
61
|
+
with open(logfile, 'a') as flog:
|
|
62
|
+
flog.write('\n\n\n##### Date: ' +
|
|
63
|
+
time.strftime('%m/%d/%Y %H:%M')+'#####\n\n')
|
|
64
|
+
# run summary report
|
|
65
|
+
if args.pres:
|
|
66
|
+
print('\nGetting runs summary..\n\n')
|
|
67
|
+
flog.write('\nGetting runs summary..\n\n')
|
|
68
|
+
if args.gui:
|
|
69
|
+
args.gui.iWtxt.setText(
|
|
70
|
+
'\nGetting runs summary..\n\n'+args.gui.iWtxt.toPlainText())
|
|
71
|
+
terapost(resf, pdir, args.gui, flog)
|
|
72
|
+
gampost(resf, pdir, args.gui, flog)
|
|
73
|
+
# run nbo analysis
|
|
74
|
+
if args.pnbo:
|
|
75
|
+
print('\nGetting NBO summary..\n\n')
|
|
76
|
+
flog.write('\nGetting NBO summary..\n\n')
|
|
77
|
+
if args.gui:
|
|
78
|
+
args.gui.iWtxt.setText(
|
|
79
|
+
'\nGetting NBO summary..\n\n'+args.gui.iWtxt.toPlainText())
|
|
80
|
+
nbopost(resf, pdir, args.gui, flog)
|
|
81
|
+
# locate molden files
|
|
82
|
+
cmd = "find "+"'"+pdir+"'"+" -name *molden"
|
|
83
|
+
t = mybash(cmd)
|
|
84
|
+
molf = t.splitlines()
|
|
85
|
+
# parse molecular orbitals
|
|
86
|
+
if args.porbinfo:
|
|
87
|
+
print('\nGetting MO information..\n\n')
|
|
88
|
+
flog.write('\nGetting MO information..\n\n')
|
|
89
|
+
if args.gui:
|
|
90
|
+
args.gui.iWtxt.setText(
|
|
91
|
+
'\nGetting MO information..\n\n'+args.gui.iWtxt.toPlainText())
|
|
92
|
+
if not os.path.isdir(pdir+'/MO_files'):
|
|
93
|
+
os.mkdir(pdir+'/MO_files')
|
|
94
|
+
moldpost(molf, pdir, args.gui, flog)
|
|
95
|
+
# calculate delocalization indices
|
|
96
|
+
if args.pdeloc:
|
|
97
|
+
print('\nCalculating delocalization indices..\n\n')
|
|
98
|
+
flog.write('\nCalculating delocalization indices..\n\n')
|
|
99
|
+
if args.gui:
|
|
100
|
+
args.gui.iWtxt.setText(
|
|
101
|
+
'\nCalculating delocalization indices..\n\n'+args.gui.iWtxt.toPlainText())
|
|
102
|
+
if not os.path.isdir(pdir+'/Deloc_files'):
|
|
103
|
+
os.mkdir(pdir+'/Deloc_files')
|
|
104
|
+
deloc(molf, pdir, args.gui, flog)
|
|
105
|
+
# calculate charges
|
|
106
|
+
if args.pcharge:
|
|
107
|
+
print('\nCalculating charges..\n\n')
|
|
108
|
+
flog.write('\nCalculating charges..\n\n')
|
|
109
|
+
if args.gui:
|
|
110
|
+
args.gui.iWtxt.setText(
|
|
111
|
+
'\nCalculating charges..\n\n'+args.gui.iWtxt.toPlainText())
|
|
112
|
+
if not os.path.isdir(pdir+'/Charge_files'):
|
|
113
|
+
os.mkdir(pdir+'/Charge_files')
|
|
114
|
+
getcharges(molf, pdir, args.gui, flog)
|
|
115
|
+
# parse wavefunction
|
|
116
|
+
if args.pwfninfo:
|
|
117
|
+
print('\nCalculating wavefunction properties..\n\n')
|
|
118
|
+
flog.write('\nCalculating wavefunction properties..\n\n')
|
|
119
|
+
if args.gui:
|
|
120
|
+
args.gui.iWtxt.setText(
|
|
121
|
+
'\nCalculating wavefunction properties..\n\n'+args.gui.iWtxt.toPlainText())
|
|
122
|
+
if not os.path.isdir(pdir+'/Wfn_files'):
|
|
123
|
+
os.mkdir(pdir+'/Wfn_files')
|
|
124
|
+
if not os.path.isdir(pdir+'/Cube_files'):
|
|
125
|
+
os.mkdir(pdir+'/Cube_files')
|
|
126
|
+
getcubes(molf, pdir, args.gui, flog)
|
|
127
|
+
getwfnprops(molf, pdir, args.gui, flog)
|
|
128
|
+
if not args.pgencubes and os.path.isdir(pdir+'/Cube_files'):
|
|
129
|
+
shutil.rmtree(pdir+'/Cube_files')
|
|
130
|
+
# generate cube files
|
|
131
|
+
if args.pgencubes:
|
|
132
|
+
print('\nGenerating cube files..\n\n')
|
|
133
|
+
flog.write('\nGenerating cube files..\n\n')
|
|
134
|
+
if args.gui:
|
|
135
|
+
args.gui.iWtxt.setText(
|
|
136
|
+
'\nGenerating cube files..\n\n'+args.gui.iWtxt.toPlainText())
|
|
137
|
+
if not os.path.isdir(pdir+'/Cube_files'):
|
|
138
|
+
os.mkdir(pdir+'/Cube_files')
|
|
139
|
+
getcubes(molf, pdir, args.gui, flog)
|