Copy disabled (too large)
Download .txt
Showing preview only (54,184K chars total). Download the full file to get everything.
Repository: hjkgrp/molSimplify
Branch: main
Commit: b112cd13d2fb
Files: 1482
Total size: 79.8 MB
Directory structure:
gitextract_2_8gcl6l/
├── .flake8
├── .github/
│ ├── codecov.yml
│ ├── codeql-config.yml
│ └── workflows/
│ ├── build.yaml
│ ├── codeql.yml
│ ├── pytest.yaml
│ └── python-linter.yaml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── LICENSE
├── MLmodel-reference.md
├── README.md
├── benchmark_distance.py
├── devtools/
│ └── conda-envs/
│ ├── mols.yml
│ └── mols_minimal.yml
├── docs/
│ ├── Makefile
│ ├── make.bat
│ ├── scaling.csv
│ └── source/
│ ├── Citation.rst
│ ├── Classes.rst
│ ├── Informatics.rst
│ ├── Installation.rst
│ ├── Scripts.rst
│ ├── conf.py
│ ├── index.rst
│ └── tutorials/
│ └── development.rst
├── examples/
│ └── example-1.in
├── molSimplify/
│ ├── .gitignore
│ ├── Bind/
│ │ ├── bicarbonate.mol
│ │ ├── bind.dict
│ │ ├── bisulfate.mol
│ │ ├── bisulfite.mol
│ │ ├── carbonmonoxide.mol
│ │ ├── dihydrogenphosphate.mol
│ │ ├── dihydrogenphosphite.mol
│ │ ├── formate.mol
│ │ ├── nitrate.mol
│ │ ├── oxalate.mol
│ │ ├── oxygen.mol
│ │ ├── perchlorate.mol
│ │ ├── test.smi.smi
│ │ └── water.mol
│ ├── Classes/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── atom3D.py
│ │ ├── dft_obs.py
│ │ ├── globalvars.py
│ │ ├── helpers.py
│ │ ├── ligand.py
│ │ ├── mol2D.py
│ │ ├── mol3D.py
│ │ ├── monomer3D.py
│ │ ├── partialcharges.py
│ │ ├── protein3D.py
│ │ ├── rundiag.py
│ │ └── voxelgrid.py
│ ├── Cores/
│ │ ├── Coporphyrin.mol
│ │ ├── Crporphyrin.mol
│ │ ├── Cuporphyrin.mol
│ │ ├── Fe2O2.xyz
│ │ ├── Feporphyrin.mol
│ │ ├── Mnporphyrin.mol
│ │ ├── N2OTS.xyz
│ │ ├── Niporphyrin.mol
│ │ ├── Scporphyrin.mol
│ │ ├── Tiporphyrin.mol
│ │ ├── Vporphyrin.mol
│ │ ├── Znporphyrin.mol
│ │ ├── cores.dict
│ │ ├── cr4nh3o.xyz
│ │ ├── fen4py.xyz
│ │ ├── fen4pyO.xyz
│ │ ├── fenh3O.xyz
│ │ ├── ferrcore.xyz
│ │ ├── ferrocene.mol
│ │ ├── mn3nh3o.xyz
│ │ ├── mn5nh3o.xyz
│ │ └── zncat.xyz
│ ├── Data/
│ │ ├── .tcdefinput.inp
│ │ └── coordinations.dict
│ ├── Informatics/
│ │ ├── FeatureSetVisualization.ipynb
│ │ ├── HFXsensitivity/
│ │ │ ├── __init__.py
│ │ │ ├── measure_HFX_sensitivity_oxo_hat_reb_rel.py
│ │ │ └── measure_HFX_stable.py
│ │ ├── MOF/
│ │ │ ├── MOF_RAC_example.ipynb
│ │ │ ├── MOF_descriptors.py
│ │ │ ├── MOF_fragment_example.ipynb
│ │ │ ├── MOF_functionalizer.py
│ │ │ ├── MOF_functionalizer_v2.py
│ │ │ ├── PBC_functions.py
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── atomic.py
│ │ │ ├── cluster_extraction.py
│ │ │ ├── fragment_MOFs_for_pormake.py
│ │ │ ├── functional_group_dictionary.pkl
│ │ │ ├── linker_rotation.py
│ │ │ └── monofunctionalized_BDC/
│ │ │ ├── CO2H.xyz
│ │ │ ├── OCF3.xyz
│ │ │ ├── OCH3.xyz
│ │ │ ├── README
│ │ │ ├── SO3H.xyz
│ │ │ ├── example_terachem_input.in
│ │ │ └── index_information.py
│ │ ├── Mol2Parser.py
│ │ ├── RACassemble.py
│ │ ├── __init__.py
│ │ ├── active_learning/
│ │ │ ├── __init__.py
│ │ │ └── expected_improvement.py
│ │ ├── autocorrelation.py
│ │ ├── coulomb_analyze.py
│ │ ├── decoration_manager.py
│ │ ├── geo_analyze.py
│ │ ├── geometrics.py
│ │ ├── geometrics_csd.json
│ │ ├── graph_analyze.py
│ │ ├── graph_racs.py
│ │ ├── jupyter_vis.py
│ │ ├── lacRACAssemble.py
│ │ ├── misc_descriptors.py
│ │ ├── organic_fingerprints.py
│ │ ├── partialcharges.py
│ │ ├── protein/
│ │ │ ├── activesite.py
│ │ │ └── pymol_add_hs.py
│ │ ├── py3Dmol_visualization.ipynb
│ │ └── rac155_geo.py
│ ├── Ligands/
│ │ ├── .gitignore
│ │ ├── 12crown4.mol
│ │ ├── Antipyrine.mol
│ │ ├── BPAbipy.mol
│ │ ├── Hpyrrole.mol
│ │ ├── PCy3.mol
│ │ ├── PPh3.mol
│ │ ├── Propyphenazone.mol
│ │ ├── README
│ │ ├── acac.mol
│ │ ├── acacen.mol
│ │ ├── acetate.smi
│ │ ├── aceticacidbipyridine.mol
│ │ ├── acetonitrile.mol
│ │ ├── alanine.mol
│ │ ├── alphabetizer.py
│ │ ├── amine.mol
│ │ ├── ammonia.mol
│ │ ├── arginine.mol
│ │ ├── asparagine.mol
│ │ ├── aspartic_acid.mol
│ │ ├── azide.mol
│ │ ├── benzene.mol
│ │ ├── benzene_pi.mol
│ │ ├── benzenedithiol.mol
│ │ ├── benzenethiol.mol
│ │ ├── benzylisocy.mol
│ │ ├── bidiazine.mol
│ │ ├── bidiazole.mol
│ │ ├── bifuran.mol
│ │ ├── bihydrodiazine.mol
│ │ ├── bihydrodiazole.mol
│ │ ├── bihydrooxazine.mol
│ │ ├── bihydrooxazole.mol
│ │ ├── bihydrothiazine.mol
│ │ ├── bihydrothiazole.mol
│ │ ├── biimidazole.mol
│ │ ├── bioxazole.mol
│ │ ├── bipy.mol
│ │ ├── bipyrimidine.mol
│ │ ├── bipyrrole.mol
│ │ ├── bisnapthyridylpyridine.mol
│ │ ├── bithiazole.mol
│ │ ├── bromide.mol
│ │ ├── bromide.smi
│ │ ├── c2.mol
│ │ ├── caprolactone.mol
│ │ ├── carbonyl.mol
│ │ ├── carboxyl.mol
│ │ ├── cat.mol
│ │ ├── chloride.mol
│ │ ├── chloride.smi
│ │ ├── chloropyridine.mol
│ │ ├── co2.mol
│ │ ├── corrolazine.mol
│ │ ├── cs.mol
│ │ ├── cyanide.mol
│ │ ├── cyanoaceticporphyrin.mol
│ │ ├── cyanopyridine.mol
│ │ ├── cyclam.mol
│ │ ├── cyclen.mol
│ │ ├── cyclopentadienyl.mol
│ │ ├── cysteine.mol
│ │ ├── diaminomethyl.mol
│ │ ├── diazine.mol
│ │ ├── diazole.mol
│ │ ├── dicyanamide.mol
│ │ ├── dihydrofuran.mol
│ │ ├── dmf.mol
│ │ ├── dmi.mol
│ │ ├── dmpe.mol
│ │ ├── dpmu.mol
│ │ ├── dppe.mol
│ │ ├── edta.mol
│ │ ├── en.mol
│ │ ├── ethanethiol.mol
│ │ ├── ethanolamine.mol
│ │ ├── ethbipy.mol
│ │ ├── ethyl.mol
│ │ ├── ethylamine.mol
│ │ ├── ethylene.mol
│ │ ├── ethylesteracac.mol
│ │ ├── fluoride.mol
│ │ ├── fluoride.smi
│ │ ├── formaldehyde.mol
│ │ ├── furan.mol
│ │ ├── gitignore
│ │ ├── glutamic_acid.mol
│ │ ├── glutamine.mol
│ │ ├── glycinate.mol
│ │ ├── glycine.mol
│ │ ├── h2s.mol
│ │ ├── helium.mol
│ │ ├── histidine.mol
│ │ ├── hmpa.mol
│ │ ├── hs-.mol
│ │ ├── hydride.mol
│ │ ├── hydrocyanide.mol
│ │ ├── hydrodiazine.mol
│ │ ├── hydrodiazole.mol
│ │ ├── hydrogensulfide.mol
│ │ ├── hydroisocyanide.mol
│ │ ├── hydrooxazine.mol
│ │ ├── hydrooxazole.mol
│ │ ├── hydrothiazine.mol
│ │ ├── hydrothiazole.mol
│ │ ├── hydroxyl.mol
│ │ ├── imidazole.mol
│ │ ├── imidazolidinone.mol
│ │ ├── imine.mol
│ │ ├── iminodiacetic.mol
│ │ ├── iodide.mol
│ │ ├── isoleucine.mol
│ │ ├── isothiocyanate.mol
│ │ ├── leucine.mol
│ │ ├── lysine.mol
│ │ ├── mebenzenedithiol.mol
│ │ ├── mebipy.mol
│ │ ├── mecat.mol
│ │ ├── methanal.mol
│ │ ├── methanethiol.mol
│ │ ├── methanol.mol
│ │ ├── methionine.mol
│ │ ├── methyl.mol
│ │ ├── methylamine.mol
│ │ ├── methylisocy.mol
│ │ ├── methylpyridine.mol
│ │ ├── n2.mol
│ │ ├── nch.mol
│ │ ├── nco-.mol
│ │ ├── nethanolamine.mol
│ │ ├── nitrate.mol
│ │ ├── nitrite.mol
│ │ ├── nitro.mol
│ │ ├── nitrobipy.mol
│ │ ├── nitroso.mol
│ │ ├── nme3.mol
│ │ ├── no-.mol
│ │ ├── no2-.mol
│ │ ├── noxygen.mol
│ │ ├── ns-.mol
│ │ ├── o2-.mol
│ │ ├── och2.mol
│ │ ├── oethanolamine.mol
│ │ ├── ome2.mol
│ │ ├── oxalate.mol
│ │ ├── oxalate.smi
│ │ ├── oxygen.mol
│ │ ├── pentacyanocyclopentadienide.mol
│ │ ├── ph2-.mol
│ │ ├── ph3.mol
│ │ ├── phen.mol
│ │ ├── phenacac.mol
│ │ ├── phenalalanine.mol
│ │ ├── phendione.mol
│ │ ├── phenphen.mol
│ │ ├── phenylbenzoxazole.mol
│ │ ├── phenylcyc.mol
│ │ ├── phenylenediamine.mol
│ │ ├── phenylisocy.mol
│ │ ├── phosacidbipy.mol
│ │ ├── phosphine.mol
│ │ ├── phosphorine.mol
│ │ ├── phthalocyanine.mol
│ │ ├── pme3o.mol
│ │ ├── porphyrin.mol
│ │ ├── pph3o.mol
│ │ ├── proline.mol
│ │ ├── propdiol.mol
│ │ ├── propylene.mol
│ │ ├── pyridine.mol
│ │ ├── pyrimidone.mol
│ │ ├── pyrrole.mol
│ │ ├── quinoxalinedithiol.mol
│ │ ├── s2-.mol
│ │ ├── salen.mol
│ │ ├── salphen.mol
│ │ ├── serine.mol
│ │ ├── simple_ligands.dict
│ │ ├── sulfacidbipy.mol
│ │ ├── tbucat.mol
│ │ ├── tbuphisocy.mol
│ │ ├── tbutylcyclen.mol
│ │ ├── tbutylisocy.mol
│ │ ├── tbutylthiol.mol
│ │ ├── tcnoet.mol
│ │ ├── tcnoetOH.mol
│ │ ├── terpy.mol
│ │ ├── tetrahydrofuran.mol
│ │ ├── thiane.mol
│ │ ├── thiazole.mol
│ │ ├── thiocyanate.mol
│ │ ├── thiol.mol
│ │ ├── thiophene.mol
│ │ ├── thiopyridine.mol
│ │ ├── threonine.mol
│ │ ├── tpp.mol
│ │ ├── tricyanomethyl.mol
│ │ ├── trifluoromethyl.mol
│ │ ├── tryptophan.mol
│ │ ├── tyrosine.mol
│ │ ├── uthiol.mol
│ │ ├── uthiolme2.mol
│ │ ├── valine.mol
│ │ ├── water.mol
│ │ └── x.mol
│ ├── README.md
│ ├── Scripts/
│ │ ├── .gitignore
│ │ ├── __init__.py
│ │ ├── addtodb.py
│ │ ├── align.py
│ │ ├── cellbuilder.py
│ │ ├── cellbuilder_tools.py
│ │ ├── chains.py
│ │ ├── convert_2to3.py
│ │ ├── dbinteract.py
│ │ ├── distgeom.py
│ │ ├── enhanced_structgen.py
│ │ ├── enhanced_structgen_functionality.py
│ │ ├── findcorrelations.py
│ │ ├── generator.py
│ │ ├── geometry.py
│ │ ├── inparse.py
│ │ ├── io.py
│ │ ├── isomers.py
│ │ ├── jobgen.py
│ │ ├── krr_prep.py
│ │ ├── molSimplify_io.py
│ │ ├── namegen.py
│ │ ├── nn_prep.py
│ │ ├── nx_helpers.py
│ │ ├── oct_check_mols.py
│ │ ├── periodic_QE.py
│ │ ├── postmold.py
│ │ ├── postmwfn.py
│ │ ├── postparse.py
│ │ ├── postproc.py
│ │ ├── qcgen.py
│ │ ├── rmsd.py
│ │ ├── rungen.py
│ │ ├── structgen.py
│ │ ├── tf_nn_prep.py
│ │ ├── tsgen.py
│ │ └── uq_calibration.py
│ ├── Substrates/
│ │ ├── 1-4-dimethyl-1-2-3-triazole.xyz
│ │ ├── BCM_opt.xyz
│ │ ├── DHA.xyz
│ │ ├── N-quinolinylbutyramidate.xyz
│ │ ├── N2.xyz
│ │ ├── acetaldehyde.xyz
│ │ ├── acetylene.xyz
│ │ ├── benzene.mol
│ │ ├── benzene.xyz
│ │ ├── biphenyl.xyz
│ │ ├── bromobenzene.xyz
│ │ ├── cumene.xyz
│ │ ├── cyclohexene.xyz
│ │ ├── diphenylmethane.xyz
│ │ ├── estrogen.xyz
│ │ ├── ethane.xyz
│ │ ├── ethylene.xyz
│ │ ├── fluorene.xyz
│ │ ├── formaldehyde.xyz
│ │ ├── formicacid.xyz
│ │ ├── iodobenzene.xyz
│ │ ├── methane.xyz
│ │ ├── methanol.xyz
│ │ ├── methylazide.xyz
│ │ ├── new.xyz
│ │ ├── propane.xyz
│ │ ├── propylene.xyz
│ │ ├── propyne.xyz
│ │ ├── substrates.dict
│ │ ├── tert-butane.xyz
│ │ ├── toluene.xyz
│ │ ├── trunc.xyz
│ │ └── xanthene.xyz
│ ├── Unitcells/
│ │ ├── anatase_tio2.cif
│ │ ├── gold.cif
│ │ └── iron.cif
│ ├── __init__.py
│ ├── __main__.py
│ ├── icons/
│ │ ├── geoms_labels/
│ │ │ └── vector/
│ │ │ ├── li.eps
│ │ │ ├── oct.eps
│ │ │ ├── pbp.eps
│ │ │ ├── spy.eps
│ │ │ ├── sqap.eps
│ │ │ ├── sqp.eps
│ │ │ ├── tbp.eps
│ │ │ ├── thd.eps
│ │ │ ├── tpl.eps
│ │ │ └── tpr.eps
│ │ └── wft2
│ ├── ml/
│ │ ├── __init__.py
│ │ ├── kernels.py
│ │ └── layers.py
│ ├── plugindefines_reference.txt
│ ├── python_krr/
│ │ ├── X_train_TS.csv
│ │ ├── __init__.py
│ │ ├── hat2_X_mean_std.csv
│ │ ├── hat2_feature_names.csv
│ │ ├── hat2_krr_model.pkl
│ │ ├── hat2_y_mean_std.csv
│ │ ├── hat_X_mean_std.csv
│ │ ├── hat_feature_names.csv
│ │ ├── hat_krr_X_train.csv
│ │ ├── hat_krr_dual_coef.csv
│ │ ├── hat_krr_model.pkl
│ │ ├── hat_y_mean_std.csv
│ │ ├── sklearn_models.py
│ │ └── y_train_TS.csv
│ ├── python_nn/
│ │ ├── .gitignore
│ │ ├── ANN.py
│ │ ├── __init__.py
│ │ ├── clf_analysis_tool.py
│ │ ├── dictionary_toolbox.py
│ │ ├── ensemble_test.py
│ │ ├── hs_center.csv
│ │ ├── hs_scale.csv
│ │ ├── ls_center.csv
│ │ ├── ls_scale.csv
│ │ ├── ms_hs_b1.csv
│ │ ├── ms_hs_b2.csv
│ │ ├── ms_hs_b3.csv
│ │ ├── ms_hs_w1.csv
│ │ ├── ms_hs_w2.csv
│ │ ├── ms_hs_w3.csv
│ │ ├── ms_ls_b1.csv
│ │ ├── ms_ls_b2.csv
│ │ ├── ms_ls_b3.csv
│ │ ├── ms_ls_w1.csv
│ │ ├── ms_ls_w2.csv
│ │ ├── ms_ls_w3.csv
│ │ ├── ms_slope_b1.csv
│ │ ├── ms_slope_b2.csv
│ │ ├── ms_slope_b3.csv
│ │ ├── ms_slope_w1.csv
│ │ ├── ms_slope_w2.csv
│ │ ├── ms_slope_w3.csv
│ │ ├── ms_split_b1.csv
│ │ ├── ms_split_b2.csv
│ │ ├── ms_split_b3.csv
│ │ ├── ms_split_w1.csv
│ │ ├── ms_split_w2.csv
│ │ ├── ms_split_w3.csv
│ │ ├── slope_center.csv
│ │ ├── slope_scale.csv
│ │ ├── split_center.csv
│ │ ├── split_scale.csv
│ │ ├── tf_ANN.py
│ │ └── train_data.csv
│ ├── sklearn_models/
│ │ ├── geo_static_clf/
│ │ │ └── geo_static_clf_model.h5
│ │ └── sc_staic_clf/
│ │ └── sc_static_clf_model.h5
│ ├── tf_nn/
│ │ ├── __init__.py
│ │ ├── geo_static_clf/
│ │ │ ├── geo_static_clf_ensemble_spectro/
│ │ │ │ ├── spectro_all_geo_0.h5
│ │ │ │ ├── spectro_all_geo_1.h5
│ │ │ │ ├── spectro_all_geo_2.h5
│ │ │ │ ├── spectro_all_geo_3.h5
│ │ │ │ ├── spectro_all_geo_4.h5
│ │ │ │ ├── spectro_all_geo_5.h5
│ │ │ │ ├── spectro_all_geo_6.h5
│ │ │ │ ├── spectro_all_geo_7.h5
│ │ │ │ ├── spectro_all_geo_8.h5
│ │ │ │ └── spectro_all_geo_9.h5
│ │ │ ├── geo_static_clf_model.h5
│ │ │ ├── geo_static_clf_train_name.csv
│ │ │ ├── geo_static_clf_train_x.csv
│ │ │ ├── geo_static_clf_train_y.csv
│ │ │ └── geo_static_clf_vars.csv
│ │ ├── geos/
│ │ │ ├── hs_ii_bl_x.csv
│ │ │ ├── hs_ii_bl_y.csv
│ │ │ ├── hs_ii_model.h5
│ │ │ ├── hs_ii_model.json
│ │ │ ├── hs_ii_vars.csv
│ │ │ ├── hs_iii_bl_x.csv
│ │ │ ├── hs_iii_bl_y.csv
│ │ │ ├── hs_iii_model.h5
│ │ │ ├── hs_iii_model.json
│ │ │ ├── hs_iii_vars.csv
│ │ │ ├── ls_ii_bl_x.csv
│ │ │ ├── ls_ii_bl_y.csv
│ │ │ ├── ls_ii_model.h5
│ │ │ ├── ls_ii_model.json
│ │ │ ├── ls_ii_vars.csv
│ │ │ ├── ls_iii_bl_x.csv
│ │ │ ├── ls_iii_bl_y.csv
│ │ │ ├── ls_iii_model.h5
│ │ │ ├── ls_iii_model.json
│ │ │ └── ls_iii_vars.csv
│ │ ├── homolumo/
│ │ │ ├── gap_model.h5
│ │ │ ├── gap_model.json
│ │ │ ├── gap_test_names.csv
│ │ │ ├── gap_test_x.csv
│ │ │ ├── gap_test_y.csv
│ │ │ ├── gap_train_names.csv
│ │ │ ├── gap_train_x.csv
│ │ │ ├── gap_train_y.csv
│ │ │ ├── gap_vars.csv
│ │ │ ├── homo_model.h5
│ │ │ ├── homo_model.json
│ │ │ ├── homo_test_names.csv
│ │ │ ├── homo_test_x.csv
│ │ │ ├── homo_test_y.csv
│ │ │ ├── homo_train_names.csv
│ │ │ ├── homo_train_x.csv
│ │ │ ├── homo_train_y.csv
│ │ │ └── homo_vars.csv
│ │ ├── oxoandhomo/
│ │ │ ├── homo_empty_info.json
│ │ │ ├── homo_empty_model.h5
│ │ │ ├── homo_empty_model.json
│ │ │ ├── homo_empty_nocharge/
│ │ │ │ ├── homo_empty_info.json
│ │ │ │ ├── homo_empty_model.h5
│ │ │ │ ├── homo_empty_model.json
│ │ │ │ ├── homo_empty_test_names.csv
│ │ │ │ ├── homo_empty_test_x.csv
│ │ │ │ ├── homo_empty_test_y.csv
│ │ │ │ ├── homo_empty_train_names.csv
│ │ │ │ ├── homo_empty_train_x.csv
│ │ │ │ ├── homo_empty_train_y.csv
│ │ │ │ ├── homo_empty_val_names.csv
│ │ │ │ ├── homo_empty_val_x.csv
│ │ │ │ ├── homo_empty_val_y.csv
│ │ │ │ └── homo_empty_vars.csv
│ │ │ ├── homo_empty_test_names.csv
│ │ │ ├── homo_empty_test_x.csv
│ │ │ ├── homo_empty_test_y.csv
│ │ │ ├── homo_empty_train_names.csv
│ │ │ ├── homo_empty_train_x.csv
│ │ │ ├── homo_empty_train_y.csv
│ │ │ ├── homo_empty_val_names.csv
│ │ │ ├── homo_empty_val_x.csv
│ │ │ ├── homo_empty_val_y.csv
│ │ │ ├── homo_empty_vars.csv
│ │ │ ├── oxo20_info.json
│ │ │ ├── oxo20_model.h5
│ │ │ ├── oxo20_model.json
│ │ │ ├── oxo20_test_names.csv
│ │ │ ├── oxo20_test_x.csv
│ │ │ ├── oxo20_test_y.csv
│ │ │ ├── oxo20_train_names.csv
│ │ │ ├── oxo20_train_x.csv
│ │ │ ├── oxo20_train_y.csv
│ │ │ ├── oxo20_val_names.csv
│ │ │ ├── oxo20_val_x.csv
│ │ │ ├── oxo20_val_y.csv
│ │ │ └── oxo20_vars.csv
│ │ ├── oxocatalysis/
│ │ │ ├── hat_model.h5
│ │ │ ├── hat_model.json
│ │ │ ├── hat_test_names.csv
│ │ │ ├── hat_test_x.csv
│ │ │ ├── hat_test_y.csv
│ │ │ ├── hat_train_names.csv
│ │ │ ├── hat_train_x.csv
│ │ │ ├── hat_train_y.csv
│ │ │ ├── hat_val_x.csv
│ │ │ ├── hat_val_y.csv
│ │ │ ├── hat_vars.csv
│ │ │ ├── old/
│ │ │ │ ├── oxo_model.h5
│ │ │ │ ├── oxo_model.json
│ │ │ │ ├── oxo_test_names.csv
│ │ │ │ ├── oxo_test_x.csv
│ │ │ │ ├── oxo_test_y.csv
│ │ │ │ ├── oxo_train_names.csv
│ │ │ │ ├── oxo_train_x.csv
│ │ │ │ ├── oxo_train_y.csv
│ │ │ │ └── oxo_vars.csv
│ │ │ ├── oxo_model.h5
│ │ │ ├── oxo_model.json
│ │ │ ├── oxo_test_names.csv
│ │ │ ├── oxo_test_x.csv
│ │ │ ├── oxo_test_y.csv
│ │ │ ├── oxo_train_names.csv
│ │ │ ├── oxo_train_x.csv
│ │ │ ├── oxo_train_y.csv
│ │ │ ├── oxo_val_x.csv
│ │ │ ├── oxo_val_y.csv
│ │ │ └── oxo_vars.csv
│ │ ├── rescaling_data/
│ │ │ ├── gap_mean_x.csv
│ │ │ ├── gap_mean_y.csv
│ │ │ ├── gap_var_x.csv
│ │ │ ├── gap_var_y.csv
│ │ │ ├── geo_static_clf_mean_x.csv
│ │ │ ├── geo_static_clf_mean_y.csv
│ │ │ ├── geo_static_clf_var_x.csv
│ │ │ ├── geo_static_clf_var_y.csv
│ │ │ ├── hat_mean_x.csv
│ │ │ ├── hat_mean_y.csv
│ │ │ ├── hat_var_x.csv
│ │ │ ├── hat_var_y.csv
│ │ │ ├── homo_empty_mean_x.csv
│ │ │ ├── homo_empty_mean_y.csv
│ │ │ ├── homo_empty_nocharge/
│ │ │ │ ├── homo_empty_mean_x.csv
│ │ │ │ ├── homo_empty_mean_y.csv
│ │ │ │ ├── homo_empty_var_x.csv
│ │ │ │ └── homo_empty_var_y.csv
│ │ │ ├── homo_empty_var_x.csv
│ │ │ ├── homo_empty_var_y.csv
│ │ │ ├── homo_mean_x.csv
│ │ │ ├── homo_mean_y.csv
│ │ │ ├── homo_var_x.csv
│ │ │ ├── homo_var_y.csv
│ │ │ ├── hs_ii_mean_x.csv
│ │ │ ├── hs_ii_mean_y.csv
│ │ │ ├── hs_ii_var_x.csv
│ │ │ ├── hs_ii_var_y.csv
│ │ │ ├── hs_iii_mean_x.csv
│ │ │ ├── hs_iii_mean_y.csv
│ │ │ ├── hs_iii_var_x.csv
│ │ │ ├── hs_iii_var_y.csv
│ │ │ ├── ls_ii_mean_x.csv
│ │ │ ├── ls_ii_mean_y.csv
│ │ │ ├── ls_ii_var_x.csv
│ │ │ ├── ls_ii_var_y.csv
│ │ │ ├── ls_iii_mean_x.csv
│ │ │ ├── ls_iii_mean_y.csv
│ │ │ ├── ls_iii_var_x.csv
│ │ │ ├── ls_iii_var_y.csv
│ │ │ ├── old/
│ │ │ │ ├── oxo_mean_x.csv
│ │ │ │ ├── oxo_mean_y.csv
│ │ │ │ ├── oxo_var_x.csv
│ │ │ │ └── oxo_var_y.csv
│ │ │ ├── oxo20_mean_x.csv
│ │ │ ├── oxo20_mean_y.csv
│ │ │ ├── oxo20_var_x.csv
│ │ │ ├── oxo20_var_y.csv
│ │ │ ├── oxo_mean_x.csv
│ │ │ ├── oxo_mean_y.csv
│ │ │ ├── oxo_var_x.csv
│ │ │ ├── oxo_var_y.csv
│ │ │ ├── sc_static_clf_mean_x.csv
│ │ │ ├── sc_static_clf_mean_y.csv
│ │ │ ├── sc_static_clf_var_x.csv
│ │ │ ├── sc_static_clf_var_y.csv
│ │ │ ├── split_mean_x.csv
│ │ │ ├── split_mean_y.csv
│ │ │ ├── split_var_x.csv
│ │ │ └── split_var_y.csv
│ │ ├── sc_static_clf/
│ │ │ ├── sc_static_clf_model.h5
│ │ │ ├── sc_static_clf_train_name.csv
│ │ │ ├── sc_static_clf_train_x.csv
│ │ │ ├── sc_static_clf_train_y.csv
│ │ │ ├── sc_static_clf_vars.csv
│ │ │ └── sc_static_csl_ensemble_spectro/
│ │ │ ├── spectro_all_sc_0.h5
│ │ │ ├── spectro_all_sc_1.h5
│ │ │ ├── spectro_all_sc_2.h5
│ │ │ ├── spectro_all_sc_3.h5
│ │ │ ├── spectro_all_sc_4.h5
│ │ │ ├── spectro_all_sc_5.h5
│ │ │ ├── spectro_all_sc_6.h5
│ │ │ ├── spectro_all_sc_7.h5
│ │ │ ├── spectro_all_sc_8.h5
│ │ │ └── spectro_all_sc_9.h5
│ │ └── split/
│ │ ├── split_model.h5
│ │ ├── split_model.json
│ │ ├── split_vars.csv
│ │ ├── split_x.csv
│ │ ├── split_y.csv
│ │ └── train_names.csv
│ └── utils/
│ ├── Graph_Hash.py
│ ├── Importing_Functions.py
│ ├── LigandBreakdown.py
│ ├── __init__.py
│ ├── decorators.py
│ ├── metaclasses.py
│ ├── nx_helpers.py
│ ├── openbabel_helpers.py
│ ├── tensorflow.py
│ └── timer.py
├── pyproject.toml
├── tests/
│ ├── README.txt
│ ├── conftest.py
│ ├── examples/
│ │ ├── test_example_1.py
│ │ ├── test_example_3.py
│ │ ├── test_example_5.py
│ │ ├── test_example_7.py
│ │ ├── test_example_8.py
│ │ └── test_example_tbp.py
│ ├── helperFuncs.py
│ ├── informatics/
│ │ ├── test_MOF_descriptors.py
│ │ ├── test_MOF_functional_group_add.py
│ │ ├── test_MOF_functional_group_add_v2.py
│ │ ├── test_MOF_linker_rotation.py
│ │ ├── test_PBC_functions.py
│ │ ├── test_active_learning.py
│ │ ├── test_coulomb_analyze.py
│ │ └── test_graph_racs.py
│ ├── ml/
│ │ ├── test_kernels.py
│ │ └── test_layers.py
│ ├── test_atom3D.py
│ ├── test_autocorrelation.py
│ ├── test_basic_imports.py
│ ├── test_cli.py
│ ├── test_decoration.py
│ ├── test_distgeom.py
│ ├── test_ff_xtb.py
│ ├── test_geocheck_oct.py
│ ├── test_geocheck_one_empty.py
│ ├── test_geometry.py
│ ├── test_inparse.py
│ ├── test_io.py
│ ├── test_jobgen.py
│ ├── test_joption_pythonic.py
│ ├── test_lig_load.py
│ ├── test_ligand_assign.py
│ ├── test_ligand_assign_consistent.py
│ ├── test_ligand_class.py
│ ├── test_ligands.py
│ ├── test_mol2D.py
│ ├── test_mol3D.py
│ ├── test_molcas_caspt2.py
│ ├── test_molcas_casscf.py
│ ├── test_old_ANNs.py
│ ├── test_orca_ccsdt.py
│ ├── test_orca_dft.py
│ ├── test_qcgen.py
│ ├── test_racs.py
│ ├── test_rmsd.py
│ ├── test_structgen_functions.py
│ ├── test_tetrahedral.py
│ ├── testresources/
│ │ ├── inputs/
│ │ │ ├── cif_files/
│ │ │ │ ├── Co_MOF_with_duplicate.cif
│ │ │ │ ├── Co_MOF_with_overlap.cif
│ │ │ │ ├── Co_MOF_with_solvent.cif
│ │ │ │ ├── ETECIR_clean.cif
│ │ │ │ ├── FAVGUH_clean.cif
│ │ │ │ ├── FOKYIP_clean.cif
│ │ │ │ ├── MIL-53.cif
│ │ │ │ ├── NEXXIZ_clean.cif
│ │ │ │ ├── SETDUS_clean.cif
│ │ │ │ ├── TIRLIQ.cif
│ │ │ │ ├── UXUPEK_clean.cif
│ │ │ │ ├── UiO-66.cif
│ │ │ │ ├── UiO-67.cif
│ │ │ │ ├── VONBIK_clean.cif
│ │ │ │ ├── YAHPON.cif
│ │ │ │ ├── YICDAR_clean.cif
│ │ │ │ ├── Zn_MOF_with_duplicate.cif
│ │ │ │ ├── Zn_MOF_with_overlap.cif
│ │ │ │ ├── Zn_MOF_with_solvent.cif
│ │ │ │ ├── odac-21383.cif
│ │ │ │ ├── odac-21433.cif
│ │ │ │ ├── odac-21478.cif
│ │ │ │ ├── odac-21735.cif
│ │ │ │ ├── odac-21816.cif
│ │ │ │ └── pd_test_tutorial_2.cif
│ │ │ ├── edge_compounds/
│ │ │ │ ├── BUFLUM_comp_0.mol2
│ │ │ │ ├── BUHMID_comp_0.mol2
│ │ │ │ ├── COYXUM_comp_0.mol2
│ │ │ │ ├── COYYEX_comp_0.mol2
│ │ │ │ └── COYYIB_comp_0.mol2
│ │ │ ├── geocheck/
│ │ │ │ ├── H_transfer/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── all_flying_away/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── atom_ordering_mismatch/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── broken_ligands/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── catom_change/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── compact_bonding/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── iodide_radius/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── iodine_sulfur/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── ligand_assemble/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── ligand_bent/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── linear_broken/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── methane_trans/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── oct_comp_greedy/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── one_empty_bad/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── one_empty_good/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── rotational_group/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── switch_test/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ └── triplebond_linear_broken/
│ │ │ │ ├── init.xyz
│ │ │ │ └── opt.xyz
│ │ │ ├── geometry_type/
│ │ │ │ ├── linear.xyz
│ │ │ │ ├── octahedral.xyz
│ │ │ │ ├── pentagonal_bipyramidal.xyz
│ │ │ │ ├── pentagonal_planar.xyz
│ │ │ │ ├── pentagonal_pyramidal.xyz
│ │ │ │ ├── seesaw.xyz
│ │ │ │ ├── square_antiprismatic.xyz
│ │ │ │ ├── square_planar.xyz
│ │ │ │ ├── square_pyramidal.xyz
│ │ │ │ ├── t_shape.xyz
│ │ │ │ ├── tetrahedral.xyz
│ │ │ │ ├── tricapped_trigonal_prismatic.xyz
│ │ │ │ ├── trigonal_bipyramidal.xyz
│ │ │ │ ├── trigonal_planar.xyz
│ │ │ │ ├── trigonal_prismatic.xyz
│ │ │ │ └── trigonal_pyramidal.xyz
│ │ │ ├── hapticity_compounds/
│ │ │ │ ├── BOWROX_comp_0.mol2
│ │ │ │ ├── BOXTEQ_comp_0.mol2
│ │ │ │ ├── BOXTIU_comp_0.mol2
│ │ │ │ ├── BOZHOQ_comp_2.mol2
│ │ │ │ ├── BOZHUW_comp_2.mol2
│ │ │ │ ├── BUFLUM_comp_0.mol2
│ │ │ │ ├── BUHMID_comp_0.mol2
│ │ │ │ ├── COYXUM_comp_0.mol2
│ │ │ │ ├── COYYEX_comp_0.mol2
│ │ │ │ └── COYYIB_comp_0.mol2
│ │ │ ├── in_files/
│ │ │ │ ├── example_1/
│ │ │ │ │ ├── example_1.in
│ │ │ │ │ └── example_1_noff.in
│ │ │ │ ├── example_3/
│ │ │ │ │ ├── example_3.in
│ │ │ │ │ └── example_3_noff.in
│ │ │ │ ├── example_5/
│ │ │ │ │ ├── example_5.in
│ │ │ │ │ ├── example_5_noff.in
│ │ │ │ │ └── example_5_v3.in
│ │ │ │ ├── example_7/
│ │ │ │ │ └── example_7.in
│ │ │ │ ├── example_8/
│ │ │ │ │ └── example_8.in
│ │ │ │ ├── example_tbp/
│ │ │ │ │ └── example_tbp.in
│ │ │ │ ├── gfnff/
│ │ │ │ │ └── gfnff_NH3_BA.in
│ │ │ │ ├── molcas/
│ │ │ │ │ ├── molcas_caspt2.in
│ │ │ │ │ └── molcas_casscf.in
│ │ │ │ ├── old_ann/
│ │ │ │ │ └── old_ANN.in
│ │ │ │ ├── orca/
│ │ │ │ │ ├── orca_ccsdt.in
│ │ │ │ │ └── orca_dft.in
│ │ │ │ ├── tetrahedral/
│ │ │ │ │ ├── tetrahedral_1.in
│ │ │ │ │ └── tetrahedral_2.in
│ │ │ │ ├── tutorial_10/
│ │ │ │ │ ├── gly.mol
│ │ │ │ │ ├── tutorial_10_from_mol.in
│ │ │ │ │ ├── tutorial_10_from_smiles.in
│ │ │ │ │ └── tutorial_10_from_smiles_2.in
│ │ │ │ ├── tutorial_11/
│ │ │ │ │ └── octahedral.xyz
│ │ │ │ ├── tutorial_2/
│ │ │ │ │ └── tutorial_2.in
│ │ │ │ ├── tutorial_3/
│ │ │ │ │ └── tutorial_3.in
│ │ │ │ ├── tutorial_4/
│ │ │ │ │ ├── chembl_33_minimal.sdf
│ │ │ │ │ ├── tutorial_4_dissim.in
│ │ │ │ │ ├── tutorial_4_human.in
│ │ │ │ │ └── tutorial_4_query.in
│ │ │ │ ├── tutorial_5/
│ │ │ │ │ └── tutorial_5.in
│ │ │ │ ├── tutorial_6/
│ │ │ │ │ ├── tutorial_6.in
│ │ │ │ │ ├── tutorial_6_fepo.in
│ │ │ │ │ ├── tutorial_6_loaded_fepo.in
│ │ │ │ │ ├── tutorial_6_mno4.in
│ │ │ │ │ └── tutorial_6_stag_3co.in
│ │ │ │ ├── tutorial_7/
│ │ │ │ │ ├── tutorial_7.in
│ │ │ │ │ ├── tutorial_7_decoration.in
│ │ │ │ │ ├── tutorial_7_decoration_4lig.in
│ │ │ │ │ └── tutorial_7_decoration_multi.in
│ │ │ │ ├── tutorial_8/
│ │ │ │ │ ├── tutorial_8_part_one.in
│ │ │ │ │ └── tutorial_8_part_two.in
│ │ │ │ ├── tutorial_9/
│ │ │ │ │ ├── tutorial_9_part_one.in
│ │ │ │ │ └── tutorial_9_part_two.in
│ │ │ │ └── xtb/
│ │ │ │ ├── xtb_ANC_fail.in
│ │ │ │ ├── xtb_H2O_before.in
│ │ │ │ ├── xtb_bipy_spin5.in
│ │ │ │ └── xtb_final_opt.in
│ │ │ ├── informatics/
│ │ │ │ ├── co_acac_en.mol2
│ │ │ │ ├── co_acac_en_water_hydrogensulfide.mol2
│ │ │ │ ├── fe_carbonyl_6.mol2
│ │ │ │ └── mn_furan_water_ammonia_furan_water_ammonia.mol2
│ │ │ ├── io/
│ │ │ │ ├── ADUYUV.mol2
│ │ │ │ ├── acac.mol
│ │ │ │ ├── acac.mol2
│ │ │ │ ├── formaldehyde.mol2
│ │ │ │ ├── furan.mol
│ │ │ │ ├── furan.mol2
│ │ │ │ ├── water.mol
│ │ │ │ └── water.mol2
│ │ │ ├── ligand_assign_consistent/
│ │ │ │ ├── fe_acac_bipy_bipy.xyz
│ │ │ │ └── fe_water_ammonia_carbonyl_formaldehyde_hydrogensulfide_hydrocyanide.xyz
│ │ │ ├── ligand_class/
│ │ │ │ ├── acac_ref.mol2
│ │ │ │ └── fe_acac.mol2
│ │ │ ├── mol2_files/
│ │ │ │ ├── carbonyl.mol2
│ │ │ │ ├── fluorine.mol2
│ │ │ │ ├── phenylpyridine.mol2
│ │ │ │ └── porphine.mol2
│ │ │ ├── mol_files/
│ │ │ │ ├── caffeine.mol
│ │ │ │ ├── pdms_unit.mol
│ │ │ │ └── pdp.mol
│ │ │ ├── net_files/
│ │ │ │ ├── HKUST-1_linker.net
│ │ │ │ └── HKUST-1_sbu.net
│ │ │ ├── qcgen/
│ │ │ │ └── FeH2O6.xyz
│ │ │ ├── rmsd/
│ │ │ │ ├── BUWGOQ.xyz
│ │ │ │ ├── BUWGOQ_final.xyz
│ │ │ │ ├── BUWGOQ_final_reordered.xyz
│ │ │ │ ├── BUWGOQ_noH.xyz
│ │ │ │ ├── BUWGOQ_noH_final.xyz
│ │ │ │ ├── example_1.xyz
│ │ │ │ └── example_1_noff.xyz
│ │ │ ├── sandwich_compounds/
│ │ │ │ ├── BOWROX_comp_0.mol2
│ │ │ │ ├── BOXTEQ_comp_0.mol2
│ │ │ │ ├── BOXTIU_comp_0.mol2
│ │ │ │ ├── BOZHOQ_comp_2.mol2
│ │ │ │ └── BOZHUW_comp_2.mol2
│ │ │ └── xyz_files/
│ │ │ ├── BOWROX_comp_0.xyz
│ │ │ ├── FIrpic.xyz
│ │ │ ├── HKUST-1_linker.xyz
│ │ │ ├── HKUST-1_sbu.xyz
│ │ │ ├── UiO-66_sbu.xyz
│ │ │ ├── benzene.xyz
│ │ │ ├── bimetallic_al_complex.xyz
│ │ │ ├── caffeine.xyz
│ │ │ ├── co.xyz
│ │ │ ├── co_acac_en_water_hydrogensulfide.xyz
│ │ │ ├── cr3_f6_optimization.xyz
│ │ │ ├── cr_acac_acac_bipy.xyz
│ │ │ ├── far_co.xyz
│ │ │ ├── fe_bipy_2_bifuran.xyz
│ │ │ ├── fe_bipy_3.xyz
│ │ │ ├── fe_carbonyl_6.xyz
│ │ │ ├── fe_complex.xyz
│ │ │ ├── fe_pyr_4_furan_2.xyz
│ │ │ ├── fe_pyr_6.xyz
│ │ │ ├── fepo.xyz
│ │ │ ├── formaldehyde.xyz
│ │ │ ├── in_complex.xyz
│ │ │ ├── loaded_fepo.xyz
│ │ │ ├── mn_furan_water_ammonia_furan_water_ammonia.xyz
│ │ │ ├── mno5.xyz
│ │ │ ├── ni_porphyrin_complex.xyz
│ │ │ ├── pdms_unit.xyz
│ │ │ ├── pdp.xyz
│ │ │ ├── penicillin.xyz
│ │ │ ├── phenanthroline.xyz
│ │ │ ├── slab.xyz
│ │ │ └── taurine.xyz
│ │ └── refs/
│ │ ├── decorated_xyz/
│ │ │ └── mod_benzene.xyz
│ │ ├── example/
│ │ │ ├── example_1/
│ │ │ │ ├── example_1.report
│ │ │ │ ├── example_1.xyz
│ │ │ │ ├── example_1_noff.report
│ │ │ │ └── example_1_noff.xyz
│ │ │ ├── example_3/
│ │ │ │ ├── example_3.report
│ │ │ │ ├── example_3.xyz
│ │ │ │ ├── example_3_noff.report
│ │ │ │ └── example_3_noff.xyz
│ │ │ ├── example_5/
│ │ │ │ ├── example_5.report
│ │ │ │ ├── example_5.xyz
│ │ │ │ ├── example_5_noff.report
│ │ │ │ ├── example_5_noff.xyz
│ │ │ │ ├── example_5_v3.report
│ │ │ │ ├── example_5_v3.xyz
│ │ │ │ ├── example_5_v3_noff.report
│ │ │ │ └── example_5_v3_noff.xyz
│ │ │ ├── example_7/
│ │ │ │ ├── example_7.report
│ │ │ │ └── example_7.xyz
│ │ │ ├── example_8/
│ │ │ │ ├── example_8.report
│ │ │ │ └── example_8.xyz
│ │ │ └── example_tbp/
│ │ │ ├── example_tbp.report
│ │ │ └── example_tbp.xyz
│ │ ├── geocheck/
│ │ │ ├── H_transfer/
│ │ │ │ └── ref.json
│ │ │ ├── all_flying_away/
│ │ │ │ └── ref.json
│ │ │ ├── atom_ordering_mismatch/
│ │ │ │ └── ref.json
│ │ │ ├── broken_ligands/
│ │ │ │ └── ref.json
│ │ │ ├── catom_change/
│ │ │ │ └── ref.json
│ │ │ ├── compact_bonding/
│ │ │ │ └── ref.json
│ │ │ ├── iodide_radius/
│ │ │ │ └── ref.json
│ │ │ ├── iodine_sulfur/
│ │ │ │ └── ref.json
│ │ │ ├── ligand_assemble/
│ │ │ │ └── ref.json
│ │ │ ├── ligand_bent/
│ │ │ │ └── ref.json
│ │ │ ├── linear_broken/
│ │ │ │ └── ref.json
│ │ │ ├── methane_trans/
│ │ │ │ └── ref.json
│ │ │ ├── oct_comp_greedy/
│ │ │ │ └── ref.json
│ │ │ ├── one_empty_bad/
│ │ │ │ └── ref.json
│ │ │ ├── one_empty_good/
│ │ │ │ └── ref.json
│ │ │ ├── rotational_group/
│ │ │ │ └── ref.json
│ │ │ ├── switch_test/
│ │ │ │ └── ref.json
│ │ │ └── triplebond_linear_broken/
│ │ │ └── ref.json
│ │ ├── gfnff/
│ │ │ ├── gfnff_NH3_BA.report
│ │ │ └── gfnff_NH3_BA.xyz
│ │ ├── graph_hash/
│ │ │ ├── benzene.txt
│ │ │ ├── co.txt
│ │ │ └── cr3_f6_optimization.txt
│ │ ├── informatics/
│ │ │ ├── json/
│ │ │ │ ├── lig_racs_co_acac_en.json
│ │ │ │ ├── lig_racs_fe_carbonyl_6.json
│ │ │ │ ├── lig_racs_mn_furan_water_ammonia_furan_water_ammonia.json
│ │ │ │ ├── racs_Co_acac_en_water_hydrogensulfide.json
│ │ │ │ ├── racs_Fe_carbonyl_6.json
│ │ │ │ └── racs_Mn_furan_water_ammonia_furan_water_ammonia.json
│ │ │ └── mof/
│ │ │ ├── MOF_descriptors/
│ │ │ │ ├── ETECIR_clean/
│ │ │ │ │ ├── ETECIR_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── FAVGUH_clean/
│ │ │ │ │ ├── FAVGUH_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── FOKYIP_clean/
│ │ │ │ │ ├── FOKYIP_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── NEXXIZ_clean/
│ │ │ │ │ ├── NEXXIZ_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── SETDUS_clean/
│ │ │ │ │ ├── SETDUS_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── TIRLIQ/
│ │ │ │ │ ├── TIRLIQ.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── UXUPEK_clean/
│ │ │ │ │ ├── UXUPEK_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── VONBIK_clean/
│ │ │ │ │ ├── VONBIK_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── YAHPON/
│ │ │ │ │ ├── YAHPON.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── YICDAR_clean/
│ │ │ │ │ ├── YICDAR_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21383/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21383.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21433/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21433.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21478/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21478.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21735/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21735.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ └── odac-21816/
│ │ │ │ ├── lc_descriptors.csv
│ │ │ │ ├── linker_descriptors.csv
│ │ │ │ ├── odac-21816.json
│ │ │ │ └── sbu_descriptors.csv
│ │ │ ├── cif/
│ │ │ │ ├── Co_MOF_duplicate_fixed.cif
│ │ │ │ ├── Co_MOF_overlap_fixed.cif
│ │ │ │ ├── Co_MOF_solvent_removed.cif
│ │ │ │ ├── MIL-53_rot_45-00.cif
│ │ │ │ ├── UiO-66_rot_135-00.cif
│ │ │ │ ├── UiO-66_rot_270-00.cif
│ │ │ │ ├── UiO-66_rot_45-00.cif
│ │ │ │ ├── UiO-67_rot_45-00.cif
│ │ │ │ ├── Zn_MOF_duplicate_fixed.cif
│ │ │ │ ├── Zn_MOF_overlap_fixed.cif
│ │ │ │ ├── Zn_MOF_solvent_removed.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CN_1.cif
│ │ │ │ ├── functionalized_UiO-66_CN_2.cif
│ │ │ │ ├── functionalized_UiO-66_F_1.cif
│ │ │ │ ├── functionalized_UiO-66_F_2.cif
│ │ │ │ ├── functionalized_UiO-66_I_1.cif
│ │ │ │ ├── functionalized_UiO-66_I_2.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_2.cif
│ │ │ │ ├── functionalized_UiO-66_OH_1.cif
│ │ │ │ ├── functionalized_UiO-66_OH_2.cif
│ │ │ │ └── test_write_cif.cif
│ │ │ ├── functionalized_cifs_v2/
│ │ │ │ ├── functionalized_UiO-66_Br_1.cif
│ │ │ │ ├── functionalized_UiO-66_Br_2.cif
│ │ │ │ ├── functionalized_UiO-66_CF3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CF3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CN_1.cif
│ │ │ │ ├── functionalized_UiO-66_CN_2.cif
│ │ │ │ ├── functionalized_UiO-66_COOH_1.cif
│ │ │ │ ├── functionalized_UiO-66_COOH_2.cif
│ │ │ │ ├── functionalized_UiO-66_Cl_1.cif
│ │ │ │ ├── functionalized_UiO-66_Cl_2.cif
│ │ │ │ ├── functionalized_UiO-66_F_1.cif
│ │ │ │ ├── functionalized_UiO-66_F_2.cif
│ │ │ │ ├── functionalized_UiO-66_NH2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NH2_2.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_2.cif
│ │ │ │ ├── functionalized_UiO-66_OH_1.cif
│ │ │ │ ├── functionalized_UiO-66_OH_2.cif
│ │ │ │ ├── functionalized_UiO-66_SH_1.cif
│ │ │ │ ├── functionalized_UiO-66_SH_2.cif
│ │ │ │ ├── functionalized_UiO-66_sulfonic_1.cif
│ │ │ │ └── functionalized_UiO-66_sulfonic_2.cif
│ │ │ ├── json/
│ │ │ │ ├── FOKYIP_clean_all_atom_types.json
│ │ │ │ ├── NEXXIZ_clean_all_atom_types.json
│ │ │ │ ├── SETDUS_clean_all_atom_types.json
│ │ │ │ ├── UXUPEK_clean_all_atom_types.json
│ │ │ │ ├── VONBIK_clean_all_atom_types.json
│ │ │ │ ├── YICDAR_clean_all_atom_types.json
│ │ │ │ ├── test_findPaths.json
│ │ │ │ ├── test_get_closed_subgraph_adj_matrix.json
│ │ │ │ ├── test_get_closed_subgraph_linker_list.json
│ │ │ │ ├── test_get_closed_subgraph_linker_subgraphlist.json
│ │ │ │ ├── test_get_closed_subgraph_linkers.json
│ │ │ │ └── test_get_closed_subgraph_remove_list.json
│ │ │ ├── net/
│ │ │ │ ├── test_writeXYZandGraph.net
│ │ │ │ └── test_writeXYZandGraph.xyz
│ │ │ └── txt/
│ │ │ ├── FOKYIP_clean_adj_mat.txt
│ │ │ ├── FOKYIP_clean_cpar.txt
│ │ │ ├── FOKYIP_clean_distance_mat.txt
│ │ │ ├── FOKYIP_clean_fcoords.txt
│ │ │ ├── NEXXIZ_clean_adj_mat.txt
│ │ │ ├── NEXXIZ_clean_cpar.txt
│ │ │ ├── NEXXIZ_clean_distance_mat.txt
│ │ │ ├── NEXXIZ_clean_fcoords.txt
│ │ │ ├── SETDUS_clean_adj_mat.txt
│ │ │ ├── SETDUS_clean_cpar.txt
│ │ │ ├── SETDUS_clean_distance_mat.txt
│ │ │ ├── SETDUS_clean_fcoords.txt
│ │ │ ├── UXUPEK_clean_adj_mat.txt
│ │ │ ├── UXUPEK_clean_cpar.txt
│ │ │ ├── UXUPEK_clean_distance_mat.txt
│ │ │ ├── UXUPEK_clean_fcoords.txt
│ │ │ ├── VONBIK_clean_adj_mat.txt
│ │ │ ├── VONBIK_clean_cpar.txt
│ │ │ ├── VONBIK_clean_distance_mat.txt
│ │ │ ├── VONBIK_clean_fcoords.txt
│ │ │ ├── YICDAR_clean_adj_mat.txt
│ │ │ ├── YICDAR_clean_cpar.txt
│ │ │ ├── YICDAR_clean_distance_mat.txt
│ │ │ └── YICDAR_clean_fcoords.txt
│ │ ├── joption_pythonic_jobscript
│ │ ├── json/
│ │ │ ├── test_autocorrelation/
│ │ │ │ ├── atom_only_autocorrelation/
│ │ │ │ │ ├── 0-5-10-15_3_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── atom_only_deltametric/
│ │ │ │ │ ├── 0-5-10-15_3_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── autocorrelation/
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── construct_property_vector/
│ │ │ │ │ ├── electronegativity.json
│ │ │ │ │ ├── group_number.json
│ │ │ │ │ ├── ident.json
│ │ │ │ │ ├── nuclear_charge.json
│ │ │ │ │ ├── polarizability.json
│ │ │ │ │ ├── size.json
│ │ │ │ │ └── topology.json
│ │ │ │ ├── deltametric/
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── full_autocorrelation/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── generate_atomonly_autocorrelations/
│ │ │ │ │ ├── 0-5-10-15_3_False_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False_False.json
│ │ │ │ │ ├── 5_3_False_True_True_True.json
│ │ │ │ │ └── 5_3_True_False_False_False.json
│ │ │ │ ├── generate_atomonly_deltametrics/
│ │ │ │ │ ├── 0-5-10-15_3_False_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False_False.json
│ │ │ │ │ ├── 5_3_False_True_True_True.json
│ │ │ │ │ └── 5_3_True_False_False_False.json
│ │ │ │ ├── generate_full_complex_autocorrelations/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_1/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_2/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_3/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_1/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_2/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_3/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── get_descriptor_vector/
│ │ │ │ │ ├── 2_False_False_False_False_False_names.json
│ │ │ │ │ ├── 2_False_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_False_False_False_names.json
│ │ │ │ │ ├── 3_False_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_False_False_True_names.json
│ │ │ │ │ ├── 3_False_False_False_False_True_vals.json
│ │ │ │ │ ├── 3_False_False_True_False_False_names.json
│ │ │ │ │ ├── 3_False_False_True_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_True_True_False_names.json
│ │ │ │ │ ├── 3_False_False_True_True_False_vals.json
│ │ │ │ │ ├── 3_True_False_False_False_False_names.json
│ │ │ │ │ ├── 3_True_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_True_True_False_False_False_names.json
│ │ │ │ │ ├── 3_True_True_False_False_False_vals.json
│ │ │ │ │ ├── 3_True_True_True_True_True_names.json
│ │ │ │ │ └── 3_True_True_True_True_True_vals.json
│ │ │ │ ├── metal_only_autocorrelation_1/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_autocorrelation_2/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_autocorrelation_3/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_deltametric_1/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_deltametric_2/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ └── metal_only_deltametric_3/
│ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ └── topology_2_True_False_False.json
│ │ │ └── test_mol3D/
│ │ │ ├── assign_graph_from_net/
│ │ │ │ ├── HKUST-1_linker_graph.json
│ │ │ │ └── HKUST-1_sbu_graph.json
│ │ │ ├── convert2OBMol/
│ │ │ │ ├── caffeine_fc_False_OB_dict.json
│ │ │ │ ├── caffeine_fc_True_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_fc_False_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_fc_True_OB_dict.json
│ │ │ │ ├── taurine_fc_False_OB_dict.json
│ │ │ │ └── taurine_fc_True_OB_dict.json
│ │ │ ├── convert2OBMol2/
│ │ │ │ ├── caffeine_OB_dict.json
│ │ │ │ ├── caffeine_bo_mat.json
│ │ │ │ ├── cr3_f6_optimization_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_bo_mat.json
│ │ │ │ ├── taurine_OB_dict.json
│ │ │ │ └── taurine_bo_mat.json
│ │ │ ├── createMolecularGraph/
│ │ │ │ ├── FIrpic_oct_False_graph.json
│ │ │ │ ├── FIrpic_oct_True_graph.json
│ │ │ │ ├── caffeine_oct_False_graph.json
│ │ │ │ ├── caffeine_oct_True_graph.json
│ │ │ │ ├── fe_complex_oct_False_graph.json
│ │ │ │ └── fe_complex_oct_True_graph.json
│ │ │ ├── deleteatom/
│ │ │ │ ├── FIrpic_bo_dict_False_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_False_graph_True.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_False.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_True_graph_False.json
│ │ │ │ └── penicillin_bo_dict_True_graph_True.json
│ │ │ ├── deleteatoms/
│ │ │ │ ├── FIrpic_bo_dict_False_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_False_graph_True.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_False.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_True_graph_False.json
│ │ │ │ └── penicillin_bo_dict_True_graph_True.json
│ │ │ ├── populateBOMatrix/
│ │ │ │ ├── benzene_bo_dict_False.json
│ │ │ │ ├── benzene_bo_dict_True.json
│ │ │ │ ├── benzene_molBOMat.json
│ │ │ │ ├── caffeine_bo_dict_False.json
│ │ │ │ ├── caffeine_bo_dict_True.json
│ │ │ │ └── caffeine_molBOMat.json
│ │ │ ├── readfrommol/
│ │ │ │ ├── pdms_unit_bo_dict.json
│ │ │ │ ├── pdms_unit_bo_mat.json
│ │ │ │ ├── pdms_unit_graph.json
│ │ │ │ ├── pdp_bo_dict.json
│ │ │ │ ├── pdp_bo_mat.json
│ │ │ │ └── pdp_graph.json
│ │ │ └── readfrommol2/
│ │ │ ├── BOWROX_comp_0_bo_dict.json
│ │ │ ├── BOWROX_comp_0_bo_mat.json
│ │ │ ├── BOWROX_comp_0_graph.json
│ │ │ ├── formaldehyde_bo_dict.json
│ │ │ ├── formaldehyde_bo_mat.json
│ │ │ └── formaldehyde_graph.json
│ │ ├── molcas/
│ │ │ ├── molcas_caspt2.qcin
│ │ │ ├── molcas_caspt2.report
│ │ │ ├── molcas_caspt2.xyz
│ │ │ ├── molcas_casscf.qcin
│ │ │ ├── molcas_casscf.report
│ │ │ └── molcas_casscf.xyz
│ │ ├── old_ann/
│ │ │ ├── old_ANN.report
│ │ │ └── old_ANN.xyz
│ │ ├── orca/
│ │ │ ├── orca_ccsdt.qcin
│ │ │ ├── orca_ccsdt.report
│ │ │ ├── orca_ccsdt.xyz
│ │ │ ├── orca_dft.qcin
│ │ │ ├── orca_dft.report
│ │ │ └── orca_dft.xyz
│ │ ├── qcgen/
│ │ │ ├── gamgen/
│ │ │ │ └── FeH2O6/
│ │ │ │ └── B3LYP/
│ │ │ │ └── gam.inp
│ │ │ ├── mlpgen/
│ │ │ │ └── FeH2O6.mop
│ │ │ ├── molcgen/
│ │ │ │ └── molcas.input
│ │ │ ├── ogen/
│ │ │ │ └── orca.in
│ │ │ ├── qgen/
│ │ │ │ └── FeH2O6/
│ │ │ │ └── B3LYP/
│ │ │ │ └── qch.inp
│ │ │ └── tcgen/
│ │ │ └── terachem_input
│ │ ├── racs/
│ │ │ ├── generate_references.py
│ │ │ ├── racs_Co_acac_en_water_hydrogensulfide.pickle
│ │ │ ├── racs_Cr_acac_acac_bipy.pickle
│ │ │ ├── racs_Fe_carbonyl_6.pickle
│ │ │ └── racs_Mn_furan_water_ammonia_furan_water_ammonia.pickle
│ │ ├── structgen/
│ │ │ └── structgen_complex.xyz
│ │ ├── test_cli/
│ │ │ ├── fe_oct_2_water_6_s_5_conf_1.molinp
│ │ │ ├── fe_oct_2_water_6_s_5_conf_1.report
│ │ │ └── fe_oct_2_water_6_s_5_conf_1.xyz
│ │ ├── tetrahedral/
│ │ │ ├── tetrahedral_1_noff.report
│ │ │ ├── tetrahedral_1_noff.xyz
│ │ │ ├── tetrahedral_2_noff.report
│ │ │ └── tetrahedral_2_noff.xyz
│ │ ├── tutorial/
│ │ │ ├── tutorial_10/
│ │ │ │ ├── tutorial_10_from_mol.report
│ │ │ │ ├── tutorial_10_from_mol.xyz
│ │ │ │ ├── tutorial_10_from_smiles.report
│ │ │ │ ├── tutorial_10_from_smiles.xyz
│ │ │ │ ├── tutorial_10_from_smiles_2.report
│ │ │ │ └── tutorial_10_from_smiles_2.xyz
│ │ │ ├── tutorial_11/
│ │ │ │ └── ref.json
│ │ │ ├── tutorial_2/
│ │ │ │ └── tutorial_2.xyz
│ │ │ ├── tutorial_3/
│ │ │ │ ├── tutorial_3.report
│ │ │ │ └── tutorial_3.xyz
│ │ │ ├── tutorial_4/
│ │ │ │ ├── dissimres.smi
│ │ │ │ ├── simres.smi
│ │ │ │ └── simres_human.smi
│ │ │ ├── tutorial_5/
│ │ │ │ ├── tutorial_5.report
│ │ │ │ └── tutorial_5.xyz
│ │ │ ├── tutorial_6/
│ │ │ │ ├── tutorial_6.xyz
│ │ │ │ ├── tutorial_6_fepo.xyz
│ │ │ │ ├── tutorial_6_loaded_fepo.xyz
│ │ │ │ ├── tutorial_6_mno4.xyz
│ │ │ │ └── tutorial_6_stag_3co.xyz
│ │ │ ├── tutorial_7/
│ │ │ │ ├── tutorial_7_decoration.qcin
│ │ │ │ ├── tutorial_7_decoration.report
│ │ │ │ ├── tutorial_7_decoration.xyz
│ │ │ │ ├── tutorial_7_decoration_4lig.qcin
│ │ │ │ ├── tutorial_7_decoration_4lig.report
│ │ │ │ ├── tutorial_7_decoration_4lig.xyz
│ │ │ │ ├── tutorial_7_decoration_multi.qcin
│ │ │ │ ├── tutorial_7_decoration_multi.report
│ │ │ │ ├── tutorial_7_decoration_multi.xyz
│ │ │ │ ├── tutorial_7_s1.qcin
│ │ │ │ ├── tutorial_7_s1.report
│ │ │ │ ├── tutorial_7_s1.xyz
│ │ │ │ ├── tutorial_7_s5.qcin
│ │ │ │ ├── tutorial_7_s5.report
│ │ │ │ └── tutorial_7_s5.xyz
│ │ │ ├── tutorial_8/
│ │ │ │ ├── tutorial_8_part_one.report
│ │ │ │ ├── tutorial_8_part_one.xyz
│ │ │ │ ├── tutorial_8_part_two.report
│ │ │ │ └── tutorial_8_part_two.xyz
│ │ │ └── tutorial_9/
│ │ │ ├── tutorial_9_part_one.report
│ │ │ ├── tutorial_9_part_one.xyz
│ │ │ ├── tutorial_9_part_two.report
│ │ │ └── tutorial_9_part_two.xyz
│ │ ├── write_tests/
│ │ │ ├── writemol2_test_ignoreX_False.mol2
│ │ │ ├── writemol2_test_ignoreX_True.mol2
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_False_no_tabs_False.xyz
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_False_no_tabs_True.xyz
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_True_no_tabs_False.xyz
│ │ │ └── writexyz_test_withgraph_True_ignoreX_False_no_tabs_False.xyz
│ │ ├── xtb/
│ │ │ ├── xtb_ANC_fail.report
│ │ │ ├── xtb_ANC_fail.xyz
│ │ │ ├── xtb_H2O_before.report
│ │ │ ├── xtb_H2O_before.xyz
│ │ │ ├── xtb_bipy_spin5.report
│ │ │ ├── xtb_bipy_spin5.xyz
│ │ │ ├── xtb_final_opt.report
│ │ │ └── xtb_final_opt.xyz
│ │ └── xyz_files/
│ │ ├── CC(C)O.xyz
│ │ └── pentacyanopentadienide.xyz
│ └── tutorials/
│ ├── test_tutorial_10.py
│ ├── test_tutorial_11.py
│ ├── test_tutorial_2.py
│ ├── test_tutorial_3.py
│ ├── test_tutorial_4.py
│ ├── test_tutorial_5.py
│ ├── test_tutorial_6.py
│ ├── test_tutorial_7.py
│ ├── test_tutorial_8.py
│ ├── test_tutorial_9_part_one.py
│ └── test_tutorial_9_part_two.py
└── workflows/
└── NandyJACSAu2022/
├── GeoFreeRAC.ipynb
├── bridge_functionalizer.py
├── frag_functionalizer.py
├── fragment_classes.py
└── macrocycle_synthesis.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .flake8
================================================
[flake8]
max-complexity = 15
max-line-length = 127
================================================
FILE: .github/codecov.yml
================================================
coverage:
status:
patch:
default:
informational: true
project:
default:
informational: true
================================================
FILE: .github/codeql-config.yml
================================================
name: "My CodeQL config"
queries:
- uses: security-and-quality
================================================
FILE: .github/workflows/build.yaml
================================================
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
# This follows https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
on:
push:
tags:
- v*
jobs:
build:
name: Build distribution 📦
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
publish-to-pypi:
name: Publish Python 🐍 distribution 📦 to PyPI
if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
needs:
- build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/molSimplify
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
publish-to-testpypi:
name: Publish Python 🐍 distribution 📦 to TestPyPI
needs:
- build
runs-on: ubuntu-latest
environment:
name: testpypi
url: https://test.pypi.org/p/molSimplify
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches: [ "master", "main" ]
pull_request:
branches: [ "master", "main" ]
schedule:
- cron: "59 11 * * 6"
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ python ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql-config.yml
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
================================================
FILE: .github/workflows/pytest.yaml
================================================
name: Pytest
on:
push:
branches:
- "main"
pull_request:
branches:
- "main"
jobs:
pytest_conda:
name: Pytest (conda) on ${{ matrix.os }}, Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ["ubuntu-latest"]
python-version: ["3.8", "3.10"]
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v4
- name: Additional info about the build
run: |
uname -a
df -h
ulimit -a
# Get date for the cache key
- name: Get current time
uses: josStorer/get-current-time@v2.0.2
id: current-time
- name: Cache conda env
uses: actions/cache@v4
id: cache
env:
# Increase this value to reset cache if mols.yml has not changed
CACHE_NUMBER: 0
with:
path: ~/conda_pkgs_dir
key:
# Key contains current year and month to ensure it is updated once a month
${{ runner.os }}-py${{ matrix.python-version }}-conda-${{ steps.current-time.outputs.year }}-${{
steps.current-time.outputs.month }}-${{ hashFiles('devtools/conda-envs/mols.yml') }}-${{
env.CACHE_NUMBER }}
# More info on the whole conda setup: https://github.com/conda-incubator/setup-miniconda
- name: Setup Conda
uses: conda-incubator/setup-miniconda@v3
id: conda-setup
with:
# mamba-version: "*" # uncomment to activate mamba
python-version: ${{ matrix.python-version }}
miniforge-variant: Miniforge3
channels: conda-forge,defaults
environment-file: devtools/conda-envs/mols.yml
activate-environment: molsimp
use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly!
- name: Install package
run: |
pip install -e . --no-deps
pip install pytest-cov
conda list
- name: Run tests
run: |
pytest -v --cov=molSimplify --cov-report=xml
- name: Run doctest
# For now still excluding several subfolders and files
run: |
pytest --doctest-modules --ignore=molSimplify/Informatics/MOF --ignore=molSimplify/Informatics/protein --ignore=molSimplify/Scripts/in_b3lyp_usetc.py --ignore=molSimplify/Informatics/jupyter_vis.py --ignore=molSimplify/Informatics/macrocycle_synthesis.py --ignore=molSimplify/Informatics/organic_fingerprints.py molSimplify
- name: Upload coverage report to codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: ./coverage/reports/
env_vars: OS,PYTHON
files: ./coverage.xml
flags: unittests
name: codecov-umbrella
verbose: true
- name: Report Status
# Slack notifications only on the main repo
if: ${{job.status == 'failure' && github.event_name != 'pull_request' && github.repository == 'hjkgrp/molSimplify' }}
#uses: ravsamhq/notify-slack-action@v1
uses: 8398a7/action-slack@v3
with:
job_name: Pytest (conda) on ${{ matrix.os }}, Python ${{ matrix.python-version }}
fields: message,commit,author,workflow,job,took
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{secrets.SLACK_WEBHOOK}}
#MATRIX_CONTEXT: ${{ toJson(matrix) }} # required
pytest_pip:
name: Pytest (pip) on ${{ matrix.os }}, Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ["ubuntu-latest"]
python-version: ["3.8"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install package
run: |
pip install -e .[dev]
- name: Run pytest
run: |
pytest -v
================================================
FILE: .github/workflows/python-linter.yaml
================================================
name: Linter
on:
pull_request:
push:
branches: ["master", "main"]
jobs:
flake8:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
- name: Run flake8 for critical errors
run: |
# Fail the build for the following critical errors:
# E9** syntax, io, or indentation error
# F63* syntax error in assertion, comparison, or print
# F7** syntax error in loops or functions
# F82* undefined variables
# Currently still excluding some files in Informatics that import from rdkit!
flake8 molSimplify --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=fragment_classes.py,frag_functionalizer.py,bridge_functionalizer.py
- name: Run full flake8 linter
run: |
# Will never fail the build because of the --exit-zero flag but gives a report of the "code quality"
flake8 molSimplify --count --statistics --max-complexity 15 --max-line-length=127 --exit-zero
- name: Report Status
# Slack notifications only on the main repo
if: ${{ github.event_name != 'pull_request' && github.repository == 'hjkgrp/molSimplify' && job.status == 'failure'}}
#uses: ravsamhq/notify-slack-action@v1
uses: 8398a7/action-slack@v3
with:
fields: message,commit,author,workflow,job,took
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{secrets.SLACK_WEBHOOK}}
MATRIX_CONTEXT: ${{ toJson(matrix) }} # required
mypy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install mypy types-setuptools types-PyYAML types-requests types-tensorflow types-beautifulsoup4 pandas-stubs PyQt5-stubs
- name: Typecheck with mypy
run: |
mypy --ignore-missing-imports molSimplify
- name: Report Status
# Slack notifications only on the main repo
if: ${{ github.event_name != 'pull_request' && github.repository == 'hjkgrp/molSimplify' && job.status == 'failure'}}
#uses: ravsamhq/notify-slack-action@v1
uses: 8398a7/action-slack@v3
with:
fields: message,commit,author,workflow,job,took
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{secrets.SLACK_WEBHOOK}}
MATRIX_CONTEXT: ${{ toJson(matrix) }} # required
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
build/
dist/
.eggs
# Unit test / coverage reports
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
CLIinput.inp
files.txt
molSimplify.egg-info
setup.BACKUP
.DS_Store
molSimplify/Scripts/.DS_Store
molSimplify/Informatics/.DS_Store
molSimplify/Informatics/MOF/.DS_Store
molSimplify/Informatics/.ipynb_checkpoints
Runs/
# vscode
.vscode
================================================
FILE: .pre-commit-config.yaml
================================================
ci:
autofix_commit_msg: '[pre-commit.ci] auto fixes from pre-commit hooks'
autofix_prs: true
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
autoupdate_schedule: monthly
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/pycqa/flake8
rev: '7.3.0'
hooks:
- id: flake8
args: ['--select=E9,F63,F7,F82', '--exclude=fragment_classes.py,frag_functionalizer.py,bridge_functionalizer.py']
================================================
FILE: .readthedocs.yml
================================================
version: 2
build:
os: ubuntu-22.04
tools:
python: "3.8"
python:
install:
- method: pip
path: .
extra_requirements:
- docs
sphinx:
builder: html
fail_on_warning: true
# Path to the Sphinx configuration file.
configuration: docs/source/conf.py
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: MLmodel-reference.md
================================================
If you use the machine learning (ML) models in molSimplify to predict metal-ligand bond lengths, please cite:
```
@Article{Janet2017CS,
author = {Janet, Jon Paul and Kulik, Heather J.},
title = {Predicting electronic structure properties of transition metal complexes with neural networks",
journal = {Chem. Sci.},
year = {2017},
volume = {8},
issue = {7},
pages = {5137-5152},
url = {http://dx.doi.org/10.1039/C7SC01247K},
doi = {10.1039/C7SC01247K},
year = {2017},
}
```
If you use the machine learning (ML) models in molSimplify to predict spin spliting energies and/or redox potentials, please cite:
```
@Article{Janet2017JPCA,
author = {Janet, Jon Paul and Kulik, Heather J.},
title = {Resolving Transition Metal Chemical Space: Feature Selection for Machine Learning and Structure--Property Relationships},
journal = {The Journal of Physical Chemistry A},
volume = {121},
number = {46},
pages = {8939-8954},
issn = {1089-5639},
url = {https://doi.org/10.1021/acs.jpca.7b08750},
doi = {10.1021/acs.jpca.7b08750},
year = {2017},
}
```
If you use the machine learning (ML) models in molSimplify to predict the outcomes of your calculations, please cite:
```
@Article{Duan2019JCTC,
author = {Duan, Chenru and Janet, Jon Paul and Liu, Fang and Nandy, Aditya and Kulik, Heather J.},
title = {Learning from Failure: Predicting Electronic Structure Calculation Outcomes with Machine Learning Models},
journal = {Journal of Chemical Theory and Computation},
volume = {15},
number = {4},
pages = {2331-2345},
issn = {1549-9618},
url={https://doi.org/10.1021/acs.jctc.9b00057},
doi={10.1021/acs.jctc.9b00057},
year={2019},
}
```
If you use the machine learning (ML) models in molSimplify to predict the spin-state dependent reaction energetics, please cite:
```
@Article{Nandy2019ACSCata,
author = {Nandy, Aditya and Zhu, Jiazhou and Janet, Jon Paul and Duan, Chenru and Getman, Rachel B. and Kulik, Heather J.},
title = {Machine Learning Accelerates the Discovery of Design Rules and Exceptions in Stable Metal--Oxo Intermediate Formation},
journal = {ACS Catalysis},
volume = {9},
number = {9},
pages = {8243-8255},
url = {https://doi.org/10.1021/acscatal.9b02165},
doi = {10.1021/acscatal.9b02165},
year={2019},
}
```
================================================
FILE: README.md
================================================

[](https://github.com/hjkgrp/molSimplify/actions/workflows/pytest.yaml)
[](http://molsimplify.readthedocs.io/?badge=latest)
[](https://github.com/hjkgrp/molSimplify/actions/workflows/python-linter.yaml)
molSimplify is an open source toolkit for the automated, first-principles screening and discovery of new inorganic molecules and intermolecular complexes. molSimplify is developed by the [Kulik Group](http://hjkgrp.mit.edu) in the [Department of Chemical Engineering](http://web.mit.edu/cheme/) at [MIT](http://web.mit.edu). The software can generate a variety of coordination complexes of metals coordinated by ligands in a mono- or multi-dentate fashion. The code can build a coordination complex directly from a central atom or functionalize a more complex structure (e.g. a porphyrin or other metal-ligand complex) by including additional ligands or replacing existing ones. molSimplify also generates inter-molecular complexes for evaluating binding interactions and generating candidate reactants and intermediates for catalyst reaction mechanism screening. molSimplify also ships neural network models that can predict the [metal-ligand bond lengths](https://pubs.rsc.org/en/content/articlehtml/2017/sc/c7sc01247k), [spin-splitting energy](https://pubs.acs.org/doi/abs/10.1021/acs.jpca.7b08750), [frontier orbital energies](https://pubs.acs.org/doi/abs/10.1021/acs.iecr.8b04015), [spin-state dependent reaction energies](https://pubs.acs.org/doi/abs/10.1021/acscatal.9b02165), and [simulation outcomes](https://pubs.acs.org/doi/abs/10.1021/acs.jctc.9b00057) for octahedral transition metal complexes. See the Tutorials at the [Kulik group webpage](http://hjkgrp.mit.edu/molSimplify-tutorials) for a more complete list of jobs molSimplify can do.
## Installation
### via pip, from PyPI
Starting with version `1.7.4`, molSimplify is available on [PyPI](https://pypi.org) enabled by the [openbabel-wheel](https://pypi.org/project/openbabel-wheel/) project. It is recommended to make a new conda environment with Python 3.8, activate it, and then run the following command:
```bash
pip install molSimplify
```
### via pip, from GitHub
To obtain the latest development version or if you plan to modify the code we recommend installation from GitHub.
1. Clone molSimplify source from github and change into the directory.
```bash
git clone https://github.com/hjkgrp/molSimplify.git
cd molSimplify
```
2. Create a new conda environment and specify the desired Python version (we currently recommend 3.8). You can change the environment name `molsimp` according to your preference.
```bash
conda create --name molsimp python=3.8
```
Then activate the environment.
```bash
conda activate molsimp
```
3. Locally install the molSimplify package using pip.
```bash
pip install -e .[dev]
```
On Mac, the command to use is instead `pip install -e '.[dev]'` or `pip install -e .\[dev\]`.
4. To test your installation, you can run the command below at the root directory of molSimplify. You are good to go if all the tests are passed! Note, some test will be skipped because none of the optional dependencies are installed this way.
```bash
pytest
```
### via conda, from GitHub
The easiest way of installing molSimplify including optional dependencies such as [xtb](https://github.com/grimme-lab/xtb) is via the [Conda](https://conda.io/docs/) package management system.
1. Prerequisite: have [Anaconda](https://docs.anaconda.com/anaconda/) or [miniconda](https://docs.anaconda.com/miniconda/) installed on your system. We recommend use of the [libmamba solver](https://conda.github.io/conda-libmamba-solver/user-guide/). **For M1 Macs, please use [Miniforge](https://github.com/conda-forge/miniforge) for Mac OSX arm64.** (We do not recommend simultaneously installing Anaconda and Miniforge - only install Miniforge.)
2. Clone molSimplify source from github and change into the directory.
```bash
git clone https://github.com/hjkgrp/molSimplify.git
cd molSimplify
```
3. Create a new conda environment and specify the desired Python version (we currently recommend 3.8).
```bash
conda create --name molsimp python=3.8
```
4. Activate the conda environment you just created and update using one of the provided environment yaml files. In case you are experiencing problems using the full environment file in `devtools/conda-envs/mols.yml` **(some packages might not be available on all architectures such as M1 Macs)** try commenting the lines marked optional or switch to the minimal environment file `devtools/conda-envs/mols_minimal.yml`.
```bash
conda activate molsimp
conda env update --file devtools/conda-envs/mols.yml
```
5. Locally install the molSimplify package using pip.
```bash
pip install -e . --no-deps
```
6. To test your installation, you can run the command below at the root directory of molSimplify. You are good to go if all the tests are passed!
```bash
pytest
```
### via conda, from Anaconda
Releases of molSimplify are also available on Anaconda on the [conda-forge channel](https://anaconda.org/conda-forge/molsimplify) and the [hjkgroup channel](https://anaconda.org/hjkgroup/molsimplify).
### via docker
We also maintain an active [docker image on dockerhub](https://hub.docker.com/repository/docker/hjkgroup/molsimplify) for plug-and-play use.
For line by line instructions on an installation via docker, please visit [molSimplify installation webpage of Kulik group](http://hjkgrp.mit.edu/content/installing-molsimplify).
## Tutorials
A set of tutorials covering common use cases is available at the [Kulik group webpage](http://hjkgrp.mit.edu/molSimplify-tutorials). Note that the GUI is no longer supported, so users are encouraged to generate structures through the command line or using the Python command [startgen_pythonic](molSimplify/Scripts/generator.py).
## Documentation
Documentation for molSimplify can be found at our [readthedocs page](https://molsimplify.readthedocs.io/en/latest/).
## Citation [](http://dx.doi.org/10.1002/jcc.24437)
molSimplify is research software. If you use it for work that results in a publication, please cite the following reference:
```
@Article {molSimplify,
author = {Ioannidis, Efthymios I. and Gani, Terry Z. H. and Kulik, Heather J.},
title = {molSimplify: A Toolkit for Automating Discovery in Inorganic Chemistry},
journal = {Journal of Computational Chemistry},
volume = {37},
number = {22},
pages = {2106-2117},
issn = {1096-987X},
url = {http://doi.org/10.1002/jcc.24437},
doi = {10.1002/jcc.24437},
year = {2016},
}
@Article{Nandy2018IECR,
author = {Nandy, Aditya and Duan, Chenru and Janet, Jon Paul and Gugler, Stefan and Kulik, Heather J.},
title = {Strategies and Software for Machine Learning Accelerated Discovery in Transition Metal Chemistry},
journal = {Industrial {\&} Engineering Chemistry Research},
volume = {57},
number = {42},
pages = {13973-13986},
issn = {0888-5885},
url = {https://doi.org/10.1021/acs.iecr.8b04015},
doi = {10.1021/acs.iecr.8b04015},
year = {2018},
}
@Article{molSimplify2.0,
author = {Terrones, Gianmarco G. and St. Michel, Roland G. and Toney, Jacob W. and Ball, Akash K. and Wang, Yiran and Garrison, Aaron G. and Nandy, Aditya and Meyer, Ralf and Edholm, Freya and Oh, Changhwan and Pujet, Sebastian G. and Chu, Daniel B. K. and Muhammetgulyyev, Davut and Kulik, Heather J.},
title = {molSimplify 2.0: Improved Structure Generation for Automating Discovery in Inorganic Molecular and Reticular Chemistry},
volume = {66},
number = {5},
pages = {2753-2767},
url = {https://doi.org/10.1021/acs.jcim.5c02733},
doi = {10.1021/acs.jcim.5c02733},
year = {2026},
}
```
If you use any machine learning (ML) models in molSimplify, please cite the corresponding reference in [this ML model reference page](https://github.com/hjkgrp/molSimplify/blob/master/MLmodel-reference.md).
For additional reference information, please see [here](https://molsimplify.readthedocs.io/en/latest/Citation.html).
**Note that we have disabled developers' supports for Python 2.7 and will only release conda builds on Python 3.**
================================================
FILE: benchmark_distance.py
================================================
import time
import numpy as np
import math
from scipy.spatial.distance import pdist, cdist
def old_distance(r1, r2):
delta_v = np.array(r1) - np.array(r2)
dist = np.linalg.norm(delta_v)
return dist
def new_distance(r1, r2):
return math.dist(r1, r2)
def benchmark():
N = 500 # Number of atoms
# Generate random coordinates
coords = np.random.rand(N, 3).tolist()
print(f"Benchmarking with N={N} atoms ({N*(N-1)//2} pairs)...")
# 1. Old distance function (nested loop)
start_time = time.time()
old_distances = []
for i in range(N):
for j in range(i+1, N):
old_distances.append(old_distance(coords[i], coords[j]))
old_time = time.time() - start_time
print(f"1. Old nested loop with np.array(): {old_time:.4f} seconds")
# 2. New distance function with math.dist (nested loop)
start_time = time.time()
new_distances = []
for i in range(N):
for j in range(i+1, N):
new_distances.append(new_distance(coords[i], coords[j]))
new_time = time.time() - start_time
print(f"2. New nested loop with math.dist: {new_time:.4f} seconds ({old_time/new_time:.1f}x speedup)")
# 3. Fully vectorized with scipy pdist
start_time = time.time()
coords_array = np.array(coords) # Include array conversion overhead
vec_distances = pdist(coords_array)
vec_time = time.time() - start_time
print(f"3. Vectorized with scipy.pdist: {vec_time:.4f} seconds ({old_time/vec_time:.1f}x speedup)")
if __name__ == "__main__":
benchmark()
================================================
FILE: devtools/conda-envs/mols.yml
================================================
channels:
- conda-forge
dependencies:
- openbabel
- tensorflow-base >2.0, <2.14
- scikit-learn
- pyyaml
- pandas
- scipy
- libffi
- networkx >=2.7
- importlib_resources
- pip
- pip:
- pytest
- pytest-resource-path
### Optional
# Plotting
- matplotlib
# Database
- pymongo
# PDB interaction
- beautifulsoup4
# QM interfaces
- xtb <6.7
- libgcc <15 # Note: libgcc only available for Linux
================================================
FILE: devtools/conda-envs/mols_minimal.yml
================================================
channels:
- conda-forge
dependencies:
- openbabel
- tensorflow-base >2.0, <2.14
- scikit-learn
- pyyaml
- pandas
- scipy
- libffi
- networkx >=2.7
- importlib_resources
- pip
- pip:
- pytest
- pytest-resource-path
================================================
FILE: docs/Makefile
================================================
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
================================================
FILE: docs/make.bat
================================================
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
:end
popd
================================================
FILE: docs/scaling.csv
================================================
split_energy,[-54.19, 142.71]
slope,[-174.2, 161.58]
ls_min,[1.8146, 0.691]
hs_min,[1.8882, 0.6956]
ox,[2, 1]
alpha,[0, 0.3]
ax_charge,[-2, 2]
eq_charge,[-2, 2]
ax_dent,[1, 1]
eq_dent,[1, 3]
sum_delen,[-5.34, 12.54]
max_delen,[-0.89, 2.09]
ax_bo,[0, 3]
eq_bo,[0.0, 3]
ax_ki,[0.0, 4.29]
eq_ki,[0.0, 6.96]
================================================
FILE: docs/source/Citation.rst
================================================
Citation
========
molSimplify is research software. If you use it for work that results in a publication, please cite the following references:
Structure Generation
--------------------
::
@Article {molSimplify,
author = {Ioannidis, Efthymios I. and Gani, Terry Z. H. and Kulik, Heather J.},
title = {molSimplify: A Toolkit for Automating Discovery in Inorganic Chemistry},
journal = {Journal of Computational Chemistry},
volume = {37},
number = {22},
pages = {2106--2117},
issn = {1096-987X},
url = {http://dx.doi.org/10.1002/jcc.24437},
doi = {10.1002/jcc.24437},
year = {2016},
}
::
@Article{Nandy2018IECR,
author = {Nandy, Aditya and Duan, Chenru and Janet, Jon Paul and Gugler, Stefan and Kulik, Heather J.},
title = {Strategies and Software for Machine Learning Accelerated Discovery in Transition Metal Chemistry},
journal = {Industrial {\&} Engineering Chemistry Research},
volume = {57},
number = {42},
pages = {13973-13986},
issn = {0888-5885},
url = {https://doi.org/10.1021/acs.iecr.8b04015},
doi = {10.1021/acs.iecr.8b04015},
year = {2018},
}
::
@Article{molSimplify2.0,
author = {Terrones, Gianmarco G. and St. Michel, Roland G. and Toney, Jacob W. and Ball, Akash K. and Wang, Yiran and Garrison, Aaron G. and Nandy, Aditya and Meyer, Ralf and Edholm, Freya and Oh, Changhwan and Pujet, Sebastian G. and Chu, Daniel B. K. and Muhammetgulyyev, Davut and Kulik, Heather J.},
title = {molSimplify 2.0: Improved Structure Generation for Automating Discovery in Inorganic Molecular and Reticular Chemistry},
volume = {66},
number = {5},
pages = {2753-2767},
url = {https://doi.org/10.1021/acs.jcim.5c02733},
doi = {10.1021/acs.jcim.5c02733},
year = {2026},
}
Models and Representations
--------------------------
If you use any machine learning (ML) models in molSimplify that results in a publication, please cite the corresponding references.
If you use the machine learning (ML) models in molSimplify to predict metal-ligand bond lengths, please cite:
::
@Article{Janet2017CS,
author = {Janet, Jon Paul and Kulik, Heather J.},
title = {Predicting Electronic Structure Properties of Transition Metal Complexes with Neural Networks",
journal = {Chem. Sci.},
year = {2017},
volume = {8},
issue = {7},
pages = {5137-5152},
url = {http://dx.doi.org/10.1039/C7SC01247K},
doi = {10.1039/C7SC01247K},
year = {2017},
}
If you use the machine learning (ML) models in molSimplify to predict spin splitting energies and/or redox potentials, or RAC descriptors, please cite:
::
@Article{Janet2017JPCA,
author = {Janet, Jon Paul and Kulik, Heather J.},
title = {Resolving Transition Metal Chemical Space: Feature Selection for Machine Learning and Structure--Property Relationships},
journal = {The Journal of Physical Chemistry A},
volume = {121},
number = {46},
pages = {8939-8954},
issn = {1089-5639},
url = {https://doi.org/10.1021/acs.jpca.7b08750},
doi = {10.1021/acs.jpca.7b08750},
year = {2017},
}
::
@Article{Janet2019IC,
author = {Janet, Jon Paul and Liu, Fang and Nandy, Aditya and Duan, Chenru and Yang, Tzuhsiung and Lin, Sean and Kulik, Heather J.},
title = {Designing in the Face of Uncertainty: Exploiting Electronic Structure and Machine Learning Models for Discovery in Inorganic Chemistry},
journal = {Inorganic Chemistry},
volume = {58},
number = {16},
pages = {10592-10606},
issn = {0020-1669},
url = {https://doi.org/10.1021/acs.inorgchem.9b00109},
doi = {10.1021/acs.inorgchem.9b00109},
year = {2019},
}
If you use the machine learning (ML) models in molSimplify to predict the outcomes of your calculations, please cite:
::
@Article{Duan2019JCTC,
author = {Duan, Chenru and Janet, Jon Paul and Liu, Fang and Nandy, Aditya and Kulik, Heather J.},
title = {Learning from Failure: Predicting Electronic Structure Calculation Outcomes with Machine Learning Models},
journal = {Journal of Chemical Theory and Computation},
volume = {15},
number = {4},
pages = {2331-2345},
issn = {1549-9618},
url={https://doi.org/10.1021/acs.jctc.9b00057},
doi={10.1021/acs.jctc.9b00057},
year={2019},
}
If you use the machine learning (ML) models in molSimplify to predict the spin-state dependent reaction energetics, please cite:
::
@Article{Nandy2019ACSCatal,
author = {Nandy, Aditya and Zhu, Jiazhou and Janet, Jon Paul and Duan, Chenru and Getman, Rachel B. and Kulik, Heather J.},
title = {Machine Learning Accelerates the Discovery of Design Rules and Exceptions in Stable Metal--Oxo Intermediate Formation},
journal = {ACS Catalysis},
volume = {9},
number = {9},
pages = {8243-8255},
url = {https://doi.org/10.1021/acscatal.9b02165},
doi = {10.1021/acscatal.9b02165},
year={2019},
}
================================================
FILE: docs/source/Classes.rst
================================================
Classes
=======
atom3D Class
--------------------------------
.. automodule:: molSimplify.Classes.atom3D
:members:
:undoc-members:
:show-inheritance:
mol3D Class
--------------------------------
.. automodule:: molSimplify.Classes.mol3D
:members:
:undoc-members:
:show-inheritance:
Mol2D Class
--------------------------------
.. automodule:: molSimplify.Classes.mol2D
:members:
:undoc-members:
:show-inheritance:
monomer3D Class
--------------------------------
.. automodule:: molSimplify.Classes.monomer3D
:members:
:undoc-members:
:show-inheritance:
protein3D Class
--------------------------------
.. automodule:: molSimplify.Classes.protein3D
:members:
:undoc-members:
:show-inheritance:
globalvars
--------------------------------
.. automodule:: molSimplify.Classes.globalvars
:members:
:undoc-members:
:show-inheritance:
rundiag
--------------------------------
.. automodule:: molSimplify.Classes.rundiag
:members:
:undoc-members:
:show-inheritance:
================================================
FILE: docs/source/Informatics.rst
================================================
Informatics
===========
Molecular Revised Autocorrelations
----------------------------------
.. automodule:: molSimplify.Informatics.lacRACAssemble
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Informatics.autocorrelation
:members:
:undoc-members:
:show-inheritance:
Revised Autocorrelations for MOFs
---------------------------------
Documentation for RACs coming soon!
================================================
FILE: docs/source/Installation.rst
================================================
Installation
============
Regardless of install method, we recommend using anaconda to manage virtual environments. If you want a simple install, you can download our pre-installed docker image, which has an out-of-the-box copy of molSimplify. We recommend installation via source for more advanced users.
Installing from Source
----------------------
To install from source, please follow the install instructions on the front page of our github page: https://github.com/hjkgrp/molSimplify. There are special instructions there if you have a Mac with an M1 chip.
Using a Docker Image
--------------------
We also maintain an active docker image on dockerhub for plug-and-play use: https://hub.docker.com/r/hjkgroup/molsimplify.
For line by line instructions on an installation via docker, please visit molSimplify installation webpage of the Kulik group: http://hjkgrp.mit.edu/content/installing-molsimplify.
================================================
FILE: docs/source/Scripts.rst
================================================
Tools
=====
Structure Generation Tools
--------------------------
.. automodule:: molSimplify.Scripts.structgen
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Scripts.generator
:members:
:undoc-members:
:show-inheritance:
Geometry Manipulation Tools
---------------------------
.. automodule:: molSimplify.Scripts.geometry
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Scripts.distgeom
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Scripts.rmsd
:members:
:undoc-members:
:show-inheritance:
Cellbuilder Tools
-----------------
.. automodule:: molSimplify.Scripts.cellbuilder
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Scripts.cellbuilder_tools
:members:
:undoc-members:
:show-inheritance:
Input File Generation
---------------------
.. automodule:: molSimplify.Scripts.qcgen
:members:
:undoc-members:
:show-inheritance:
.. automodule:: molSimplify.Scripts.periodic_QE
:members:
:undoc-members:
:show-inheritance:
molSimplify Argument Parser
---------------------------
.. automodule:: molSimplify.Scripts.inparse
:members:
:undoc-members:
:show-inheritance:
================================================
FILE: docs/source/conf.py
================================================
# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
molSimplify_path = os.path.join(os.path.dirname(__file__), '../../../molSimplify')
sys.path.insert(0, os.path.abspath(molSimplify_path))
# -- Project information -----------------------------------------------------
project = u'molSimplify'
copyright = u'2020, Heather J. Kulik Group'
author = u'Heather J. Kulik Research Group'
# The short X.Y version
version = u''
# The full version, including alpha/beta/rc tags
release = u''
# -- General configuration ---------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.autosummary',
'sphinx.ext.doctest',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.mathjax',
'sphinx.ext.ifconfig',
'sphinx.ext.viewcode',
'sphinx.ext.githubpages',
]
# Automatically generate summaries
autosummary_generate = True
autodoc_default_flags = ['members',
'undoc-members',
'show-inheritance',
'inherited-members']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = 'en'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['**.ipynb_checkpoints', '**.ipynb',
'.DS_store', '_build']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = []
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself. Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
# html_sidebars = {}
# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'molSimplifydoc'
# -- Options for LaTeX output ------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'molSimplify.tex', u'molSimplify Documentation',
u'Heather J. Kulik Group', 'manual'),
]
# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'molsimplify', u'molSimplify Documentation',
[author], 1)
]
# -- Options for Texinfo output ----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'molSimplify', u'molSimplify Documentation',
author, 'molSimplify', 'Inorganic structure building.',
'Miscellaneous'),
]
# -- Options for Epub output -------------------------------------------------
# Bibliographic Dublin Core info.
epub_title = project
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#
# epub_identifier = ''
# A unique identification for the text.
#
# epub_uid = ''
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']
# -- Extension configuration -------------------------------------------------
# -- Options for intersphinx extension ---------------------------------------
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}
# -- Options for todo extension ----------------------------------------------
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
# Napoleon settings
napoleon_google_docstring = True
napoleon_numpy_docstring = True
napoleon_include_init_with_doc = False
napoleon_include_private_with_doc = False
napoleon_include_special_with_doc = True
napoleon_use_admonition_for_examples = False
napoleon_use_admonition_for_notes = False
napoleon_use_admonition_for_references = False
napoleon_use_ivar = False
napoleon_use_param = True
napoleon_use_rtype = True
napoleon_type_aliases = None
# Latex equations options
imgmath_image_format = 'svg'
imgmath_font_size = 18
================================================
FILE: docs/source/index.rst
================================================
.. image:: logo_enhanced.png
:width: 600
Welcome to molSimplify's documentation!
=======================================
.. toctree::
:maxdepth: 2
:caption: General Information
Installation
Citation
.. toctree::
:maxdepth: 2
:caption: Code Structure
.. image:: code_structure.png
:width: 400
| Descriptions of important folders and file organization:
| ``Classes:`` generic tools used to manipulate non-periodic molecular structures
| - ``mol3D.py``: object used to manipulate non-periodic molecular structure (not just transition metal complexes), composed of atom3D objects
| - ``atom3D.py``: object representing a single atom defined by position, identify, etc
| - ``globarvars.py``: contains all information about elements in the periodic table
| ``Cores``: templates for building transition metal complex
| ``Data``: template for coordination for not just octahedral coordination
| ``Informatics``: scripts and codes for featurization, revised autocorrelations, transformations of molecular information into numerical vectors, and other ML tools
| ``Ligands``: database of ligands which are used in molSimplify (if your ligand is not found here, there is a tutorial for adding to the ligand database)
| - ``ligands.dict``: contains mappings between ligand name and corresponding structure
| ``Scripts``: codes to write and measure geometries, and write input files
| ``python_nn``: bond length information for the very first bond length NN (2017 Chemical Science)
| ``sklearn_models``: models for static classification of whether a geometry is good or bad
| ``tf_nn``: published models from the group
.. toctree::
:maxdepth: 2
:caption: API
Classes
Scripts
Informatics
.. toctree::
:maxdepth: 2
:caption: Tutorials
tutorials/development
.. toctree::
:caption: Useful Links
View Source Code (GitHub) <https://github.com/hjkgrp/molSimplify>
Report an Issue <https://github.com/hjkgrp/molSimplify/issues>
Visit Our Research Group Website <https://hjkgrp.mit.edu>
Visit Our Interactive Site <https://molsimplify.mit.edu>
================================================
FILE: docs/source/tutorials/development.rst
================================================
===========
Development
===========
How to contribute
=================
Development of new features should be performed in separate branches
(and/or forks) of the repository in order to ensure that:
- the master branch never contains unfinished/unvalidated code
- unnecessary build notifications to the slack channel are avoided
Opening a pull request for the finished feature allows the code maintainers to
review new code before merging into main. This workflow not only ensures a
certain level of code quality but also encourages discussions about
implementation details and best practices which can be a powerful method of
knowledge exchange for both involved parties.
Automated testing
=================
As a part of the continous integration (CI) pipeline all new code submissions
are valided using a pytest test-suite. molSimplify currently uses Github
actions to run these checks (see status
`here <https://github.com/hjkgrp/molSimplify/actions/workflows/CI.yaml>`_).
Ideally all code contributions should also contain a simple test case to ensure
that the new feature is not broken by future updates to the code base.
Code quality
============
While measures of code quality (and aesthetics) are highly subjective, a common
standard is useful for the collaborative development of open-source code. Most
Python projects (including molSimplify) follow the recommendations outlined in
`PEP8 <https://peps.python.org/pep-0008/>`_.
Linter
------
The easiest way to ensure your contributions conform to
`PEP8 <https://peps.python.org/pep-0008/>`_ is to install a linter such as
`flake8 <https://flake8.pycqa.org>`_ for your IDE of choice.
Some basic measures of code quality are enforced using flake8 as a part of the
Github actions CI pipeline. The following flake8 error codes will result in a
failed build (where * is a placeholder matching all subclasses of the
errors):
* E9** syntax, io, or indentation error
* F63* syntax error in assertion, comparison, or print
* F7** syntax error in loops or functions
* F82* undefined variables
Pre-commit hooks
----------------
In order to automate the process of code lintering molSimplify also provides a
configuration file for a `pre-commit <https://pre-commit.com/>`_ hook. After
`installing the pre-commit package <https://pre-commit.com/#install>`_
(using pip, conda, or your package manager of choice) the configuration file
can be installed using the command::
pre-commit install
================================================
FILE: examples/example-1.in
================================================
-core cobalt
-geometry oct
-coord 6
-lig tpp,imidazole,x
-ligocc 1,1,1
-keepHs no no no
-ff MMFF94
-ffoption BA
-spin 1
-oxstate II
================================================
FILE: molSimplify/.gitignore
================================================
build/
molSimplify.egg-info/
db1.xyz
db2.xyz
db3.xyz
before_rot.xyz
modi.xyz
main.BKP
*.pyc
*.swp
distgeomtest.py
================================================
FILE: molSimplify/Bind/bicarbonate.mol
================================================
OpenBabel04291516553D
5 4 0 0 0 0 0 0 0 0999 V2000
0.9890 -0.1130 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2.3120 -0.0540 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.9460 -1.1330 -0.0000 O 0 5 0 0 0 0 0 0 0 0 0 0
2.6990 1.1390 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.9240 0.8640 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 5 1 0 0 0 0
2 4 2 0 0 0 0
2 3 1 0 0 0 0
M CHG 1 3 -1
M END
================================================
FILE: molSimplify/Bind/bind.dict
================================================
dihydrogenphosphite:dihydrogenphosphite.mol
bicarbonate:bicarbonate.mol
bisulfate:bisulfate.mol
bisulfite:bisulfite.mol
carbonmonoxide:carbonmonoxide.mol
dihydrogenphosphate:dihydrogenphosphate.mol
formate:formate.mol
nitrate:nitrate.mol
oxalate:oxalate.mol
oxygen:oxygen.mol
perchlorate:perchlorate.mol
water:water.mol
================================================
FILE: molSimplify/Bind/bisulfate.mol
================================================
OpenBabel04291516553D
6 5 0 0 0 0 0 0 0 0999 V2000
1.2220 0.1580 -0.0180 O 0 5 0 0 0 0 0 0 0 0 0 0
2.6620 -0.0490 0.0190 S 0 0 0 0 0 0 0 0 0 0 0 0
3.1960 -0.6310 1.2390 O 0 0 0 0 0 0 0 0 0 0 0 0
3.2340 -0.5330 -1.2290 O 0 0 0 0 0 0 0 0 0 0 0 0
3.2020 1.4630 0.0410 O 0 0 0 0 0 0 0 0 0 0 0 0
2.8970 1.8100 -0.8160 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 5 1 0 0 0 0
2 4 2 0 0 0 0
2 3 2 0 0 0 0
5 6 1 0 0 0 0
M CHG 1 1 -1
M END
================================================
FILE: molSimplify/Bind/bisulfite.mol
================================================
OpenBabel04291516553D
5 4 0 0 0 0 0 0 0 0999 V2000
1.2150 0.1820 0.1180 O 0 5 0 0 0 0 0 0 0 0 0 0
2.7000 -0.0640 0.0270 S 0 0 1 0 0 0 0 0 0 0 0 0
3.1950 -0.6150 -1.2850 O 0 0 0 0 0 0 0 0 0 0 0 0
3.3860 1.4210 0.1920 O 0 0 0 0 0 0 0 0 0 0 0 0
2.6740 2.0190 0.5100 H 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 6 0 0 0
2 4 1 0 0 0 0
2 3 2 0 0 0 0
4 5 1 0 0 0 0
M CHG 1 1 -1
M END
================================================
FILE: molSimplify/Bind/carbonmonoxide.mol
================================================
OpenBabel10091511523D
2 1 0 0 0 0 0 0 0 0999 V2000
-3.4936 0.2081 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2925 0.9153 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
M END
================================================
FILE: molSimplify/Bind/dihydrogenphosphate.mol
================================================
OpenBabel04291516543D
7 6 0 0 0 0 0 0 0 0999 V2000
1.0950 -0.1720 -0.1370 O 0 0 0 0 0 0 0 0 0 0 0 0
2.6890 -0.0510 -0.0380 P 0 0 0 0 0 0 0 0 0 0 0 0
3.2240 -0.6470 1.2190 O 0 0 0 0 0 0 0 0 0 0 0 0
3.1010 -0.8980 -1.3340 O 0 0 0 0 0 0 0 0 0 0 0 0
2.9490 1.3650 -0.4620 O 0 5 0 0 0 0 0 0 0 0 0 0
0.8220 0.7370 -0.3430 H 0 0 0 0 0 0 0 0 0 0 0 0
3.4710 -0.2210 -1.9260 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 6 1 0 0 0 0
2 5 1 0 0 0 0
2 4 1 0 0 0 0
2 3 2 0 0 0 0
4 7 1 0 0 0 0
M CHG 1 5 -1
M END
================================================
FILE: molSimplify/Bind/dihydrogenphosphite.mol
================================================
OpenBabel04291516553D
6 5 0 0 0 0 0 0 0 0999 V2000
1.4520 -0.0710 0.0790 O 0 5 0 0 0 0 0 0 0 0 0 0
3.0360 -0.2250 0.4020 P 0 0 0 0 0 0 0 0 0 0 0 0
3.3770 -0.7700 -1.0690 O 0 0 0 0 0 0 0 0 0 0 0 0
3.3400 1.3230 0.0990 O 0 0 0 0 0 0 0 0 0 0 0 0
2.4890 -0.8470 -1.4800 H 0 0 0 0 0 0 0 0 0 0 0 0
2.4460 1.6880 -0.0720 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 4 1 0 0 0 0
2 3 1 0 0 0 0
3 5 1 0 0 0 0
4 6 1 0 0 0 0
M CHG 1 1 -1
M END
================================================
FILE: molSimplify/Bind/formate.mol
================================================
OpenBabel04291516553D
4 3 0 0 0 0 0 0 0 0999 V2000
0.9990 0.0100 -0.0070 C 0 0 0 0 0 0 0 0 0 0 0 0
0.2660 -0.2750 0.9770 O 0 0 0 0 0 0 0 0 0 0 0 0
2.2530 0.0430 -0.1210 O 0 0 0 0 0 0 0 0 0 0 0 0
0.4290 0.2850 -0.9580 H 0 0 0 0 0 0 0 0 0 0 0 0
1 4 1 0 0 0 0
1 3 2 0 0 0 0
1 2 1 0 0 0 0
M END
================================================
FILE: molSimplify/Bind/nitrate.mol
================================================
OpenBabel04291516553D
3 2 0 0 0 0 0 0 0 0999 V2000
0.9920 -0.0990 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
0.3970 1.0970 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2.3210 0.0280 0.0000 O 0 5 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 2 2 0 0 0 0
M CHG 1 3 -1
M END
================================================
FILE: molSimplify/Bind/oxalate.mol
================================================
OpenBabel04291516543D
7 6 0 0 0 0 0 0 0 0999 V2000
0.9550 -0.2100 0.1290 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5880 -1.2700 0.6100 O 0 0 0 0 0 0 0 0 0 0 0 0
0.0910 1.0650 0.1070 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7080 2.0390 -0.4540 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.0730 1.0570 0.6060 O 0 5 0 0 0 0 0 0 0 0 0 0
2.1510 0.0790 -0.4690 O 0 0 0 0 0 0 0 0 0 0 0 0
2.0370 1.0450 -0.7170 H 0 0 0 0 0 0 0 0 0 0 0 0
1 6 1 0 0 0 0
1 3 1 0 0 0 0
1 2 2 0 0 0 0
3 5 1 0 0 0 0
3 4 2 0 0 0 0
6 7 1 0 0 0 0
M CHG 1 5 -1
M END
================================================
FILE: molSimplify/Bind/oxygen.mol
================================================
OpenBabel05141513343D
2 1 0 0 0 0 0 0 0 0999 V2000
-2.8026 0.1992 -0.6896 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.4883 0.1807 -0.6250 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
M END
================================================
FILE: molSimplify/Bind/perchlorate.mol
================================================
OpenBabel04291516543D
5 4 0 0 0 0 0 0 0 0999 V2000
1.1960 -0.0030 -0.0050 O 0 5 0 0 0 0 0 0 0 0 0 0
2.6460 -0.0040 0.0060 Cl 0 0 0 0 0 0 0 0 0 0 0 0
3.1200 -0.6740 1.2020 O 0 0 0 0 0 0 0 0 0 0 0 0
3.1380 -0.7010 -1.1660 O 0 0 0 0 0 0 0 0 0 0 0 0
3.1300 1.3630 -0.0050 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 5 2 0 0 0 0
2 4 2 0 0 0 0
2 3 2 0 0 0 0
M CHG 1 1 -1
M END
================================================
FILE: molSimplify/Bind/test.smi.smi
================================================
C=O
================================================
FILE: molSimplify/Bind/water.mol
================================================
OpenBabel05081517533D
3 2 0 0 0 0 0 0 0 0999 V2000
-0.6304 3.4532 1.1538 O 0 0 0 0 0 0 0 0 0 0 0 0
0.3424 3.4532 1.3389 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.0533 3.4532 2.0492 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
1 3 1 0 0 0 0
M END
================================================
FILE: molSimplify/Classes/.gitignore
================================================
*.pyc
*.swp
================================================
FILE: molSimplify/Classes/README.md
================================================
To members of the Kulik group: If you have custom data that you want to use for yourself but do not want to push to the main repo, e.g. custom ligands for molSimplify ligand construction, you can make a file `.molSimplify` and include in it a line like `CUSTOM_DATA_PATH=/Users/your_user/molSimplify_custom_data`. In that folder you specified, you can place a folder `Ligands`, and molSimplify will look there first before looking at the Ligands folder in the central repo. This functionality is implemented in `globalvars.py`.
================================================
FILE: molSimplify/Classes/__init__.py
================================================
from .atom3D import atom3D
from .globalvars import globalvars
from .mol3D import mol3D
from .rundiag import run_diag
__all__ = ["atom3D", "globalvars", "mol3D", "run_diag"]
================================================
FILE: molSimplify/Classes/atom3D.py
================================================
# @file atom3D.py
# Defines atom3D class and contains useful manipulation/retrieval routines.
#
# Written by Kulik Group
#
# Department of Chemical Engineering, MIT
import numpy as np
from typing import List, Optional
from molSimplify.Classes.globalvars import globalvars
class atom3D:
"""
atom3D class. Base class in molSimplify for representing an element.
Parameters
----------
Sym : str, optional
Symbol for atom3D instantiation. Element symbol. Default is 'C'.
xyz : list, optional
List of coordinates for new atom. Default is [0.0, 0.0, 0.0].
Units of angstroms.
name : str, optional
Unique identifier for atom 3D instantiation. Default is False.
partialcharge : int, optional
Charge assigned to atom when added to mol. Default is None.
"""
def __init__(self,
Sym: str = 'C',
xyz: Optional[List[float]] = None,
name: Optional[str] = None,
partialcharge: Optional[float] = None,
Tfactor=0,
greek='',
occup=1.00,
loc='',
line=""):
# Element symbol
self.sym = Sym
self.partialcharge = partialcharge
globs = globalvars()
amass = globs.amass()
if Sym not in amass: # Assign default values if not in dictionary.
print(f"We didn't find the atomic mass of {Sym} in the dictionary. Assigning default value of 12!\n")
# Atomic mass
self.mass = 12.0 # default atomic mass
# Atomic number
self.atno = 6 # default atomic number
# Covalent radius
self.rad = 0.75 # default atomic radius
else:
self.mass = amass[Sym][0]
self.atno = amass[Sym][1]
self.rad = amass[Sym][2]
# Flag for freezing in optimization
self.frozen = False
# Flag for atom name
# NOTE: does not compare to None because empty string would not be valid and
# some parts of molSimplify still instantiate atom3D with name=False
if name:
self.name = name
else:
self.name = Sym
# Coordinates
if xyz is None:
xyz = [0.0, 0.0, 0.0]
elif not isinstance(xyz, (list, np.ndarray)) or len(xyz) != 3:
raise ValueError('xyz should be a list of length 3.')
try:
np.array(xyz, dtype=np.float64)
except ValueError:
raise ValueError('List xyz should consist of numbers.')
self.__xyz = list(xyz)
# Temperature factor (only useful for proteins)
self.Tfactor = Tfactor
# Greek letter (e.g. alpha carbon - only useful for proteins)
if greek == '':
self.greek = Sym
else:
self.greek = greek
# Occupancy (only useful for proteins)
self.occup = occup
# EDIA score (only useful for proteins)
self.EDIA = 0
# Conformation (only useful for proteins)
self.loc = ""
# PDB line (only useful for proteins)
self.line = line
def __repr__(self):
return f"atom3D(Sym={self.sym}, xyz={self.__xyz})"
# TODO: uncomment this once protein3D has a better implementation than
# hashing of a mutable object!
# def __eq__(self, other):
# if isinstance(other, self.__class__):
# return self.__dict__ == other.__dict__
# else:
# return False
def coords(self):
"""
Get coordinates of a given atom.
Returns
-------
coords : list
List of coordinates in X, Y, Z format.
Units of angstroms.
"""
coords = self.__xyz.copy()
return coords
def distance(self, atom2):
"""
Get distance from one atom3D class to another.
Parameters
----------
atom2 : atom3D
atom3D class of the atom to measure distance from.
Returns
-------
dist : float
Distance in angstroms.
"""
xyz = self.coords()
point = atom2.coords()
dist = np.linalg.norm(np.array(xyz)-np.array(point))
return dist
def distancev(self, atom2):
"""
Get distance vector from one atom3D class to another.
Parameters
----------
atom2 : atom3D
atom3D class of the atom to measure distance from.
Returns
-------
dist_list : list
List of distances in vector form: [dx, dy, dz] with units of angstroms.
"""
xyz = self.coords()
point = atom2.coords()
dist_list = list(np.array(xyz)-np.array(point))
return dist_list
def ismetal(self, transition_metals_only=True, include_X=False) -> bool:
"""
Identify whether an atom is a metal.
Parameters
----------
transition_metals_only : bool, optional
Identify only transition metals.
Default is True.
include_X : bool, optional
Whether "X" atoms are considered metals.
Default is False.
Returns
-------
metal : bool
Bool for whether or not an atom is a metal.
"""
return self.sym in globalvars().metalslist(transition_metals_only=transition_metals_only,
include_X=include_X)
def setcoords(self, xyz):
"""
Set coordinates of an atom3D class to a new location.
Parameters
----------
xyz : list
List of coordinates, has length 3: [X, Y, Z]
Units of angstroms.
"""
if not isinstance(xyz, (list, np.ndarray)) or len(xyz) != 3:
raise ValueError('xyz should be a list of length 3.')
try:
np.array(xyz, dtype=np.float64)
except ValueError:
raise ValueError('List xyz should consist of numbers.')
self.__xyz = list(xyz)
def symbol(self) -> str:
"""
Return symbol of atom3D.
Returns
-------
symbol : str
Element symbol for atom3D class.
"""
return self.sym
def mutate(self, newType='C'):
"""
Mutate an element to another element in the atom3D.
Parameters
----------
newType : str, optional
Element name for new element. Default is 'C'.
"""
globs = globalvars()
amass = globs.amass()
if newType not in list(amass.keys()):
print(f'Error, unknown atom type transformation to {newType}.')
print('No changes made.')
else:
self.mass = amass[newType][0]
self.atno = amass[newType][1]
self.rad = amass[newType][2]
self.name = newType
self.sym = newType
def translate(self, dxyz):
"""
Move the atom3D by a displacement vector.
Parameters
----------
dxyz : list
Displacement vector of length 3: [dx, dy, dz].
Units of angstroms.
"""
self.__xyz = list(np.array(self.__xyz)+np.array(dxyz))
def setEDIA(self, score):
"""
Sets the EDIA score of an individual atom3D.
Parameters
----------
score : float
Desired EDIA score of atom
"""
self.EDIA = score
================================================
FILE: molSimplify/Classes/dft_obs.py
================================================
# @file dft_obs.py
# Contains dft_observation class.
#
# Written by JP Janet for HJK Group
#
# Dpt of Chemical Engineering, MIT
from molSimplify.Informatics.autocorrelation import(
generate_full_complex_autocorrelations,
generate_metal_autocorrelations,
generate_metal_deltametrics,
)
from molSimplify.Informatics.lacRACAssemble import (
generate_all_ligand_autocorrelations_lac,
generate_all_ligand_deltametrics_lac,
generate_all_ligand_misc,
)
from molSimplify.Classes.mol3D import mol3D
# DFT observations used to postprocess DFT results by measuring ligand properties
class dft_observation:
def __init__(self, name, geopath):
self.name = name
self.descriptors = list()
self.descriptor_names = list()
self.mol = False
self.health = False
self.comments = list()
self.geopath = geopath
self.coord = 'undef'
def sety(self, y_value):
self.yvalue = y_value
def obtain_mol3d(self):
this_mol = mol3D()
this_mol.readfromxyz(self.geopath)
if this_mol.natoms > 0:
self.mol = this_mol
self.natoms = this_mol.natoms
self.health = True
else:
self.comments.append('geo file appears empty')
self.health = False
def get_coord(self):
self.coord = len(self.mol.getBondedAtomsSmart(self.mol.findMetal()[0]))
def get_descriptor_vector(self, lig_only, simple, flag_name=False, loud=False):
self.get_coord()
if not lig_only and (self.coord == 6):
results_dictionary = generate_all_ligand_misc(self.mol, loud)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_ax'], 'misc', 'ax')
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_eq'], 'misc', 'eq')
print(f'after adding misc descriptors... {len(self.descriptor_names)}')
if self.coord == 6: # oct only
results_dictionary = generate_all_ligand_autocorrelations_lac(
self.mol, depth=3, loud=loud, flag_name=flag_name)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_ax_full'], 'f', 'ax')
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_eq_full'], 'f', 'eq')
print(f'after adding full ax/eq descriptors... {len(self.descriptor_names)}')
if not simple and not lig_only:
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_ax_con'], 'lc', 'ax')
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_eq_con'], 'lc', 'eq')
results_dictionary = generate_all_ligand_deltametrics_lac(
self.mol, depth=3, loud=True, flag_name=flag_name)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_ax_con'], 'D_lc', 'ax')
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['result_eq_con'], 'D_lc', 'eq')
print(f'after adding lc ax/eq descriptors... {len(self.descriptor_names)}')
if not lig_only:
if not simple:
results_dictionary = generate_metal_autocorrelations(
self.mol, depth=3)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['results'], 'mc', 'all')
results_dictionary = generate_metal_deltametrics(
self.mol, depth=3)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['results'], 'D_mc', 'all')
results_dictionary = generate_full_complex_autocorrelations(
self.mol, depth=3)
self.append_descriptors(
results_dictionary['colnames'], results_dictionary['results'], 'f', 'all')
print(f'after adding full complex descriptors... {len(self.descriptor_names)}')
def append_descriptors(self, list_of_names, list_of_props, prefix, suffix):
for names in list_of_names:
if hasattr(names, '__iter__'):
names = ["-".join([prefix, str(i), suffix]) for i in names]
self.descriptor_names += names
else:
names = "-".join([prefix, str(names), suffix])
self.descriptor_names.append(names)
for values in list_of_props:
if hasattr(values, '__iter__'):
self.descriptors.extend(values)
else:
self.descriptors.append(values)
def write_descriptor_csv(list_of_runs):
with open('descriptor_file.csv', 'w') as f:
f.write('runs,')
n_cols = len(list_of_runs[0].descriptor_names)
for i, names in enumerate(list_of_runs[0].descriptor_names):
if i < (n_cols-1):
f.write(names+',')
else:
f.write(names+'\n')
for runs in list_of_runs:
try:
f.write(runs.name)
for properties in runs.descriptors:
f.write(','+str(properties))
f.write('\n')
except AttributeError:
pass
================================================
FILE: molSimplify/Classes/globalvars.py
================================================
# @file globalvars.py
# @file globalvars.py
# Contains useful constants used throughout the code.
#
# Written by Kulik Group
#
# Department of Chemical Engineering, MIT
import os
import inspect
import glob
import platform
import sys
import subprocess
from typing import Dict, Tuple
from molSimplify.utils.metaclasses import Singleton
import numpy as np
geometry_vectors = {
'octahedral': np.array([
[1, 0, 0], [-1, 0, 0],
[0, 1, 0], [0, -1, 0],
[0, 0, 1], [0, 0, -1]
]),
'tetrahedral': np.array([
[1, 1, 1], [-1, -1, 1],
[-1, 1, -1], [1, -1, -1]
]) / np.sqrt(3),
'square_planar': np.array([
[1, 0, 0], [-1, 0, 0],
[0, 1, 0], [0, -1, 0]
]),
'trigonal_bipyramidal': np.array([
[1, 0, 0], [-0.5, np.sqrt(3)/2, 0], [-0.5, -np.sqrt(3)/2, 0],
[0, 0, 1], [0, 0, -1]
]),
'linear': np.array([
[1, 0, 0], [-1, 0, 0]
]),
'square_pyramidal': np.array([
[1, 0, 0], [-1, 0, 0],
[0, 1, 0], [0, -1, 0],
[0, 0, 1]
]),
'trigonal_planar': np.array([
[1, 0, 0], [-0.5, np.sqrt(3)/2, 0], [-0.5, -np.sqrt(3)/2, 0]
]),
'trigonal_prismatic': np.array([
[1, 0, 1], [-0.5, np.sqrt(3)/2, 1], [-0.5, -np.sqrt(3)/2, 1],
[1, 0, -1], [-0.5, np.sqrt(3)/2, -1], [-0.5, -np.sqrt(3)/2, -1]
]) / np.sqrt(2),
'pentagonal_bipyramidal': np.array([
[1, 0, 0],
[np.cos(2*np.pi/5), np.sin(2*np.pi/5), 0],
[np.cos(4*np.pi/5), np.sin(4*np.pi/5), 0],
[np.cos(6*np.pi/5), np.sin(6*np.pi/5), 0],
[np.cos(8*np.pi/5), np.sin(8*np.pi/5), 0],
[0, 0, 1], [0, 0, -1]
])
}
global_isomer_subsets = {
"octahedral" : {
'fac': [
(0, 2, 4), # +X, +Y, +Z
(0, 3, 4), # +X, -Y, +Z
(1, 2, 4), # -X, +Y, +Z
(1, 3, 4), # -X, -Y, +Z
(0, 2, 5), # +X, +Y, -Z
(0, 3, 5), # +X, -Y, -Z
(1, 2, 5), # -X, +Y, -Z
(1, 3, 5), # -X, -Y, -Z
],
'mer': [
(0, 1, 2), # +X, -X, +Y
(0, 1, 3), # +X, -X, -Y
(0, 1, 4), # +X, -X, +Z
(0, 1, 5), # +X, -X, -Z
(2, 3, 4), # +Y, -Y, +Z
(2, 3, 5), # +Y, -Y, -Z
(4, 5, 0), # +Z, -Z, +X
(4, 5, 2), # +Z, -Z, +Y
(2, 4, 5), # +Y, +Z, -Z
(3, 4, 5), # -Y, +Z, -Z
],
'alpha': [
(4, 5, 0, 2), # +Z, -Z, +X, +Y
(4, 5, 0, 3), # +Z, -Z, +X, -Y
(4, 5, 1, 2), # +Z, -Z, -X, +Y
(4, 5, 1, 3), # +Z, -Z, -X, -Y
],
'beta': [
(0, 1, 2, 4), # +X, -X, +Y, +Z
(0, 1, 2, 5), # +X, -X, +Y, -Z
(0, 1, 3, 4), # +X, -X, -Y, +Z
(0, 1, 3, 5), # +X, -X, -Y, -Z
(2, 3, 0, 4), # +Y, -Y, +X, +Z
(2, 3, 0, 5), # +Y, -Y, +X, -Z
(2, 3, 1, 4), # +Y, -Y, -X, +Z
(2, 3, 1, 5), # +Y, -Y, -X, -Z
],
'trans': [
(0, 2, 1, 3), # +X, +Y, -X, -Y
(0, 4, 1, 5), # +X, +Z, -X, -Z
(2, 4, 3, 5) # +Y, +Z, -Y, -Z
]
}
}
# Dictionary containing atomic mass (amu), atomic number, covalent radius (Å), num valence electrons
# Data from http://www.webelements.com/ (last accessed May 13th 2015)
amassdict = {'X': (1.0, 0, 0.77, 0), 'H': (1.0079, 1, 0.37, 1),
'D': (2.0141, 1, 0.37, 1), 'He': (4.002602, 2, 0.46, 2),
'Li': (6.94, 3, 1.33, 1), 'Be': (9.0121831, 4, 1.02, 2), 'B': (10.81, 5, 0.85, 3),
'C': (12.0107, 6, 0.77, 4), 'N': (14.0067, 7, 0.75, 5), 'O': (15.9994, 8, 0.73, 6),
'F': (18.9984, 9, 0.71, 7), 'Ne': (20.1797, 10, 0.67, 8), 'Na': (22.99, 11, 1.55, 1),
'Mg': (24.30, 12, 1.39, 2), 'Al': (26.98, 13, 1.26, 3), 'Si': (28.08, 14, 1.16, 4),
'P': (30.9738, 15, 1.06, 5), 'S': (32.065, 16, 1.02, 6), 'Cl': (35.453, 17, 0.99, 7),
'Ar': (39.948, 18, 0.96, 8), 'K': (39.10, 19, 1.96, 1), 'Ca': (40.08, 20, 1.71, 2),
'Sc': (44.96, 21, 1.7, 3), 'Ti': (47.867, 22, 1.36, 4), 'V': (50.94, 23, 1.22, 5),
'Cr': (51.9961, 24, 1.27, 6), 'Mn': (54.938, 25, 1.39, 7), 'Fe': (55.84526, 26, 1.25, 8),
'Co': (58.9332, 27, 1.26, 9), 'Ni': (58.693, 28, 1.21, 10), 'Cu': (63.546, 29, 1.38, 11),
'Zn': (65.39, 30, 1.31, 12), 'Ga': (69.72, 31, 1.24, 3), 'Ge': (72.63, 32, 1.21, 4),
'As': (74.92, 33, 1.21, 5), 'Se': (78.96, 34, 1.16, 6), 'Br': (79.904, 35, 1.14, 7),
'Kr': (83.798, 36, 1.17, 8), 'Rb': (85.47, 37, 2.10, 1), 'Sr': (87.62, 38, 1.85, 2),
'Y': (88.91, 39, 1.63, 3), 'Zr': (91.22, 40, 1.54, 4), 'Nb': (92.91, 41, 1.47, 5),
'Mo': (95.96, 42, 1.38, 6), 'Tc': (98.9, 43, 1.56, 7), 'Ru': (101.1, 44, 1.25, 8),
'Rh': (102.9, 45, 1.25, 9), 'Pd': (106.4, 46, 1.20, 10), 'Ag': (107.9, 47, 1.28, 11),
'Cd': (112.4, 48, 1.48, 12), 'In': (114.82, 49, 1.42, 3), 'Sn': (118.710, 50, 1.40, 4),
'Sb': (121.760, 51, 1.40, 5), 'Te': (127.60, 52, 1.38, 6), 'I': (126.90447, 53, 1.40, 7),
'Xe': (131.293, 54, 1.31, 8), 'Cs': (132.9055, 55, 2.32, 1), 'Ba': (137.327, 56, 1.96, 2),
'La': (138.9, 57, 1.69, 3), 'Ce': (140.116, 58, 1.63, 4), 'Pr': (140.90766, 59, 1.76, 5),
'Nd': (144.242, 60, 1.74, 6), 'Pm': (145, 61, 1.73, 7), 'Sm': (150.36, 62, 1.72, 8),
'Eu': (151.964, 63, 1.68, 9), 'Gd': (157.25, 64, 1.69, 10), 'Tb': (158.92535, 65, 1.68, 11),
'Dy': (162.500, 66, 1.67, 12), 'Ho': (164.93033, 67, 1.66, 13), 'Er': (167.259, 68, 1.65, 14),
'Tm': (168.93422, 69, 1.64, 15), 'Yb': (173.045, 70, 1.70, 16), 'Lu': (174.9668, 71, 1.62, 3),
'Hf': (178.5, 72, 1.50, 4), 'Ta': (180.9, 73, 1.38, 5), 'W': (183.8, 74, 1.46, 6),
'Re': (186.2, 75, 1.59, 7), 'Os': (190.2, 76, 1.28, 8), 'Ir': (192.2, 77, 1.37, 9),
'Pt': (195.1, 78, 1.23, 10), 'Au': (197.0, 79, 1.24, 11), 'Hg': (200.6, 80, 1.49, 12),
'Tl': (204.38, 81, 1.44, 3), 'Pb': (207.2, 82, 1.44, 4), 'Bi': (208.9804, 83, 1.51, 5),
'Po': (208.98, 84, 1.40, 6), 'At': (209.99, 85, 1.50, 7), 'Rn': (222.02, 86, 1.50, 8),
'Fr': (223.02, 87, 3.48, 1), 'Ra': (226.03, 88, 2.01, 2), 'Ac': (227, 89, 1.86, 3),
'Th': (232.0377, 90, 1.75, 4), 'Pa': (231.04, 91, 2.00, 5), 'U': (238.02891, 92, 1.70, 6),
'Np': (237.05, 93, 1.90, 7), 'Pu': (244.06, 94, 1.75, 8), 'Am': (243.06, 95, 1.80, 9),
'Cm': (247.07, 96, 1.69, 10), 'Bk': (247.07, 97, 1.68, 11), 'Cf': (251.08, 98, 1.68, 12)}
# Pa and onward should be checked
# van der Waals radii for elements
# Data from DOI: 10.1039/C3DT50599E, Dalton Trans., 2013, 42, 8617-8636
vdwrad = {'H': 1.2, 'He': 1.43, 'Li': 2.12, 'Be': 1.98, 'B': 1.91,
'C': 1.77, 'N': 1.66, 'O': 1.50, 'F': 1.46, 'Ne': 1.58, 'Na': 2.50,
'Mg': 2.51, 'Al': 2.25, 'Si': 2.19, 'P': 1.90, 'S': 1.89,
'Cl': 1.82, 'Ar': 1.83, 'K': 2.73, 'Ca': 2.62, 'Sc': 2.58,
'Ti': 2.46, 'V': 2.42, 'Cr': 2.45, 'Mn': 2.45, 'Fe': 2.44,
'Co': 2.40, 'Ni': 2.40, 'Cu': 2.38, 'Zn': 2.39, 'Ga': 2.32,
'Ge': 2.29, 'As': 1.88, 'Se': 1.82, 'Br': 1.86, 'Kr': 2.25,
'Rb': 3.21, 'Sr': 2.84, 'Y': 2.75, 'Zr': 2.52, 'Nb': 2.56,
'Mo': 2.45, 'Tc': 2.44, 'Ru': 2.46, 'Rh': 2.44, 'Pd': 2.15,
'Ag': 2.53, 'Cd': 2.49, 'In': 2.43, 'Sn': 2.42, 'Sb': 2.47,
'Te': 1.99, 'I': 2.04, 'Xe': 2.06, 'Cs': 3.48, 'Ba': 3.03,
'La': 2.98, 'Ce': 2.88, 'Pr': 2.92, 'Nd': 2.95, 'Sm': 2.90,
'Eu': 2.87, 'Gd': 2.83, 'Tb': 2.79, 'Dy': 2.87, 'Ho': 2.81,
'Er': 2.83, 'Tm': 2.79, 'Yb': 2.80, 'Lu': 2.74, 'Hf': 2.63,
'Ta': 2.53, 'W': 2.57, 'Re': 2.49, 'Os': 2.48, 'Ir': 2.41,
'Pt': 2.29, 'Au': 2.32, 'Hg': 2.45, 'Tl': 2.47, 'Pb': 2.60,
'Bi': 2.54, 'Ac': 2.8, 'Th': 2.93, 'Pa': 2.88, 'U': 2.71,
'Np': 2.82, 'Pu': 2.81, 'Am': 2.83, 'Cm': 3.05, 'Bk': 3.4,
'Cf': 3.05, 'Es': 2.7}
# Bondi van der Waals radii for elements
# From: doi:10.1021/j100881a503
# Accessed: http://www.knowledgedoor.com/2/elements_handbook/bondi_van_der_waals_radius.html 4/8/2021
bondivdw = {'Ar': 1.88, 'As': 1.85, 'Br': 1.85, 'Cd': 1.62, 'C': 1.70,
'Cl': 1.75, 'Cu': 1.4, 'F': 1.47, 'Ga': 1.87, 'Au': 1.66,
'He': 1.40, 'H': 1.20, 'In': 1.93, 'I': 1.98, 'Kr': 2.02,
'Pb': 2.02, 'Li': 1.82, 'Mg': 1.73, 'Hg': 1.70, 'Ne': 1.54,
'Ni': 1.63, 'N': 1.55, 'O': 1.52, 'Pd': 1.63, 'P': 1.80, 'Pt': 1.7,
'K': 2.75, 'Se': 1.90, 'Si': 2.10, 'Ag': 1.72, 'Na': 2.27, 'S': 1.80,
'Te': 2.06, 'Tl': 1.96, 'Sn': 1.96, 'U': 1.86, 'Xe': 2.16, 'Zn': 1.39}
# Period definitions for all element symbols
# Data from https://en.wikipedia.org/wiki/Group_(periodic_table) (last accessed Sept. 12th 2019)
period_1 = ['H', 'He']
period_2 = ['Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne']
period_3 = ['Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar']
period_4 = ['K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu',
'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr']
period_5 = ['Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh',
'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', ' Te', 'I', 'Xe']
period_6 = ['Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd',
'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re',
'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn']
period_7 = ['Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk',
'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs',
'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og']
periods_dict = {'period_1': period_1, 'period_2': period_2, 'period_3': period_3,
'period_4': period_4, 'period_5': period_5, 'period_6': period_6,
'period_7': period_7}
# Group definitions for all element symbols
# Data from https://en.wikipedia.org/wiki/Group_(periodic_table) (last accessed Sept. 12th 2019)
hydrogen = ['H'] # Note H not typically included in group 1
group_1 = ['Li', 'Na', 'K', 'Rb', 'Cs', 'Fr']
group_2 = ['Be', 'Mg', 'Ca', 'Sr', 'Ba', 'Ra']
group_3 = ['Sc', 'Y'] # Some IUPAC Initiatives to call either 'La' and 'Ac' grp 3 or 'Lu' and 'Lr
group_4 = ['Ti', 'Zr', 'Hf', 'Rf']
group_5 = ['V', 'Nb', 'Ta', 'Db']
group_6 = ['Cr', 'Mo', 'W', 'Sg']
group_7 = ['Mn', 'Tc', 'Re', 'Bh']
group_8 = ['Fe', 'Ru', 'Os', 'Hs']
group_9 = ['Co', 'Rh', 'Ir', 'Mt']
group_10 = ['Ni', 'Pd', 'Pt', 'Ds']
group_11 = ['Cu', 'Ag', 'Au', 'Rg']
group_12 = ['Zn', 'Cd', 'Hg', 'Cn']
group_13 = ['B', 'Al', 'Ga', 'In', 'Tl', 'Nh']
group_14 = ['C', 'Si', 'Ge', 'Sn', 'Pb', 'Fl']
group_15 = ['N', 'P', 'As', 'Sb', 'Bi', 'Mc']
group_16 = ['O', 'S', 'Se', 'Te', 'Po', 'Lv']
group_17 = ['F', 'Cl', 'Br', 'I', 'At', 'Ts']
group_18 = ['He', 'Ne', 'Ar', 'Kr', 'Xe', 'Rn', 'Og']
lanthanides = ['La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy',
'Ho', 'Er', 'Tm', 'Yb', 'Lu']
actinides = ['Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf',
'Es', 'Fm', 'Md', 'No', 'Lr']
groups_dict = {
'group_1': group_1, 'group_2': group_2, 'group_3': group_3,
'group_4': group_4, 'group_5': group_5, 'group_6': group_6,
'group_7': group_7, 'group_8': group_8, 'group_9': group_9,
'group_10': group_10, 'group_11': group_11, 'group_12': group_12,
'group_13': group_13, 'group_14': group_14, 'group_15': group_15,
'group_16': group_16, 'group_17': group_17, 'group_18': group_18,
'lanthanides': lanthanides, 'actinides': actinides, 'hydrogen': hydrogen}
# Metals (includes alkali, alkaline earth, and transition metals)
alkali_and_alkaline_earth = [
'Li', 'li', 'LI', 'lithium', 'Be', 'be', 'BE', 'beryllium',
'Na', 'na', 'NA', 'sodium', 'Mg', 'mg', 'MG', 'magnesium',
'K', 'k', 'potassium', 'Ca', 'ca', 'CA', 'calcium',
'Rb', 'rb', 'RB', 'rubidium', 'Sr', 'sr', 'SR', 'strontium',
'Cs', 'cs', 'CS', 'cesium', 'Ba', 'ba', 'BA', 'barium',
'Fr', 'fr', 'FR', 'francium', 'Ra', 'ra', 'RA', 'radium']
heavy_metals_and_metalloids = [
'Al', 'al', 'AL', 'aluminum', 'aluminium',
'Ga', 'ga', 'GA', 'gallium', 'Ge', 'ge', 'GE', 'germanium',
'As', 'as', 'AS', 'arsenic', 'In', 'in', 'IN', 'indium',
'Sn', 'sn', 'SN', 'tin', 'Sb', 'sb', 'SB', 'antimony',
'Te', 'te', 'TE', 'tellurium', 'Tl', 'tl', 'TL', 'thallium',
'Pb', 'pb', 'PB', 'lead', 'Bi', 'bi', 'BI', 'bismuth',
'Po', 'po', 'PO', 'polonium', 'At', 'at', 'AT', 'astatine',
'La', 'la', 'LA', 'lanthanum',
'Ce', 'ce', 'CE', 'cerium', 'Pr', 'pr', 'PR', 'praseodymium',
'Nd', 'nd', 'ND', 'neodymium', 'Pm', 'pm', 'PM', 'promethium',
'Sm', 'sm', 'SM', 'samarium', 'Eu', 'eu', 'EU', 'europium',
'Gd', 'gd', 'GD', 'gadolinium', 'Tb', 'tb', 'TB', 'terbium',
'Dy', 'dy', 'DY', 'dysprosium', 'Ho', 'ho', 'HO', 'holmium',
'Er', 'er', 'ER', 'erbium', 'Tm', 'tm', 'TM', 'thulium',
'Yb', 'yb', 'YB', 'ytterbium', 'Lu', 'lu', 'LU', 'lutetium',
'Ac', 'ac', 'AC', 'actinium', 'Th', 'th', 'TH', 'thorium',
'Pa', 'pa', 'PA', 'protactinium', 'U', 'u', 'uranium',
'Np', 'np', 'NP', 'neptunium', 'Pu', 'pu', 'PU', 'plutonium',
'Am', 'am', 'AM', 'americium', 'Cm', 'cm', 'CM', 'curium',
'Bk', 'bk', 'BK', 'berkelium', 'Cf', 'cf', 'CF', 'californium',
'Es', 'es', 'ES', 'einsteinium', 'Fm', 'fm', 'FM', 'fermium',
'Md', 'md', 'MD', 'mendelevium', 'No', 'no', 'NO', 'nobelium',
'Lr', 'lr', 'LR', 'lawrencium']
# ## The metals list below contains only TMs. See metalslist function for logic.
metalslist = [
'Sc', 'sc', 'SC', 'scandium', 'Ti', 'ti', 'TI', 'titanium',
'V', 'v', 'vanadium', 'Cr', 'cr', 'CR', 'chromium',
'Mn', 'mn', 'MN', 'manganese', 'Fe', 'fe', 'FE', 'iron',
'Co', 'co', 'CO', 'cobalt', 'Ni', 'ni', 'NI', 'nickel',
'Cu', 'cu', 'CU', 'copper', 'Zn', 'zn', 'ZN', 'zinc',
'Y', 'y', 'yttrium', 'Zr', 'zr', 'ZR', 'zirconium',
'Nb', 'nb', 'NB', 'niobium', 'Mo', 'mo', 'MO', 'molybdenum',
'Tc', 'tc', 'TC', 'technetium', 'Ru', 'ru', 'RU', 'ruthenium',
'Rh', 'rh', 'RH', 'rhodium', 'Pd', 'pd', 'PD', 'palladium',
'Ag', 'ag', 'AG', 'silver', 'Cd', 'cd', 'CD', 'cadmium',
'Hf', 'hf', 'HF', 'hafnium', 'Ta', 'ta', 'TA', 'tantalum',
'W', 'w', 'tungsten', 'Re', 're', 'RE', 'rhenium',
'Os', 'os', 'OS', 'osmium', 'Ir', 'ir', 'IR', 'iridium',
'Pt', 'pt', 'PT', 'platinum', 'Au', 'au', 'AU', 'gold',
'Hg', 'hg', 'HG', 'mercury',
]
metals_conv = {
'scandium': 'Sc', 'titanium': 'Ti', 'vanadium': 'V', 'chromium': 'Cr',
'manganese': 'Mn', 'iron': 'Fe', 'cobalt': 'Co', 'nickel': 'Ni',
'copper': 'Cu', 'zinc': 'Zn', 'yttrium': 'Y', 'zirconium': 'Zr',
'niobium': 'Nb', 'molybdenum': 'Mo', 'technetium': 'Tc',
'ruthenium': 'Ru', 'rhodium': 'Rh', 'palladium': 'Pd', 'silver': 'Ag',
'cadmium': 'Cd', 'lanthanum': 'La', 'hafnium': 'Hf', 'tantalum': 'Ta',
'tungsten': 'W', 'rhenium': 'Re', 'osmium': 'Os', 'iridium': 'Ir',
'platinum': 'Pt', 'gold': 'Au', 'mercury': 'Hg'}
# d-electron counts of transition metals
mtlsdlist = {'sc': 1, 'ti': 2, 'v': 3, 'cr': 4, 'mn': 5, 'fe': 6, 'co': 7, 'ni': 8, 'cu': 9, 'zn': 10,
'y': 1, 'zr': 2, 'nb': 3, 'mo': 4, 'tc': 5, 'ru': 6, 'rh': 7, 'pd': 8, 'ag': 9, 'cd': 10,
'hf': 2, 'ta': 3, 'w': 4, 're': 5, 'os': 6, 'ir': 7, 'pt': 8, 'au': 9, 'hg': 10}
# Default spins for each d-electron count (make this metal/oxidation state specific)
defaultspins = {0: '1', 1: '2', 2: '3', 3: '4', 4: '5',
5: '6', 6: '5', 7: '4', 8: '3', 9: '2', 10: '1'}
# Elements sorted by atomic number
elementsbynum = ['H', 'He',
'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne',
'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar',
'K', 'Ca',
'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr',
'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I',
'Xe',
'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu',
'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn',
'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr',
'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og']
# Electronegativity (Pauling) by atom symbol
endict = {"H": 2.20, "He": 4.16,
"Li": 0.98, "Be": 1.57, "B": 2.04, "C": 2.55, "N": 3.04, "O": 3.44, "F": 3.98,
"Na": 0.93, "Mg": 1.31, "Al": 1.61, "Si": 1.90, "P": 2.19, "S": 2.58, "Cl": 3.16,
"K": 0.82, "Ca": 1.00, "Sc": 1.36, "Ti": 1.54, "V": 1.63, "Cr": 1.66,
"Mn": 1.55, "Fe": 1.83, "Co": 1.88, "Ni": 1.91, "Cu": 1.90, "Zn": 1.65, "Ga": 1.81,
"Ge": 2.01, "As": 2.18, "Se": 2.55, "Br": 2.96, "Rb": 0.82, "Sr": 0.95, "Y": 1.22,
"Zr": 1.33, "Nb": 1.60, "Mo": 2.16, "Tc": 2.10, "Ru": 2.20, "Rh": 2.28,
"Pd": 2.20, "Ag": 1.93, "Cd": 1.69, "In": 1.78, "Sn": 1.96, "Sb": 2.05, "I": 2.66,
"Cs": 0.79, "Ba": 0.89, "Hf": 1.30, "Ta": 1.50, "W": 2.36, "Re": 1.90, "Os": 2.20, "Ir": 2.20,
"Pt": 2.28, "Au": 2.54, "Hg": 2.00, "Tl": 1.62, "Pb": 2.33, "Bi": 2.02,
"La": 1.10, "Ce": 1.12, "Pr": 1.13, "Nd": 1.14, "Sm": 1.17,
"Gd": 1.20, "Dy": 1.22, "Ho": 1.23, "Er": 1.24, "Tm": 1.25, "Lu": 1.27,
"Fr": 0.7, "Ra": 0.9, "Ac": 1.1, "Th": 1.3, "Pa": 1.5, "U": 1.38, "Np": 1.36, "Pu": 1.28,
"Am": 1.3, "Cm": 1.3, "Bk": 1.3, "Cf": 1.3, "Es": 1.3, "Fm": 1.3, "Md": 1.3, "No": 1.3,
"Yb": 1.1, "Eu": 1.2, "Tb": 1.1, "Te": 2.10}
# Polarizability (alpha) by atom symbol
# From https://www.tandfonline.com/doi/full/10.1080/00268976.2018.1535143
# Last accessed 4/28/20
poldict = {"H": 4.50711, "He": 1.38375,
"Li": 164.1125, "Be": 37.74, "B": 20.5, "C": 11.3, "N": 7.4,
"O": 5.3, "F": 3.74, "Ne": 2.66, "Na": 162.7, "Mg": 71.2, "Al": 57.8, "Si": 37.3, "P": 25,
"S": 19.4, "Cl": 14.6, "Ar": 11.083, "K": 289.7, "Ca": 160.8, "Sc": 97, "Ti": 100,
"V": 87, "Cr": 83, "Mn": 68, "Fe": 62, "Co": 55, "Ni": 49, "Cu": 46.5, "Zn": 38.67,
"Ga": 50, "Ge": 40, "As": 30, "Se": 28.9, "Br": 21, "Kr": 16.78, "Rb": 319.8, "Sr": 197.2,
"Y": 162, "Zr": 112, "Nb": 98, "Mo": 87, "Tc": 79, "Ru": 72, "Rh": 66, "Pd": 26.14,
"Ag": 55, "Cd": 46, "In": 65, "Sn": 53, "Sb": 43, "Te": 38, "I": 32.9, "Xe": 27.32,
"Cs": 400.9, "Ba": 272, "La": 215, "Ce": 205, "Pr": 216, "Nd": 208, "Pm": 200, "Sm": 192,
"Eu": 184, "Gd": 158, "Tb": 170, "Dy": 163, "Ho": 156, "Er": 150, "Tm": 144,
"Yb": 139, "Lu": 137, "Hf": 103, "Ta": 74, "W": 68, "Re": 62, "Os": 57, "Ir": 54,
"Pt": 48, "Au": 36, "Hg": 33.91, "Tl": 50, "Pb": 47, "Bi": 48, "Po": 44, "At": 42,
"Rn": 35, "Fr": 317.8, "Ra": 246, "Ac": 203, "Th": 217, "Pa": 154, "U": 129, "Np": 151, "Pu": 132,
"Am": 131, "Cm": 144, "Bk": 125, "Cf": 122, "Es": 118, "Fm": 113, "Md": 109, "No": 110,
"Lr": 320, "Rf": 112, "Db": 42, "Sg": 40, "Bh": 38, "Hs": 36, "Mt": 34, "Ds": 32,
"Rg": 32, "Cn": 28, "Nh": 29, "Fl": 31, "Mc": 71, "Ts": 76, "Og": 58}
# Roman numerals
romans = {'I': '1', 'II': '2', 'III': '3', 'IV': '4',
'V': '5', 'VI': '6', 'VII': '7', 'VIII': '8'}
# bondsdict
bondsdict = {"H": 1, "Li": 1, "Be": 2, "B": 3, "C": 4, "N": 3, "O": 2, "F": 1,
"Na": 1, "Mg": 2, "Al": 3, "Si": 4, "P": 3, "S": 2, "Cl": 1,
"As": 3, "Se": 2, "Br": 1, "I": 1, "He": 2}
# triple bonds dictionary: Defined as 0.5*(double bond dist + triple bond dist)
# bond lengths are from http://www.wiredchemist.com/chemistry/data/bond_energies_lengths.html
tribonddict = {("C", "C"): 1.27, ("C", "N"): 1.235, ("C", "O"): 1.165, ("N", "N"): 1.175,
("N", "C"): 1.235, ("O", "C"): 1.165}
# Amino acids
amino_acids = {"ALA": "ALA", "A": "ALA",
"ARG": "ARG", "R": "ARG", "ARN": "ARG",
"ASN": "ASN", "N": "ASN",
"ASP": "ASP", "D": "ASP", "ASH": "ASP",
"CYS": "CYS", "C": "CYS", "CYS2": "CYS", "CYM": "CYS",
"CYX": "CYS", "GLU": "GLU", "E": "GLU", "GLH": "GLU",
"GLN": "GLN", "Q": "GLN", 'AGLN': 'GLN', 'BGLN': 'GLN',
"GLY": "GLY", "G": "GLY",
"HIS": "HIS", 'H': "HIS", "HID": "HIS", "HIE": "HIS",
"HIP": "HIS", "HSE": "HIS", "HSD": "HIS", "HSP": "HIS",
"ILE": "ILE", "I": "ILE", "LEU": "LEU", "L": "LEU",
"LYS": "LYS", "K": "LYS", "LYN": "LYS",
"MET": "MET", "M": "MET", "AMET": "MET", "BMET": "MET",
"PHE": "PHE", "F": "PHE", "PRO": "PRO", "P": "PRO",
"SER": "SER", "S": "SER", "ASER": "SER", "BSER": "SER",
"THR": "THR", 'T': "THR", "TRP": "TRP", "W": "TRP",
"TYR": "TYR", "Y": 'TYR',
"VAL": "VAL", 'V': "VAL", 'AVAL': 'VAL', 'BVAL': 'VAL'
}
# Common heteromolecules
het_mols = ['TAU', 'AKG', 'FE2', 'HOH', 'NAG', 'BMA', 'MAN', 'ACE', 'ACY', 'FE',
'HEM', 'BLE', 'MG', 'BGC', 'WAT', 'CA', 'CL1']
# ---Geo_Check_Metrics------
dict_oct_check_loose = {"mono": {'num_coord_metal': 6,
'rmsd_max': 0.4, 'atom_dist_max': 0.6,
'oct_angle_devi_max': 16, 'max_del_sig_angle': 27,
'dist_del_eq': 0.45, 'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40},
"multi": {'num_coord_metal': 6,
'rmsd_max': 4, 'atom_dist_max': 0.6,
'oct_angle_devi_max': 20, 'max_del_sig_angle': 35,
'dist_del_eq': 0.45, 'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40}
}
dict_oct_check_st = {"mono": {'num_coord_metal': 6,
'rmsd_max': 0.3, 'atom_dist_max': 0.45,
'oct_angle_devi_max': 12, 'max_del_sig_angle': 22.5,
'dist_del_eq': 0.35, 'dist_del_all': 1.0,
'devi_linear_avrg': 20, 'devi_linear_max': 28},
"multi": {'num_coord_metal': 6,
'rmsd_max': 3, 'atom_dist_max': 0.45,
'oct_angle_devi_max': 20, 'max_del_sig_angle': 36,
'dist_del_eq': 0.35, 'dist_del_all': 1.0,
'devi_linear_avrg': 20, 'devi_linear_max': 28}
}
dict_oneempty_check_st = {"mono": {'num_coord_metal': 5,
'rmsd_max': 0.4, 'atom_dist_max': 0.7,
'oct_angle_devi_max': 15, 'max_del_sig_angle': 18,
'dist_del_eq': 0.5, 'dist_del_all': 1,
'devi_linear_avrg': 10, 'devi_linear_max': 20},
"multi": {'num_coord_metal': 5,
'rmsd_max': 0.4, 'atom_dist_max': 0.7,
'oct_angle_devi_max': 15, 'max_del_sig_angle': 18,
'dist_del_eq': 0.5, 'dist_del_all': 1,
'devi_linear_avrg': 10, 'devi_linear_max': 20}
}
dict_oneempty_check_loose = {"mono": {'num_coord_metal': 5,
'rmsd_max': 0.6, 'atom_dist_max': 0.9,
'oct_angle_devi_max': 20, 'max_del_sig_angle': 27,
'dist_del_eq': 0.6, 'dist_del_all': 1.2,
'devi_linear_avrg': 15, 'devi_linear_max': 28},
"multi": {'num_coord_metal': 5,
'rmsd_max': 0.6, 'atom_dist_max': 0.9,
'oct_angle_devi_max': 20, 'max_del_sig_angle': 27,
'dist_del_eq': 0.6, 'dist_del_all': 1.2,
'devi_linear_avrg': 15, 'devi_linear_max': 28}
}
dict_tetra_check_loose = {"mono": {'num_coord_metal': 4, 'rmsd_max': 0.4,
'oct_angle_devi_max': 16, 'max_del_sig_angle': 27,
'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40},
"multi": {'num_coord_metal': 4, 'rmsd_max': 0.4,
'oct_angle_devi_max': 16, 'max_del_sig_angle': 27,
'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40}
}
dict_tetra_check_st = {"mono": {'num_coord_metal': 4, 'rmsd_max': 0.3,
'oct_angle_devi_max': 12, 'max_del_sig_angle': 22.5,
'dist_del_all': 1,
'devi_linear_avrg': 20, 'devi_linear_max': 28},
"multi": {'num_coord_metal': 4, 'rmsd_max': 0.3,
'oct_angle_devi_max': 12, 'max_del_sig_angle': 22.5,
'dist_del_all': 1,
'devi_linear_avrg': 20, 'devi_linear_max': 28}
}
dict_eightcoord_check = {"mono": {'num_coord_metal': 8,
'rmsd_max': 0.4, 'atom_dist_max': 0.6,
'oct_angle_devi_max': 16, 'max_del_sig_angle': 27,
'dist_del_eq': 0.45, 'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40},
"multi": {'num_coord_metal': 8,
'rmsd_max': 0.4, 'atom_dist_max': 0.6,
'oct_angle_devi_max': 20, 'max_del_sig_angle': 35,
'dist_del_eq': 0.45, 'dist_del_all': 1.25,
'devi_linear_avrg': 35, 'devi_linear_max': 40}
}
dict_status = {'good': 1, 'bad': 0}
oct_angle_ref = [[90, 90, 90, 90, 180] for x in range(6)]
tetra_angle_ref = [[109.47, 109.47, 109.47] for x in range(4)]
oneempty_angle_ref = [[90, 90, 90, 90], [180, 90, 90, 90], [180, 90, 90, 90],
[180, 90, 90, 90], [180, 90, 90, 90]]
eightcoord_angle_ref = [[73.7, 73.7, 76.8, 76.8, 116.1, 142.1, 142.1] for x in range(8)]
geo_check_dictionary = {"dict_oct_check_loose": dict_oct_check_loose,
"dict_oct_check_st": dict_oct_check_st,
"dict_oneempty_check_st": dict_oneempty_check_st,
"dict_oneempty_check_loose": dict_oneempty_check_loose,
"dict_status": dict_status,
"oct_angle_ref": oct_angle_ref,
"oneempty_angle_ref": oneempty_angle_ref,
"eightcoord_angle_ref": eightcoord_angle_ref}
all_geometries = {
2: ["linear", "bent"],
3: ["trigonal planar", "T shape", "trigonal pyramidal"],
4: ["tetrahedral", "square planar", "seesaw"],
5: ["trigonal bipyramidal", "square pyramidal", "pentagonal planar"],
6: ["octahedral", "pentagonal pyramidal", "trigonal prismatic"],
7: ["pentagonal bipyramidal"],
8: ["square antiprismatic"],
9: ["tricapped trigonal prismatic"]
}
all_angle_refs = {
"linear": [[180] for x in range(2)],
"bent": [[120] for x in range(2)],
"trigonal planar": [[120, 120] for x in range(3)],
"T shape": [[90, 90], [90, 180], [90, 180]],
"tetrahedral": [[109.47, 109.47, 109.47] for x in range(4)],
"square planar": [[90, 90, 180] for x in range(4)],
"seesaw": [[90, 90, 180] for x in range(2)] + [[90, 90, 120] for x in range(2)],
"trigonal pyramidal": [[109.5, 109.5] for x in range(3)],
"trigonal bipyramidal": [[90, 90, 90, 180] for x in range(2)] + [[120, 120, 90, 90] for x in range(3)],
"square pyramidal": [[90, 90, 90, 90]] + [[180, 90, 90, 90] for x in range(4)],
"pentagonal planar": [[36, 36, 72, 72] for x in range(5)],
"octahedral": [[90, 90, 90, 90, 180] for x in range(6)],
"pentagonal pyramidal": [[90, 90, 90, 90, 90]] + [[36, 36, 72, 72, 90] for x in range(5)],
"trigonal prismatic": [[75.3, 86.5, 86.5, 133.3, 133.3] for x in range(6)],
"pentagonal bipyramidal": [[90, 90, 90, 90, 90, 180] for x in range(2)] +
[[72, 72, 144, 144, 90, 90] for x in range(5)],
"square antiprismatic": [[73.7, 73.7, 76.8, 76.8, 116.1, 142.1, 142.1] for x in range(8)],
"tricapped trigonal prismatic": [[70.5, 70.5, 120, 67.7, 67.7, 135.5, 135.5, 120] for x in range(4)] +
[[76.3, 79, 138.2, 70.5, 67.7, 76.3, 138.2, 135.5] for x in range(4)] +
[[70.5, 70.5, 67.7, 67.7, 120, 120, 135.5, 135.5]]
}
#need each point to be distance 1 from the origin
deg_to_rad = 2*np.pi / 360
all_polyhedra = {
"linear": np.array([(1, 0, 0), (-1, 0, 0)]),
"bent": np.array([(1, 0, 0), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 0)]),
"trigonal planar": np.array([(1, 0, 0), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 0), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), 0)]),
"T shape": np.array([(1, 0, 0), (np.cos(90*deg_to_rad), np.sin(90*deg_to_rad), 0), (np.cos(180*deg_to_rad), np.sin(180*deg_to_rad), 0)]),
"trigonal pyramidal": np.array([(1, -1, -1), (-1, 1, -1), (-1, -1, 1)])/np.sqrt(3),
"tetrahedral": np.array([(1, 1, 1), (1, -1, -1), (-1, 1, -1), (-1, -1, 1)])/np.sqrt(3),
"square planar": np.array([(1, 0, 0), (0, 1, 0), (-1, 0, 0), (0, -1, 0)]),
"seesaw": np.array([(1, 0, 0), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 0), (0, 0, 1), (0, 0, -1)]),
"trigonal bipyramidal": np.array([(0, 0, 1), (0, 0, -1), (1, 0, 0), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 0), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), 0)]),
"square pyramidal": np.array([(1, 0, 0), (0, 1, 0), (-1, 0, 0), (0, -1, 0), (0, 0, 1)]),
"pentagonal planar": np.array([(1, 0, 0), (np.cos(72*deg_to_rad), np.sin(72*deg_to_rad), 0), (np.cos(144*deg_to_rad), np.sin(144*deg_to_rad), 0), (np.cos(216*deg_to_rad), np.sin(216*deg_to_rad), 0), (np.cos(288*deg_to_rad), np.sin(288*deg_to_rad), 0)]),
"octahedral": np.array([(1, 0, 0), (0, 1, 0), (-1, 0, 0), (0, -1, 0), (0, 0, 1), (0, 0, -1)]),
"pentagonal pyramidal": np.array([(1, 0, 0), (np.cos(72*deg_to_rad), np.sin(72*deg_to_rad), 0), (np.cos(144*deg_to_rad), np.sin(144*deg_to_rad), 0), (np.cos(216*deg_to_rad), np.sin(216*deg_to_rad), 0), (np.cos(288*deg_to_rad), np.sin(288*deg_to_rad), 0), (0, 0, 1)]),
"trigonal prismatic": np.array([(1, 0, 1), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 1), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), 1), (1, 0, -1), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), -1), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), -1)])/np.sqrt(2),
"pentagonal bipyramidal": np.array([(1, 0, 0), (np.cos(72*deg_to_rad), np.sin(72*deg_to_rad), 0), (np.cos(144*deg_to_rad), np.sin(144*deg_to_rad), 0), (np.cos(216*deg_to_rad), np.sin(216*deg_to_rad), 0), (np.cos(288*deg_to_rad), np.sin(288*deg_to_rad), 0), (0, 0, 1), (0, 0, -1)]),
"square antiprismatic": np.array([(1, 0, 1), (0, 1, 1), (-1, 0, 1), (0, -1, 1), (np.cos(45*deg_to_rad), np.sin(45*deg_to_rad), -1), (np.cos(135*deg_to_rad), np.sin(135*deg_to_rad), -1), (np.cos(225*deg_to_rad), np.sin(225*deg_to_rad), -1), (np.cos(315*deg_to_rad), np.sin(315*deg_to_rad), -1)])/np.sqrt(2),
"tricapped trigonal prismatic": np.array([(1, 0, 1)/np.sqrt(2), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), 1)/np.sqrt(2), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), 1)/np.sqrt(2), (1, 0, -1)/np.sqrt(2), (np.cos(120*deg_to_rad), np.sin(120*deg_to_rad), -1)/np.sqrt(2), (np.cos(240*deg_to_rad), np.sin(240*deg_to_rad), -1)/np.sqrt(2), (np.cos(60*deg_to_rad), np.sin(60*deg_to_rad), 0), (np.cos(180*deg_to_rad), np.sin(180*deg_to_rad), 0), (np.cos(300*deg_to_rad), np.sin(300*deg_to_rad), 0)])
}
# Module for running bash commands
# @param cmd String containing command to be run
# @return bash output string
def mybash(cmd):
"""Function to run a bash command.
Parameters
----------
cmd : str
String containing command to be run
Returns
-------
output : str
bash output string
"""
p = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = p.communicate()
lines = stdout.decode('utf-8').splitlines()
lines = [line+"\n" for line in lines if line !=""]
return ''.join(lines)
# Get current version of molSimplify
# @return version string
def get_version():
# https://stackoverflow.com/questions/20180543/how-do-i-check-the-versions-of-python-modules
# If Python >= 3.8
if sys.version_info[0] >= 3 and sys.version_info[1] >= 8:
from importlib.metadata import version
return version('molSimplify')
# Otherwise, have an older version of Python
else:
return '1.7.6+'
# Defines global variables used throughout the code
class globalvars(metaclass=Singleton):
"""Globalvars class. Defines global variables used throughout the code, including periodic table.
"""
def __init__(self):
# Program name
self.PROGRAM = 'molSimplify'
s = f'''
molSimplify v{get_version()}
Freely distributed under the GNU GPL license.
Copyright 2017 Kulik Lab @ MIT
Developed by: Efthymios Ioannidis
Contributions by:
\tHeather J. Kulik (corresponding developer; hjkulik@mit.edu)
\tNaveen Arunachalam
\tChenru Duan
\tFreya Edholm
\tTerry Gani
\tDaniel Harper
\tJP Janet
\tFang Liu
\tRalf Meyer
\tAditya Nandy
\tMichael Taylor
\tGianmarco Terrones
\tTzuhsiung (Nick) Yang
E.I. Ioannidis, T.Z.H. Gani, H.J. Kulik. J. Comput. Chem. 2016, 37, 2106-2117.
J.P. Janet, Q. Zhao, E.I. Ioannidis, H.J. Kulik. Mol. Simul. 2017, 43(5-6), 327-345.
J.P. Janet, T.Z.H. Gani, A.H. Steeves, E.I. Ioannidis, H.J. Kulik. Ind. Eng. Chem. Res. 2017, 56(17), 4898-4910.
G.G. Terrones, R.G. St. Michel, J.W. Toney, A.K. Ball, Y. Wang, A.G. Garrison, A. Nandy, R. Meyer, F. Edholm, C. Oh, S.G. Pujet, D.B.K. Chu, D. Muhammetgulyyev, H.J. Kulik. J. Chem. Inf. Model. 2026, 66(5), 2753-2767.
For an extended list of references, please see https://molsimplify.readthedocs.io/en/latest/Citation.html
'''.rstrip('\n')
# About message
self.about = s
# ##### GET INFORMATION ######
runfromcmd = False
try:
# ## check if running through commandline ###
if sys.stdin.isatty():
# running through command line
runfromcmd = True
else:
runfromcmd = False
except AttributeError: # if sys.stdin does not have an isatty method
runfromcmd = True
# ## get running os ###
self.linux, self.osx = False, False
if platform.system().lower() in 'linux':
self.linux = True
elif platform.system().lower() in 'darwin':
self.osx = True
# get cwd
# script filename (usually with path)
_ = inspect.getfile(inspect.currentframe())
cdir2 = os.path.dirname(os.path.abspath(
inspect.getfile(inspect.currentframe()))) # script directory
cdir = cdir2.rsplit('/', 1)[0]
# unused:
# cdir2 = cdir
homedir = os.path.expanduser("~")
# create default molSimplify for mac
if self.osx and not glob.glob(homedir + '/.' + self.PROGRAM) and not runfromcmd:
txt = 'INSTALLDIR=/Applications/' + self.PROGRAM + '.app/Contents/Resources\n'
with open(homedir + '/.' + self.PROGRAM, 'w') as fout:
fout.write(txt)
self.chemdbdir = ''
self.multiwfn = ''
self.custom_path = False
self.molsimplify_config_path = homedir + '/.' + self.PROGRAM
# ##### check for ~/.molSimplify ######
if glob.glob(homedir + '/.' + self.PROGRAM):
with open(homedir + '/.' + self.PROGRAM, 'r') as fin:
s = [_f for _f in fin.read().splitlines() if _f]
d = dict()
for ss in s:
sp = [_f for _f in ss.split('=') if _f]
try:
d[sp[0]] = sp[1]
except IndexError:
pass
if 'CHEMDBDIR' in list(d.keys()):
self.chemdbdir = d['CHEMDBDIR']
if 'MULTIWFN' in list(d.keys()):
self.multiwfn = "'" + d['MULTIWFN'] + "'"
if 'CUSTOM_DATA_PATH' in list(d.keys()):
self.custom_path = d['CUSTOM_DATA_PATH']
else:
self.installdir = cdir
with open(homedir + '/.' + self.PROGRAM, 'w') as fout:
fout.write('CHEMDBDIR=\n')
# Home directory
self.homedir = homedir
# Number of smiles ligands
self.nosmiles = 0
# Jobs directory
self.rundir = homedir + '/Runs/'
# Number of generated structures
self.generated = 0
# Additional debug output
self.debug = False
# SMARTS patterns for forced hydrogen removal
self.remHsmarts = ["O=CN", "O=CO", "n", "N=CN", "nN"]
# Default geometries for each coordination number if none specified
self.defaultgeometry = {8: ('sqap', 'square_antiprismatic'), 7: ('pbp', 'pentagonal_bipyramidal'),
6: ('oct', 'octahedral'), 5: ('tbp', 'trigonal bipyramidal'), 4: ('thd', 'tetrahedral'),
3: ('tpl', 'trigonal planar'), 2: ('li', 'linear'), 1: ('one', 'one')}
# Default oxidation states for elements
self.defaultoxstate = {
'au': 'I', 'gold': 'I', 'scandium': 'III', 'sc': 'III', 'ti': 'IV', 'titanium': 'IV'}
# bent "linear" angle in degrees, e.g., in Fe(III)-superoxo or a bent nitrosyl
self.linearbentang = 45
# Returns atomic mass dictionary
# @param self The object pointer
# @return Atomic mass dictionary
def amass(self) -> Dict[str, Tuple[float, int, float, int]]:
"""Get the atomic mass dictionary.
Returns
-------
amassdict : dict
Dictionary containing atomic masses.
"""
return amassdict
def polarizability(self) -> Dict[str, float]:
"""Get the polarizability dictionary.
Returns
-------
poldict : dict
Dictionary containing polarizabilities.
"""
return poldict
def tribonddict(self):
"""Get the triple bond dictionary.
Returns
-------
tribonddict : dict
Dictionary containing triple bond lengths.
"""
return tribonddict
def bondsdict(self):
"""Get the bond dictionary.
Returns
-------
bondsdict : dict
Dictionary containing bond lengths.
"""
return bondsdict
def elementsbynum(self):
"""Returns list of elements by number
Returns
-------
elementsbynum : list
List of elements by number
"""
return elementsbynum
def endict(self):
"""Returns electronegativity dictionary.
Returns
-------
endict : list
Electronegativity dictionary
"""
return endict
def vdwrad(self):
"""Returns VDW dictionary.
Returns
-------
vdwrad : list
Dictionary of VDW radii.
"""
return vdwrad
def metalslist(self, transition_metals_only=True, include_X=False):
"""Get the metals list.
Parameters
----------
transition_metals_only : bool, optional
Identify only transition metals.
Default is true.
include_X : bool, optional
Whether "X" atoms are considered metals.
Default is False.
Returns
-------
complete_metals_list : list
List of available metals.
"""
complete_metals_list = metalslist.copy()
if include_X:
complete_metals_list.extend(['X', 'x'])
if not transition_metals_only:
complete_metals_list.extend(alkali_and_alkaline_earth)
complete_metals_list.extend(heavy_metals_and_metalloids)
return complete_metals_list
def groups(self):
"""Returns dict of elements by groups.
Returns
-------
groups_dict : dict
Groups dictionary.
"""
return groups_dict
def periods(self):
"""Returns dict of elements by periods.
Returns
-------
periods_dict : dict
Periods dictionary.
"""
return periods_dict
def geo_check_dictionary(self):
"""Returns list of geo check objects dictionary.
Returns
-------
geo_check_dictionary : dict
Geo check measurement dictionary.
"""
return geo_check_dictionary
def get_all_geometries(self):
"""Get available geometries.
Returns
-------
all_geometries : list
All available geometries.
"""
return all_geometries
def get_all_angle_refs(self):
"""Get references angle dict.
Returns
-------
all_angle_refs : dict
Reference angles for various geometries.
"""
return all_angle_refs
def get_all_polyhedra(self):
"""Get reference polyhedra dict.
Returns
-------
all_polyhedra : dict
Reference polyhedra for various geometries.
"""
return all_polyhedra
def add_custom_path(self, path):
"""Record custom path in ~/.molSimplify file
Parameters
----------
path : str
Path to custom data ~/.molSimplify file.
"""
homedir = os.path.expanduser("~")
with open(homedir + '/.' + self.PROGRAM, 'a') as f:
f.write('CUSTOM_DATA_PATH=' + str(path) + "\n")
def bbcombs_mononuc(self):
"""Get backbone combinations dictionary
Returns
-------
bbcombs_mononuc : dict
Backbone combination dictionary for different geometries.
"""
bbcombs_mononuc = dict()
bbcombs_mononuc['one'] = [[1]]
bbcombs_mononuc['li'] = [[1], [2]]
bbcombs_mononuc['oct'] = [[1, 2, 3, 4, 5, 6], # 6-dentate
[1, 2, 3, 4, 5], [1, 2, 3, 4, 6], [
1, 2, 3, 5, 6], [1, 2, 4, 5, 6], # 5-dentate
[1, 3, 4, 5, 6], [2, 3, 4, 5, 6], # 5-dentate
[1, 2, 3, 4], [2, 5, 4, 6], [
1, 5, 3, 6], # 4-dentate
[1, 2, 3], [1, 4, 2], [1, 4, 3], [1, 5, 3], [
1, 6, 3], [2, 3, 4], # 3-dentate
[2, 5, 4], [2, 6, 4], [5, 4, 6], [5, 1, 6], [
5, 2, 6], [5, 3, 6], # 3-dentate
[1, 2], [1, 4], [1, 5], [1, 6], [
2, 3], [2, 5], # 2-dentate
[2, 6], [3, 5], [3, 6], [4, 5], [
4, 6], [3, 4], # 2-dentate
[1], [2], [3], [4], [5], [6]] # 1-dentate
bbcombs_mononuc['pbp'] = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 6], # 6/5-dentate
[1, 2, 3, 5], # 4-dentate
[1, 2, 3], [1, 2, 4], [2, 1, 5], [3, 1, 6], [
5, 6, 3], [2, 6, 5], # 3-dentate
[1, 2], [2, 3], [3, 4], [4, 5], [1, 7], [
2, 6], [5, 7], [3, 6], # 2-dentate
[1], [2], [3], [4], [5], [6], [7]] # 1-dentate
bbcombs_mononuc['spy'] = [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3], [2, 3, 4], [3, 4, 1], [4, 1, 2],
[1, 2], [1, 4], [2, 3], [3, 4], [4, 5], [
2, 5], [3, 5], [1, 5], [1], [2], [3], [4],
[5]]
bbcombs_mononuc['sqp'] = [[1, 4, 2, 3], [1, 2, 3], [2, 3, 4], [3, 4, 1], [4, 1, 2], [1, 2], [1, 4], [2, 3],
[3, 4],
[1], [2], [3], [4]]
bbcombs_mononuc['tbp'] = [[1, 2, 3, 4, 5], [1, 3, 4, 5], [3, 2, 4], [4, 5, 3], [5, 1, 3], [4, 5], [5, 3],
[3, 4],
[1, 4], [1, 5], [1, 3], [2, 4], [2, 5], [2, 3], [1], [2], [3], [4], [5]]
bbcombs_mononuc['thd'] = [[1, 2, 3, 4], [3, 2, 4], [2, 4, 1], [4, 1, 3], [2, 4], [4, 3], [3, 2], [1, 3], [1, 4],
[2, 4], [1], [2], [3], [4]]
bbcombs_mononuc['tpl'] = [[1, 2, 3], [
1, 2], [2, 3], [1, 3], [1], [2], [3]]
bbcombs_mononuc['tpr'] = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5], [1, 2, 5, 4], [5, 2, 3, 6], [1, 4, 6, 3],
[1, 2, 3], [3, 6, 5],
[2, 3], [2, 5], [5, 6], [6, 4], [4, 1], [1], [2], [3], [4], [5], [6]]
return bbcombs_mononuc
def testTF(self):
"""Tests to see whether keras and tensorflow are available.
Returns
-------
tf_flag : bool
True if tensorflow and keras are available.
"""
try:
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
from tensorflow.keras.models import Model # noqa: F401
from tensorflow.keras.models import Sequential # noqa: F401
return True
except ImportError:
return False
def testmatplotlib(self):
"""Tests to see if matplotlib is available
Returns
-------
mpl_flag : bool
True if matplotlib is available
"""
try:
# os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import matplotlib.pyplot as plt # noqa: F401
import matplotlib.ticker as ticker # noqa: F401
return True
except ImportError:
return False
def getAllAAs(self):
""" Gets all amino acids
Returns
-------
amino_acids : dictionary
Dictionary of standard amino acids
"""
return amino_acids
================================================
FILE: molSimplify/Classes/helpers.py
================================================
# @file helpers.py
# Contains some useful helper functions for classes.
#
# Written by HJK Group
#
# Dpt of Chemical Engineering, MIT
from molSimplify.Classes.monomer3D import monomer3D
from molSimplify.Classes.mol3D import mol3D
from molSimplify.Classes.atom3D import atom3D
def read_atom(line):
""" Reads a line of a pdb into an atom dictionary.
Parameters
----------
line : str
a line of a pdb file
Returns
-------
atom_dict : dictionary
dictionary containing attributes of atom when reading the pdb
"""
labels = ['Type', 'SerialNum', 'Name', 'AltLoc', 'ResName', 'ChainID',
'ResSeq', 'ICode', 'X', 'Y', 'Z', 'Occupancy', 'TempFactor',
'Element', 'Charge']
data = [line[0:6].strip(), int(line[6:11]), line[12:16].strip(),
line[16:17].strip(), line[17:20].strip(), line[21:22].strip(),
int(line[22:26]), line[26:27].strip(), float(line[30:38]),
float(line[38:46]), float(line[46:54]), float(line[54:60]),
float(line[60:66]), line[70:78].strip(), line[78:80].strip()]
atom_dict = dict(zip(labels, data))
atom_dict['Element'] = atom_dict['Element'][0] + atom_dict['Element'][1:].lower()
atom_dict["Line"] = line
return atom_dict
def makeMol(a_dict, mols, conf, chains, prev_a_dict, bonds, aa=True):
""" Creates an monomer3D from a_dicts and adds it to the appropriate places.
Parameters
----------
a_dict : dictionary
created from the read_atom method
mols : dictionary
keyed by chain and location, valued by monomer3Ds or mol3Ds
conf : list
contains amino acid conformations
chains : dictionary
contains amino acid chains
prev_a_dict : dictionary
the a_dict from the previous run
bonds : dictionary
contains bonding info
aa : boolean
True if mols consists of monomer3Ds, False if consists of mol3Ds
Returns
-------
mols, conf, chains, prev_a_dict as updated
"""
loc = a_dict['AltLoc']
ploc = prev_a_dict["AltLoc"]
hack = False
hack2 = False
m = 0
key = (a_dict['ChainID'], a_dict['ResSeq'])
if key not in mols.keys():
if aa:
m = monomer3D(a_dict['ResName'], a_dict['ChainID'], a_dict['ResSeq'],
a_dict['Occupancy'], loc)
else:
m = mol3D(a_dict['ResName'], loc)
mols[key] = [m]
elif loc != '' and ploc != '':
li = ord(ploc)
if loc > chr(li) and len(mols[key]) <= li-64:
if aa:
m = monomer3D(a_dict['ResName'], a_dict['ChainID'],
a_dict['ResSeq'], a_dict['Occupancy'], loc)
m.temp_list = mols[key][-1].temp_list
else:
m = mol3D(a_dict['ResName'], loc)
m.temp_list = mols[key][-1].temp_list
if mols[key][-1].loc != loc:
mols[key].append(m)
else:
weirdo = True
for mol in mols[key]:
if mol.loc == loc:
weirdo = False
if weirdo:
if aa:
m = monomer3D(a_dict['ResName'], a_dict['ChainID'],
a_dict['ResSeq'], a_dict['Occupancy'], loc)
m.temp_list = mols[key][-1].temp_list
else:
m = mol3D(a_dict['ResName'], loc)
m.temp_list = mols[key][-1].temp_list
if mols[key][-1].loc != loc:
mols[key].append(m)
elif loc == '':
# atom must be added to multiple conformations
hack = True
elif key in mols.keys() and ploc == '' and len(mols[key]) == 1:
hack2 = True
mols[key][0].setLoc(loc)
mols[key][0].temp_list = mols[key][0].atoms.copy()
prev_a_dict = a_dict
if a_dict['ChainID'] not in chains.keys():
chains[a_dict['ChainID']] = [] # initialize key of chain dictionary
if m != 0 and key not in conf and loc != '' and float(a_dict['Occupancy']) < 1:
conf.append(key)
if m != 0 and m not in chains[a_dict['ChainID']] and key not in conf:
chains[a_dict['ChainID']].append(m)
if loc == '' or ploc == '':
m = mols[key][0]
else:
for i in mols[key]:
if i.loc == loc:
m = i
atom = atom3D(Sym=a_dict['Element'], xyz=[a_dict['X'], a_dict['Y'],
a_dict['Z']],
Tfactor=a_dict['TempFactor'], occup=a_dict['Occupancy'],
greek=a_dict['Name'], line=a_dict['Line'])
if not hack2:
for a in m.temp_list:
if type(a) == tuple:
m.addAtom(a[1], a[0])
else:
m.addAtom(a)
m.temp_list = []
if hack:
for i in mols[key]:
i.addAtom(atom, a_dict['SerialNum'])
else:
m.addAtom(atom, a_dict['SerialNum']) # terminal Os may be missing
if aa:
if atom.greek == "C":
m.c.append(atom)
if atom.greek == "N":
m.n.append(atom)
if key in conf and chains[a_dict['ChainID']] != []:
chains[a_dict['ChainID']] = []
if aa:
m.setBonds()
bonds.update(m.bonds)
if m.prev is None and (a_dict['ChainID'], a_dict['ResSeq'] - 1) in mols.keys():
m.setPrev(mols[(a_dict['ChainID'], a_dict['ResSeq'] - 1)][0])
prev_mol = m.prev
if prev_mol is not None:
if prev_mol.next is None:
prev_mol.setNext(m)
for n in m.n:
for c in prev_mol.c:
bonds[n].add(c)
bonds[c].add(n)
return atom, mols, conf, chains, prev_a_dict, bonds
================================================
FILE: molSimplify/Classes/ligand.py
================================================
# @file ligand.py
# Defines ligand class for postprocessing DFT results by measuring ligand properties
#
# Written by JP Janet for HJK Group
#
# Dpt of Chemical Engineering, MIT
import numpy as np
from itertools import combinations
from molSimplify.Classes.mol3D import mol3D
from molSimplify.Classes.globalvars import bondivdw, vdwrad
from molSimplify.utils.decorators import deprecated
from molSimplify.Scripts.nx_helpers import mol3D_to_networkx
import networkx as nx
# Ligand class for postprocessing DFT results by measuring ligand properties
class ligand:
"""Ligand class for postprocessing DFT results to measure ligand properties.
Parameters
----------
master_mol : mol3D
mol3D class instance for ligand mol.
index_list : list
List for atom indices in master_mol corresponding to ligand.
dent : int
Denticity of the ligand
read_lig : bool, optional
str of file or (xyz/mol2 string) of saved ligand, by default False
Raises
------
ValueError
If read_ligand type is unknown.
"""
def __init__(self, master_mol, index_list, dent, read_lig=False):
if isinstance(read_lig, str):
thismol = mol3D()
if 'TRIPOS' in read_lig:
thismol.readfrommol2(read_lig, readstring=True)
# xyz filename
elif read_lig[-4:] == '.xyz':
thismol.readfromxyz(read_lig)
# mol2 filename
elif read_lig[-5:] == '.mol2':
thismol.readfrommol2(read_lig)
# checking for number at start of string -> indicates xyz string
elif (len(read_lig.split('\n')) > 3) & (read_lig.split('\n')[0].replace(' ', '').isnumeric()):
thismol.readfromxyz(read_lig, readstring=True)
# checking for similar file without header
elif (len(read_lig.split('\n')[0].split()) == 4) and read_lig.split('\n')[0].split()[0]:
thismol.readfromxyz(read_lig, readstring=True)
else:
raise ValueError('Not Recognized Structure Type!')
self.master_mol = thismol
met = thismol.findMetal()[0] # Pull out metal
self.index_list = [x for x in range(thismol.natoms) if x != met]
self.dent = len(thismol.getBondedAtomsSmart(met))
self.ext_int_dict = {i: j for i, j in enumerate(self.index_list)}
self.mol2string = thismol.writemol2('ligand', writestring=True)
self.lig_mol_graph_det = thismol.get_mol_graph_det()
self.percent_buried_volume = False
else:
self.master_mol = master_mol
self.index_list = sorted(index_list)
self.dent = dent
self.ext_int_dict = dict() # store
self.mol2string = False
self.lig_mol_graph_det = False
self.percent_buried_volume = False
def __repr__(self):
if hasattr(self, 'mol'):
return f'ligand({self.mol.make_formula(latex=False)})'
else:
# Default python repr:
return object.__repr__(self)
def obtain_mol3d(self):
"""Getting the mol3D of the ligand. Deprecated. Map between int and ext indcies.
Obtain the ligand from the complex mol3D object.
"""
this_mol = mol3D()
this_ext_int_dict = dict()
j = 0
# the old routine where all atoms in the master_mol are gone through from 0 to natoms-1
# for i in range(0, self.master_mol.natoms):
# if i in self.index_list:
# the new rountine where the indices are taken out directly. This way the order of atoms is preserved
for i in self.index_list:
this_mol.addAtom(self.master_mol.getAtom(i))
this_ext_int_dict.update({i: j})
j += 1 # keep count of how many are added
self.mol = this_mol
if len(self.master_mol.graph): # Save graph to ligand mol3D object
delete_inds = [x for x in range(self.master_mol.natoms) if x not in self.index_list]
self.mol.graph = np.delete(np.delete(self.master_mol.graph, delete_inds, 0), delete_inds, 1)
if self.master_mol.bo_dict:
save_bo_dict = self.master_mol.get_bo_dict_from_inds(self.index_list)
self.mol.bo_dict = save_bo_dict
if hasattr(self.master_mol, 'prop_tensor'):
prop_tensor = np.zeros(shape=(len(self.index_list), len(self.master_mol.prop_name)))
c = 0
for i in self.index_list:
prop_tensor[c, :] = self.master_mol.prop_tensor[i, :]
c += 1
self.mol.prop_tensor = prop_tensor
self.mol.prop_name = self.master_mol.prop_name
self.ext_int_dict = this_ext_int_dict
def get_lig_mol2(self, transition_metals_only=True, inds=None, include_metal=True, bimetal=False):
"""Write out ligand mol2 string and molecular graph determinant.
Include Metal flagged with Symbol "X" for placeholder status.
Parameters
----------
transition_metals_only : bool
flag only transition metals with findMetal() function.
inds : list
indices of metals if passing in multimetal system
Returns
-------
lig_mol_graph_det : str
Molecular graph determinant.
ligand_mol2_string : str
Mol2 string for the ligand.
catoms_indices : list
List of catom (connection atom) indices - only returned if include_metal is set to False. Zero-indexed.
"""
this_mol2 = mol3D()
if inds:
metal_ind = inds
else:
metal_ind = self.master_mol.findMetal(transition_metals_only=transition_metals_only)
this_mol2_inds = self.index_list.copy()
if include_metal:
this_mol2_inds += metal_ind
this_mol2_inds = sorted(this_mol2_inds)
if (not bimetal):
# Set up a binary vector indicating whether each atom is a connecting atom (1) or not (0)
catoms_indices = self.master_mol.getBondedAtomsSmart(metal_ind)
catom_selector = np.zeros(self.master_mol.natoms)
catom_selector[catoms_indices] = 1
# Add the metal with symbol = 'M'
new_metal_inds = []
for j, i in enumerate(this_mol2_inds):
if i in metal_ind:
atom = self.master_mol.getAtom(i)
atom.mutate('X')
this_mol2.addAtom(atom)
new_metal_inds.append(j)
else:
this_mol2.addAtom(self.master_mol.getAtom(i))
if len(self.master_mol.graph): # Save graph to ligand mol3D object
delete_inds = [x for x in range(self.master_mol.natoms) if x not in this_mol2_inds]
this_mol2.graph = np.delete(np.delete(self.master_mol.graph, delete_inds, 0), delete_inds, 1)
if (not bimetal):
catom_selector = np.delete(catom_selector, delete_inds)
catoms_indices = np.nonzero(catom_selector)[0]
# #### Check for multiple metal centers. Save more coordinated one.
if include_metal:
if len(new_metal_inds) == 2:
minds = new_metal_inds
metal_cns = [len(this_mol2.getBondedAtomsSmart(x)) for x in minds]
delind = minds[np.argmin(metal_cns)]
this_mol2.deleteatom(minds[np.argmin(metal_cns)])
del this_mol2_inds[delind]
if self.master_mol.bo_dict:
save_bo_dict = self.master_mol.get_bo_dict_from_inds(this_mol2_inds)
this_mol2.bo_dict = save_bo_dict
try:
lig_mol_graph_det = this_mol2.get_mol_graph_det()
except:
lig_mol_graph_det = None
lig_mol2_string = this_mol2.writemol2('ligand', writestring=True)
self.mol2string = lig_mol2_string
self.lig_mol_graph_det = lig_mol_graph_det
if include_metal or bimetal:
return lig_mol_graph_det, lig_mol2_string
else:
return lig_mol_graph_det, lig_mol2_string, catoms_indices
def percent_buried_vol(self, radius=3.5, gridspec=0.1,
bondiscale=1.17, hydrogens=True):
"""Calculate the percent buried volume as described in https://doi.org/10.1039/B922984A,
and https://chemistry-europe.onlinelibrary.wiley.com/doi/abs/10.1002/ejic.200801160.
Bondi VDW radii are used where possible
Parameters
----------
radius : float, optional
Radius of sphere around metal center consider in Angstroms, by default 3.5
Paper recommends 3.5
gridspec : float, optional
xyz grid spacing in Angstroms, by default 0.1
Paper recommends 0.05 - this is slower
bondiscale : float, optional
Scale of the bondi vdw radii for ligand atoms, by default 1.17
Paper recommends 1.17
hydrogens : bool, optional
Include hydrogens in percent buried volume, by default True
Paper recommends to not include hydrogens.
Returns
-------
percent_buried_volume : float
Percentage of the volume of a sphere around the metal that is buried under ligand atoms.
Represents bulkiness of the ligand around the metal center.
"""
if not self.mol2string:
_, _ = self.get_lig_mol2()
thismol = mol3D()
thismol.readfrommol2(self.mol2string, readstring=True)
# Accounting for hydrogens by default - otherwise deleting.
if not hydrogens:
thismol.deleteHs()
natoms = thismol.natoms
# Catch case where just hydrogen ligand
if natoms == 1:
percent_buried = 0.0
else:
met = thismol.findMetal(include_X=True)[0]
coords = thismol.coordsvect() - thismol.coordsvect()[met] # Center coordinates to the metal
syms = [x for i, x in enumerate(thismol.symvect()) if i != met]
radvect = []
for sym in syms:
if sym in bondivdw: # Take in the bondivdw radii reccomeneded in paper
radvect.append(bondivdw[sym]*bondiscale)
else: # Else take in Newer definition of vdw radii
radvect.append(vdwrad[sym]*bondiscale)
radiusvect = np.array(radvect)
inds = np.array([x for x in range(natoms) if x != met])
coords = coords[inds] # Get rid of metal location from coords
x_ = np.arange(-radius, radius, gridspec)
y_ = np.arange(-radius, radius, gridspec)
z_ = np.arange(-radius, radius, gridspec)
grid = np.meshgrid(x_, y_, z_, indexing='ij')
mgrid = list(map(np.ravel, grid))
combined = np.vstack(mgrid).T # Flatten meshgrid to nx3
init_coords = np.array([[0, 0, 0]]) # We have set metal to (0,0,0)
# Get distance of all gridpoints from (0,0,0) -> Filter out gridpoints further
init_dists = np.linalg.norm(init_coords[:, None, :]-combined[None, :, :], axis=-1)
# Get rid of gridpoints further away than radius and metal
combined = combined[np.where(init_dists[0, :] <= radius)[0]]
# Get rid of ligand atoms that won't interact at all
met_ds = np.linalg.norm(init_coords[:, None, :]-coords[None, :, :], axis=-1)
met_ds = met_ds - radius - radiusvect
mfilter = np.where(met_ds[0] < 0)
coords = coords[mfilter]
radiusvect = radiusvect[mfilter]
# Calc distance of all remaining atomic coords to all grid points
ds = np.linalg.norm(coords[:, None, :]-combined[None, :, :], axis=-1)
# Compare distances to radii of atoms, flag any less than than or equal to the radii as buried
buried = len(np.where(np.any(np.less_equal(ds[:, :], radiusvect[:, None]), axis=0))[0])
total = ds.shape[1]
# Percent buried volume
percent_buried = float(buried)/total*100
self.percent_buried_volume = percent_buried
return percent_buried
def ligand_breakdown(mol, BondedOct=False, silent=True, transition_metals_only=True):
"""Extract axial and equatorial components of an octahedral complex.
Parameters
----------
mol : mol3D
mol3D class instance for the complex.
BondedOct : bool, optional
Enforce octahedral bonding. Default is False.
silent : bool, optional
Silence extra printout. Default is True.
transition_metals_only : bool, optional
Flag if only transition metals counted as metals, by default True.
Returns
-------
liglist : list of list of int
List of ligands.
Length is the number of ligands.
Each inner list contains the global indices of a ligand.
ligdents : list of int
List of ligand denticities.
Length is the number of ligands.
ligcons : list of list of int
List of ligand connection indices (in mol, i.e., global).
Length is the number of ligands.
"""
# This function takes an octahedral
# complex and returns ligands.
metal_index = mol.findMetal(transition_metals_only=transition_metals_only)[0]
bondedatoms = mol.getBondedAtomsSmart(metal_index, oct=BondedOct)
bonded_atom_symbols = [mol.getAtom(i).symbol() for i in bondedatoms]
if not silent:
print(('result of ligand ligand_breakdown', bonded_atom_symbols))
liglist = []
ligdents = []
ligcons = []
for atom in bondedatoms:
if not silent:
print(f'this atom type is {mol.getAtom(atom).symbol()}')
print(f'connection number {atom} of {bondedatoms}')
fragment = mol.findsubMol(atom, metal_index)
this_cons = [x for x in fragment if (x in bondedatoms)]
if not silent:
print(('fragment', fragment))
print(('this_cons', this_cons))
unique = True
for i, unique_ligands in enumerate(liglist):
if sorted(fragment) == sorted(unique_ligands):
unique = False
matched = i
if unique:
liglist.append(sorted(fragment))
ligdents.append(1)
ligcons.append(this_cons)
else:
ligdents[matched] += 1
return liglist, ligdents, ligcons
@deprecated('Use ligand_assign_consistent instead.')
def ligand_assign_original(mol, liglist, ligdents, ligcons, loud=False, name=False, eq_sym_match=False):
"""Assign axial and equatorial portions. Deprecated. Use ligand_assign_consistent. For octahedral geometries.
Parameters
----------
mol : mol3D
mol3D class instance for the complex.
liglist : list of list of int
List of ligands.
Length is the number of ligands.
Each inner list contains the global indices of a ligand.
ligdents : list of int
List of ligand denticities.
Length is the number of ligands.
ligcons : list of list of int
List of ligand connection indices (in mol, i.e., global).
Length is the number of ligands.
loud : bool, optional
Enable extra printout. Default is False.
name : bool, optional
Name ligands to write to XYZ. Default is False. Broken, do not use.
eq_sym_match : bool, optional
Default is False. Broken, do not use.
Returns
-------
ax_ligand_list : list of molSimplify.Classes.ligand objects
Ligands designated as axial ligands.
Length is the number of axial ligands.
eq_ligand_list : list of molSimplify.Classes.ligand objects
Ligands designated as equatorial ligands.
Length is the number of equatorial ligands.
ax_natoms_list : list of int
Number of atoms in each axial ligand.
Length is the number of axial ligands.
eq_natoms_list : list of int
Number of atoms in each equatorial ligand.
Length is the number of equatorial ligands.
ax_con_int_list : list of list of int
Connecting atoms indices of each axial ligand.
Local indices (ligand object).
Length is the number of axial ligands.
eq_con_int_list : list of list of int
Connecting atoms indices of each equatorial ligand.
Local indices (ligand object).
Length is the number of equatorial ligands.
ax_con_list : list of list of numpy.int64
Connecting atoms of each axial ligand.
Global indices.
Length is the number of axial ligands.
eq_con_list : list of list of numpy.int64
Connecting atoms of each equatorial ligand.
Global indices.
Length is the number of equatorial ligands.
built_ligand_list : list of molSimplify.Classes.ligand objects
List of ligand objects for all ligands.
Length is the number of ligands.
"""
valid = True
# loud = False
pentadentate = False
hexadentate = False
built_ligand_list = list()
lig_natoms_list = list()
unique_ligands = list()
ligand_counts = list()
all_ligand_counts = [0, 0, 0, 0, 0, 0]
ligand_records = list()
ax_con_int_list = list()
eq_con_int_list = list()
ax_natoms_list = list()
eq_natoms_list = list()
n_ligs = len(liglist)
max_dent = max(ligdents)
min_dent = min(ligdents)
if loud:
print('********************************************')
print(f"n_ligs = {n_ligs}")
print(f"max d = {max_dent}")
print(f"min_dent = {min_dent}")
print(f"ligand list is {liglist}")
print(f'denticities are {ligdents}')
if (max(ligdents) == 4) and (min(ligdents) != 1):
valid = False
print(f'bad denticities: {ligdents}')
print(f'min denticities: {min(ligdents)}')
if max(ligdents) > 4:
# ### Handling of pentadentate ligands goes here. #####
if max(ligdents) == 5 and min(ligdents) == 1:
pentadentate = True
elif max(ligdents) == 6 and min(ligdents) == 6:
hexadentate = True
else:
valid = False
print(f'bad denticities: {ligdents}')
print(f'max denticities: {min(ligdents)}')
if n_ligs > 3 and min(ligdents) > 1:
valid = False
print(f'too many ligs {n_ligs}')
eq_lig_list = list()
ax_lig_list = list()
ax_con_list = list()
eq_con_list = list()
for i, ligand_indices in enumerate(liglist):
this_ligand = ligand(mol, ligand_indices, ligdents[i])
this_ligand.obtain_mol3d()
built_ligand_list.append(this_ligand)
lig_natoms_list.append(len(this_ligand.index_list))
for j, built_ligs in enumerate(built_ligand_list):
# test if ligand is unique
sl = [atom.symbol() for atom in built_ligs.master_mol.getAtomwithinds(built_ligs.index_list)]
if loud:
print(f'checking lig {j} : {sl}')
unique = 1
for i, other_sl in enumerate(unique_ligands):
if sorted(sl) == sorted(other_sl):
# duplicate
unique = 0
ligand_counts[i] += 1
if unique == 1:
unique_ligands.append(sl)
ligand_counts.append(1)
ligand_records.append(j)
# loop to bin ligands:
for j, built_ligs in enumerate(built_ligand_list):
# test if ligand is unique
sl = [atom.symbol() for atom in built_ligs.master_mol.getAtomwithinds(built_ligs.index_list)]
for i, other_sl in enumerate(unique_ligands):
if sorted(sl) == sorted(other_sl):
# duplicate
all_ligand_counts[j] = ligand_counts[i]
if loud:
print(f'unique ligands {unique_ligands}')
print(f'ligand counts {ligand_counts}')
print(f'ligand records {ligand_records}')
print(f'{max(ligand_counts)} is the max and min in {min(ligand_counts)}')
n_unique_ligs = len(unique_ligands)
if (n_ligs == 3) or (n_ligs == 4): # most common case,
# one/two equatorial and 2 axial mono
# or three bidentate
for i, ligs in enumerate(liglist):
if ligdents[i] == 1 and min_dent == 1: # anything with equatorial monos will
# have higher than 4 n_ligs
ax_lig_list.append(i)
if loud:
print(f'choosing {i} as ax based on dent = 1')
ax_con_list.append(ligcons[i])
if (ligdents[i] >= 2) and (min_dent == 1):
eq_lig_list.append(i)
if loud:
print(f'choosing lig {i} as eq based on high dent')
eq_con_list.append(ligcons[i])
if (n_ligs == 3) and (min_dent == max_dent):
if n_unique_ligs == 1:
# take any 2, they are all the same
if loud:
print('triple bidentate case')
ax_lig_list.append(0)
eq_lig_list.append(1)
eq_lig_list.append(2)
ax_con_list.append(ligcons[0])
eq_con_list.append(ligcons[1])
eq_con_list.append(ligcons[2])
elif min_dent == 2 and max_dent == 2 and n_ligs == 3 and not n_unique_ligs == 1:
# this is a hetero/bidentate case
for i, ligs in enumerate(liglist):
if all_ligand_counts[i] == 2:
eq_lig_list.append(i)
eq_con_list.append(ligcons[i])
elif all_ligand_counts[i] == 1:
ax_lig_list.append(i)
ax_con_list.append(ligcons[i])
elif (n_ligs == 6): # all mono case,
minz = 500
maxz = -500
if loud:
print('monodentate case')
allowed = list(range(0, 6))
not_eq = list()
for j, built_ligs in enumerate(built_ligand_list):
this_z = sum([mol.getAtom(ii).coords()[2]
for ii in ligcons[j]]) / len(ligcons[j])
if this_z < minz:
minz = this_z
bot_lig = j
bot_con = ligcons[j]
if loud:
print(f'updating bot axial to {bot_lig}')
if this_z > maxz:
maxz = this_z
top_lig = j
top_con = ligcons[j]
if loud:
print(f'updating top axial to {top_lig}')
not_eq.append(bot_lig)
not_eq.append(top_lig)
allowed = [x for x in allowed if ((x not in not_eq))]
if len(allowed) != 4:
print(('error in decomp of monodentate case!', allowed))
eq_lig_list = allowed
eq_con_list = [ligcons[i] for i in allowed]
ax_lig_list = [top_lig, bot_lig]
ax_con_list = [top_con, bot_con]
if loud:
print(f'geometric eq_list {eq_lig_list}')
print(f'geometric ax_list {ax_lig_list}')
if (max(ligand_counts) != 4) or (min(ligand_counts) != 2):
if loud:
print('not a 4-6 case')
if (max(ligand_counts) == 6):
if loud:
print('6-homoleptic, using geo values')
else:
if loud:
print('monodentates not the same, using geo values ')
print(ligand_counts)
print(unique_ligands)
elif n_unique_ligs == 2:
if loud:
print('this is a 4-6 case')
allowed = list(range(0, 6))
ax_lig_list = [i for i in allowed if (all_ligand_counts[i] == 2)]
eq_lig_list = [i for i in allowed if (all_ligand_counts[i] == 4)]
ax_con_list = [ligcons[i] for i in ax_lig_list]
eq_con_list = [ligcons[i] for i in eq_lig_list]
elif n_ligs == 2 and pentadentate:
# ### Handling for pentadentate scaffolds ####
if loud:
print('pentadentate case')
allowed = [0, 1]
not_eq = list()
for j, built_ligs in enumerate(built_ligand_list):
if len(ligcons[j]) == 1:
# ### This is the axial ligand ####
top_lig = j
top_con = ligcons[j]
not_eq.append(top_lig)
else:
pentadentate_coord_list = np.array([mol.getAtom(
ii).coords() for ii in ligcons[j]])
# #### Adjusting this so that by default, any 4 within the same plane will be assigned as eq. ###
if loud:
print('pentadentate coord LIST!')
print(pentadentate_coord_list)
point_combos = combinations([0, 1, 2, 3, 4], 4)
error_list = []
combo_list = []
for i, combo in enumerate(point_combos):
combo_list.append(list(combo))
A = np.zeros((4, 3))
b = np.zeros(4)
for point_i, point_num in enumerate(combo):
coordlist = pentadentate_coord_list[point_num]
A[point_i, :] = [coordlist[0], coordlist[1], 1]
b[point_i] = coordlist[2]
# #### This code builds the best fit plane between 4 points,
# #### Then calculates the variance of the 4 points with respect to the plane
# #### The 4 that have the least variance are flagged as the eq plane.
try:
fit = np.linalg.pinv(A.T @ A) @ A.T @ b
errors = b - A @ fit
error_var = np.var(errors)
error_list.append(error_var)
except np.linalg.LinAlgError:
error_list.append(0)
if loud:
print('combos below')
print(combo_list)
print('errors next, argmin combo selected')
print(error_list)
not_ax_points = combo_list[np.argmin(error_list)]
if len(set(not_ax_points)) != 4:
print('The equatorial plane is not being assigned correctly. Please check.')
else:
bot_idx = list(set(range(5)) - set(not_ax_points))[0]
if loud:
print(('This is bot_idx', bot_idx))
bot_lig = j
bot_con = [ligcons[j][bot_idx]]
allowed = list(set(allowed) - set(not_eq))
if loud:
print(('this is the allowed list', allowed, not_eq))
eq_lig_list = allowed
eq_con_list = [
list(set([ligcons[i] for i in allowed][0]) - set(top_con) - set(bot_con))]
ax_lig_list = [top_lig, bot_lig]
ax_con_list = [top_con, bot_con]
if loud:
print(('con lists', eq_con_list, ax_con_list))
###########################################################################################
# In the above, the pentadentate ligand is classified as both axial and equatorial. #
# The lc atoms are decided by the z-position. Thus the pentadentate ligand has 4 eq-lc #
# and 1 ax-lc. Currently should be able to check this and set that up. #
###########################################################################################
elif n_ligs == 1 and hexadentate:
allowed = [0, 1]
if loud:
print('hexadentate case')
not_eq = list()
for j, built_ligs in enumerate(built_ligand_list):
hexadentate_coord_list = np.array([mol.getAtom(
ii).coords() for ii in ligcons[j]])
# #### Adjusting this so that by default, any 4 within the same plane will be assigned as eq. ###
if loud:
print('hexadentate coord LIST!')
print(hexadentate_coord_list)
pair_combos = list(combinations([0, 1, 2, 3, 4, 5], 2))
angle_list = []
pair_list = []
for i, pair in enumerate(pair_combos):
pair_list.append(list(pair))
p1 = np.squeeze(np.array(hexadentate_coord_list[list(pair)[0]]))
p2 = np.squeeze(np.array(hexadentate_coord_list[list(pair)[1]]))
m = np.array([mol.getAtom(mol.findMetal()[0]).coords()])
v1u = np.squeeze(np.array((m - p1) / np.linalg.norm((m - p1))))
v2u = np.squeeze(np.array((m - p2) / np.linalg.norm((m - p2))))
angle = np.rad2deg(np.arccos(np.clip(np.dot(v1u, v2u), -1.0, 1.0)))
if loud:
print(('pair of atoms, then angle', pair, angle))
angle_list.append(angle)
argsort_angle_list = np.squeeze(np.array(angle_list)).argsort()[-3:][::-1]
point_combos = [pair_list[argsort_angle_list[0]] + pair_list[argsort_angle_list[1]],
pair_list[argsort_angle_list[1]] + pair_list[argsort_angle_list[2]],
pair_list[argsort_angle_list[2]] + pair_list[argsort_angle_list[0]]]
error_list = []
combo_list = []
fitlist = []
for i, combo in enumerate(point_combos):
combo_list.append(combo)
A = np.zeros((4, 3))
b = np.zeros(4)
for point_i, point_num in enumerate(combo):
coordlist = hexadentate_coord_list[point_num]
A[point_i, :] = [coordlist[0], coordlist[1], 1]
b[point_i] = coordlist[2]
# #### This code builds the best fit plane between 4 points,
# #### Then calculates the variance of the 4 points with respect to the plane
# #### The 4 that have the least variance are flagged as the eq plane.
fit = np.linalg.pinv(A.T @ A) @ A.T @ b
fitlist.append(fit)
errors = b - A @ fit
error_var = np.var(errors)
error_list.append(error_var)
if loud:
print('combos below')
print(combo_list)
print('errors next, argmin combo selected')
print(error_list)
best_fit_planes = np.squeeze(np.array(error_list)).argsort()[:3]
perpdist = []
perpcombo = []
for fitnum, best_fit in enumerate(best_fit_planes):
temp_fit = fitlist[best_fit]
temp_combo = combo_list[best_fit]
perpcombo.append(int(best_fit))
temp_ax = set(range(0, 6)) - set(temp_combo)
ax_dist = []
for point_num in temp_ax:
coordlist = hexadentate_coord_list[point_num]
planez = [coordlist[0], coordlist[1], 1] * temp_fit
plane_coords = [coordlist[0], coordlist[1], planez]
adjusted_coords = [coordlist[0], coordlist[1], coordlist[2]]
squared_dist = np.sum((np.array(adjusted_coords) - np.array(plane_coords)) ** 2)
dist = np.squeeze(np.sqrt(squared_dist))
if loud:
print(('dist', dist))
ax_dist.append(dist)
perpdist.append(np.mean(ax_dist))
if loud:
print(("Perpendicular distance is", perpdist, perpcombo, len(perpdist), len(best_fit_planes)))
not_ax_points = combo_list[perpcombo[np.argmax(np.array(perpdist))]]
if len(set(not_ax_points)) != 4:
print('The equatorial plane is not being assigned correctly. Please check.')
else:
bot_idx = list(set(range(6)) - set(not_ax_points))[0]
top_idx = list(set(range(6)) - set(not_ax_points))[1]
if loud:
print(('This is bot_idx', bot_idx))
bot_lig = j
top_lig = j
bot_con = [ligcons[j][bot_idx]]
top_con = [ligcons[j][top_idx]]
allowed = list(set(allowed) - set(not_eq))
if loud:
print(('this is the allowed list', allowed, not_eq))
eq_lig_list = [top_lig]
eq_con_list = eq_con_list = [
list(set([ligcons[0][i] for i in not_ax_points]))]
ax_lig_list = [top_lig, bot_lig]
ax_con_list = [top_con, bot_con]
if loud:
print(('con lists', eq_con_list, ax_con_list))
# ############## DONE WITH CLASSIFICATION ######
ax_ligand_list = [built_ligand_list[i] for i in ax_lig_list]
eq_ligand_list = [built_ligand_list[i] for i in eq_lig_list]
if loud and valid:
print(('lig_nat_list', lig_natoms_list))
print(('eq_liq is ind ', eq_lig_list))
print(('ax_liq is ind ', ax_lig_list))
print('ax built lig [0] ext ind :' +
str(list(built_ligand_list[ax_lig_list[0]].ext_int_dict.keys())))
if len(ax_lig_list) > 1:
print('ax built lig [1] ext ind :' +
str(list(built_ligand_list[ax_lig_list[1]].ext_int_dict.keys())))
print('eq built lig [0] ext ind: ' +
str(list(built_ligand_list[eq_lig_list[0]].ext_int_dict.keys())))
print(f'eq_con is {eq_con_list}')
print(f'ax_con is {ax_con_list}')
for j, ax_con in enumerate(ax_con_list):
current_ligand_index_list = built_ligand_list[ax_lig_list[j]].index_list
ax_con_int_list.append([current_ligand_index_list.index(i) for i in ax_con])
for j, eq_con in enumerate(eq_con_list):
current_ligand_index_list = built_ligand_list[eq_lig_list[j]].index_list
eq_con_int_list.append([current_ligand_index_list.index(i) for i in eq_con])
if loud:
print(f'int eq {eq_con_int_list}')
print(f'ext eq {eq_con_list}')
print('**********************************************')
for ax_lig in ax_lig_list:
ax_natoms_list.append(lig_natoms_list[ax_lig])
for eq_lig in eq_lig_list:
eq_natoms_list.append(lig_natoms_list[eq_lig])
return (ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list,
ax_con_int_list, eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list)
# ## DISCLAIMER!!! Please be careful while modifying any part of 'ligand_assign_consistent'
# as that could affect everything else ###
def ligand_assign_consistent(mol, liglist, ligdents, ligcons, loud=False,
name=False, use_z=False, eq_sym_match=False):
"""This ligand assignment code handles octahedral complexes consistently. Assigns any octahedral complex.
Parameters
----------
mol : mol3D
mol3D class instance for the complex.
liglist : list of list of int
List of ligands.
Length is the number of ligands.
Each inner list contains the global indices of a ligand.
ligdents : list of int
List of ligand denticities.
Length is the number of ligands.
ligcons : list of list of int
List of ligand connection indices (in mol, i.e., global).
Length is the number of ligands.
loud : bool, optional
Enable extra printout. Default is False.
name : bool, optional
Name ligands to write to XYZ. Default is False.
use_z : bool, optional
Use z-dimension to determine axial ligands, as oppossed to connectivity.
eq_sym_match : bool, optional
Enforce eq plane to have connecting atoms with same symbol. Default is False.
Returns
-------
ax_ligand_list : list of molSimplify.Classes.ligand objects
Ligands designated as axial ligands.
Length is the number of axial ligands.
eq_ligand_list : list of molSimplify.Classes.ligand objects
Ligands designated as equatorial ligands.
Length is the number of equatorial ligands.
ax_natoms_list : list of int
Number of atoms in each axial ligand.
Length is the number of axial ligands.
eq_natoms_list : list of int
Number of atoms in each equatorial ligand.
Length is the number of equatorial ligands.
ax_con_int_list : list of list of int
Connecting atoms indices of each axial ligand.
Local indices (ligand object).
Length is the number of axial ligands.
eq_con_int_list : list of list of int
Connecting atoms indices of each equatorial ligand.
Local indices (ligand object).
Length is the number of equatorial ligands.
ax_con_list : list of list of numpy.int64
Connecting atoms of each axial ligand.
Global indices.
Length is the number of axial ligands.
eq_con_list : list of list of numpy.int64
Connecting atoms of each equatorial ligand.
Global indices.
Length is the number of equatorial ligands.
built_ligand_list : list of molSimplify.Classes.ligand objects
List of ligand objects for all ligands.
Length is the number of ligands.
"""
# ###### This ligand assignment code handles octahedral complexes consistently.
# ###### It should be able to assign any octahedral complex
angle_cutoff = 130 # Angle cutoff for linear
valid = True
hexadentate = False
pentadentate = False
metal_index = mol.findMetal()[0] # Get metal index and coords
m_coord = np.array(mol.getAtom(metal_index).coords())
ligand_records = list()
ax_con_int_list = list() # Atom refs in for ligand mol3D objects in ax
eq_con_int_list = list() # Atom refs in for ligand mol3D objects in eq
ax_natoms_list = list()
eq_natoms_list = list()
eq_lig_list = list()
ax_lig_list = list()
ax_con_list = list()
eq_con_list = list()
symbol_list = list()
n_ligs = len(liglist)
max_dent = max(ligdents)
min_
gitextract_2_8gcl6l/
├── .flake8
├── .github/
│ ├── codecov.yml
│ ├── codeql-config.yml
│ └── workflows/
│ ├── build.yaml
│ ├── codeql.yml
│ ├── pytest.yaml
│ └── python-linter.yaml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── LICENSE
├── MLmodel-reference.md
├── README.md
├── benchmark_distance.py
├── devtools/
│ └── conda-envs/
│ ├── mols.yml
│ └── mols_minimal.yml
├── docs/
│ ├── Makefile
│ ├── make.bat
│ ├── scaling.csv
│ └── source/
│ ├── Citation.rst
│ ├── Classes.rst
│ ├── Informatics.rst
│ ├── Installation.rst
│ ├── Scripts.rst
│ ├── conf.py
│ ├── index.rst
│ └── tutorials/
│ └── development.rst
├── examples/
│ └── example-1.in
├── molSimplify/
│ ├── .gitignore
│ ├── Bind/
│ │ ├── bicarbonate.mol
│ │ ├── bind.dict
│ │ ├── bisulfate.mol
│ │ ├── bisulfite.mol
│ │ ├── carbonmonoxide.mol
│ │ ├── dihydrogenphosphate.mol
│ │ ├── dihydrogenphosphite.mol
│ │ ├── formate.mol
│ │ ├── nitrate.mol
│ │ ├── oxalate.mol
│ │ ├── oxygen.mol
│ │ ├── perchlorate.mol
│ │ ├── test.smi.smi
│ │ └── water.mol
│ ├── Classes/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── atom3D.py
│ │ ├── dft_obs.py
│ │ ├── globalvars.py
│ │ ├── helpers.py
│ │ ├── ligand.py
│ │ ├── mol2D.py
│ │ ├── mol3D.py
│ │ ├── monomer3D.py
│ │ ├── partialcharges.py
│ │ ├── protein3D.py
│ │ ├── rundiag.py
│ │ └── voxelgrid.py
│ ├── Cores/
│ │ ├── Coporphyrin.mol
│ │ ├── Crporphyrin.mol
│ │ ├── Cuporphyrin.mol
│ │ ├── Fe2O2.xyz
│ │ ├── Feporphyrin.mol
│ │ ├── Mnporphyrin.mol
│ │ ├── N2OTS.xyz
│ │ ├── Niporphyrin.mol
│ │ ├── Scporphyrin.mol
│ │ ├── Tiporphyrin.mol
│ │ ├── Vporphyrin.mol
│ │ ├── Znporphyrin.mol
│ │ ├── cores.dict
│ │ ├── cr4nh3o.xyz
│ │ ├── fen4py.xyz
│ │ ├── fen4pyO.xyz
│ │ ├── fenh3O.xyz
│ │ ├── ferrcore.xyz
│ │ ├── ferrocene.mol
│ │ ├── mn3nh3o.xyz
│ │ ├── mn5nh3o.xyz
│ │ └── zncat.xyz
│ ├── Data/
│ │ ├── .tcdefinput.inp
│ │ └── coordinations.dict
│ ├── Informatics/
│ │ ├── FeatureSetVisualization.ipynb
│ │ ├── HFXsensitivity/
│ │ │ ├── __init__.py
│ │ │ ├── measure_HFX_sensitivity_oxo_hat_reb_rel.py
│ │ │ └── measure_HFX_stable.py
│ │ ├── MOF/
│ │ │ ├── MOF_RAC_example.ipynb
│ │ │ ├── MOF_descriptors.py
│ │ │ ├── MOF_fragment_example.ipynb
│ │ │ ├── MOF_functionalizer.py
│ │ │ ├── MOF_functionalizer_v2.py
│ │ │ ├── PBC_functions.py
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── atomic.py
│ │ │ ├── cluster_extraction.py
│ │ │ ├── fragment_MOFs_for_pormake.py
│ │ │ ├── functional_group_dictionary.pkl
│ │ │ ├── linker_rotation.py
│ │ │ └── monofunctionalized_BDC/
│ │ │ ├── CO2H.xyz
│ │ │ ├── OCF3.xyz
│ │ │ ├── OCH3.xyz
│ │ │ ├── README
│ │ │ ├── SO3H.xyz
│ │ │ ├── example_terachem_input.in
│ │ │ └── index_information.py
│ │ ├── Mol2Parser.py
│ │ ├── RACassemble.py
│ │ ├── __init__.py
│ │ ├── active_learning/
│ │ │ ├── __init__.py
│ │ │ └── expected_improvement.py
│ │ ├── autocorrelation.py
│ │ ├── coulomb_analyze.py
│ │ ├── decoration_manager.py
│ │ ├── geo_analyze.py
│ │ ├── geometrics.py
│ │ ├── geometrics_csd.json
│ │ ├── graph_analyze.py
│ │ ├── graph_racs.py
│ │ ├── jupyter_vis.py
│ │ ├── lacRACAssemble.py
│ │ ├── misc_descriptors.py
│ │ ├── organic_fingerprints.py
│ │ ├── partialcharges.py
│ │ ├── protein/
│ │ │ ├── activesite.py
│ │ │ └── pymol_add_hs.py
│ │ ├── py3Dmol_visualization.ipynb
│ │ └── rac155_geo.py
│ ├── Ligands/
│ │ ├── .gitignore
│ │ ├── 12crown4.mol
│ │ ├── Antipyrine.mol
│ │ ├── BPAbipy.mol
│ │ ├── Hpyrrole.mol
│ │ ├── PCy3.mol
│ │ ├── PPh3.mol
│ │ ├── Propyphenazone.mol
│ │ ├── README
│ │ ├── acac.mol
│ │ ├── acacen.mol
│ │ ├── acetate.smi
│ │ ├── aceticacidbipyridine.mol
│ │ ├── acetonitrile.mol
│ │ ├── alanine.mol
│ │ ├── alphabetizer.py
│ │ ├── amine.mol
│ │ ├── ammonia.mol
│ │ ├── arginine.mol
│ │ ├── asparagine.mol
│ │ ├── aspartic_acid.mol
│ │ ├── azide.mol
│ │ ├── benzene.mol
│ │ ├── benzene_pi.mol
│ │ ├── benzenedithiol.mol
│ │ ├── benzenethiol.mol
│ │ ├── benzylisocy.mol
│ │ ├── bidiazine.mol
│ │ ├── bidiazole.mol
│ │ ├── bifuran.mol
│ │ ├── bihydrodiazine.mol
│ │ ├── bihydrodiazole.mol
│ │ ├── bihydrooxazine.mol
│ │ ├── bihydrooxazole.mol
│ │ ├── bihydrothiazine.mol
│ │ ├── bihydrothiazole.mol
│ │ ├── biimidazole.mol
│ │ ├── bioxazole.mol
│ │ ├── bipy.mol
│ │ ├── bipyrimidine.mol
│ │ ├── bipyrrole.mol
│ │ ├── bisnapthyridylpyridine.mol
│ │ ├── bithiazole.mol
│ │ ├── bromide.mol
│ │ ├── bromide.smi
│ │ ├── c2.mol
│ │ ├── caprolactone.mol
│ │ ├── carbonyl.mol
│ │ ├── carboxyl.mol
│ │ ├── cat.mol
│ │ ├── chloride.mol
│ │ ├── chloride.smi
│ │ ├── chloropyridine.mol
│ │ ├── co2.mol
│ │ ├── corrolazine.mol
│ │ ├── cs.mol
│ │ ├── cyanide.mol
│ │ ├── cyanoaceticporphyrin.mol
│ │ ├── cyanopyridine.mol
│ │ ├── cyclam.mol
│ │ ├── cyclen.mol
│ │ ├── cyclopentadienyl.mol
│ │ ├── cysteine.mol
│ │ ├── diaminomethyl.mol
│ │ ├── diazine.mol
│ │ ├── diazole.mol
│ │ ├── dicyanamide.mol
│ │ ├── dihydrofuran.mol
│ │ ├── dmf.mol
│ │ ├── dmi.mol
│ │ ├── dmpe.mol
│ │ ├── dpmu.mol
│ │ ├── dppe.mol
│ │ ├── edta.mol
│ │ ├── en.mol
│ │ ├── ethanethiol.mol
│ │ ├── ethanolamine.mol
│ │ ├── ethbipy.mol
│ │ ├── ethyl.mol
│ │ ├── ethylamine.mol
│ │ ├── ethylene.mol
│ │ ├── ethylesteracac.mol
│ │ ├── fluoride.mol
│ │ ├── fluoride.smi
│ │ ├── formaldehyde.mol
│ │ ├── furan.mol
│ │ ├── gitignore
│ │ ├── glutamic_acid.mol
│ │ ├── glutamine.mol
│ │ ├── glycinate.mol
│ │ ├── glycine.mol
│ │ ├── h2s.mol
│ │ ├── helium.mol
│ │ ├── histidine.mol
│ │ ├── hmpa.mol
│ │ ├── hs-.mol
│ │ ├── hydride.mol
│ │ ├── hydrocyanide.mol
│ │ ├── hydrodiazine.mol
│ │ ├── hydrodiazole.mol
│ │ ├── hydrogensulfide.mol
│ │ ├── hydroisocyanide.mol
│ │ ├── hydrooxazine.mol
│ │ ├── hydrooxazole.mol
│ │ ├── hydrothiazine.mol
│ │ ├── hydrothiazole.mol
│ │ ├── hydroxyl.mol
│ │ ├── imidazole.mol
│ │ ├── imidazolidinone.mol
│ │ ├── imine.mol
│ │ ├── iminodiacetic.mol
│ │ ├── iodide.mol
│ │ ├── isoleucine.mol
│ │ ├── isothiocyanate.mol
│ │ ├── leucine.mol
│ │ ├── lysine.mol
│ │ ├── mebenzenedithiol.mol
│ │ ├── mebipy.mol
│ │ ├── mecat.mol
│ │ ├── methanal.mol
│ │ ├── methanethiol.mol
│ │ ├── methanol.mol
│ │ ├── methionine.mol
│ │ ├── methyl.mol
│ │ ├── methylamine.mol
│ │ ├── methylisocy.mol
│ │ ├── methylpyridine.mol
│ │ ├── n2.mol
│ │ ├── nch.mol
│ │ ├── nco-.mol
│ │ ├── nethanolamine.mol
│ │ ├── nitrate.mol
│ │ ├── nitrite.mol
│ │ ├── nitro.mol
│ │ ├── nitrobipy.mol
│ │ ├── nitroso.mol
│ │ ├── nme3.mol
│ │ ├── no-.mol
│ │ ├── no2-.mol
│ │ ├── noxygen.mol
│ │ ├── ns-.mol
│ │ ├── o2-.mol
│ │ ├── och2.mol
│ │ ├── oethanolamine.mol
│ │ ├── ome2.mol
│ │ ├── oxalate.mol
│ │ ├── oxalate.smi
│ │ ├── oxygen.mol
│ │ ├── pentacyanocyclopentadienide.mol
│ │ ├── ph2-.mol
│ │ ├── ph3.mol
│ │ ├── phen.mol
│ │ ├── phenacac.mol
│ │ ├── phenalalanine.mol
│ │ ├── phendione.mol
│ │ ├── phenphen.mol
│ │ ├── phenylbenzoxazole.mol
│ │ ├── phenylcyc.mol
│ │ ├── phenylenediamine.mol
│ │ ├── phenylisocy.mol
│ │ ├── phosacidbipy.mol
│ │ ├── phosphine.mol
│ │ ├── phosphorine.mol
│ │ ├── phthalocyanine.mol
│ │ ├── pme3o.mol
│ │ ├── porphyrin.mol
│ │ ├── pph3o.mol
│ │ ├── proline.mol
│ │ ├── propdiol.mol
│ │ ├── propylene.mol
│ │ ├── pyridine.mol
│ │ ├── pyrimidone.mol
│ │ ├── pyrrole.mol
│ │ ├── quinoxalinedithiol.mol
│ │ ├── s2-.mol
│ │ ├── salen.mol
│ │ ├── salphen.mol
│ │ ├── serine.mol
│ │ ├── simple_ligands.dict
│ │ ├── sulfacidbipy.mol
│ │ ├── tbucat.mol
│ │ ├── tbuphisocy.mol
│ │ ├── tbutylcyclen.mol
│ │ ├── tbutylisocy.mol
│ │ ├── tbutylthiol.mol
│ │ ├── tcnoet.mol
│ │ ├── tcnoetOH.mol
│ │ ├── terpy.mol
│ │ ├── tetrahydrofuran.mol
│ │ ├── thiane.mol
│ │ ├── thiazole.mol
│ │ ├── thiocyanate.mol
│ │ ├── thiol.mol
│ │ ├── thiophene.mol
│ │ ├── thiopyridine.mol
│ │ ├── threonine.mol
│ │ ├── tpp.mol
│ │ ├── tricyanomethyl.mol
│ │ ├── trifluoromethyl.mol
│ │ ├── tryptophan.mol
│ │ ├── tyrosine.mol
│ │ ├── uthiol.mol
│ │ ├── uthiolme2.mol
│ │ ├── valine.mol
│ │ ├── water.mol
│ │ └── x.mol
│ ├── README.md
│ ├── Scripts/
│ │ ├── .gitignore
│ │ ├── __init__.py
│ │ ├── addtodb.py
│ │ ├── align.py
│ │ ├── cellbuilder.py
│ │ ├── cellbuilder_tools.py
│ │ ├── chains.py
│ │ ├── convert_2to3.py
│ │ ├── dbinteract.py
│ │ ├── distgeom.py
│ │ ├── enhanced_structgen.py
│ │ ├── enhanced_structgen_functionality.py
│ │ ├── findcorrelations.py
│ │ ├── generator.py
│ │ ├── geometry.py
│ │ ├── inparse.py
│ │ ├── io.py
│ │ ├── isomers.py
│ │ ├── jobgen.py
│ │ ├── krr_prep.py
│ │ ├── molSimplify_io.py
│ │ ├── namegen.py
│ │ ├── nn_prep.py
│ │ ├── nx_helpers.py
│ │ ├── oct_check_mols.py
│ │ ├── periodic_QE.py
│ │ ├── postmold.py
│ │ ├── postmwfn.py
│ │ ├── postparse.py
│ │ ├── postproc.py
│ │ ├── qcgen.py
│ │ ├── rmsd.py
│ │ ├── rungen.py
│ │ ├── structgen.py
│ │ ├── tf_nn_prep.py
│ │ ├── tsgen.py
│ │ └── uq_calibration.py
│ ├── Substrates/
│ │ ├── 1-4-dimethyl-1-2-3-triazole.xyz
│ │ ├── BCM_opt.xyz
│ │ ├── DHA.xyz
│ │ ├── N-quinolinylbutyramidate.xyz
│ │ ├── N2.xyz
│ │ ├── acetaldehyde.xyz
│ │ ├── acetylene.xyz
│ │ ├── benzene.mol
│ │ ├── benzene.xyz
│ │ ├── biphenyl.xyz
│ │ ├── bromobenzene.xyz
│ │ ├── cumene.xyz
│ │ ├── cyclohexene.xyz
│ │ ├── diphenylmethane.xyz
│ │ ├── estrogen.xyz
│ │ ├── ethane.xyz
│ │ ├── ethylene.xyz
│ │ ├── fluorene.xyz
│ │ ├── formaldehyde.xyz
│ │ ├── formicacid.xyz
│ │ ├── iodobenzene.xyz
│ │ ├── methane.xyz
│ │ ├── methanol.xyz
│ │ ├── methylazide.xyz
│ │ ├── new.xyz
│ │ ├── propane.xyz
│ │ ├── propylene.xyz
│ │ ├── propyne.xyz
│ │ ├── substrates.dict
│ │ ├── tert-butane.xyz
│ │ ├── toluene.xyz
│ │ ├── trunc.xyz
│ │ └── xanthene.xyz
│ ├── Unitcells/
│ │ ├── anatase_tio2.cif
│ │ ├── gold.cif
│ │ └── iron.cif
│ ├── __init__.py
│ ├── __main__.py
│ ├── icons/
│ │ ├── geoms_labels/
│ │ │ └── vector/
│ │ │ ├── li.eps
│ │ │ ├── oct.eps
│ │ │ ├── pbp.eps
│ │ │ ├── spy.eps
│ │ │ ├── sqap.eps
│ │ │ ├── sqp.eps
│ │ │ ├── tbp.eps
│ │ │ ├── thd.eps
│ │ │ ├── tpl.eps
│ │ │ └── tpr.eps
│ │ └── wft2
│ ├── ml/
│ │ ├── __init__.py
│ │ ├── kernels.py
│ │ └── layers.py
│ ├── plugindefines_reference.txt
│ ├── python_krr/
│ │ ├── X_train_TS.csv
│ │ ├── __init__.py
│ │ ├── hat2_X_mean_std.csv
│ │ ├── hat2_feature_names.csv
│ │ ├── hat2_krr_model.pkl
│ │ ├── hat2_y_mean_std.csv
│ │ ├── hat_X_mean_std.csv
│ │ ├── hat_feature_names.csv
│ │ ├── hat_krr_X_train.csv
│ │ ├── hat_krr_dual_coef.csv
│ │ ├── hat_krr_model.pkl
│ │ ├── hat_y_mean_std.csv
│ │ ├── sklearn_models.py
│ │ └── y_train_TS.csv
│ ├── python_nn/
│ │ ├── .gitignore
│ │ ├── ANN.py
│ │ ├── __init__.py
│ │ ├── clf_analysis_tool.py
│ │ ├── dictionary_toolbox.py
│ │ ├── ensemble_test.py
│ │ ├── hs_center.csv
│ │ ├── hs_scale.csv
│ │ ├── ls_center.csv
│ │ ├── ls_scale.csv
│ │ ├── ms_hs_b1.csv
│ │ ├── ms_hs_b2.csv
│ │ ├── ms_hs_b3.csv
│ │ ├── ms_hs_w1.csv
│ │ ├── ms_hs_w2.csv
│ │ ├── ms_hs_w3.csv
│ │ ├── ms_ls_b1.csv
│ │ ├── ms_ls_b2.csv
│ │ ├── ms_ls_b3.csv
│ │ ├── ms_ls_w1.csv
│ │ ├── ms_ls_w2.csv
│ │ ├── ms_ls_w3.csv
│ │ ├── ms_slope_b1.csv
│ │ ├── ms_slope_b2.csv
│ │ ├── ms_slope_b3.csv
│ │ ├── ms_slope_w1.csv
│ │ ├── ms_slope_w2.csv
│ │ ├── ms_slope_w3.csv
│ │ ├── ms_split_b1.csv
│ │ ├── ms_split_b2.csv
│ │ ├── ms_split_b3.csv
│ │ ├── ms_split_w1.csv
│ │ ├── ms_split_w2.csv
│ │ ├── ms_split_w3.csv
│ │ ├── slope_center.csv
│ │ ├── slope_scale.csv
│ │ ├── split_center.csv
│ │ ├── split_scale.csv
│ │ ├── tf_ANN.py
│ │ └── train_data.csv
│ ├── sklearn_models/
│ │ ├── geo_static_clf/
│ │ │ └── geo_static_clf_model.h5
│ │ └── sc_staic_clf/
│ │ └── sc_static_clf_model.h5
│ ├── tf_nn/
│ │ ├── __init__.py
│ │ ├── geo_static_clf/
│ │ │ ├── geo_static_clf_ensemble_spectro/
│ │ │ │ ├── spectro_all_geo_0.h5
│ │ │ │ ├── spectro_all_geo_1.h5
│ │ │ │ ├── spectro_all_geo_2.h5
│ │ │ │ ├── spectro_all_geo_3.h5
│ │ │ │ ├── spectro_all_geo_4.h5
│ │ │ │ ├── spectro_all_geo_5.h5
│ │ │ │ ├── spectro_all_geo_6.h5
│ │ │ │ ├── spectro_all_geo_7.h5
│ │ │ │ ├── spectro_all_geo_8.h5
│ │ │ │ └── spectro_all_geo_9.h5
│ │ │ ├── geo_static_clf_model.h5
│ │ │ ├── geo_static_clf_train_name.csv
│ │ │ ├── geo_static_clf_train_x.csv
│ │ │ ├── geo_static_clf_train_y.csv
│ │ │ └── geo_static_clf_vars.csv
│ │ ├── geos/
│ │ │ ├── hs_ii_bl_x.csv
│ │ │ ├── hs_ii_bl_y.csv
│ │ │ ├── hs_ii_model.h5
│ │ │ ├── hs_ii_model.json
│ │ │ ├── hs_ii_vars.csv
│ │ │ ├── hs_iii_bl_x.csv
│ │ │ ├── hs_iii_bl_y.csv
│ │ │ ├── hs_iii_model.h5
│ │ │ ├── hs_iii_model.json
│ │ │ ├── hs_iii_vars.csv
│ │ │ ├── ls_ii_bl_x.csv
│ │ │ ├── ls_ii_bl_y.csv
│ │ │ ├── ls_ii_model.h5
│ │ │ ├── ls_ii_model.json
│ │ │ ├── ls_ii_vars.csv
│ │ │ ├── ls_iii_bl_x.csv
│ │ │ ├── ls_iii_bl_y.csv
│ │ │ ├── ls_iii_model.h5
│ │ │ ├── ls_iii_model.json
│ │ │ └── ls_iii_vars.csv
│ │ ├── homolumo/
│ │ │ ├── gap_model.h5
│ │ │ ├── gap_model.json
│ │ │ ├── gap_test_names.csv
│ │ │ ├── gap_test_x.csv
│ │ │ ├── gap_test_y.csv
│ │ │ ├── gap_train_names.csv
│ │ │ ├── gap_train_x.csv
│ │ │ ├── gap_train_y.csv
│ │ │ ├── gap_vars.csv
│ │ │ ├── homo_model.h5
│ │ │ ├── homo_model.json
│ │ │ ├── homo_test_names.csv
│ │ │ ├── homo_test_x.csv
│ │ │ ├── homo_test_y.csv
│ │ │ ├── homo_train_names.csv
│ │ │ ├── homo_train_x.csv
│ │ │ ├── homo_train_y.csv
│ │ │ └── homo_vars.csv
│ │ ├── oxoandhomo/
│ │ │ ├── homo_empty_info.json
│ │ │ ├── homo_empty_model.h5
│ │ │ ├── homo_empty_model.json
│ │ │ ├── homo_empty_nocharge/
│ │ │ │ ├── homo_empty_info.json
│ │ │ │ ├── homo_empty_model.h5
│ │ │ │ ├── homo_empty_model.json
│ │ │ │ ├── homo_empty_test_names.csv
│ │ │ │ ├── homo_empty_test_x.csv
│ │ │ │ ├── homo_empty_test_y.csv
│ │ │ │ ├── homo_empty_train_names.csv
│ │ │ │ ├── homo_empty_train_x.csv
│ │ │ │ ├── homo_empty_train_y.csv
│ │ │ │ ├── homo_empty_val_names.csv
│ │ │ │ ├── homo_empty_val_x.csv
│ │ │ │ ├── homo_empty_val_y.csv
│ │ │ │ └── homo_empty_vars.csv
│ │ │ ├── homo_empty_test_names.csv
│ │ │ ├── homo_empty_test_x.csv
│ │ │ ├── homo_empty_test_y.csv
│ │ │ ├── homo_empty_train_names.csv
│ │ │ ├── homo_empty_train_x.csv
│ │ │ ├── homo_empty_train_y.csv
│ │ │ ├── homo_empty_val_names.csv
│ │ │ ├── homo_empty_val_x.csv
│ │ │ ├── homo_empty_val_y.csv
│ │ │ ├── homo_empty_vars.csv
│ │ │ ├── oxo20_info.json
│ │ │ ├── oxo20_model.h5
│ │ │ ├── oxo20_model.json
│ │ │ ├── oxo20_test_names.csv
│ │ │ ├── oxo20_test_x.csv
│ │ │ ├── oxo20_test_y.csv
│ │ │ ├── oxo20_train_names.csv
│ │ │ ├── oxo20_train_x.csv
│ │ │ ├── oxo20_train_y.csv
│ │ │ ├── oxo20_val_names.csv
│ │ │ ├── oxo20_val_x.csv
│ │ │ ├── oxo20_val_y.csv
│ │ │ └── oxo20_vars.csv
│ │ ├── oxocatalysis/
│ │ │ ├── hat_model.h5
│ │ │ ├── hat_model.json
│ │ │ ├── hat_test_names.csv
│ │ │ ├── hat_test_x.csv
│ │ │ ├── hat_test_y.csv
│ │ │ ├── hat_train_names.csv
│ │ │ ├── hat_train_x.csv
│ │ │ ├── hat_train_y.csv
│ │ │ ├── hat_val_x.csv
│ │ │ ├── hat_val_y.csv
│ │ │ ├── hat_vars.csv
│ │ │ ├── old/
│ │ │ │ ├── oxo_model.h5
│ │ │ │ ├── oxo_model.json
│ │ │ │ ├── oxo_test_names.csv
│ │ │ │ ├── oxo_test_x.csv
│ │ │ │ ├── oxo_test_y.csv
│ │ │ │ ├── oxo_train_names.csv
│ │ │ │ ├── oxo_train_x.csv
│ │ │ │ ├── oxo_train_y.csv
│ │ │ │ └── oxo_vars.csv
│ │ │ ├── oxo_model.h5
│ │ │ ├── oxo_model.json
│ │ │ ├── oxo_test_names.csv
│ │ │ ├── oxo_test_x.csv
│ │ │ ├── oxo_test_y.csv
│ │ │ ├── oxo_train_names.csv
│ │ │ ├── oxo_train_x.csv
│ │ │ ├── oxo_train_y.csv
│ │ │ ├── oxo_val_x.csv
│ │ │ ├── oxo_val_y.csv
│ │ │ └── oxo_vars.csv
│ │ ├── rescaling_data/
│ │ │ ├── gap_mean_x.csv
│ │ │ ├── gap_mean_y.csv
│ │ │ ├── gap_var_x.csv
│ │ │ ├── gap_var_y.csv
│ │ │ ├── geo_static_clf_mean_x.csv
│ │ │ ├── geo_static_clf_mean_y.csv
│ │ │ ├── geo_static_clf_var_x.csv
│ │ │ ├── geo_static_clf_var_y.csv
│ │ │ ├── hat_mean_x.csv
│ │ │ ├── hat_mean_y.csv
│ │ │ ├── hat_var_x.csv
│ │ │ ├── hat_var_y.csv
│ │ │ ├── homo_empty_mean_x.csv
│ │ │ ├── homo_empty_mean_y.csv
│ │ │ ├── homo_empty_nocharge/
│ │ │ │ ├── homo_empty_mean_x.csv
│ │ │ │ ├── homo_empty_mean_y.csv
│ │ │ │ ├── homo_empty_var_x.csv
│ │ │ │ └── homo_empty_var_y.csv
│ │ │ ├── homo_empty_var_x.csv
│ │ │ ├── homo_empty_var_y.csv
│ │ │ ├── homo_mean_x.csv
│ │ │ ├── homo_mean_y.csv
│ │ │ ├── homo_var_x.csv
│ │ │ ├── homo_var_y.csv
│ │ │ ├── hs_ii_mean_x.csv
│ │ │ ├── hs_ii_mean_y.csv
│ │ │ ├── hs_ii_var_x.csv
│ │ │ ├── hs_ii_var_y.csv
│ │ │ ├── hs_iii_mean_x.csv
│ │ │ ├── hs_iii_mean_y.csv
│ │ │ ├── hs_iii_var_x.csv
│ │ │ ├── hs_iii_var_y.csv
│ │ │ ├── ls_ii_mean_x.csv
│ │ │ ├── ls_ii_mean_y.csv
│ │ │ ├── ls_ii_var_x.csv
│ │ │ ├── ls_ii_var_y.csv
│ │ │ ├── ls_iii_mean_x.csv
│ │ │ ├── ls_iii_mean_y.csv
│ │ │ ├── ls_iii_var_x.csv
│ │ │ ├── ls_iii_var_y.csv
│ │ │ ├── old/
│ │ │ │ ├── oxo_mean_x.csv
│ │ │ │ ├── oxo_mean_y.csv
│ │ │ │ ├── oxo_var_x.csv
│ │ │ │ └── oxo_var_y.csv
│ │ │ ├── oxo20_mean_x.csv
│ │ │ ├── oxo20_mean_y.csv
│ │ │ ├── oxo20_var_x.csv
│ │ │ ├── oxo20_var_y.csv
│ │ │ ├── oxo_mean_x.csv
│ │ │ ├── oxo_mean_y.csv
│ │ │ ├── oxo_var_x.csv
│ │ │ ├── oxo_var_y.csv
│ │ │ ├── sc_static_clf_mean_x.csv
│ │ │ ├── sc_static_clf_mean_y.csv
│ │ │ ├── sc_static_clf_var_x.csv
│ │ │ ├── sc_static_clf_var_y.csv
│ │ │ ├── split_mean_x.csv
│ │ │ ├── split_mean_y.csv
│ │ │ ├── split_var_x.csv
│ │ │ └── split_var_y.csv
│ │ ├── sc_static_clf/
│ │ │ ├── sc_static_clf_model.h5
│ │ │ ├── sc_static_clf_train_name.csv
│ │ │ ├── sc_static_clf_train_x.csv
│ │ │ ├── sc_static_clf_train_y.csv
│ │ │ ├── sc_static_clf_vars.csv
│ │ │ └── sc_static_csl_ensemble_spectro/
│ │ │ ├── spectro_all_sc_0.h5
│ │ │ ├── spectro_all_sc_1.h5
│ │ │ ├── spectro_all_sc_2.h5
│ │ │ ├── spectro_all_sc_3.h5
│ │ │ ├── spectro_all_sc_4.h5
│ │ │ ├── spectro_all_sc_5.h5
│ │ │ ├── spectro_all_sc_6.h5
│ │ │ ├── spectro_all_sc_7.h5
│ │ │ ├── spectro_all_sc_8.h5
│ │ │ └── spectro_all_sc_9.h5
│ │ └── split/
│ │ ├── split_model.h5
│ │ ├── split_model.json
│ │ ├── split_vars.csv
│ │ ├── split_x.csv
│ │ ├── split_y.csv
│ │ └── train_names.csv
│ └── utils/
│ ├── Graph_Hash.py
│ ├── Importing_Functions.py
│ ├── LigandBreakdown.py
│ ├── __init__.py
│ ├── decorators.py
│ ├── metaclasses.py
│ ├── nx_helpers.py
│ ├── openbabel_helpers.py
│ ├── tensorflow.py
│ └── timer.py
├── pyproject.toml
├── tests/
│ ├── README.txt
│ ├── conftest.py
│ ├── examples/
│ │ ├── test_example_1.py
│ │ ├── test_example_3.py
│ │ ├── test_example_5.py
│ │ ├── test_example_7.py
│ │ ├── test_example_8.py
│ │ └── test_example_tbp.py
│ ├── helperFuncs.py
│ ├── informatics/
│ │ ├── test_MOF_descriptors.py
│ │ ├── test_MOF_functional_group_add.py
│ │ ├── test_MOF_functional_group_add_v2.py
│ │ ├── test_MOF_linker_rotation.py
│ │ ├── test_PBC_functions.py
│ │ ├── test_active_learning.py
│ │ ├── test_coulomb_analyze.py
│ │ └── test_graph_racs.py
│ ├── ml/
│ │ ├── test_kernels.py
│ │ └── test_layers.py
│ ├── test_atom3D.py
│ ├── test_autocorrelation.py
│ ├── test_basic_imports.py
│ ├── test_cli.py
│ ├── test_decoration.py
│ ├── test_distgeom.py
│ ├── test_ff_xtb.py
│ ├── test_geocheck_oct.py
│ ├── test_geocheck_one_empty.py
│ ├── test_geometry.py
│ ├── test_inparse.py
│ ├── test_io.py
│ ├── test_jobgen.py
│ ├── test_joption_pythonic.py
│ ├── test_lig_load.py
│ ├── test_ligand_assign.py
│ ├── test_ligand_assign_consistent.py
│ ├── test_ligand_class.py
│ ├── test_ligands.py
│ ├── test_mol2D.py
│ ├── test_mol3D.py
│ ├── test_molcas_caspt2.py
│ ├── test_molcas_casscf.py
│ ├── test_old_ANNs.py
│ ├── test_orca_ccsdt.py
│ ├── test_orca_dft.py
│ ├── test_qcgen.py
│ ├── test_racs.py
│ ├── test_rmsd.py
│ ├── test_structgen_functions.py
│ ├── test_tetrahedral.py
│ ├── testresources/
│ │ ├── inputs/
│ │ │ ├── cif_files/
│ │ │ │ ├── Co_MOF_with_duplicate.cif
│ │ │ │ ├── Co_MOF_with_overlap.cif
│ │ │ │ ├── Co_MOF_with_solvent.cif
│ │ │ │ ├── ETECIR_clean.cif
│ │ │ │ ├── FAVGUH_clean.cif
│ │ │ │ ├── FOKYIP_clean.cif
│ │ │ │ ├── MIL-53.cif
│ │ │ │ ├── NEXXIZ_clean.cif
│ │ │ │ ├── SETDUS_clean.cif
│ │ │ │ ├── TIRLIQ.cif
│ │ │ │ ├── UXUPEK_clean.cif
│ │ │ │ ├── UiO-66.cif
│ │ │ │ ├── UiO-67.cif
│ │ │ │ ├── VONBIK_clean.cif
│ │ │ │ ├── YAHPON.cif
│ │ │ │ ├── YICDAR_clean.cif
│ │ │ │ ├── Zn_MOF_with_duplicate.cif
│ │ │ │ ├── Zn_MOF_with_overlap.cif
│ │ │ │ ├── Zn_MOF_with_solvent.cif
│ │ │ │ ├── odac-21383.cif
│ │ │ │ ├── odac-21433.cif
│ │ │ │ ├── odac-21478.cif
│ │ │ │ ├── odac-21735.cif
│ │ │ │ ├── odac-21816.cif
│ │ │ │ └── pd_test_tutorial_2.cif
│ │ │ ├── edge_compounds/
│ │ │ │ ├── BUFLUM_comp_0.mol2
│ │ │ │ ├── BUHMID_comp_0.mol2
│ │ │ │ ├── COYXUM_comp_0.mol2
│ │ │ │ ├── COYYEX_comp_0.mol2
│ │ │ │ └── COYYIB_comp_0.mol2
│ │ │ ├── geocheck/
│ │ │ │ ├── H_transfer/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── all_flying_away/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── atom_ordering_mismatch/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── broken_ligands/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── catom_change/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── compact_bonding/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── iodide_radius/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── iodine_sulfur/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── ligand_assemble/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── ligand_bent/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── linear_broken/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── methane_trans/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── oct_comp_greedy/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── one_empty_bad/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── one_empty_good/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── rotational_group/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ ├── switch_test/
│ │ │ │ │ ├── init.xyz
│ │ │ │ │ └── opt.xyz
│ │ │ │ └── triplebond_linear_broken/
│ │ │ │ ├── init.xyz
│ │ │ │ └── opt.xyz
│ │ │ ├── geometry_type/
│ │ │ │ ├── linear.xyz
│ │ │ │ ├── octahedral.xyz
│ │ │ │ ├── pentagonal_bipyramidal.xyz
│ │ │ │ ├── pentagonal_planar.xyz
│ │ │ │ ├── pentagonal_pyramidal.xyz
│ │ │ │ ├── seesaw.xyz
│ │ │ │ ├── square_antiprismatic.xyz
│ │ │ │ ├── square_planar.xyz
│ │ │ │ ├── square_pyramidal.xyz
│ │ │ │ ├── t_shape.xyz
│ │ │ │ ├── tetrahedral.xyz
│ │ │ │ ├── tricapped_trigonal_prismatic.xyz
│ │ │ │ ├── trigonal_bipyramidal.xyz
│ │ │ │ ├── trigonal_planar.xyz
│ │ │ │ ├── trigonal_prismatic.xyz
│ │ │ │ └── trigonal_pyramidal.xyz
│ │ │ ├── hapticity_compounds/
│ │ │ │ ├── BOWROX_comp_0.mol2
│ │ │ │ ├── BOXTEQ_comp_0.mol2
│ │ │ │ ├── BOXTIU_comp_0.mol2
│ │ │ │ ├── BOZHOQ_comp_2.mol2
│ │ │ │ ├── BOZHUW_comp_2.mol2
│ │ │ │ ├── BUFLUM_comp_0.mol2
│ │ │ │ ├── BUHMID_comp_0.mol2
│ │ │ │ ├── COYXUM_comp_0.mol2
│ │ │ │ ├── COYYEX_comp_0.mol2
│ │ │ │ └── COYYIB_comp_0.mol2
│ │ │ ├── in_files/
│ │ │ │ ├── example_1/
│ │ │ │ │ ├── example_1.in
│ │ │ │ │ └── example_1_noff.in
│ │ │ │ ├── example_3/
│ │ │ │ │ ├── example_3.in
│ │ │ │ │ └── example_3_noff.in
│ │ │ │ ├── example_5/
│ │ │ │ │ ├── example_5.in
│ │ │ │ │ ├── example_5_noff.in
│ │ │ │ │ └── example_5_v3.in
│ │ │ │ ├── example_7/
│ │ │ │ │ └── example_7.in
│ │ │ │ ├── example_8/
│ │ │ │ │ └── example_8.in
│ │ │ │ ├── example_tbp/
│ │ │ │ │ └── example_tbp.in
│ │ │ │ ├── gfnff/
│ │ │ │ │ └── gfnff_NH3_BA.in
│ │ │ │ ├── molcas/
│ │ │ │ │ ├── molcas_caspt2.in
│ │ │ │ │ └── molcas_casscf.in
│ │ │ │ ├── old_ann/
│ │ │ │ │ └── old_ANN.in
│ │ │ │ ├── orca/
│ │ │ │ │ ├── orca_ccsdt.in
│ │ │ │ │ └── orca_dft.in
│ │ │ │ ├── tetrahedral/
│ │ │ │ │ ├── tetrahedral_1.in
│ │ │ │ │ └── tetrahedral_2.in
│ │ │ │ ├── tutorial_10/
│ │ │ │ │ ├── gly.mol
│ │ │ │ │ ├── tutorial_10_from_mol.in
│ │ │ │ │ ├── tutorial_10_from_smiles.in
│ │ │ │ │ └── tutorial_10_from_smiles_2.in
│ │ │ │ ├── tutorial_11/
│ │ │ │ │ └── octahedral.xyz
│ │ │ │ ├── tutorial_2/
│ │ │ │ │ └── tutorial_2.in
│ │ │ │ ├── tutorial_3/
│ │ │ │ │ └── tutorial_3.in
│ │ │ │ ├── tutorial_4/
│ │ │ │ │ ├── chembl_33_minimal.sdf
│ │ │ │ │ ├── tutorial_4_dissim.in
│ │ │ │ │ ├── tutorial_4_human.in
│ │ │ │ │ └── tutorial_4_query.in
│ │ │ │ ├── tutorial_5/
│ │ │ │ │ └── tutorial_5.in
│ │ │ │ ├── tutorial_6/
│ │ │ │ │ ├── tutorial_6.in
│ │ │ │ │ ├── tutorial_6_fepo.in
│ │ │ │ │ ├── tutorial_6_loaded_fepo.in
│ │ │ │ │ ├── tutorial_6_mno4.in
│ │ │ │ │ └── tutorial_6_stag_3co.in
│ │ │ │ ├── tutorial_7/
│ │ │ │ │ ├── tutorial_7.in
│ │ │ │ │ ├── tutorial_7_decoration.in
│ │ │ │ │ ├── tutorial_7_decoration_4lig.in
│ │ │ │ │ └── tutorial_7_decoration_multi.in
│ │ │ │ ├── tutorial_8/
│ │ │ │ │ ├── tutorial_8_part_one.in
│ │ │ │ │ └── tutorial_8_part_two.in
│ │ │ │ ├── tutorial_9/
│ │ │ │ │ ├── tutorial_9_part_one.in
│ │ │ │ │ └── tutorial_9_part_two.in
│ │ │ │ └── xtb/
│ │ │ │ ├── xtb_ANC_fail.in
│ │ │ │ ├── xtb_H2O_before.in
│ │ │ │ ├── xtb_bipy_spin5.in
│ │ │ │ └── xtb_final_opt.in
│ │ │ ├── informatics/
│ │ │ │ ├── co_acac_en.mol2
│ │ │ │ ├── co_acac_en_water_hydrogensulfide.mol2
│ │ │ │ ├── fe_carbonyl_6.mol2
│ │ │ │ └── mn_furan_water_ammonia_furan_water_ammonia.mol2
│ │ │ ├── io/
│ │ │ │ ├── ADUYUV.mol2
│ │ │ │ ├── acac.mol
│ │ │ │ ├── acac.mol2
│ │ │ │ ├── formaldehyde.mol2
│ │ │ │ ├── furan.mol
│ │ │ │ ├── furan.mol2
│ │ │ │ ├── water.mol
│ │ │ │ └── water.mol2
│ │ │ ├── ligand_assign_consistent/
│ │ │ │ ├── fe_acac_bipy_bipy.xyz
│ │ │ │ └── fe_water_ammonia_carbonyl_formaldehyde_hydrogensulfide_hydrocyanide.xyz
│ │ │ ├── ligand_class/
│ │ │ │ ├── acac_ref.mol2
│ │ │ │ └── fe_acac.mol2
│ │ │ ├── mol2_files/
│ │ │ │ ├── carbonyl.mol2
│ │ │ │ ├── fluorine.mol2
│ │ │ │ ├── phenylpyridine.mol2
│ │ │ │ └── porphine.mol2
│ │ │ ├── mol_files/
│ │ │ │ ├── caffeine.mol
│ │ │ │ ├── pdms_unit.mol
│ │ │ │ └── pdp.mol
│ │ │ ├── net_files/
│ │ │ │ ├── HKUST-1_linker.net
│ │ │ │ └── HKUST-1_sbu.net
│ │ │ ├── qcgen/
│ │ │ │ └── FeH2O6.xyz
│ │ │ ├── rmsd/
│ │ │ │ ├── BUWGOQ.xyz
│ │ │ │ ├── BUWGOQ_final.xyz
│ │ │ │ ├── BUWGOQ_final_reordered.xyz
│ │ │ │ ├── BUWGOQ_noH.xyz
│ │ │ │ ├── BUWGOQ_noH_final.xyz
│ │ │ │ ├── example_1.xyz
│ │ │ │ └── example_1_noff.xyz
│ │ │ ├── sandwich_compounds/
│ │ │ │ ├── BOWROX_comp_0.mol2
│ │ │ │ ├── BOXTEQ_comp_0.mol2
│ │ │ │ ├── BOXTIU_comp_0.mol2
│ │ │ │ ├── BOZHOQ_comp_2.mol2
│ │ │ │ └── BOZHUW_comp_2.mol2
│ │ │ └── xyz_files/
│ │ │ ├── BOWROX_comp_0.xyz
│ │ │ ├── FIrpic.xyz
│ │ │ ├── HKUST-1_linker.xyz
│ │ │ ├── HKUST-1_sbu.xyz
│ │ │ ├── UiO-66_sbu.xyz
│ │ │ ├── benzene.xyz
│ │ │ ├── bimetallic_al_complex.xyz
│ │ │ ├── caffeine.xyz
│ │ │ ├── co.xyz
│ │ │ ├── co_acac_en_water_hydrogensulfide.xyz
│ │ │ ├── cr3_f6_optimization.xyz
│ │ │ ├── cr_acac_acac_bipy.xyz
│ │ │ ├── far_co.xyz
│ │ │ ├── fe_bipy_2_bifuran.xyz
│ │ │ ├── fe_bipy_3.xyz
│ │ │ ├── fe_carbonyl_6.xyz
│ │ │ ├── fe_complex.xyz
│ │ │ ├── fe_pyr_4_furan_2.xyz
│ │ │ ├── fe_pyr_6.xyz
│ │ │ ├── fepo.xyz
│ │ │ ├── formaldehyde.xyz
│ │ │ ├── in_complex.xyz
│ │ │ ├── loaded_fepo.xyz
│ │ │ ├── mn_furan_water_ammonia_furan_water_ammonia.xyz
│ │ │ ├── mno5.xyz
│ │ │ ├── ni_porphyrin_complex.xyz
│ │ │ ├── pdms_unit.xyz
│ │ │ ├── pdp.xyz
│ │ │ ├── penicillin.xyz
│ │ │ ├── phenanthroline.xyz
│ │ │ ├── slab.xyz
│ │ │ └── taurine.xyz
│ │ └── refs/
│ │ ├── decorated_xyz/
│ │ │ └── mod_benzene.xyz
│ │ ├── example/
│ │ │ ├── example_1/
│ │ │ │ ├── example_1.report
│ │ │ │ ├── example_1.xyz
│ │ │ │ ├── example_1_noff.report
│ │ │ │ └── example_1_noff.xyz
│ │ │ ├── example_3/
│ │ │ │ ├── example_3.report
│ │ │ │ ├── example_3.xyz
│ │ │ │ ├── example_3_noff.report
│ │ │ │ └── example_3_noff.xyz
│ │ │ ├── example_5/
│ │ │ │ ├── example_5.report
│ │ │ │ ├── example_5.xyz
│ │ │ │ ├── example_5_noff.report
│ │ │ │ ├── example_5_noff.xyz
│ │ │ │ ├── example_5_v3.report
│ │ │ │ ├── example_5_v3.xyz
│ │ │ │ ├── example_5_v3_noff.report
│ │ │ │ └── example_5_v3_noff.xyz
│ │ │ ├── example_7/
│ │ │ │ ├── example_7.report
│ │ │ │ └── example_7.xyz
│ │ │ ├── example_8/
│ │ │ │ ├── example_8.report
│ │ │ │ └── example_8.xyz
│ │ │ └── example_tbp/
│ │ │ ├── example_tbp.report
│ │ │ └── example_tbp.xyz
│ │ ├── geocheck/
│ │ │ ├── H_transfer/
│ │ │ │ └── ref.json
│ │ │ ├── all_flying_away/
│ │ │ │ └── ref.json
│ │ │ ├── atom_ordering_mismatch/
│ │ │ │ └── ref.json
│ │ │ ├── broken_ligands/
│ │ │ │ └── ref.json
│ │ │ ├── catom_change/
│ │ │ │ └── ref.json
│ │ │ ├── compact_bonding/
│ │ │ │ └── ref.json
│ │ │ ├── iodide_radius/
│ │ │ │ └── ref.json
│ │ │ ├── iodine_sulfur/
│ │ │ │ └── ref.json
│ │ │ ├── ligand_assemble/
│ │ │ │ └── ref.json
│ │ │ ├── ligand_bent/
│ │ │ │ └── ref.json
│ │ │ ├── linear_broken/
│ │ │ │ └── ref.json
│ │ │ ├── methane_trans/
│ │ │ │ └── ref.json
│ │ │ ├── oct_comp_greedy/
│ │ │ │ └── ref.json
│ │ │ ├── one_empty_bad/
│ │ │ │ └── ref.json
│ │ │ ├── one_empty_good/
│ │ │ │ └── ref.json
│ │ │ ├── rotational_group/
│ │ │ │ └── ref.json
│ │ │ ├── switch_test/
│ │ │ │ └── ref.json
│ │ │ └── triplebond_linear_broken/
│ │ │ └── ref.json
│ │ ├── gfnff/
│ │ │ ├── gfnff_NH3_BA.report
│ │ │ └── gfnff_NH3_BA.xyz
│ │ ├── graph_hash/
│ │ │ ├── benzene.txt
│ │ │ ├── co.txt
│ │ │ └── cr3_f6_optimization.txt
│ │ ├── informatics/
│ │ │ ├── json/
│ │ │ │ ├── lig_racs_co_acac_en.json
│ │ │ │ ├── lig_racs_fe_carbonyl_6.json
│ │ │ │ ├── lig_racs_mn_furan_water_ammonia_furan_water_ammonia.json
│ │ │ │ ├── racs_Co_acac_en_water_hydrogensulfide.json
│ │ │ │ ├── racs_Fe_carbonyl_6.json
│ │ │ │ └── racs_Mn_furan_water_ammonia_furan_water_ammonia.json
│ │ │ └── mof/
│ │ │ ├── MOF_descriptors/
│ │ │ │ ├── ETECIR_clean/
│ │ │ │ │ ├── ETECIR_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── FAVGUH_clean/
│ │ │ │ │ ├── FAVGUH_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── FOKYIP_clean/
│ │ │ │ │ ├── FOKYIP_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── NEXXIZ_clean/
│ │ │ │ │ ├── NEXXIZ_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── SETDUS_clean/
│ │ │ │ │ ├── SETDUS_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── TIRLIQ/
│ │ │ │ │ ├── TIRLIQ.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── UXUPEK_clean/
│ │ │ │ │ ├── UXUPEK_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── VONBIK_clean/
│ │ │ │ │ ├── VONBIK_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── YAHPON/
│ │ │ │ │ ├── YAHPON.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── YICDAR_clean/
│ │ │ │ │ ├── YICDAR_clean.json
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21383/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21383.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21433/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21433.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21478/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21478.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ ├── odac-21735/
│ │ │ │ │ ├── lc_descriptors.csv
│ │ │ │ │ ├── linker_descriptors.csv
│ │ │ │ │ ├── odac-21735.json
│ │ │ │ │ └── sbu_descriptors.csv
│ │ │ │ └── odac-21816/
│ │ │ │ ├── lc_descriptors.csv
│ │ │ │ ├── linker_descriptors.csv
│ │ │ │ ├── odac-21816.json
│ │ │ │ └── sbu_descriptors.csv
│ │ │ ├── cif/
│ │ │ │ ├── Co_MOF_duplicate_fixed.cif
│ │ │ │ ├── Co_MOF_overlap_fixed.cif
│ │ │ │ ├── Co_MOF_solvent_removed.cif
│ │ │ │ ├── MIL-53_rot_45-00.cif
│ │ │ │ ├── UiO-66_rot_135-00.cif
│ │ │ │ ├── UiO-66_rot_270-00.cif
│ │ │ │ ├── UiO-66_rot_45-00.cif
│ │ │ │ ├── UiO-67_rot_45-00.cif
│ │ │ │ ├── Zn_MOF_duplicate_fixed.cif
│ │ │ │ ├── Zn_MOF_overlap_fixed.cif
│ │ │ │ ├── Zn_MOF_solvent_removed.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CN_1.cif
│ │ │ │ ├── functionalized_UiO-66_CN_2.cif
│ │ │ │ ├── functionalized_UiO-66_F_1.cif
│ │ │ │ ├── functionalized_UiO-66_F_2.cif
│ │ │ │ ├── functionalized_UiO-66_I_1.cif
│ │ │ │ ├── functionalized_UiO-66_I_2.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_2.cif
│ │ │ │ ├── functionalized_UiO-66_OH_1.cif
│ │ │ │ ├── functionalized_UiO-66_OH_2.cif
│ │ │ │ └── test_write_cif.cif
│ │ │ ├── functionalized_cifs_v2/
│ │ │ │ ├── functionalized_UiO-66_Br_1.cif
│ │ │ │ ├── functionalized_UiO-66_Br_2.cif
│ │ │ │ ├── functionalized_UiO-66_CF3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CF3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_1.cif
│ │ │ │ ├── functionalized_UiO-66_CH3_2.cif
│ │ │ │ ├── functionalized_UiO-66_CN_1.cif
│ │ │ │ ├── functionalized_UiO-66_CN_2.cif
│ │ │ │ ├── functionalized_UiO-66_COOH_1.cif
│ │ │ │ ├── functionalized_UiO-66_COOH_2.cif
│ │ │ │ ├── functionalized_UiO-66_Cl_1.cif
│ │ │ │ ├── functionalized_UiO-66_Cl_2.cif
│ │ │ │ ├── functionalized_UiO-66_F_1.cif
│ │ │ │ ├── functionalized_UiO-66_F_2.cif
│ │ │ │ ├── functionalized_UiO-66_NH2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NH2_2.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_1.cif
│ │ │ │ ├── functionalized_UiO-66_NO2_2.cif
│ │ │ │ ├── functionalized_UiO-66_OH_1.cif
│ │ │ │ ├── functionalized_UiO-66_OH_2.cif
│ │ │ │ ├── functionalized_UiO-66_SH_1.cif
│ │ │ │ ├── functionalized_UiO-66_SH_2.cif
│ │ │ │ ├── functionalized_UiO-66_sulfonic_1.cif
│ │ │ │ └── functionalized_UiO-66_sulfonic_2.cif
│ │ │ ├── json/
│ │ │ │ ├── FOKYIP_clean_all_atom_types.json
│ │ │ │ ├── NEXXIZ_clean_all_atom_types.json
│ │ │ │ ├── SETDUS_clean_all_atom_types.json
│ │ │ │ ├── UXUPEK_clean_all_atom_types.json
│ │ │ │ ├── VONBIK_clean_all_atom_types.json
│ │ │ │ ├── YICDAR_clean_all_atom_types.json
│ │ │ │ ├── test_findPaths.json
│ │ │ │ ├── test_get_closed_subgraph_adj_matrix.json
│ │ │ │ ├── test_get_closed_subgraph_linker_list.json
│ │ │ │ ├── test_get_closed_subgraph_linker_subgraphlist.json
│ │ │ │ ├── test_get_closed_subgraph_linkers.json
│ │ │ │ └── test_get_closed_subgraph_remove_list.json
│ │ │ ├── net/
│ │ │ │ ├── test_writeXYZandGraph.net
│ │ │ │ └── test_writeXYZandGraph.xyz
│ │ │ └── txt/
│ │ │ ├── FOKYIP_clean_adj_mat.txt
│ │ │ ├── FOKYIP_clean_cpar.txt
│ │ │ ├── FOKYIP_clean_distance_mat.txt
│ │ │ ├── FOKYIP_clean_fcoords.txt
│ │ │ ├── NEXXIZ_clean_adj_mat.txt
│ │ │ ├── NEXXIZ_clean_cpar.txt
│ │ │ ├── NEXXIZ_clean_distance_mat.txt
│ │ │ ├── NEXXIZ_clean_fcoords.txt
│ │ │ ├── SETDUS_clean_adj_mat.txt
│ │ │ ├── SETDUS_clean_cpar.txt
│ │ │ ├── SETDUS_clean_distance_mat.txt
│ │ │ ├── SETDUS_clean_fcoords.txt
│ │ │ ├── UXUPEK_clean_adj_mat.txt
│ │ │ ├── UXUPEK_clean_cpar.txt
│ │ │ ├── UXUPEK_clean_distance_mat.txt
│ │ │ ├── UXUPEK_clean_fcoords.txt
│ │ │ ├── VONBIK_clean_adj_mat.txt
│ │ │ ├── VONBIK_clean_cpar.txt
│ │ │ ├── VONBIK_clean_distance_mat.txt
│ │ │ ├── VONBIK_clean_fcoords.txt
│ │ │ ├── YICDAR_clean_adj_mat.txt
│ │ │ ├── YICDAR_clean_cpar.txt
│ │ │ ├── YICDAR_clean_distance_mat.txt
│ │ │ └── YICDAR_clean_fcoords.txt
│ │ ├── joption_pythonic_jobscript
│ │ ├── json/
│ │ │ ├── test_autocorrelation/
│ │ │ │ ├── atom_only_autocorrelation/
│ │ │ │ │ ├── 0-5-10-15_3_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── atom_only_deltametric/
│ │ │ │ │ ├── 0-5-10-15_3_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── autocorrelation/
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── construct_property_vector/
│ │ │ │ │ ├── electronegativity.json
│ │ │ │ │ ├── group_number.json
│ │ │ │ │ ├── ident.json
│ │ │ │ │ ├── nuclear_charge.json
│ │ │ │ │ ├── polarizability.json
│ │ │ │ │ ├── size.json
│ │ │ │ │ └── topology.json
│ │ │ │ ├── deltametric/
│ │ │ │ │ ├── 0_2_True_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False.json
│ │ │ │ │ ├── 5_3_False_True_True.json
│ │ │ │ │ └── 5_3_True_False_False.json
│ │ │ │ ├── full_autocorrelation/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── generate_atomonly_autocorrelations/
│ │ │ │ │ ├── 0-5-10-15_3_False_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False_False.json
│ │ │ │ │ ├── 5_3_False_True_True_True.json
│ │ │ │ │ └── 5_3_True_False_False_False.json
│ │ │ │ ├── generate_atomonly_deltametrics/
│ │ │ │ │ ├── 0-5-10-15_3_False_False_True_False.json
│ │ │ │ │ ├── 0-5-10-15_3_True_False_False_False.json
│ │ │ │ │ ├── 0_2_True_False_False_False.json
│ │ │ │ │ ├── 0_3_True_False_False_False.json
│ │ │ │ │ ├── 5_3_False_False_False_False.json
│ │ │ │ │ ├── 5_3_False_True_False_False.json
│ │ │ │ │ ├── 5_3_False_True_True_True.json
│ │ │ │ │ └── 5_3_True_False_False_False.json
│ │ │ │ ├── generate_full_complex_autocorrelations/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_1/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_2/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_autocorrelations_3/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_1/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_2/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── generate_metal_deltametrics_3/
│ │ │ │ │ ├── 2_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_False_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_False_False_False_False.json
│ │ │ │ │ ├── 3_False_True_True_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_False_False.json
│ │ │ │ │ ├── 3_True_False_False_False_True_False.json
│ │ │ │ │ ├── 3_True_False_False_True_False_False.json
│ │ │ │ │ └── 3_True_False_False_True_True_True.json
│ │ │ │ ├── get_descriptor_vector/
│ │ │ │ │ ├── 2_False_False_False_False_False_names.json
│ │ │ │ │ ├── 2_False_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_False_False_False_names.json
│ │ │ │ │ ├── 3_False_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_False_False_True_names.json
│ │ │ │ │ ├── 3_False_False_False_False_True_vals.json
│ │ │ │ │ ├── 3_False_False_True_False_False_names.json
│ │ │ │ │ ├── 3_False_False_True_False_False_vals.json
│ │ │ │ │ ├── 3_False_False_True_True_False_names.json
│ │ │ │ │ ├── 3_False_False_True_True_False_vals.json
│ │ │ │ │ ├── 3_True_False_False_False_False_names.json
│ │ │ │ │ ├── 3_True_False_False_False_False_vals.json
│ │ │ │ │ ├── 3_True_True_False_False_False_names.json
│ │ │ │ │ ├── 3_True_True_False_False_False_vals.json
│ │ │ │ │ ├── 3_True_True_True_True_True_names.json
│ │ │ │ │ └── 3_True_True_True_True_True_vals.json
│ │ │ │ ├── metal_only_autocorrelation_1/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_autocorrelation_2/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_autocorrelation_3/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_deltametric_1/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ ├── metal_only_deltametric_2/
│ │ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ │ └── topology_2_True_False_False.json
│ │ │ │ └── metal_only_deltametric_3/
│ │ │ │ ├── group_number_3_False_False_False.json
│ │ │ │ ├── ident_3_True_False_False.json
│ │ │ │ ├── nuclear_charge_3_False_True_True.json
│ │ │ │ ├── polarizability_3_False_True_False.json
│ │ │ │ ├── size_3_True_False_False.json
│ │ │ │ └── topology_2_True_False_False.json
│ │ │ └── test_mol3D/
│ │ │ ├── assign_graph_from_net/
│ │ │ │ ├── HKUST-1_linker_graph.json
│ │ │ │ └── HKUST-1_sbu_graph.json
│ │ │ ├── convert2OBMol/
│ │ │ │ ├── caffeine_fc_False_OB_dict.json
│ │ │ │ ├── caffeine_fc_True_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_fc_False_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_fc_True_OB_dict.json
│ │ │ │ ├── taurine_fc_False_OB_dict.json
│ │ │ │ └── taurine_fc_True_OB_dict.json
│ │ │ ├── convert2OBMol2/
│ │ │ │ ├── caffeine_OB_dict.json
│ │ │ │ ├── caffeine_bo_mat.json
│ │ │ │ ├── cr3_f6_optimization_OB_dict.json
│ │ │ │ ├── cr3_f6_optimization_bo_mat.json
│ │ │ │ ├── taurine_OB_dict.json
│ │ │ │ └── taurine_bo_mat.json
│ │ │ ├── createMolecularGraph/
│ │ │ │ ├── FIrpic_oct_False_graph.json
│ │ │ │ ├── FIrpic_oct_True_graph.json
│ │ │ │ ├── caffeine_oct_False_graph.json
│ │ │ │ ├── caffeine_oct_True_graph.json
│ │ │ │ ├── fe_complex_oct_False_graph.json
│ │ │ │ └── fe_complex_oct_True_graph.json
│ │ │ ├── deleteatom/
│ │ │ │ ├── FIrpic_bo_dict_False_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_False_graph_True.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_False.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_True_graph_False.json
│ │ │ │ └── penicillin_bo_dict_True_graph_True.json
│ │ │ ├── deleteatoms/
│ │ │ │ ├── FIrpic_bo_dict_False_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_False_graph_True.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_False.json
│ │ │ │ ├── FIrpic_bo_dict_True_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_False.json
│ │ │ │ ├── penicillin_bo_dict_False_graph_True.json
│ │ │ │ ├── penicillin_bo_dict_True_graph_False.json
│ │ │ │ └── penicillin_bo_dict_True_graph_True.json
│ │ │ ├── populateBOMatrix/
│ │ │ │ ├── benzene_bo_dict_False.json
│ │ │ │ ├── benzene_bo_dict_True.json
│ │ │ │ ├── benzene_molBOMat.json
│ │ │ │ ├── caffeine_bo_dict_False.json
│ │ │ │ ├── caffeine_bo_dict_True.json
│ │ │ │ └── caffeine_molBOMat.json
│ │ │ ├── readfrommol/
│ │ │ │ ├── pdms_unit_bo_dict.json
│ │ │ │ ├── pdms_unit_bo_mat.json
│ │ │ │ ├── pdms_unit_graph.json
│ │ │ │ ├── pdp_bo_dict.json
│ │ │ │ ├── pdp_bo_mat.json
│ │ │ │ └── pdp_graph.json
│ │ │ └── readfrommol2/
│ │ │ ├── BOWROX_comp_0_bo_dict.json
│ │ │ ├── BOWROX_comp_0_bo_mat.json
│ │ │ ├── BOWROX_comp_0_graph.json
│ │ │ ├── formaldehyde_bo_dict.json
│ │ │ ├── formaldehyde_bo_mat.json
│ │ │ └── formaldehyde_graph.json
│ │ ├── molcas/
│ │ │ ├── molcas_caspt2.qcin
│ │ │ ├── molcas_caspt2.report
│ │ │ ├── molcas_caspt2.xyz
│ │ │ ├── molcas_casscf.qcin
│ │ │ ├── molcas_casscf.report
│ │ │ └── molcas_casscf.xyz
│ │ ├── old_ann/
│ │ │ ├── old_ANN.report
│ │ │ └── old_ANN.xyz
│ │ ├── orca/
│ │ │ ├── orca_ccsdt.qcin
│ │ │ ├── orca_ccsdt.report
│ │ │ ├── orca_ccsdt.xyz
│ │ │ ├── orca_dft.qcin
│ │ │ ├── orca_dft.report
│ │ │ └── orca_dft.xyz
│ │ ├── qcgen/
│ │ │ ├── gamgen/
│ │ │ │ └── FeH2O6/
│ │ │ │ └── B3LYP/
│ │ │ │ └── gam.inp
│ │ │ ├── mlpgen/
│ │ │ │ └── FeH2O6.mop
│ │ │ ├── molcgen/
│ │ │ │ └── molcas.input
│ │ │ ├── ogen/
│ │ │ │ └── orca.in
│ │ │ ├── qgen/
│ │ │ │ └── FeH2O6/
│ │ │ │ └── B3LYP/
│ │ │ │ └── qch.inp
│ │ │ └── tcgen/
│ │ │ └── terachem_input
│ │ ├── racs/
│ │ │ ├── generate_references.py
│ │ │ ├── racs_Co_acac_en_water_hydrogensulfide.pickle
│ │ │ ├── racs_Cr_acac_acac_bipy.pickle
│ │ │ ├── racs_Fe_carbonyl_6.pickle
│ │ │ └── racs_Mn_furan_water_ammonia_furan_water_ammonia.pickle
│ │ ├── structgen/
│ │ │ └── structgen_complex.xyz
│ │ ├── test_cli/
│ │ │ ├── fe_oct_2_water_6_s_5_conf_1.molinp
│ │ │ ├── fe_oct_2_water_6_s_5_conf_1.report
│ │ │ └── fe_oct_2_water_6_s_5_conf_1.xyz
│ │ ├── tetrahedral/
│ │ │ ├── tetrahedral_1_noff.report
│ │ │ ├── tetrahedral_1_noff.xyz
│ │ │ ├── tetrahedral_2_noff.report
│ │ │ └── tetrahedral_2_noff.xyz
│ │ ├── tutorial/
│ │ │ ├── tutorial_10/
│ │ │ │ ├── tutorial_10_from_mol.report
│ │ │ │ ├── tutorial_10_from_mol.xyz
│ │ │ │ ├── tutorial_10_from_smiles.report
│ │ │ │ ├── tutorial_10_from_smiles.xyz
│ │ │ │ ├── tutorial_10_from_smiles_2.report
│ │ │ │ └── tutorial_10_from_smiles_2.xyz
│ │ │ ├── tutorial_11/
│ │ │ │ └── ref.json
│ │ │ ├── tutorial_2/
│ │ │ │ └── tutorial_2.xyz
│ │ │ ├── tutorial_3/
│ │ │ │ ├── tutorial_3.report
│ │ │ │ └── tutorial_3.xyz
│ │ │ ├── tutorial_4/
│ │ │ │ ├── dissimres.smi
│ │ │ │ ├── simres.smi
│ │ │ │ └── simres_human.smi
│ │ │ ├── tutorial_5/
│ │ │ │ ├── tutorial_5.report
│ │ │ │ └── tutorial_5.xyz
│ │ │ ├── tutorial_6/
│ │ │ │ ├── tutorial_6.xyz
│ │ │ │ ├── tutorial_6_fepo.xyz
│ │ │ │ ├── tutorial_6_loaded_fepo.xyz
│ │ │ │ ├── tutorial_6_mno4.xyz
│ │ │ │ └── tutorial_6_stag_3co.xyz
│ │ │ ├── tutorial_7/
│ │ │ │ ├── tutorial_7_decoration.qcin
│ │ │ │ ├── tutorial_7_decoration.report
│ │ │ │ ├── tutorial_7_decoration.xyz
│ │ │ │ ├── tutorial_7_decoration_4lig.qcin
│ │ │ │ ├── tutorial_7_decoration_4lig.report
│ │ │ │ ├── tutorial_7_decoration_4lig.xyz
│ │ │ │ ├── tutorial_7_decoration_multi.qcin
│ │ │ │ ├── tutorial_7_decoration_multi.report
│ │ │ │ ├── tutorial_7_decoration_multi.xyz
│ │ │ │ ├── tutorial_7_s1.qcin
│ │ │ │ ├── tutorial_7_s1.report
│ │ │ │ ├── tutorial_7_s1.xyz
│ │ │ │ ├── tutorial_7_s5.qcin
│ │ │ │ ├── tutorial_7_s5.report
│ │ │ │ └── tutorial_7_s5.xyz
│ │ │ ├── tutorial_8/
│ │ │ │ ├── tutorial_8_part_one.report
│ │ │ │ ├── tutorial_8_part_one.xyz
│ │ │ │ ├── tutorial_8_part_two.report
│ │ │ │ └── tutorial_8_part_two.xyz
│ │ │ └── tutorial_9/
│ │ │ ├── tutorial_9_part_one.report
│ │ │ ├── tutorial_9_part_one.xyz
│ │ │ ├── tutorial_9_part_two.report
│ │ │ └── tutorial_9_part_two.xyz
│ │ ├── write_tests/
│ │ │ ├── writemol2_test_ignoreX_False.mol2
│ │ │ ├── writemol2_test_ignoreX_True.mol2
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_False_no_tabs_False.xyz
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_False_no_tabs_True.xyz
│ │ │ ├── writexyz_test_withgraph_False_ignoreX_True_no_tabs_False.xyz
│ │ │ └── writexyz_test_withgraph_True_ignoreX_False_no_tabs_False.xyz
│ │ ├── xtb/
│ │ │ ├── xtb_ANC_fail.report
│ │ │ ├── xtb_ANC_fail.xyz
│ │ │ ├── xtb_H2O_before.report
│ │ │ ├── xtb_H2O_before.xyz
│ │ │ ├── xtb_bipy_spin5.report
│ │ │ ├── xtb_bipy_spin5.xyz
│ │ │ ├── xtb_final_opt.report
│ │ │ └── xtb_final_opt.xyz
│ │ └── xyz_files/
│ │ ├── CC(C)O.xyz
│ │ └── pentacyanopentadienide.xyz
│ └── tutorials/
│ ├── test_tutorial_10.py
│ ├── test_tutorial_11.py
│ ├── test_tutorial_2.py
│ ├── test_tutorial_3.py
│ ├── test_tutorial_4.py
│ ├── test_tutorial_5.py
│ ├── test_tutorial_6.py
│ ├── test_tutorial_7.py
│ ├── test_tutorial_8.py
│ ├── test_tutorial_9_part_one.py
│ └── test_tutorial_9_part_two.py
└── workflows/
└── NandyJACSAu2022/
├── GeoFreeRAC.ipynb
├── bridge_functionalizer.py
├── frag_functionalizer.py
├── fragment_classes.py
└── macrocycle_synthesis.py
SYMBOL INDEX (1494 symbols across 154 files)
FILE: benchmark_distance.py
function old_distance (line 6) | def old_distance(r1, r2):
function new_distance (line 11) | def new_distance(r1, r2):
function benchmark (line 14) | def benchmark():
FILE: molSimplify/Classes/atom3D.py
class atom3D (line 13) | class atom3D:
method __init__ (line 30) | def __init__(self,
method __repr__ (line 100) | def __repr__(self):
method coords (line 111) | def coords(self):
method distance (line 125) | def distance(self, atom2):
method distancev (line 145) | def distancev(self, atom2):
method ismetal (line 165) | def ismetal(self, transition_metals_only=True, include_X=False) -> bool:
method setcoords (line 187) | def setcoords(self, xyz):
method symbol (line 207) | def symbol(self) -> str:
method mutate (line 219) | def mutate(self, newType='C'):
method translate (line 241) | def translate(self, dxyz):
method setEDIA (line 254) | def setEDIA(self, score):
FILE: molSimplify/Classes/dft_obs.py
class dft_observation (line 23) | class dft_observation:
method __init__ (line 24) | def __init__(self, name, geopath):
method sety (line 34) | def sety(self, y_value):
method obtain_mol3d (line 37) | def obtain_mol3d(self):
method get_coord (line 48) | def get_coord(self):
method get_descriptor_vector (line 51) | def get_descriptor_vector(self, lig_only, simple, flag_name=False, lou...
method append_descriptors (line 98) | def append_descriptors(self, list_of_names, list_of_props, prefix, suf...
function write_descriptor_csv (line 113) | def write_descriptor_csv(list_of_runs):
FILE: molSimplify/Classes/globalvars.py
function mybash (line 590) | def mybash(cmd):
function get_version (line 613) | def get_version():
class globalvars (line 625) | class globalvars(metaclass=Singleton):
method __init__ (line 628) | def __init__(self):
method amass (line 741) | def amass(self) -> Dict[str, Tuple[float, int, float, int]]:
method polarizability (line 751) | def polarizability(self) -> Dict[str, float]:
method tribonddict (line 761) | def tribonddict(self):
method bondsdict (line 771) | def bondsdict(self):
method elementsbynum (line 781) | def elementsbynum(self):
method endict (line 791) | def endict(self):
method vdwrad (line 801) | def vdwrad(self):
method metalslist (line 811) | def metalslist(self, transition_metals_only=True, include_X=False):
method groups (line 837) | def groups(self):
method periods (line 847) | def periods(self):
method geo_check_dictionary (line 857) | def geo_check_dictionary(self):
method get_all_geometries (line 867) | def get_all_geometries(self):
method get_all_angle_refs (line 877) | def get_all_angle_refs(self):
method get_all_polyhedra (line 887) | def get_all_polyhedra(self):
method add_custom_path (line 897) | def add_custom_path(self, path):
method bbcombs_mononuc (line 909) | def bbcombs_mononuc(self):
method testTF (line 961) | def testTF(self):
method testmatplotlib (line 977) | def testmatplotlib(self):
method getAllAAs (line 993) | def getAllAAs(self):
FILE: molSimplify/Classes/helpers.py
function read_atom (line 13) | def read_atom(line):
function makeMol (line 41) | def makeMol(a_dict, mols, conf, chains, prev_a_dict, bonds, aa=True):
FILE: molSimplify/Classes/ligand.py
class ligand (line 17) | class ligand:
method __init__ (line 35) | def __init__(self, master_mol, index_list, dent, read_lig=False):
method __repr__ (line 71) | def __repr__(self):
method obtain_mol3d (line 78) | def obtain_mol3d(self):
method get_lig_mol2 (line 110) | def get_lig_mol2(self, transition_metals_only=True, inds=None, include...
method percent_buried_vol (line 187) | def percent_buried_vol(self, radius=3.5, gridspec=0.1,
function ligand_breakdown (line 266) | def ligand_breakdown(mol, BondedOct=False, silent=True, transition_metal...
function ligand_assign_original (line 328) | def ligand_assign_original(mol, liglist, ligdents, ligcons, loud=False, ...
function ligand_assign_consistent (line 762) | def ligand_assign_consistent(mol, liglist, ligdents, ligcons, loud=False,
function ligand_assign_alleq (line 1951) | def ligand_assign_alleq(mol, liglist, ligdents, ligcons):
function get_lig_symmetry (line 2000) | def get_lig_symmetry(mol, loud=False, htol=3):
FILE: molSimplify/Classes/mol2D.py
class Mol2D (line 19) | class Mol2D(nx.Graph):
method __repr__ (line 21) | def __repr__(self):
method from_smiles (line 37) | def from_smiles(cls, smiles: str):
method from_mol2_file (line 81) | def from_mol2_file(cls, filename):
method from_mol_file (line 107) | def from_mol_file(cls, filename):
method from_mol3d (line 132) | def from_mol3d(cls, mol3d: Mol3D):
method graph_hash (line 145) | def graph_hash(self) -> str:
method graph_hash_edge_attr (line 170) | def graph_hash_edge_attr(self) -> str:
method graph_determinant (line 202) | def graph_determinant(self, return_string: bool = True) -> Union[str, ...
method find_metal (line 252) | def find_metal(self, transition_metals_only: bool = True) -> List[int]:
method find_simple_paths (line 282) | def find_simple_paths(self, source, sink, cutoff=None, constraints=None):
method denticity_hapticity (line 308) | def denticity_hapticity(self, catoms):
function substructure_search (line 356) | def substructure_search(
function motif_counts_only (line 453) | def motif_counts_only(
FILE: molSimplify/Classes/mol3D.py
class mol3D (line 237) | class mol3D:
method __init__ (line 250) | def __init__(self, name='ABC', loc='', use_atom_specific_cutoffs=False):
method __repr__ (line 325) | def __repr__(self):
method ACM (line 328) | def ACM(self, idx1, idx2, idx3, angle):
method ACM_axis (line 372) | def ACM_axis(self, idx1, idx2, axis, angle):
method BCM (line 408) | def BCM(self, idx1, idx2, d):
method BCM_opt (line 445) | def BCM_opt(self, idx1, idx2, d, ff='uff'):
method IsOct (line 481) | def IsOct(self, init_mol=None, dict_check=False,
method IsStructure (line 616) | def IsStructure(self, init_mol=None, dict_check=False,
method Oct_inspection (line 733) | def Oct_inspection(self, init_mol=None, catoms_arr=None, dict_check=Fa...
method RCAngle (line 838) | def RCAngle(self, idx1, idx2, idx3, anglei, anglef, angleint=1.0, writ...
method RCDistance (line 894) | def RCDistance(self, idx1, idx2, disti, distf, distint=0.05, writegeo=...
method Structure_inspection (line 948) | def Structure_inspection(self, init_mol=None, catoms_arr=None, num_coo...
method addAtom (line 1054) | def addAtom(self, atom: atom3D, index: Optional[int] = None, auto_popu...
method add_bond (line 1130) | def add_bond(self, idx1: int, idx2: int, bond_type: int) -> dict:
method alignmol (line 1173) | def alignmol(self, atom1, atom2):
method apply_ffopt (line 1190) | def apply_ffopt(self, constraints=False, ff='uff'):
method apply_ffopt_list_constraints (line 1224) | def apply_ffopt_list_constraints(self, list_constraints=False, ff='uff'):
method aromatic_charge (line 1259) | def aromatic_charge(self, bo_graph):
method assign_graph_from_net (line 1284) | def assign_graph_from_net(self, path_to_net, return_graph=False):
method calcCharges (line 1315) | def calcCharges(self, charge=0, method='QEq'):
method centermass (line 1333) | def centermass(self):
method centersym (line 1361) | def centersym(self):
method check_angle_linear (line 1384) | def check_angle_linear(self, catoms_arr=None):
method choose_atoms_to_move (line 1428) | def choose_atoms_to_move(self, ligands, swap_indices, catoms):
method cleanBonds (line 1498) | def cleanBonds(self):
method closest_H_2_metal (line 1510) | def closest_H_2_metal(self, delta=0):
method combine (line 1551) | def combine(self, mol, bond_to_add=[], dirty=False):
method continuous_shape_measure (line 1618) | def continuous_shape_measure(self, ideal_polyhedron):
method convert2OBMol (line 1693) | def convert2OBMol(self, force_clean=False, ignoreX=False):
method convert2OBMol2 (line 1739) | def convert2OBMol2(self, ignoreX=False):
method convert2mol3D (line 1785) | def convert2mol3D(self):
method convexhull (line 1808) | def convexhull(self):
method coords (line 1830) | def coords(self, no_tabs=False):
method coordsvect (line 1854) | def coordsvect(self):
method copymol3D (line 1871) | def copymol3D(self, mol0):
method count_atoms (line 1902) | def count_atoms(self, exclude=['H', 'h', 'x', 'X']):
method count_electrons (line 1923) | def count_electrons(self, charge=0):
method count_nonH_atoms (line 1944) | def count_nonH_atoms(self):
method count_specific_atoms (line 1960) | def count_specific_atoms(self, atom_types=['x', 'X']):
method createMolecularGraph (line 1981) | def createMolecularGraph(self, oct=True, strict_cutoff=False, catom_li...
method create_mol_with_inds (line 2032) | def create_mol_with_inds(self, inds):
method deleteHs (line 2066) | def deleteHs(self):
method deleteatom (line 2077) | def deleteatom(self, atomIdx):
method deleteatoms (line 2115) | def deleteatoms(self, Alist):
method dev_from_ideal_geometry (line 2154) | def dev_from_ideal_geometry(self, ideal_polyhedron: np.ndarray) -> Tup...
method dict_check_processing (line 2225) | def dict_check_processing(self, dict_check, num_coord=6, debug=False, ...
method distance (line 2285) | def distance(self, mol):
method draw_svg (line 2305) | def draw_svg(self, filename):
method findAtomsbySymbol (line 2331) | def findAtomsbySymbol(self, sym: str) -> List[int]:
method findMetal (line 2352) | def findMetal(self, transition_metals_only: bool = True,
method findcloseMetal (line 2383) | def findcloseMetal(self, atom0):
method findsubMol (line 2414) | def findsubMol(self, atom0, atomN, smart=False):
method flip_symmetry (line 2465) | def flip_symmetry(self, verbose=True, max_allowed_dev=30, target_symme...
method freezeatom (line 2864) | def freezeatom(self, atomIdx):
method freezeatoms (line 2876) | def freezeatoms(self, Alist):
method from_smiles (line 2891) | def from_smiles(cls, smiles, gen3d: bool = True):
method geo_dict_initialization (line 2924) | def geo_dict_initialization(self):
method geo_maxatomdist (line 2942) | def geo_maxatomdist(self, mol2):
method geo_rmsd (line 2983) | def geo_rmsd(self, mol2):
method getAngle (line 3025) | def getAngle(self, idx0, idx1, idx2):
method getAtom (line 3053) | def getAtom(self, idx):
method getAtomCoords (line 3070) | def getAtomCoords(self, idx):
method getAtomTypes (line 3087) | def getAtomTypes(self):
method getAtoms (line 3104) | def getAtoms(self):
method getAtomwithSyms (line 3120) | def getAtomwithSyms(self, syms=['X'], return_index=False):
method getAtomwithinds (line 3146) | def getAtomwithinds(self, inds):
method getBondCutoff (line 3163) | def getBondCutoff(self, atom: atom3D, ratom: atom3D) -> float:
method getBondedAtoms (line 3193) | def getBondedAtoms(self, idx: int) -> List[int]:
method getBondedAtomsBOMatrix (line 3224) | def getBondedAtomsBOMatrix(self, idx):
method getBondedAtomsBOMatrixAug (line 3248) | def getBondedAtomsBOMatrixAug(self, idx):
method getBondedAtomsByCoordNo (line 3272) | def getBondedAtomsByCoordNo(self, idx, CoordNo=6):
method getBondedAtomsByThreshold (line 3305) | def getBondedAtomsByThreshold(self, idx, threshold=1.15):
method getBondedAtomsH (line 3347) | def getBondedAtomsH(self, idx):
method getBondedAtomsOct (line 3377) | def getBondedAtomsOct(self, ind, CN=6, debug=False, flag_loose=False, ...
method getBondedAtomsSmart (line 3508) | def getBondedAtomsSmart(self, idx, oct=False, strict_cutoff=False, cat...
method getBondedAtomsnotH (line 3534) | def getBondedAtomsnotH(self, idx, metal_multiplier=1.35, nonmetal_mult...
method getClosestAtom (line 3568) | def getClosestAtom(self, ratom):
method getClosestAtomlist (line 3592) | def getClosestAtomlist(self, atom_idx, cdist=3.0):
method getClosestAtomnoHs (line 3616) | def getClosestAtomnoHs(self, ratom):
method getFarAtom (line 3640) | def getFarAtom(self, reference, atomtype=False):
method getHs (line 3675) | def getHs(self):
method getHsbyAtom (line 3691) | def getHsbyAtom(self, ratom):
method getHsbyIndex (line 3714) | def getHsbyIndex(self, idx):
method getMLBondLengths (line 3736) | def getMLBondLengths(self):
method getNumAtoms (line 3763) | def getNumAtoms(self):
method getOBMol (line 3775) | def getOBMol(self, fst, convtype, ffclean=False, gen3d=True):
method get_bo_dict_from_inds (line 3818) | def get_bo_dict_from_inds(self, inds):
method get_coordinate_array (line 3850) | def get_coordinate_array(self):
method get_element_list (line 3874) | def get_element_list(self):
method get_fcs (line 3894) | def get_fcs(self, strict_cutoff=False, catom_list=None, max6=True):
method get_features (line 3921) | def get_features(self, lac=True, force_generate=False, eq_sym=False,
method get_first_shell (line 4007) | def get_first_shell(self, check_hapticity=True):
method get_geometry_type (line 4067) | def get_geometry_type(self, dict_check=False, angle_ref=False,
method get_geometry_type_distance (line 4161) | def get_geometry_type_distance(
method get_geometry_type_old (line 4262) | def get_geometry_type_old(self, dict_check=False, angle_ref=False, num...
method get_graph (line 4400) | def get_graph(self):
method get_graph_hash (line 4419) | def get_graph_hash(self, attributed_flag=True, oct=False, loud=True):
method get_linear_angle (line 4466) | def get_linear_angle(self, ind):
method get_mol_graph_det (line 4494) | def get_mol_graph_det(self, oct=True, use_bo_mat=False):
method get_molecular_mass (line 4562) | def get_molecular_mass(self):
method get_num_coord_metal (line 4589) | def get_num_coord_metal(self, debug=False, strict_cutoff=False, catom_...
method get_octetrule_charge (line 4662) | def get_octetrule_charge(self, debug=False):
method get_pair_distance (line 4728) | def get_pair_distance(self, idx1, idx2):
method get_smiles (line 4748) | def get_smiles(self, canonicalize=False, use_mol2=False) -> str:
method get_smilesOBmol_charge (line 4780) | def get_smilesOBmol_charge(self):
method get_submol_noHs (line 4812) | def get_submol_noHs(self):
method get_symmetry (line 4831) | def get_symmetry(self, verbose=True, max_allowed_dev=30, details=False):
method get_symmetry_denticity (line 5044) | def get_symmetry_denticity(self, return_eq_catoms=False, BondedOct=Fal...
method getfarAtomdir (line 5123) | def getfarAtomdir(self, uP):
method getfragmentlists (line 5147) | def getfragmentlists(self):
method graph_from_bodict (line 5182) | def graph_from_bodict(self, bo_dict):
method initialize (line 5201) | def initialize(self):
method isPristine (line 5214) | def isPristine(self, unbonded_min_dist=1.3, oct=False):
method is_edge_compound (line 5261) | def is_edge_compound(self, transition_metals_only: bool = True) -> Tup...
method is_linear_ligand (line 5309) | def is_linear_ligand(self, ind):
method is_sandwich_compound (line 5358) | def is_sandwich_compound(self, transition_metals_only: bool = True
method ligand_comp_org (line 5423) | def ligand_comp_org(self, init_mol, catoms_arr=None,
method make_formula (line 5536) | def make_formula(self, latex=True, hill_system=False):
method match_lig_list (line 5606) | def match_lig_list(self, init_mol, catoms_arr=None,
method maxatomdist (line 5749) | def maxatomdist(self, mol2):
method maxatomdist_nonH (line 5779) | def maxatomdist_nonH(self, mol2):
method maxdist (line 5810) | def maxdist(self, mol):
method meanabsdev (line 5832) | def meanabsdev(self, mol2):
method mindist_legacy (line 5864) | def mindist_legacy(self, mol):
method mindistmol (line 5886) | def mindistmol(self):
method mindistnonH (line 5904) | def mindistnonH(self, mol):
method mindisttopoint (line 5927) | def mindisttopoint(self, point):
method mol3D_to_networkx (line 5949) | def mol3D_to_networkx(self,get_symbols:bool=True,get_bond_order:bool=T...
method mols_symbols (line 5972) | def mols_symbols(self):
method molsize (line 5984) | def molsize(self):
method moments_of_inertia (line 6002) | def moments_of_inertia(self):
method num_rings (line 6032) | def num_rings(self, index):
method oct_comp (line 6068) | def oct_comp(self, angle_ref=False, catoms_arr=None, debug=False):
method overlapcheck (line 6166) | def overlapcheck(self, mol, silence=False):
method populateBOMatrix (line 6195) | def populateBOMatrix(self, bonddict=False, set_bo_mat=False):
method populateBOMatrixAug (line 6234) | def populateBOMatrixAug(self):
method principal_moments_of_inertia (line 6267) | def principal_moments_of_inertia(self, return_eigvecs=False):
method print_geo_dict (line 6297) | def print_geo_dict(self):
method printxyz (line 6320) | def printxyz(self):
method read_bo_from_mol (line 6331) | def read_bo_from_mol(self, molfile):
method read_bond_order (line 6339) | def read_bond_order(self, bofile):
method read_charge (line 6380) | def read_charge(self, chargefile):
method read_smiles (line 6402) | def read_smiles(self, smiles, ff="mmff94", steps=2500):
method readfrommol (line 6448) | def readfrommol(self, filename):
method readfrommol2 (line 6508) | def readfrommol2(self, filename, readstring=False):
method readfromstring (line 6601) | def readfromstring(self, xyzstring):
method readfromtxt (line 6638) | def readfromtxt(self, txt):
method readfromxyz (line 6669) | def readfromxyz(self, filename: str, ligand_unique_id=False, read_fina...
method reflect_coords (line 6748) | def reflect_coords(self, metal_coords, lig1_catom_coords, lig2_catom_c...
method resetBondOBMol (line 6785) | def resetBondOBMol(self):
method returnxyz (line 6800) | def returnxyz(self, no_tabs=False):
method rmsd (line 6824) | def rmsd(self, mol2):
method rmsd_nonH (line 6857) | def rmsd_nonH(self, mol2):
method roland_combine (line 6888) | def roland_combine(self, mol, catoms, bond_to_add=[], dirty=False):
method mindist (line 6962) | def mindist(self, mol, exclude1=[], exclude2=[]):
method substruct_add (line 6992) | def substruct_add(self, dec, base_idx, sub_idx, force_field=True):
method sanitycheck (line 7145) | def sanitycheck(self, silence=False, debug=False):
method sanitycheckCSD (line 7193) | def sanitycheckCSD(self, oct=False, angle1=30, angle2=80, angle3=45, d...
method setLoc (line 7271) | def setLoc(self, loc):
method symvect (line 7283) | def symvect(self):
method translate (line 7300) | def translate(self, dxyz):
method typevect (line 7313) | def typevect(self):
method writegxyz (line 7330) | def writegxyz(self, filename):
method writemol (line 7350) | def writemol(self, filename):
method new_writemol2 (line 7415) | def new_writemol2(
method writemol2 (line 7543) | def writemol2(self, filename, writestring=False, ignoreX=False, force=...
method writemol2_bodict (line 7650) | def writemol2_bodict(
method writemxyz (line 7773) | def writemxyz(self, mol, filename, no_tabs=False):
method writenumberedxyz (line 7802) | def writenumberedxyz(self, filename):
method writesepxyz (line 7830) | def writesepxyz(self, mol, filename):
method writexyz (line 7856) | def writexyz(self, filename, symbsonly=True, ignoreX=False,
FILE: molSimplify/Classes/monomer3D.py
class monomer3D (line 9) | class monomer3D:
method __init__ (line 15) | def __init__(self, three_lc='GLY', chain='undef', id=-1, occup=1.00, l...
method __repr__ (line 46) | def __repr__(self):
method identify (line 49) | def identify(self):
method getGreek (line 67) | def getGreek(self, greek):
method coords (line 87) | def coords(self):
method centermass (line 102) | def centermass(self):
method centroid (line 131) | def centroid(self):
method setBonds (line 154) | def setBonds(self):
method getPeptideAtoms (line 193) | def getPeptideAtoms(self):
method setNext (line 203) | def setNext(self, next_aa):
method setPrev (line 213) | def setPrev(self, prev_aa):
method addAtom (line 223) | def addAtom(self, atom, index=None):
method setLoc (line 245) | def setLoc(self, loc):
FILE: molSimplify/Classes/partialcharges.py
function fpriority (line 9) | def fpriority(xyzf):
function fsym (line 106) | def fsym(xyzf):
function fvalency (line 122) | def fvalency(xyzf):
function fcharge (line 138) | def fcharge(xyzf, charge):
function scharge_ave (line 155) | def scharge_ave(xyzf, charge):
function fdistance (line 178) | def fdistance(xyzf):
function all_prop (line 196) | def all_prop(xyzf, charge):
function features (line 208) | def features(xyzf, charge):
FILE: molSimplify/Classes/protein3D.py
class protein3D (line 27) | class protein3D:
method __init__ (line 34) | def __init__(self, pdbCode='undef'):
method setAAs (line 82) | def setAAs(self, aas):
method setAtoms (line 95) | def setAtoms(self, atoms):
method setIndices (line 107) | def setIndices(self, a_ids):
method setHetmols (line 118) | def setHetmols(self, hetmols):
method setChains (line 131) | def setChains(self, chains):
method setMissingAtoms (line 144) | def setMissingAtoms(self, missing_atoms):
method setMissingAAs (line 156) | def setMissingAAs(self, missing_aas):
method setConf (line 167) | def setConf(self, conf):
method autoChooseConf (line 178) | def autoChooseConf(self):
method setR (line 212) | def setR(self, R):
method setRfree (line 223) | def setRfree(self, Rfree):
method setRSRZ (line 234) | def setRSRZ(self, RSRZ):
method getMissingAtoms (line 245) | def getMissingAtoms(self):
method getMissingAAs (line 262) | def getMissingAAs(self):
method countAAs (line 276) | def countAAs(self):
method findAtom (line 290) | def findAtom(self, sym="X", aa=True):
method findAA (line 335) | def findAA(self, three_lc="XAA"):
method getChain (line 367) | def getChain(self, chain_id):
method getMolecule (line 450) | def getMolecule(self, a_id, aas_only=False):
method stripAtoms (line 497) | def stripAtoms(self, atoms_stripped):
method stripHetMol (line 578) | def stripHetMol(self, hetmol):
method findMetal (line 611) | def findMetal(self, transition_metals_only=True):
method freezeatom (line 644) | def freezeatom(self, atomIdx):
method freezeatoms (line 656) | def freezeatoms(self, Alist):
method getAtom (line 670) | def getAtom(self, idx):
method getIndex (line 687) | def getIndex(self, atom):
method getBoundMols (line 708) | def getBoundMols(self, h_id, aas_only=False):
method readfrompdb (line 734) | def readfrompdb(self, text):
method fetch_pdb (line 915) | def fetch_pdb(self, pdbCode):
method setBonds (line 942) | def setBonds(self, bonds):
method readMetaData (line 956) | def readMetaData(self):
method setDataCompleteness (line 1010) | def setDataCompleteness(self, DataCompleteness):
method setTwinL (line 1021) | def setTwinL(self, TwinL):
method setTwinL2 (line 1032) | def setTwinL2(self, TwinL2):
method setEDIAScores (line 1043) | def setEDIAScores(self):
method setPDBCode (line 1095) | def setPDBCode(self, pdbCode):
method centermass (line 1106) | def centermass(self):
method setCentroid (line 1132) | def setCentroid(self):
method convexhull (line 1156) | def convexhull(self):
FILE: molSimplify/Classes/rundiag.py
class run_diag (line 9) | class run_diag:
method __init__ (line 15) | def __init__(self):
method set_sanity (line 37) | def set_sanity(self, sanity, min_distance):
method set_ANN (line 52) | def set_ANN(self, ANN_flag, ANN_reason=False, ANN_dict=False, catalysi...
method set_dict_bl (line 84) | def set_dict_bl(self, dict_bl):
method set_mol (line 97) | def set_mol(self, mol):
method write_report (line 113) | def write_report(self, path):
FILE: molSimplify/Classes/voxelgrid.py
class VoxelGrid (line 8) | class VoxelGrid:
method __init__ (line 9) | def __init__(self, voxel_size=0.5, vdw_scale=0.9):
method copy (line 22) | def copy(self):
method get_clash_severity (line 31) | def get_clash_severity(self, coords_lig, elements_lig, coords_complex,...
method _to_voxel_index (line 56) | def _to_voxel_index(self, coord):
method _get_voxel_sphere_indices (line 59) | def _get_voxel_sphere_indices(self, center, radius):
method add_atom (line 74) | def add_atom(self, element, coord, atom_id=None, group="complex"):
method add_atoms (line 89) | def add_atoms(self, elements, coords, atom_ids=None, group="complex", ...
method get_voxel_status (line 119) | def get_voxel_status(self, coord, radius):
method has_cross_clash (line 135) | def has_cross_clash(self, coord, radius):
method get_clashing_atoms (line 143) | def get_clashing_atoms(self, verbose=False):
method get_clashing_ligand_atoms (line 168) | def get_clashing_ligand_atoms(self):
method has_voxel_clash (line 171) | def has_voxel_clash(self):
function plot_all_voxels (line 179) | def plot_all_voxels(
function plot_voxels (line 267) | def plot_voxels(voxel_grid, group="both", mode="cube", size=50, silent=F...
FILE: molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py
function measure_sensitivity (line 25) | def measure_sensitivity(path_to_csv, path_to_write=False, R2_cutoff=0.99...
function measure_R2 (line 285) | def measure_R2(X, y):
function CV_check (line 292) | def CV_check(X, y, name, prop, CV_tolerance, num_points):
function R2_upon_elimination (line 322) | def R2_upon_elimination(X, y, name, prop, R2_cutoff, num_points):
function slope_sign_check (line 360) | def slope_sign_check(X, y, name, prop, num_points):
function main (line 425) | def main():
FILE: molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py
function measure_sensitivity (line 24) | def measure_sensitivity(path_to_csv, path_to_write=False, prop='SSE', R2...
function measure_R2 (line 223) | def measure_R2(X, y):
function symmetry_class (line 229) | def symmetry_class(complex_name):
function CV_check (line 243) | def CV_check(X, y, name, prop, CV_tolerance, R2_cutoff, num_points):
function slope_sign_check (line 270) | def slope_sign_check(X, y, name, prop, num_points):
function main (line 326) | def main():
FILE: molSimplify/Informatics/MOF/MOF_descriptors.py
function get_primitive (line 59) | def get_primitive(data_path, write_path, occupancy_tolerance=1):
function load_sbu_lc_descriptors (line 85) | def load_sbu_lc_descriptors(sbu_path: str) -> Tuple[str, pd.DataFrame, p...
function gen_and_append_desc (line 114) | def gen_and_append_desc(
function make_MOF_SBU_RACs (line 180) | def make_MOF_SBU_RACs(
function make_MOF_linker_RACs (line 392) | def make_MOF_linker_RACs(
function mkdir_if_absent (line 508) | def mkdir_if_absent(folder_paths):
function make_file_if_absent (line 526) | def make_file_if_absent(path, filenames):
function path_maker (line 547) | def path_maker(path):
function failure_response (line 569) | def failure_response(path, failure_str):
function bond_information_write (line 590) | def bond_information_write(linker_list, linker_anchors_superlist, adj_ma...
function surrounded_sbu_gen (line 660) | def surrounded_sbu_gen(SBU_list, linker_list, sbu_path, molcif, adj_matr...
function dist_mat_comp (line 831) | def dist_mat_comp(X):
function detect_1D_rod (line 855) | def detect_1D_rod(molcif, all_atom_types, cpar, log_path, name, adj_matr...
function get_MOF_descriptors (line 954) | def get_MOF_descriptors(
FILE: molSimplify/Informatics/MOF/MOF_functionalizer.py
function functionalize_MOF (line 33) | def functionalize_MOF(cif_file,
function first_functionalization (line 232) | def first_functionalization(molcif,
function additional_functionalization (line 326) | def additional_functionalization(i,
function apply_functionalization (line 451) | def apply_functionalization(molcif, all_atom_types, position_to_function...
function analyze_linker (line 570) | def analyze_linker(cart_coords,
function symmetry_check (line 619) | def symmetry_check(all_atom_types, fcoords, cell_v, precision=1):
function linker_identification (line 661) | def linker_identification(linker_list, i, checked_list):
function geo_dict_loader (line 699) | def geo_dict_loader():
function vector_preparation (line 746) | def vector_preparation(connected_atom_types, neighbors_not_to_replace, l...
function connecting_atom_functionalization (line 818) | def connecting_atom_functionalization(connection_atom_dict,
function multiatomic_functionalization (line 854) | def multiatomic_functionalization(connection_atom_dict,
function make_networkx_graph (line 945) | def make_networkx_graph(adj_matrix):
function get_linkers (line 968) | def get_linkers(molcif, adj_matrix, all_atom_types):
function connected_atoms_from_adjmat (line 1007) | def connected_atoms_from_adjmat(adj_matrix, index, all_atom_types):
function check_support (line 1034) | def check_support(functional_group):
function functionalize_MOF_at_indices (line 1060) | def functionalize_MOF_at_indices(cif_file, path2write, functional_group,...
function functionalize_MOF_at_indices_mol3D_merge (line 1197) | def functionalize_MOF_at_indices_mol3D_merge(cif_file, path2write, funct...
function alignment_objective (line 1367) | def alignment_objective(rotation_vector, molcif_clone, MOF_main_carbon_i...
function post_functionalization_overlap_and_bonding_check (line 1429) | def post_functionalization_overlap_and_bonding_check(cell_v, all_atom_ty...
function atom_deletion (line 1464) | def atom_deletion(cart_coords, all_atom_types, delete_list):
function atom_addition (line 1504) | def atom_addition(extra_atom_types, final_atom_types, new_coord_list, ex...
function DS_remover (line 1542) | def DS_remover(file_list):
function mkdir_if_absent (line 1560) | def mkdir_if_absent(folder_path):
function apply_monatomic_functionalization (line 1577) | def apply_monatomic_functionalization(molcif, all_atom_types, atom_to_re...
function main (line 1594) | def main():
FILE: molSimplify/Informatics/MOF/MOF_functionalizer_v2.py
function resource_filename (line 42) | def resource_filename(req_or_pkg: object, resource: str) -> str:
function functionalize_MOF (line 53) | def functionalize_MOF(cif_file, path2write, functional_group = 'F', func...
function first_functionalization (line 282) | def first_functionalization(cell_v, molcif,
function additional_functionalization (line 377) | def additional_functionalization(cell_v, i,
function apply_functionalization (line 518) | def apply_functionalization(cell_v, molcif, allatomtypes, position_to_fu...
function functionalization_gram_schmidt (line 647) | def functionalization_gram_schmidt(molcif, geo_dict_loader_gram_schmidt,...
function functional_group_rotation (line 711) | def functional_group_rotation(functional_group_coords, axis, rotation_an...
function analyze_linker (line 724) | def analyze_linker(cart_coords,
function symmetry_check (line 773) | def symmetry_check(allatomtypes, fcoords, cell_v, precision=1):
function linker_identification (line 821) | def linker_identification(linker_list, i, checkedlist):
function geo_dict_loader (line 859) | def geo_dict_loader():
function vector_preparation (line 906) | def vector_preparation(connected_atom_types, neighbors_not_to_replace, l...
function connecting_atom_functionalization (line 978) | def connecting_atom_functionalization(connection_atom_dict,
function multiatomic_functionalization (line 1014) | def multiatomic_functionalization(connection_atom_dict,
function make_networkx_graph (line 1120) | def make_networkx_graph(adj_matrix):
function get_linkers (line 1143) | def get_linkers(molcif, adj_matrix, allatomtypes):
function connected_atoms_from_adjmat (line 1185) | def connected_atoms_from_adjmat(adj_matrix, index, allatomtypes):
function apply_monatomic_functionalization (line 1212) | def apply_monatomic_functionalization(molcif, allatomtypes, atom_to_repl...
function check_support (line 1227) | def check_support(functional_group):
function functionalize_MOF_at_indices (line 1255) | def functionalize_MOF_at_indices(cif_file, path2write, functional_group,...
function functionalize_MOF_at_indices_mol3D_merge (line 1394) | def functionalize_MOF_at_indices_mol3D_merge(cif_file, path2write, funct...
function alignment_objective (line 1567) | def alignment_objective(rotation_vector, molcif_clone, MOF_main_carbon_i...
function post_functionalization_overlap_and_bonding_check (line 1631) | def post_functionalization_overlap_and_bonding_check(cell_v, all_atom_ty...
function atom_deletion (line 1695) | def atom_deletion(cart_coords, allatomtypes, delete_list):
function atom_addition (line 1735) | def atom_addition(extra_atom_types, final_atom_types, new_coord_list, ex...
function DS_remover (line 1773) | def DS_remover(file_list):
function mkdir_if_absent (line 1791) | def mkdir_if_absent(folder_path):
function main (line 1810) | def main():
FILE: molSimplify/Informatics/MOF/PBC_functions.py
function readcif (line 17) | def readcif(name, readstring=False):
function compute_image_flag (line 131) | def compute_image_flag(cell, fcoord1, fcoord2):
function linker_length (line 159) | def linker_length(adjmat, anchors):
function slice_mat (line 191) | def slice_mat(mat, atoms):
function ligand_detect (line 210) | def ligand_detect(cell, cart_coords, adj_mat, anchor_list):
function XYZ_connected (line 256) | def XYZ_connected(cell, cart_coords, adj_mat):
function writeXYZfcoords (line 308) | def writeXYZfcoords(filename, atoms, cell, fcoords):
function writeXYZandGraph (line 335) | def writeXYZandGraph(filename, atoms, cell, fcoords, mol_graph):
function returnXYZandGraph (line 366) | def returnXYZandGraph(filename, atoms, cell, fcoords, mol_graph):
function writeXYZcoords (line 400) | def writeXYZcoords(filename, atoms, coords):
function writeXYZcoords_withcomment (line 424) | def writeXYZcoords_withcomment(filename, atoms, coords, comment):
function write2file (line 451) | def write2file(pt, fn, st):
function write_cif (line 472) | def write_cif(fname, cellprm, fcoords, atom_labels):
function mkcell (line 512) | def mkcell(cpar):
function cell_to_cellpar (line 547) | def cell_to_cellpar(cell, radians=False):
function findPaths (line 581) | def findPaths(G, u, n):
function fractional2cart (line 608) | def fractional2cart(fcoords, cell):
function frac_coord (line 627) | def frac_coord(coord, cell):
function compute_distance_matrix (line 647) | def compute_distance_matrix(cell, cart_coords, num_cells=1):
function position_nearest_atom (line 686) | def position_nearest_atom(cell, cart_coords, index_of_interest, num_cell...
function make_graph_from_nodes_edges (line 739) | def make_graph_from_nodes_edges(nodes, edges, attribs):
function make_supercell (line 763) | def make_supercell(cell, atoms, fcoords, exp_coeff):
function compute_adj_matrix (line 811) | def compute_adj_matrix(distance_mat, all_atom_types, wiggle_room=1, hand...
function get_closed_subgraph (line 899) | def get_closed_subgraph(linkers, SBU_list, adj_matrix):
function include_extra_shells (line 962) | def include_extra_shells(SBU_lists, molcif, adjmat):
function disorder_detector (line 995) | def disorder_detector(name):
function remove_duplicate_atoms (line 1069) | def remove_duplicate_atoms(all_atom_types, fcoords):
function remove_undesired_atoms (line 1098) | def remove_undesired_atoms(undesired_indices, all_atom_types, fcoords):
function overlap_removal (line 1128) | def overlap_removal(cif_path, new_cif_path):
function solvent_removal (line 1166) | def solvent_removal(cif_path, new_cif_path, wiggle_room=1):
FILE: molSimplify/Informatics/MOF/cluster_extraction.py
function get_primitive (line 24) | def get_primitive(data_path, write_path):
function make_MOF_SBU_RACs (line 39) | def make_MOF_SBU_RACs(SBU_list, SBU_subgraph, molcif, depth, name, cell,...
function make_MOF_linker_RACs (line 111) | def make_MOF_linker_RACs(linker_list, linker_subgraphlist, molcif, depth...
function get_MOF_descriptors (line 129) | def get_MOF_descriptors(data, depth, path=False, xyz_path = False):
FILE: molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py
function periodic_checker (line 28) | def periodic_checker(graph, coords):
function branch (line 63) | def branch(molcif, main_paths, atoms_in_sbu, new_atoms=None):
function identify_main_chain (line 104) | def identify_main_chain(temp_mol, link_list):
function get_molcif_cycles_no_metal (line 165) | def get_molcif_cycles_no_metal(molcif):
function breakdown_MOF (line 199) | def breakdown_MOF(SBU_list, SBU_subgraph, molcif, name, cell, anchoring_...
function prepare_initial_SBU (line 504) | def prepare_initial_SBU(molcif, all_atom_types, metal_list, log_path, na...
function identify_lc_atoms (line 552) | def identify_lc_atoms(molcif, remove_list, metal_list):
function identify_short_linkers (line 605) | def identify_short_linkers(molcif, initial_SBU_list, initial_SBU_subgrap...
function make_MOF_fragments (line 739) | def make_MOF_fragments(data, path, xyz_path):
FILE: molSimplify/Informatics/MOF/linker_rotation.py
function rotate_around_axis (line 16) | def rotate_around_axis(axis, r, p, t):
function linker_rotation (line 62) | def linker_rotation(molcif, fcoords, linker, rot_angle, cell_v, all_atom...
function rotate_and_write (line 149) | def rotate_and_write(input_cif, path2write, rot_angle, is_degree=True):
function main (line 215) | def main():
FILE: molSimplify/Informatics/Mol2Parser.py
class Mol2Parser (line 4) | class Mol2Parser:
method __init__ (line 8) | def __init__(self, mol2path):
method build_BO_matrix (line 14) | def build_BO_matrix(self):
method get_atoms (line 24) | def get_atoms(self):
method get_connectivity (line 36) | def get_connectivity(self):
FILE: molSimplify/Informatics/RACassemble.py
function assemble_connectivity_from_parts (line 41) | def assemble_connectivity_from_parts(metal_mol: mol3D, custom_ligand_dict):
function get_descriptor_vector (line 93) | def get_descriptor_vector(this_complex, custom_ligand_dict=False,
function get_rac155_graph_based (line 194) | def get_rac155_graph_based(this_complex, custom_ligand_dict=False, ox_mo...
function get_descriptor_derivatives (line 217) | def get_descriptor_derivatives(this_complex, custom_ligand_dict=False, o...
function create_OHE (line 320) | def create_OHE(metal: str,
function append_descriptor_derivatives (line 365) | def append_descriptor_derivatives(descriptor_derivative_names, descripto...
FILE: molSimplify/Informatics/active_learning/expected_improvement.py
function get_2D_pareto_indices (line 6) | def get_2D_pareto_indices(points: np.ndarray) -> np.ndarray:
function get_2D_EI (line 38) | def get_2D_EI(pred_mean: np.ndarray, pred_std: np.ndarray,
function get_2D_PI_and_centroid (line 77) | def get_2D_PI_and_centroid(pred_mean: np.ndarray, pred_std: np.ndarray,
function get_2D_EHVI (line 203) | def get_2D_EHVI(pred_mean: np.ndarray, pred_std: np.ndarray,
FILE: molSimplify/Informatics/autocorrelation.py
function append_descriptors (line 15) | def append_descriptors(descriptor_names, descriptors, list_of_names, lis...
function append_descriptor_derivatives (line 70) | def append_descriptor_derivatives(descriptor_derivative_names, descripto...
function autocorrelation (line 108) | def autocorrelation(mol, prop_vec, orig, d, oct=True, use_dist=False, si...
function autocorrelation_derivative (line 173) | def autocorrelation_derivative(mol, prop_vec, orig, d, oct=True):
function deltametric (line 227) | def deltametric(mol, prop_vec, orig, d, oct=True, use_dist=False, size_n...
function deltametric_derivative (line 287) | def deltametric_derivative(mol, prop_vec, orig, d, oct=True):
function construct_property_vector (line 338) | def construct_property_vector(mol, prop, oct=True, modifier=False, custo...
function full_autocorrelation (line 482) | def full_autocorrelation(mol, prop, d, oct=True, modifier=False, use_dis...
function full_autocorrelation_derivative (line 529) | def full_autocorrelation_derivative(mol, prop, d, oct=True, modifier=Fal...
function generate_full_complex_autocorrelations (line 565) | def generate_full_complex_autocorrelations(mol,
function generate_full_complex_autocorrelation_derivatives (line 666) | def generate_full_complex_autocorrelation_derivatives(mol, depth=4, oct=...
function atom_only_autocorrelation (line 722) | def atom_only_autocorrelation(mol, prop, d, atomIdx, oct=True, use_dist=...
function atom_only_autocorrelation_derivative (line 771) | def atom_only_autocorrelation_derivative(mol, prop, d, atomIdx, oct=True):
function metal_only_autocorrelation (line 808) | def metal_only_autocorrelation(
function metal_only_autocorrelation_derivative (line 871) | def metal_only_autocorrelation_derivative(
function atom_only_deltametric (line 916) | def atom_only_deltametric(mol, prop, d, atomIdx, oct=True, modifier=False,
function atom_only_deltametric_derivative (line 966) | def atom_only_deltametric_derivative(mol, prop, d, atomIdx, oct=True, mo...
function metal_only_deltametric (line 1006) | def metal_only_deltametric(
function metal_only_deltametric_derivative (line 1065) | def metal_only_deltametric_derivative(
function generate_metal_autocorrelations (line 1109) | def generate_metal_autocorrelations(mol, depth=4, oct=True, flag_name=Fa...
function generate_metal_autocorrelation_derivatives (line 1203) | def generate_metal_autocorrelation_derivatives(mol, depth=4, oct=True, f...
function generate_metal_deltametrics (line 1262) | def generate_metal_deltametrics(mol, depth=4, oct=True, flag_name=False,
function generate_metal_deltametric_derivatives (line 1371) | def generate_metal_deltametric_derivatives(mol, depth=4, oct=True, flag_...
function generate_atomonly_autocorrelations (line 1430) | def generate_atomonly_autocorrelations(mol, atomIdx, depth=4, oct=True, ...
function generate_atomonly_autocorrelation_derivatives (line 1512) | def generate_atomonly_autocorrelation_derivatives(mol, atomIdx, depth=4,...
function generate_atomonly_deltametrics (line 1541) | def generate_atomonly_deltametrics(mol, atomIdx, depth=4, oct=True, Gval...
function generate_atomonly_deltametric_derivatives (line 1637) | def generate_atomonly_deltametric_derivatives(mol, atomIdx, depth=4, oct...
function get_metal_index (line 1666) | def get_metal_index(mol, transition_metals_only=True):
function ratiometric (line 1688) | def ratiometric(mol, prop_vec_num, prop_vec_den, orig, d, oct=True):
function summetric (line 1725) | def summetric(mol, prop_vec, orig, d, oct=True):
function autocorrelation_catoms (line 1762) | def autocorrelation_catoms(mol, prop_vec, orig, d, oct=True, catoms=None):
function deltametric_catoms (line 1787) | def deltametric_catoms(mol, prop_vec, orig, d, oct=True, catoms=None):
function multiatom_only_autocorrelation (line 1811) | def multiatom_only_autocorrelation(mol, prop, d, oct=True,
function atom_only_ratiometric (line 1827) | def atom_only_ratiometric(mol, prop_num, prop_den, d, atomIdx, oct=True):
function atom_only_summetric (line 1842) | def atom_only_summetric(mol, prop, d, atomIdx, oct=True):
function multiatom_only_deltametric (line 1856) | def multiatom_only_deltametric(mol, prop, d, oct=True,
function metal_only_layer_density (line 1872) | def metal_only_layer_density(mol, prop, d, oct=True):
function layer_density_in_3D (line 1884) | def layer_density_in_3D(mol, prop_vec, orig, d, oct=True):
function find_ligand_autocorrelations_oct (line 1914) | def find_ligand_autocorrelations_oct(mol, prop, loud, depth, name=False,
function find_ligand_autocorrelation_derivatives_oct (line 1978) | def find_ligand_autocorrelation_derivatives_oct(mol, prop, loud, depth, ...
function find_ligand_autocorrs_and_deltametrics_oct_dimers (line 2050) | def find_ligand_autocorrs_and_deltametrics_oct_dimers(mol, prop, depth, ...
function find_ligand_deltametrics_oct (line 2119) | def find_ligand_deltametrics_oct(mol, prop, loud, depth, name=False, oct...
function find_ligand_deltametric_derivatives_oct (line 2162) | def find_ligand_deltametric_derivatives_oct(mol, prop, loud, depth, name...
function generate_all_ligand_autocorrelations (line 2208) | def generate_all_ligand_autocorrelations(mol, loud, depth=4, name=False,...
function generate_all_ligand_autocorrelation_derivatives (line 2262) | def generate_all_ligand_autocorrelation_derivatives(mol, loud, depth=4, ...
function generate_all_ligand_autocorrs_and_deltametrics_dimers (line 2324) | def generate_all_ligand_autocorrs_and_deltametrics_dimers(mol, loud, dep...
function generate_all_ligand_deltametrics (line 2385) | def generate_all_ligand_deltametrics(mol, loud, depth=4, name=False, fla...
function generate_all_ligand_deltametric_derivatives (line 2420) | def generate_all_ligand_deltametric_derivatives(mol, loud, depth=4, name...
function generate_multiatom_autocorrelations (line 2462) | def generate_multiatom_autocorrelations(mol, depth=4, oct=True, flag_nam...
function generate_metal_ox_eff_autocorrelations (line 2482) | def generate_metal_ox_eff_autocorrelations(oxmodifier, mol, depth=4, oct...
function generate_metal_ox_eff_deltametrics (line 2499) | def generate_metal_ox_eff_deltametrics(oxmodifier, mol, depth=4, oct=Tru...
function generate_multiatom_deltametrics (line 2516) | def generate_multiatom_deltametrics(mol, depth=4, oct=True, flag_name=Fa...
function generate_full_complex_coulomb_autocorrelations (line 2536) | def generate_full_complex_coulomb_autocorrelations(mol,
function generate_metal_ox_autocorrelations (line 2562) | def generate_metal_ox_autocorrelations(oxmodifier, mol, depth=4,
function generate_metal_ox_autocorrelation_derivatives (line 2583) | def generate_metal_ox_autocorrelation_derivatives(oxmodifier, mol, depth...
function generate_metal_ox_deltametrics (line 2599) | def generate_metal_ox_deltametrics(oxmodifier, mol, depth=4, oct=True,
function generate_metal_ox_deltametric_derivatives (line 2627) | def generate_metal_ox_deltametric_derivatives(oxmodifier, mol, depth=4, ...
FILE: molSimplify/Informatics/coulomb_analyze.py
function create_columb_matrix (line 10) | def create_columb_matrix(mol):
function create_coulomb_matrix (line 14) | def create_coulomb_matrix(mol):
function pad_mol (line 49) | def pad_mol(mol, target_atoms):
FILE: molSimplify/Informatics/decoration_manager.py
function decorate_molecule (line 32) | def decorate_molecule(mol: mol3D, dec_list, dec_idxs,
FILE: molSimplify/Informatics/geo_analyze.py
function getOctBondDistances (line 13) | def getOctBondDistances(mol):
function getLigFormulae (line 35) | def getLigFormulae(mol):
function maximum_ML_dist (line 51) | def maximum_ML_dist(mol):
function maximum_any_dist (line 61) | def maximum_any_dist(mol):
function minimum_ML_dist (line 71) | def minimum_ML_dist(mol):
function mean_ML_dist (line 81) | def mean_ML_dist(mol):
FILE: molSimplify/Informatics/geometrics.py
function get_percentile_csd_geometrics (line 8) | def get_percentile_csd_geometrics(geometrics_csd, geodict, geotype, maxd...
function get_percentile_from_mol2 (line 33) | def get_percentile_from_mol2(mol2string,
FILE: molSimplify/Informatics/graph_analyze.py
function obtain_truncation (line 15) | def obtain_truncation(mol, con_atoms, hops):
function obtain_truncation_metal (line 57) | def obtain_truncation_metal(mol, hops, transition_metals_only=True):
function create_graph (line 106) | def create_graph(mol):
function get_lig_EN (line 121) | def get_lig_EN(mol, connection_atoms):
function remove_diagonals (line 137) | def remove_diagonals(matrix):
function kier (line 144) | def kier(mol):
function get_truncated_kier (line 162) | def get_truncated_kier(ligand, connection_atoms):
FILE: molSimplify/Informatics/graph_racs.py
function racs_property_vector (line 9) | def racs_property_vector(mol: Mol2D, node: int) -> np.ndarray:
function atom_centered_AC (line 40) | def atom_centered_AC(
function multi_centered_AC (line 80) | def multi_centered_AC(
function octahedral_racs (line 117) | def octahedral_racs(
function octahedral_racs_names (line 248) | def octahedral_racs_names(depth=3, properties=None) -> List[str]:
function ligand_racs (line 271) | def ligand_racs(
function ligand_racs_names (line 315) | def ligand_racs_names(depth: int = 3, properties=None, full_scope: bool ...
FILE: molSimplify/Informatics/jupyter_vis.py
function type_convert (line 15) | def type_convert(structures):
function view_structures (line 81) | def view_structures(structures, w=400, h=400, columns=2,
FILE: molSimplify/Informatics/lacRACAssemble.py
function get_descriptor_vector (line 40) | def get_descriptor_vector(this_complex,
function get_descriptor_derivatives (line 251) | def get_descriptor_derivatives(this_complex, custom_ligand_dict=False, o...
function generate_all_ligand_misc (line 381) | def generate_all_ligand_misc(mol, loud=False, custom_ligand_dict=False, ...
function generate_all_ligand_autocorrelations_lac (line 487) | def generate_all_ligand_autocorrelations_lac(mol, loud=False, depth=4, f...
function generate_all_ligand_autocorrelation_derivatives_lac (line 675) | def generate_all_ligand_autocorrelation_derivatives_lac(mol, loud=False,...
function generate_all_ligand_deltametrics_lac (line 802) | def generate_all_ligand_deltametrics_lac(mol, loud=False, depth=4, flag_...
function generate_all_ligand_deltametric_derivatives_lac (line 941) | def generate_all_ligand_deltametric_derivatives_lac(mol, loud=False, dep...
FILE: molSimplify/Informatics/misc_descriptors.py
function generate_all_ligand_misc (line 8) | def generate_all_ligand_misc(mol, loud, custom_ligand_dict=False, force_...
function generate_all_ligand_misc_dimers (line 125) | def generate_all_ligand_misc_dimers(mol, loud, custom_ligand_dict=False):
FILE: molSimplify/Informatics/organic_fingerprints.py
function get_morgan (line 18) | def get_morgan(mol, morgan_radius=4):
function get_substructure_smiles (line 34) | def get_substructure_smiles(mol, atomID, radius):
FILE: molSimplify/Informatics/partialcharges.py
function fpriority (line 6) | def fpriority(mol):
function fsym (line 185) | def fsym(mol):
function fvalency (line 196) | def fvalency(mol):
function fcharge (line 207) | def fcharge(mol, charge, bond=False):
function scharge_ave (line 219) | def scharge_ave(mol, charge, bond=False):
function all_prop (line 252) | def all_prop(mol, charge, bond=False):
function f_prop (line 273) | def f_prop(mol, charge, bond=False):
function features (line 291) | def features(mol, charge, bond=False):
function ffeatures (line 319) | def ffeatures(mol, charge, bond=False):
FILE: molSimplify/Ligands/alphabetizer.py
function main (line 4) | def main():
FILE: molSimplify/Scripts/addtodb.py
function initialize_custom_database (line 23) | def initialize_custom_database(globs):
function addtoldb (line 44) | def addtoldb(smimol, sminame, smident, smicat, smigrps, smictg, ffopt, o...
function addtocdb (line 138) | def addtocdb(smimol, sminame, smicat):
function addtobdb (line 196) | def addtobdb(smimol, sminame):
function removefromDB (line 256) | def removefromDB(sminame, ropt):
FILE: molSimplify/Scripts/align.py
function moments_of_inertia (line 3) | def moments_of_inertia(coords, masses):
function principal_axes (line 36) | def principal_axes(coords, masses):
function rot_mat_from_angle_axis (line 62) | def rot_mat_from_angle_axis(angle, axis):
function rotate_onto_principal_axes (line 90) | def rotate_onto_principal_axes(mol):
function project_onto_principal_axes (line 166) | def project_onto_principal_axes(mol):
FILE: molSimplify/Scripts/cellbuilder.py
function d_fix (line 53) | def d_fix(unit_cell, cell_vector):
function cut_cell_to_index (line 80) | def cut_cell_to_index(unit_cell, cell_vector, miller_index):
function concave_hull (line 138) | def concave_hull(points, alpha):
function unit_to_super (line 151) | def unit_to_super(unit_cell, cell_vector, duplication_vector):
function multialign_objective_function (line 182) | def multialign_objective_function(payload, surface_coord_list, cand_list...
function tracked_merge (line 202) | def tracked_merge(payload, super_cell):
function force_field_relax_with_slab (line 219) | def force_field_relax_with_slab(super_cell, payload, cand_list, its):
function surface_center (line 248) | def surface_center(super_cell):
function choose_nearest_neighbour (line 265) | def choose_nearest_neighbour(target_site, avail_sites_dict, occupied_sit...
function choose_best_site (line 318) | def choose_best_site(avail_sites_dict, occupied_sites_dict, centroid, su...
function align_payload_to_multi_site (line 380) | def align_payload_to_multi_site(payload, surface_coord_list, cand_list, ...
function combine_multi_aligned_payload_with_cell (line 464) | def combine_multi_aligned_payload_with_cell(super_cell, super_cell_vecto...
function molecule_placement_supervisor (line 740) | def molecule_placement_supervisor(super_cell, super_cell_vector, target_...
function centered_align_coord (line 932) | def centered_align_coord(super_cell_vector):
function staggered2_align_coord (line 941) | def staggered2_align_coord(super_cell):
function axes_angle_align (line 971) | def axes_angle_align(payload, cand_ind, align_ind, align_target, angle):
function slab_module_supervisor (line 1020) | def slab_module_supervisor(args, rootdir):
FILE: molSimplify/Scripts/cellbuilder_tools.py
function cell_ffopt (line 33) | def cell_ffopt(ff, mol, frozenats):
function import_from_cif (line 85) | def import_from_cif(fst, return_extra_cif_info=False):
function center_of_sym (line 169) | def center_of_sym(list_of_points):
function zero_z_csm (line 179) | def zero_z_csm(super_cell):
function xgcd (line 189) | def xgcd(b, n):
function distance_zw (line 202) | def distance_zw(r1, r2):
function mdistance (line 211) | def mdistance(r1, r2):
function get_basis_coefficients (line 220) | def get_basis_coefficients(point, basis):
function evaluate_basis_coefficients (line 230) | def evaluate_basis_coefficients(coefficients, basis):
function change_basis (line 242) | def change_basis(mol, old_basis, new_basis):
function normalize_vector (line 255) | def normalize_vector(v):
function threshold_basis (line 265) | def threshold_basis(basis, threshold):
function threshold_vector (line 271) | def threshold_vector(v, threshold):
function find_all_surface_atoms (line 280) | def find_all_surface_atoms(super_cell, tol=1e-2, type_of_atom=False):
function distance_2d_torus (line 313) | def distance_2d_torus(R1, R2, dim):
function distance_2d_torus_next_only (line 335) | def distance_2d_torus_next_only(R1, R2, dim):
function periodic_2d_distance (line 355) | def periodic_2d_distance(R1, R2, cell_vector):
function periodic_mindist (line 379) | def periodic_mindist(mol, surf, dim):
function periodic_selfdist (line 396) | def periodic_selfdist(mol, dim):
function closest_torus_point (line 414) | def closest_torus_point(mol, dim):
function check_top_layer_correct (line 427) | def check_top_layer_correct(super_cell, atom_type):
function shave_surface_layer (line 460) | def shave_surface_layer(super_cell, TOL=1e-1):
function shave_under_layer (line 478) | def shave_under_layer(super_cell):
function shave__type (line 497) | def shave__type(super_cell, dim, mode):
function zero_z (line 530) | def zero_z(super_cell):
function zero_x (line 542) | def zero_x(super_cell):
function zero_y (line 554) | def zero_y(super_cell):
function point_in_box (line 568) | def point_in_box(point, box):
function apply_plane_to_point (line 579) | def apply_plane_to_point(point, n):
function fractionate_points_by_plane (line 585) | def fractionate_points_by_plane(super_cell, n, tol=1E-8):
function points_below_plane (line 604) | def points_below_plane(point, n, refd):
function freeze_bottom_n_layers (line 616) | def freeze_bottom_n_layers(super_cell, n):
function freeze_under_layer (line 629) | def freeze_under_layer(super_cell):
function find_extents (line 650) | def find_extents(super_cell):
function find_extents_cv (line 671) | def find_extents_cv(super_cell_vector):
FILE: molSimplify/Scripts/chains.py
function mdistance (line 22) | def mdistance(r1, r2):
function find_extents (line 30) | def find_extents(mol):
function interatomic_dist (line 51) | def interatomic_dist(mol, ind1, ind2):
function find_term_heavy (line 61) | def find_term_heavy(mol, reference_point):
function trim_H (line 75) | def trim_H(mol, reference_point):
function zero_dim (line 84) | def zero_dim(mol, dim):
function zero_z (line 95) | def zero_z(mol):
function zero_x (line 107) | def zero_x(mol):
function zero_y (line 119) | def zero_y(mol):
function zero_1st (line 131) | def zero_1st(mol):
function remove_closest_h (line 139) | def remove_closest_h(mol, other_mol):
function grow_linear_step (line 156) | def grow_linear_step(chain, new_unit, dim, interv, conatom, freezehead):
function chain_builder_supervisor (line 195) | def chain_builder_supervisor(args, rundir):
FILE: molSimplify/Scripts/convert_2to3.py
function run_bash (line 5) | def run_bash(filein):
function main (line 13) | def main():
FILE: molSimplify/Scripts/dbinteract.py
function float_from_str (line 30) | def float_from_str(txt):
function setupdb (line 43) | def setupdb(dbselect):
function obfilters (line 67) | def obfilters():
function checkscr (line 107) | def checkscr(args):
function getsimilar (line 157) | def getsimilar(smi, nmols, dbselect, finger, squery, args):
function stripsalts (line 203) | def stripsalts(fname):
function getels (line 242) | def getels(smistr):
function checkels (line 269) | def checkels(fname, allowedels):
function dissim (line 299) | def dissim(outf, n):
function matchsmarts (line 377) | def matchsmarts(smarts, outf, catoms, args):
function dbsearch (line 421) | def dbsearch(rundir, args, globs):
FILE: molSimplify/Scripts/distgeom.py
function CosRule (line 37) | def CosRule(AB: float, BC: float, theta: float) -> float:
function inverseCosRule (line 60) | def inverseCosRule(A, B, C) -> float:
function GetBoundsMatrices (line 85) | def GetBoundsMatrices(mol, natoms, catoms=[], shape=[], A=[]):
function Triangle (line 175) | def Triangle(LB, UB, natoms):
function Metrize (line 214) | def Metrize(LB, UB, natoms, Full=False, seed=False):
function GetCMDists (line 266) | def GetCMDists(D, natoms):
function GetMetricMatrix (line 301) | def GetMetricMatrix(D, D0, natoms):
function Get3Eigs (line 327) | def Get3Eigs(G, natoms):
function DistErr (line 354) | def DistErr(x, *args):
function DistErrGrad (line 385) | def DistErrGrad(x, *args):
function SaveConf (line 422) | def SaveConf(X, mol, ffclean=True, catoms=[]):
function findshape (line 491) | def findshape(args, master_ligand) -> Dict:
function GetConf (line 546) | def GetConf(mol, args, catoms=[]):
FILE: molSimplify/Scripts/enhanced_structgen.py
function _metal_indices_from_elements (line 33) | def _metal_indices_from_elements(elements):
function _nearest_metal_axes (line 45) | def _nearest_metal_axes(donor_indices, sample_coords, complex_coords, co...
function load_in_ligand (line 85) | def load_in_ligand(inp):
function _get_catoms (line 92) | def _get_catoms(userligand, emsg, usercatoms):
function _check_list_lengths (line 121) | def _check_list_lengths(userligand_list, usercatoms_list, occupancy_list...
function _create_ligand_tuple (line 128) | def _create_ligand_tuple(userligand, usercatoms=None, occupancy=1, isome...
function create_ligand_list (line 133) | def create_ligand_list(userligand_list, usercatoms_list=None, occupancy_...
function generate_complex (line 155) | def generate_complex(
function run_sterics_check (line 480) | def run_sterics_check(core3D, per_atom_ff_force, optimized_coords):
function visualize_molecule (line 514) | def visualize_molecule(coords, bond_dict=None, steric_pairs=None, severi...
function _maybe_none (line 588) | def _maybe_none(x: str):
function _parse_usercatoms (line 591) | def _parse_usercatoms(s: str):
function enhanced_init_ANN (line 741) | def enhanced_init_ANN(metal, ox, spin, ligands, occs, dents,
function enforce_metal_ligand_distances_and_optimize (line 800) | def enforce_metal_ligand_distances_and_optimize(
FILE: molSimplify/Scripts/enhanced_structgen_functionality.py
function apply_aromatic_flags_from_bodict (line 35) | def apply_aromatic_flags_from_bodict(core3D):
function sync_obmol_from_bodict (line 50) | def sync_obmol_from_bodict(core3D):
function add_ligand_to_complex (line 58) | def add_ligand_to_complex(
function kabsch_align_with_reflection_option (line 118) | def kabsch_align_with_reflection_option(P, Q, allow_reflection=False):
function rmsd (line 158) | def rmsd(P, Q):
function find_best_alignment_with_subsets (line 171) | def find_best_alignment_with_subsets(ligand_coords, backbone_coords, all...
function transform_ligand (line 223) | def transform_ligand(ligand_all_coords, Rm, t):
function get_all_coords (line 238) | def get_all_coords(mol):
function zero_small_values (line 254) | def zero_small_values(coords, threshold=1e-6):
function add_ligand_to_metals (line 270) | def add_ligand_to_metals(ligand_donor_coords, ligand_all_coords, metals,...
function nudge_ligand_coords (line 322) | def nudge_ligand_coords(
function select_best_subset_by_kabsch (line 365) | def select_best_subset_by_kabsch(ligand_coords, donor_indices, backbone_...
function initialize_core (line 404) | def initialize_core(metals="Fe", coords=None, geometry=None):
function initialize_metal_coordinates (line 438) | def initialize_metal_coordinates(
function generate_backbone_sites (line 521) | def generate_backbone_sites(
function create_metals_structure (line 550) | def create_metals_structure(metal_elements, metal_coords, metal_backbone...
function get_valid_isomer_subsets (line 581) | def get_valid_isomer_subsets(metal_info, isomer=None, denticity=1):
function get_ligand_coordinates (line 621) | def get_ligand_coordinates(lig3D, donor_indices):
function set_new_coords (line 642) | def set_new_coords(mol, coords):
function set_metal_ligand_bond_lengths (line 662) | def set_metal_ligand_bond_lengths(ligand_coords, donor_indices, metal_co...
function get_all_bonded_atoms_bonded_to_metal (line 690) | def get_all_bonded_atoms_bonded_to_metal(mol, include_metal=True, transi...
function get_all_coords_and_elements (line 718) | def get_all_coords_and_elements(mol):
function iterative_dual_clash_resolution (line 752) | def iterative_dual_clash_resolution(
function try_optimize_body_hybrid (line 1017) | def try_optimize_body_hybrid(
function get_next_structure (line 1191) | def get_next_structure(metals_structures, denticity):
function map_donors_to_sites (line 1201) | def map_donors_to_sites(donor_indices, best_perm_idx, chosen_subset):
function _metal_indices_from_elements (line 1241) | def _metal_indices_from_elements(elements):
function outward_orientation_penalty (line 1251) | def outward_orientation_penalty(
function _hard_outward_flip_no_elements (line 1329) | def _hard_outward_flip_no_elements(coords, donor_indices, complex_coords...
function is_iterable_but_not_str (line 1400) | def is_iterable_but_not_str(x):
function _virtual_point_for_group (line 1405) | def _virtual_point_for_group(group_idx_list, coords):
function _plane_normal_for_group (line 1420) | def _plane_normal_for_group(group_idx_list, coords):
function parse_donor_spec_make_virtuals (line 1442) | def parse_donor_spec_make_virtuals(donor_indices, ligand_all_coords):
function nearest_metal_vector (line 1463) | def nearest_metal_vector(point, complex_coords, complex_elements):
function align_group_normal_to_axis (line 1477) | def align_group_normal_to_axis(coords_all, group_idx_list, desired_axis):
function map_donors_to_sites_haptic_aware (line 1503) | def map_donors_to_sites_haptic_aware(donor_groups, best_perm_group_ids, ...
function _simple_voxel_score_factory (line 1524) | def _simple_voxel_score_factory(VoxelGridClass, complex_coords, complex_...
function _nearest_metal_axes (line 1541) | def _nearest_metal_axes(donor_indices, sample_coords, complex_coords, co...
function _simple_outward_cos_report (line 1566) | def _simple_outward_cos_report(sample_coords, donor_indices, k_neighbors...
function clash_aware_kabsch (line 1577) | def clash_aware_kabsch(
function _site_equivalence_classes (line 1882) | def _site_equivalence_classes(backbone_coords, tol=1e-4):
function _dedupe_subsets_by_site_classes (line 1924) | def _dedupe_subsets_by_site_classes(valid_subsets, class_of):
function _ensure_dir (line 1967) | def _ensure_dir(path):
function _scatter_voxels (line 1972) | def _scatter_voxels(ax, coords, label, alpha=0.35, s=6):
function _scatter_atoms (line 1984) | def _scatter_atoms(ax, coords, label, s=25, alpha=0.9):
function _plot_voxel_dots (line 1994) | def _plot_voxel_dots(ax, coords, label, marker="s", s=10, alpha=0.8, col...
function _unique_path (line 2005) | def _unique_path(dirpath, filename):
function _set_equal_3d (line 2022) | def _set_equal_3d(ax, points=None, padding=0.0, orthographic=True):
function _plot_voxel_cubes (line 2056) | def _plot_voxel_cubes(
function save_voxel_frame (line 2100) | def save_voxel_frame(
function make_gif_from_frames (line 2277) | def make_gif_from_frames(frame_paths, gif_path, fps=8):
function visualize_initial_metal_voxels (line 2298) | def visualize_initial_metal_voxels(
function visualize_final_complex_voxels (line 2327) | def visualize_final_complex_voxels(
function detect_ring_piercing (line 2376) | def detect_ring_piercing(
function estimate_minimum_shift_distance (line 2575) | def estimate_minimum_shift_distance(ring_coords, bond_coords, buffer=5):
function correct_ring_piercings (line 2592) | def correct_ring_piercings(
function build_kdtree (line 2768) | def build_kdtree(coords):
function _build_bond_graph (line 2773) | def _build_bond_graph(bo_dict):
function _donors_by_metal (line 2783) | def _donors_by_metal(elements, bond_pairs):
function _shares_metal (line 2800) | def _shares_metal(u, v, donors_by_m):
function _pca_frame (line 2808) | def _pca_frame(P):
function _pca_align (line 2844) | def _pca_align(P, Q):
function _cheap_group_rmsd (line 2855) | def _cheap_group_rmsd(donor_virtuals, site_coords):
function prefilter_subsets_by_donor_reps (line 2878) | def prefilter_subsets_by_donor_reps(
function check_sterics (line 2914) | def check_sterics(tree, coords, elements, vdw_radii, bo_dict=None, scale...
function _ring_sets_from_graph (line 2962) | def _ring_sets_from_graph(G):
function _same_ring (line 2967) | def _same_ring(i, j, ring_sets):
function _normalize_bonds_auto (line 2971) | def _normalize_bonds_auto(bo_dict, N):
function _build_graph_from_bonds (line 3005) | def _build_graph_from_bonds(N, bo_dict0):
function _normalize_bonds_zero_based (line 3015) | def _normalize_bonds_zero_based(bo_dict):
function check_sterics_with_ff_embedding (line 3033) | def check_sterics_with_ff_embedding(
function check_badjob (line 3167) | def check_badjob(core3D):
function apply_rotation_about_vector (line 3186) | def apply_rotation_about_vector(coords, donor_coords, axis, angle_deg):
function generate_rotated_conformations (line 3199) | def generate_rotated_conformations(coords, donor_coords, axis, angles):
function get_voxel_coords_by_group (line 3211) | def get_voxel_coords_by_group(voxel_grid):
function add_haptic_multibonds_to_metal (line 3236) | def add_haptic_multibonds_to_metal(
function map_ligand_local_to_core_indices_by_range (line 3303) | def map_ligand_local_to_core_indices_by_range(core_before_count, core_af...
function map_ligand_local_to_core_indices_geometric (line 3314) | def map_ligand_local_to_core_indices_geometric(core3D, ligand_coords, to...
function to_global_groups (line 3360) | def to_global_groups(donor_groups_local, local2global):
function add_haptic_multibonds_to_metal_for_core (line 3367) | def add_haptic_multibonds_to_metal_for_core(
function reapply_all_haptics_and_sync (line 3434) | def reapply_all_haptics_and_sync(core3D, bond_order=1, prefer_nearest_me...
FILE: molSimplify/Scripts/findcorrelations.py
function analysis_supervisor (line 15) | def analysis_supervisor(args, rootdir):
function accquire_file (line 42) | def accquire_file(path):
function correlation_supervisor (line 103) | def correlation_supervisor(path, rootdir, simple=False, lig_only=False, ...
FILE: molSimplify/Scripts/generator.py
function startgen_pythonic (line 30) | def startgen_pythonic(input_dict={'-core': 'fe', '-lig': 'cl,cl,cl,cl,cl...
function startgen (line 67) | def startgen(argv, flag, inputfile_str=None, write_files=True):
FILE: molSimplify/Scripts/geometry.py
function norm (line 14) | def norm(u):
function normalize (line 32) | def normalize(u):
function distance (line 55) | def distance(r1, r2):
function vecdiff (line 74) | def vecdiff(r1, r2):
function midpt (line 94) | def midpt(r1, r2):
function checkcolinear (line 116) | def checkcolinear(r1, r2, r3):
function checkplanar (line 140) | def checkplanar(r1, r2, r3, r4):
function vecangle (line 168) | def vecangle(r1, r2):
function getPointu (line 192) | def getPointu(Rr, dist, u):
function rotation_params (line 219) | def rotation_params(r0, r1, r2):
function dihedral (line 264) | def dihedral(mol, idx1, idx2, idx3, idx4):
function kabsch (line 312) | def kabsch(mol0, mol1):
function ReflectPlane (line 370) | def ReflectPlane(u, r, Rp):
function PointRotateAxis (line 416) | def PointRotateAxis(u, rp, r, theta):
function PointRotateMat (line 468) | def PointRotateMat(r, R):
function PointTranslateSph (line 491) | def PointTranslateSph(Rp, p0, D) -> List[float]:
function PointTranslateSphgivenphi (line 527) | def PointTranslateSphgivenphi(Rp, p0, D):
function PointTranslateSphgivenr (line 563) | def PointTranslateSphgivenr(Rp, p0, D, pref, r):
function PointTranslatetoPSph (line 608) | def PointTranslatetoPSph(Rp, p0, D):
function PointRotateSph (line 644) | def PointRotateSph(Rp, p0, D):
function reflect_through_plane (line 678) | def reflect_through_plane(mol, u, Rp):
function rotate_around_axis (line 707) | def rotate_around_axis(mol, Rp, u, theta):
function rotate_mat (line 739) | def rotate_mat(mol, R):
function setPdistance (line 763) | def setPdistance(mol, Rr, Rp, bond):
function setPdistanceu (line 803) | def setPdistanceu(mol, Rr, Rp, bond, u):
function setcmdistance (line 837) | def setcmdistance(mol, Rp, bond):
function protate (line 870) | def protate(mol, Rr, D):
function protateref (line 903) | def protateref(mol, Rr, Rref, D):
function cmrotate (line 937) | def cmrotate(mol, D):
function rotateRef (line 967) | def rotateRef(mol, Ref, D):
function aligntoaxis (line 998) | def aligntoaxis(mol, Rr, Rp, u):
function aligntoaxis2 (line 1029) | def aligntoaxis2(mol, Rr, Rp, u, d):
function alignPtoaxis (line 1060) | def alignPtoaxis(Rr, Rp, u, d):
function pmrotate (line 1087) | def pmrotate(mol, Rp, D):
function connectivity_match (line 1118) | def connectivity_match(inds1, inds2, mol1, mol2):
function best_fit_plane (line 1154) | def best_fit_plane(coordinates):
function move_point (line 1180) | def move_point(initial_point, vector, distance):
function align_axis (line 1208) | def align_axis(mol,Rp,u1,u2):
FILE: molSimplify/Scripts/inparse.py
function checkinput (line 26) | def checkinput(args, calctype="base"):
function checkTrue (line 370) | def checkTrue(arg):
function is_number (line 384) | def is_number(s):
function cleaninput (line 402) | def cleaninput(args):
function parseCLI (line 529) | def parseCLI(args):
function parseinputfile (line 553) | def parseinputfile(args, inputfile_str=None):
function parseall (line 1102) | def parseall(parser):
function parseinputs_basic (line 1134) | def parseinputs_basic(*p):
function parseinputs_advanced (line 1186) | def parseinputs_advanced(*p):
function parseinputs_slabgen (line 1250) | def parseinputs_slabgen(*p):
function parseinputs_autocorr (line 1324) | def parseinputs_autocorr(*p):
function parseinputs_chainb (line 1351) | def parseinputs_chainb(*p):
function parseinputs_db (line 1369) | def parseinputs_db(*p):
function parseinputs_inputgen (line 1439) | def parseinputs_inputgen(*p):
function parseinputs_postproc (line 1521) | def parseinputs_postproc(*p):
function parseinputs_random (line 1559) | def parseinputs_random(*p):
function parseinputs_binding (line 1583) | def parseinputs_binding(*p):
function parseinputs_tsgen (line 1627) | def parseinputs_tsgen(*p):
function parseinputs_customcore (line 1653) | def parseinputs_customcore(*p):
function parseinputs_naming (line 1671) | def parseinputs_naming(*p):
function parseinputs_ligdict (line 1692) | def parseinputs_ligdict(*p):
function deserialize_json (line 1714) | def deserialize_json(filein):
function args_parser_retrain (line 1720) | def args_parser_retrain():
FILE: molSimplify/Scripts/io.py
function resolve_existing_directory (line 33) | def resolve_existing_directory(
function printgeoms (line 86) | def printgeoms():
function getgeoms (line 112) | def getgeoms():
function _raise_custom_data_dir_missing (line 163) | def _raise_custom_data_dir_missing(fname: str, from_err: Optional[Except...
function readdict (line 189) | def readdict(fname):
function readdict_sub (line 214) | def readdict_sub(fname):
function getligs (line 239) | def getligs() -> str:
function getlicores (line 247) | def getlicores(flip: bool = True) -> Dict[str, Any]:
function getsimpleligs (line 263) | def getsimpleligs() -> str:
function getslicores (line 270) | def getslicores() -> Dict[str, Any]:
function getligroups (line 283) | def getligroups(licores: dict) -> str:
function checkTMsmiles (line 294) | def checkTMsmiles(smi: str) -> str:
function getbinds (line 303) | def getbinds() -> str:
function getbcores (line 310) | def getbcores() -> dict:
function getcores (line 321) | def getcores():
function getmcores (line 333) | def getmcores():
function getsubstrates (line 344) | def getsubstrates():
function getsubcores (line 356) | def getsubcores():
function loaddata (line 369) | def loaddata(path: str) -> dict:
function loaddata_ts (line 391) | def loaddata_ts(path: str) -> dict:
function loadcdxml (line 413) | def loadcdxml(cdxml: str) -> Tuple[str, str]:
function loadcoord (line 492) | def loadcoord(coord: str) -> List[List[float]]:
function core_load (line 510) | def core_load(usercore: str, mcores: Optional[dict] = None) -> Tuple[Uni...
function substr_load (line 588) | def substr_load(usersubstrate: str,
function lig_load (line 698) | def lig_load(userligand: str, licores: Optional[dict] = None) -> Tuple[A...
function lig_load_safe (line 873) | def lig_load_safe(userligand: str, licores: Optional[dict] = None) -> Tu...
function bind_load (line 1065) | def bind_load(userbind: str, bindcores: dict) -> Tuple[Union[mol3D, None...
function getinputargs (line 1130) | def getinputargs(args, fname: str):
function plugin_defs (line 1158) | def plugin_defs() -> str:
function name_complex (line 1173) | def name_complex(rootdir: str, core, geometry, ligs, ligoc, sernum: int,
function name_ts_complex (line 1244) | def name_ts_complex(rootdir, core, geometry, ligs, ligoc, substrate, sub...
function copy_to_custom_path (line 1305) | def copy_to_custom_path():
function _coerce_scalar (line 1341) | def _coerce_scalar(tok: str) -> Any:
function _normalize_list (line 1347) | def _normalize_list(obj: Any) -> Any:
function parse_bracketed_list (line 1359) | def parse_bracketed_list(obj: Union[List[Any], str]) -> List[Any]:
FILE: molSimplify/Scripts/isomers.py
function generateisomers (line 23) | def generateisomers(args):
function expandrepresentation (line 48) | def expandrepresentation(args):
function findpermutations (line 73) | def findpermutations(lst, master=None):
function checkunique (line 104) | def checkunique(args, permutations):
function collapserepresentation (line 138) | def collapserepresentation(args, permutations):
function generatestereo (line 183) | def generatestereo(collapsed_representation):
function checkallowedbidentates (line 235) | def checkallowedbidentates(simple_geometry, geometry):
function checkdenticity (line 284) | def checkdenticity(ligand):
function getadjacency (line 295) | def getadjacency(geo):
function searchlist (line 320) | def searchlist(lst, key):
function checkincluded (line 333) | def checkincluded(geometry, unique_representations):
function checksymmetric (line 366) | def checksymmetric(lig):
FILE: molSimplify/Scripts/jobgen.py
function sgejobgen (line 13) | def sgejobgen(args, jobdirs):
function slurmjobgen (line 158) | def slurmjobgen(args, jobdirs):
FILE: molSimplify/Scripts/krr_prep.py
function feature_prep (line 45) | def feature_prep(mol, idx):
function normalize (line 206) | def normalize(data, mean, std):
function krr_model_training (line 223) | def krr_model_training(csvf, colnum_label, colnum_desc, alpha=1, gamma=1...
function krr_model_training_loo (line 352) | def krr_model_training_loo(csvf, colnum_label, colnum_desc, feature_name...
function gbr_model_training (line 506) | def gbr_model_training(csvf, colnum_i_label, colnum_j_label, colnum_desc):
function ML_model_predict (line 615) | def ML_model_predict(core3D, spin, train_dict, stat_dict, impt_dict, regr):
function krr_model_predict (line 673) | def krr_model_predict(core3D, spin, mligcatom):
function invoke_KRR_from_mol3d_dQ (line 826) | def invoke_KRR_from_mol3d_dQ(mol, charge):
function invoke_KRR_from_mol3d_RACs (line 906) | def invoke_KRR_from_mol3d_RACs(mol, charge):
function get_descriptor_vector_for_atidx (line 950) | def get_descriptor_vector_for_atidx(mol, atidx, depth=4, oct=False):
function generate_revised_atomonly_autocorrelations (line 970) | def generate_revised_atomonly_autocorrelations(mol, atomIdx, loud, depth...
function generate_atomonly_ratiometrics (line 994) | def generate_atomonly_ratiometrics(mol, atomIdx, loud, depth=4, oct=True):
function generate_atomonly_summetrics (line 1022) | def generate_atomonly_summetrics(mol, atomIdx, loud, depth=4, oct=True):
function generate_revised_atomonly_deltametrics (line 1046) | def generate_revised_atomonly_deltametrics(mol, atomIdx, loud, depth=4, ...
function get_revised_descriptor_vector_for_atidx (line 1076) | def get_revised_descriptor_vector_for_atidx(mol, atidx, depth=4, oct=Fal...
function default_plot (line 1113) | def default_plot(x, y, name=False):
FILE: molSimplify/Scripts/namegen.py
function name_complex (line 16) | def name_complex(core, ligs, ligoc, args) -> str:
FILE: molSimplify/Scripts/nn_prep.py
function get_bond_order (line 20) | def get_bond_order(OBMol, connection_atoms, mol) -> int:
function check_ligands (line 47) | def check_ligands(ligs, batlist, dents, tcats):
function check_metal (line 136) | def check_metal(metal: str, oxidation_state: str) -> Tuple[bool, str]:
function get_con_at_type (line 149) | def get_con_at_type(mol, connection_atoms: List[Union[int, str]]) -> Tup...
function ANN_preproc (line 179) | def ANN_preproc(args, ligs: List[str], occs: List[int], dents: List[int],
function ax_lig_corrector (line 477) | def ax_lig_corrector(excitation, con_atom_type):
function eq_lig_corrector (line 489) | def eq_lig_corrector(excitation, con_atom_type):
function metal_corrector (line 500) | def metal_corrector(excitation, metal):
function spin_classify (line 511) | def spin_classify(metal, spin, ox):
function get_splitting (line 531) | def get_splitting(excitation):
function get_slope (line 536) | def get_slope(slope_excitation):
function get_ls_dist (line 541) | def get_ls_dist(excitation):
function get_hs_dist (line 546) | def get_hs_dist(excitation):
FILE: molSimplify/Scripts/nx_helpers.py
function mol3D_to_networkx (line 10) | def mol3D_to_networkx(mol,get_symbols:bool=True,get_bond_order:bool=True...
FILE: molSimplify/Scripts/oct_check_mols.py
function create_mol_with_xyz (line 36) | def create_mol_with_xyz(_file_in):
function readfromtxt (line 42) | def readfromtxt(mol, txt):
function find_nearest_ind (line 66) | def find_nearest_ind(array, value):
function comp_two_angle_array_ (line 73) | def comp_two_angle_array_(input_angle, target_angle, catoms_map, picked):
function comp_two_angle_array (line 97) | def comp_two_angle_array(input_angle, target_angle, catoms_map, picked_i...
function comp_angle_pick_one_best (line 144) | def comp_angle_pick_one_best(input_arr, target_angle, catoms_map, picked):
function loop_target_angle_arr (line 172) | def loop_target_angle_arr(input_arr, target_arr, catoms_map):
function sort_sec_ele (line 187) | def sort_sec_ele(ele):
function get_num_coord_metal (line 199) | def get_num_coord_metal(file_in, debug=False):
function ligand_comp_org (line 218) | def ligand_comp_org(file_in, file_init_geo, catoms_arr, flag_deleteH=Tru...
function match_lig_list (line 288) | def match_lig_list(file_in, file_init_geo, catoms_arr,
function find_the_other_ind (line 354) | def find_the_other_ind(arr, ind):
function is_linear_ligand (line 363) | def is_linear_ligand(mol, ind):
function get_linear_angle (line 384) | def get_linear_angle(mol, ind):
function check_angle_linear (line 397) | def check_angle_linear(file_in, catoms_arr):
function oct_comp (line 431) | def oct_comp(file_in, angle_ref=oct_angle_ref, catoms_arr=None,
function dict_check_processing (line 506) | def dict_check_processing(dict_info, dict_check, std_not_use,
function Oct_inspection (line 537) | def Oct_inspection(file_in, file_init_geo=None, catoms_arr=None, dict_ch...
function IsOct (line 599) | def IsOct(file_in, file_init_geo=None, dict_check=dict_oct_check_st,
function IsStructure (line 649) | def IsStructure(file_in, file_init_geo=None, dict_check=dict_oneempty_ch...
function loop_structure (line 695) | def loop_structure(_path, path_init_geo):
function find_file_with_unique_num (line 727) | def find_file_with_unique_num(_path, unique_num):
function gen_file_with_name (line 738) | def gen_file_with_name(path_init_geo, name_opt):
FILE: molSimplify/Scripts/periodic_QE.py
function write_periodic_mol3d_to_qe (line 14) | def write_periodic_mol3d_to_qe(mol, cell_vector, path):
FILE: molSimplify/Scripts/postmold.py
class AtomClass (line 18) | class AtomClass:
function getrange (line 36) | def getrange(idx, atoms):
function parse (line 48) | def parse(folder, molf):
function parsed (line 231) | def parsed(orbf):
function getresd (line 268) | def getresd(dirf):
function moldpost (line 294) | def moldpost(molf, folder, flog):
FILE: molSimplify/Scripts/postmwfn.py
function distance (line 25) | def distance(R1, R2):
function find_between (line 39) | def find_between(s, first, last):
function radial (line 58) | def radial(v):
function calc (line 70) | def calc(den, dV):
function spreadcalc (line 87) | def spreadcalc(den, ELF, totel, dV):
function calcHELP (line 130) | def calcHELP(den, ELF, dV):
function parsecube (line 147) | def parsecube(cubef):
function wfncalc (line 231) | def wfncalc(denf, elff):
function cubespin (line 244) | def cubespin(cubefTOT, cubefSPIN):
function readden (line 279) | def readden(inputf):
function getcubes (line 341) | def getcubes(molf, folder, flog):
function getwfnprops (line 402) | def getwfnprops(molf, folder, flog):
function getcharges (line 459) | def getcharges(molf, folder, flog):
function deloc (line 553) | def deloc(molf, folder, flog):
FILE: molSimplify/Scripts/postparse.py
function find_between (line 19) | def find_between(s, first, last):
function nbo_parser_unrestricted (line 38) | def nbo_parser_unrestricted(s):
function nbo_parser_restricted (line 123) | def nbo_parser_restricted(s):
function spinnbo (line 174) | def spinnbo(s, metal):
function spinnlmo (line 212) | def spinnlmo(s, metal):
function nbopost (line 234) | def nbopost(resfiles, folder, flog):
function terapost (line 278) | def terapost(resfiles, folder, flog):
function gampost (line 371) | def gampost(resfiles, folder, flog):
FILE: molSimplify/Scripts/postproc.py
function checkmultiwfn (line 30) | def checkmultiwfn(mdir):
function postproc (line 42) | def postproc(rundir, args, globs):
FILE: molSimplify/Scripts/qcgen.py
function multitcgen (line 16) | def multitcgen(args, strfiles):
function tcgen (line 57) | def tcgen(args, strfiles, method):
function xyz2gxyz (line 260) | def xyz2gxyz(filename):
function multigamgen (line 282) | def multigamgen(args, strfiles):
function gamgen (line 314) | def gamgen(args, strfiles, method):
function multiqgen (line 497) | def multiqgen(args, strfiles):
function qgen (line 529) | def qgen(args, strfiles, method):
function mlpgen (line 657) | def mlpgen(args, strfiles, rootdir):
function multiogen (line 744) | def multiogen(args, strfiles):
function ogen (line 781) | def ogen(args, strfiles, method):
function ogenwrt (line 972) | def ogenwrt(output, jobparams, xyzf):
function molcgen (line 1030) | def molcgen(args, strfiles, method):
function molcwrt (line 1191) | def molcwrt(output, jobparams, xyzf, xyzind):
function multimolcgen (line 1242) | def multimolcgen(args, strfiles):
function molcbasis (line 1278) | def molcbasis(strfiles, basistyp):
function molcras2s (line 1358) | def molcras2s(strfiles):
function molcnactels (line 1390) | def molcnactels(strfiles, oxnum):
function molcfrozens (line 1425) | def molcfrozens(strfiles):
FILE: molSimplify/Scripts/rmsd.py
function rmsd (line 7) | def rmsd(V, W):
function kabsch_rmsd (line 30) | def kabsch_rmsd(P, Q, translate=False):
function kabsch_rotate (line 55) | def kabsch_rotate(P, Q):
function kabsch (line 77) | def kabsch(P, Q):
function quaternion_rmsd (line 121) | def quaternion_rmsd(P, Q) -> float:
function quaternion_transform (line 142) | def quaternion_transform(r):
function makeW (line 158) | def makeW(r1, r2, r3, r4=0):
function makeQ (line 186) | def makeQ(r1, r2, r3, r4=0):
function quaternion_rotate (line 214) | def quaternion_rotate(X, Y):
function centroid (line 241) | def centroid(X):
function hungarian (line 260) | def hungarian(A, B):
function reorder_hungarian (line 288) | def reorder_hungarian(p_atoms, q_atoms, p_coord, q_coord):
function reorder_distance (line 329) | def reorder_distance(p_atoms, q_atoms, p_coord, q_coord):
function rmsd_reorder_rotate (line 375) | def rmsd_reorder_rotate(p_atoms, q_atoms, p_coord, q_coord,
function reorder_rotate (line 449) | def reorder_rotate(p_atoms, q_atoms, p_coord, q_coord,
function rigorous_rmsd (line 531) | def rigorous_rmsd(mol_p, mol_q, rotation: str = "kabsch",
function align_rmsd_project (line 560) | def align_rmsd_project(mol_p, mol_q, rotation: str = "kabsch",
function align_rmsd_rotate (line 648) | def align_rmsd_rotate(mol_p, mol_q, rotation: str = "kabsch",
function test_case (line 755) | def test_case():
FILE: molSimplify/Scripts/rungen.py
function constrgen (line 55) | def constrgen(rundir: str, args: Namespace) -> Tuple[Union[Namespace, bo...
function getconstsample (line 160) | def getconstsample(no_rgen, args, licores, coord):
function multigenruns (line 209) | def multigenruns(rundir, args, write_files=True):
function checkmultilig (line 312) | def checkmultilig(ligs: List[str]) -> Tuple[List[List[str]], List[List[s...
function draw_supervisor (line 361) | def draw_supervisor(args: Namespace, rundir: str):
function rungen (line 396) | def rungen(rundir, args: Namespace, chspfname=None, write_files: bool = ...
FILE: molSimplify/Scripts/structgen.py
function getbackbcombsall (line 67) | def getbackbcombsall(nums):
function getnupdateb (line 90) | def getnupdateb(backbatoms: List[List[int]], denticity: int) -> Tuple[Li...
function init_ANN (line 129) | def init_ANN(args, ligands: List[str], occs: List[int], dents: List[int],
function init_template (line 225) | def init_template(args: Namespace, cpoints_required: int) -> Tuple[mol3D...
function init_ligand (line 404) | def init_ligand(args: Namespace, lig: mol3D, tcats,
function modifybackbonep (line 510) | def modifybackbonep(backb, pangles):
function distortbackbone (line 535) | def distortbackbone(backb, distort):
function smartreorderligs (line 559) | def smartreorderligs(ligs: List[str], dentl: List[int],
function ffopt (line 605) | def ffopt(ff: str, mol: mol3D, connected: List[int], constopt: int,
function openbabel_ffopt (line 662) | def openbabel_ffopt(ff: str, mol: mol3D, connected: List[int], constopt:...
function xtb_opt (line 843) | def xtb_opt(ff: str, mol: mol3D, connected: List[int], constopt: int,
function getconnection (line 971) | def getconnection(core: mol3D, cidx: int, BL: float) -> List[float]:
function findsmarts (line 1008) | def findsmarts(lig3D: mol3D, smarts: List[str], catom: int) -> bool:
function align_lig_centersym (line 1044) | def align_lig_centersym(corerefcoords, lig3D, atom0, core3D, EnableAutoL...
function align_linear_pi_lig (line 1104) | def align_linear_pi_lig(corerefcoords, lig3D, atom0, ligpiatoms):
function rotation_objective_func (line 1166) | def rotation_objective_func(rotations, lig3D, atom0, ligpiatoms, metal_l...
function align_pi_ring_lig (line 1213) | def align_pi_ring_lig(corerefcoords, lig3D, atom0, ligpiatoms, u):
function check_rotate_linear_lig (line 1259) | def check_rotate_linear_lig(corerefcoords, lig3D, atom0):
function check_rotate_symm_lig (line 1294) | def check_rotate_symm_lig(corerefcoords, lig3D, atom0, core3D):
function rotate_MLaxis_minimize_steric (line 1336) | def rotate_MLaxis_minimize_steric(corerefcoords, lig3D, atom0, core3D):
function rotate_catom_fix_Hs (line 1380) | def rotate_catom_fix_Hs(lig3D, catoms, n, mcoords, core3D):
function rotate_catoms_fix_Hs (line 1497) | def rotate_catoms_fix_Hs(lig3D: mol3D, catoms: List[int], mcoords, core3...
function get_MLdist (line 1525) | def get_MLdist(metal: atom3D, oxstate: str, spin: str, lig3D: mol3D,
function get_MLdist_database (line 1598) | def get_MLdist_database(metal: atom3D, oxstate: str, spin: str, lig3D: m...
function get_batoms (line 1663) | def get_batoms(batslist, ligsused):
function align_dent2_catom2_coarse (line 1686) | def align_dent2_catom2_coarse(args, lig3D, core3D, catoms, r1, r0, m3D, ...
function align_dent2_catom2_refined (line 1800) | def align_dent2_catom2_refined(args, lig3D, catoms, bondl, r1, r0, core3...
function align_dent1_lig (line 1903) | def align_dent1_lig(args, cpoint, core3D, coreref, ligand, lig3D, catoms,
function align_dent2_lig (line 1991) | def align_dent2_lig(args, cpoint, batoms, m3D, core3D, coreref, ligand, ...
function align_dent3_lig (line 2082) | def align_dent3_lig(args, cpoint, batoms, m3D, core3D, coreref, ligand, ...
function mcomplex (line 2228) | def mcomplex(args: Namespace, ligs: List[str], ligoc: List[int], smart_g...
function generate_report (line 2774) | def generate_report(args: Namespace, ligands: List[str], ligoc: List[int]
function structgen (line 2892) | def structgen(args: Namespace, rootdir: str, ligands: List[str], ligoc: ...
FILE: molSimplify/Scripts/tf_nn_prep.py
function spin_classify (line 32) | def spin_classify(metal: str, spin: Union[int, str], ox: int) -> Tuple[b...
function invoke_ANNs_from_mol3d (line 54) | def invoke_ANNs_from_mol3d(mol: mol3D, oxidation_state: int,
function tf_check_ligands (line 99) | def tf_check_ligands(ligs: List[str], batslist: List[List[int]],
function check_metal (line 273) | def check_metal(metal: str, oxidation_state: str) -> Tuple[bool, str]:
function tf_ANN_preproc (line 286) | def tf_ANN_preproc(metal: str, oxstate, spin, ligs: List[str], occs: Lis...
function evaluate_tmc_anns (line 527) | def evaluate_tmc_anns(this_complex: mol3D, metal: str, ox: int, spin: int,
function _flat_floats (line 752) | def _flat_floats(x):
function evaluate_catalytic_anns (line 760) | def evaluate_catalytic_anns(this_complex: mol3D, metal: str, ox: int, sp...
FILE: molSimplify/Scripts/tsgen.py
function getconnections (line 50) | def getconnections(core, catom, Midx, BL, ABXang):
function substplacecheap (line 72) | def substplacecheap(core, connPts, catom):
function substplaceff_mode3 (line 101) | def substplaceff_mode3(core, substr, substreact, compreact, cpoint, args...
function substplaceff_mode1 (line 146) | def substplaceff_mode1(core, substr, substreact, compreact, cpoint, liga...
function tsgen (line 180) | def tsgen(mode, args, rootdir, core, substr, compreact, substreact, globs):
FILE: molSimplify/Scripts/uq_calibration.py
function nlm (line 7) | def nlm(func, p0,
function linear_variance_model (line 33) | def linear_variance_model(dist, theta):
function zero_linear_variance_model (line 43) | def zero_linear_variance_model(dist, theta):
function maximum_likelihood_loss (line 53) | def maximum_likelihood_loss(theta, dists, epsilons, varfun=linear_varian...
FILE: molSimplify/__main__.py
function run_legacy (line 102) | def run_legacy(args):
function run_build_complex (line 130) | def run_build_complex(args):
function main (line 483) | def main(args=None):
FILE: molSimplify/ml/kernels.py
class Masking (line 5) | class Masking(Kernel):
method __init__ (line 6) | def __init__(self, mask, kernel):
method theta (line 11) | def theta(self):
method theta (line 15) | def theta(self, theta):
method bounds (line 19) | def bounds(self):
method __call__ (line 22) | def __call__(self, X, Y=None, eval_gradient=False):
method diag (line 29) | def diag(self, X):
method __repr__ (line 32) | def __repr__(self):
method is_stationary (line 35) | def is_stationary(self):
class PermutationalKernel (line 40) | class PermutationalKernel(Kernel):
method __init__ (line 41) | def __init__(self, shape, permutations, kernel):
method theta (line 47) | def theta(self):
method theta (line 51) | def theta(self, theta):
method bounds (line 55) | def bounds(self):
method __call__ (line 58) | def __call__(self, X, Y=None, eval_gradient=False):
method diag (line 97) | def diag(self, X):
method __repr__ (line 101) | def __repr__(self):
method is_stationary (line 104) | def is_stationary(self):
FILE: molSimplify/ml/layers.py
class PermutationLayer (line 12) | class PermutationLayer(tf.keras.layers.Layer):
method __init__ (line 14) | def __init__(self, permutations: List[Tuple[int]]):
method call (line 18) | def call(self, inputs):
method get_config (line 38) | def get_config(self):
FILE: molSimplify/python_krr/sklearn_models.py
function load_sklearn_model (line 10) | def load_sklearn_model(predictor):
function sklearn_supervisor (line 17) | def sklearn_supervisor(predictor, descriptors, descriptor_names, debug=F...
FILE: molSimplify/python_nn/ANN.py
function simple_network_builder (line 19) | def simple_network_builder(layers: List[int], partial_path: str):
function simple_network_builder_pybrain (line 47) | def simple_network_builder_pybrain(layers: List[int], partial_path: str):
function csv_loader (line 92) | def csv_loader(path: str) -> List[float]:
function matrix_loader (line 103) | def matrix_loader(path, rownames=False):
function simple_splitting_ann (line 119) | def simple_splitting_ann(excitation):
function simple_slope_ann (line 128) | def simple_slope_ann(slope_excitation):
function simple_ls_ann (line 136) | def simple_ls_ann(excitation):
function simple_hs_ann (line 144) | def simple_hs_ann(excitation):
function excitation_standardizer (line 152) | def excitation_standardizer(excitation, tag):
function find_eu_dist (line 169) | def find_eu_dist(excitation):
FILE: molSimplify/python_nn/clf_analysis_tool.py
function get_acc (line 10) | def get_acc(pred_std, pred_err, stds):
function dist_neighbor (line 30) | def dist_neighbor(fmat1, fmat2, labels, l=5, dist_ref=1): # noqa: E741
function array_stack (line 57) | def array_stack(array, _idx):
function dist_penalty (line 67) | def dist_penalty(d):
function get_entropy (line 71) | def get_entropy(dists, neighbor_targets) -> np.ndarray:
function get_layer_outputs (line 99) | def get_layer_outputs(model, layer_index, input,
function lse_trust (line 111) | def lse_trust(lse):
FILE: molSimplify/python_nn/dictionary_toolbox.py
function write_dictionary (line 2) | def write_dictionary(dictionary, path):
function read_dictionary (line 13) | def read_dictionary(path):
FILE: molSimplify/python_nn/ensemble_test.py
function reset_weights (line 29) | def reset_weights(model):
function array_stack (line 37) | def array_stack(array, _idx):
function mc_dropout_logp (line 47) | def mc_dropout_logp(tau, err):
function ensemble_maker_inner (line 56) | def ensemble_maker_inner(train_mat, labels, model_gen_function, info_dict,
function ensemble_maker (line 85) | def ensemble_maker(predictor, num=10):
function ensemble_uq (line 103) | def ensemble_uq(predictor, descriptors=False, descriptor_names=False, su...
function mc_dropout_uq (line 154) | def mc_dropout_uq(predictor, descriptors=False, descriptor_names=False, ...
function latent_space_uq (line 200) | def latent_space_uq(predictor, layer_index=-2, descriptors=False, descri...
FILE: molSimplify/python_nn/tf_ANN.py
function get_layer_outputs2 (line 56) | def get_layer_outputs2(model, layer_index, input_array, training_flag=Fa...
function _prepare_inputs_for_model (line 80) | def _prepare_inputs_for_model(model, X):
function _install_sklearn_compat_shims (line 87) | def _install_sklearn_compat_shims():
function perform_ANN_prediction (line 143) | def perform_ANN_prediction(RAC_dataframe: pd.DataFrame, predictor_name: ...
function get_error_params (line 208) | def get_error_params(latent_distances, errors):
function matrix_loader (line 222) | def matrix_loader(path: str, rownames: bool = False) -> Union[Tuple[List...
function get_key (line 238) | def get_key(predictor: str, suffix: Optional[str] = None) -> str:
function data_rescale (line 268) | def data_rescale(scaled_dat, train_mean, train_var, debug=False) -> np.n...
function data_normalize (line 276) | def data_normalize(data, train_mean, train_var, debug=False) -> np.ndarray:
function load_normalization_data (line 302) | def load_normalization_data(name: str):
function get_data_mean_std (line 333) | def get_data_mean_std(predictor: str):
function load_ANN_variables (line 378) | def load_ANN_variables(predictor: str, suffix: str = 'vars') -> List[str]:
function load_training_data (line 388) | def load_training_data(predictor: str) -> List[List[str]]:
function load_latent_training_data (line 410) | def load_latent_training_data(predictor):
function load_test_data (line 433) | def load_test_data(predictor):
function load_training_labels (line 453) | def load_training_labels(predictor: str) -> List[List[str]]:
function load_test_labels (line 475) | def load_test_labels(predictor: str) -> List[List[str]]:
function load_train_info (line 497) | def load_train_info(predictor: str, suffix: str = 'info') -> dict:
function load_keras_ann (line 505) | def load_keras_ann(predictor: str, suffix: str = 'model', compile: bool ...
function _try_load_sklearn_classifier (line 558) | def _try_load_sklearn_classifier(predictor: str):
function _fix_shape_for_model (line 604) | def _fix_shape_for_model(model, X: np.ndarray) -> np.ndarray:
function load_keras_ann2 (line 632) | def load_keras_ann2(predictor: str, suffix: str = "model", compile: bool...
function tf_ANN_excitation_prepare (line 779) | def tf_ANN_excitation_prepare(predictor: str, descriptors: List[float], ...
function ANN_supervisor (line 802) | def ANN_supervisor(predictor: str,
function find_true_min_eu_dist (line 847) | def find_true_min_eu_dist(predictor: str,
function find_ANN_10_NN_normalized_latent_dist (line 895) | def find_ANN_10_NN_normalized_latent_dist(predictor, latent_space_vector...
function find_ANN_latent_dist (line 938) | def find_ANN_latent_dist(predictor, latent_space_vector, debug=False):
function find_clf_lse (line 997) | def find_clf_lse(predictor: str,
function save_model (line 1058) | def save_model(model: tf.keras.Model, predictor: str,
function initialize_model_weights (line 1078) | def initialize_model_weights(model: tf.keras.Model) -> tf.keras.Model:
FILE: molSimplify/utils/Graph_Hash.py
function get_hash (line 4) | def get_hash(mol):
FILE: molSimplify/utils/Importing_Functions.py
function readfrommol2 (line 7) | def readfrommol2(mol, filename, readstring=False, trunc_sym="X"):
FILE: molSimplify/utils/LigandBreakdown.py
function ligand_breakdown (line 6) | def ligand_breakdown(mol,dummy_bool=False):
function mol3D_to_networkx (line 36) | def mol3D_to_networkx(mol,get_symbols:bool=True,get_bond_order:bool=True...
function bridging_ligand_helper (line 60) | def bridging_ligand_helper(mol,set_of_nodes,metal_indices):
FILE: molSimplify/utils/decorators.py
function deprecated (line 5) | def deprecated(message):
FILE: molSimplify/utils/metaclasses.py
class Singleton (line 4) | class Singleton(type):
method __call__ (line 9) | def __call__(cls, *args, **kwargs):
FILE: molSimplify/utils/nx_helpers.py
function graph_from_mol2_string (line 3) | def graph_from_mol2_string(m2_string, positions=False):
FILE: molSimplify/utils/openbabel_helpers.py
function count_aromatic (line 5) | def count_aromatic(obmol):
function constrained_forcefield_optimization_bu (line 13) | def constrained_forcefield_optimization_bu(
function constrained_forcefield_optimization (line 179) | def constrained_forcefield_optimization(
function bond_order_from_str_bu (line 434) | def bond_order_from_str_bu(bo_str):
function bond_order_from_str (line 455) | def bond_order_from_str(bo):
function replace_bonds_bu (line 471) | def replace_bonds_bu(obmol, bo_dict):
function _is_aromatic_token (line 507) | def _is_aromatic_token(bo):
function _numeric_bond_order (line 517) | def _numeric_bond_order(bo):
function replace_bonds (line 533) | def replace_bonds(obmol, bo_dict):
function get_all_bonds (line 557) | def get_all_bonds(obmol):
function get_all_atoms (line 572) | def get_all_atoms(obmol):
function get_bond_dict (line 593) | def get_bond_dict(obmol):
FILE: molSimplify/utils/tensorflow.py
function tensorflow_silence (line 5) | def tensorflow_silence():
FILE: molSimplify/utils/timer.py
class DebugTimer (line 4) | class DebugTimer:
method __init__ (line 6) | def __init__(self, name: str, print: bool = True):
method __enter__ (line 10) | def __enter__(self):
method __exit__ (line 13) | def __exit__(self, exc_type, exc_value, exc_tb):
FILE: tests/examples/test_example_1.py
function test_example_1 (line 4) | def test_example_1(tmp_path, resource_path_root):
function test_example_1_No_FF (line 19) | def test_example_1_No_FF(tmp_path, resource_path_root):
FILE: tests/examples/test_example_3.py
function test_example_3_No_FF (line 4) | def test_example_3_No_FF(tmp_path, resource_path_root):
FILE: tests/examples/test_example_5.py
function test_example_5 (line 4) | def test_example_5(tmp_path, resource_path_root):
function test_example_5_No_FF (line 25) | def test_example_5_No_FF(tmp_path, resource_path_root):
FILE: tests/examples/test_example_7.py
function test_example_7 (line 4) | def test_example_7(tmp_path, resource_path_root):
FILE: tests/examples/test_example_8.py
function test_example_8 (line 4) | def test_example_8(tmp_path, resource_path_root):
FILE: tests/examples/test_example_tbp.py
function test_example_tbp (line 4) | def test_example_tbp(tmp_path, resource_path_root):
FILE: tests/helperFuncs.py
function is_number (line 19) | def is_number(s: str) -> bool:
function get_parent_folder (line 41) | def get_parent_folder(test_name):
function get_in_files_subfolder (line 79) | def get_in_files_subfolder(name: str) -> str:
function get_ref_subfolder (line 99) | def get_ref_subfolder(parent_folder: str, name: str) -> str:
function working_directory (line 113) | def working_directory(path: Path):
function fuzzy_equal (line 122) | def fuzzy_equal(x1, x2, thresh: float) -> bool:
function fuzzy_compare_xyz (line 126) | def fuzzy_compare_xyz(xyz1, xyz2, thresh: float) -> bool:
function getAllLigands (line 157) | def getAllLigands(xyz, transition_metals_only=True):
function getMetalLigBondLength (line 214) | def getMetalLigBondLength(mymol3d: mol3D, transition_metals_only=True) -...
function compareNumAtoms (line 242) | def compareNumAtoms(xyz1, xyz2) -> bool:
function compareMLBL (line 270) | def compareMLBL(xyz1, xyz2, thresh: float, transition_metals_only=True) ...
function compareLG (line 319) | def compareLG(xyz1, xyz2, thresh: float, transition_metals_only=True) ->...
function compareOG (line 361) | def compareOG(xyz1, xyz2, thresh: float) -> bool:
function compareGeo (line 386) | def compareGeo(xyz1, xyz2, threshMLBL, threshLG, threshOG, slab=False, t...
function comparedict (line 441) | def comparedict(ref, gen, thresh):
function jobname (line 477) | def jobname(infile: str) -> str:
function jobdir (line 483) | def jobdir(infile):
function parse4test (line 490) | def parse4test(infile, tmp_path: Path, extra_args: Dict[str, str] = {},
function parse4testNoFF (line 548) | def parse4testNoFF(infile, tmp_path: Path) -> str:
function report_to_dict (line 575) | def report_to_dict(lines):
function compare_report_new (line 602) | def compare_report_new(report1, report2):
function compare_qc_input (line 674) | def compare_qc_input(inp, inp_ref):
function runtest (line 713) | def runtest(tmp_path, resource_path_root, name, threshMLBL, threshLG, th...
function runtest_multispin (line 823) | def runtest_multispin(
function runtest_slab (line 925) | def runtest_slab(tmp_path, resource_path_root, name, threshOG, extra_fil...
function runtest_molecule_on_slab (line 976) | def runtest_molecule_on_slab(tmp_path, resource_path_root, name, threshO...
function runtestgeo (line 1040) | def runtestgeo(tmp_path, resource_path_root, name, thresh, deleteH=True,...
function runtestNoFF (line 1094) | def runtestNoFF(tmp_path, resource_path_root, name, threshMLBL, threshLG...
function runtest_reportonly (line 1181) | def runtest_reportonly(tmp_path, resource_path_root, name, seed=31415):
FILE: tests/informatics/test_MOF_descriptors.py
function ref_names (line 10) | def ref_names():
function helper_RAC_check (line 39) | def helper_RAC_check(resource_path_root, tmp_path, name, ref_names, Gval...
function test_get_MOF_descriptors_ODAC (line 79) | def test_get_MOF_descriptors_ODAC(resource_path_root, tmp_path, name, re...
function test_get_MOF_descriptors_JACS (line 98) | def test_get_MOF_descriptors_JACS(resource_path_root, tmp_path, name, re...
function test_get_MOF_descriptors_ligand_containing (line 116) | def test_get_MOF_descriptors_ligand_containing(resource_path_root, tmp_p...
function test_get_MOF_descriptors_non_trivial (line 133) | def test_get_MOF_descriptors_non_trivial(resource_path_root, tmp_path, n...
FILE: tests/informatics/test_MOF_functional_group_add.py
function test_fg_addition (line 23) | def test_fg_addition(resource_path_root, tmp_path, num_func, func_group):
FILE: tests/informatics/test_MOF_functional_group_add_v2.py
function test_fg_addition (line 35) | def test_fg_addition(resource_path_root, tmp_path, num_func, func_group):
FILE: tests/informatics/test_MOF_linker_rotation.py
function test_linker_rotation (line 17) | def test_linker_rotation(resource_path_root, tmp_path, cif_name, rotatio...
FILE: tests/informatics/test_PBC_functions.py
function test_mkcell (line 36) | def test_mkcell(cpar, reference_cell):
function test_cell_to_cellpar (line 50) | def test_cell_to_cellpar(cell, reference_cpar):
function test_fractional2cart (line 64) | def test_fractional2cart(fcoords, cell, reference_cart_coord):
function test_frac_coord (line 78) | def test_frac_coord(coord, cell, reference_fcoords):
function test_compute_image_flag (line 98) | def test_compute_image_flag(cell, fcoord1, fcoord2, reference_shift):
function test_writeXYZandGraph (line 102) | def test_writeXYZandGraph(resource_path_root, tmp_path):
function test_readcif (line 140) | def test_readcif(resource_path_root, name):
function test_compute_distance_matrix (line 164) | def test_compute_distance_matrix(resource_path_root, name):
function test_compute_adj_matrix (line 183) | def test_compute_adj_matrix(resource_path_root, name):
function test_solvent_removal (line 199) | def test_solvent_removal(resource_path_root, tmp_path, name):
function test_overlap_removal (line 221) | def test_overlap_removal(resource_path_root, tmp_path, name, case):
function test_findPaths (line 248) | def test_findPaths(resource_path_root, anchor_idx, path_bf, correct_answ...
function quick_load (line 262) | def quick_load(file_list):
function test_get_closed_subgraph (line 269) | def test_get_closed_subgraph(resource_path_root):
function test_XYZ_connected (line 291) | def test_XYZ_connected():
function test_write_cif (line 333) | def test_write_cif(resource_path_root, tmp_path):
FILE: tests/informatics/test_active_learning.py
function test_get_pareto_indices (line 11) | def test_get_pareto_indices():
function test_get_2D_PI_and_centroid (line 42) | def test_get_2D_PI_and_centroid(method, ref_PI, atol=1e-6):
function test_get_2D_EI (line 70) | def test_get_2D_EI(method, ref_EI, atol=1e-6):
function test_get_2D_EHVI (line 106) | def test_get_2D_EHVI(pred_mean, pred_std, pareto_points, r, ref_EHVI, at...
FILE: tests/informatics/test_coulomb_analyze.py
function test_create_coulomb_matrix (line 6) | def test_create_coulomb_matrix(resource_path_root):
FILE: tests/informatics/test_graph_racs.py
function furan (line 17) | def furan():
function test_atom_centered_AC (line 38) | def test_atom_centered_AC(furan):
function test_atom_centered_AC_diff (line 50) | def test_atom_centered_AC_diff(furan):
function test_multi_centered_AC (line 62) | def test_multi_centered_AC(furan):
function test_octahedral_racs (line 90) | def test_octahedral_racs(
function test_ligand_racs (line 136) | def test_ligand_racs(
FILE: tests/ml/test_kernels.py
function test_masking (line 6) | def test_masking():
function test_permutational_kernel (line 23) | def test_permutational_kernel():
function test_permutational_kernel_gradient (line 48) | def test_permutational_kernel_gradient():
FILE: tests/ml/test_layers.py
function test_permutation_layer (line 6) | def test_permutation_layer():
function test_permutational_nn (line 27) | def test_permutational_nn():
FILE: tests/test_atom3D.py
function test_repr (line 12) | def test_repr(sym, coords):
function test_symbol (line 28) | def test_symbol(sym):
function test_coords (line 40) | def test_coords(coords):
function test_defaults (line 45) | def test_defaults():
function test_distance (line 58) | def test_distance(coords1, coords2, correct_answer):
function test_distancev (line 71) | def test_distancev(coords1, coords2, correct_answer):
function test_setcoords (line 86) | def test_setcoords(coords):
function test_mutate (line 99) | def test_mutate(sym, mass, atno, rad):
function test_ismetal (line 134) | def test_ismetal(sym, transition_metals_only, correct_answer):
function test_translate (line 147) | def test_translate(xyz, dxyz, new_xyz):
FILE: tests/test_autocorrelation.py
function load_complex1 (line 27) | def load_complex1(resource_path_root):
function load_complex2 (line 36) | def load_complex2(resource_path_root):
function load_complex3 (line 45) | def load_complex3(resource_path_root):
function get_ref (line 53) | def get_ref(ref_path, np_array=True):
function get_atomIdx_str (line 70) | def get_atomIdx_str(atomIdx):
function test_construct_property_vector (line 93) | def test_construct_property_vector(resource_path_root, load_complex1, pr...
function test_autocorrelation (line 110) | def test_autocorrelation(resource_path_root, load_complex1, orig, d, oct...
function test_deltametric (line 131) | def test_deltametric(resource_path_root, load_complex1, orig, d, oct_fla...
function test_full_autocorrelation (line 152) | def test_full_autocorrelation(resource_path_root, load_complex1, prop, d...
function test_atom_only_autocorrelation (line 171) | def test_atom_only_autocorrelation(resource_path_root, load_complex1, at...
function test_atom_only_deltametric (line 195) | def test_atom_only_deltametric(resource_path_root, load_complex1, atomId...
function test_metal_only_autocorrelation_1 (line 217) | def test_metal_only_autocorrelation_1(resource_path_root, load_complex1,...
function test_metal_only_autocorrelation_2 (line 234) | def test_metal_only_autocorrelation_2(resource_path_root, load_complex2,...
function test_metal_only_autocorrelation_3 (line 251) | def test_metal_only_autocorrelation_3(resource_path_root, load_complex3,...
function test_metal_only_autocorrelation_4 (line 260) | def test_metal_only_autocorrelation_4(load_complex3):
function test_metal_only_deltametric_1 (line 277) | def test_metal_only_deltametric_1(resource_path_root, load_complex1, pro...
function test_metal_only_deltametric_2 (line 294) | def test_metal_only_deltametric_2(resource_path_root, load_complex2, pro...
function test_metal_only_deltametric_3 (line 311) | def test_metal_only_deltametric_3(resource_path_root, load_complex3, pro...
function test_metal_only_deltametric_4 (line 320) | def test_metal_only_deltametric_4(load_complex3):
function test_generate_atomonly_autocorrelations (line 339) | def test_generate_atomonly_autocorrelations(resource_path_root, load_com...
function test_generate_atomonly_deltametrics (line 363) | def test_generate_atomonly_deltametrics(resource_path_root, load_complex...
function test_generate_metal_autocorrelations_1 (line 387) | def test_generate_metal_autocorrelations_1(resource_path_root, load_comp...
function test_generate_metal_autocorrelations_2 (line 411) | def test_generate_metal_autocorrelations_2(resource_path_root, load_comp...
function test_generate_metal_autocorrelations_3 (line 435) | def test_generate_metal_autocorrelations_3(resource_path_root, load_comp...
function test_generate_metal_autocorrelations_4 (line 448) | def test_generate_metal_autocorrelations_4(load_complex3):
function test_generate_metal_deltametrics_1 (line 467) | def test_generate_metal_deltametrics_1(resource_path_root, load_complex1...
function test_generate_metal_deltametrics_2 (line 491) | def test_generate_metal_deltametrics_2(resource_path_root, load_complex2...
function test_generate_metal_deltametrics_3 (line 515) | def test_generate_metal_deltametrics_3(resource_path_root, load_complex3...
function test_generate_metal_deltametrics_4 (line 528) | def test_generate_metal_deltametrics_4(load_complex3):
function test_generate_full_complex_autocorrelations (line 547) | def test_generate_full_complex_autocorrelations(resource_path_root, load...
function test_get_descriptor_vector (line 571) | def test_get_descriptor_vector(resource_path_root, load_complex1, depth,...
FILE: tests/test_basic_imports.py
function test_molsimplify_imported (line 8) | def test_molsimplify_imported():
function test_tf_import (line 15) | def test_tf_import():
function test_openbabel_import (line 26) | def test_openbabel_import():
FILE: tests/test_cli.py
function test_help_no_error (line 9) | def test_help_no_error():
function test_main_does_not_import_pydentate_with_explicit_usercatoms (line 20) | def test_main_does_not_import_pydentate_with_explicit_usercatoms(monkeyp...
FILE: tests/test_decoration.py
function test_molecule_dec (line 7) | def test_molecule_dec(tmp_path, resource_path_root):
FILE: tests/test_distgeom.py
function test_CosRule (line 8) | def test_CosRule(atol=1e-6):
function test_GetCMDists (line 29) | def test_GetCMDists():
function test_Metrize (line 49) | def test_Metrize():
function test_findshape (line 83) | def test_findshape():
FILE: tests/test_ff_xtb.py
function test_xtb_before (line 12) | def test_xtb_before(tmp_path, resource_path_root):
function test_xtb_ANC_fail (line 29) | def test_xtb_ANC_fail(tmp_path, resource_path_root):
function test_xtb_high_spin (line 46) | def test_xtb_high_spin(tmp_path, resource_path_root):
function test_xtb_final_opt (line 63) | def test_xtb_final_opt(tmp_path, resource_path_root):
function test_gfnff (line 80) | def test_gfnff(tmp_path, resource_path_root):
FILE: tests/test_geocheck_oct.py
function test_geocheck_oct (line 22) | def test_geocheck_oct(tmp_path, resource_path_root, testName):
FILE: tests/test_geocheck_one_empty.py
function test_example_1 (line 4) | def test_example_1(tmp_path, resource_path_root):
function test_example_2 (line 11) | def test_example_2(tmp_path, resource_path_root):
FILE: tests/test_geometry.py
function test_norm (line 12) | def test_norm():
function test_normalize (line 18) | def test_normalize():
function test_checkplanar (line 25) | def test_checkplanar():
function test_dihedral (line 37) | def test_dihedral():
function test_reflect_through_plane (line 48) | def test_reflect_through_plane():
FILE: tests/test_inparse.py
function test_parseinputfile_empty (line 9) | def test_parseinputfile_empty():
function test_parseinputs_basic (line 23) | def test_parseinputs_basic(monkeypatch):
function test_parseinputs_advanced (line 36) | def test_parseinputs_advanced(monkeypatch):
function test_checkinput (line 50) | def test_checkinput(monkeypatch):
function test_parseinputfile_inputfile_kwarg (line 63) | def test_parseinputfile_inputfile_kwarg(resource_path_root):
FILE: tests/test_io.py
function test_lig_load (line 11) | def test_lig_load(resource_path_root):
function test_core_load (line 29) | def test_core_load():
function test_printgeoms (line 45) | def test_printgeoms(capsys):
function test_readdict_sub (line 66) | def test_readdict_sub():
function test_getsubstrates (line 75) | def test_getsubstrates():
FILE: tests/test_jobgen.py
function test_sgejobgen_default (line 5) | def test_sgejobgen_default(tmp_path):
function test_sgejobgen (line 27) | def test_sgejobgen(tmp_path):
function test_sgejobgen_jobmanager (line 52) | def test_sgejobgen_jobmanager(tmp_path):
function test_slurmjobgen_default (line 83) | def test_slurmjobgen_default(tmp_path):
function test_slurmjobgen (line 103) | def test_slurmjobgen(tmp_path):
function test_slurmjobgen_jobmanager (line 125) | def test_slurmjobgen_jobmanager(tmp_path):
FILE: tests/test_joption_pythonic.py
function test_joption_pythonic (line 4) | def test_joption_pythonic(tmp_path, resource_path_root):
function test_pythonic_metalloid_structure (line 29) | def test_pythonic_metalloid_structure(tmp_path, resource_path_root):
FILE: tests/test_lig_load.py
function test_ligand_loading (line 12) | def test_ligand_loading(tmp_path, resource_path_root, lig_name):
FILE: tests/test_ligand_assign.py
function test_six_monodentate (line 5) | def test_six_monodentate(resource_path_root):
function test_triple_bidentate (line 34) | def test_triple_bidentate(resource_path_root):
FILE: tests/test_ligand_assign_consistent.py
function test_six_monodentate (line 5) | def test_six_monodentate(resource_path_root):
function test_triple_bidentate (line 35) | def test_triple_bidentate(resource_path_root):
FILE: tests/test_ligand_class.py
function test_ligand_class (line 4) | def test_ligand_class(resource_path_root):
FILE: tests/test_ligands.py
function test_ligands_dict (line 15) | def test_ligands_dict(lig_name):
function test_no_repeats (line 55) | def test_no_repeats():
function test_unused_geometries (line 83) | def test_unused_geometries(file_name):
FILE: tests/test_mol2D.py
function water_Mol2D (line 6) | def water_Mol2D():
function furan_Mol2D (line 15) | def furan_Mol2D():
function acac_Mol2D (line 36) | def acac_Mol2D():
function test_Mol2D_repr (line 70) | def test_Mol2D_repr(mol, ref):
function test_Mol2D_constructors (line 82) | def test_Mol2D_constructors(resource_path_root, name, smiles, mol_ref):
function test_Mol2D_graph_hash (line 120) | def test_Mol2D_graph_hash(resource_path_root, filename, node_hash_ref, e...
function test_find_metal (line 133) | def test_find_metal(resource_path_root):
FILE: tests/test_mol3D.py
function quick_load (line 9) | def quick_load(file_list):
function test_addAtom (line 17) | def test_addAtom():
function test_getAtoms (line 29) | def test_getAtoms():
function test_get_pair_distance (line 47) | def test_get_pair_distance():
function test_getAtomwithinds (line 71) | def test_getAtomwithinds(idxs):
function test_copymol3D (line 99) | def test_copymol3D(make_graph, make_obmol):
function test_initialize (line 129) | def test_initialize():
function test_adding_and_deleting_atoms (line 148) | def test_adding_and_deleting_atoms():
function test_finding_and_counting_methods (line 171) | def test_finding_and_counting_methods():
function test_make_formula (line 207) | def test_make_formula():
function test_add_bond (line 236) | def test_add_bond():
function test_readfromxyz (line 273) | def test_readfromxyz(resource_path_root):
function test_centersym (line 332) | def test_centersym(resource_path_root, name, correct_answer):
function test_centermass (line 347) | def test_centermass(resource_path_root, name, correct_answer):
function test_distance (line 362) | def test_distance(resource_path_root, name1, name2, correct_answer):
function test_mindist (line 379) | def test_mindist(resource_path_root, name1, name2, correct_answer):
function test_alignmol (line 409) | def test_alignmol(resource_path_root, name1, name2, idx1, idx2, correct_...
function test_get_geometry_type (line 442) | def test_get_geometry_type(resource_path_root, name, geometry_str):
function test_get_geometry_type_catoms_arr (line 452) | def test_get_geometry_type_catoms_arr(resource_path_root):
function test_get_geometry_type_hapticity (line 480) | def test_get_geometry_type_hapticity(resource_path_root, name, geometry_...
function test_is_sandwich_compound (line 502) | def test_is_sandwich_compound(resource_path_root, name, con_atoms):
function test_is_edge_compound (line 526) | def test_is_edge_compound(resource_path_root, name, con_atoms):
function test_mol3D_from_smiles_macrocycles (line 539) | def test_mol3D_from_smiles_macrocycles():
function test_mol3D_from_smiles_benzene (line 589) | def test_mol3D_from_smiles_benzene():
function test_dev_from_ideal_geometry (line 640) | def test_dev_from_ideal_geometry(resource_path_root, geo_type, key):
function test_geo_geometry_type_distance (line 675) | def test_geo_geometry_type_distance(resource_path_root, geo_type, ref):
function test_get_graph_hash (line 691) | def test_get_graph_hash(resource_path_root, geo):
function test_getAtom (line 716) | def test_getAtom(resource_path_root, name, idx, sym, coords):
function test_findMetal (line 740) | def test_findMetal(resource_path_root, name, transition_metals_only, cor...
function test_createMolecularGraph (line 758) | def test_createMolecularGraph(resource_path_root, name, oct_flag):
function test_getBondedAtoms (line 787) | def test_getBondedAtoms(resource_path_root, name, idx, get_graph, correc...
function test_getBondedAtomsSmart (line 810) | def test_getBondedAtomsSmart(resource_path_root, name, idx, oct_flag, co...
function test_getBondedAtomsH (line 827) | def test_getBondedAtomsH(resource_path_root, name, idx, correct_answer):
function test_getBondedAtomsnotH (line 843) | def test_getBondedAtomsnotH(resource_path_root, name, idx, correct_answer):
function test_getBondedAtomsOct (line 859) | def test_getBondedAtomsOct(resource_path_root, name, idx, correct_answer):
function test_assign_graph_from_net (line 876) | def test_assign_graph_from_net(resource_path_root, name, return_graph):
function test_convert2OBMol (line 909) | def test_convert2OBMol(resource_path_root, name, force_clean_flag):
function test_convert2OBMol2 (line 940) | def test_convert2OBMol2(resource_path_root, name):
function test_get_smiles (line 982) | def test_get_smiles(resource_path_root, name, canonicalize, use_mol2, co...
function test_populateBOMatrix (line 998) | def test_populateBOMatrix(resource_path_root, name, bonddict):
function test_deleteatom (line 1037) | def test_deleteatom(resource_path_root, name, idx, bo_dict_flag, graph_f...
function test_deleteatoms (line 1087) | def test_deleteatoms(resource_path_root, name, idxs, bo_dict_flag, graph...
function test_readfrommol2 (line 1132) | def test_readfrommol2(resource_path_root, name, readstring):
function test_readfrommol (line 1187) | def test_readfrommol(resource_path_root, name):
function test_getAtomCoords (line 1227) | def test_getAtomCoords(resource_path_root, name, idx, correct_answer):
function test_writemol2 (line 1244) | def test_writemol2(resource_path_root, tmp_path, writestring, ignoreX):
function test_writexyz (line 1292) | def test_writexyz(resource_path_root, tmp_path, writestring, withgraph, ...
function test_writemol (line 1331) | def test_writemol(resource_path_root, tmp_path):
function test_translate (line 1350) | def test_translate(resource_path_root):
function test_num_rings (line 1366) | def test_num_rings(resource_path_root):
function test_findsubMol (line 1376) | def test_findsubMol(resource_path_root):
function test_BCM (line 1394) | def test_BCM():
function test_get_mol_graph_det (line 1422) | def test_get_mol_graph_det(resource_path_root, name, ref_det):
function test_get_octetrule_charge (line 1440) | def test_get_octetrule_charge(resource_path_root, name, ref_charge):
FILE: tests/test_molcas_caspt2.py
function test_molcas_caspt2 (line 4) | def test_molcas_caspt2(tmp_path, resource_path_root):
FILE: tests/test_molcas_casscf.py
function test_molcas_casscf (line 4) | def test_molcas_casscf(tmp_path, resource_path_root):
FILE: tests/test_old_ANNs.py
function test_old_ANN (line 6) | def test_old_ANN(tmp_path, resource_path_root):
function test_simple_network_builder (line 20) | def test_simple_network_builder():
FILE: tests/test_orca_ccsdt.py
function test_orca_ccsdt (line 4) | def test_orca_ccsdt(tmp_path, resource_path_root):
FILE: tests/test_orca_dft.py
function test_orca_dft (line 4) | def test_orca_dft(tmp_path, resource_path_root):
FILE: tests/test_qcgen.py
function test_qcgen_defaults (line 12) | def test_qcgen_defaults(resource_path_root, gen_function, default_name, ...
FILE: tests/test_racs.py
function test_Mn_water2_ammonia_furan2_ammonia (line 15) | def test_Mn_water2_ammonia_furan2_ammonia(resource_path_root, xyz_path, ...
function test_six_pyridine_vs_three_bipy (line 30) | def test_six_pyridine_vs_three_bipy(resource_path_root):
function test_create_OHE (line 54) | def test_create_OHE():
FILE: tests/test_rmsd.py
function test_rigorous_rmsd (line 16) | def test_rigorous_rmsd(resource_path_root, path1, path2, ref_hungarian, ...
function test_methane_rotation (line 34) | def test_methane_rotation(atol=1e-3):
function test_tbpd_rotation (line 60) | def test_tbpd_rotation(atol=1e-3):
function test_quaternion_rotate (line 95) | def test_quaternion_rotate(atol=1e-3):
FILE: tests/test_structgen_functions.py
function test_smartreorderligs (line 16) | def test_smartreorderligs():
function test_get_MLdist_database (line 48) | def test_get_MLdist_database():
function test_get_MLdist (line 79) | def test_get_MLdist():
function test_init_template (line 128) | def test_init_template(geometry, coordination):
function test_init_ANN (line 145) | def test_init_ANN():
function test_getnupdateb (line 189) | def test_getnupdateb():
FILE: tests/test_tetrahedral.py
function test_example_1 (line 4) | def test_example_1(tmp_path, resource_path_root):
function test_example_2 (line 18) | def test_example_2(tmp_path, resource_path_root):
FILE: tests/testresources/refs/racs/generate_references.py
function get_ligand (line 10) | def get_ligand(lig_str):
function generate_ligand_dict (line 17) | def generate_ligand_dict(eq_ligands, ax_ligands):
function assemble_mol (line 34) | def assemble_mol(metal_str, eq_ligands, ax_ligands):
function features_from_mol (line 45) | def features_from_mol(mol, ligand_dict):
function generate_features (line 51) | def generate_features(metal_str, eq_ligands, ax_ligands):
function main (line 57) | def main():
FILE: tests/tutorials/test_tutorial_10.py
function test_tutorial_10_acetate_homoleptic (line 9) | def test_tutorial_10_acetate_homoleptic(tmp_path, resource_path_root):
function test_tutorial_10_ligadd_smiles (line 25) | def test_tutorial_10_ligadd_smiles(tmp_path, resource_path_root):
function test_tutorial_10_ligadd_mol (line 73) | def test_tutorial_10_ligadd_mol(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_11.py
function test_tutorial_11_isoct (line 9) | def test_tutorial_11_isoct(resource_path_root):
FILE: tests/tutorials/test_tutorial_2.py
function test_tutorial_2 (line 4) | def test_tutorial_2(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_3.py
function test_tutorial_3 (line 4) | def test_tutorial_3(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_4.py
function run_db_search (line 7) | def run_db_search(tmp_path, resource_path_root, name):
function test_tutorial_4_query (line 20) | def test_tutorial_4_query(tmp_path, resource_path_root):
function test_tutorial_4_dissim (line 32) | def test_tutorial_4_dissim(tmp_path, resource_path_root):
function test_tutorial_4_human (line 48) | def test_tutorial_4_human(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_5.py
function test_tutorial_5 (line 4) | def test_tutorial_5(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_6.py
function test_tutorial_6_1co (line 12) | def test_tutorial_6_1co(tmp_path, resource_path_root):
function test_tutorial_6_stag_3co (line 21) | def test_tutorial_6_stag_3co(tmp_path, resource_path_root):
function test_tutorial_6_mno4 (line 31) | def test_tutorial_6_mno4(tmp_path, resource_path_root):
function test_tutorial_6_fepo (line 43) | def test_tutorial_6_fepo(tmp_path, resource_path_root):
function test_tutorial_6_loaded_fepo (line 54) | def test_tutorial_6_loaded_fepo(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_7.py
function test_tutorial_7 (line 4) | def test_tutorial_7(tmp_path, resource_path_root):
function test_tutorial_7_decoration (line 23) | def test_tutorial_7_decoration(tmp_path, resource_path_root):
function test_tutorial_7_decoration_multi (line 40) | def test_tutorial_7_decoration_multi(tmp_path, resource_path_root):
function test_tutorial_7_decoration_4lig (line 59) | def test_tutorial_7_decoration_4lig(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_8.py
function test_tutorial_8_part_one (line 4) | def test_tutorial_8_part_one(tmp_path, resource_path_root):
function test_tutorial_8_part_two (line 18) | def test_tutorial_8_part_two(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_9_part_one.py
function _normalize_svg_for_compare (line 7) | def _normalize_svg_for_compare(svg_str: str) -> str:
function test_tutorial_9_drawmode (line 25) | def test_tutorial_9_drawmode(tmp_path, resource_path_root):
function test_tutorial_9_part_one (line 44) | def test_tutorial_9_part_one(tmp_path, resource_path_root):
FILE: tests/tutorials/test_tutorial_9_part_two.py
function test_tutorial_9_part_two (line 4) | def test_tutorial_9_part_two(tmp_path, resource_path_root):
FILE: workflows/NandyJACSAu2022/bridge_functionalizer.py
function read_synthesized_macrocycles (line 30) | def read_synthesized_macrocycles(input_file):
function split_at_idx (line 49) | def split_at_idx(smiles, idx):
function compatibility (line 64) | def compatibility(func, bridge):
function count_atoms (line 77) | def count_atoms(smiles):
function main (line 81) | def main(temp_list):
FILE: workflows/NandyJACSAu2022/frag_functionalizer.py
function read_synthesized_macrocycles (line 30) | def read_synthesized_macrocycles(input_file):
function count_atoms (line 48) | def count_atoms(smiles):
function split_at_idx (line 52) | def split_at_idx(smiles, idx):
function main (line 67) | def main(temp_list):
FILE: workflows/NandyJACSAu2022/fragment_classes.py
class fragment (line 7) | class fragment:
method __init__ (line 13) | def __init__(self, name, options, start_macrocycle=False, ring_closure...
method give_compatible_fragments (line 40) | def give_compatible_fragments(self, bridge, next_fragment):
method adjust_ring_closure_index (line 78) | def adjust_ring_closure_index(self, new_index, smiles_tuple=False):
method start_macrocycle_ring (line 110) | def start_macrocycle_ring(self, smiles, start_position=0, macro_ind=9):
method check_allowed (line 147) | def check_allowed(self, left, center, right):
method split_smiles_at_lc_adjacent (line 157) | def split_smiles_at_lc_adjacent(self, smiles_tuple):
class bridge (line 215) | class bridge:
method __init__ (line 220) | def __init__(self, name, bonding, func=()):
method get_possible_motifs (line 235) | def get_possible_motifs(self):
method return_name (line 241) | def return_name(self):
class tetradentate (line 251) | class tetradentate:
method __init__ (line 252) | def __init__(self, fragment1, fragment2, fragment3, fragment4, bridge1...
method cyclic_equiv (line 272) | def cyclic_equiv(self, u, v):
method check_allowed (line 288) | def check_allowed(self, left, center, right):
method split_smiles_at_lc_adjacent (line 298) | def split_smiles_at_lc_adjacent(self, smiles_tuple):
method sp3_hybridization_checker (line 355) | def sp3_hybridization_checker(self, left, prev_center, right, bridge):
method non_planar (line 386) | def non_planar(self, left, center, right, frag):
method get_charge (line 406) | def get_charge(self, smiles):
method get_atoms (line 411) | def get_atoms(self, smiles):
method get_formula (line 414) | def get_formula(self, smiles):
method count_atoms (line 423) | def count_atoms(self, smiles):
method stitch (line 426) | def stitch(self):
FILE: workflows/NandyJACSAu2022/macrocycle_synthesis.py
function cyclic_equiv (line 8) | def cyclic_equiv(u, v):
function main (line 62) | def main():
Copy disabled (too large)
Download .json
Condensed preview — 1482 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (56,502K chars).
[
{
"path": ".flake8",
"chars": 51,
"preview": "[flake8]\nmax-complexity = 15\nmax-line-length = 127\n"
},
{
"path": ".github/codecov.yml",
"chars": 130,
"preview": "coverage:\n status:\n patch:\n default:\n informational: true\n project:\n default:\n informatio"
},
{
"path": ".github/codeql-config.yml",
"chars": 66,
"preview": "name: \"My CodeQL config\"\n\nqueries:\n - uses: security-and-quality\n"
},
{
"path": ".github/workflows/build.yaml",
"chars": 2054,
"preview": "name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI\n# This follows https://packaging.python.org/en/latest/guides/"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 864,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ \"master\", \"main\" ]\n pull_request:\n branches: [ \"master\", \"main\" ]\n sche"
},
{
"path": ".github/workflows/pytest.yaml",
"chars": 3902,
"preview": "name: Pytest\n\non:\n push:\n branches:\n - \"main\"\n pull_request:\n branches:\n - \"main\"\n\njobs:\n pytest_cond"
},
{
"path": ".github/workflows/python-linter.yaml",
"chars": 2722,
"preview": "name: Linter\n\non:\n pull_request:\n push:\n branches: [\"master\", \"main\"]\n\njobs:\n flake8:\n\n runs-on: ubuntu-latest\n"
},
{
"path": ".gitignore",
"chars": 402,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n\nbuild/\ndist/\n.eggs\n\n# Unit test / coverage reports\n.tox/"
},
{
"path": ".pre-commit-config.yaml",
"chars": 589,
"preview": "ci:\n autofix_commit_msg: '[pre-commit.ci] auto fixes from pre-commit hooks'\n autofix_prs: true\n autoupdate_comm"
},
{
"path": ".readthedocs.yml",
"chars": 289,
"preview": "version: 2\n\nbuild:\n os: ubuntu-22.04\n tools:\n python: \"3.8\"\n\npython:\n install:\n - method: pip\n path: .\n "
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "MLmodel-reference.md",
"chars": 2223,
"preview": "If you use the machine learning (ML) models in molSimplify to predict metal-ligand bond lengths, please cite:\n\n```\n@Arti"
},
{
"path": "README.md",
"chars": 8559,
"preview": "\n[:\n "
},
{
"path": "devtools/conda-envs/mols.yml",
"chars": 440,
"preview": "channels:\n - conda-forge\ndependencies:\n - openbabel\n - tensorflow-base >2.0, <2.14\n - scikit-learn\n - pyyaml\n - pa"
},
{
"path": "devtools/conda-envs/mols_minimal.yml",
"chars": 246,
"preview": "channels:\n - conda-forge\ndependencies:\n - openbabel\n - tensorflow-base >2.0, <2.14\n - scikit-learn\n - pyyaml\n - pa"
},
{
"path": "docs/Makefile",
"chars": 585,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS =\nSPHI"
},
{
"path": "docs/make.bat",
"chars": 791,
"preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
},
{
"path": "docs/scaling.csv",
"chars": 304,
"preview": "split_energy,[-54.19, 142.71]\nslope,[-174.2, 161.58]\nls_min,[1.8146, 0.691]\nhs_min,[1.8882, 0.6956]\nox,[2, 1]\nalpha,[0, "
},
{
"path": "docs/source/Citation.rst",
"chars": 4711,
"preview": "Citation\n========\n\nmolSimplify is research software. If you use it for work that results in a publication, please cite t"
},
{
"path": "docs/source/Classes.rst",
"chars": 1041,
"preview": "Classes\n=======\n\natom3D Class\n--------------------------------\n\n.. automodule:: molSimplify.Classes.atom3D\n :members:\n"
},
{
"path": "docs/source/Informatics.rst",
"chars": 422,
"preview": "Informatics\n===========\n\nMolecular Revised Autocorrelations\n----------------------------------\n\n.. automodule:: molSimpl"
},
{
"path": "docs/source/Installation.rst",
"chars": 918,
"preview": "Installation\n============\n\nRegardless of install method, we recommend using anaconda to manage virtual environments. If "
},
{
"path": "docs/source/Scripts.rst",
"chars": 1273,
"preview": "Tools\n=====\n\nStructure Generation Tools\n--------------------------\n\n.. automodule:: molSimplify.Scripts.structgen\n :me"
},
{
"path": "docs/source/conf.py",
"chars": 6899,
"preview": "# -*- coding: utf-8 -*-\n#\n# Configuration file for the Sphinx documentation builder.\n#\n# This file does only contain a s"
},
{
"path": "docs/source/index.rst",
"chars": 2098,
"preview": ".. image:: logo_enhanced.png\n :width: 600\n\nWelcome to molSimplify's documentation!\n===================================="
},
{
"path": "docs/source/tutorials/development.rst",
"chars": 2456,
"preview": "===========\nDevelopment\n===========\n\nHow to contribute\n=================\n\nDevelopment of new features should be performe"
},
{
"path": "examples/example-1.in",
"chars": 132,
"preview": "-core cobalt\n-geometry oct\n-coord 6\n-lig tpp,imidazole,x\n-ligocc 1,1,1\n-keepHs no no no\n-ff MMFF94\n-ffoption BA\n-spin 1\n"
},
{
"path": "molSimplify/.gitignore",
"chars": 114,
"preview": "build/\nmolSimplify.egg-info/\ndb1.xyz\ndb2.xyz\ndb3.xyz\nbefore_rot.xyz\nmodi.xyz\nmain.BKP\n*.pyc\n*.swp\ndistgeomtest.py\n"
},
{
"path": "molSimplify/Bind/bicarbonate.mol",
"chars": 528,
"preview": "\n OpenBabel04291516553D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 0.9890 -0.1130 0.0000 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/bind.dict",
"chars": 320,
"preview": "dihydrogenphosphite:dihydrogenphosphite.mol\nbicarbonate:bicarbonate.mol\nbisulfate:bisulfate.mol\nbisulfite:bisulfite.mol\n"
},
{
"path": "molSimplify/Bind/bisulfate.mol",
"chars": 620,
"preview": "\n OpenBabel04291516553D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 1.2220 0.1580 -0.0180 O 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/bisulfite.mol",
"chars": 528,
"preview": "\n OpenBabel04291516553D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 1.2150 0.1820 0.1180 O 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/carbonmonoxide.mol",
"chars": 234,
"preview": "\n OpenBabel10091511523D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -3.4936 0.2081 0.0000 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/dihydrogenphosphate.mol",
"chars": 712,
"preview": "\n OpenBabel04291516543D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 1.0950 -0.1720 -0.1370 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/dihydrogenphosphite.mol",
"chars": 620,
"preview": "\n OpenBabel04291516553D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 1.4520 -0.0710 0.0790 O 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/formate.mol",
"chars": 418,
"preview": "\n OpenBabel04291516553D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n 0.9990 0.0100 -0.0070 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/nitrate.mol",
"chars": 344,
"preview": "\n OpenBabel04291516553D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 0.9920 -0.0990 0.0000 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/oxalate.mol",
"chars": 712,
"preview": "\n OpenBabel04291516543D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n 0.9550 -0.2100 0.1290 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/oxygen.mol",
"chars": 234,
"preview": "\n OpenBabel05141513343D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n -2.8026 0.1992 -0.6896 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/perchlorate.mol",
"chars": 528,
"preview": "\n OpenBabel04291516543D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n 1.1960 -0.0030 -0.0050 O 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Bind/test.smi.smi",
"chars": 4,
"preview": "C=O\n"
},
{
"path": "molSimplify/Bind/water.mol",
"chars": 326,
"preview": "\n OpenBabel05081517533D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n -0.6304 3.4532 1.1538 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Classes/.gitignore",
"chars": 12,
"preview": "*.pyc\n*.swp\n"
},
{
"path": "molSimplify/Classes/README.md",
"chars": 528,
"preview": "To members of the Kulik group: If you have custom data that you want to use for yourself but do not want to push to the "
},
{
"path": "molSimplify/Classes/__init__.py",
"chars": 174,
"preview": "from .atom3D import atom3D\nfrom .globalvars import globalvars\nfrom .mol3D import mol3D\nfrom .rundiag import run_diag\n\n__"
},
{
"path": "molSimplify/Classes/atom3D.py",
"chars": 7680,
"preview": "# @file atom3D.py\n# Defines atom3D class and contains useful manipulation/retrieval routines.\n#\n# Written by Kulik Gro"
},
{
"path": "molSimplify/Classes/dft_obs.py",
"chars": 5502,
"preview": "# @file dft_obs.py\n# Contains dft_observation class.\n#\n# Written by JP Janet for HJK Group\n#\n# Dpt of Chemical Engine"
},
{
"path": "molSimplify/Classes/globalvars.py",
"chars": 47702,
"preview": "# @file globalvars.py\n# @file globalvars.py\n# Contains useful constants used throughout the code.\n#\n# Written by Kulik"
},
{
"path": "molSimplify/Classes/helpers.py",
"chars": 5882,
"preview": "# @file helpers.py\n# Contains some useful helper functions for classes.\n#\n# Written by HJK Group\n#\n# Dpt of Chemical"
},
{
"path": "molSimplify/Classes/ligand.py",
"chars": 122286,
"preview": "# @file ligand.py\n# Defines ligand class for postprocessing DFT results by measuring ligand properties\n#\n# Written by "
},
{
"path": "molSimplify/Classes/mol2D.py",
"chars": 15815,
"preview": "from __future__ import annotations\nimport networkx as nx\nimport numpy as np\nfrom typing import Dict, Iterable, List, Opt"
},
{
"path": "molSimplify/Classes/mol3D.py",
"chars": 328855,
"preview": "# @file mol3D.py\n# Defines mol3D class and contains useful manipulation/retrieval routines.\n#\n# Written by HJK Group\n#"
},
{
"path": "molSimplify/Classes/monomer3D.py",
"chars": 8772,
"preview": "# @file monomer3D.py\n# Defines monomer3D class and contains useful manipulation/retrieval routines.\n#\n# Written by HJK"
},
{
"path": "molSimplify/Classes/partialcharges.py",
"chars": 6648,
"preview": "import numpy as np\n\nfrom molSimplify.Classes.mol3D import mol3D\nfrom molSimplify.Scripts.geometry import distance\n\n# xyz"
},
{
"path": "molSimplify/Classes/protein3D.py",
"chars": 39584,
"preview": "# @file protein3D.py\n# Defines protein3D class and contains useful manipulation/retrieval routines.\n#\n# Written by HJ"
},
{
"path": "molSimplify/Classes/rundiag.py",
"chars": 5350,
"preview": "# @file rundiag.py\n# Contains run_diag class for ANN\n#\n# Written by Kulik group\n#\n# Department of Chemical Engineerin"
},
{
"path": "molSimplify/Classes/voxelgrid.py",
"chars": 13223,
"preview": "import numpy as np\r\nfrom molSimplify.Classes.globalvars import vdwrad\r\nimport matplotlib.pyplot as plt\r\nfrom mpl_toolkit"
},
{
"path": "molSimplify/Cores/Coporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1049 0.1413 0.0011 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Crporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1212 0.1432 0.0031 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Cuporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1388 0.1456 0.0211 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Fe2O2.xyz",
"chars": 1523,
"preview": "36\n\nFe\t-1.3698173415\t0.0786518025\t0.0366232225\nFe\t1.3702558646\t-0.0862633329\t0.008196891\nO\t-0.0146364667\t-0.117279243\t-1"
},
{
"path": "molSimplify/Cores/Feporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510553D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.0946 0.1443 -0.0558 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Mnporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1113 0.1420 0.0007 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/N2OTS.xyz",
"chars": 1005,
"preview": "24\n### Optimized structure\nFe\t3.9877736969\t3.8454141114\t4.1495180055\nN\t6.1681932702\t4.231542098\t4.4188511756\nN\t1.7948605"
},
{
"path": "molSimplify/Cores/Niporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1030 0.1411 0.0014 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Scporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.0774 0.1394 0.1096 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Tiporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1412 0.1456 0.0095 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Vporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1348 0.1451 0.0192 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/Znporphyrin.mol",
"chars": 3174,
"preview": "\n OpenBabel11181510563D\n\n 33 36 0 0 0 0 0 0 0 0999 V2000\n -2.1055 0.1428 0.0863 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Cores/cores.dict",
"chars": 1863,
"preview": "# name:molfile,connection atom index,maximum denticity\nau:Au.mol,0,8\nchromium:Cr.mol,0,8\nchromiumporphyrin:Crporphyrin.m"
},
{
"path": "molSimplify/Cores/cr4nh3o.xyz",
"chars": 1516,
"preview": "22\nCoordinates from ORCA-job orca\n Cr 0.28682102942544 -0.14445403703376 -0.00889960448210\n N 0.60635221301"
},
{
"path": "molSimplify/Cores/fen4py.xyz",
"chars": 2869,
"preview": "50\n-1.3612201599880632e+03 frame 22 xyz file generated by TeraChem\n Fe 6.3103983951 4.5638550401 4.644731"
},
{
"path": "molSimplify/Cores/fen4pyO.xyz",
"chars": 2925,
"preview": "51\n-1.3612201599880632e+03 frame 22 xyz file generated by TeraChem\n Fe 6.3103983951 4.5638550401 4.644731"
},
{
"path": "molSimplify/Cores/fenh3O.xyz",
"chars": 756,
"preview": "22\n11/29/2017 15:24, XYZ structure generated by mol3D Class, molSimplify\nFe \t0.000000\t0.000000\t0.000000\nN \t0.000000\t2.29"
},
{
"path": "molSimplify/Cores/ferrcore.xyz",
"chars": 735,
"preview": "21\n03/19/2016 19:11, XYZ structure generated by mol3D Class, molSimplify\nFe \t0.164876\t-0.191727\t0.002225\nC \t-1.021696\t-0"
},
{
"path": "molSimplify/Cores/ferrocene.mol",
"chars": 1982,
"preview": "\n OpenBabel04301513503D\n\n 21 20 0 0 0 0 0 0 0 0999 V2000\n -0.0010 -0.0230 -0.0040 Fe 0 0 0 0 0 15 0 "
},
{
"path": "molSimplify/Cores/mn3nh3o.xyz",
"chars": 1518,
"preview": "22\nCoordinates from ORCA-job orca\n Mn 0.23079423418041 -0.11064402655549 0.19457683219969\n N 0.63784003676"
},
{
"path": "molSimplify/Cores/mn5nh3o.xyz",
"chars": 1518,
"preview": "22\nCoordinates from ORCA-job orca\n Mn 0.32509336750007 -0.16412681829021 -0.12038043684137\n N 0.57044729854"
},
{
"path": "molSimplify/Cores/zncat.xyz",
"chars": 1327,
"preview": "30\n816 C(CN)N\nZn -0.195652676 0.009149444 0.718394729\nC -2.753830843 -0.789157229 -0.722200267\nC -2.890139"
},
{
"path": "molSimplify/Data/.tcdefinput.inp",
"chars": 123,
"preview": "# Input file generated from GUI options\n-dispersion no\n-runtyp minimize\n-charge 0\n-spin 1\n-method ub3lyp\n-basis lacvps_e"
},
{
"path": "molSimplify/Data/coordinations.dict",
"chars": 352,
"preview": "# coordinations defined as: Coordination number: full_name short_name/file_name\n1: none no\n2: linear li\n3: trigonal_plan"
},
{
"path": "molSimplify/Informatics/FeatureSetVisualization.ipynb",
"chars": 86971,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 4,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "molSimplify/Informatics/HFXsensitivity/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py",
"chars": 26759,
"preview": "import os\nimport numpy as np\nimport pandas as pd\nimport argparse\nfrom sklearn.linear_model import LinearRegression\nfrom "
},
{
"path": "molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py",
"chars": 20331,
"preview": "import os\nimport numpy as np\nimport pandas as pd\nimport argparse\nfrom sklearn.linear_model import LinearRegression\nfrom "
},
{
"path": "molSimplify/Informatics/MOF/MOF_RAC_example.ipynb",
"chars": 16549,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "molSimplify/Informatics/MOF/MOF_descriptors.py",
"chars": 67948,
"preview": "import os\nimport re\nimport copy\nimport itertools\nfrom scipy import sparse\nimport numpy as np\nimport pandas as pd\nfrom ty"
},
{
"path": "molSimplify/Informatics/MOF/MOF_fragment_example.ipynb",
"chars": 5684,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"This notebook shows how we can turn"
},
{
"path": "molSimplify/Informatics/MOF/MOF_functionalizer.py",
"chars": 85767,
"preview": "from molSimplify.Classes.mol3D import mol3D\nfrom molSimplify.Classes.atom3D import atom3D\nfrom molSimplify.Scripts.cellb"
},
{
"path": "molSimplify/Informatics/MOF/MOF_functionalizer_v2.py",
"chars": 97485,
"preview": "from __future__ import annotations\n\nfrom molSimplify.Classes.mol3D import mol3D\nfrom molSimplify.Classes.atom3D import a"
},
{
"path": "molSimplify/Informatics/MOF/PBC_functions.py",
"chars": 52629,
"preview": "import numpy as np\nimport itertools\nimport networkx as nx\nfrom scipy.spatial import distance\nfrom scipy import sparse\nim"
},
{
"path": "molSimplify/Informatics/MOF/README.md",
"chars": 2065,
"preview": "A user can generate RAC features for a MOF using [`MOF_descriptors.py`](MOF_descriptors.py), provided the user has a CIF"
},
{
"path": "molSimplify/Informatics/MOF/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "molSimplify/Informatics/MOF/atomic.py",
"chars": 6446,
"preview": "\"\"\"\nElemental information.\n\"\"\"\nMASS = {\n \"H\": 1.00794,\n \"He\": 4.002602,\n \"Li\": 6.941,\n \"Be\": 9.012182,\n \""
},
{
"path": "molSimplify/Informatics/MOF/cluster_extraction.py",
"chars": 20726,
"preview": "from molSimplify.Scripts.cellbuilder_tools import import_from_cif\nfrom molSimplify.Classes.mol3D import mol3D\nimport os\n"
},
{
"path": "molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py",
"chars": 44168,
"preview": "from molSimplify.Classes.mol3D import mol3D\nfrom molSimplify.Classes.atom3D import atom3D\nfrom molSimplify.Informatics.M"
},
{
"path": "molSimplify/Informatics/MOF/linker_rotation.py",
"chars": 8403,
"preview": "from molSimplify.Scripts.cellbuilder_tools import import_from_cif\nfrom molSimplify.Informatics.MOF.PBC_functions import "
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/CO2H.xyz",
"chars": 1245,
"preview": "21\n-7.9797608074457912e+02 frame 41 xyz file generated by TeraChem\n C -2.1252043209 3.5133636214 0.234569"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/OCF3.xyz",
"chars": 1301,
"preview": "22\n-1.0216613826452420e+03 frame 89 xyz file generated by TeraChem\n C -2.0362418873 3.7441346554 0.370952"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/OCH3.xyz",
"chars": 1301,
"preview": "22\n-7.2394364074714042e+02 frame 53 xyz file generated by TeraChem\n C -1.9625984322 3.2225052293 0.286427"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/README",
"chars": 393,
"preview": "DFT-optimized functionalized BDC linkers\n\nThe file index_information.py indicates which indices correspond to functional"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/SO3H.xyz",
"chars": 1301,
"preview": "22\n-1.2331943659553065e+03 frame 43 xyz file generated by TeraChem\n C -2.0254400423 3.4543909406 0.257049"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/example_terachem_input.in",
"chars": 352,
"preview": "levelshiftvalb 0.25\nlevelshiftvala 0.25\nrun minimize\nscf diis+a\ncoordinates UFF-BDC-SO3H.xyz\nlevelshift yes\nspinmult 1\ns"
},
{
"path": "molSimplify/Informatics/MOF/monofunctionalized_BDC/index_information.py",
"chars": 535,
"preview": "# Each entry corresponds to a different functional group.\n# Columns: functional group name, anchor functional group atom"
},
{
"path": "molSimplify/Informatics/Mol2Parser.py",
"chars": 1551,
"preview": "import numpy as np\n\n\nclass Mol2Parser:\n ##### This parser takes in a mol2 file and extracts info.\n ##### Currently"
},
{
"path": "molSimplify/Informatics/RACassemble.py",
"chars": 23412,
"preview": "# Written JP Janet\n# for HJK Group\n# Dpt of Chemical Engineering, MIT\n\n# ###############################################"
},
{
"path": "molSimplify/Informatics/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "molSimplify/Informatics/active_learning/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "molSimplify/Informatics/active_learning/expected_improvement.py",
"chars": 11486,
"preview": "import numpy as np\nfrom scipy.stats import norm\nfrom typing import Tuple\n\n\ndef get_2D_pareto_indices(points: np.ndarray)"
},
{
"path": "molSimplify/Informatics/autocorrelation.py",
"chars": 113800,
"preview": "from molSimplify.Classes.globalvars import globalvars\nfrom molSimplify.Classes.ligand import (\n ligand_assign_origina"
},
{
"path": "molSimplify/Informatics/coulomb_analyze.py",
"chars": 2151,
"preview": "import numpy as np\n\nfrom molSimplify.Classes.atom3D import atom3D\nfrom molSimplify.Classes.globalvars import globalvars\n"
},
{
"path": "molSimplify/Informatics/decoration_manager.py",
"chars": 9565,
"preview": "# Written by JP Janet for HJK Group\n# Dpt of Chemical Engineering, MIT\n\nfrom molSimplify.Classes.mol3D import mol3D\nfrom"
},
{
"path": "molSimplify/Informatics/geo_analyze.py",
"chars": 3336,
"preview": "# Written JP Janet\n# for HJK Group\n# Dpt of Chemical Engineering, MIT\n\n#################################################"
},
{
"path": "molSimplify/Informatics/geometrics.py",
"chars": 3008,
"preview": "\nimport numpy as np\nimport json\nfrom importlib_resources import files as resource_files\nfrom molSimplify.Classes.mol3D i"
},
{
"path": "molSimplify/Informatics/graph_analyze.py",
"chars": 6435,
"preview": "# Written by JP Janet for HJK Group\n# Dpt of Chemical Engineering, MIT\n\n# ##############################################"
},
{
"path": "molSimplify/Informatics/graph_racs.py",
"chars": 11271,
"preview": "import numpy as np\nimport networkx as nx\nimport operator\nfrom typing import Callable, List, Optional, Tuple\nfrom molSimp"
},
{
"path": "molSimplify/Informatics/jupyter_vis.py",
"chars": 7050,
"preview": "\"\"\"\nPy3Dmol install: (works in both Python2/3 conda environments)\nconda install -c rmg py3dmol\nSome Documentation: https"
},
{
"path": "molSimplify/Informatics/lacRACAssemble.py",
"chars": 53381,
"preview": "# Written JP Janet\n# for HJK Group\n# Dpt of Chemical Engineering, MIT\n\n# ###############################################"
},
{
"path": "molSimplify/Informatics/misc_descriptors.py",
"chars": 9138,
"preview": "from molSimplify.Classes.ligand import ligand_breakdown, ligand_assign_original\nfrom molSimplify.Informatics.graph_analy"
},
{
"path": "molSimplify/Informatics/organic_fingerprints.py",
"chars": 2618,
"preview": "from rdkit import Chem\nfrom rdkit.Chem import AllChem\nfrom molSimplify.Classes.mol3D import mol3D\n\n\n# Nice explanation o"
},
{
"path": "molSimplify/Informatics/partialcharges.py",
"chars": 11483,
"preview": "import numpy as np\n\nfrom molSimplify.Scripts.geometry import distance\n\n\ndef fpriority(mol):\n # setting up variables\n "
},
{
"path": "molSimplify/Informatics/protein/activesite.py",
"chars": 2302,
"preview": "from molSimplify.Classes.monomer3D import monomer3D\nfrom molSimplify.Classes.mol3D import mol3D\nimport pickle\n\n# filenam"
},
{
"path": "molSimplify/Informatics/protein/pymol_add_hs.py",
"chars": 1134,
"preview": "# add hydrogens to pdb file\n\nimport os\nfrom pymol import cmd\nfrom molSimplify.Classes.protein3D import protein3D\nfrom mo"
},
{
"path": "molSimplify/Informatics/py3Dmol_visualization.ipynb",
"chars": 93746,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "molSimplify/Informatics/rac155_geo.py",
"chars": 2648,
"preview": "\"\"\"\nThis is the list of features in the RAC-155 set\nJ. Phys. Chem. A ,2017, 121, 46, 8939-8954\n\"\"\"\nrac155_list = [\n '"
},
{
"path": "molSimplify/Ligands/.gitignore",
"chars": 33,
"preview": "*.mol~\n*.mol2\n*.xyz\nligands.dict\n"
},
{
"path": "molSimplify/Ligands/12crown4.mol",
"chars": 2666,
"preview": "\n OpenBabel03301717123D\n\n 28 28 0 0 0 0 0 0 0 0999 V2000\n 0.1254 1.9002 0.3344 O 0 3 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/Antipyrine.mol",
"chars": 2486,
"preview": "\n OpenBabel03301714373D\n\n 26 27 0 0 0 0 0 0 0 0999 V2000\n 0.3287 -4.7407 1.4590 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/BPAbipy.mol",
"chars": 4646,
"preview": "\n OpenBabel03211612003D\n\n 49 52 0 0 0 0 0 0 0 0999 V2000\n 0.7466 17.4328 1.9016 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/Hpyrrole.mol",
"chars": 1010,
"preview": "\n OpenBabel10061815053D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n -1.6228 0.6210 0.0044 N 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/PCy3.mol",
"chars": 4900,
"preview": "\n OpenBabel10261611303D\n\n 52 54 0 0 0 0 0 0 0 0999 V2000\n -0.1966 -0.0874 -1.1223 P 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/PPh3.mol",
"chars": 3262,
"preview": "\n OpenBabel04301517493D\n\n 34 36 0 0 0 0 0 0 0 0999 V2000\n 0.2699 0.0251 -0.1454 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/Propyphenazone.mol",
"chars": 3332,
"preview": "\n OpenBabel03301714483D\n\n 35 36 0 0 0 0 0 0 0 0999 V2000\n 0.3364 0.5466 -0.0302 O 0 3 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/README",
"chars": 922,
"preview": "Useful links for information on mol file formatting, especially charge:\n\thttps://www.nonlinear.com/progenesis/sdf-studio"
},
{
"path": "molSimplify/Ligands/acac.mol",
"chars": 1356,
"preview": "\n OpenBabel03142421563D\n\n 14 13 0 0 0 0 0 0 0 0999 V2000\n 3.1144 0.8372 -1.4020 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/acacen.mol",
"chars": 3362,
"preview": "\n OpenBabel07181817433D\n\n 36 35 0 0 0 0 0 0 0 0999 V2000\n 2.0145 -3.7977 -2.0701 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/acetate.smi",
"chars": 11,
"preview": "CC(=O)[O-]\n"
},
{
"path": "molSimplify/Ligands/aceticacidbipyridine.mol",
"chars": 3038,
"preview": "\n OpenBabel11161611553D\n\n 32 33 0 0 0 0 0 0 0 0999 V2000\n 3.2537 8.6024 17.7596 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/acetonitrile.mol",
"chars": 628,
"preview": "\n OpenBabel04301519003D\n\n 6 5 0 0 0 0 0 0 0 0999 V2000\n 1.1660 0.0206 0.1454 C 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/alanine.mol",
"chars": 1246,
"preview": "\n OpenBabel04201614323D\n\n 13 12 0 0 1 0 0 0 0 0999 V2000\n 0.0390 -0.0280 0.0000 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/alphabetizer.py",
"chars": 569,
"preview": "# This script alphabetizes the entries in ligands.dict\n# Assumes the first two lines are comments.\n\ndef main():\n with"
},
{
"path": "molSimplify/Ligands/amine.mol",
"chars": 344,
"preview": "\n OpenBabel04301517193D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n -0.7529 0.0000 0.2576 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/ammonia.mol",
"chars": 418,
"preview": "\n OpenBabel05071514253D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n -3.7684 -0.5026 2.5416 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/arginine.mol",
"chars": 2534,
"preview": "\n OpenBabel04201614323D\n\n 27 26 0 0 1 0 0 0 0 0999 V2000\n 0.7350 2.2190 1.3890 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/asparagine.mol",
"chars": 1614,
"preview": "\n OpenBabel04201614323D\n\n 17 16 0 0 1 0 0 0 0 0999 V2000\n 0.0820 -0.1180 0.0000 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/aspartic_acid.mol",
"chars": 1448,
"preview": "\n OpenBabel04201614333D\n\n 15 14 0 0 1 0 0 0 0 0999 V2000\n 1.8840 0.0200 1.3720 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/azide.mol",
"chars": 360,
"preview": "\n OpenBabel07231507463D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n -4.4489 1.3532 0.0000 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/benzene.mol",
"chars": 1102,
"preview": "\n OpenBabel04301517593D\n\n 11 11 0 0 0 0 0 0 0 0999 V2000\n -0.7600 1.1691 -0.0005 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/benzene_pi.mol",
"chars": 1194,
"preview": "\n OpenBabel07041716383D\n\n 12 12 0 0 0 0 0 0 0 0999 V2000\n -0.7654 1.1509 -0.0016 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/benzenedithiol.mol",
"chars": 1202,
"preview": "\n OpenBabel03301717483D\n\n 12 12 0 0 0 0 0 0 0 0999 V2000\n -1.5802 1.4140 0.6300 S 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/benzenethiol.mol",
"chars": 1194,
"preview": "\n OpenBabel11161612163D\n\n 12 12 0 0 0 0 0 0 0 0999 V2000\n -1.4376 2.7013 -0.0782 S 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/benzylisocy.mol",
"chars": 1570,
"preview": "\n OpenBabel03301718183D\n\n 16 16 0 0 0 0 0 0 0 0999 V2000\n 0.1234 1.5946 0.9463 C 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bidiazine.mol",
"chars": 1750,
"preview": "\n OpenBabel10061800203D\n\n 18 19 0 0 0 0 0 0 0 0999 V2000\n 1.5260 7.6974 16.0169 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bidiazole.mol",
"chars": 1566,
"preview": "\n OpenBabel10041822183D\n\n 16 17 0 0 0 0 0 0 0 0999 V2000\n 2.4662 -5.7309 -1.1078 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bifuran.mol",
"chars": 1566,
"preview": "\n OpenBabel11131718583D\n\n 16 17 0 0 0 0 0 0 0 0999 V2000\n 1.4604 4.0559 1.7631 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrodiazine.mol",
"chars": 2486,
"preview": "\n OpenBabel10041823083D\n\n 26 27 0 0 0 0 0 0 0 0999 V2000\n 1.4093 7.5392 16.0490 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrodiazole.mol",
"chars": 1934,
"preview": "\n OpenBabel10041821173D\n\n 20 21 0 0 1 0 0 0 0 0999 V2000\n 2.5002 -5.6890 -1.1281 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrooxazine.mol",
"chars": 2302,
"preview": "\n OpenBabel10041822553D\n\n 24 25 0 0 0 0 0 0 0 0999 V2000\n 1.4447 7.6578 15.9535 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrooxazole.mol",
"chars": 1750,
"preview": "\n OpenBabel10041821103D\n\n 18 19 0 0 0 0 0 0 0 0999 V2000\n 2.4309 -5.7585 -1.1564 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrothiazine.mol",
"chars": 2302,
"preview": "\n OpenBabel10041823063D\n\n 24 25 0 0 0 0 0 0 0 0999 V2000\n 1.4316 7.5405 16.0470 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bihydrothiazole.mol",
"chars": 1750,
"preview": "\n OpenBabel10041821123D\n\n 18 19 0 0 1 0 0 0 0 0999 V2000\n 2.6351 -5.6683 -0.8436 S 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/biimidazole.mol",
"chars": 1566,
"preview": "\n OpenBabel10041823303D\n\n 16 17 0 0 0 0 0 0 0 0999 V2000\n -0.6333 -0.6446 -0.8468 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bioxazole.mol",
"chars": 1382,
"preview": "\n OpenBabel10041822103D\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 2.4309 -5.7585 -1.1564 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bipy.mol",
"chars": 1934,
"preview": "\n OpenBabel05111512293D\n\n 20 21 0 0 0 0 0 0 0 0999 V2000\n 1.8429 7.6058 16.7225 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bipyrimidine.mol",
"chars": 1750,
"preview": "\n OpenBabel04011916113D\n\n 18 19 0 0 0 0 0 0 0 0999 V2000\n 1.8429 7.6058 16.7225 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bipyrrole.mol",
"chars": 1750,
"preview": "\n OpenBabel10061815243D\n\n 18 19 0 0 0 0 0 0 0 0999 V2000\n 2.5511 -5.7576 -1.1048 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bisnapthyridylpyridine.mol",
"chars": 4852,
"preview": "\n OpenBabel04011913173D\n\n 51 55 0 0 0 0 0 0 0 0999 V2000\n -3.1211 10.7627 1.7425 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bithiazole.mol",
"chars": 1382,
"preview": "\n OpenBabel10041822163D\n\n 14 15 0 0 0 0 0 0 0 0999 V2000\n 2.7920 -5.8536 -0.9500 S 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bromide.mol",
"chars": 160,
"preview": "\n OpenBabel07231507383D\n\n 1 0 0 0 0 0 0 0 0 0999 V2000\n -3.4054 0.7200 0.0000 Br 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/bromide.smi",
"chars": 6,
"preview": "[Br-]\n"
},
{
"path": "molSimplify/Ligands/c2.mol",
"chars": 312,
"preview": "C2 Carbon diatomic 12070154\n##CCCBDB 5172213:58\nGeometry Optimized at CCSD(T)=FULL/6-31G*\n 2 1 0 0 0 0 0 0 0 0"
},
{
"path": "molSimplify/Ligands/caprolactone.mol",
"chars": 1728,
"preview": "\n OpenBabel10091800013D\n\n 18 18 0 0 0 0 0 0 0 0999 V2000\n -0.8160 1.4186 0.1828 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/carbonyl.mol",
"chars": 234,
"preview": "\n OpenBabel03211612013D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n 0.0120 0.0403 1.8284 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/carboxyl.mol",
"chars": 436,
"preview": "\n OpenBabel07231507433D\n\n 4 3 0 0 0 0 0 0 0 0999 V2000\n -3.9021 1.5222 -0.0000 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cat.mol",
"chars": 1202,
"preview": "\n OpenBabel11101611273D\n\n 12 12 0 0 0 0 0 0 0 0999 V2000\n 2.1367 0.1253 0.3201 O 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/chloride.mol",
"chars": 160,
"preview": "\n OpenBabel07231507383D\n\n 1 0 0 0 0 0 0 0 0 0999 V2000\n -0.6779 2.2548 0.0000 Cl 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/chloride.smi",
"chars": 6,
"preview": "[Cl-]\n"
},
{
"path": "molSimplify/Ligands/chloropyridine.mol",
"chars": 1084,
"preview": "\n OpenBabel11101611333D\n\n 11 11 0 0 0 0 0 0 0 0999 V2000\n -1.3973 -0.0761 -0.0182 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/co2.mol",
"chars": 326,
"preview": "\n OpenBabel10181721553D\n\n 3 2 0 0 0 0 0 0 0 0999 V2000\n 2.3014 -0.3876 0.7883 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/corrolazine.mol",
"chars": 3038,
"preview": "\n OpenBabel03301715003D\n\n 31 35 0 0 0 0 0 0 0 0999 V2000\n -1.3081 -2.6811 0.0268 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cs.mol",
"chars": 293,
"preview": "CS carbon monosulfide 2944050\n##CCCBDB 5172213:57\nGeometry Optimized at CCSD(T)/6-31G*\n 2 1 0 0 0 0 0 0 0 0999"
},
{
"path": "molSimplify/Ligands/cyanide.mol",
"chars": 252,
"preview": "\n OpenBabel03211611223D\n\n 2 1 0 0 0 0 0 0 0 0999 V2000\n 1.0437 0.0206 0.0256 C 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cyanoaceticporphyrin.mol",
"chars": 4970,
"preview": "\n OpenBabel03151711573D\n\n 52 56 0 0 0 0 0 0 0 0999 V2000\n 0.5636 1.9448 0.1800 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cyanopyridine.mol",
"chars": 1176,
"preview": "\n OpenBabel11161611223D\n\n 12 12 0 0 0 0 0 0 0 0999 V2000\n -1.3752 -0.0423 -0.0187 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cyclam.mol",
"chars": 3568,
"preview": "\n OpenBabel03141719543D\n\n 38 38 0 0 0 0 0 0 0 0999 V2000\n 2.8818 -1.7519 0.2694 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cyclen.mol",
"chars": 3016,
"preview": "\n OpenBabel10061823253D\n\n 32 32 0 0 0 0 0 0 0 0999 V2000\n -1.4086 -0.0836 0.4271 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cyclopentadienyl.mol",
"chars": 1010,
"preview": "\n OpenBabel07041717263D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 0.0012 1.1109 -0.2471 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/cysteine.mol",
"chars": 1338,
"preview": "\n OpenBabel04201614333D\n\n 14 13 0 0 1 0 0 0 0 0999 V2000\n 0.1020 -0.1430 0.0000 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/diaminomethyl.mol",
"chars": 712,
"preview": "\n OpenBabel11051713023D\n\n 7 6 0 0 0 0 0 0 0 0999 V2000\n -1.8050 -0.6790 -0.8007 N 0 5 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/diazine.mol",
"chars": 992,
"preview": "\n OpenBabel10061800173D\n\n 10 10 0 0 0 0 0 0 0 0999 V2000\n 1.4491 7.6703 15.8680 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/diazole.mol",
"chars": 900,
"preview": "\n OpenBabel10041822173D\n\n 9 9 0 0 0 0 0 0 0 0999 V2000\n -1.0389 -3.8284 0.4720 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dicyanamide.mol",
"chars": 528,
"preview": "\n OpenBabel11011613373D\n\n 5 4 0 0 0 0 0 0 0 0999 V2000\n -1.2419 0.2538 0.0326 N 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dihydrofuran.mol",
"chars": 1084,
"preview": "\n OpenBabel10081812533D\n\n 11 11 0 0 0 0 0 0 0 0999 V2000\n 1.3555 4.1186 1.2591 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dmf.mol",
"chars": 1154,
"preview": "\n OpenBabel03301715073D\n\n 12 11 0 0 0 0 0 0 0 0999 V2000\n 3.6333 -0.4276 -0.0036 C 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dmi.mol",
"chars": 1728,
"preview": "\n OpenBabel03301715273D\n\n 18 18 0 0 0 0 0 0 0 0999 V2000\n -0.6830 0.5832 0.5232 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dmpe.mol",
"chars": 2258,
"preview": "\n OpenBabel03171709523D\n\n 24 23 0 0 0 0 0 0 0 0999 V2000\n -0.0028 6.9485 -0.3312 H 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dpmu.mol",
"chars": 2004,
"preview": "\n OpenBabel03301715143D\n\n 21 21 0 0 0 0 0 0 0 0999 V2000\n 0.2873 0.2004 0.7412 O 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/dppe.mol",
"chars": 4922,
"preview": "\n OpenBabel03171709173D\n\n 52 55 0 0 0 0 0 0 0 0999 V2000\n -0.0076 8.0180 -5.7786 H 0 0 0 0 0 0 0 "
},
{
"path": "molSimplify/Ligands/edta.mol",
"chars": 3036,
"preview": "\n OpenBabel03211612013D\n\n 32 31 0 0 0 0 0 0 0 0999 V2000\n 0.1520 1.7600 -0.7360 N 0 0 0 0 0 0 0 "
}
]
// ... and 1282 more files (download for full content)
About this extraction
This page contains the full source code of the hjkgrp/molSimplify GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1482 files (79.8 MB), approximately 13.6M tokens, and a symbol index with 1494 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.