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,631 @@
|
|
|
1
|
+
# @file dbinteract.py
|
|
2
|
+
# Interacts with databases for similarity searches and screening.
|
|
3
|
+
#
|
|
4
|
+
# Written by Tim Ioannidis for HJK Group
|
|
5
|
+
#
|
|
6
|
+
# Dpt of Chemical Engineering, MIT
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
import re
|
|
12
|
+
import shutil
|
|
13
|
+
import string
|
|
14
|
+
try:
|
|
15
|
+
import pymol
|
|
16
|
+
except ImportError:
|
|
17
|
+
pass
|
|
18
|
+
try:
|
|
19
|
+
from openbabel import openbabel # version 3 style import
|
|
20
|
+
except ImportError:
|
|
21
|
+
import openbabel # fallback to version 2
|
|
22
|
+
|
|
23
|
+
from molSimplify.Classes.globalvars import (amassdict,
|
|
24
|
+
glob,
|
|
25
|
+
globalvars,
|
|
26
|
+
mybash)
|
|
27
|
+
from molSimplify.Scripts.io import plugin_defs
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def float_from_str(txt):
|
|
31
|
+
numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?'
|
|
32
|
+
rx = re.compile(numeric_const_pattern, re.VERBOSE)
|
|
33
|
+
float_arr = rx.findall(txt)
|
|
34
|
+
if not len(float_arr):
|
|
35
|
+
return txt
|
|
36
|
+
else:
|
|
37
|
+
return float_arr[0]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Setup database
|
|
41
|
+
# @param dbselect Name of database
|
|
42
|
+
# @return sdf and fs databases
|
|
43
|
+
def setupdb(dbselect):
|
|
44
|
+
globs = globalvars()
|
|
45
|
+
dbdir = os.path.relpath(globs.chemdbdir) + '/'
|
|
46
|
+
# get files in directory
|
|
47
|
+
dbfiles = os.listdir(dbdir)
|
|
48
|
+
# search for db files
|
|
49
|
+
dbmatches = [dbf for dbf in dbfiles if dbselect.lower() in dbf.lower()]
|
|
50
|
+
dbsdf = [dbm for dbm in dbmatches if '.sdf' in dbm]
|
|
51
|
+
dbfs = [dbm for dbm in dbmatches if '.fs' in dbm]
|
|
52
|
+
# print('thefile list' + str(dbfiles))
|
|
53
|
+
if len(dbsdf) == 0:
|
|
54
|
+
print((dbselect + ' sdf database file missing from ' + dbdir +
|
|
55
|
+
'. Please make sure file ' + dbselect + '.sdf is there..'))
|
|
56
|
+
dbf1 = False
|
|
57
|
+
else:
|
|
58
|
+
dbf1 = dbdir + dbsdf[0]
|
|
59
|
+
if len(dbfs) == 0:
|
|
60
|
+
print((dbselect + ' fastsearch database file missing from ' + dbdir +
|
|
61
|
+
'. Please make sure file ' + dbselect + '.fs is there, it speeds up search significantly..'))
|
|
62
|
+
dbf2 = False
|
|
63
|
+
else:
|
|
64
|
+
dbf2 = dbdir + dbfs[0]
|
|
65
|
+
return [dbf1, dbf2]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Print prebuilt openbabel filters
|
|
69
|
+
# @return String of prebuilt openbabel filters
|
|
70
|
+
def obfilters():
|
|
71
|
+
s = " A list of available filters for Database searching is listed below.\n"
|
|
72
|
+
s += """
|
|
73
|
+
-abonds Number of aromatic bonds
|
|
74
|
+
-atoms Number of atoms
|
|
75
|
+
-bonds Number of bonds
|
|
76
|
+
-cansmi Canonical SMILES
|
|
77
|
+
-cansmiNS Canonical SMILES without isotopes or stereo
|
|
78
|
+
-dbonds Number of double bonds
|
|
79
|
+
-formula Chemical formula
|
|
80
|
+
-HBA1 Number of Hydrogen Bond Acceptors 1 (JoelLib)
|
|
81
|
+
-HBA2 Number of Hydrogen Bond Acceptors 2 (JoelLib)
|
|
82
|
+
-HBD Number of Hydrogen Bond Donors (JoelLib)
|
|
83
|
+
-InChI IUPAC InChI identifier
|
|
84
|
+
-InChIKey InChIKey
|
|
85
|
+
-L5 Lipinski Rule of Five
|
|
86
|
+
-logP octanol/water partition coefficient
|
|
87
|
+
-MR molar refractivity
|
|
88
|
+
-MW Molecular Weight filter
|
|
89
|
+
-nF Number of Fluorine Atoms
|
|
90
|
+
-s SMARTS filter
|
|
91
|
+
-sbonds Number of single bonds
|
|
92
|
+
-smarts SMARTS filter
|
|
93
|
+
-tbonds Number of triple bonds
|
|
94
|
+
-title For comparing a molecule's title
|
|
95
|
+
-TPSA topological polar surface area
|
|
96
|
+
"""
|
|
97
|
+
s += "\n Similarity search can be performed using 4 fingerprints. Available fingerprints are:\n"
|
|
98
|
+
s += """
|
|
99
|
+
-FP2 Indexes linear fragments up to 7 atoms. (Default)
|
|
100
|
+
-FP3 SMARTS patterns specified in the file /usr/local/share/openbabel/*/patterns.txt
|
|
101
|
+
-FP4 SMARTS patterns specified in the file /usr/local/share/openbabel/*/SMARTS_InteLigand.txt
|
|
102
|
+
-MACCS SMARTS patterns specified in the file /usr/local/share/openbabel/*/MACCS.txt
|
|
103
|
+
"""
|
|
104
|
+
return s
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# Parse screening input from arguments
|
|
108
|
+
# @param args Argument namespace
|
|
109
|
+
# @return String of screening options
|
|
110
|
+
def checkscr(args):
|
|
111
|
+
scr = '"'
|
|
112
|
+
# if args.dbsmarts:
|
|
113
|
+
# scr += "s'"+args.dbsmarts+"' &"
|
|
114
|
+
if args.dbatoms:
|
|
115
|
+
nts = args.dbatoms.split('<')
|
|
116
|
+
print('adding atom constraints')
|
|
117
|
+
if nts[0] != '':
|
|
118
|
+
scr += " atoms>" + nts[0] + " &"
|
|
119
|
+
if nts[1] != '':
|
|
120
|
+
scr += " atoms<" + nts[1] + " &"
|
|
121
|
+
if args.dbbonds:
|
|
122
|
+
nts = args.dbbonds.split('<')
|
|
123
|
+
if nts[0] != '':
|
|
124
|
+
scr += " bonds>" + nts[0] + " &"
|
|
125
|
+
if nts[1] != '':
|
|
126
|
+
scr += " bonds<" + nts[1] + " &"
|
|
127
|
+
if args.dbarbonds:
|
|
128
|
+
nts = args.dbarbonds.split('<')
|
|
129
|
+
if nts[0] != '':
|
|
130
|
+
scr += " abonds>" + nts[0] + " &"
|
|
131
|
+
if nts[1] != '':
|
|
132
|
+
scr += " abonds<" + nts[1] + " &"
|
|
133
|
+
if args.dbsbonds:
|
|
134
|
+
nts = args.dbsbonds.split('<')
|
|
135
|
+
if nts[0] != '':
|
|
136
|
+
scr += " sbonds>" + nts[0] + " &"
|
|
137
|
+
if nts[1] != '':
|
|
138
|
+
scr += " sbonds<" + nts[1] + " &"
|
|
139
|
+
if args.dbmw:
|
|
140
|
+
nts = args.dbmw.split('<')
|
|
141
|
+
if nts[0] != '':
|
|
142
|
+
scr += " MW>" + nts[0] + " &"
|
|
143
|
+
if nts[1] != '':
|
|
144
|
+
scr += " MW<" + nts[1] + " &"
|
|
145
|
+
if scr == '"':
|
|
146
|
+
scr = ''
|
|
147
|
+
else:
|
|
148
|
+
scr = scr[:-2] + '"'
|
|
149
|
+
return scr
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# Substructure search
|
|
153
|
+
# @param smi Reference SMILES string
|
|
154
|
+
# @param nmols Number of hits desired
|
|
155
|
+
# @param dbselect Database to be searched
|
|
156
|
+
# @param finger Fingerprint to be used
|
|
157
|
+
# @param squery Filters to be applied
|
|
158
|
+
# @param args Argument namespace
|
|
159
|
+
# @return Filename of screening results
|
|
160
|
+
def getsimilar(smi, nmols, dbselect, finger, squery, args):
|
|
161
|
+
# get database files
|
|
162
|
+
[dbsdf, dbfs] = setupdb(dbselect)
|
|
163
|
+
print(('database set up :' + str(dbsdf) + ' || ' + str(dbfs)))
|
|
164
|
+
print(('Finding results similar, comparing to ' + smi))
|
|
165
|
+
|
|
166
|
+
obab = 'obabel'
|
|
167
|
+
if dbfs and args.dbfs:
|
|
168
|
+
com = obab + ' ' + dbfs + ' ' + 'simres.smi -d -xf' + \
|
|
169
|
+
finger + ' -s"' + smi + '" -al' + nmols
|
|
170
|
+
else:
|
|
171
|
+
mybash(obab + ' -isdf ' + dbsdf + ' -osdf -O tmp.sdf -d')
|
|
172
|
+
com = obab + ' tmp.sdf -O simres.smi -xf' + finger + ' -s"' + smi + '"'
|
|
173
|
+
# perform search using bash commandline
|
|
174
|
+
print('Performing substructure search:')
|
|
175
|
+
print(('running: ' + str(com)))
|
|
176
|
+
res = mybash(com)
|
|
177
|
+
print(('res = ' + str(res)))
|
|
178
|
+
print(('number of SMILES returned : ' + str(mybash('cat simres.smi | wc -l'))))
|
|
179
|
+
|
|
180
|
+
if os.path.isfile('tmp.sdf'):
|
|
181
|
+
os.remove('tmp.sdf')
|
|
182
|
+
shutil.copy('simres.smi', 'initial.smi')
|
|
183
|
+
if args.dbmaxsmartsmatches:
|
|
184
|
+
print('Applying filters: inside get similar')
|
|
185
|
+
com = obab + " -ismi simres.smi -osmi -O simres.smi -h --filter " + squery
|
|
186
|
+
print(('running: ' + str(com)))
|
|
187
|
+
mybash(com)
|
|
188
|
+
print(('number of lines in simres.smi: ' +
|
|
189
|
+
str(mybash('cat simres.smi | wc -l'))))
|
|
190
|
+
|
|
191
|
+
# com = obab+" -ismi simres.smi -osmi -O simres.smi -d --filter 'nsmartsmatches<="+args.dbmaxsmartsmatches+"'"
|
|
192
|
+
# print('running: '+ str(com))
|
|
193
|
+
|
|
194
|
+
# res = mybash(com)
|
|
195
|
+
# print('number of lines in simres.smi after dxbsmartmatches: '+str(mybash('cat simres.smi | wc -l')))
|
|
196
|
+
|
|
197
|
+
# print res
|
|
198
|
+
shutil.copy('simres.smi', 'afterfilteringsmarts.smi')
|
|
199
|
+
# check output and print error if nothing was found
|
|
200
|
+
if ('errors' in res):
|
|
201
|
+
ss = 'No matches were found in DB. Log info:\n' + res
|
|
202
|
+
print(ss)
|
|
203
|
+
return ss, True
|
|
204
|
+
else:
|
|
205
|
+
return 'simres.smi', False
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
# Strip salts from list of SMILES results
|
|
209
|
+
#
|
|
210
|
+
# Performs text matching
|
|
211
|
+
# @param fname Filename of screening results
|
|
212
|
+
def stripsalts(fname):
|
|
213
|
+
acc0 = ['H', 'B', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I', 'Si']
|
|
214
|
+
acc1 = ['O-', 'F-', 'Cl-', 'Br-', 'I-', 'C@@H', 'C@H', 'N+', 'C@']
|
|
215
|
+
rejected = ['@@H', '@H', "/", "\\"]
|
|
216
|
+
accepted = acc0 + acc1
|
|
217
|
+
if glob.glob(fname):
|
|
218
|
+
with open(fname, 'r') as f:
|
|
219
|
+
s = f.read().splitlines()
|
|
220
|
+
else:
|
|
221
|
+
print(('not found fname ' + str(fname)))
|
|
222
|
+
|
|
223
|
+
return 0
|
|
224
|
+
with open(fname, 'w') as f:
|
|
225
|
+
for i, ss in enumerate(s):
|
|
226
|
+
ss = ss.split('\t')[0]
|
|
227
|
+
for r in rejected:
|
|
228
|
+
if r in ss:
|
|
229
|
+
ss = ss.replace(r, '')
|
|
230
|
+
ls = ss.split('[')
|
|
231
|
+
for li in ls:
|
|
232
|
+
if ']' in li:
|
|
233
|
+
lq = li.split(']')[0]
|
|
234
|
+
if lq not in accepted:
|
|
235
|
+
lq0 = '.[' + lq + ']'
|
|
236
|
+
lq1 = '[' + lq + '].'
|
|
237
|
+
if lq0 in ss:
|
|
238
|
+
ss = ss.replace(lq0, '')
|
|
239
|
+
elif lq1 in ss:
|
|
240
|
+
ss = ss.replace(lq1, '')
|
|
241
|
+
ss = ss.split('.')[0]
|
|
242
|
+
f.write(ss + '\n')
|
|
243
|
+
return 0
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
# Get list of unique elements in SMILES string
|
|
247
|
+
#
|
|
248
|
+
# Performs text matching
|
|
249
|
+
# @param smistr SMILES string
|
|
250
|
+
# @return List of elements
|
|
251
|
+
def getels(smistr):
|
|
252
|
+
els = []
|
|
253
|
+
els1 = ['H', 'B', 'C', 'N', 'O', 'F', 'K', 'P', 'S', 'V', 'Y', 'I']
|
|
254
|
+
els2 = ['He', 'Li', 'Be', 'Na', 'Al', 'Si', 'Cl', 'Ar', 'Ca', 'Ti', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga',
|
|
255
|
+
'Ge', 'As', 'Se', 'se', 'Br', 'Kr', 'Rb', 'Sr', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In',
|
|
256
|
+
'Sn', 'Sb', 'Te', 'Xe']
|
|
257
|
+
for char in (string.punctuation + string.digits):
|
|
258
|
+
smistr = smistr.replace(char, '')
|
|
259
|
+
smistr = list(smistr[::-1])
|
|
260
|
+
i = 0
|
|
261
|
+
while i < len(smistr):
|
|
262
|
+
if smistr[i].upper() in els1 and smistr[i].upper() not in els:
|
|
263
|
+
els.append(smistr[i].upper())
|
|
264
|
+
elif i < len(smistr) - 1:
|
|
265
|
+
if smistr[i + 1] + smistr[i] in els2:
|
|
266
|
+
if smistr[i + 1] + smistr[i] not in els:
|
|
267
|
+
els.append(smistr[i + 1] + smistr[i])
|
|
268
|
+
smistr[i + 1] = ''
|
|
269
|
+
i = i + 1
|
|
270
|
+
return els
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
# Filters screening results based on list of allowed elements
|
|
274
|
+
#
|
|
275
|
+
# Performs text matching
|
|
276
|
+
# @param fname Filename of screening results
|
|
277
|
+
# @param allowedels List of allowed elements
|
|
278
|
+
def checkels(fname, allowedels):
|
|
279
|
+
print(('Filtering by allowed elements:' + str(allowedels)))
|
|
280
|
+
if glob.glob(fname):
|
|
281
|
+
with open(fname, 'r') as f:
|
|
282
|
+
s = f.read().splitlines()
|
|
283
|
+
else:
|
|
284
|
+
return 0
|
|
285
|
+
with open(fname, 'w') as f:
|
|
286
|
+
nf = 0
|
|
287
|
+
for i, ss in enumerate(s):
|
|
288
|
+
ss = ss.split('\t')[0]
|
|
289
|
+
els = getels(ss)
|
|
290
|
+
flag = False
|
|
291
|
+
for el in els:
|
|
292
|
+
if el not in allowedels:
|
|
293
|
+
flag = True
|
|
294
|
+
# print(el)
|
|
295
|
+
if not flag:
|
|
296
|
+
f.write(ss + '\n')
|
|
297
|
+
nf = nf + 1
|
|
298
|
+
print(('Element filter returns', str(nf), 'results'))
|
|
299
|
+
return 0
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
# Maximal dissimilarity search
|
|
303
|
+
#
|
|
304
|
+
# Uses a greedy algorithm that maximizes sums of Tanimoto distances with all elements picked
|
|
305
|
+
#
|
|
306
|
+
# Results are written into dissimres.smi file.
|
|
307
|
+
# @param outf Filename containing SMILES strings to be processed
|
|
308
|
+
# @param n Number of dissimilar molecules required
|
|
309
|
+
def dissim(outf, n):
|
|
310
|
+
obab = 'obabel'
|
|
311
|
+
|
|
312
|
+
# clone hitlist file
|
|
313
|
+
hit_list_path = "hitlist.smi"
|
|
314
|
+
|
|
315
|
+
with open(outf) as f:
|
|
316
|
+
smiles_list = f.readlines()
|
|
317
|
+
with open(hit_list_path, 'w') as f:
|
|
318
|
+
f.writelines(smiles_list)
|
|
319
|
+
|
|
320
|
+
# generate fs of original hit list
|
|
321
|
+
mybash(obab + ' -ismi ' + hit_list_path + ' -osdf -O tmp.sdf')
|
|
322
|
+
mybash(obab + ' tmp.sdf -ofs')
|
|
323
|
+
# number of hits
|
|
324
|
+
numcpds = mybash('obabel tmp.sdf -onul')
|
|
325
|
+
numcpds = int(numcpds.split(None)[0])
|
|
326
|
+
# pick first element of list
|
|
327
|
+
mybash('obabel tmp.sdf -O 1.smi -f 1 -l 1')
|
|
328
|
+
del smiles_list[0]
|
|
329
|
+
with open(hit_list_path, 'w') as f:
|
|
330
|
+
f.writelines(smiles_list)
|
|
331
|
+
# recompute the fs and number of hits parameters
|
|
332
|
+
numcpds += -1 # decrease number of hits
|
|
333
|
+
mybash(obab + ' -ismi ' + hit_list_path + ' -osdf tmp.sdf')
|
|
334
|
+
mybash(obab + ' tmp.sdf -ofs')
|
|
335
|
+
|
|
336
|
+
print('Performing dissimilarity search:')
|
|
337
|
+
mostdissim = []
|
|
338
|
+
if n > 1:
|
|
339
|
+
# find most dissimilar structure
|
|
340
|
+
for i in range(n - 1):
|
|
341
|
+
|
|
342
|
+
# initialize list of total similarities
|
|
343
|
+
simsum = [0] * numcpds
|
|
344
|
+
# compute total similarity of each dissimilar structure with hit list
|
|
345
|
+
for j in range(i + 1):
|
|
346
|
+
a = mybash('obabel ' + str(j + 1) + '.smi tmp.sdf -ofpt')
|
|
347
|
+
a = a.splitlines()
|
|
348
|
+
a = [s.split('= ') for s in a]
|
|
349
|
+
a = [item for sublist in a for item in sublist]
|
|
350
|
+
aa = []
|
|
351
|
+
for k in a:
|
|
352
|
+
try:
|
|
353
|
+
aa.append(float(k))
|
|
354
|
+
except ValueError:
|
|
355
|
+
pass
|
|
356
|
+
a = aa
|
|
357
|
+
simsum = [x + y for x, y in zip(simsum, a)]
|
|
358
|
+
# pick most dissimilar structure by greedily minimizing total similarity
|
|
359
|
+
mostdissim = simsum.index(min(simsum))
|
|
360
|
+
mybash('obabel tmp.sdf -O ' + str(i + 2) + '.smi -f ' +
|
|
361
|
+
str(mostdissim + 1) + ' -l' + str(mostdissim + 1))
|
|
362
|
+
|
|
363
|
+
# remove most dissimilar from the list and re-write the smi file
|
|
364
|
+
del smiles_list[mostdissim]
|
|
365
|
+
with open(hit_list_path, 'w') as f:
|
|
366
|
+
f.writelines(smiles_list)
|
|
367
|
+
|
|
368
|
+
# recompute the fs and number of hits parameters
|
|
369
|
+
numcpds += -1 # decrease number of hits
|
|
370
|
+
mybash(obab + ' -ismi ' + hit_list_path + ' -osdf tmp.sdf')
|
|
371
|
+
mybash(obab + ' tmp.sdf -ofs')
|
|
372
|
+
|
|
373
|
+
# combine results into one file
|
|
374
|
+
with open('dissimres.smi', 'w') as f:
|
|
375
|
+
for i in range(n):
|
|
376
|
+
with open(str(i + 1) + '.smi', 'r') as ff:
|
|
377
|
+
s = ff.read().splitlines()
|
|
378
|
+
f.write(s[0] + '\n')
|
|
379
|
+
os.remove(str(i + 1) + '.smi')
|
|
380
|
+
return 0
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
# Matches initial SMARTS and computes connection atoms
|
|
384
|
+
# @param smarts SMARTS string
|
|
385
|
+
# @param outf Filename containing SMILES strings
|
|
386
|
+
# @param catoms Connection atoms of SMARTS string
|
|
387
|
+
def matchsmarts(smarts, outf, catoms, args):
|
|
388
|
+
sm = openbabel.OBSmartsPattern()
|
|
389
|
+
print('---Test for developer version----')
|
|
390
|
+
sm.Init(smarts)
|
|
391
|
+
print(('smart is:', smarts))
|
|
392
|
+
current_path = os.getcwd()
|
|
393
|
+
print(('current path:', current_path))
|
|
394
|
+
print(('file open:', outf))
|
|
395
|
+
with open(outf, 'r') as f:
|
|
396
|
+
s = f.read().splitlines()
|
|
397
|
+
|
|
398
|
+
with open(outf, 'w') as f:
|
|
399
|
+
# print('in file is:', s)
|
|
400
|
+
moll = openbabel.OBMol() # add
|
|
401
|
+
obConversion = openbabel.OBConversion() # add
|
|
402
|
+
obConversion.SetInAndOutFormats("smi", "smi") # add
|
|
403
|
+
# print('!!!s:', s)
|
|
404
|
+
# Set practically infinite size limit
|
|
405
|
+
max_atoms = sys.maxsize
|
|
406
|
+
if args.dbatoms: # Overwrite max_atoms if dbatoms is given
|
|
407
|
+
max_atoms = int(float_from_str(args.dbatoms))
|
|
408
|
+
for i, mol in enumerate(s):
|
|
409
|
+
obConversion.ReadString(moll, mol) # add
|
|
410
|
+
sm.Match(moll)
|
|
411
|
+
smm = list(sm.GetUMapList())
|
|
412
|
+
if 0 < len(smm) and len(mol) < max_atoms:
|
|
413
|
+
print(('#:', i))
|
|
414
|
+
print(('mol current:', mol))
|
|
415
|
+
print(('smm current', smm, len(smm)))
|
|
416
|
+
print(('catoms:', catoms))
|
|
417
|
+
print(('!!!dbatoms:', max_atoms))
|
|
418
|
+
pmatch = smm[0]
|
|
419
|
+
cc = ''
|
|
420
|
+
for at in catoms:
|
|
421
|
+
att = at - 1 # indexing
|
|
422
|
+
cc += str(pmatch[att]) + ','
|
|
423
|
+
# if i < nres:
|
|
424
|
+
f.write(mol + ' ' + cc[:-1] + '\n')
|
|
425
|
+
# f.write(s[i]+'\n')
|
|
426
|
+
else:
|
|
427
|
+
pass
|
|
428
|
+
return 0
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
# Main driver for database search
|
|
432
|
+
# @param rundir Run directory
|
|
433
|
+
# @param args Argument namespace
|
|
434
|
+
# @param globs Global variables
|
|
435
|
+
def dbsearch(rundir, args, globs):
|
|
436
|
+
cwd = os.getcwd()
|
|
437
|
+
flag = False
|
|
438
|
+
|
|
439
|
+
obab = 'obabel'
|
|
440
|
+
# in any case do similarity search over indexed db #
|
|
441
|
+
outf = args.dbfname if args.dbfname else 'simres.smi' # output file
|
|
442
|
+
# convert to SMILES/SMARTS if file
|
|
443
|
+
if not args.dbbase:
|
|
444
|
+
if args.gui:
|
|
445
|
+
from molSimplify.Classes.mWidgets import mQDialogWarn
|
|
446
|
+
qqb = mQDialogWarn('Warning', "No database file found within " +
|
|
447
|
+
globs.chemdbdir + '. Search not possible.')
|
|
448
|
+
qqb.setParent(args.gui.DBWindow)
|
|
449
|
+
print(("No database file found within " +
|
|
450
|
+
globs.chemdbdir + '. Search not possible.'))
|
|
451
|
+
return True
|
|
452
|
+
# if args.dbsim:
|
|
453
|
+
# print('similarity searching')
|
|
454
|
+
# if '.smi' in args.dbsim:
|
|
455
|
+
# if glob.glob(args.dbsim):
|
|
456
|
+
# with open(args.dbsim,'r') as f:
|
|
457
|
+
# smistr = f.read()
|
|
458
|
+
# else:
|
|
459
|
+
# print 'File '+args.dbsim+' not existing. Check your input.'
|
|
460
|
+
# print 'Similarity search terminating..'
|
|
461
|
+
# return True
|
|
462
|
+
# elif ('.mol' in args.dbsim or '.xyz' in args.dbsim):
|
|
463
|
+
# if glob.glob(args.dbsim):
|
|
464
|
+
# ftype = args.dbsim.split('.')[-1]
|
|
465
|
+
# obConversion = openbabel.OBConversion()
|
|
466
|
+
# obConversion.SetInFormat(ftype)
|
|
467
|
+
# OBMol = openbabel.OBMol()
|
|
468
|
+
# obConversion.ReadFile(OBMol,args.dbsim)
|
|
469
|
+
# smistr = pybel.write("smi")
|
|
470
|
+
# else:
|
|
471
|
+
# print 'File '+args.dbsim+' not existing. Check your input.'
|
|
472
|
+
# print 'Similarity search terminating..'
|
|
473
|
+
# return True
|
|
474
|
+
# else:
|
|
475
|
+
# smistr = args.dbsim
|
|
476
|
+
# print smistr
|
|
477
|
+
if args.dbsmarts:
|
|
478
|
+
if '.smi' in args.dbsmarts:
|
|
479
|
+
if glob.glob(args.dbsmarts):
|
|
480
|
+
with open(args.dbsmarts, 'r') as f:
|
|
481
|
+
smistr = f.read()
|
|
482
|
+
else:
|
|
483
|
+
print(('File ' + args.dbsmarts +
|
|
484
|
+
' does not exist. Check your input.'))
|
|
485
|
+
print('Substructure search terminating..')
|
|
486
|
+
return 1
|
|
487
|
+
elif ('.mol' in args.dbsmarts or '.xyz' in args.dbsmarts):
|
|
488
|
+
if glob.glob(args.dbsmarts):
|
|
489
|
+
smistr = pymol.write("smi")
|
|
490
|
+
else:
|
|
491
|
+
print(('File ' + args.dbsmarts +
|
|
492
|
+
' does not exist. Check your input.'))
|
|
493
|
+
print('Substructure search terminating..')
|
|
494
|
+
return True
|
|
495
|
+
else:
|
|
496
|
+
smistr = args.dbsmarts
|
|
497
|
+
elif args.dbhuman:
|
|
498
|
+
smistr = []
|
|
499
|
+
denticity = args.dbvdent if args.dbvdent else '1'
|
|
500
|
+
coordatoms = args.dbvconns if args.dbvconns else 'N'
|
|
501
|
+
hyb = args.dbvhyb if args.dbvhyb else '3'
|
|
502
|
+
nlinks = args.dbvlinks if args.dbvlinks else '2'
|
|
503
|
+
monod = ['1', 'mono', 'Mono', 'monodentate', 'Monodentate']
|
|
504
|
+
bid = ['2', 'bi', 'Bi', 'bidentate', 'Bidentate']
|
|
505
|
+
if args.debug:
|
|
506
|
+
print('dbhuman conversion')
|
|
507
|
+
print(('dbhuman coordatoms ' + str(coordatoms)))
|
|
508
|
+
print(('dbhuman nlinks ' + str(nlinks)))
|
|
509
|
+
print(('dbhuman hyb ' + str(hyb)))
|
|
510
|
+
if denticity in monod:
|
|
511
|
+
smistr = '[#' + str(amassdict[coordatoms[0]][1]
|
|
512
|
+
) + '^' + hyb[0] + ';!+]'
|
|
513
|
+
elif denticity in bid:
|
|
514
|
+
smistr = '[#' + str(amassdict[coordatoms[0]][1]
|
|
515
|
+
) + '^' + hyb[0] + ';!+]'
|
|
516
|
+
for i in range(int(nlinks)):
|
|
517
|
+
smistr = smistr + '[#6;R0]'
|
|
518
|
+
print((coordatoms, hyb))
|
|
519
|
+
smistr = smistr + \
|
|
520
|
+
'[#' + str(amassdict[coordatoms[1]][1]) + '^' + hyb[1] + ';!+]'
|
|
521
|
+
print(('setting smistr from dbhuman ' + smistr))
|
|
522
|
+
|
|
523
|
+
# else:
|
|
524
|
+
# get database
|
|
525
|
+
# [dbsdf,dbfs] = setupdb(args.dbbase)
|
|
526
|
+
# convert to smiles and print to output
|
|
527
|
+
# if globs.osx:
|
|
528
|
+
# cmd = "/usr/local/bin/obabel "+dbsdf+" -f0 -l100 -o"+outf[-3:]+" -O "+outf
|
|
529
|
+
# else:
|
|
530
|
+
# cmd = obab+" "+dbsdf+" -f0 -l100 -o"+outf[-3:]+" -O "+outf
|
|
531
|
+
# t = mybash(cmd)
|
|
532
|
+
# os.rename(outf,args.rundir+'/'+outf)
|
|
533
|
+
# print t
|
|
534
|
+
# return False
|
|
535
|
+
# parse filters
|
|
536
|
+
squery = checkscr(args)
|
|
537
|
+
if args.debug:
|
|
538
|
+
print(("squery is " + str(squery)))
|
|
539
|
+
|
|
540
|
+
if args.dbmaxsmartsmatches:
|
|
541
|
+
plugin_path = plugin_defs()
|
|
542
|
+
shutil.copy(plugin_path, 'plugindefines.txt')
|
|
543
|
+
cmd = "sed -i '/nsmartsmatches/!b;n;c" + smistr + "' " + 'plugindefines.txt'
|
|
544
|
+
mybash(cmd)
|
|
545
|
+
# run substructure search #
|
|
546
|
+
nmols = '10000' if not args.dbnsearch else args.dbnsearch
|
|
547
|
+
finger = 'FP2' if not args.dbfinger else args.dbfinger
|
|
548
|
+
if int(nmols) > 3000 and args.gui:
|
|
549
|
+
from molSimplify.Classes.mWidgets import mQDialogInf
|
|
550
|
+
qqb = mQDialogInf(
|
|
551
|
+
'Warning', "Database search is going to take a few minutes. Please wait..OK?")
|
|
552
|
+
qqb.setParent(args.gui.DBWindow)
|
|
553
|
+
if args.dbsmarts or args.dbhuman or args.dbsim:
|
|
554
|
+
outputf, flag = getsimilar(
|
|
555
|
+
smistr, nmols, args.dbbase, finger, squery, args)
|
|
556
|
+
try:
|
|
557
|
+
shutil.copy('simres.smi', outf)
|
|
558
|
+
except (FileNotFoundError, shutil.SameFileError):
|
|
559
|
+
pass
|
|
560
|
+
|
|
561
|
+
if args.debug:
|
|
562
|
+
print(('after similarity search, outf is ' + str(outputf)))
|
|
563
|
+
if flag:
|
|
564
|
+
if args.gui:
|
|
565
|
+
from molSimplify.Classes.mWidgets import mQDialogWarn
|
|
566
|
+
qqb = mQDialogWarn('Warning', "No matches found in search..")
|
|
567
|
+
qqb.setParent(args.gui.DBWindow)
|
|
568
|
+
print("No matches found in search..")
|
|
569
|
+
return True
|
|
570
|
+
# strip metals and clean-up, remove duplicates etc
|
|
571
|
+
# print('mb ' + str(mybash('cat '+outf)))
|
|
572
|
+
if args.dbsmarts or args.dbhuman:
|
|
573
|
+
print('Stripping salts and removing duplicates')
|
|
574
|
+
|
|
575
|
+
print(('number of smiles strings BEFORE salt stripping: ' +
|
|
576
|
+
mybash("cat " + outf + '| wc -l')))
|
|
577
|
+
_ = stripsalts(outf)
|
|
578
|
+
print(('number of smiles strings AFTER salt stripping: ' +
|
|
579
|
+
mybash("cat " + outf + '| wc -l')))
|
|
580
|
+
print(('number of smiles strings BEFORE unique: ' +
|
|
581
|
+
mybash("cat " + outf + '| wc -l')))
|
|
582
|
+
cmd = obab + " -ismi " + outf + " -osmi -O " + outf + " --unique"
|
|
583
|
+
# print('running:' + str(cmd))
|
|
584
|
+
shutil.copy(outf, 'afterstrippingsalts.smi')
|
|
585
|
+
_ = mybash(cmd)
|
|
586
|
+
print(('number of smiles strings AFTER unique: ' +
|
|
587
|
+
mybash("cat " + outf + '| wc -l')))
|
|
588
|
+
|
|
589
|
+
# print 't (ret from bash) is '+ str(t)
|
|
590
|
+
# filter results containing elements that aren't allowed
|
|
591
|
+
if args.dballowedels:
|
|
592
|
+
if args.dballowedels == 'organic': # HCNO only
|
|
593
|
+
allowedels = ['H', 'C', 'N', 'O']
|
|
594
|
+
elif args.dballowedels == 'organohalides':
|
|
595
|
+
allowedels = ['H', 'C', 'N', 'O', 'F', 'Cl', 'Br', 'I']
|
|
596
|
+
elif args.dballowedels == 'common':
|
|
597
|
+
allowedels = ['H', 'C', 'N', 'O', 'F', 'Cl', 'Br', 'I', 'P', 'S']
|
|
598
|
+
else:
|
|
599
|
+
allowedels = args.dballowedels
|
|
600
|
+
print(('number of smiles strings BEFORE element filter: ' +
|
|
601
|
+
mybash("cat " + outf + '| wc -l')))
|
|
602
|
+
checkels(outf, allowedels)
|
|
603
|
+
print(('number of smiles strings AFTER element filter unique: ' +
|
|
604
|
+
mybash("cat " + outf + '| wc -l')))
|
|
605
|
+
|
|
606
|
+
shutil.copy(outf, 'afterfilteringels.smi')
|
|
607
|
+
# check if defined connection atoms
|
|
608
|
+
if args.dbcatoms:
|
|
609
|
+
catoms = [int(a) for a in args.dbcatoms]
|
|
610
|
+
else:
|
|
611
|
+
catoms = [1]
|
|
612
|
+
# do pattern matching
|
|
613
|
+
# nres = 50 if not args.dbresults else int(args.dbresults)
|
|
614
|
+
if args.dbsmarts or args.dbhuman:
|
|
615
|
+
print(('number of smiles strings BEFORE SMARTS filter: ' +
|
|
616
|
+
mybash("cat " + outf + '| wc -l')))
|
|
617
|
+
_ = matchsmarts(smistr, outf, catoms, args)
|
|
618
|
+
print(('number of smiles strings AFTER SMARTS filter: ' +
|
|
619
|
+
mybash("cat " + outf + '| wc -l')))
|
|
620
|
+
if args.debug:
|
|
621
|
+
print(('outf is ' + str(outf)))
|
|
622
|
+
# maximal dissimilarity search
|
|
623
|
+
if args.dbdissim:
|
|
624
|
+
dissim(outf, int(args.dbdissim))
|
|
625
|
+
if args.rundir:
|
|
626
|
+
print(('writing output to ' + str(args.rundir) + '/' + str(outf) + '\n'))
|
|
627
|
+
os.rename(outf, args.rundir + '/' + outf)
|
|
628
|
+
else:
|
|
629
|
+
print(('writing output to ' + str(cwd) + '/' + str(outf) + '\n'))
|
|
630
|
+
# os.chdir(cwd)
|
|
631
|
+
return False
|