molSimplify 1.7.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. docs/source/conf.py +224 -0
  2. molSimplify/Classes/__init__.py +6 -0
  3. molSimplify/Classes/atom3D.py +235 -0
  4. molSimplify/Classes/dft_obs.py +130 -0
  5. molSimplify/Classes/globalvars.py +827 -0
  6. molSimplify/Classes/helpers.py +161 -0
  7. molSimplify/Classes/ligand.py +2330 -0
  8. molSimplify/Classes/mGUI.py +2493 -0
  9. molSimplify/Classes/mWidgets.py +438 -0
  10. molSimplify/Classes/miniGUI.py +41 -0
  11. molSimplify/Classes/mol2D.py +260 -0
  12. molSimplify/Classes/mol3D.py +5846 -0
  13. molSimplify/Classes/monomer3D.py +253 -0
  14. molSimplify/Classes/partialcharges.py +226 -0
  15. molSimplify/Classes/protein3D.py +1178 -0
  16. molSimplify/Classes/rundiag.py +151 -0
  17. molSimplify/Data/ML.dat +212 -0
  18. molSimplify/Data/MLS_FSR_for_inter.dat +23 -0
  19. molSimplify/Data/MLS_FSR_for_inter2.dat +23 -0
  20. molSimplify/Data/MLS_angle_for_click.dat +8 -0
  21. molSimplify/Data/MLS_angle_for_inter.dat +23 -0
  22. molSimplify/Data/MLS_angle_for_inter2.dat +48 -0
  23. molSimplify/Data/MLS_angle_for_intra.dat +10 -0
  24. molSimplify/Data/MLS_angle_for_intra2.dat +6 -0
  25. molSimplify/Data/MLS_angle_for_oa.dat +18 -0
  26. molSimplify/Data/ML_FSR_for_inter.dat +112 -0
  27. molSimplify/Data/ML_FSR_for_inter2.dat +110 -0
  28. molSimplify/Data/ML_bond_for_cat.dat +8 -0
  29. molSimplify/Data/ML_bond_for_click.dat +8 -0
  30. molSimplify/Data/ML_bond_for_inter.dat +48 -0
  31. molSimplify/Data/ML_bond_for_inter2.dat +48 -0
  32. molSimplify/Data/ML_bond_for_intra.dat +10 -0
  33. molSimplify/Data/ML_bond_for_intra2.dat +6 -0
  34. molSimplify/Data/ML_bond_for_oa.dat +18 -0
  35. molSimplify/Data/bp1.dat +21 -0
  36. molSimplify/Data/li.dat +3 -0
  37. molSimplify/Data/no.dat +2 -0
  38. molSimplify/Data/oct.dat +7 -0
  39. molSimplify/Data/pbp.dat +8 -0
  40. molSimplify/Data/spy.dat +6 -0
  41. molSimplify/Data/sqap.dat +9 -0
  42. molSimplify/Data/sqp.dat +5 -0
  43. molSimplify/Data/tbp.dat +6 -0
  44. molSimplify/Data/tdhd.dat +9 -0
  45. molSimplify/Data/thd.dat +5 -0
  46. molSimplify/Data/tpl.dat +4 -0
  47. molSimplify/Data/tpr.dat +7 -0
  48. molSimplify/Informatics/HFXsensitivity/__init__.py +0 -0
  49. molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py +443 -0
  50. molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py +346 -0
  51. molSimplify/Informatics/MOF/Linker_rotation.py +179 -0
  52. molSimplify/Informatics/MOF/MOF_descriptors.py +1299 -0
  53. molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional.py +589 -0
  54. molSimplify/Informatics/MOF/MOF_functionalizer.py +1648 -0
  55. molSimplify/Informatics/MOF/PBC_functions.py +1347 -0
  56. molSimplify/Informatics/MOF/__init__.py +0 -0
  57. molSimplify/Informatics/MOF/atomic.py +267 -0
  58. molSimplify/Informatics/MOF/cluster_extraction.py +388 -0
  59. molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py +895 -0
  60. molSimplify/Informatics/MOF/monofunctionalized_BDC/index_information.py +10 -0
  61. molSimplify/Informatics/Mol2Parser.py +46 -0
  62. molSimplify/Informatics/RACassemble.py +408 -0
  63. molSimplify/Informatics/__init__.py +0 -0
  64. molSimplify/Informatics/active_learning/__init__.py +0 -0
  65. molSimplify/Informatics/active_learning/expected_improvement.py +269 -0
  66. molSimplify/Informatics/autocorrelation.py +1930 -0
  67. molSimplify/Informatics/clean_autocorrelation.py +778 -0
  68. molSimplify/Informatics/coulomb_analyze.py +67 -0
  69. molSimplify/Informatics/decoration_manager.py +193 -0
  70. molSimplify/Informatics/geo_analyze.py +88 -0
  71. molSimplify/Informatics/geometrics.py +56 -0
  72. molSimplify/Informatics/graph_analyze.py +163 -0
  73. molSimplify/Informatics/graph_racs.py +288 -0
  74. molSimplify/Informatics/jupyter_vis.py +172 -0
  75. molSimplify/Informatics/lacRACAssemble.py +2192 -0
  76. molSimplify/Informatics/lacRACAssemble_bisdithiolenes.py +236 -0
  77. molSimplify/Informatics/misc_descriptors.py +198 -0
  78. molSimplify/Informatics/organic_fingerprints.py +61 -0
  79. molSimplify/Informatics/partialcharges.py +345 -0
  80. molSimplify/Informatics/protein/activesite.py +53 -0
  81. molSimplify/Informatics/protein/pymol_add_hs.py +33 -0
  82. molSimplify/Informatics/rac155_geo.py +48 -0
  83. molSimplify/Ligands/(1_methylbenzimidazol_2_yl)pyridine.xyz +45 -0
  84. molSimplify/Ligands/1-4-dimethyl-1-2-3-triazole.xyz +15 -0
  85. molSimplify/Ligands/12crown4.mol +62 -0
  86. molSimplify/Ligands/Antipyrine.mol +58 -0
  87. molSimplify/Ligands/BPAbipy.mol +106 -0
  88. molSimplify/Ligands/Hpyrrole.mol +26 -0
  89. molSimplify/Ligands/N-quinolinylbutyramidate.xyz +31 -0
  90. molSimplify/Ligands/N-quinolinylmethylmethinylacetamidate.xyz +30 -0
  91. molSimplify/Ligands/NMe2_-1.xyz +11 -0
  92. molSimplify/Ligands/PCy3.mol +111 -0
  93. molSimplify/Ligands/PMe3.xyz +15 -0
  94. molSimplify/Ligands/PPh3.mol +76 -0
  95. molSimplify/Ligands/Propyphenazone.mol +77 -0
  96. molSimplify/Ligands/acac.mol +33 -0
  97. molSimplify/Ligands/acacen.mol +76 -0
  98. molSimplify/Ligands/acetate.smi +1 -0
  99. molSimplify/Ligands/acetate.xyz +9 -0
  100. molSimplify/Ligands/aceticacidbipyridine.mol +70 -0
  101. molSimplify/Ligands/acetonitrile.mol +17 -0
  102. molSimplify/Ligands/alanine.mol +30 -0
  103. molSimplify/Ligands/alphabetizer.py +21 -0
  104. molSimplify/Ligands/amine.mol +11 -0
  105. molSimplify/Ligands/ammonia.mol +12 -0
  106. molSimplify/Ligands/arginine.mol +58 -0
  107. molSimplify/Ligands/asparagine.mol +38 -0
  108. molSimplify/Ligands/aspartic_acid.mol +35 -0
  109. molSimplify/Ligands/azide.mol +11 -0
  110. molSimplify/Ligands/benzene.mol +28 -0
  111. molSimplify/Ligands/benzene_pi.mol +30 -0
  112. molSimplify/Ligands/benzenedithiol.mol +30 -0
  113. molSimplify/Ligands/benzenethiol.mol +30 -0
  114. molSimplify/Ligands/benzylisocy.mol +38 -0
  115. molSimplify/Ligands/bidiazine.mol +42 -0
  116. molSimplify/Ligands/bidiazole.mol +38 -0
  117. molSimplify/Ligands/bifuran.mol +38 -0
  118. molSimplify/Ligands/bihydrodiazine.mol +58 -0
  119. molSimplify/Ligands/bihydrodiazole.mol +46 -0
  120. molSimplify/Ligands/bihydrooxazine.mol +54 -0
  121. molSimplify/Ligands/bihydrooxazole.mol +42 -0
  122. molSimplify/Ligands/bihydrothiazine.mol +54 -0
  123. molSimplify/Ligands/bihydrothiazole.mol +42 -0
  124. molSimplify/Ligands/biimidazole.mol +38 -0
  125. molSimplify/Ligands/bioxazole.mol +34 -0
  126. molSimplify/Ligands/bipy.mol +46 -0
  127. molSimplify/Ligands/bipyrazine.xyz +20 -0
  128. molSimplify/Ligands/bipyrimidine.mol +42 -0
  129. molSimplify/Ligands/bipyrrole.mol +42 -0
  130. molSimplify/Ligands/bisnapthyridylpyridine.mol +111 -0
  131. molSimplify/Ligands/bithiazole.mol +34 -0
  132. molSimplify/Ligands/bromide.mol +7 -0
  133. molSimplify/Ligands/bromide.smi +1 -0
  134. molSimplify/Ligands/c2.mol +9 -0
  135. molSimplify/Ligands/caprolactone.mol +41 -0
  136. molSimplify/Ligands/carbonyl.mol +8 -0
  137. molSimplify/Ligands/carboxyl.mol +13 -0
  138. molSimplify/Ligands/cat.mol +30 -0
  139. molSimplify/Ligands/chloride.mol +7 -0
  140. molSimplify/Ligands/chloride.smi +1 -0
  141. molSimplify/Ligands/chloropyridine.mol +27 -0
  142. molSimplify/Ligands/co2.mol +10 -0
  143. molSimplify/Ligands/corrolazine.mol +72 -0
  144. molSimplify/Ligands/cs.mol +8 -0
  145. molSimplify/Ligands/cyanate.xyz +5 -0
  146. molSimplify/Ligands/cyanide.mol +9 -0
  147. molSimplify/Ligands/cyanoaceticporphyrin.mol +114 -0
  148. molSimplify/Ligands/cyanopyridine.mol +29 -0
  149. molSimplify/Ligands/cyclam.mol +81 -0
  150. molSimplify/Ligands/cyclen.mol +69 -0
  151. molSimplify/Ligands/cyclopentadienyl.mol +26 -0
  152. molSimplify/Ligands/cysteine.mol +32 -0
  153. molSimplify/Ligands/diaminomethyl.mol +19 -0
  154. molSimplify/Ligands/diazine.mol +25 -0
  155. molSimplify/Ligands/diazole.mol +23 -0
  156. molSimplify/Ligands/dicyanamide.mol +15 -0
  157. molSimplify/Ligands/dihydrofuran.mol +27 -0
  158. molSimplify/Ligands/dmap.xyz +35 -0
  159. molSimplify/Ligands/dmf.mol +28 -0
  160. molSimplify/Ligands/dmi.mol +41 -0
  161. molSimplify/Ligands/dmpe.mol +52 -0
  162. molSimplify/Ligands/dpmu.mol +47 -0
  163. molSimplify/Ligands/dppe.mol +112 -0
  164. molSimplify/Ligands/edta.mol +69 -0
  165. molSimplify/Ligands/en.mol +28 -0
  166. molSimplify/Ligands/ethanethiol.mol +21 -0
  167. molSimplify/Ligands/ethanolamine.mol +26 -0
  168. molSimplify/Ligands/ethbipy.mol +70 -0
  169. molSimplify/Ligands/ethyl.mol +19 -0
  170. molSimplify/Ligands/ethylamine.mol +24 -0
  171. molSimplify/Ligands/ethylene.mol +16 -0
  172. molSimplify/Ligands/ethylesteracac.mol +57 -0
  173. molSimplify/Ligands/fluoride.mol +7 -0
  174. molSimplify/Ligands/fluoride.smi +1 -0
  175. molSimplify/Ligands/formaldehyde.mol +12 -0
  176. molSimplify/Ligands/formamidate.xyz +8 -0
  177. molSimplify/Ligands/formate.xyz +6 -0
  178. molSimplify/Ligands/furan.mol +23 -0
  179. molSimplify/Ligands/glutamic_acid.mol +42 -0
  180. molSimplify/Ligands/glutamine.mol +44 -0
  181. molSimplify/Ligands/glycinate.mol +23 -0
  182. molSimplify/Ligands/glycine.mol +24 -0
  183. molSimplify/Ligands/h2s.mol +10 -0
  184. molSimplify/Ligands/helium.mol +6 -0
  185. molSimplify/Ligands/histidine.mol +45 -0
  186. molSimplify/Ligands/hmpa.mol +62 -0
  187. molSimplify/Ligands/hs-.mol +9 -0
  188. molSimplify/Ligands/hydride.mol +7 -0
  189. molSimplify/Ligands/hydrocarboxyacetylide.xyz +8 -0
  190. molSimplify/Ligands/hydrocyanide.mol +10 -0
  191. molSimplify/Ligands/hydrodiazine.mol +33 -0
  192. molSimplify/Ligands/hydrodiazole.mol +27 -0
  193. molSimplify/Ligands/hydrogensulfide.mol +10 -0
  194. molSimplify/Ligands/hydroisocyanide.mol +11 -0
  195. molSimplify/Ligands/hydrooxazine.mol +31 -0
  196. molSimplify/Ligands/hydrooxazole.mol +25 -0
  197. molSimplify/Ligands/hydrothiazine.mol +31 -0
  198. molSimplify/Ligands/hydrothiazole.mol +25 -0
  199. molSimplify/Ligands/hydroxyl.mol +9 -0
  200. molSimplify/Ligands/imidazole.mol +23 -0
  201. molSimplify/Ligands/imidazolidinone.mol +29 -0
  202. molSimplify/Ligands/imine.mol +13 -0
  203. molSimplify/Ligands/iminodiacetic.mol +33 -0
  204. molSimplify/Ligands/iodide.mol +7 -0
  205. molSimplify/Ligands/iodobenzene.xyz +14 -0
  206. molSimplify/Ligands/isoleucine.mol +48 -0
  207. molSimplify/Ligands/isothiocyanate.mol +11 -0
  208. molSimplify/Ligands/leucine.mol +48 -0
  209. molSimplify/Ligands/ligands.dict +257 -0
  210. molSimplify/Ligands/lysine.mol +54 -0
  211. molSimplify/Ligands/mebenzenedithiol.mol +36 -0
  212. molSimplify/Ligands/mebim_py.xyz +29 -0
  213. molSimplify/Ligands/mebim_pz.xyz +28 -0
  214. molSimplify/Ligands/mebipy.mol +58 -0
  215. molSimplify/Ligands/mecat.mol +36 -0
  216. molSimplify/Ligands/methanal.mol +11 -0
  217. molSimplify/Ligands/methanethiol.mol +15 -0
  218. molSimplify/Ligands/methanol.mol +16 -0
  219. molSimplify/Ligands/methionine.mol +44 -0
  220. molSimplify/Ligands/methyl.mol +13 -0
  221. molSimplify/Ligands/methylacetylide.xyz +8 -0
  222. molSimplify/Ligands/methylamine.mol +19 -0
  223. molSimplify/Ligands/methylazide.xyz +9 -0
  224. molSimplify/Ligands/methylisocy.mol +17 -0
  225. molSimplify/Ligands/methylpyridine.mol +33 -0
  226. molSimplify/Ligands/n2.mol +8 -0
  227. molSimplify/Ligands/n4py.xyz +51 -0
  228. molSimplify/Ligands/nch.mol +10 -0
  229. molSimplify/Ligands/nco-.mol +11 -0
  230. molSimplify/Ligands/nethanolamine.mol +26 -0
  231. molSimplify/Ligands/nitrate.mol +14 -0
  232. molSimplify/Ligands/nitrite.mol +11 -0
  233. molSimplify/Ligands/nitro.mol +11 -0
  234. molSimplify/Ligands/nitrobipy.mol +54 -0
  235. molSimplify/Ligands/nitroso.mol +8 -0
  236. molSimplify/Ligands/nme3.mol +30 -0
  237. molSimplify/Ligands/no-.mol +10 -0
  238. molSimplify/Ligands/no2-.mol +11 -0
  239. molSimplify/Ligands/noxygen.mol +8 -0
  240. molSimplify/Ligands/ns-.mol +10 -0
  241. molSimplify/Ligands/o-pyridylbenzene.xyz +23 -0
  242. molSimplify/Ligands/o-pyridylphenylanion.xyz +22 -0
  243. molSimplify/Ligands/o2-.mol +9 -0
  244. molSimplify/Ligands/o2.xyz +4 -0
  245. molSimplify/Ligands/och2.mol +12 -0
  246. molSimplify/Ligands/oethanolamine.mol +26 -0
  247. molSimplify/Ligands/ome2.mol +22 -0
  248. molSimplify/Ligands/ooh.xyz +5 -0
  249. molSimplify/Ligands/oxalate.mol +17 -0
  250. molSimplify/Ligands/oxalate.smi +1 -0
  251. molSimplify/Ligands/oxygen.mol +7 -0
  252. molSimplify/Ligands/pentacyanocyclopentadienide.mol +36 -0
  253. molSimplify/Ligands/ph2-.mol +11 -0
  254. molSimplify/Ligands/ph3.mol +12 -0
  255. molSimplify/Ligands/phen.mol +51 -0
  256. molSimplify/Ligands/phenacac.mol +63 -0
  257. molSimplify/Ligands/phenalalanine.mol +51 -0
  258. molSimplify/Ligands/phendione.mol +51 -0
  259. molSimplify/Ligands/phenphen.mol +75 -0
  260. molSimplify/Ligands/phenylbenzoxazole.mol +54 -0
  261. molSimplify/Ligands/phenylcyc.mol +99 -0
  262. molSimplify/Ligands/phenylenediamine.mol +37 -0
  263. molSimplify/Ligands/phenylisocy.mol +32 -0
  264. molSimplify/Ligands/phosacidbipy.mol +66 -0
  265. molSimplify/Ligands/phosphine.mol +13 -0
  266. molSimplify/Ligands/phosphorine.mol +27 -0
  267. molSimplify/Ligands/phosphorustrifluoride.mol +12 -0
  268. molSimplify/Ligands/phthalocyanine.mol +126 -0
  269. molSimplify/Ligands/pme3o.mol +32 -0
  270. molSimplify/Ligands/porphyrin.mol +82 -0
  271. molSimplify/Ligands/pph3o.mol +77 -0
  272. molSimplify/Ligands/proline.mol +39 -0
  273. molSimplify/Ligands/propdiol.mol +21 -0
  274. molSimplify/Ligands/propylene.mol +23 -0
  275. molSimplify/Ligands/pyridine.mol +27 -0
  276. molSimplify/Ligands/pyrimidone.mol +27 -0
  277. molSimplify/Ligands/pyrrole.mol +24 -0
  278. molSimplify/Ligands/quinoxalinedithiol.mol +39 -0
  279. molSimplify/Ligands/s2-.mol +9 -0
  280. molSimplify/Ligands/salen.mol +75 -0
  281. molSimplify/Ligands/salphen.mol +84 -0
  282. molSimplify/Ligands/serine.mol +32 -0
  283. molSimplify/Ligands/simple_ligands.dict +14 -0
  284. molSimplify/Ligands/sulfacidbipy.mol +63 -0
  285. molSimplify/Ligands/tbucat.mol +54 -0
  286. molSimplify/Ligands/tbuphisocy.mol +56 -0
  287. molSimplify/Ligands/tbutylcyclen.mol +166 -0
  288. molSimplify/Ligands/tbutylisocy.mol +35 -0
  289. molSimplify/Ligands/tbutylthiol.mol +33 -0
  290. molSimplify/Ligands/tcnoet.mol +43 -0
  291. molSimplify/Ligands/tcnoetOH.mol +45 -0
  292. molSimplify/Ligands/terpy.mol +65 -0
  293. molSimplify/Ligands/tetrahydrofuran.mol +31 -0
  294. molSimplify/Ligands/thiane.mol +37 -0
  295. molSimplify/Ligands/thiazole.mol +21 -0
  296. molSimplify/Ligands/thiocyanate.mol +11 -0
  297. molSimplify/Ligands/thiol.mol +9 -0
  298. molSimplify/Ligands/thiophene.mol +23 -0
  299. molSimplify/Ligands/thiopyridine.mol +29 -0
  300. molSimplify/Ligands/threonine.mol +38 -0
  301. molSimplify/Ligands/tpp.mol +165 -0
  302. molSimplify/Ligands/tricyanomethyl.mol +19 -0
  303. molSimplify/Ligands/trifluoromethyl.mol +13 -0
  304. molSimplify/Ligands/tryptophan.mol +60 -0
  305. molSimplify/Ligands/tyrosine.mol +53 -0
  306. molSimplify/Ligands/uthiol.mol +11 -0
  307. molSimplify/Ligands/uthiolme2.mol +23 -0
  308. molSimplify/Ligands/valine.mol +42 -0
  309. molSimplify/Ligands/water.mol +10 -0
  310. molSimplify/Ligands/x.mol +6 -0
  311. molSimplify/Scripts/__init__.py +0 -0
  312. molSimplify/Scripts/addtodb.py +308 -0
  313. molSimplify/Scripts/cellbuilder.py +1592 -0
  314. molSimplify/Scripts/cellbuilder_tools.py +701 -0
  315. molSimplify/Scripts/chains.py +342 -0
  316. molSimplify/Scripts/convert_2to3.py +23 -0
  317. molSimplify/Scripts/dbinteract.py +631 -0
  318. molSimplify/Scripts/distgeom.py +617 -0
  319. molSimplify/Scripts/findcorrelations.py +287 -0
  320. molSimplify/Scripts/generator.py +267 -0
  321. molSimplify/Scripts/geometry.py +1224 -0
  322. molSimplify/Scripts/grabguivars.py +845 -0
  323. molSimplify/Scripts/in_b3lyp_usetc.py +141 -0
  324. molSimplify/Scripts/inparse.py +1673 -0
  325. molSimplify/Scripts/io.py +1149 -0
  326. molSimplify/Scripts/isomers.py +415 -0
  327. molSimplify/Scripts/jobgen.py +247 -0
  328. molSimplify/Scripts/krr_prep.py +1262 -0
  329. molSimplify/Scripts/molSimplify_io.py +18 -0
  330. molSimplify/Scripts/molden2psi4wfn.py +166 -0
  331. molSimplify/Scripts/namegen.py +32 -0
  332. molSimplify/Scripts/nn_prep.py +561 -0
  333. molSimplify/Scripts/oct_check_mols.py +782 -0
  334. molSimplify/Scripts/periodic_QE.py +97 -0
  335. molSimplify/Scripts/postmold.py +304 -0
  336. molSimplify/Scripts/postmwfn.py +709 -0
  337. molSimplify/Scripts/postparse.py +488 -0
  338. molSimplify/Scripts/postproc.py +139 -0
  339. molSimplify/Scripts/qcgen.py +1450 -0
  340. molSimplify/Scripts/rmsd.py +489 -0
  341. molSimplify/Scripts/rungen.py +670 -0
  342. molSimplify/Scripts/structgen.py +3040 -0
  343. molSimplify/Scripts/tf_nn_prep.py +894 -0
  344. molSimplify/Scripts/tsgen.py +295 -0
  345. molSimplify/Scripts/uq_calibration.py +69 -0
  346. molSimplify/__init__.py +0 -0
  347. molSimplify/__main__.py +197 -0
  348. molSimplify/icons/chemdb.png +0 -0
  349. molSimplify/icons/hjklogo.png +0 -0
  350. molSimplify/icons/icon.png +0 -0
  351. molSimplify/icons/logo.png +0 -0
  352. molSimplify/icons/logo_old.png +0 -0
  353. molSimplify/icons/petachem.png +0 -0
  354. molSimplify/icons/petachem2.png +0 -0
  355. molSimplify/icons/petachem_full.png +0 -0
  356. molSimplify/icons/pythonlogo.png +0 -0
  357. molSimplify/icons/sge copy.png +0 -0
  358. molSimplify/icons/sge.png +0 -0
  359. molSimplify/icons/slurm.png +0 -0
  360. molSimplify/icons/wft1.png +0 -0
  361. molSimplify/icons/wft2.png +0 -0
  362. molSimplify/icons/wft3.png +0 -0
  363. molSimplify/ml/__init__.py +0 -0
  364. molSimplify/ml/kernels.py +36 -0
  365. molSimplify/ml/layers.py +29 -0
  366. molSimplify/molscontrol/__init__.py +14 -0
  367. molSimplify/molscontrol/_version.py +521 -0
  368. molSimplify/molscontrol/clf_tools.py +144 -0
  369. molSimplify/molscontrol/data/README.md +21 -0
  370. molSimplify/molscontrol/data/look_and_say.dat +15 -0
  371. molSimplify/molscontrol/dynamic_classifier.py +514 -0
  372. molSimplify/molscontrol/io_tools.py +363 -0
  373. molSimplify/molscontrol/molscontrol.py +49 -0
  374. molSimplify/molscontrol/terachem/jobscript_control.sh +31 -0
  375. molSimplify/molscontrol/terachem/terachem_input +22 -0
  376. molSimplify/python_krr/X_train_TS.csv +535 -0
  377. molSimplify/python_krr/__init__.py +0 -0
  378. molSimplify/python_krr/hat2_X_mean_std.csv +3 -0
  379. molSimplify/python_krr/hat2_feature_names.csv +1 -0
  380. molSimplify/python_krr/hat2_y_mean_std.csv +2 -0
  381. molSimplify/python_krr/hat_X_mean_std.csv +6 -0
  382. molSimplify/python_krr/hat_feature_names.csv +1 -0
  383. molSimplify/python_krr/hat_krr_X_train.csv +5205 -0
  384. molSimplify/python_krr/hat_krr_dual_coef.csv +1 -0
  385. molSimplify/python_krr/hat_y_mean_std.csv +2 -0
  386. molSimplify/python_krr/sklearn_models.py +34 -0
  387. molSimplify/python_krr/y_train_TS.csv +535 -0
  388. molSimplify/python_nn/ANN.py +198 -0
  389. molSimplify/python_nn/__init__.py +0 -0
  390. molSimplify/python_nn/clf_analysis_tool.py +125 -0
  391. molSimplify/python_nn/dictionary_toolbox.py +49 -0
  392. molSimplify/python_nn/ensemble_test.py +309 -0
  393. molSimplify/python_nn/hs_center.csv +26 -0
  394. molSimplify/python_nn/hs_scale.csv +26 -0
  395. molSimplify/python_nn/ls_center.csv +26 -0
  396. molSimplify/python_nn/ls_scale.csv +26 -0
  397. molSimplify/python_nn/ms_hs_b1.csv +50 -0
  398. molSimplify/python_nn/ms_hs_b2.csv +50 -0
  399. molSimplify/python_nn/ms_hs_b3.csv +1 -0
  400. molSimplify/python_nn/ms_hs_w1.csv +50 -0
  401. molSimplify/python_nn/ms_hs_w2.csv +50 -0
  402. molSimplify/python_nn/ms_hs_w3.csv +1 -0
  403. molSimplify/python_nn/ms_ls_b1.csv +50 -0
  404. molSimplify/python_nn/ms_ls_b2.csv +50 -0
  405. molSimplify/python_nn/ms_ls_b3.csv +1 -0
  406. molSimplify/python_nn/ms_ls_w1.csv +50 -0
  407. molSimplify/python_nn/ms_ls_w2.csv +50 -0
  408. molSimplify/python_nn/ms_ls_w3.csv +1 -0
  409. molSimplify/python_nn/ms_slope_b1.csv +50 -0
  410. molSimplify/python_nn/ms_slope_b2.csv +50 -0
  411. molSimplify/python_nn/ms_slope_b3.csv +1 -0
  412. molSimplify/python_nn/ms_slope_w1.csv +50 -0
  413. molSimplify/python_nn/ms_slope_w2.csv +50 -0
  414. molSimplify/python_nn/ms_slope_w3.csv +1 -0
  415. molSimplify/python_nn/ms_split_b1.csv +50 -0
  416. molSimplify/python_nn/ms_split_b2.csv +50 -0
  417. molSimplify/python_nn/ms_split_b3.csv +1 -0
  418. molSimplify/python_nn/ms_split_w1.csv +50 -0
  419. molSimplify/python_nn/ms_split_w2.csv +50 -0
  420. molSimplify/python_nn/ms_split_w3.csv +1 -0
  421. molSimplify/python_nn/slope_center.csv +25 -0
  422. molSimplify/python_nn/slope_scale.csv +25 -0
  423. molSimplify/python_nn/split_center.csv +26 -0
  424. molSimplify/python_nn/split_scale.csv +26 -0
  425. molSimplify/python_nn/tf_ANN.py +762 -0
  426. molSimplify/python_nn/train_data.csv +1211 -0
  427. molSimplify/tf_nn/__init__.py +0 -0
  428. molSimplify/tf_nn/geo_static_clf/geo_static_clf_model.h5 +0 -0
  429. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_name.csv +1591 -0
  430. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_x.csv +2790 -0
  431. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_y.csv +2790 -0
  432. molSimplify/tf_nn/geo_static_clf/geo_static_clf_vars.csv +154 -0
  433. molSimplify/tf_nn/geos/hs_ii_bl_x.csv +1577 -0
  434. molSimplify/tf_nn/geos/hs_ii_bl_y.csv +1577 -0
  435. molSimplify/tf_nn/geos/hs_ii_model.h5 +0 -0
  436. molSimplify/tf_nn/geos/hs_ii_model.json +1 -0
  437. molSimplify/tf_nn/geos/hs_ii_vars.csv +154 -0
  438. molSimplify/tf_nn/geos/hs_iii_bl_x.csv +1659 -0
  439. molSimplify/tf_nn/geos/hs_iii_bl_y.csv +1659 -0
  440. molSimplify/tf_nn/geos/hs_iii_model.h5 +0 -0
  441. molSimplify/tf_nn/geos/hs_iii_model.json +1 -0
  442. molSimplify/tf_nn/geos/hs_iii_vars.csv +154 -0
  443. molSimplify/tf_nn/geos/ls_ii_bl_x.csv +1374 -0
  444. molSimplify/tf_nn/geos/ls_ii_bl_y.csv +1374 -0
  445. molSimplify/tf_nn/geos/ls_ii_model.h5 +0 -0
  446. molSimplify/tf_nn/geos/ls_ii_model.json +1 -0
  447. molSimplify/tf_nn/geos/ls_ii_vars.csv +154 -0
  448. molSimplify/tf_nn/geos/ls_iii_bl_x.csv +1364 -0
  449. molSimplify/tf_nn/geos/ls_iii_bl_y.csv +1364 -0
  450. molSimplify/tf_nn/geos/ls_iii_model.h5 +0 -0
  451. molSimplify/tf_nn/geos/ls_iii_model.json +1 -0
  452. molSimplify/tf_nn/geos/ls_iii_vars.csv +154 -0
  453. molSimplify/tf_nn/homolumo/gap_model.h5 +0 -0
  454. molSimplify/tf_nn/homolumo/gap_model.json +1 -0
  455. molSimplify/tf_nn/homolumo/gap_test_names.csv +175 -0
  456. molSimplify/tf_nn/homolumo/gap_test_x.csv +176 -0
  457. molSimplify/tf_nn/homolumo/gap_test_y.csv +176 -0
  458. molSimplify/tf_nn/homolumo/gap_train_names.csv +699 -0
  459. molSimplify/tf_nn/homolumo/gap_train_x.csv +700 -0
  460. molSimplify/tf_nn/homolumo/gap_train_y.csv +700 -0
  461. molSimplify/tf_nn/homolumo/gap_vars.csv +153 -0
  462. molSimplify/tf_nn/homolumo/homo_model.h5 +0 -0
  463. molSimplify/tf_nn/homolumo/homo_model.json +126 -0
  464. molSimplify/tf_nn/homolumo/homo_test_names.csv +175 -0
  465. molSimplify/tf_nn/homolumo/homo_test_x.csv +176 -0
  466. molSimplify/tf_nn/homolumo/homo_test_y.csv +176 -0
  467. molSimplify/tf_nn/homolumo/homo_train_names.csv +699 -0
  468. molSimplify/tf_nn/homolumo/homo_train_x.csv +700 -0
  469. molSimplify/tf_nn/homolumo/homo_train_y.csv +700 -0
  470. molSimplify/tf_nn/homolumo/homo_vars.csv +153 -0
  471. molSimplify/tf_nn/oxoandhomo/homo_empty_info.json +7 -0
  472. molSimplify/tf_nn/oxoandhomo/homo_empty_model.h5 +0 -0
  473. molSimplify/tf_nn/oxoandhomo/homo_empty_model.json +1 -0
  474. molSimplify/tf_nn/oxoandhomo/homo_empty_test_names.csv +143 -0
  475. molSimplify/tf_nn/oxoandhomo/homo_empty_test_x.csv +144 -0
  476. molSimplify/tf_nn/oxoandhomo/homo_empty_test_y.csv +144 -0
  477. molSimplify/tf_nn/oxoandhomo/homo_empty_train_names.csv +513 -0
  478. molSimplify/tf_nn/oxoandhomo/homo_empty_train_x.csv +514 -0
  479. molSimplify/tf_nn/oxoandhomo/homo_empty_train_y.csv +514 -0
  480. molSimplify/tf_nn/oxoandhomo/homo_empty_val_names.csv +143 -0
  481. molSimplify/tf_nn/oxoandhomo/homo_empty_val_x.csv +58 -0
  482. molSimplify/tf_nn/oxoandhomo/homo_empty_val_y.csv +58 -0
  483. molSimplify/tf_nn/oxoandhomo/homo_empty_vars.csv +155 -0
  484. molSimplify/tf_nn/oxoandhomo/oxo20_info.json +7 -0
  485. molSimplify/tf_nn/oxoandhomo/oxo20_model.h5 +0 -0
  486. molSimplify/tf_nn/oxoandhomo/oxo20_model.json +1 -0
  487. molSimplify/tf_nn/oxoandhomo/oxo20_test_names.csv +143 -0
  488. molSimplify/tf_nn/oxoandhomo/oxo20_test_x.csv +144 -0
  489. molSimplify/tf_nn/oxoandhomo/oxo20_test_y.csv +144 -0
  490. molSimplify/tf_nn/oxoandhomo/oxo20_train_names.csv +513 -0
  491. molSimplify/tf_nn/oxoandhomo/oxo20_train_x.csv +514 -0
  492. molSimplify/tf_nn/oxoandhomo/oxo20_train_y.csv +514 -0
  493. molSimplify/tf_nn/oxoandhomo/oxo20_val_names.csv +143 -0
  494. molSimplify/tf_nn/oxoandhomo/oxo20_val_x.csv +58 -0
  495. molSimplify/tf_nn/oxoandhomo/oxo20_val_y.csv +58 -0
  496. molSimplify/tf_nn/oxoandhomo/oxo20_vars.csv +154 -0
  497. molSimplify/tf_nn/oxocatalysis/hat_model.h5 +0 -0
  498. molSimplify/tf_nn/oxocatalysis/hat_model.json +1 -0
  499. molSimplify/tf_nn/oxocatalysis/hat_test_names.csv +419 -0
  500. molSimplify/tf_nn/oxocatalysis/hat_test_x.csv +420 -0
  501. molSimplify/tf_nn/oxocatalysis/hat_test_y.csv +420 -0
  502. molSimplify/tf_nn/oxocatalysis/hat_train_names.csv +1507 -0
  503. molSimplify/tf_nn/oxocatalysis/hat_train_x.csv +1508 -0
  504. molSimplify/tf_nn/oxocatalysis/hat_train_y.csv +1508 -0
  505. molSimplify/tf_nn/oxocatalysis/hat_val_x.csv +169 -0
  506. molSimplify/tf_nn/oxocatalysis/hat_val_y.csv +169 -0
  507. molSimplify/tf_nn/oxocatalysis/hat_vars.csv +162 -0
  508. molSimplify/tf_nn/oxocatalysis/oxo_model.h5 +0 -0
  509. molSimplify/tf_nn/oxocatalysis/oxo_model.json +1 -0
  510. molSimplify/tf_nn/oxocatalysis/oxo_test_names.csv +527 -0
  511. molSimplify/tf_nn/oxocatalysis/oxo_test_x.csv +528 -0
  512. molSimplify/tf_nn/oxocatalysis/oxo_test_y.csv +528 -0
  513. molSimplify/tf_nn/oxocatalysis/oxo_train_names.csv +1897 -0
  514. molSimplify/tf_nn/oxocatalysis/oxo_train_x.csv +1898 -0
  515. molSimplify/tf_nn/oxocatalysis/oxo_train_y.csv +1898 -0
  516. molSimplify/tf_nn/oxocatalysis/oxo_val_x.csv +212 -0
  517. molSimplify/tf_nn/oxocatalysis/oxo_val_y.csv +212 -0
  518. molSimplify/tf_nn/oxocatalysis/oxo_vars.csv +162 -0
  519. molSimplify/tf_nn/rescaling_data/gap_mean_x.csv +153 -0
  520. molSimplify/tf_nn/rescaling_data/gap_mean_y.csv +1 -0
  521. molSimplify/tf_nn/rescaling_data/gap_var_x.csv +153 -0
  522. molSimplify/tf_nn/rescaling_data/gap_var_y.csv +1 -0
  523. molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_x.csv +154 -0
  524. molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_y.csv +1 -0
  525. molSimplify/tf_nn/rescaling_data/geo_static_clf_var_x.csv +154 -0
  526. molSimplify/tf_nn/rescaling_data/geo_static_clf_var_y.csv +1 -0
  527. molSimplify/tf_nn/rescaling_data/hat_mean_x.csv +162 -0
  528. molSimplify/tf_nn/rescaling_data/hat_mean_y.csv +1 -0
  529. molSimplify/tf_nn/rescaling_data/hat_var_x.csv +162 -0
  530. molSimplify/tf_nn/rescaling_data/hat_var_y.csv +1 -0
  531. molSimplify/tf_nn/rescaling_data/homo_empty_mean_x.csv +155 -0
  532. molSimplify/tf_nn/rescaling_data/homo_empty_mean_y.csv +1 -0
  533. molSimplify/tf_nn/rescaling_data/homo_empty_var_x.csv +155 -0
  534. molSimplify/tf_nn/rescaling_data/homo_empty_var_y.csv +1 -0
  535. molSimplify/tf_nn/rescaling_data/homo_mean_x.csv +153 -0
  536. molSimplify/tf_nn/rescaling_data/homo_mean_y.csv +1 -0
  537. molSimplify/tf_nn/rescaling_data/homo_var_x.csv +153 -0
  538. molSimplify/tf_nn/rescaling_data/homo_var_y.csv +1 -0
  539. molSimplify/tf_nn/rescaling_data/hs_ii_mean_x.csv +154 -0
  540. molSimplify/tf_nn/rescaling_data/hs_ii_mean_y.csv +3 -0
  541. molSimplify/tf_nn/rescaling_data/hs_ii_var_x.csv +154 -0
  542. molSimplify/tf_nn/rescaling_data/hs_ii_var_y.csv +3 -0
  543. molSimplify/tf_nn/rescaling_data/hs_iii_mean_x.csv +154 -0
  544. molSimplify/tf_nn/rescaling_data/hs_iii_mean_y.csv +3 -0
  545. molSimplify/tf_nn/rescaling_data/hs_iii_var_x.csv +154 -0
  546. molSimplify/tf_nn/rescaling_data/hs_iii_var_y.csv +3 -0
  547. molSimplify/tf_nn/rescaling_data/ls_ii_mean_x.csv +154 -0
  548. molSimplify/tf_nn/rescaling_data/ls_ii_mean_y.csv +3 -0
  549. molSimplify/tf_nn/rescaling_data/ls_ii_var_x.csv +154 -0
  550. molSimplify/tf_nn/rescaling_data/ls_ii_var_y.csv +3 -0
  551. molSimplify/tf_nn/rescaling_data/ls_iii_mean_x.csv +154 -0
  552. molSimplify/tf_nn/rescaling_data/ls_iii_mean_y.csv +3 -0
  553. molSimplify/tf_nn/rescaling_data/ls_iii_var_x.csv +154 -0
  554. molSimplify/tf_nn/rescaling_data/ls_iii_var_y.csv +3 -0
  555. molSimplify/tf_nn/rescaling_data/oxo20_mean_x.csv +154 -0
  556. molSimplify/tf_nn/rescaling_data/oxo20_mean_y.csv +1 -0
  557. molSimplify/tf_nn/rescaling_data/oxo20_var_x.csv +154 -0
  558. molSimplify/tf_nn/rescaling_data/oxo20_var_y.csv +1 -0
  559. molSimplify/tf_nn/rescaling_data/oxo_mean_x.csv +162 -0
  560. molSimplify/tf_nn/rescaling_data/oxo_mean_y.csv +1 -0
  561. molSimplify/tf_nn/rescaling_data/oxo_var_x.csv +162 -0
  562. molSimplify/tf_nn/rescaling_data/oxo_var_y.csv +1 -0
  563. molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_x.csv +154 -0
  564. molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_y.csv +1 -0
  565. molSimplify/tf_nn/rescaling_data/sc_static_clf_var_x.csv +154 -0
  566. molSimplify/tf_nn/rescaling_data/sc_static_clf_var_y.csv +1 -0
  567. molSimplify/tf_nn/rescaling_data/split_mean_x.csv +155 -0
  568. molSimplify/tf_nn/rescaling_data/split_mean_y.csv +1 -0
  569. molSimplify/tf_nn/rescaling_data/split_var_x.csv +155 -0
  570. molSimplify/tf_nn/rescaling_data/split_var_y.csv +1 -0
  571. molSimplify/tf_nn/sc_static_clf/sc_static_clf_model.h5 +0 -0
  572. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_name.csv +1591 -0
  573. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_x.csv +1592 -0
  574. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_y.csv +1592 -0
  575. molSimplify/tf_nn/sc_static_clf/sc_static_clf_vars.csv +154 -0
  576. molSimplify/tf_nn/split/split_model.h5 +0 -0
  577. molSimplify/tf_nn/split/split_model.json +1 -0
  578. molSimplify/tf_nn/split/split_vars.csv +155 -0
  579. molSimplify/tf_nn/split/split_x.csv +1902 -0
  580. molSimplify/tf_nn/split/split_y.csv +1902 -0
  581. molSimplify/tf_nn/split/train_names.csv +1901 -0
  582. molSimplify/utils/__init__.py +0 -0
  583. molSimplify/utils/decorators.py +16 -0
  584. molSimplify/utils/metaclasses.py +12 -0
  585. molSimplify/utils/tensorflow.py +23 -0
  586. molSimplify/utils/timer.py +16 -0
  587. molSimplify-1.7.4.dist-info/LICENSE +674 -0
  588. molSimplify-1.7.4.dist-info/METADATA +821 -0
  589. molSimplify-1.7.4.dist-info/RECORD +651 -0
  590. molSimplify-1.7.4.dist-info/WHEEL +5 -0
  591. molSimplify-1.7.4.dist-info/entry_points.txt +3 -0
  592. molSimplify-1.7.4.dist-info/top_level.txt +4 -0
  593. tests/generateTests.py +122 -0
  594. tests/helperFuncs.py +658 -0
  595. tests/informatics/test_MOF_descriptors.py +128 -0
  596. tests/informatics/test_active_learning.py +113 -0
  597. tests/informatics/test_coulomb_analyze.py +24 -0
  598. tests/informatics/test_graph_racs.py +193 -0
  599. tests/ml/test_kernels.py +20 -0
  600. tests/ml/test_layers.py +47 -0
  601. tests/runtest.py +10 -0
  602. tests/test_Mol2D.py +128 -0
  603. tests/test_basic_imports.py +62 -0
  604. tests/test_bidentate.py +25 -0
  605. tests/test_cli.py +20 -0
  606. tests/test_distgeom.py +106 -0
  607. tests/test_example_1.py +29 -0
  608. tests/test_example_3.py +31 -0
  609. tests/test_example_5.py +43 -0
  610. tests/test_example_7.py +28 -0
  611. tests/test_example_8.py +15 -0
  612. tests/test_example_tbp.py +15 -0
  613. tests/test_ff_xtb.py +111 -0
  614. tests/test_geocheck_oct.py +26 -0
  615. tests/test_geocheck_one_empty.py +15 -0
  616. tests/test_geometry.py +44 -0
  617. tests/test_inparse.py +76 -0
  618. tests/test_io.py +84 -0
  619. tests/test_jobgen.py +84 -0
  620. tests/test_joption_pythonic.py +27 -0
  621. tests/test_ligand_assign.py +58 -0
  622. tests/test_ligand_assign_consistent.py +60 -0
  623. tests/test_ligand_class.py +26 -0
  624. tests/test_ligand_from_mol_file.py +35 -0
  625. tests/test_ligands.py +86 -0
  626. tests/test_mol3D.py +337 -0
  627. tests/test_molcas_caspt2.py +15 -0
  628. tests/test_molcas_casscf.py +15 -0
  629. tests/test_old_ANNs.py +68 -0
  630. tests/test_orca_ccsdt.py +15 -0
  631. tests/test_orca_dft.py +15 -0
  632. tests/test_qcgen.py +50 -0
  633. tests/test_racs.py +124 -0
  634. tests/test_rmsd.py +68 -0
  635. tests/test_structgen_functions.py +198 -0
  636. tests/test_tetrahedral.py +29 -0
  637. tests/test_tutorial_10_part_one.py +16 -0
  638. tests/test_tutorial_10_part_two.py +15 -0
  639. tests/test_tutorial_2.py +11 -0
  640. tests/test_tutorial_3.py +15 -0
  641. tests/test_tutorial_4.py +57 -0
  642. tests/test_tutorial_6.py +10 -0
  643. tests/test_tutorial_8.py +29 -0
  644. tests/test_tutorial_9_part_one.py +15 -0
  645. tests/test_tutorial_9_part_two.py +15 -0
  646. tests/test_tutorial_qm9_part_one.py +6 -0
  647. tests/testresources/refs/racs/generate_references.py +85 -0
  648. workflows/NandyJACSAu2022/bridge_functionalizer.py +253 -0
  649. workflows/NandyJACSAu2022/frag_functionalizer.py +242 -0
  650. workflows/NandyJACSAu2022/fragment_classes.py +586 -0
  651. workflows/NandyJACSAu2022/macrocycle_synthesis.py +179 -0
@@ -0,0 +1,67 @@
1
+ import numpy as np
2
+
3
+ from molSimplify.Classes.atom3D import atom3D
4
+ from molSimplify.Classes.globalvars import globalvars
5
+ from molSimplify.Scripts.geometry import distance
6
+ from molSimplify.utils.decorators import deprecated
7
+
8
+
9
+ @deprecated('Use the correctly spelled version create_coulomb_matrix instead.')
10
+ def create_columb_matrix(mol):
11
+ return create_coulomb_matrix(mol)
12
+
13
+
14
+ def create_coulomb_matrix(mol):
15
+ # create Coulomb matrix from mol3D information
16
+ index_set = list(range(0, mol.natoms))
17
+ # fetch the database of nuclear charges
18
+ globs = globalvars()
19
+ amassdict = globs.amass()
20
+ A = np.zeros((mol.natoms, mol.natoms))
21
+ # main build
22
+ for i in index_set:
23
+ Zi = float(amassdict[mol.getAtom(i).symbol()][1])
24
+ for j in index_set:
25
+ if i == j:
26
+ A[i, j] = 0.5*np.power(Zi, (2.4))
27
+ else:
28
+ Zj = float(amassdict[mol.getAtom(j).symbol()][1])
29
+ this_dist = distance(mol.getAtom(i).coords(), mol.getAtom(j).coords())
30
+ if this_dist != 0.0:
31
+ A[i, j] = Zi*Zj/float(this_dist)
32
+ else:
33
+ A[i, j] = 0
34
+ # sort by columns in increasing order
35
+ weights = []
36
+ for col in A.T:
37
+ weights.append(np.linalg.norm(col))
38
+ sort_weights = (np.argsort(weights))[::-1]
39
+ A = A[:, sort_weights]
40
+ # sort by rows in increasing order
41
+ weights = []
42
+ for row in A:
43
+ weights.append(np.linalg.norm(row))
44
+ sort_weights = (np.argsort(weights))[::-1]
45
+ A = A[sort_weights, :]
46
+ return A
47
+
48
+
49
+ def pad_mol(mol, target_atoms):
50
+ # adds placeholder atoms
51
+ # with zero nuclear charge
52
+ # located at the origin
53
+ # in order to get consistent size
54
+ # coulomb matrix
55
+ this_natoms = mol.natoms
56
+ blank_atom = atom3D(Sym='X') # placeholder type
57
+ blank_atom.frozen = False
58
+ safe_stop = False
59
+ counter = 0
60
+ while this_natoms < target_atoms and not safe_stop:
61
+ mol.addAtom(blank_atom)
62
+ this_natoms = mol.natoms
63
+ counter += 1
64
+ if counter > target_atoms:
65
+ safe_stop = True
66
+ print('error padding mol')
67
+ return mol
@@ -0,0 +1,193 @@
1
+ # Written by JP Janet for HJK Group
2
+ # Dpt of Chemical Engineering, MIT
3
+
4
+ # molS modules
5
+ from molSimplify.Classes.mol3D import mol3D
6
+ from molSimplify.Scripts.geometry import (checkcolinear,
7
+ distance,
8
+ norm,
9
+ rotate_around_axis,
10
+ rotation_params,
11
+ vecangle,
12
+ vecdiff)
13
+ from molSimplify.Scripts.io import getlicores, lig_load
14
+
15
+ # FF dependence
16
+ ##########################################
17
+ # ##### ligand decoration function #######
18
+ ##########################################
19
+
20
+
21
+ def decorate_ligand(ligand_to_decorate: mol3D, decoration, decoration_index,
22
+ debug: bool = False) -> mol3D:
23
+ # This function is useful for functionalization. Adding functional groups to a base ligand.
24
+
25
+ # structgen depends on decoration_manager, and decoration_manager depends on structgen.ffopt
26
+ # Thus, this import needs to be placed here to avoid a circular dependence
27
+ from molSimplify.Scripts.structgen import ffopt
28
+
29
+ # INPUT
30
+ # - ligand_to_decorate: mol3D ligand
31
+ # - set ligand_to_decorate.ob_dict to False or empty dictionary first to avoid potential error
32
+ # - decoration: list of smiles/decorations
33
+ # - decoration_index: list of ligand atoms to replace
34
+ # - debug: debugging flag for additional prints
35
+ # OUTPUT
36
+ # - merged_ligand: built ligand
37
+
38
+ lig = ligand_to_decorate
39
+ # reorder to ensure highest atom index
40
+ # removed first
41
+ sort_order = [i[0] for i in sorted(enumerate(decoration_index), key=lambda x:x[1])]
42
+ sort_order = sort_order[::-1] # reverse
43
+
44
+ decoration_index = [decoration_index[i] for i in sort_order]
45
+ decoration = [decoration[i] for i in sort_order]
46
+ if debug:
47
+ print(('decoration_index is ' + str(decoration_index)))
48
+ licores = getlicores()
49
+ if not isinstance(lig, mol3D):
50
+ lig, emsg = lig_load(lig, licores)
51
+ else:
52
+ lig.convert2OBMol()
53
+ lig.charge = lig.OBMol.GetTotalCharge()
54
+ lig.convert2mol3D() # convert to mol3D
55
+
56
+ # create new ligand
57
+ merged_ligand = mol3D()
58
+ merged_ligand.copymol3D(lig)
59
+ for i, dec in enumerate(decoration):
60
+ print(('** decoration number ' + str(i) + ' attaching ' + dec + ' at site '+str(decoration_index[i])
61
+ + '**\n'))
62
+ dec, emsg = lig_load(dec, licores)
63
+ # dec.OBMol.AddHydrogens()
64
+ dec.convert2mol3D() # convert to mol3D
65
+ if debug:
66
+ print(i)
67
+ print(decoration_index)
68
+
69
+ print((merged_ligand.getAtom(decoration_index[i]).symbol()))
70
+ print((merged_ligand.getAtom(decoration_index[i]).coords()))
71
+ merged_ligand.writexyz('basic.xyz')
72
+ Hs = dec.getHsbyIndex(0)
73
+ if len(Hs) > 0 and (not len(dec.cat)):
74
+ dec.deleteatom(Hs[0])
75
+ dec.charge = dec.charge - 1
76
+
77
+ if len(dec.cat) > 0:
78
+ decind = dec.cat[0]
79
+ else:
80
+ decind = 0
81
+ dec.alignmol(dec.getAtom(decind), merged_ligand.getAtom(decoration_index[i]))
82
+ r1 = dec.getAtom(decind).coords()
83
+ r2 = dec.centermass() # center of mass
84
+ rrot = r1
85
+ decb = mol3D()
86
+ decb.copymol3D(dec)
87
+ ####################################
88
+ # center of mass of local environment (to avoid bad placement of bulky ligands)
89
+ auxmol = mol3D()
90
+ for at in dec.getBondedAtoms(decind):
91
+ auxmol.addAtom(dec.getAtom(at))
92
+ if auxmol.natoms > 0:
93
+ r2 = auxmol.centermass() # overwrite global with local centermass
94
+ ####################################
95
+ # rotate around axis and get both images
96
+ theta, u = rotation_params(merged_ligand.centermass(), r1, r2)
97
+ dec = rotate_around_axis(dec, rrot, u, theta)
98
+ if debug:
99
+ dec.writexyz('dec_ARA' + str(i) + '.xyz')
100
+ decb = rotate_around_axis(decb, rrot, u, theta-180)
101
+ if debug:
102
+ decb.writexyz('dec_ARB' + str(i) + '.xyz')
103
+ d1 = distance(dec.centermass(), merged_ligand.centermass())
104
+ d2 = distance(decb.centermass(), merged_ligand.centermass())
105
+ dec = dec if (d2 < d1) else decb # pick best one
106
+ #####################################
107
+ # check for linear molecule
108
+ auxm = mol3D()
109
+ for at in dec.getBondedAtoms(decind):
110
+ auxm.addAtom(dec.getAtom(at))
111
+ if auxm.natoms > 1:
112
+ r0 = dec.getAtom(decind).coords()
113
+ r1 = auxm.getAtom(0).coords()
114
+ r2 = auxm.getAtom(1).coords()
115
+ if checkcolinear(r1, r0, r2):
116
+ theta, urot = rotation_params(r1, merged_ligand.getAtom(decoration_index[i]).coords(), r2)
117
+ theta = vecangle(vecdiff(r0, merged_ligand.getAtom(decoration_index[i]).coords()), urot)
118
+ dec = rotate_around_axis(dec, r0, urot, theta)
119
+
120
+ # get the default distance between atoms in question
121
+ connection_neighbours = merged_ligand.getAtom(merged_ligand.getBondedAtomsnotH(decoration_index[i])[0])
122
+ new_atom = dec.getAtom(decind)
123
+ target_distance = connection_neighbours.rad + new_atom.rad
124
+ position_to_place = vecdiff(new_atom.coords(), connection_neighbours.coords())
125
+ old_dist = norm(position_to_place)
126
+ missing = (target_distance - old_dist)/2
127
+ dec.translate([missing*position_to_place[j] for j in [0, 1, 2]])
128
+
129
+ r1 = dec.getAtom(decind).coords()
130
+ u = vecdiff(r1, merged_ligand.getAtom(decoration_index[i]).coords())
131
+ dtheta = 2
132
+ optmax = -9999
133
+ totiters = 0
134
+ decb = mol3D()
135
+ decb.copymol3D(dec)
136
+ # check for minimum distance between atoms and center of mass distance
137
+ while totiters < 180:
138
+ dec = rotate_around_axis(dec, r1, u, dtheta)
139
+ d0 = dec.mindist(merged_ligand) # try to maximize minimum atoms distance
140
+ d0cm = dec.distance(merged_ligand) # try to maximize center of mass distance
141
+ iteropt = d0cm+d0 # optimization function
142
+ if (iteropt > optmax): # if better conformation, keep
143
+ decb = mol3D()
144
+ decb.copymol3D(dec)
145
+ optmax = iteropt
146
+ totiters += 1
147
+ dec = decb
148
+ if debug:
149
+ dec.writexyz('dec_aligned' + str(i) + '.xyz')
150
+ print(('natoms before delete ' + str(merged_ligand.natoms)))
151
+ print(('obmol before delete at ' + str(decoration_index[i]) + ' is ' + str(merged_ligand.OBMol.NumAtoms())))
152
+ # store connectivity for deleted H
153
+ BO_mat = merged_ligand.populateBOMatrix()
154
+ row_deleted = BO_mat[decoration_index[i]]
155
+ bonds_to_add = []
156
+
157
+ # find where to put the new bonds ->>> Issue here.
158
+ for j, els in enumerate(row_deleted):
159
+ if els > 0:
160
+ # if there is a bond with an atom number
161
+ # before the deleted atom, all is fine
162
+ # else, we subtract one as the row will be be removed
163
+ if j < decoration_index[i]:
164
+ bond_partner = j
165
+ else:
166
+ bond_partner = j - 1
167
+ if len(dec.cat) > 0:
168
+ bonds_to_add.append((bond_partner, (merged_ligand.natoms-1)+dec.cat[0], els))
169
+ else:
170
+ bonds_to_add.append((bond_partner, merged_ligand.natoms-1, els))
171
+
172
+ # perform delete
173
+ merged_ligand.deleteatom(decoration_index[i])
174
+
175
+ merged_ligand.convert2OBMol()
176
+ if debug:
177
+ merged_ligand.writexyz('merged del ' + str(i) + '.xyz')
178
+ # merge and bond
179
+ merged_ligand.combine(dec, bond_to_add=bonds_to_add)
180
+ merged_ligand.convert2OBMol()
181
+
182
+ if debug:
183
+ merged_ligand.writexyz('merged' + str(i) + '.xyz')
184
+ merged_ligand.printxyz()
185
+ print('************')
186
+
187
+ merged_ligand.convert2OBMol()
188
+ merged_ligand, _ = ffopt('MMFF94', merged_ligand, [], 0, [], False, [], 100)
189
+ BO_mat = merged_ligand.populateBOMatrix()
190
+ if debug:
191
+ merged_ligand.writexyz('merged_relaxed.xyz')
192
+ print(BO_mat)
193
+ return merged_ligand
@@ -0,0 +1,88 @@
1
+ # Written JP Janet
2
+ # for HJK Group
3
+ # Dpt of Chemical Engineering, MIT
4
+
5
+ ##########################################################
6
+ ######## Defines class for postprocessing #############
7
+ ######## geometries for octahedral ################
8
+ ################ TM complexs ###############
9
+ ##########################################################
10
+ from molSimplify.Classes.ligand import ligand_breakdown, ligand_assign_consistent
11
+ from molSimplify.Scripts.geometry import distance
12
+
13
+ def getOctBondDistances(mol):
14
+ ## This function gets
15
+ ## ax and equatorial
16
+ ## min and max bond lengths
17
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=True)
18
+ ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list, eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list = ligand_assign_consistent(
19
+ mol, liglist, ligdents, ligcons, False, False)
20
+ ax_dist = list()
21
+ eq_dist = list()
22
+ for ax_ligs in ax_con_list:
23
+ tempList = list()
24
+ for conatms in ax_ligs:
25
+ tempList.append(distance(mol.getAtom(mol.findMetal()[0]).coords(), mol.getAtom(conatms).coords()))
26
+ ax_dist.append(tempList)
27
+ for eq_ligs in eq_con_list:
28
+ tempList = list()
29
+ for conatms in eq_ligs:
30
+ tempList.append(distance(mol.getAtom(mol.findMetal()[0]).coords(), mol.getAtom(conatms).coords()))
31
+ eq_dist.append(tempList)
32
+ return ax_dist, eq_dist
33
+
34
+
35
+ def getLigFormulae(mol):
36
+ ## This function gets
37
+ ## ax and equatorial
38
+ ## ligand names for octahedral complexes
39
+ axnames = []
40
+ eqnames = []
41
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=True)
42
+ ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list, eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list = ligand_assign_consistent(
43
+ mol, liglist, ligdents, ligcons, False, False)
44
+ for axl in ax_ligand_list:
45
+ axnames.append(axl.mol.make_formula())
46
+ for eql in eq_ligand_list:
47
+ eqnames.append(eql.mol.make_formula())
48
+ return axnames, eqnames
49
+
50
+
51
+ def maximum_ML_dist(mol):
52
+ core = mol.getAtom(mol.findMetal()[0]).coords()
53
+ max_dist = 0
54
+ for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
55
+ dist = distance(core, mol.getAtom(atom_inds).coords())
56
+ if (dist > max_dist):
57
+ max_dist = dist
58
+ return max_dist
59
+
60
+
61
+ def maximum_any_dist(mol):
62
+ core = mol.getAtom(mol.findMetal()[0])
63
+ max_dist = 0
64
+ for atoms in mol.getAtoms():
65
+ dist = distance(core.coords(), atoms.coords())
66
+ if (dist > max_dist):
67
+ max_dist = dist
68
+ return max_dist
69
+
70
+
71
+ def minimum_ML_dist(mol):
72
+ core = mol.getAtom(mol.findMetal()[0]).coords()
73
+ min_dist = 1000
74
+ for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
75
+ dist = distance(core, mol.getAtom(atom_inds).coords())
76
+ if (dist < min_dist) and (dist > 0):
77
+ min_dist = dist
78
+ return min_dist
79
+
80
+
81
+ def mean_ML_dist(mol):
82
+ core = mol.getAtom(mol.findMetal()[0]).coords()
83
+ mean_dist = 0.0
84
+ for atom_inds in mol.getBondedAtomsSmart(mol.findMetal()[0]):
85
+ dist = distance(core, mol.getAtom(atom_inds).coords())
86
+ mean_dist += float(dist)
87
+ mean_dist = mean_dist / float(len(mol.getBondedAtomsSmart(mol.findMetal()[0])))
88
+ return mean_dist
@@ -0,0 +1,56 @@
1
+
2
+ import numpy as np
3
+ import json
4
+ from importlib_resources import files as resource_files
5
+ from molSimplify.Classes.mol3D import mol3D
6
+
7
+
8
+ def get_percentile_csd_geometrics(geometrics_csd, geodict, geotype, maxdent,
9
+ metrics=['oct_angle_devi_max', 'max_del_sig_angle',
10
+ 'dist_del_all', 'dist_del_all_relative'],
11
+ path2metric="molSimplify/Informatics/geometrics_csd.json"):
12
+ '''
13
+ Obtain the percentile rank of a geometric dict compared to the entire CSD complexes.
14
+ geometrics_csd: dict, {"geotype": "metric": [each complex's metric]}. If not specified as a dict, it will be loaded by path2metric.
15
+ geodict: dict, geometric dict for a complex. Obtained by IsStructure().
16
+ geotype: str, type of geometry
17
+ metrics: list, a list of geometric considered.
18
+ path2metric: str, the molSimplify path to load geometrics_csd if geometrics_csd is not specified
19
+ '''
20
+ jsonpath = resource_files("molSimplify").joinpath(path2metric)
21
+ if not isinstance(geometrics_csd, dict):
22
+ print("loading csd geometrics...")
23
+ with open(jsonpath, "r") as f:
24
+ geometrics_csd = json.load(f)
25
+ percentile_dict = {}
26
+ for k in metrics:
27
+ percentile_dict[k] = [round(geodict[k], 2),
28
+ round(sum(np.abs(geometrics_csd[geotype]["all"][k]) < geodict[k]) / float(len(geometrics_csd[geotype]["all"][k])) * 100),
29
+ round(sum(np.abs(geometrics_csd[geotype][str(maxdent)][k]) < geodict[k]) / float(len(geometrics_csd[geotype][str(maxdent)][k])) * 100 + 1e-4)]
30
+ return percentile_dict
31
+
32
+
33
+ def get_percentile_from_mol2(mol2string,
34
+ geometrics_csd,
35
+ metrics=['oct_angle_devi_max', 'max_del_sig_angle',
36
+ 'dist_del_all', 'dist_del_all_relative'],
37
+ path2metric="molSimplify/Informatics/geometrics_csd.json"):
38
+ '''
39
+ Get the geometric percentile rank given a mol2string.
40
+ mol2string: str, str in the mol2 file
41
+ geometrics_csd: dict, {"geotype": "metric": [each complex's metric]}. If not specified as a dict, it will be loaded by path2metric.
42
+ metrics: list, a list of geometric considered.
43
+ path2metric: str, the molSimplify path to load geometrics_csd if geometrics_csd is not specified
44
+ '''
45
+ mol = mol3D()
46
+ mol.readfrommol2(mol2string, readstring=True)
47
+ eqsym, maxdent, ligdents, homoleptic, ligsymmetry = mol.get_symmetry_denticity()
48
+ results = mol.get_geometry_type()
49
+ geotype = results['geometry']
50
+ if geotype in ["sandwich", "edge"]:
51
+ print("cannot deal with sandwich or edge compounds now.")
52
+ d = {}
53
+ for k in metrics:
54
+ d[k] = False
55
+ return d
56
+ return get_percentile_csd_geometrics(geometrics_csd=geometrics_csd, geodict=results['summary'][geotype], geotype=geotype, maxdent=maxdent, metrics=metrics, path2metric=path2metric)
@@ -0,0 +1,163 @@
1
+ # Written by JP Janet for HJK Group
2
+ # Dpt of Chemical Engineering, MIT
3
+
4
+ # #########################################################
5
+ # ###### This script is a collection of helper ############
6
+ # ####### routines that convert a molecule #############
7
+ # ####### in mol3D form to a truncated graph #############
8
+ # #########################################################
9
+ # import modules
10
+ from molSimplify.Classes.globalvars import globalvars
11
+ from molSimplify.Classes.mol3D import mol3D
12
+ import numpy as np
13
+
14
+
15
+ def obtain_truncation(mol, con_atoms, hops):
16
+ # # this function truncates a ligand to a certain number of
17
+ # # hops from the core
18
+ # Inputs:
19
+ # mol - mol3D class to truncate
20
+ # con_atoms - index of atoms that connect to metal
21
+ # hops - int, number of hops to truncate
22
+ trunc_mol = mol3D(use_atom_specific_cutoffs=mol.use_atom_specific_cutoffs)
23
+ # metal_ind = mol.findMetal()[0]
24
+ # trunc_mol.addAtom(mol.getAtom(metal_ind))
25
+ added_list = list()
26
+ # added_list.append(metal_ind)
27
+ for connections in con_atoms:
28
+ hopped = 0
29
+ active_set = [connections]
30
+ while hopped < hops:
31
+ hopped += 1
32
+ new_active_set = list()
33
+ for this_atom in active_set:
34
+ # add all connection atoms
35
+ if this_atom not in added_list:
36
+ trunc_mol.addAtom(mol.getAtom(this_atom))
37
+ added_list.append(this_atom)
38
+ # prepare all atoms attached to this connection
39
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom)
40
+ for bound_atoms in this_atoms_neighbors:
41
+ if (bound_atoms not in added_list):
42
+ trunc_mol.addAtom(mol.getAtom(bound_atoms))
43
+ added_list.append(bound_atoms)
44
+ [new_active_set.append(element) for element in this_atoms_neighbors]
45
+ active_set = new_active_set
46
+ if len(mol.graph):
47
+ delete_inds = [x for x in range(mol.natoms) if x not in added_list]
48
+ sort_inds = np.argsort(added_list)
49
+ trunc_mol.atoms = [trunc_mol.atoms[x] for x in sort_inds]
50
+ trunc_mol.graph = np.delete(np.delete(mol.graph, delete_inds, 0), delete_inds, 1)
51
+ if mol.bo_dict:
52
+ save_bo_dict = mol.get_bo_dict_from_inds(added_list)
53
+ trunc_mol.bo_dict = save_bo_dict
54
+ return trunc_mol
55
+
56
+
57
+ def obtain_truncation_metal(mol, hops):
58
+ # # this function truncates a ligand to a certain number of
59
+ # # hops from the core
60
+ # Inputs:
61
+ # mol - mol3D class to truncate
62
+ # con_atoms - index of atoms that connect to metal
63
+ # hops - int, number of hops to truncate
64
+ trunc_mol = mol3D(use_atom_specific_cutoffs=mol.use_atom_specific_cutoffs)
65
+ metal_ind = mol.findMetal()[0]
66
+ trunc_mol.addAtom(mol.getAtom(metal_ind))
67
+ added_list = list()
68
+ added_list.append(metal_ind)
69
+ hopped = 0
70
+ active_set = [metal_ind]
71
+ while hopped < hops:
72
+ hopped += 1
73
+ new_active_set = list()
74
+ for this_atom in active_set:
75
+ # add all connection atoms
76
+ if this_atom not in added_list:
77
+ trunc_mol.addAtom(mol.getAtom(this_atom))
78
+ added_list.append(this_atom)
79
+ # prepare all atoms attached to this connection
80
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom)
81
+ for bound_atoms in this_atoms_neighbors:
82
+ if (bound_atoms not in added_list):
83
+ trunc_mol.addAtom(mol.getAtom(bound_atoms))
84
+ added_list.append(bound_atoms)
85
+ [new_active_set.append(element) for element in this_atoms_neighbors]
86
+ active_set = new_active_set
87
+ sort_inds = np.argsort(added_list)
88
+ mapping_sub2mol = {}
89
+ for ii, ind in enumerate(sort_inds):
90
+ mapping_sub2mol.update({ind: added_list[ii]})
91
+ trunc_mol.mapping_sub2mol = mapping_sub2mol
92
+ if len(mol.graph):
93
+ delete_inds = [x for x in range(mol.natoms) if x not in added_list]
94
+ trunc_mol.atoms = [trunc_mol.atoms[x] for x in sort_inds]
95
+ trunc_mol.graph = np.delete(np.delete(mol.graph, delete_inds, 0), delete_inds, 1)
96
+ if mol.bo_dict:
97
+ save_bo_dict = mol.get_bo_dict_from_inds(added_list)
98
+ trunc_mol.bo_dict = save_bo_dict
99
+ return trunc_mol
100
+
101
+
102
+ def create_graph(mol):
103
+ if not len(mol.graph):
104
+ # create connectivity matrix from mol3D information
105
+ index_set = range(0, mol.natoms)
106
+ A = np.zeros((mol.natoms, mol.natoms))
107
+ for i in index_set:
108
+ this_bonded_atoms = mol.getBondedAtomsSmart(i)
109
+ for j in index_set:
110
+ if j in this_bonded_atoms:
111
+ A[i, j] = 1
112
+ else:
113
+ A = mol.graph
114
+ return A
115
+
116
+
117
+ def get_lig_EN(mol, connection_atoms):
118
+ # calculate the maximum abs electronegativity
119
+ # difference between connection atom an all
120
+ # neighbors
121
+ max_EN = 0
122
+ globs = globalvars()
123
+ for atoms in connection_atoms:
124
+ this_atoms_neighbors = mol.getBondedAtomsSmart(atoms)
125
+ for bound_atoms in this_atoms_neighbors:
126
+ this_EN = float(globs.endict()[mol.getAtom(atoms).symbol()]) - float(
127
+ globs.endict()[mol.getAtom(bound_atoms).symbol()])
128
+ if (abs(this_EN) >= max_EN):
129
+ max_EN = this_EN
130
+ return max_EN
131
+
132
+
133
+ def remove_diagonals(matrix):
134
+ n = matrix.shape[0]
135
+ for i in range(0, n):
136
+ matrix[i, i] = 0
137
+ return matrix
138
+
139
+
140
+ def kier(mol):
141
+ copy_mol = mol3D()
142
+ copy_mol.copymol3D(mol)
143
+ copy_mol.deleteHs()
144
+ A = create_graph(copy_mol)
145
+ n = A.shape[0]
146
+ twopath = A * A
147
+ remove_diagonals(twopath)
148
+ p2 = twopath.sum() / 2
149
+
150
+ if (p2 != 0):
151
+ two_kappa = ((np.power(n, 3) - 5 * np.power(n, 2) + 8 * n - 4)
152
+ / (np.power(p2, 2)))
153
+ else:
154
+ two_kappa = 0
155
+ return (two_kappa)
156
+
157
+
158
+ def get_truncated_kier(ligand, connection_atoms):
159
+ # three hop truncation
160
+ trunc_mol = obtain_truncation(ligand, connection_atoms, 3)
161
+ # trunc_mol.writexyz('trunc.xyz')
162
+ this_kier = kier(trunc_mol)
163
+ return this_kier