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,67 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from molSimplify.Classes.atom3D import atom3D
|
|
4
|
+
from molSimplify.Classes.globalvars import globalvars
|
|
5
|
+
from molSimplify.Scripts.geometry import distance
|
|
6
|
+
from molSimplify.utils.decorators import deprecated
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@deprecated('Use the correctly spelled version create_coulomb_matrix instead.')
|
|
10
|
+
def create_columb_matrix(mol):
|
|
11
|
+
return create_coulomb_matrix(mol)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def create_coulomb_matrix(mol):
|
|
15
|
+
# create Coulomb matrix from mol3D information
|
|
16
|
+
index_set = list(range(0, mol.natoms))
|
|
17
|
+
# fetch the database of nuclear charges
|
|
18
|
+
globs = globalvars()
|
|
19
|
+
amassdict = globs.amass()
|
|
20
|
+
A = np.zeros((mol.natoms, mol.natoms))
|
|
21
|
+
# main build
|
|
22
|
+
for i in index_set:
|
|
23
|
+
Zi = float(amassdict[mol.getAtom(i).symbol()][1])
|
|
24
|
+
for j in index_set:
|
|
25
|
+
if i == j:
|
|
26
|
+
A[i, j] = 0.5*np.power(Zi, (2.4))
|
|
27
|
+
else:
|
|
28
|
+
Zj = float(amassdict[mol.getAtom(j).symbol()][1])
|
|
29
|
+
this_dist = distance(mol.getAtom(i).coords(), mol.getAtom(j).coords())
|
|
30
|
+
if this_dist != 0.0:
|
|
31
|
+
A[i, j] = Zi*Zj/float(this_dist)
|
|
32
|
+
else:
|
|
33
|
+
A[i, j] = 0
|
|
34
|
+
# sort by columns in increasing order
|
|
35
|
+
weights = []
|
|
36
|
+
for col in A.T:
|
|
37
|
+
weights.append(np.linalg.norm(col))
|
|
38
|
+
sort_weights = (np.argsort(weights))[::-1]
|
|
39
|
+
A = A[:, sort_weights]
|
|
40
|
+
# sort by rows in increasing order
|
|
41
|
+
weights = []
|
|
42
|
+
for row in A:
|
|
43
|
+
weights.append(np.linalg.norm(row))
|
|
44
|
+
sort_weights = (np.argsort(weights))[::-1]
|
|
45
|
+
A = A[sort_weights, :]
|
|
46
|
+
return A
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def pad_mol(mol, target_atoms):
|
|
50
|
+
# adds placeholder atoms
|
|
51
|
+
# with zero nuclear charge
|
|
52
|
+
# located at the origin
|
|
53
|
+
# in order to get consistent size
|
|
54
|
+
# coulomb matrix
|
|
55
|
+
this_natoms = mol.natoms
|
|
56
|
+
blank_atom = atom3D(Sym='X') # placeholder type
|
|
57
|
+
blank_atom.frozen = False
|
|
58
|
+
safe_stop = False
|
|
59
|
+
counter = 0
|
|
60
|
+
while this_natoms < target_atoms and not safe_stop:
|
|
61
|
+
mol.addAtom(blank_atom)
|
|
62
|
+
this_natoms = mol.natoms
|
|
63
|
+
counter += 1
|
|
64
|
+
if counter > target_atoms:
|
|
65
|
+
safe_stop = True
|
|
66
|
+
print('error padding mol')
|
|
67
|
+
return mol
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Written by JP Janet for HJK Group
|
|
2
|
+
# Dpt of Chemical Engineering, MIT
|
|
3
|
+
|
|
4
|
+
# molS modules
|
|
5
|
+
from molSimplify.Classes.mol3D import mol3D
|
|
6
|
+
from molSimplify.Scripts.geometry import (checkcolinear,
|
|
7
|
+
distance,
|
|
8
|
+
norm,
|
|
9
|
+
rotate_around_axis,
|
|
10
|
+
rotation_params,
|
|
11
|
+
vecangle,
|
|
12
|
+
vecdiff)
|
|
13
|
+
from molSimplify.Scripts.io import getlicores, lig_load
|
|
14
|
+
|
|
15
|
+
# FF dependence
|
|
16
|
+
##########################################
|
|
17
|
+
# ##### ligand decoration function #######
|
|
18
|
+
##########################################
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def decorate_ligand(ligand_to_decorate: mol3D, decoration, decoration_index,
|
|
22
|
+
debug: bool = False) -> mol3D:
|
|
23
|
+
# This function is useful for functionalization. Adding functional groups to a base ligand.
|
|
24
|
+
|
|
25
|
+
# structgen depends on decoration_manager, and decoration_manager depends on structgen.ffopt
|
|
26
|
+
# Thus, this import needs to be placed here to avoid a circular dependence
|
|
27
|
+
from molSimplify.Scripts.structgen import ffopt
|
|
28
|
+
|
|
29
|
+
# INPUT
|
|
30
|
+
# - ligand_to_decorate: mol3D ligand
|
|
31
|
+
# - set ligand_to_decorate.ob_dict to False or empty dictionary first to avoid potential error
|
|
32
|
+
# - decoration: list of smiles/decorations
|
|
33
|
+
# - decoration_index: list of ligand atoms to replace
|
|
34
|
+
# - debug: debugging flag for additional prints
|
|
35
|
+
# OUTPUT
|
|
36
|
+
# - merged_ligand: built ligand
|
|
37
|
+
|
|
38
|
+
lig = ligand_to_decorate
|
|
39
|
+
# reorder to ensure highest atom index
|
|
40
|
+
# removed first
|
|
41
|
+
sort_order = [i[0] for i in sorted(enumerate(decoration_index), key=lambda x:x[1])]
|
|
42
|
+
sort_order = sort_order[::-1] # reverse
|
|
43
|
+
|
|
44
|
+
decoration_index = [decoration_index[i] for i in sort_order]
|
|
45
|
+
decoration = [decoration[i] for i in sort_order]
|
|
46
|
+
if debug:
|
|
47
|
+
print(('decoration_index is ' + str(decoration_index)))
|
|
48
|
+
licores = getlicores()
|
|
49
|
+
if not isinstance(lig, mol3D):
|
|
50
|
+
lig, emsg = lig_load(lig, licores)
|
|
51
|
+
else:
|
|
52
|
+
lig.convert2OBMol()
|
|
53
|
+
lig.charge = lig.OBMol.GetTotalCharge()
|
|
54
|
+
lig.convert2mol3D() # convert to mol3D
|
|
55
|
+
|
|
56
|
+
# create new ligand
|
|
57
|
+
merged_ligand = mol3D()
|
|
58
|
+
merged_ligand.copymol3D(lig)
|
|
59
|
+
for i, dec in enumerate(decoration):
|
|
60
|
+
print(('** decoration number ' + str(i) + ' attaching ' + dec + ' at site '+str(decoration_index[i])
|
|
61
|
+
+ '**\n'))
|
|
62
|
+
dec, emsg = lig_load(dec, licores)
|
|
63
|
+
# dec.OBMol.AddHydrogens()
|
|
64
|
+
dec.convert2mol3D() # convert to mol3D
|
|
65
|
+
if debug:
|
|
66
|
+
print(i)
|
|
67
|
+
print(decoration_index)
|
|
68
|
+
|
|
69
|
+
print((merged_ligand.getAtom(decoration_index[i]).symbol()))
|
|
70
|
+
print((merged_ligand.getAtom(decoration_index[i]).coords()))
|
|
71
|
+
merged_ligand.writexyz('basic.xyz')
|
|
72
|
+
Hs = dec.getHsbyIndex(0)
|
|
73
|
+
if len(Hs) > 0 and (not len(dec.cat)):
|
|
74
|
+
dec.deleteatom(Hs[0])
|
|
75
|
+
dec.charge = dec.charge - 1
|
|
76
|
+
|
|
77
|
+
if len(dec.cat) > 0:
|
|
78
|
+
decind = dec.cat[0]
|
|
79
|
+
else:
|
|
80
|
+
decind = 0
|
|
81
|
+
dec.alignmol(dec.getAtom(decind), merged_ligand.getAtom(decoration_index[i]))
|
|
82
|
+
r1 = dec.getAtom(decind).coords()
|
|
83
|
+
r2 = dec.centermass() # center of mass
|
|
84
|
+
rrot = r1
|
|
85
|
+
decb = mol3D()
|
|
86
|
+
decb.copymol3D(dec)
|
|
87
|
+
####################################
|
|
88
|
+
# center of mass of local environment (to avoid bad placement of bulky ligands)
|
|
89
|
+
auxmol = mol3D()
|
|
90
|
+
for at in dec.getBondedAtoms(decind):
|
|
91
|
+
auxmol.addAtom(dec.getAtom(at))
|
|
92
|
+
if auxmol.natoms > 0:
|
|
93
|
+
r2 = auxmol.centermass() # overwrite global with local centermass
|
|
94
|
+
####################################
|
|
95
|
+
# rotate around axis and get both images
|
|
96
|
+
theta, u = rotation_params(merged_ligand.centermass(), r1, r2)
|
|
97
|
+
dec = rotate_around_axis(dec, rrot, u, theta)
|
|
98
|
+
if debug:
|
|
99
|
+
dec.writexyz('dec_ARA' + str(i) + '.xyz')
|
|
100
|
+
decb = rotate_around_axis(decb, rrot, u, theta-180)
|
|
101
|
+
if debug:
|
|
102
|
+
decb.writexyz('dec_ARB' + str(i) + '.xyz')
|
|
103
|
+
d1 = distance(dec.centermass(), merged_ligand.centermass())
|
|
104
|
+
d2 = distance(decb.centermass(), merged_ligand.centermass())
|
|
105
|
+
dec = dec if (d2 < d1) else decb # pick best one
|
|
106
|
+
#####################################
|
|
107
|
+
# check for linear molecule
|
|
108
|
+
auxm = mol3D()
|
|
109
|
+
for at in dec.getBondedAtoms(decind):
|
|
110
|
+
auxm.addAtom(dec.getAtom(at))
|
|
111
|
+
if auxm.natoms > 1:
|
|
112
|
+
r0 = dec.getAtom(decind).coords()
|
|
113
|
+
r1 = auxm.getAtom(0).coords()
|
|
114
|
+
r2 = auxm.getAtom(1).coords()
|
|
115
|
+
if checkcolinear(r1, r0, r2):
|
|
116
|
+
theta, urot = rotation_params(r1, merged_ligand.getAtom(decoration_index[i]).coords(), r2)
|
|
117
|
+
theta = vecangle(vecdiff(r0, merged_ligand.getAtom(decoration_index[i]).coords()), urot)
|
|
118
|
+
dec = rotate_around_axis(dec, r0, urot, theta)
|
|
119
|
+
|
|
120
|
+
# get the default distance between atoms in question
|
|
121
|
+
connection_neighbours = merged_ligand.getAtom(merged_ligand.getBondedAtomsnotH(decoration_index[i])[0])
|
|
122
|
+
new_atom = dec.getAtom(decind)
|
|
123
|
+
target_distance = connection_neighbours.rad + new_atom.rad
|
|
124
|
+
position_to_place = vecdiff(new_atom.coords(), connection_neighbours.coords())
|
|
125
|
+
old_dist = norm(position_to_place)
|
|
126
|
+
missing = (target_distance - old_dist)/2
|
|
127
|
+
dec.translate([missing*position_to_place[j] for j in [0, 1, 2]])
|
|
128
|
+
|
|
129
|
+
r1 = dec.getAtom(decind).coords()
|
|
130
|
+
u = vecdiff(r1, merged_ligand.getAtom(decoration_index[i]).coords())
|
|
131
|
+
dtheta = 2
|
|
132
|
+
optmax = -9999
|
|
133
|
+
totiters = 0
|
|
134
|
+
decb = mol3D()
|
|
135
|
+
decb.copymol3D(dec)
|
|
136
|
+
# check for minimum distance between atoms and center of mass distance
|
|
137
|
+
while totiters < 180:
|
|
138
|
+
dec = rotate_around_axis(dec, r1, u, dtheta)
|
|
139
|
+
d0 = dec.mindist(merged_ligand) # try to maximize minimum atoms distance
|
|
140
|
+
d0cm = dec.distance(merged_ligand) # try to maximize center of mass distance
|
|
141
|
+
iteropt = d0cm+d0 # optimization function
|
|
142
|
+
if (iteropt > optmax): # if better conformation, keep
|
|
143
|
+
decb = mol3D()
|
|
144
|
+
decb.copymol3D(dec)
|
|
145
|
+
optmax = iteropt
|
|
146
|
+
totiters += 1
|
|
147
|
+
dec = decb
|
|
148
|
+
if debug:
|
|
149
|
+
dec.writexyz('dec_aligned' + str(i) + '.xyz')
|
|
150
|
+
print(('natoms before delete ' + str(merged_ligand.natoms)))
|
|
151
|
+
print(('obmol before delete at ' + str(decoration_index[i]) + ' is ' + str(merged_ligand.OBMol.NumAtoms())))
|
|
152
|
+
# store connectivity for deleted H
|
|
153
|
+
BO_mat = merged_ligand.populateBOMatrix()
|
|
154
|
+
row_deleted = BO_mat[decoration_index[i]]
|
|
155
|
+
bonds_to_add = []
|
|
156
|
+
|
|
157
|
+
# find where to put the new bonds ->>> Issue here.
|
|
158
|
+
for j, els in enumerate(row_deleted):
|
|
159
|
+
if els > 0:
|
|
160
|
+
# if there is a bond with an atom number
|
|
161
|
+
# before the deleted atom, all is fine
|
|
162
|
+
# else, we subtract one as the row will be be removed
|
|
163
|
+
if j < decoration_index[i]:
|
|
164
|
+
bond_partner = j
|
|
165
|
+
else:
|
|
166
|
+
bond_partner = j - 1
|
|
167
|
+
if len(dec.cat) > 0:
|
|
168
|
+
bonds_to_add.append((bond_partner, (merged_ligand.natoms-1)+dec.cat[0], els))
|
|
169
|
+
else:
|
|
170
|
+
bonds_to_add.append((bond_partner, merged_ligand.natoms-1, els))
|
|
171
|
+
|
|
172
|
+
# perform delete
|
|
173
|
+
merged_ligand.deleteatom(decoration_index[i])
|
|
174
|
+
|
|
175
|
+
merged_ligand.convert2OBMol()
|
|
176
|
+
if debug:
|
|
177
|
+
merged_ligand.writexyz('merged del ' + str(i) + '.xyz')
|
|
178
|
+
# merge and bond
|
|
179
|
+
merged_ligand.combine(dec, bond_to_add=bonds_to_add)
|
|
180
|
+
merged_ligand.convert2OBMol()
|
|
181
|
+
|
|
182
|
+
if debug:
|
|
183
|
+
merged_ligand.writexyz('merged' + str(i) + '.xyz')
|
|
184
|
+
merged_ligand.printxyz()
|
|
185
|
+
print('************')
|
|
186
|
+
|
|
187
|
+
merged_ligand.convert2OBMol()
|
|
188
|
+
merged_ligand, _ = ffopt('MMFF94', merged_ligand, [], 0, [], False, [], 100)
|
|
189
|
+
BO_mat = merged_ligand.populateBOMatrix()
|
|
190
|
+
if debug:
|
|
191
|
+
merged_ligand.writexyz('merged_relaxed.xyz')
|
|
192
|
+
print(BO_mat)
|
|
193
|
+
return merged_ligand
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Written JP Janet
|
|
2
|
+
# for HJK Group
|
|
3
|
+
# Dpt of Chemical Engineering, MIT
|
|
4
|
+
|
|
5
|
+
##########################################################
|
|
6
|
+
######## Defines class for postprocessing #############
|
|
7
|
+
######## geometries for octahedral ################
|
|
8
|
+
################ TM complexs ###############
|
|
9
|
+
##########################################################
|
|
10
|
+
from molSimplify.Classes.ligand import ligand_breakdown, ligand_assign_consistent
|
|
11
|
+
from molSimplify.Scripts.geometry import distance
|
|
12
|
+
|
|
13
|
+
def getOctBondDistances(mol):
|
|
14
|
+
## This function gets
|
|
15
|
+
## ax and equatorial
|
|
16
|
+
## min and max bond lengths
|
|
17
|
+
liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=True)
|
|
18
|
+
ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list, eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list = ligand_assign_consistent(
|
|
19
|
+
mol, liglist, ligdents, ligcons, False, False)
|
|
20
|
+
ax_dist = list()
|
|
21
|
+
eq_dist = list()
|
|
22
|
+
for ax_ligs in ax_con_list:
|
|
23
|
+
tempList = list()
|
|
24
|
+
for conatms in ax_ligs:
|
|
25
|
+
tempList.append(distance(mol.getAtom(mol.findMetal()[0]).coords(), mol.getAtom(conatms).coords()))
|
|
26
|
+
ax_dist.append(tempList)
|
|
27
|
+
for eq_ligs in eq_con_list:
|
|
28
|
+
tempList = list()
|
|
29
|
+
for conatms in eq_ligs:
|
|
30
|
+
tempList.append(distance(mol.getAtom(mol.findMetal()[0]).coords(), mol.getAtom(conatms).coords()))
|
|
31
|
+
eq_dist.append(tempList)
|
|
32
|
+
return ax_dist, eq_dist
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def getLigFormulae(mol):
|
|
36
|
+
## This function gets
|
|
37
|
+
## ax and equatorial
|
|
38
|
+
## ligand names for octahedral complexes
|
|
39
|
+
axnames = []
|
|
40
|
+
eqnames = []
|
|
41
|
+
liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=True)
|
|
42
|
+
ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list, eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list = ligand_assign_consistent(
|
|
43
|
+
mol, liglist, ligdents, ligcons, False, False)
|
|
44
|
+
for axl in ax_ligand_list:
|
|
45
|
+
axnames.append(axl.mol.make_formula())
|
|
46
|
+
for eql in eq_ligand_list:
|
|
47
|
+
eqnames.append(eql.mol.make_formula())
|
|
48
|
+
return axnames, eqnames
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def maximum_ML_dist(mol):
|
|
52
|
+
core = mol.getAtom(mol.findMetal()[0]).coords()
|
|
53
|
+
max_dist = 0
|
|
54
|
+
for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
|
|
55
|
+
dist = distance(core, mol.getAtom(atom_inds).coords())
|
|
56
|
+
if (dist > max_dist):
|
|
57
|
+
max_dist = dist
|
|
58
|
+
return max_dist
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def maximum_any_dist(mol):
|
|
62
|
+
core = mol.getAtom(mol.findMetal()[0])
|
|
63
|
+
max_dist = 0
|
|
64
|
+
for atoms in mol.getAtoms():
|
|
65
|
+
dist = distance(core.coords(), atoms.coords())
|
|
66
|
+
if (dist > max_dist):
|
|
67
|
+
max_dist = dist
|
|
68
|
+
return max_dist
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def minimum_ML_dist(mol):
|
|
72
|
+
core = mol.getAtom(mol.findMetal()[0]).coords()
|
|
73
|
+
min_dist = 1000
|
|
74
|
+
for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
|
|
75
|
+
dist = distance(core, mol.getAtom(atom_inds).coords())
|
|
76
|
+
if (dist < min_dist) and (dist > 0):
|
|
77
|
+
min_dist = dist
|
|
78
|
+
return min_dist
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def mean_ML_dist(mol):
|
|
82
|
+
core = mol.getAtom(mol.findMetal()[0]).coords()
|
|
83
|
+
mean_dist = 0.0
|
|
84
|
+
for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
|
|
85
|
+
dist = distance(core, mol.getAtom(atom_inds).coords())
|
|
86
|
+
mean_dist += float(dist)
|
|
87
|
+
mean_dist = mean_dist / float(len(mol.getBondedAtomsSmart(mol.findMetal()[0])))
|
|
88
|
+
return mean_dist
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
import numpy as np
|
|
3
|
+
import json
|
|
4
|
+
from importlib_resources import files as resource_files
|
|
5
|
+
from molSimplify.Classes.mol3D import mol3D
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_percentile_csd_geometrics(geometrics_csd, geodict, geotype, maxdent,
|
|
9
|
+
metrics=['oct_angle_devi_max', 'max_del_sig_angle',
|
|
10
|
+
'dist_del_all', 'dist_del_all_relative'],
|
|
11
|
+
path2metric="molSimplify/Informatics/geometrics_csd.json"):
|
|
12
|
+
'''
|
|
13
|
+
Obtain the percentile rank of a geometric dict compared to the entire CSD complexes.
|
|
14
|
+
geometrics_csd: dict, {"geotype": "metric": [each complex's metric]}. If not specified as a dict, it will be loaded by path2metric.
|
|
15
|
+
geodict: dict, geometric dict for a complex. Obtained by IsStructure().
|
|
16
|
+
geotype: str, type of geometry
|
|
17
|
+
metrics: list, a list of geometric considered.
|
|
18
|
+
path2metric: str, the molSimplify path to load geometrics_csd if geometrics_csd is not specified
|
|
19
|
+
'''
|
|
20
|
+
jsonpath = resource_files("molSimplify").joinpath(path2metric)
|
|
21
|
+
if not isinstance(geometrics_csd, dict):
|
|
22
|
+
print("loading csd geometrics...")
|
|
23
|
+
with open(jsonpath, "r") as f:
|
|
24
|
+
geometrics_csd = json.load(f)
|
|
25
|
+
percentile_dict = {}
|
|
26
|
+
for k in metrics:
|
|
27
|
+
percentile_dict[k] = [round(geodict[k], 2),
|
|
28
|
+
round(sum(np.abs(geometrics_csd[geotype]["all"][k]) < geodict[k]) / float(len(geometrics_csd[geotype]["all"][k])) * 100),
|
|
29
|
+
round(sum(np.abs(geometrics_csd[geotype][str(maxdent)][k]) < geodict[k]) / float(len(geometrics_csd[geotype][str(maxdent)][k])) * 100 + 1e-4)]
|
|
30
|
+
return percentile_dict
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_percentile_from_mol2(mol2string,
|
|
34
|
+
geometrics_csd,
|
|
35
|
+
metrics=['oct_angle_devi_max', 'max_del_sig_angle',
|
|
36
|
+
'dist_del_all', 'dist_del_all_relative'],
|
|
37
|
+
path2metric="molSimplify/Informatics/geometrics_csd.json"):
|
|
38
|
+
'''
|
|
39
|
+
Get the geometric percentile rank given a mol2string.
|
|
40
|
+
mol2string: str, str in the mol2 file
|
|
41
|
+
geometrics_csd: dict, {"geotype": "metric": [each complex's metric]}. If not specified as a dict, it will be loaded by path2metric.
|
|
42
|
+
metrics: list, a list of geometric considered.
|
|
43
|
+
path2metric: str, the molSimplify path to load geometrics_csd if geometrics_csd is not specified
|
|
44
|
+
'''
|
|
45
|
+
mol = mol3D()
|
|
46
|
+
mol.readfrommol2(mol2string, readstring=True)
|
|
47
|
+
eqsym, maxdent, ligdents, homoleptic, ligsymmetry = mol.get_symmetry_denticity()
|
|
48
|
+
results = mol.get_geometry_type()
|
|
49
|
+
geotype = results['geometry']
|
|
50
|
+
if geotype in ["sandwich", "edge"]:
|
|
51
|
+
print("cannot deal with sandwich or edge compounds now.")
|
|
52
|
+
d = {}
|
|
53
|
+
for k in metrics:
|
|
54
|
+
d[k] = False
|
|
55
|
+
return d
|
|
56
|
+
return get_percentile_csd_geometrics(geometrics_csd=geometrics_csd, geodict=results['summary'][geotype], geotype=geotype, maxdent=maxdent, metrics=metrics, path2metric=path2metric)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Written by JP Janet for HJK Group
|
|
2
|
+
# Dpt of Chemical Engineering, MIT
|
|
3
|
+
|
|
4
|
+
# #########################################################
|
|
5
|
+
# ###### This script is a collection of helper ############
|
|
6
|
+
# ####### routines that convert a molecule #############
|
|
7
|
+
# ####### in mol3D form to a truncated graph #############
|
|
8
|
+
# #########################################################
|
|
9
|
+
# import modules
|
|
10
|
+
from molSimplify.Classes.globalvars import globalvars
|
|
11
|
+
from molSimplify.Classes.mol3D import mol3D
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def obtain_truncation(mol, con_atoms, hops):
|
|
16
|
+
# # this function truncates a ligand to a certain number of
|
|
17
|
+
# # hops from the core
|
|
18
|
+
# Inputs:
|
|
19
|
+
# mol - mol3D class to truncate
|
|
20
|
+
# con_atoms - index of atoms that connect to metal
|
|
21
|
+
# hops - int, number of hops to truncate
|
|
22
|
+
trunc_mol = mol3D(use_atom_specific_cutoffs=mol.use_atom_specific_cutoffs)
|
|
23
|
+
# metal_ind = mol.findMetal()[0]
|
|
24
|
+
# trunc_mol.addAtom(mol.getAtom(metal_ind))
|
|
25
|
+
added_list = list()
|
|
26
|
+
# added_list.append(metal_ind)
|
|
27
|
+
for connections in con_atoms:
|
|
28
|
+
hopped = 0
|
|
29
|
+
active_set = [connections]
|
|
30
|
+
while hopped < hops:
|
|
31
|
+
hopped += 1
|
|
32
|
+
new_active_set = list()
|
|
33
|
+
for this_atom in active_set:
|
|
34
|
+
# add all connection atoms
|
|
35
|
+
if this_atom not in added_list:
|
|
36
|
+
trunc_mol.addAtom(mol.getAtom(this_atom))
|
|
37
|
+
added_list.append(this_atom)
|
|
38
|
+
# prepare all atoms attached to this connection
|
|
39
|
+
this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom)
|
|
40
|
+
for bound_atoms in this_atoms_neighbors:
|
|
41
|
+
if (bound_atoms not in added_list):
|
|
42
|
+
trunc_mol.addAtom(mol.getAtom(bound_atoms))
|
|
43
|
+
added_list.append(bound_atoms)
|
|
44
|
+
[new_active_set.append(element) for element in this_atoms_neighbors]
|
|
45
|
+
active_set = new_active_set
|
|
46
|
+
if len(mol.graph):
|
|
47
|
+
delete_inds = [x for x in range(mol.natoms) if x not in added_list]
|
|
48
|
+
sort_inds = np.argsort(added_list)
|
|
49
|
+
trunc_mol.atoms = [trunc_mol.atoms[x] for x in sort_inds]
|
|
50
|
+
trunc_mol.graph = np.delete(np.delete(mol.graph, delete_inds, 0), delete_inds, 1)
|
|
51
|
+
if mol.bo_dict:
|
|
52
|
+
save_bo_dict = mol.get_bo_dict_from_inds(added_list)
|
|
53
|
+
trunc_mol.bo_dict = save_bo_dict
|
|
54
|
+
return trunc_mol
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def obtain_truncation_metal(mol, hops):
|
|
58
|
+
# # this function truncates a ligand to a certain number of
|
|
59
|
+
# # hops from the core
|
|
60
|
+
# Inputs:
|
|
61
|
+
# mol - mol3D class to truncate
|
|
62
|
+
# con_atoms - index of atoms that connect to metal
|
|
63
|
+
# hops - int, number of hops to truncate
|
|
64
|
+
trunc_mol = mol3D(use_atom_specific_cutoffs=mol.use_atom_specific_cutoffs)
|
|
65
|
+
metal_ind = mol.findMetal()[0]
|
|
66
|
+
trunc_mol.addAtom(mol.getAtom(metal_ind))
|
|
67
|
+
added_list = list()
|
|
68
|
+
added_list.append(metal_ind)
|
|
69
|
+
hopped = 0
|
|
70
|
+
active_set = [metal_ind]
|
|
71
|
+
while hopped < hops:
|
|
72
|
+
hopped += 1
|
|
73
|
+
new_active_set = list()
|
|
74
|
+
for this_atom in active_set:
|
|
75
|
+
# add all connection atoms
|
|
76
|
+
if this_atom not in added_list:
|
|
77
|
+
trunc_mol.addAtom(mol.getAtom(this_atom))
|
|
78
|
+
added_list.append(this_atom)
|
|
79
|
+
# prepare all atoms attached to this connection
|
|
80
|
+
this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom)
|
|
81
|
+
for bound_atoms in this_atoms_neighbors:
|
|
82
|
+
if (bound_atoms not in added_list):
|
|
83
|
+
trunc_mol.addAtom(mol.getAtom(bound_atoms))
|
|
84
|
+
added_list.append(bound_atoms)
|
|
85
|
+
[new_active_set.append(element) for element in this_atoms_neighbors]
|
|
86
|
+
active_set = new_active_set
|
|
87
|
+
sort_inds = np.argsort(added_list)
|
|
88
|
+
mapping_sub2mol = {}
|
|
89
|
+
for ii, ind in enumerate(sort_inds):
|
|
90
|
+
mapping_sub2mol.update({ind: added_list[ii]})
|
|
91
|
+
trunc_mol.mapping_sub2mol = mapping_sub2mol
|
|
92
|
+
if len(mol.graph):
|
|
93
|
+
delete_inds = [x for x in range(mol.natoms) if x not in added_list]
|
|
94
|
+
trunc_mol.atoms = [trunc_mol.atoms[x] for x in sort_inds]
|
|
95
|
+
trunc_mol.graph = np.delete(np.delete(mol.graph, delete_inds, 0), delete_inds, 1)
|
|
96
|
+
if mol.bo_dict:
|
|
97
|
+
save_bo_dict = mol.get_bo_dict_from_inds(added_list)
|
|
98
|
+
trunc_mol.bo_dict = save_bo_dict
|
|
99
|
+
return trunc_mol
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def create_graph(mol):
|
|
103
|
+
if not len(mol.graph):
|
|
104
|
+
# create connectivity matrix from mol3D information
|
|
105
|
+
index_set = range(0, mol.natoms)
|
|
106
|
+
A = np.zeros((mol.natoms, mol.natoms))
|
|
107
|
+
for i in index_set:
|
|
108
|
+
this_bonded_atoms = mol.getBondedAtomsSmart(i)
|
|
109
|
+
for j in index_set:
|
|
110
|
+
if j in this_bonded_atoms:
|
|
111
|
+
A[i, j] = 1
|
|
112
|
+
else:
|
|
113
|
+
A = mol.graph
|
|
114
|
+
return A
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def get_lig_EN(mol, connection_atoms):
|
|
118
|
+
# calculate the maximum abs electronegativity
|
|
119
|
+
# difference between connection atom an all
|
|
120
|
+
# neighbors
|
|
121
|
+
max_EN = 0
|
|
122
|
+
globs = globalvars()
|
|
123
|
+
for atoms in connection_atoms:
|
|
124
|
+
this_atoms_neighbors = mol.getBondedAtomsSmart(atoms)
|
|
125
|
+
for bound_atoms in this_atoms_neighbors:
|
|
126
|
+
this_EN = float(globs.endict()[mol.getAtom(atoms).symbol()]) - float(
|
|
127
|
+
globs.endict()[mol.getAtom(bound_atoms).symbol()])
|
|
128
|
+
if (abs(this_EN) >= max_EN):
|
|
129
|
+
max_EN = this_EN
|
|
130
|
+
return max_EN
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def remove_diagonals(matrix):
|
|
134
|
+
n = matrix.shape[0]
|
|
135
|
+
for i in range(0, n):
|
|
136
|
+
matrix[i, i] = 0
|
|
137
|
+
return matrix
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def kier(mol):
|
|
141
|
+
copy_mol = mol3D()
|
|
142
|
+
copy_mol.copymol3D(mol)
|
|
143
|
+
copy_mol.deleteHs()
|
|
144
|
+
A = create_graph(copy_mol)
|
|
145
|
+
n = A.shape[0]
|
|
146
|
+
twopath = A * A
|
|
147
|
+
remove_diagonals(twopath)
|
|
148
|
+
p2 = twopath.sum() / 2
|
|
149
|
+
|
|
150
|
+
if (p2 != 0):
|
|
151
|
+
two_kappa = ((np.power(n, 3) - 5 * np.power(n, 2) + 8 * n - 4)
|
|
152
|
+
/ (np.power(p2, 2)))
|
|
153
|
+
else:
|
|
154
|
+
two_kappa = 0
|
|
155
|
+
return (two_kappa)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def get_truncated_kier(ligand, connection_atoms):
|
|
159
|
+
# three hop truncation
|
|
160
|
+
trunc_mol = obtain_truncation(ligand, connection_atoms, 3)
|
|
161
|
+
# trunc_mol.writexyz('trunc.xyz')
|
|
162
|
+
this_kier = kier(trunc_mol)
|
|
163
|
+
return this_kier
|