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,709 @@
|
|
|
1
|
+
# @file postmwfn.py
|
|
2
|
+
# Post-processes Multiwfn output
|
|
3
|
+
#
|
|
4
|
+
# Written by Tim Ioannidis for HJK Group
|
|
5
|
+
#
|
|
6
|
+
# Dpt of Chemical Engineering, MIT
|
|
7
|
+
|
|
8
|
+
import math
|
|
9
|
+
import glob
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from numpy import cross, dot
|
|
13
|
+
from math import sqrt
|
|
14
|
+
|
|
15
|
+
from molSimplify.Classes.globalvars import (globalvars,
|
|
16
|
+
mybash)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Gets distance between points
|
|
20
|
+
# @param R1 Point 1
|
|
21
|
+
# @param R2 Point 2
|
|
22
|
+
# @return Distance
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def distance(R1, R2):
|
|
26
|
+
d = 0.0
|
|
27
|
+
d += pow(R1[0]-R2[0], 2)
|
|
28
|
+
d += pow(R1[1]-R2[1], 2)
|
|
29
|
+
d += pow(R1[2]-R2[2], 2)
|
|
30
|
+
return sqrt(d)
|
|
31
|
+
|
|
32
|
+
# Gets subset of string between two substrings
|
|
33
|
+
# @param s String to be split
|
|
34
|
+
# @param first First substring
|
|
35
|
+
# @param last Last substring
|
|
36
|
+
# @return Subset of string between substrings
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def find_between(s, first, last):
|
|
40
|
+
# returns string between first and last substrings
|
|
41
|
+
s = s.split(first, 1)
|
|
42
|
+
if len(s) > 1:
|
|
43
|
+
s = s[1].split(last, 1)
|
|
44
|
+
return s[0]
|
|
45
|
+
else:
|
|
46
|
+
return ""
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# List of metals
|
|
50
|
+
metals = {'Sc': 21, 'Ti': 22, 'V': 23, 'Cr': 24, 'Mn': 25, 'Fe': 26, 'Co': 27, 'Ni': 28, 'Cu': 29,
|
|
51
|
+
'Y': 39, 'Zr': 40, 'Nb': 41, 'Mo': 42, 'Tc': 43, 'Ru': 44, 'Rh': 45, 'Pd': 46, 'Pt': 78, 'Au': 79, 'In': 49}
|
|
52
|
+
|
|
53
|
+
# Gets distance of Cartesian point to origin
|
|
54
|
+
# @param v Cartesian point
|
|
55
|
+
# @return Distance
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def radial(v):
|
|
59
|
+
rsq = v[1]*v[1]
|
|
60
|
+
rsq += v[2]*v[2]
|
|
61
|
+
rsq += v[3]*v[3]
|
|
62
|
+
return math.sqrt(rsq)
|
|
63
|
+
|
|
64
|
+
# Integrate grid
|
|
65
|
+
# @param den Array of points
|
|
66
|
+
# @param dV Volume of differential element
|
|
67
|
+
# @return Integrated quantity
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def calc(den, dV):
|
|
71
|
+
integral = 0 # initialize integral
|
|
72
|
+
# loop over all integrating cubes
|
|
73
|
+
for dval in den:
|
|
74
|
+
# Sum values
|
|
75
|
+
integral += dval[0]
|
|
76
|
+
integral = integral*dV
|
|
77
|
+
return integral
|
|
78
|
+
|
|
79
|
+
# Calculate spreads and averages of density and ELF
|
|
80
|
+
# @param den Array of densities
|
|
81
|
+
# @param ELF Array of ELF values
|
|
82
|
+
# @param totel Total number of electrons
|
|
83
|
+
# @param dV Volume of differential element
|
|
84
|
+
# @return Spreads and averages (mean, stdev, skewness)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def spreadcalc(den, ELF, totel, dV):
|
|
88
|
+
Rm = 0 # mean distance = av(r*rho)
|
|
89
|
+
Sp = 0 # spread = standard dev
|
|
90
|
+
Sk = 0 # skewness
|
|
91
|
+
Em = 0 # mean ELF
|
|
92
|
+
ESD = 0 # stdv ELF
|
|
93
|
+
ESk = 0 # skewness ELF
|
|
94
|
+
for i, dval in enumerate(den):
|
|
95
|
+
# sum values
|
|
96
|
+
r = radial(dval)
|
|
97
|
+
Rm += dval[0]*r
|
|
98
|
+
Rm = dV*Rm/totel # normalize
|
|
99
|
+
# calculate spread
|
|
100
|
+
for dval in den:
|
|
101
|
+
r = radial(dval)
|
|
102
|
+
Sp += dval[0]*math.pow(r-Rm, 2)
|
|
103
|
+
Sp = math.sqrt(dV*Sp/totel)
|
|
104
|
+
# calculate skewness
|
|
105
|
+
for dval in den:
|
|
106
|
+
r = radial(dval)
|
|
107
|
+
Sk += dval[0]*math.pow((r-Rm)/Sp, 3)
|
|
108
|
+
Sk = dV*Sk/totel
|
|
109
|
+
for i, dval in enumerate(den):
|
|
110
|
+
# sum values
|
|
111
|
+
Em += dval[0]*ELF[i][0]
|
|
112
|
+
Em = dV*Em/totel # normalize
|
|
113
|
+
# calculate spread
|
|
114
|
+
for i, dval in enumerate(den):
|
|
115
|
+
ESD += dval[0]*math.pow(ELF[i][0]-Em, 2)
|
|
116
|
+
ESD = math.sqrt(dV*ESD/totel)
|
|
117
|
+
# calculate skewness
|
|
118
|
+
for i, dval in enumerate(den):
|
|
119
|
+
ESk += dval[0]*math.pow((ELF[i][0]-Em)/ESD, 3)
|
|
120
|
+
ESk = dV*ESk/totel
|
|
121
|
+
return Rm, Sp, Sk, Em, ESD, ESk
|
|
122
|
+
|
|
123
|
+
# Calculate HELP function from cube
|
|
124
|
+
# @param den Array of points
|
|
125
|
+
# @param ELF ELF values
|
|
126
|
+
# @param dV Volume of differential element
|
|
127
|
+
# @return Integrated HELP
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def calcHELP(den, ELF, dV):
|
|
131
|
+
if len(den) != len(ELF):
|
|
132
|
+
exit('ELF and den cube files have not the same dimensions..Exiting.')
|
|
133
|
+
integral = 0 # initialize integral
|
|
134
|
+
# loop over all integrating cubes
|
|
135
|
+
for i, dval in enumerate(den):
|
|
136
|
+
if (dval[0] > 0.001 and ELF[i][0] >= 0.5):
|
|
137
|
+
# Summ values
|
|
138
|
+
integral += dval[0]
|
|
139
|
+
integral = integral*dV
|
|
140
|
+
return integral
|
|
141
|
+
|
|
142
|
+
# Parse cube file
|
|
143
|
+
# @param cubef Name of cube file
|
|
144
|
+
# @return Array of data, volume of differential element
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def parsecube(cubef):
|
|
148
|
+
# open and read cube file
|
|
149
|
+
with open(cubef, 'r') as f:
|
|
150
|
+
s = f.read().splitlines()
|
|
151
|
+
params = []
|
|
152
|
+
for i in range(2, 6):
|
|
153
|
+
ss = [_f for _f in s[i].split(' ') if _f]
|
|
154
|
+
for sss in ss:
|
|
155
|
+
params.append(sss)
|
|
156
|
+
# get parameters
|
|
157
|
+
natoms = int(params[0])
|
|
158
|
+
n1 = int(params[4])
|
|
159
|
+
n2 = int(params[8])
|
|
160
|
+
n3 = int(params[12])
|
|
161
|
+
# origin and direction vectors
|
|
162
|
+
r_origin = [float(params[1]), float(params[2]),
|
|
163
|
+
float(params[3])] # UNITS in bohr
|
|
164
|
+
r1 = [float(params[5]), float(params[6]), float(params[7])]
|
|
165
|
+
r2 = [float(params[9]), float(params[10]), float(params[11])]
|
|
166
|
+
r3 = [float(params[13]), float(params[14]), float(params[15])]
|
|
167
|
+
# Calculate differential vector using |(a x b)*c|
|
|
168
|
+
dV = dot(cross(r1, r2), r3)
|
|
169
|
+
# loop over atoms
|
|
170
|
+
atoms = [[0 for x in range(5)] for x in range(natoms)]
|
|
171
|
+
# check for metal (WITH ECPs YOU NEED TO CORRECT ATOMIC NUMBER inside MOLDEN!)
|
|
172
|
+
mfound = False
|
|
173
|
+
rmetal = [atoms[0][2], atoms[0][3], atoms[0][4]] # metal coordinates
|
|
174
|
+
for i in range(6, 6+natoms):
|
|
175
|
+
ss = [_f for _f in s[i].split(' ') if _f]
|
|
176
|
+
for j, sss in enumerate(ss):
|
|
177
|
+
# each atom contains ATOMIC_NO, Charge, X, Y, Z
|
|
178
|
+
atoms[i-6][j] = float(sss)
|
|
179
|
+
if (21 <= atoms[i-6][0] <= 30) or (39 <= atoms[i-6][0] <= 48) or (72 <= atoms[i-6][0] <= 80):
|
|
180
|
+
rmetal = [atoms[i-6][2], atoms[i-6][3],
|
|
181
|
+
atoms[i-6][4]] # metal coordinates
|
|
182
|
+
mfound = True
|
|
183
|
+
break
|
|
184
|
+
# Check for ECPs
|
|
185
|
+
if not mfound:
|
|
186
|
+
for i in range(6, 6+natoms):
|
|
187
|
+
ss = [_f for _f in s[i].split(' ') if _f]
|
|
188
|
+
for j, sss in enumerate(ss):
|
|
189
|
+
# each atom contains ATOMIC_NO, Charge, X, Y, Z
|
|
190
|
+
atoms[i-6][j] = float(sss)
|
|
191
|
+
if (11 <= atoms[i-6][0] <= 20):
|
|
192
|
+
rmetal = [atoms[i-6][2], atoms[i-6][3],
|
|
193
|
+
atoms[i-6][4]] # metal coordinates
|
|
194
|
+
break
|
|
195
|
+
# read density values
|
|
196
|
+
den = [[0.0 for x in range(5)] for x in range(n1*n2*n3)]
|
|
197
|
+
offset = 6+natoms
|
|
198
|
+
summing = 0
|
|
199
|
+
fmax = 0
|
|
200
|
+
# get wfc values
|
|
201
|
+
sv = ''
|
|
202
|
+
for li in range(offset, len(s)):
|
|
203
|
+
sv += ' '.join(s[li].split('\n'))
|
|
204
|
+
val = [_f for _f in sv.split(' ') if _f]
|
|
205
|
+
for i in range(0, n1):
|
|
206
|
+
for j in range(0, n2):
|
|
207
|
+
for k in range(0, n3):
|
|
208
|
+
idx = i*(n2*n3)+j*n3 + k # global index
|
|
209
|
+
X = r_origin[0] + r1[0]*i + r2[0]*j + r3[0]*k # X value
|
|
210
|
+
Y = r_origin[1] + r1[1]*i + r2[1]*j + r3[1]*k # Y value
|
|
211
|
+
Z = r_origin[2] + r1[2]*i + r2[2]*j + r3[2]*k # Z value
|
|
212
|
+
# each element contains density, x, y, z
|
|
213
|
+
if(abs(float(val[idx])) < 1.0E-10):
|
|
214
|
+
den[idx][0] = 0.0
|
|
215
|
+
else:
|
|
216
|
+
den[idx][0] = float(val[idx])
|
|
217
|
+
summing += den[idx][0]
|
|
218
|
+
if abs(den[idx][0]) > fmax:
|
|
219
|
+
fmax = abs(den[idx][0])
|
|
220
|
+
den[idx][1] = X - rmetal[0] # with reference to Metal
|
|
221
|
+
den[idx][2] = Y - rmetal[1]
|
|
222
|
+
den[idx][3] = Z - rmetal[2]
|
|
223
|
+
return den, dV
|
|
224
|
+
|
|
225
|
+
# Calculate wavefunction properties
|
|
226
|
+
# @param denf Density cube file
|
|
227
|
+
# @param elff ELF cube file
|
|
228
|
+
# @return Integrated HELP, number of electrons, spreads
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def wfncalc(denf, elff):
|
|
232
|
+
[den, dV] = parsecube(denf)
|
|
233
|
+
totel = calc(den, dV)
|
|
234
|
+
[ELF, dV] = parsecube(elff)
|
|
235
|
+
svars = spreadcalc(den, ELF, totel, dV)
|
|
236
|
+
HELPval = calcHELP(den, ELF, dV)
|
|
237
|
+
return HELPval, totel, svars
|
|
238
|
+
|
|
239
|
+
# Computes alpha and beta densities from total and spin density cubes
|
|
240
|
+
# @param cubefTOT Density cube file
|
|
241
|
+
# @param cubefSPIN Spin density cube file
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def cubespin(cubefTOT, cubefSPIN):
|
|
245
|
+
# open and read cube files
|
|
246
|
+
[denT, n, pre] = readden(cubefTOT)
|
|
247
|
+
[denS, n, pre1] = readden(cubefSPIN)
|
|
248
|
+
# compute the difference
|
|
249
|
+
for i in range(0, len(denT)):
|
|
250
|
+
t = denT[i][0]
|
|
251
|
+
s = denS[i][0]
|
|
252
|
+
denT[i][0] = (t + s)/2.0
|
|
253
|
+
denS[i][0] = (t - s)/2.0
|
|
254
|
+
denA = denT # assign by reference
|
|
255
|
+
denB = denS # assign by reference
|
|
256
|
+
j = 0
|
|
257
|
+
with open('denalpha.cub', 'w') as f:
|
|
258
|
+
f.write(pre)
|
|
259
|
+
for i in range(0, len(denA)):
|
|
260
|
+
f.write("%.5e" % denA[i][0] + ' ')
|
|
261
|
+
j += 1
|
|
262
|
+
if (j % 6 == 0 or (i+1) % n == 0):
|
|
263
|
+
f.write('\n')
|
|
264
|
+
j = 0
|
|
265
|
+
with open('denbeta.cub', 'w') as f:
|
|
266
|
+
f.write(pre)
|
|
267
|
+
for i in range(0, len(denB)):
|
|
268
|
+
f.write("%.5e" % denB[i][0] + ' ')
|
|
269
|
+
j += 1
|
|
270
|
+
if (j % 6 == 0 or (i+1) % n == 0):
|
|
271
|
+
f.write('\n')
|
|
272
|
+
j = 0
|
|
273
|
+
|
|
274
|
+
# Parse density cube file
|
|
275
|
+
# @param inputf Density cube file
|
|
276
|
+
# @return Density array, parameters, additional info
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def readden(inputf):
|
|
280
|
+
with open(inputf, 'r') as f:
|
|
281
|
+
s = f.read().splitlines()
|
|
282
|
+
params = []
|
|
283
|
+
for i in range(2, 6):
|
|
284
|
+
ss = [_f for _f in s[i].split(' ') if _f]
|
|
285
|
+
for sss in ss:
|
|
286
|
+
params.append(sss)
|
|
287
|
+
# get parameters
|
|
288
|
+
natoms = int(params[0])
|
|
289
|
+
n1 = int(params[4])
|
|
290
|
+
n2 = int(params[8])
|
|
291
|
+
n3 = int(params[12])
|
|
292
|
+
# origin and direction vectors
|
|
293
|
+
r_origin = [float(params[1]), float(params[2]),
|
|
294
|
+
float(params[3])] # UNITS in bohr
|
|
295
|
+
r1 = [float(params[5]), float(params[6]), float(params[7])]
|
|
296
|
+
r2 = [float(params[9]), float(params[10]), float(params[11])]
|
|
297
|
+
r3 = [float(params[13]), float(params[14]), float(params[15])]
|
|
298
|
+
atoms = [[0 for x in range(5)] for x in range(natoms)]
|
|
299
|
+
# check for metal (WITH ECPs YOU NEED TO CORRECT ATOMIC NUMBER in MOLDEN!)
|
|
300
|
+
for i in range(6, 6+natoms):
|
|
301
|
+
ss = [_f for _f in s[i].split(' ') if _f]
|
|
302
|
+
for j, sss in enumerate(ss):
|
|
303
|
+
# each atom contains ATOMIC_NO, Charge, X, Y, Z
|
|
304
|
+
atoms[i-6][j] = float(sss)
|
|
305
|
+
# read density values
|
|
306
|
+
den = [[0.0 for x in range(5)] for x in range(n1*n2*n3)]
|
|
307
|
+
offset = 6+natoms
|
|
308
|
+
summing = 0
|
|
309
|
+
fmax = 0
|
|
310
|
+
pre = ''
|
|
311
|
+
for i in range(0, offset):
|
|
312
|
+
pre += s[i] + '\n'
|
|
313
|
+
# get wfc values
|
|
314
|
+
sv = ''
|
|
315
|
+
for li in range(offset, len(s)):
|
|
316
|
+
sv += ' '.join(s[li].split('\n'))
|
|
317
|
+
val = [_f for _f in sv.split(' ') if _f]
|
|
318
|
+
for i in range(0, n1):
|
|
319
|
+
for j in range(0, n2):
|
|
320
|
+
for k in range(0, n3):
|
|
321
|
+
idx = i*(n2*n3)+j*n3 + k # global index
|
|
322
|
+
X = r_origin[0] + r1[0]*i + r2[0]*j + r3[0]*k # X value
|
|
323
|
+
Y = r_origin[1] + r1[1]*i + r2[1]*j + r3[1]*k # Y value
|
|
324
|
+
Z = r_origin[2] + r1[2]*i + r2[2]*j + r3[2]*k # Z value
|
|
325
|
+
# each element contains density, x, y, z
|
|
326
|
+
den[idx][0] = float(val[idx])
|
|
327
|
+
summing += den[idx][0]
|
|
328
|
+
if abs(den[idx][0]) > fmax:
|
|
329
|
+
fmax = abs(den[idx][0])
|
|
330
|
+
den[idx][1] = X
|
|
331
|
+
den[idx][2] = Y
|
|
332
|
+
den[idx][3] = Z
|
|
333
|
+
return den, n1, pre
|
|
334
|
+
|
|
335
|
+
# Use Multiwfn to generate cube files from molden files
|
|
336
|
+
# @param molf Input molden file
|
|
337
|
+
# @param folder Folder containing runs
|
|
338
|
+
# @param gui GUI flag
|
|
339
|
+
# @param flog Log filename
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
def getcubes(molf, folder, gui, flog):
|
|
343
|
+
# get Multiwfn
|
|
344
|
+
globs = globalvars()
|
|
345
|
+
Multiwfn = globs.multiwfn
|
|
346
|
+
# analyze results
|
|
347
|
+
flog.write(
|
|
348
|
+
"##################### Generating cube files ######################\n")
|
|
349
|
+
print("##################### Generating cube files ######################\n")
|
|
350
|
+
# loop over folders
|
|
351
|
+
for numi, resf in enumerate(molf):
|
|
352
|
+
resd = os.path.relpath(resf, folder)
|
|
353
|
+
resd = resd.split('.molden')[0]
|
|
354
|
+
resd = resd.replace('/', '_')
|
|
355
|
+
cubedir = folder+'/Cube_files/'
|
|
356
|
+
flog.write('Processing '+resf+'\n')
|
|
357
|
+
print(('Processing ', resf))
|
|
358
|
+
if gui:
|
|
359
|
+
gui.iWtxt.setText('Processing '+resf+'\n'+gui.iWtxt.toPlainText())
|
|
360
|
+
gui.app.processEvents()
|
|
361
|
+
#################################################
|
|
362
|
+
### generate density cube ###
|
|
363
|
+
inputtxt = '5\n1\n3\n2\n'
|
|
364
|
+
with open('input1', 'w') as f:
|
|
365
|
+
f.write(inputtxt)
|
|
366
|
+
com = Multiwfn+' ' + "'" + resf + "'"+' < input1'
|
|
367
|
+
if not glob.glob(cubedir+resd+'-density.cub'):
|
|
368
|
+
_ = mybash(com)
|
|
369
|
+
os.remove('input1')
|
|
370
|
+
if glob.glob('density.cub'):
|
|
371
|
+
os.rename('density.cub', cubedir+resd+'-density.cub')
|
|
372
|
+
#################################################
|
|
373
|
+
inputtxt = '5\n9\n3\n2\n' # generate ELF
|
|
374
|
+
with open('input1', 'w') as f:
|
|
375
|
+
f.write(inputtxt)
|
|
376
|
+
com = Multiwfn+' ' + "'" + resf + "'"+' < input1'
|
|
377
|
+
if not glob.glob(cubedir+resd+'-ELF.cub'):
|
|
378
|
+
_ = mybash(com)
|
|
379
|
+
os.remove('input1')
|
|
380
|
+
if glob.glob('ELF.cub'):
|
|
381
|
+
os.rename('ELF.cub', cubedir+resd+'-ELF.cub')
|
|
382
|
+
#################################################
|
|
383
|
+
inputtxt = '5\n5\n3\n2\n' # generate spin density
|
|
384
|
+
with open('input1', 'w') as f:
|
|
385
|
+
f.write(inputtxt)
|
|
386
|
+
com = Multiwfn+' ' + "'" + resf + "'" + ' < input1'
|
|
387
|
+
if not glob.glob(cubedir+resd+'-spindensity.cub'):
|
|
388
|
+
_ = mybash(com)
|
|
389
|
+
os.remove('input1')
|
|
390
|
+
if glob.glob('spindensity.cub'):
|
|
391
|
+
os.rename('spindensity.cub', cubedir+resd+'-spindensity.cub')
|
|
392
|
+
#################################################
|
|
393
|
+
if not glob.glob(cubedir+resd+'-denalpha.cub'):
|
|
394
|
+
cubespin(cubedir+resd+'-density.cub', cubedir+resd +
|
|
395
|
+
'-spindensity.cub') # generate spin densities
|
|
396
|
+
if glob.glob('denalpha.cub'):
|
|
397
|
+
os.rename('denalpha.cub', cubedir+resd+'-denalpha.cub')
|
|
398
|
+
os.rename('denbeta.cub', cubedir+resd+'-denbeta.cub')
|
|
399
|
+
|
|
400
|
+
# Calculate wavefunction properties from molden file
|
|
401
|
+
# @param molf Input molden file
|
|
402
|
+
# @param folder Folder containing runs
|
|
403
|
+
# @param gui GUI flag
|
|
404
|
+
# @param flog Log filename
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def getwfnprops(molf, folder, gui, flog):
|
|
408
|
+
# analyze results
|
|
409
|
+
flog.write(
|
|
410
|
+
"##################### Getting wavefunction properties ######################\n")
|
|
411
|
+
print("##################### Getting wavefunction properties ######################\n")
|
|
412
|
+
header = "\nFolder HELP (%) Rav RSD RSk ELFav ELFSD ELFSk\n"
|
|
413
|
+
header += "-----------------------------------------------------------------------------------------------------------------------------------------\n"
|
|
414
|
+
# loop over folders
|
|
415
|
+
txt = []
|
|
416
|
+
for numi, resf in enumerate(molf):
|
|
417
|
+
resd = os.path.relpath(resf, folder)
|
|
418
|
+
resd = resd.split('.molden')[0]
|
|
419
|
+
resdp = resd
|
|
420
|
+
resd = resd.replace('/', '_')
|
|
421
|
+
#################################################
|
|
422
|
+
print(('Processing ', resf))
|
|
423
|
+
flog.write('Processing '+resf+'\n')
|
|
424
|
+
if gui:
|
|
425
|
+
gui.iWtxt.setText('Processing '+resd+'\n'+gui.iWtxt.toPlainText())
|
|
426
|
+
gui.app.processEvents()
|
|
427
|
+
wfndir = folder+'/Wfn_files/'
|
|
428
|
+
outfile1 = wfndir+resd+'-HELP.txt'
|
|
429
|
+
outfile2 = wfndir+resd+'-denELF.txt'
|
|
430
|
+
if not glob.glob(outfile1) or not glob.glob(outfile2):
|
|
431
|
+
cubedir = folder + '/Cube_files/'
|
|
432
|
+
denf = cubedir+resd+'-density.cub'
|
|
433
|
+
elff = cubedir+resd+'-ELF.cub'
|
|
434
|
+
HELPpop, totel, svars = wfncalc(denf, elff) # calculate HELP
|
|
435
|
+
with open(outfile1, 'w') as f:
|
|
436
|
+
f.write('HELP: '+str(HELPpop)+' '+str(100*HELPpop/totel)+' %\n')
|
|
437
|
+
with open(outfile2, 'w') as f:
|
|
438
|
+
f.write('Rav: '+str(svars[0])+' RSD: ' +
|
|
439
|
+
str(svars[1])+' RSk: '+str(svars[2]))
|
|
440
|
+
f.write(' ELFav: '+str(svars[3])+' ELF_SD: ' +
|
|
441
|
+
str(svars[4])+' ELF_Sk: '+str(svars[5])+'\n')
|
|
442
|
+
#################################################
|
|
443
|
+
with open(outfile1, 'r') as f:
|
|
444
|
+
sf = f.read()
|
|
445
|
+
with open(outfile2, 'r') as f:
|
|
446
|
+
sff = f.read()
|
|
447
|
+
HELPpop = float([_f for _f in sf.split(None) if _f][1])
|
|
448
|
+
HELPper = float([_f for _f in sf.split(None) if _f][-2])
|
|
449
|
+
sf = [_f for _f in sff.split(None) if _f]
|
|
450
|
+
svars = [float(sf[1]), float(sf[3]), float(sf[5]),
|
|
451
|
+
float(sf[7]), float(sf[9]), float(sf[11])]
|
|
452
|
+
sr = []
|
|
453
|
+
for i, ss in enumerate(svars):
|
|
454
|
+
sr.append("{:10.5f}".format(ss))
|
|
455
|
+
txt.append(resdp.ljust(50)+"{:10.3f}".format(HELPpop).ljust(10)+' ('+"{:4.2f}".format(HELPper)+'%)' +
|
|
456
|
+
sr[0].ljust(10)+sr[1].ljust(10)+sr[2].ljust(10)+sr[3].ljust(10)+sr[4].ljust(11)+sr[5].ljust(10)+'\n')
|
|
457
|
+
text = sorted(txt)
|
|
458
|
+
with open(folder+'/wfnprops.txt', 'w') as f:
|
|
459
|
+
f.write(header+''.join(text))
|
|
460
|
+
|
|
461
|
+
# Calculate charges from molden file
|
|
462
|
+
# @param molf Input molden file
|
|
463
|
+
# @param folder Folder containing runs
|
|
464
|
+
# @param gui GUI flag
|
|
465
|
+
# @param flog Log filename
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
def getcharges(molf, folder, gui, flog):
|
|
469
|
+
# get Multiwfn
|
|
470
|
+
globs = globalvars()
|
|
471
|
+
Multiwfn = globs.multiwfn
|
|
472
|
+
# analyze results
|
|
473
|
+
header = "\nFolder Hirshfeld VDD Mulliken\n"
|
|
474
|
+
header += "-----------------------------------------------------------------------------------------\n"
|
|
475
|
+
txt = []
|
|
476
|
+
for numi, resf in enumerate(molf):
|
|
477
|
+
resd = os.path.relpath(resf, folder)
|
|
478
|
+
resd = resd.split('.molden')[0]
|
|
479
|
+
resdp = resd
|
|
480
|
+
resd = resd.replace('/', '_')
|
|
481
|
+
# get metal index in molden file
|
|
482
|
+
with open(resf, 'r') as f:
|
|
483
|
+
ss = f.read()
|
|
484
|
+
ss = find_between(ss, 'Atoms', 'GTO')
|
|
485
|
+
ss = ss.splitlines()
|
|
486
|
+
midx = 0 # default
|
|
487
|
+
for sl in ss:
|
|
488
|
+
sll = sl.split(None)
|
|
489
|
+
for met in metals:
|
|
490
|
+
if len(sll) > 1 and met in sll[0]:
|
|
491
|
+
midx = int(sll[1])-1
|
|
492
|
+
break
|
|
493
|
+
#################################################
|
|
494
|
+
outfile1 = folder+'/Charge_files/'+resd+'-chH.txt'
|
|
495
|
+
print(('Processing ', resdp))
|
|
496
|
+
flog.write('Processing '+resdp+'\n')
|
|
497
|
+
if gui:
|
|
498
|
+
gui.iWtxt.setText('Processing '+resf+'\n'+gui.iWtxt.toPlainText())
|
|
499
|
+
gui.app.processEvents()
|
|
500
|
+
# Run multiwfn
|
|
501
|
+
if not glob.glob(outfile1):
|
|
502
|
+
inputtxt = '7\n1\n1\n' # Hirschfeld
|
|
503
|
+
with open('input1', 'w') as f:
|
|
504
|
+
f.write(inputtxt)
|
|
505
|
+
com = Multiwfn+' ' + "'" + resf + "'" + " < input1 > '"+outfile1+"'"
|
|
506
|
+
_ = mybash(com)
|
|
507
|
+
os.remove('input1')
|
|
508
|
+
with open(outfile1, 'r') as f:
|
|
509
|
+
ss = f.read()
|
|
510
|
+
s = find_between(ss, ' of atom 1', 'Atomic dipole')
|
|
511
|
+
hirsch = 'NA'
|
|
512
|
+
if len(s.splitlines()) > midx+1:
|
|
513
|
+
hirscht = s.splitlines()[midx]
|
|
514
|
+
hirschll = hirscht.split(None)
|
|
515
|
+
if len(hirschll) > 2:
|
|
516
|
+
hirsch = "{:5.3f}".format(float(hirschll[-1]))
|
|
517
|
+
#################################################
|
|
518
|
+
outfile2 = folder+'/Charge_files/'+resd+'-chV.txt'
|
|
519
|
+
if not glob.glob(outfile2):
|
|
520
|
+
inputtxt = '7\n2\n1\n' # VDD
|
|
521
|
+
with open('input1', 'w') as f:
|
|
522
|
+
f.write(inputtxt)
|
|
523
|
+
com = Multiwfn+' '+"'" + resf + "'" + " < input1 > '"+outfile2+"'"
|
|
524
|
+
_ = mybash(com)
|
|
525
|
+
os.remove('input1')
|
|
526
|
+
with open(outfile2, 'r') as f:
|
|
527
|
+
ss = f.read()
|
|
528
|
+
s = find_between(ss, 'VDD charge', 'dipole')
|
|
529
|
+
vdd = 'NA'
|
|
530
|
+
if len(s.splitlines()) > midx+1:
|
|
531
|
+
vddt = s.splitlines()[midx]
|
|
532
|
+
vddll = vddt.split(None)
|
|
533
|
+
if len(vddll) > 2:
|
|
534
|
+
vdd = "{:5.3f}".format(float(vddll[-1]))
|
|
535
|
+
#################################################
|
|
536
|
+
outfile3 = folder+'/Charge_files/'+resd+'-chM.txt'
|
|
537
|
+
if not glob.glob(outfile3):
|
|
538
|
+
inputtxt = '7\n5\n1\n' # Mulliken
|
|
539
|
+
with open('input1', 'w') as f:
|
|
540
|
+
f.write(inputtxt)
|
|
541
|
+
com = Multiwfn+' ' + "'" + resf + "'" + " < input1 > '"+outfile3+"'"
|
|
542
|
+
_ = mybash(com)
|
|
543
|
+
os.remove('input1')
|
|
544
|
+
with open(outfile3, 'r') as f:
|
|
545
|
+
ss = f.read()
|
|
546
|
+
s = find_between(ss, 'Population of atoms', 'Total net')
|
|
547
|
+
mull = 'NA'
|
|
548
|
+
if len(s.splitlines()) > midx+2:
|
|
549
|
+
mullt = s.splitlines()[midx+2]
|
|
550
|
+
mulll = mullt.split(None)
|
|
551
|
+
if len(mulll) > 2:
|
|
552
|
+
mull = "{:5.3f}".format(float(mulll[-1]))
|
|
553
|
+
txt.append(resdp.ljust(60)+hirsch.ljust(10) +
|
|
554
|
+
vdd.ljust(10)+mull.ljust(10)+'\n')
|
|
555
|
+
text = sorted(txt)
|
|
556
|
+
with open(folder+'/charges.txt', 'w') as f:
|
|
557
|
+
f.write(header+''.join(text))
|
|
558
|
+
|
|
559
|
+
# Calculate delocalization indices from molden file
|
|
560
|
+
# @param molf Input molden file
|
|
561
|
+
# @param folder Folder containing runs
|
|
562
|
+
# @param gui GUI flag
|
|
563
|
+
# @param flog Log filename
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
def deloc(molf, folder, gui, flog):
|
|
567
|
+
# get multiwfn exec
|
|
568
|
+
globs = globalvars()
|
|
569
|
+
Multiwfn = globs.multiwfn
|
|
570
|
+
# get results files
|
|
571
|
+
header = "\nFile No Attr Loc-indx Tot-Deloc\n"
|
|
572
|
+
header += "-------------------------------------------------------------------------------------------------------\n"
|
|
573
|
+
text = []
|
|
574
|
+
indexin = []
|
|
575
|
+
mindices = []
|
|
576
|
+
skipm = False
|
|
577
|
+
# loop over molden files
|
|
578
|
+
for numi, resf in enumerate(molf):
|
|
579
|
+
indxst = ''
|
|
580
|
+
resd = resf.rsplit('/', 1)[0]
|
|
581
|
+
moln = resf.rsplit('/', 1)[-1]
|
|
582
|
+
moln = moln.split('.molden')[0]
|
|
583
|
+
resd = os.path.relpath(resd, folder)
|
|
584
|
+
resd = resd.replace('/', '_')+'_'+moln
|
|
585
|
+
print(resd)
|
|
586
|
+
outfile = folder+'/Deloc_files/'+resd+'-deloc.txt'
|
|
587
|
+
print(('Processing '+resd+' and writing output to '+outfile))
|
|
588
|
+
flog.write('Processing '+resd+'\n')
|
|
589
|
+
if gui:
|
|
590
|
+
gui.iWtxt.setText('Processing '+resd+'\n'+gui.iWtxt.toPlainText())
|
|
591
|
+
gui.app.processEvents()
|
|
592
|
+
# get coordinates of metal
|
|
593
|
+
with open(resf, 'r') as f:
|
|
594
|
+
sm = f.read().splitlines()
|
|
595
|
+
# get indices of heavy elements
|
|
596
|
+
found = False
|
|
597
|
+
for met in metals:
|
|
598
|
+
if not found:
|
|
599
|
+
ml = [line for line in sm if met in line]
|
|
600
|
+
if len(ml) > 0 and not found:
|
|
601
|
+
if 'Title' in ml[0] and len(ml) > 1:
|
|
602
|
+
mlll = ml[1].split(None)
|
|
603
|
+
else:
|
|
604
|
+
mlll = ml[0].split(None)
|
|
605
|
+
if len(mlll) > 2:
|
|
606
|
+
found = True
|
|
607
|
+
if len(ml) == 0:
|
|
608
|
+
print(
|
|
609
|
+
'WARNING:No metal found, defaulting to 1st atom for relative properties..')
|
|
610
|
+
skipm = True
|
|
611
|
+
ml = [sm[4]]
|
|
612
|
+
mlll = [_f for _f in ml[0].split(None) if _f]
|
|
613
|
+
mindex = mlll[1]
|
|
614
|
+
mindices.append(mindex)
|
|
615
|
+
mcoords = [float(mlll[3]), float(mlll[4]), float(mlll[5])]
|
|
616
|
+
parse, skipc = False, False
|
|
617
|
+
# Run multiwfn
|
|
618
|
+
if not glob.glob(outfile):
|
|
619
|
+
inputtxt = '17\n1\n1\n2\n4\n'
|
|
620
|
+
with open('input0', 'w') as f:
|
|
621
|
+
f.write(inputtxt)
|
|
622
|
+
com = Multiwfn+' ' + "'" + resf + "'" + " < input0 > '"+outfile+"'"
|
|
623
|
+
tt = mybash(com)
|
|
624
|
+
print(tt)
|
|
625
|
+
# check if seg fault
|
|
626
|
+
skipc = False
|
|
627
|
+
if 'Segmentation' in tt or 'core dumped' in tt:
|
|
628
|
+
skipc = True
|
|
629
|
+
# read outputfile and check
|
|
630
|
+
with open(outfile, 'r') as f:
|
|
631
|
+
ssf = f.read()
|
|
632
|
+
# if error redo
|
|
633
|
+
if ('Note: There are attractors having very low ' in ssf or 'Hint' in ssf):
|
|
634
|
+
inputtxt = '17\n1\n1\n2\n3\n4\n'
|
|
635
|
+
with open('input0', 'w') as f:
|
|
636
|
+
f.write(inputtxt)
|
|
637
|
+
tt = mybash(com)
|
|
638
|
+
print(tt)
|
|
639
|
+
os.remove('input0')
|
|
640
|
+
# check if good
|
|
641
|
+
with open(outfile, 'r') as f:
|
|
642
|
+
ssf = f.read()
|
|
643
|
+
parse = False
|
|
644
|
+
if 'Total localization' in ssf:
|
|
645
|
+
parse = True
|
|
646
|
+
################
|
|
647
|
+
# parse output #
|
|
648
|
+
################
|
|
649
|
+
if not skipc and parse:
|
|
650
|
+
with open(outfile, 'r') as f:
|
|
651
|
+
s = f.read()
|
|
652
|
+
# get basins
|
|
653
|
+
if ('The attractors after clustering' in s):
|
|
654
|
+
st = find_between(s, 'Index Average', 'The number')
|
|
655
|
+
sst = [_f for _f in st.splitlines()[1:] if _f]
|
|
656
|
+
else:
|
|
657
|
+
st = find_between(s, 'Attractor', 'Detecting')
|
|
658
|
+
sst = [_f for _f in st.splitlines()[1:] if _f]
|
|
659
|
+
basidx = [] # list with metal attractors
|
|
660
|
+
attlist = [] # List with neighboring attractors
|
|
661
|
+
att_thrsd = 2.4 # Angstrom
|
|
662
|
+
att_range = 1.0 # Angstrom
|
|
663
|
+
for line in sst:
|
|
664
|
+
xyzcoords = line.split(None)
|
|
665
|
+
if (len(xyzcoords) > 3):
|
|
666
|
+
xyzc = [float(xyzcoords[1]), float(
|
|
667
|
+
xyzcoords[2]), float(xyzcoords[3])]
|
|
668
|
+
if distance(mcoords, xyzc) < att_range:
|
|
669
|
+
basidx.append(xyzcoords[0])
|
|
670
|
+
indxst += mindex+'\n'
|
|
671
|
+
elif (distance(mcoords, xyzc) > att_range and distance(mcoords, xyzc) < att_thrsd):
|
|
672
|
+
attlist.append(int(xyzcoords[0]))
|
|
673
|
+
# get total number of basins
|
|
674
|
+
if not skipm:
|
|
675
|
+
dd = int(find_between(
|
|
676
|
+
s, 'matrix for basin', '...').split(None)[-1])
|
|
677
|
+
# get delocalization matrix
|
|
678
|
+
sdel = find_between(
|
|
679
|
+
s, 'Total delocalization index matrix', 'Total localization')
|
|
680
|
+
sdeloc = sdel.splitlines()[1:]
|
|
681
|
+
deloc = []
|
|
682
|
+
for bidx in basidx:
|
|
683
|
+
[a, b] = divmod(int(bidx)-1, 5)
|
|
684
|
+
ll = sdeloc[a*(dd+1)+1:(a+1)*(dd+1)]
|
|
685
|
+
for ii, l in enumerate(ll):
|
|
686
|
+
if (ii+1 in attlist):
|
|
687
|
+
lf = [_f for _f in l.split(None) if _f]
|
|
688
|
+
deloc.append(float(lf[b+1]))
|
|
689
|
+
# get localization index
|
|
690
|
+
s = find_between(s, 'Total localization index:', '==')
|
|
691
|
+
loc = []
|
|
692
|
+
for bidx in basidx:
|
|
693
|
+
ss = s.split(bidx+':')[-1]
|
|
694
|
+
ss = ss.split(None)
|
|
695
|
+
loc.append(float(ss[0]))
|
|
696
|
+
if (len(attlist) == 0):
|
|
697
|
+
tdeloc = 0.0
|
|
698
|
+
else:
|
|
699
|
+
tdeloc = sum(deloc)/len(attlist)
|
|
700
|
+
tloc = sum(loc)
|
|
701
|
+
tt = resd.ljust(70)+str(len(basidx)).ljust(6)+"{:10.3f}".format(
|
|
702
|
+
tloc).ljust(14)+"{:10.3f}".format(tdeloc).ljust(10)+'\n'
|
|
703
|
+
text.append(tt)
|
|
704
|
+
indexin.append(indxst)
|
|
705
|
+
# sort alphabetically and print
|
|
706
|
+
text = sorted(text)
|
|
707
|
+
with open(folder+'/deloc_res.txt', 'w') as f:
|
|
708
|
+
f.write(header+''.join(text))
|
|
709
|
+
print("\n##################### Deloc indices are ready ######################\n")
|