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,415 @@
|
|
|
1
|
+
from molSimplify.Scripts.io import getlicores, lig_load
|
|
2
|
+
from copy import copy, deepcopy
|
|
3
|
+
|
|
4
|
+
# NOTE: -isomers does not currently support ligands with denticity > 2 or complexes with 3 bidentate molecules
|
|
5
|
+
|
|
6
|
+
# These adjacency matrices represent what an atom at each position can "see."
|
|
7
|
+
# For example, in an octahedral complex, an atom at the 0th position in an
|
|
8
|
+
# octahedral complex can see atoms at positions (1,3,4,5). Used to check
|
|
9
|
+
# whether a given isomer is unique. NOTE: uses python numbering (zero indexed)
|
|
10
|
+
oct_adjacency = {0: (1, 3, 4, 5), 1: (0, 2, 4, 5), 2: (1, 3, 4, 5), 3: (0, 2, 4, 5),
|
|
11
|
+
4: (0, 1, 2, 3), 5: (0, 1, 2, 3)}
|
|
12
|
+
thd_adjacency = {0: (1, 2, 3), 1: (0, 2, 3), 2: (0, 1, 3), 3: (0, 1, 2)}
|
|
13
|
+
sqp_adjacency = {0: (1, 3), 1: (0, 2), 2: (1, 3), 3: (0, 2)}
|
|
14
|
+
tbp_adjacency = {0: (2, 3, 4), 1: (2, 3, 4), 2: (0, 1), 3: (0, 1), 4: (0, 1)}
|
|
15
|
+
spy_adjacency = {0: (1, 3, 4), 1: (0, 2, 4), 2: (1, 3, 4), 3: (0, 2, 4), 4: (0, 1, 2, 3)}
|
|
16
|
+
pbp_adjacency = {0: (1, 4), 1: (0, 2), 2: (1, 3), 3: (2, 4), 4: (3, 0), 5: (0, 1, 2, 3, 4), 6: (0, 1, 2, 3, 4)}
|
|
17
|
+
|
|
18
|
+
# Core functionality of isomers.py
|
|
19
|
+
# @param args A class containing the user specified input
|
|
20
|
+
# @return collapsed A list of lists, each list contains the args.lig for a unique isomer
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def generateisomers(args):
|
|
24
|
+
# Check if this is a non-supported case
|
|
25
|
+
dents = []
|
|
26
|
+
for ligands in args.lig:
|
|
27
|
+
denticity = checkdenticity(ligands)
|
|
28
|
+
dents.append(denticity)
|
|
29
|
+
if max(dents) > 2:
|
|
30
|
+
print('WARNING, -isomers does not support ligand denticities greater than two. Quiting...')
|
|
31
|
+
return []
|
|
32
|
+
|
|
33
|
+
# If supported, run the program
|
|
34
|
+
expanded = expandrepresentation(args)
|
|
35
|
+
permutations = findpermutations(expanded)
|
|
36
|
+
unique_permutations = checkunique(args, permutations)
|
|
37
|
+
isomers = collapserepresentation(args, unique_permutations)
|
|
38
|
+
if args.stereos:
|
|
39
|
+
isomers = generatestereo(isomers)
|
|
40
|
+
|
|
41
|
+
return isomers
|
|
42
|
+
|
|
43
|
+
# Takes the user specified -lig and rewrites it in an explicit form
|
|
44
|
+
# @param args The list of user specified inputs
|
|
45
|
+
# @return expanded The ligand list in expanded form
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def expandrepresentation(args):
|
|
49
|
+
expanded_temp = []
|
|
50
|
+
for occ, ligand in enumerate(args.lig):
|
|
51
|
+
occ = int(args.ligocc[occ])
|
|
52
|
+
for duplicate in range(occ):
|
|
53
|
+
expanded_temp.append(ligand)
|
|
54
|
+
|
|
55
|
+
expanded = []
|
|
56
|
+
for counter, ligand in enumerate(expanded_temp):
|
|
57
|
+
if checkdenticity(ligand) == 2:
|
|
58
|
+
expanded.append(ligand+'_alphabond')
|
|
59
|
+
expanded.append(ligand+'_betabond')
|
|
60
|
+
elif checkdenticity(ligand) > 2:
|
|
61
|
+
print(
|
|
62
|
+
'WARNING, -isomers does not fully support ligand denticities greater than two!')
|
|
63
|
+
expanded.append(ligand)
|
|
64
|
+
else:
|
|
65
|
+
expanded.append(ligand)
|
|
66
|
+
return expanded
|
|
67
|
+
|
|
68
|
+
# Given a list, generates all possible permutations of that list
|
|
69
|
+
# @param lst The list to permute
|
|
70
|
+
# @return master A list of lists, with each specifying a permutation
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def findpermutations(lst, master=None):
|
|
74
|
+
if master is None:
|
|
75
|
+
master = []
|
|
76
|
+
for _ in range(len(lst)-1):
|
|
77
|
+
if not master:
|
|
78
|
+
for element in lst:
|
|
79
|
+
master.append([element])
|
|
80
|
+
|
|
81
|
+
master_updated = []
|
|
82
|
+
for permutation in master:
|
|
83
|
+
master_tmp = []
|
|
84
|
+
lst_tmp = copy(lst)
|
|
85
|
+
for element in permutation:
|
|
86
|
+
lst_tmp.remove(element)
|
|
87
|
+
for element in lst_tmp:
|
|
88
|
+
master_tmp.append(permutation+[element])
|
|
89
|
+
master_updated = master_updated + master_tmp
|
|
90
|
+
|
|
91
|
+
master = deepcopy(master_updated)
|
|
92
|
+
|
|
93
|
+
return master
|
|
94
|
+
|
|
95
|
+
# Filters a list of lig lists for permutations which correspond to unique compounds
|
|
96
|
+
#
|
|
97
|
+
# based on the geometry of the metal complex
|
|
98
|
+
#
|
|
99
|
+
# @param args The user specified input
|
|
100
|
+
# @param master Should be left empty and allowed to default to an empty list
|
|
101
|
+
# @return A smaller list of lists, corresponding only to unique compounds
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def checkunique(args, permutations):
|
|
105
|
+
adjacency = getadjacency(args.geometry)
|
|
106
|
+
unique_representations = []
|
|
107
|
+
unique_simple_geometries = []
|
|
108
|
+
|
|
109
|
+
for permutation in permutations:
|
|
110
|
+
geometry = []
|
|
111
|
+
for index, ligand in enumerate(permutation):
|
|
112
|
+
visible_indices = adjacency[index]
|
|
113
|
+
|
|
114
|
+
visible_ligands = []
|
|
115
|
+
for i in visible_indices:
|
|
116
|
+
visible_ligands.append(permutation[i])
|
|
117
|
+
visible_ligands.sort()
|
|
118
|
+
|
|
119
|
+
geometry.append([permutation[index]] + visible_ligands)
|
|
120
|
+
|
|
121
|
+
if checkallowedbidentates(permutation, args.geometry):
|
|
122
|
+
geometry.sort()
|
|
123
|
+
if checkincluded(geometry, unique_representations):
|
|
124
|
+
unique_representations.append(geometry)
|
|
125
|
+
unique_simple_geometries.append(permutation)
|
|
126
|
+
|
|
127
|
+
return unique_simple_geometries
|
|
128
|
+
|
|
129
|
+
# Changes the lig list from the expanded representation back to the traditional molsimplify representation
|
|
130
|
+
#
|
|
131
|
+
# Also, filters out compounds which are not actually unique due to symmetry in bidentate ligands
|
|
132
|
+
#
|
|
133
|
+
# @param args The user specified input
|
|
134
|
+
# @param permutations A list of lists. The lig lists in expanded representation to be collapsed
|
|
135
|
+
# @return recheck_unique A further filtered -lig list, back in the standard representation
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def collapserepresentation(args, permutations):
|
|
139
|
+
|
|
140
|
+
# First, relabel symmetric ligands
|
|
141
|
+
permutations_tmp = deepcopy(permutations)
|
|
142
|
+
for geo in permutations_tmp:
|
|
143
|
+
for counter, ligand in enumerate(geo):
|
|
144
|
+
if ligand.endswith('_alphabond'):
|
|
145
|
+
name = ligand.split('_')[0]
|
|
146
|
+
if checksymmetric(name):
|
|
147
|
+
geo[counter] = name+'_sym'
|
|
148
|
+
geo[counter+1] = name+'_sym'
|
|
149
|
+
elif ligand.endswith('_betabond'):
|
|
150
|
+
name = ligand.split('_')[0]
|
|
151
|
+
if checksymmetric(name):
|
|
152
|
+
geo[counter] = name+'_sym'
|
|
153
|
+
geo[counter+1] = name+'_sym'
|
|
154
|
+
|
|
155
|
+
recheck_unique = checkunique(args, permutations_tmp)
|
|
156
|
+
|
|
157
|
+
for geo in recheck_unique:
|
|
158
|
+
for counter, ligand in enumerate(geo):
|
|
159
|
+
if ligand.endswith('_alphabond'):
|
|
160
|
+
name = ligand.split('_')[0]
|
|
161
|
+
geo[counter] = name
|
|
162
|
+
del geo[counter+1]
|
|
163
|
+
elif ligand.endswith('_betabond'):
|
|
164
|
+
name = ligand.split('_')[0]
|
|
165
|
+
geo[counter] = name+'_flipped'
|
|
166
|
+
del geo[counter+1]
|
|
167
|
+
elif ligand.endswith('_sym'):
|
|
168
|
+
name = ligand.split('_')[0]
|
|
169
|
+
geo[counter] = name
|
|
170
|
+
del geo[counter+1]
|
|
171
|
+
|
|
172
|
+
return recheck_unique
|
|
173
|
+
|
|
174
|
+
# If requested, generates the stereoisomer of all unique isomers found by isomers.py
|
|
175
|
+
#
|
|
176
|
+
# Stereoisomers are generated by reflecting the ligands over the plane containing ligands 2,4,5 and 6
|
|
177
|
+
# There is no check to determine if the generated "stereoisomer" is unique from the original compound
|
|
178
|
+
#
|
|
179
|
+
# @param collapsed_representation A list of lists specifying all possible isomers. Output by collapserepresentation()
|
|
180
|
+
# @return stereoisomers_Final A list of lists containing twice as many values as collapsed_representation, corresponding to the stereoisomers for each compound.
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def generatestereo(collapsed_representation):
|
|
184
|
+
stereoisomers_tmp = deepcopy(collapsed_representation)
|
|
185
|
+
|
|
186
|
+
stereoisomers = []
|
|
187
|
+
for isomer in stereoisomers_tmp:
|
|
188
|
+
stereoisomer = []
|
|
189
|
+
for ligand in isomer:
|
|
190
|
+
if checkdenticity(ligand) == 2:
|
|
191
|
+
if ligand.endswith('_flipped'):
|
|
192
|
+
stereoisomer.append(ligand.split('_')[0]+'_betabond')
|
|
193
|
+
stereoisomer.append(ligand.split('_')[0]+'_alphabond')
|
|
194
|
+
else:
|
|
195
|
+
stereoisomer.append(ligand.split('_')[0]+'_alphabond')
|
|
196
|
+
stereoisomer.append(ligand.split('_')[0]+'_betabond')
|
|
197
|
+
else:
|
|
198
|
+
stereoisomer.append(ligand)
|
|
199
|
+
if len(stereoisomer) == 6:
|
|
200
|
+
stereoisomers.append(stereoisomer)
|
|
201
|
+
else:
|
|
202
|
+
print(
|
|
203
|
+
'WARNING, isomers.py has detected a non-octahedral complex in stereoisomer generation.')
|
|
204
|
+
print('Stereoisomer generation only supports octahedral complexes!')
|
|
205
|
+
|
|
206
|
+
stereoisomers_final = []
|
|
207
|
+
for isomer in stereoisomers:
|
|
208
|
+
stereo = copy(isomer)
|
|
209
|
+
# flip ligand 1 and ligand 3 to generate a stereoisomer
|
|
210
|
+
stereo[0], stereo[2] = stereo[2], stereo[0]
|
|
211
|
+
# skip rotation if sites 4 and 5 are bonded
|
|
212
|
+
if not stereo[4].endswith('_alphabond') and not stereo[4].endswith('_betabond'):
|
|
213
|
+
# molSimplify can't handle a bidentate ligand at sites 1 and 4, to address this, rotate the compound 90 degrees in the equatorial plane
|
|
214
|
+
stereo[0], stereo[1], stereo[2], stereo[3] = stereo[3], stereo[0], stereo[1], stereo[2]
|
|
215
|
+
stereoisomers_final.append(isomer)
|
|
216
|
+
stereoisomers_final.append(stereo)
|
|
217
|
+
|
|
218
|
+
for stereoisomer in stereoisomers_final:
|
|
219
|
+
for counter, ligand in enumerate(stereoisomer):
|
|
220
|
+
if ligand.endswith('_alphabond'):
|
|
221
|
+
stereoisomer[counter] = ligand.split('_')[0]
|
|
222
|
+
del stereoisomer[counter+1]
|
|
223
|
+
elif ligand.endswith('_betabond'):
|
|
224
|
+
stereoisomer[counter] = ligand.split('_')[0]+'_flipped'
|
|
225
|
+
del stereoisomer[counter+1]
|
|
226
|
+
return stereoisomers_final
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# Filters to only allow bidentates in adjacent locations on the metal complex
|
|
230
|
+
#
|
|
231
|
+
# This is enforced by ensuring that bidentates are adjacent in the exoanded -lig list
|
|
232
|
+
#
|
|
233
|
+
# @param simple_geometry A lig list in expanded form.
|
|
234
|
+
# @return allowed Returns a boolean. True if the bidentates are in allowed positions.
|
|
235
|
+
def checkallowedbidentates(simple_geometry, geometry):
|
|
236
|
+
simple_geometry_tmp = copy(simple_geometry)
|
|
237
|
+
|
|
238
|
+
# Check if bidentate is in a position where there's nothing to coordinate to
|
|
239
|
+
|
|
240
|
+
if geometry in ['oct', 'pbp']:
|
|
241
|
+
if simple_geometry[-1].endswith('_alphabond') or simple_geometry[-1].endswith('_betabond'):
|
|
242
|
+
return False
|
|
243
|
+
if geometry in ['tbp']:
|
|
244
|
+
if simple_geometry[0].endswith('_alphabond') or simple_geometry[0].endswith('_betabond'):
|
|
245
|
+
return False
|
|
246
|
+
|
|
247
|
+
for counter, bonds in enumerate(simple_geometry_tmp):
|
|
248
|
+
if counter > 0:
|
|
249
|
+
bond_previous = simple_geometry_tmp[counter - 1]
|
|
250
|
+
else:
|
|
251
|
+
bond_previous = 'None'
|
|
252
|
+
if counter < (len(simple_geometry) - 1):
|
|
253
|
+
bond_next = simple_geometry_tmp[counter + 1]
|
|
254
|
+
else:
|
|
255
|
+
bond_next = 'None'
|
|
256
|
+
|
|
257
|
+
ligand_name = bonds.split('_')[0]
|
|
258
|
+
|
|
259
|
+
if bonds.endswith('_alphabond'):
|
|
260
|
+
if bond_previous.endswith('_betabond') and bond_previous.startswith(ligand_name):
|
|
261
|
+
simple_geometry_tmp[counter] = 'None'
|
|
262
|
+
simple_geometry_tmp[counter - 1] = 'None'
|
|
263
|
+
elif bond_next.endswith('_betabond') and bond_next.startswith(ligand_name):
|
|
264
|
+
simple_geometry_tmp[counter] = 'None'
|
|
265
|
+
simple_geometry_tmp[counter + 1] = 'None'
|
|
266
|
+
else:
|
|
267
|
+
return False
|
|
268
|
+
|
|
269
|
+
elif bonds.endswith('_betabond'):
|
|
270
|
+
if bond_previous.endswith('_alphabond') and bond_previous.startswith(ligand_name):
|
|
271
|
+
simple_geometry_tmp[counter] = 'None'
|
|
272
|
+
simple_geometry_tmp[counter - 1] = 'None'
|
|
273
|
+
elif bond_next.endswith('_alphabond') and bond_next.startswith(ligand_name):
|
|
274
|
+
simple_geometry_tmp[counter] = 'None'
|
|
275
|
+
simple_geometry_tmp[counter + 1] = 'None'
|
|
276
|
+
else:
|
|
277
|
+
return False
|
|
278
|
+
return True
|
|
279
|
+
# Fetches the ligand dictionary and returns the denticity of a ligand
|
|
280
|
+
# @param ligand The name of the ligand, as a string
|
|
281
|
+
# @return dent The denticity of the ligand.
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def checkdenticity(ligand):
|
|
285
|
+
ligands_dict = getlicores()
|
|
286
|
+
connecting_atoms = ligands_dict[ligand][2]
|
|
287
|
+
dent = len(connecting_atoms)
|
|
288
|
+
return dent
|
|
289
|
+
|
|
290
|
+
# Fetches the adjacency dictionary (beginning of this script) for a given geometry
|
|
291
|
+
# @param The metal complex geometry, in short form, as a string
|
|
292
|
+
# @return adjacency The adjacency matrix, if it exists. Else, returns None.
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def getadjacency(geo):
|
|
296
|
+
if geo == 'oct':
|
|
297
|
+
return oct_adjacency
|
|
298
|
+
elif geo == 'thd':
|
|
299
|
+
return thd_adjacency
|
|
300
|
+
elif geo == 'sqp':
|
|
301
|
+
return sqp_adjacency
|
|
302
|
+
elif geo == 'tbp':
|
|
303
|
+
return tbp_adjacency
|
|
304
|
+
elif geo == 'spy':
|
|
305
|
+
return spy_adjacency
|
|
306
|
+
elif geo == 'pbp':
|
|
307
|
+
return pbp_adjacency
|
|
308
|
+
else:
|
|
309
|
+
print('****************************************************')
|
|
310
|
+
print(('****** WARNING, '+geo+' not supported by -isomers! *****'))
|
|
311
|
+
print('****************************************************')
|
|
312
|
+
return None
|
|
313
|
+
|
|
314
|
+
# Searches through a list and returns the index(es) as which a value occurs
|
|
315
|
+
# @param lst The list to search through
|
|
316
|
+
# @param key The value to search for
|
|
317
|
+
# @retrun indices A list of indices at which key is found
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def searchlist(lst, key):
|
|
321
|
+
indices = []
|
|
322
|
+
for counter, element in enumerate(lst):
|
|
323
|
+
if element == key:
|
|
324
|
+
indices.append(counter)
|
|
325
|
+
return indices
|
|
326
|
+
|
|
327
|
+
# Checks if a list is in a list of lists
|
|
328
|
+
# @param geometry The list which may or may not be included
|
|
329
|
+
# @param unique_representations The list of lists to search through
|
|
330
|
+
# @return unique Returns a boolean. True if the list is NOT in the list of lists
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
def checkincluded(geometry, unique_representations):
|
|
334
|
+
unique_array = []
|
|
335
|
+
unique = False
|
|
336
|
+
if unique_representations:
|
|
337
|
+
for saved_geometry in unique_representations:
|
|
338
|
+
for counter, foo in enumerate(geometry):
|
|
339
|
+
breaker = False
|
|
340
|
+
try:
|
|
341
|
+
for counter2, spam in enumerate(geometry[counter]):
|
|
342
|
+
if saved_geometry[counter][counter2] != geometry[counter][counter2]:
|
|
343
|
+
unique_array.append(True)
|
|
344
|
+
breaker = True
|
|
345
|
+
if breaker:
|
|
346
|
+
break
|
|
347
|
+
if breaker:
|
|
348
|
+
break
|
|
349
|
+
except IndexError:
|
|
350
|
+
pass
|
|
351
|
+
|
|
352
|
+
if len(unique_array) == len(unique_representations):
|
|
353
|
+
unique = True
|
|
354
|
+
else:
|
|
355
|
+
unique = False
|
|
356
|
+
else:
|
|
357
|
+
unique = True
|
|
358
|
+
|
|
359
|
+
return unique
|
|
360
|
+
|
|
361
|
+
# Checks if a ligand is symmetric when it binds a metal
|
|
362
|
+
# @param lig The name of the ligand, as a string
|
|
363
|
+
# @return symmetric Returns a boolean. True if the ligand is symmetric
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
def checksymmetric(lig):
|
|
367
|
+
symmetric = True
|
|
368
|
+
ligand, emsg = lig_load(lig)
|
|
369
|
+
ligand.convert2mol3D()
|
|
370
|
+
ligands_dict = getlicores()
|
|
371
|
+
connecting_atoms = ligands_dict[lig][2]
|
|
372
|
+
|
|
373
|
+
# Each bonding atom will be represented as a bonding enviroment. This
|
|
374
|
+
# is a list of lists, where each individual list corresponds to atoms
|
|
375
|
+
# a certain number of bonds away from the bonding atom. The
|
|
376
|
+
# bonding_atom_environments variable holds a list of bonding environemnts,
|
|
377
|
+
# one for each bonding atom.
|
|
378
|
+
bonding_atom_environments = []
|
|
379
|
+
for atom in connecting_atoms:
|
|
380
|
+
index = int(atom)
|
|
381
|
+
coordination_spheres = [[index]]
|
|
382
|
+
used_atoms = {index}
|
|
383
|
+
|
|
384
|
+
finding_atoms = True
|
|
385
|
+
while finding_atoms:
|
|
386
|
+
current_sphere = coordination_spheres[-1]
|
|
387
|
+
length = len(coordination_spheres)
|
|
388
|
+
|
|
389
|
+
next_sphere = set([])
|
|
390
|
+
for atoms in current_sphere:
|
|
391
|
+
# get a set containing elements from both sets
|
|
392
|
+
next_sphere = next_sphere | set(ligand.getBondedAtoms(atoms))
|
|
393
|
+
|
|
394
|
+
next_sphere = next_sphere - used_atoms # subtracting sets
|
|
395
|
+
used_atoms = used_atoms | next_sphere
|
|
396
|
+
if list(next_sphere):
|
|
397
|
+
coordination_spheres.append(list(next_sphere))
|
|
398
|
+
|
|
399
|
+
if length == len(coordination_spheres):
|
|
400
|
+
finding_atoms = False
|
|
401
|
+
bonding_atom_environments.append(coordination_spheres)
|
|
402
|
+
|
|
403
|
+
bonding_atom_environments0 = deepcopy(bonding_atom_environments)
|
|
404
|
+
# Change the list of atoms from atom indices to atom names, also sort them
|
|
405
|
+
for counter1, bonding_atoms in enumerate(bonding_atom_environments0):
|
|
406
|
+
for counter2, sphere in enumerate(bonding_atoms):
|
|
407
|
+
for counter3, atom in enumerate(sphere):
|
|
408
|
+
atom = ligand.getAtom(int(atom))
|
|
409
|
+
bonding_atom_environments0[counter1][counter2][counter3] = atom.name
|
|
410
|
+
sphere.sort()
|
|
411
|
+
if bonding_atom_environments0[0] == bonding_atom_environments0[1]:
|
|
412
|
+
symmetric = True
|
|
413
|
+
else:
|
|
414
|
+
symmetric = False
|
|
415
|
+
return symmetric
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# @file jobgen.py
|
|
2
|
+
# Generates jobscripts for queueing systems
|
|
3
|
+
#
|
|
4
|
+
# Written by Tim Ioannidis for HJK Group
|
|
5
|
+
#
|
|
6
|
+
# Dpt of Chemical Engineering, MIT
|
|
7
|
+
|
|
8
|
+
# Generates jobscripts for SGE queueing system
|
|
9
|
+
# @param args Namespace of arguments
|
|
10
|
+
# @param jobdirs Subdirectories for jobscript placement
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def sgejobgen(args, jobdirs):
|
|
14
|
+
# consolidate lists
|
|
15
|
+
jd = []
|
|
16
|
+
for i, s in enumerate(jobdirs):
|
|
17
|
+
if isinstance(s, list):
|
|
18
|
+
for ss in s:
|
|
19
|
+
jd.append(ss)
|
|
20
|
+
else:
|
|
21
|
+
jd.append(s)
|
|
22
|
+
jobdirs = jd
|
|
23
|
+
cpus = '1' # initialize cpus
|
|
24
|
+
# loop over job directories
|
|
25
|
+
for job in jobdirs:
|
|
26
|
+
# form jobscript identifier
|
|
27
|
+
if args.jname:
|
|
28
|
+
jobname = args.jname+str(args.jid)
|
|
29
|
+
# jobname = jobname[:8]
|
|
30
|
+
else:
|
|
31
|
+
jobname = 'job'+str(args.jid)
|
|
32
|
+
args.jid += 1
|
|
33
|
+
output = []
|
|
34
|
+
output.append('#$ -S /bin/bash\n')
|
|
35
|
+
output.append('#$ -N %s\n' % (jobname))
|
|
36
|
+
output.append('#$ -R y\n')
|
|
37
|
+
output.append('#$ -cwd\n')
|
|
38
|
+
if not args.wtime:
|
|
39
|
+
output.append('#$ -l h_rt=168:00:00\n')
|
|
40
|
+
else:
|
|
41
|
+
wtime = args.wtime.split(':')[0]
|
|
42
|
+
wtime = wtime.split('h')[0]
|
|
43
|
+
output.append('#$ -l h_rt='+wtime+':00:00\n')
|
|
44
|
+
if not args.memory:
|
|
45
|
+
output.append('#$ -l h_rss=8G\n')
|
|
46
|
+
else:
|
|
47
|
+
mem = args.memory.split('G')[0]
|
|
48
|
+
output.append('#$ -l h_rss='+mem+'G\n')
|
|
49
|
+
if not args.queue:
|
|
50
|
+
if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
|
|
51
|
+
output.append('#$ -q gpus\n')
|
|
52
|
+
if args.gpus:
|
|
53
|
+
output.append('#$ -l gpus='+args.gpus+'\n')
|
|
54
|
+
else:
|
|
55
|
+
output.append('#$ -l gpus=1\n')
|
|
56
|
+
else:
|
|
57
|
+
output.append('#$ -q cpus\n')
|
|
58
|
+
if args.cpus:
|
|
59
|
+
output.append('#$ -l cpus='+args.cpus+'\n')
|
|
60
|
+
cpus = args.cpus
|
|
61
|
+
else:
|
|
62
|
+
output.append('#$ -l cpus=1\n')
|
|
63
|
+
else:
|
|
64
|
+
output.append('#$ -q '+args.queue+'\n')
|
|
65
|
+
if args.cpus:
|
|
66
|
+
output.append('#$ -l cpus='+args.cpus+'\n')
|
|
67
|
+
cpus = args.cpus
|
|
68
|
+
elif args.gpus:
|
|
69
|
+
output.append('#$ -l gpus='+args.gpus+'\n')
|
|
70
|
+
else:
|
|
71
|
+
output.append('#$ -l gpus=1\n')
|
|
72
|
+
if args.gpus:
|
|
73
|
+
output.append('#$ -pe smp '+args.gpus+'\n')
|
|
74
|
+
elif args.cpus:
|
|
75
|
+
output.append('#$ -pe smp '+args.cpus+'\n')
|
|
76
|
+
else:
|
|
77
|
+
output.append('#$ -pe smp 1\n')
|
|
78
|
+
if args.joption:
|
|
79
|
+
multi_option = args.joption[0].split('-')
|
|
80
|
+
if len(multi_option) > 1:
|
|
81
|
+
args.joption = []
|
|
82
|
+
for option in multi_option[1:]:
|
|
83
|
+
args.joption += ["-" + option]
|
|
84
|
+
for jopt in args.joption:
|
|
85
|
+
output.append(f'# {jopt.strip()}\n')
|
|
86
|
+
if args.modules:
|
|
87
|
+
for mod in args.modules:
|
|
88
|
+
output.append('module load '+mod+'\n')
|
|
89
|
+
if args.gpus:
|
|
90
|
+
output.append('export OMP_NUM_THREADS='+args.gpus+'\n')
|
|
91
|
+
elif args.cpus:
|
|
92
|
+
output.append('export OMP_NUM_THREADS='+args.cpus+'\n')
|
|
93
|
+
else:
|
|
94
|
+
output.append('export OMP_NUM_THREADS=1\n')
|
|
95
|
+
if args.jcommand:
|
|
96
|
+
for com in args.jcommand:
|
|
97
|
+
output.append(com+'\n')
|
|
98
|
+
if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
|
|
99
|
+
tc = False
|
|
100
|
+
if args.jcommand:
|
|
101
|
+
for jc in args.jcommand:
|
|
102
|
+
if 'terachem' in jc:
|
|
103
|
+
tc = True
|
|
104
|
+
if not tc:
|
|
105
|
+
output.append(
|
|
106
|
+
'terachem terachem_input > $SGE_O_WORKDIR/opttest.out\n')
|
|
107
|
+
output.append('\nsleep 30\n')
|
|
108
|
+
elif args.qccode and ('gam' in args.qccode.lower() or 'qch' in args.qccode.lower()):
|
|
109
|
+
gm = False
|
|
110
|
+
qch = False
|
|
111
|
+
if args.jcommand:
|
|
112
|
+
for jc in args.jcommand:
|
|
113
|
+
if 'rungms' in jc:
|
|
114
|
+
gm = True
|
|
115
|
+
if 'qchem' in jc:
|
|
116
|
+
qch = True
|
|
117
|
+
if not gm and 'gam' in args.qccode.lower():
|
|
118
|
+
output.append('rungms gam.inp '+cpus + ' > gam.out\n')
|
|
119
|
+
elif not qch and 'qch' in args.qccode.lower():
|
|
120
|
+
output.append('qchem qch.inp '+cpus + ' > qch.out\n')
|
|
121
|
+
output.append('\nsleep 30\n')
|
|
122
|
+
elif args.qccode and ('orc' in args.qccode.lower() or 'molc' in args.qccode.lower()):
|
|
123
|
+
orc = False
|
|
124
|
+
molc = False
|
|
125
|
+
if args.jcommand:
|
|
126
|
+
for jc in args.jcommand:
|
|
127
|
+
if 'orca' in jc:
|
|
128
|
+
orc = True
|
|
129
|
+
if 'molcas' in jc:
|
|
130
|
+
molc = True
|
|
131
|
+
if not orc and 'orca' in args.qccode.lower():
|
|
132
|
+
output.append('orca orca.in > orca.out\n')
|
|
133
|
+
elif not molc and 'molc' in args.qccode.lower():
|
|
134
|
+
output.append('pymolcas molcas.input -f\n')
|
|
135
|
+
output.append('\nsleep 30\n')
|
|
136
|
+
else:
|
|
137
|
+
print(
|
|
138
|
+
'Not supported QC code requested. Please input execution command manually')
|
|
139
|
+
with open(job+'/'+'jobscript', 'w') as f:
|
|
140
|
+
f.writelines(output)
|
|
141
|
+
|
|
142
|
+
# Generates jobscripts for SLURM queueing system
|
|
143
|
+
# @param args Namespace of arguments
|
|
144
|
+
# @param jobdirs Subdirectories for jobscript placement
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def slurmjobgen(args, jobdirs):
|
|
148
|
+
# consolidate lists
|
|
149
|
+
jd = []
|
|
150
|
+
for i, s in enumerate(jobdirs):
|
|
151
|
+
if isinstance(s, list):
|
|
152
|
+
for ss in s:
|
|
153
|
+
jd.append(ss)
|
|
154
|
+
else:
|
|
155
|
+
jd.append(s)
|
|
156
|
+
jobdirs = jd
|
|
157
|
+
cpus = '1' # initialize cpus
|
|
158
|
+
# loop over job directories
|
|
159
|
+
for job in jobdirs:
|
|
160
|
+
# form jobscript identifier
|
|
161
|
+
if args.jname:
|
|
162
|
+
jobname = args.jname+str(args.jid)
|
|
163
|
+
jobname = jobname[:8]
|
|
164
|
+
else:
|
|
165
|
+
jobname = 'job'+str(args.jid)
|
|
166
|
+
args.jid += 1
|
|
167
|
+
output = []
|
|
168
|
+
output.append('#!/bin/bash\n')
|
|
169
|
+
output.append('#SBATCH --job-name=%s\n' % (jobname))
|
|
170
|
+
output.append('#SBATCH --output=batch.log\n')
|
|
171
|
+
output.append('#SBATCH --export=ALL\n')
|
|
172
|
+
if not args.wtime:
|
|
173
|
+
output.append('#SBATCH -t 168:00:00\n')
|
|
174
|
+
else:
|
|
175
|
+
wtime = args.wtime.split(':')[0]
|
|
176
|
+
wtime = wtime.split('h')[0]
|
|
177
|
+
output.append('#SBATCH -t '+wtime+':00:00\n')
|
|
178
|
+
if not args.memory:
|
|
179
|
+
output.append('#SBATCH --mem==8G\n')
|
|
180
|
+
else:
|
|
181
|
+
mem = args.memory.split('G')[0]
|
|
182
|
+
output.append('#SBATCH --mem='+mem+'G\n')
|
|
183
|
+
if not args.queue:
|
|
184
|
+
if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
|
|
185
|
+
output.append('#SBATCH --partition=gpus\n')
|
|
186
|
+
else:
|
|
187
|
+
output.append('#SBATCH --partition=cpus\n')
|
|
188
|
+
else:
|
|
189
|
+
output.append('#SBATCH --partition='+args.queue+'\n')
|
|
190
|
+
nod = False
|
|
191
|
+
nnod = False
|
|
192
|
+
if args.joption:
|
|
193
|
+
for jopt in args.joption:
|
|
194
|
+
output.append('#SBATCH '+jopt+'\n')
|
|
195
|
+
if 'nodes' in jopt:
|
|
196
|
+
nod = True
|
|
197
|
+
if 'ntasks' in jopt:
|
|
198
|
+
nnod = True
|
|
199
|
+
if not nod:
|
|
200
|
+
output.append('#SBATCH --nodes=1\n')
|
|
201
|
+
if not nnod:
|
|
202
|
+
output.append('#SBATCH --ntasks-per-node=1\n')
|
|
203
|
+
if args.modules:
|
|
204
|
+
for mod in args.modules:
|
|
205
|
+
output.append('module load '+mod+'\n')
|
|
206
|
+
if args.jcommand:
|
|
207
|
+
for com in args.jcommand:
|
|
208
|
+
output.append(com+'\n')
|
|
209
|
+
if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
|
|
210
|
+
tc = False
|
|
211
|
+
if args.jcommand:
|
|
212
|
+
for jc in args.jcommand:
|
|
213
|
+
if 'terachem' in jc:
|
|
214
|
+
tc = True
|
|
215
|
+
if not tc:
|
|
216
|
+
output.append('terachem terachem_input > tc.out\n')
|
|
217
|
+
elif args.qccode and ('gam' in args.qccode.lower() or 'qch' in args.qccode.lower()):
|
|
218
|
+
gm = False
|
|
219
|
+
qch = False
|
|
220
|
+
if args.jcommand:
|
|
221
|
+
for jc in args.jcommand:
|
|
222
|
+
if 'rungms' in jc:
|
|
223
|
+
gm = True
|
|
224
|
+
if 'qchem' in jc:
|
|
225
|
+
qch = True
|
|
226
|
+
if not gm and 'gam' in args.qccode.lower():
|
|
227
|
+
output.append('rungms gam.inp '+cpus + ' > gam.out\n')
|
|
228
|
+
elif not qch and 'qch' in args.qccode.lower():
|
|
229
|
+
output.append('qchem qch.inp '+cpus + ' > qch.out\n')
|
|
230
|
+
elif args.qccode and ('orc' in args.qccode.lower() or 'molc' in args.qccode.lower()):
|
|
231
|
+
orc = False
|
|
232
|
+
molc = False
|
|
233
|
+
if args.jcommand:
|
|
234
|
+
for jc in args.jcommand:
|
|
235
|
+
if 'orca' in jc:
|
|
236
|
+
orc = True
|
|
237
|
+
if 'molcas' in jc:
|
|
238
|
+
molc = True
|
|
239
|
+
if not orc and 'orca' in args.qccode.lower():
|
|
240
|
+
output.append('orca orca.in > orca.out\n')
|
|
241
|
+
elif not molc and 'molc' in args.qccode.lower():
|
|
242
|
+
output.append('pymolcas molcas.input -f\n')
|
|
243
|
+
else:
|
|
244
|
+
print(
|
|
245
|
+
'No supported QC code requested. Please input execution command manually')
|
|
246
|
+
with open(job+'/'+'jobscript', 'w') as f:
|
|
247
|
+
f.writelines(output)
|