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,617 @@
1
+ # @file distgeom.py
2
+ # Implements a basic distance geometry conformer search routine
3
+ #
4
+ # Written by Terry Gani for HJK Group
5
+ # Modified for improved support of bidentates on 07/08/2019 by Daniel Harper
6
+ #
7
+ # Dpt of Chemical Engineering, MIT
8
+ #
9
+ # Adapted from:
10
+ #
11
+ # [1] J. M. Blaney and J. S. Dixon, "Distance Geometry in Molecular Modeling",
12
+ # in Reviews in Computational Chemistry, VCH (1994)
13
+ #
14
+ # [2] G. Crippen and T. F. Havel, "Distance Geometry and Molecular Conformation",
15
+ # in Chemometrics Research Studies Series, Wiley (1988)
16
+
17
+ import numpy as np
18
+ import numpy
19
+ try:
20
+ from openbabel import openbabel # version 3 style import
21
+ except ImportError:
22
+ import openbabel # fallback to version 2
23
+ from scipy import optimize
24
+ from math import sqrt, cos
25
+
26
+ from typing import Dict
27
+ from molSimplify.Classes.atom3D import atom3D
28
+ from molSimplify.Classes.mol3D import mol3D
29
+ from molSimplify.Classes.globalvars import (vdwrad)
30
+ from molSimplify.Scripts.geometry import (distance,
31
+ norm,
32
+ vecangle,
33
+ vecdiff)
34
+ from molSimplify.Scripts.io import (lig_load, loadcoord)
35
+
36
+
37
+ def CosRule(AB: float, BC: float, theta: float) -> float:
38
+ """Applies the cosine rule to get the length of AC given lengths of AB, BC and angle ABC
39
+
40
+ Parameters
41
+ ----------
42
+ AB : float
43
+ Length of AB.
44
+ BC : float
45
+ Length of BC.
46
+ theta : float
47
+ theta Angle in degrees.
48
+
49
+ Returns
50
+ -------
51
+ AC : float
52
+ Length of AC.
53
+
54
+ """
55
+ theta = np.pi*theta/180
56
+ AC = sqrt(AB**2+BC**2-2*AB*BC*cos(theta))
57
+ return AC
58
+
59
+
60
+ def inverseCosRule(A, B, C) -> float:
61
+ """Apply the cosine rule to find the angle ABC given points A,B, and C.
62
+
63
+ Parameters
64
+ ----------
65
+ A : list
66
+ Coordinates of A.
67
+ B : list
68
+ Coordinates of B.
69
+ C : list
70
+ Coordinates of C.
71
+
72
+ Returns
73
+ -------
74
+ theta : float
75
+ ABC angle theta in grees.
76
+
77
+ """
78
+ BA = np.linalg.norm(np.array(A)-np.array(B))
79
+ BC = np.linalg.norm(np.array(C)-np.array(B))
80
+ AC = np.linalg.norm(np.array(C)-np.array(A))
81
+ theta = np.arccos((BA**2+BC**2-AC**2)/(2*BA*BC))
82
+ return np.rad2deg(theta)
83
+
84
+
85
+ def GetBoundsMatrices(mol, natoms, catoms=[], shape=[], A=[]):
86
+ """Generate distance bounds matrices. The basic idea is outlined in ref [1].
87
+ We first apply 1-2 (bond length) and 1-3 (bond angle) constraints, read from the FF-optimized initial conformer.
88
+ Next, to bias the search towards coordinating conformers, approximate connection atom distance constraints based
89
+ on topological distances are also included.
90
+
91
+ Parameters
92
+ ----------
93
+ mol : mol3D
94
+ mol3D class instance of molecule.
95
+ natoms : int
96
+ Number of atoms in the molecule.
97
+ catoms : list, optional
98
+ List of ligand connection atoms. Default is Empty.
99
+ shape : dict
100
+ Dict containing angles.
101
+ A : list
102
+ List of lists making a distance 2 connectivity matrix.
103
+
104
+ Returns
105
+ -------
106
+ LB : np.array
107
+ Lower bound matrix.
108
+ UB : np.array
109
+ Upper bound matrix.
110
+
111
+ """
112
+ LB = np.zeros((natoms, natoms)) # lower bound
113
+ UB = np.zeros((natoms, natoms)) # upper bound, both symmetric
114
+ # Set constraints for all atoms excluding the dummy metal atom
115
+ for i in range(natoms-1):
116
+ for j in range(natoms-1):
117
+ # 1-2 constraints: UB = LB = BL
118
+ if mol.OBMol.GetBond(i+1, j+1) is not None:
119
+ UB[i][j] = distance(mol.getAtomCoords(i), mol.getAtomCoords(j))
120
+ UB[j][i] = distance(mol.getAtomCoords(i), mol.getAtomCoords(j))
121
+ LB[i][j] = distance(mol.getAtomCoords(i), mol.getAtomCoords(j))
122
+ LB[j][i] = distance(mol.getAtomCoords(i), mol.getAtomCoords(j))
123
+ for i in range(natoms-1):
124
+ for j in range(natoms-1):
125
+ for k in range(natoms-1):
126
+ # 1-3 constraints: UB = LB = BL
127
+ if mol.OBMol.GetBond(i+1, j+1) is not None and mol.OBMol.GetBond(j+1, k+1) is not None and j != k and i != k:
128
+ AB = vecdiff(mol.getAtomCoords(j), mol.getAtomCoords(i))
129
+ BC = vecdiff(mol.getAtomCoords(k), mol.getAtomCoords(j))
130
+ UB[i][k] = CosRule(norm(AB), norm(BC),
131
+ 180-vecangle(AB, BC))
132
+ UB[k][i] = CosRule(norm(AB), norm(BC),
133
+ 180-vecangle(AB, BC))
134
+ LB[i][k] = CosRule(norm(AB), norm(BC),
135
+ 180-vecangle(AB, BC))
136
+ LB[k][i] = CosRule(norm(AB), norm(BC),
137
+ 180-vecangle(AB, BC))
138
+
139
+ # Set constraints for atoms bonded to the dummy metal atom
140
+ # Currently assumes all M-L bonds are 2 Angstroms
141
+ dummy_idx = natoms-1
142
+ M_L_bond = 2
143
+ for catom in catoms:
144
+ # Set 1-2 constraints
145
+ UB[catom][dummy_idx] = M_L_bond
146
+ UB[dummy_idx][catom] = M_L_bond
147
+ LB[catom][dummy_idx] = M_L_bond
148
+ LB[dummy_idx][catom] = M_L_bond
149
+ if len(catoms) > 1:
150
+ # Set 1-3 contraints for ligating atoms
151
+ for i in range(len(catoms[:-1])):
152
+ for j in range(i+1, len(catoms)):
153
+ angle = shape[str(i)+'-'+str(j)]
154
+ lig_distance = CosRule(M_L_bond, M_L_bond, angle)
155
+ UB[catoms[i]][catoms[j]] = lig_distance
156
+ UB[catoms[j]][catoms[i]] = lig_distance
157
+ LB[catoms[i]][catoms[j]] = lig_distance
158
+ LB[catoms[j]][catoms[i]] = lig_distance
159
+
160
+ expanded_vdwrad = vdwrad.copy()
161
+ expanded_vdwrad['Fe'] = 1.5 # Default vdw radius for the dummy metal is 1.5
162
+ for i in range(natoms):
163
+ for j in range(i):
164
+ # fill LBs with sums of vdW radii and UBs with arbitrary large cutoff
165
+ if LB[i][j] == 0:
166
+ LB[i][j] = expanded_vdwrad[mol.getAtom(
167
+ i).sym] + expanded_vdwrad[mol.getAtom(j).sym]
168
+ LB[j][i] = expanded_vdwrad[mol.getAtom(
169
+ i).sym] + expanded_vdwrad[mol.getAtom(j).sym]
170
+ UB[i][j] = 100
171
+ UB[j][i] = 100
172
+ return LB, UB
173
+
174
+
175
+ def Triangle(LB, UB, natoms):
176
+ """Triangle inequality bounds smoothing. Copied from ref [2], pp. 252-253.
177
+ Scales O(N^3).
178
+
179
+ Parameters
180
+ ----------
181
+ LB : np.array
182
+ Lower bounds matrix.
183
+ UB : np.array
184
+ Upper bounds matrix.
185
+ natoms : int
186
+ Number of atoms in the molecule.
187
+
188
+ Returns
189
+ -------
190
+ LL : np.array
191
+ Lower triangularized bound matrix
192
+ UL : np.array
193
+ Upper triangularized bound matrix
194
+
195
+ """
196
+ LL = LB
197
+ UL = UB
198
+ for k in range(natoms):
199
+ for i in range(natoms-1):
200
+ for j in range(i, natoms):
201
+ if UL[i][j] > UL[i][k] + UL[k][j]:
202
+ UL[i][j] = UL[i][k] + UL[k][j]
203
+ UL[j][i] = UL[i][k] + UL[k][j]
204
+ if LL[i][j] < LL[i][k] - UL[k][j]:
205
+ LL[i][j] = LL[i][k] - UL[k][j]
206
+ LL[j][i] = LL[i][k] - UL[k][j]
207
+ else:
208
+ if LL[i][j] < LL[j][k] - UL[k][i]:
209
+ LL[i][j] = LL[j][k] - UL[k][i]
210
+ LL[j][i] = LL[j][k] - UL[k][i]
211
+ return LL, UL
212
+
213
+
214
+ def Metrize(LB, UB, natoms, Full=False, seed=False):
215
+ """Metrization to select random in-range distances. Copied from ref [2], pp. 253-254.
216
+ Scales O(N^3).
217
+
218
+ Parameters
219
+ ----------
220
+ LB : np.array
221
+ Lower bounds matrix.
222
+ UB : np.array
223
+ Upper bounds matrix.
224
+ natoms : int
225
+ Number of atoms in the molecule.
226
+ Full : bool, optional
227
+ Flag for full metrization (scales O(N^5)). Default is False.
228
+ seed : bool, optional
229
+ Flag for random number seed. Default is False.
230
+
231
+ Returns
232
+ -------
233
+ D : np.array
234
+ Distance matrix.
235
+
236
+ """
237
+ if seed:
238
+ numpy.random.seed(seed)
239
+ D = np.zeros((natoms, natoms))
240
+ LB, UB = Triangle(LB, UB, natoms)
241
+ # First generate a random distance for all atom pairings not involving
242
+ # the metal. TODO: j should start from i+1 to ensure the diagonal is
243
+ # zero.
244
+ for i in range(natoms-1):
245
+ for j in range(i, natoms-1):
246
+ # ~ if Full:
247
+ # ~ LB, UB = Triangle(LB, UB, natoms)
248
+ if UB[i][j] < LB[i][j]: # ensure that the upper bound is larger than the lower bound
249
+ UB[i][j] = LB[i][j]
250
+ D[i][j] = np.random.uniform(LB[i][j], UB[i][j])
251
+ D[j][i] = D[i][j]
252
+
253
+ # For pairs involving the metal, set the distance to 100 Angstroms
254
+ # regardless of the triangle rule. This encourages the algorithm to
255
+ # select conformations which don't crowd the metal, as these often lead
256
+ # to failure. TODO: loop over j should only run to natoms - 1 to avoid
257
+ # writing to the diagonal.
258
+ for j in range(natoms):
259
+ if UB[natoms-1][j] < LB[natoms-1][j]: # ensure that the upper bound is larger than the lower bound
260
+ UB[natoms-1][j] = LB[natoms-1][j]
261
+ D[natoms-1][j] = 100
262
+ D[j][natoms-1] = D[natoms-1][j]
263
+ return D
264
+
265
+
266
+ def GetCMDists(D, natoms):
267
+ """Get distances of each atom to center of mass given the distance matrix.
268
+ Copied from ref [2], pp. 309.
269
+
270
+ Parameters
271
+ ----------
272
+ D : np.array
273
+ Distance matrix.
274
+ natoms : int
275
+ Number of atoms in the molecule.
276
+
277
+ Returns
278
+ -------
279
+ D0 : np.array
280
+ Vector of distances from center of mass.
281
+ status : bool
282
+ Flag for successful search.
283
+
284
+ """
285
+ D0 = np.zeros(natoms)
286
+ for i in range(natoms):
287
+ for j in range(natoms):
288
+ D0[i] += D[i][j]**2/natoms
289
+ for j in range(natoms):
290
+ for k in range(j, natoms):
291
+ D0[i] -= (D[j][k])**2/natoms**2
292
+ try:
293
+ D0[i] = sqrt(D0[i])
294
+ except ValueError:
295
+ # If the triangle inequality is not sastisfied D0[i]
296
+ # is negative and sqrt raises a value error.
297
+ return D0, False
298
+ return D0, True
299
+
300
+
301
+ def GetMetricMatrix(D, D0, natoms):
302
+ """Get metric matrix from distance matrix and CM distances
303
+ Copied from ref [2], pp. 306.
304
+
305
+ Parameters
306
+ ----------
307
+ D : np.array
308
+ Distance matrix.
309
+ D0 : np.array
310
+ Vector of distances from center of mass.
311
+ natoms : int
312
+ Number of atoms in the molecule.
313
+
314
+ Returns
315
+ -------
316
+ G : np.array
317
+ Metric matrix.
318
+
319
+ """
320
+ G = np.zeros((natoms, natoms))
321
+ for i in range(natoms):
322
+ for j in range(natoms):
323
+ G[i][j] = (D0[i]**2 + D0[j]**2 - D[i][j]**2)/2
324
+ return G
325
+
326
+
327
+ def Get3Eigs(G, natoms):
328
+ """Gets 3 largest eigenvalues and corresponding eigenvectors of metric matrix
329
+
330
+ Parameters
331
+ ----------
332
+ G : np.array
333
+ Metric matrix.
334
+ natoms : int
335
+ Number of atoms in the molecule.
336
+
337
+ Returns
338
+ -------
339
+ L : np.array
340
+ Three largest eigenvalues
341
+ V : np.array
342
+ Eigenvectors corresponding to largest eigenvalues.
343
+
344
+ """
345
+ L = np.zeros((3, 3))
346
+ V = np.zeros((natoms, 3))
347
+ l, v = np.linalg.eigh(G)
348
+ for i in [0, 1, 2]:
349
+ # print('natoms is '+ str(natoms))
350
+ # print('l is '+ str(l))
351
+ L[i][i] = sqrt(max(l[natoms-1-i], 0))
352
+ V[:, i] = v[:, natoms-1-i]
353
+ return L, V
354
+
355
+
356
+ def DistErr(x, *args):
357
+ """Computes distance error function for scipy optimization.
358
+ Copied from E3 in pp. 311 of ref. [1]
359
+
360
+ Parameters
361
+ ----------
362
+ x : np.array
363
+ 1D array of coordinates to be optimized.
364
+ *args : dict
365
+ Other parameters (refer to scipy.optimize docs)
366
+
367
+ Returns
368
+ -------
369
+ E : np.array
370
+ Objective function
371
+
372
+ """
373
+ E = 0
374
+ LB, UB, natoms = args
375
+ for i in range(natoms-1):
376
+ for j in range(i+1, natoms):
377
+ ri = [x[3*i], x[3*i+1], x[3*i+2]]
378
+ rj = [x[3*j], x[3*j+1], x[3*j+2]]
379
+ dij = distance(ri, rj)
380
+ uij = UB[i][j]
381
+ lij = LB[i][j]
382
+ E += (dij**2/(uij**2) - 1)**2
383
+ E += (2*lij**2/(lij**2 + dij**2) - 1)**2
384
+ return np.asarray(E)
385
+
386
+
387
+ def DistErrGrad(x, *args):
388
+ """Computes gradient of distance error function for scipy optimization.
389
+ Copied from E3 in pp. 311 of ref. [1]
390
+
391
+ Parameters
392
+ ----------
393
+ x : np.array
394
+ 1D array of coordinates to be optimized.
395
+ *args : dict
396
+ Other parameters (refer to scipy.optimize docs)
397
+
398
+ Returns
399
+ -------
400
+ g : np.array
401
+ Objective function gradient
402
+
403
+ """
404
+ LB, UB, natoms = args
405
+ g = np.zeros(3*natoms)
406
+ for i in range(natoms):
407
+ jr = list(range(natoms))
408
+ jr.remove(i)
409
+ for j in jr:
410
+ ri = [x[3*i], x[3*i+1], x[3*i+2]]
411
+ rj = [x[3*j], x[3*j+1], x[3*j+2]]
412
+ dij = distance(ri, rj)
413
+ uij = UB[i][j]
414
+ lij = LB[i][j]
415
+ g[3*i] += (4*((dij/uij)**2-1)/(uij**2)
416
+ - (8/lij**2)*(2*(lij**2 / (lij**2+dij**2))-1)/((1+(dij/lij)**2)**2))*(x[3*i]-x[3*j]) # xi
417
+ g[3*i+1] += (4*((dij/uij)**2-1)/(uij**2)
418
+ - (8/lij**2)*(2*(lij**2 / (lij**2+dij**2))-1)/((1+(dij/lij)**2)**2))*(x[3*i+1]-x[3*j+1]) # yi
419
+ g[3*i+2] += (4*((dij/uij)**2-1)/(uij**2)
420
+ - (8/lij**2)*(2*(lij**2 / (lij**2+dij**2))-1)/((1+(dij/lij)**2)**2))*(x[3*i+2]-x[3*j+2]) # zi
421
+ return g
422
+
423
+
424
+ def SaveConf(X, mol, ffclean=True, catoms=[]):
425
+ """Further cleans up with OB FF and saves to a new mol3D object.
426
+ Note that distance geometry tends to produce puckered aromatic rings because of the
427
+ lack of explicit impropers, see Riniker et al. JCIM (2015) 55, 2562-74 for details.
428
+ Hence, a FF optimization (with connection atoms constrained) is recommended to clean up the structure.
429
+
430
+ Parameters
431
+ ----------
432
+ x : np.array
433
+ Array of coordinates.
434
+ mol : mol3D
435
+ mol3D class instance of original molecule.
436
+ ffclean : bool, optional
437
+ Flag for openbabel forcefield cleanup. Default is True.
438
+ catoms : list, optional
439
+ List of connection atoms used to generate FF constraints if specified. Default is empty.
440
+
441
+ Returns
442
+ -------
443
+ conf3D : mol3D
444
+ mol3D class instance of conformer.
445
+
446
+ """
447
+ conf3D = mol3D()
448
+ conf3D.copymol3D(mol)
449
+ # set coordinates using OBMol to keep bonding info
450
+ OBMol = conf3D.OBMol
451
+ for i, atom in enumerate(openbabel.OBMolAtomIter(OBMol)):
452
+ atom.SetVector(X[i, 0], X[i, 1], X[i, 2])
453
+
454
+ # First stage of cleaning takes place with the metal still present
455
+ if ffclean:
456
+ ff = openbabel.OBForceField.FindForceField('UFF')
457
+ s = ff.Setup(OBMol)
458
+ if not s:
459
+ print('FF setup failed')
460
+
461
+ for i in range(200):
462
+ ff.SteepestDescent(10)
463
+ ff.ConjugateGradients(10)
464
+ ff.GetCoordinates(OBMol)
465
+
466
+ last_atom_index = OBMol.NumAtoms() # Delete the dummy metal atom that we added earlier
467
+ metal_atom = OBMol.GetAtom(last_atom_index)
468
+ OBMol.DeleteAtom(metal_atom)
469
+
470
+ # Second stage of cleaning removes the metal, but uses constraints on the
471
+ # bonding atoms to ensure a binding conformer is maintained
472
+ # This stage is critical for getting planar aromatic ligands like
473
+ # porphyrin and correct. Not really sure why though...
474
+ if ffclean:
475
+ ff = openbabel.OBForceField.FindForceField('mmff94')
476
+ constr = openbabel.OBFFConstraints()
477
+ for atom in catoms:
478
+ constr.AddAtomConstraint(atom+1)
479
+ s = ff.Setup(OBMol, constr)
480
+ if not s:
481
+ print('FF setup failed')
482
+
483
+ for i in range(200):
484
+ ff.SteepestDescent(10)
485
+ ff.ConjugateGradients(10)
486
+ ff.GetCoordinates(OBMol)
487
+
488
+ conf3D.OBMol = OBMol
489
+ conf3D.convert2mol3D()
490
+ return conf3D
491
+
492
+
493
+ def findshape(args, master_ligand) -> Dict:
494
+ """Determines the relative positioning of different ligating atoms
495
+
496
+ Parameters
497
+ ----------
498
+ args : Namespace
499
+ Namespace argument from inparse.
500
+ master_ligand : mol3D
501
+ mol3D class instance of metal with the ligand.
502
+
503
+ Returns
504
+ -------
505
+ angles_dict : dict
506
+ A dictionary of angles (in degrees) between catoms.
507
+
508
+ """
509
+ core = loadcoord(args.geometry)
510
+
511
+ # load ligands and identify the denticity of each
512
+ ligands = []
513
+ for lig in args.lig:
514
+ ligands.append(lig_load(lig)[0])
515
+ # TODO: Found this hardcoded index that will surely fail in certain cases
516
+ # RM 2022/07/15
517
+ number_of_smiles_ligands = 0
518
+ for i, lig in enumerate(ligands):
519
+ if lig.ident == 'smi':
520
+ ligands[i].denticity = len(args.smicat[number_of_smiles_ligands])
521
+
522
+ # Find the binding location of the master_ligand. Start with one since
523
+ # core[0] corresponds to the metal
524
+ bind = 1
525
+ for i, lig in enumerate(ligands):
526
+ if lig.name == master_ligand.name:
527
+ master_denticity = lig.denticity
528
+ break
529
+ else:
530
+ bind += 1*int(args.ligocc[i])*int(lig.denticity)
531
+ else:
532
+ raise ValueError("master_ligand not in args.lig")
533
+
534
+ metal_coords = np.array(core[0])
535
+ ligating_coords = []
536
+ for i in range(master_denticity):
537
+ ligating_coords.append(np.array(core[i + bind]))
538
+
539
+ angles_dict = dict()
540
+ for i in range(len(ligating_coords)):
541
+ for j in range(len(ligating_coords)):
542
+ angles_dict[str(i)+'-'+str(j)] = inverseCosRule(ligating_coords[i],
543
+ metal_coords,
544
+ ligating_coords[j])
545
+ return angles_dict
546
+
547
+
548
+ def GetConf(mol, args, catoms=[]):
549
+ """Uses distance geometry to get a random conformer.
550
+
551
+ Parameters
552
+ ----------
553
+ mol : mol3D
554
+ mol3D class instance for molecule of interest.
555
+ args : Namespace
556
+ Namespace argument from inparse.
557
+ catoms : list, optional
558
+ List of connection atoms used to generate additional constraints if specified (see GetBoundsMatrices()).
559
+ Default is empty.
560
+
561
+ Returns
562
+ -------
563
+ Conf3D : mol3D
564
+ mol3D class instance of new conformer.
565
+
566
+ """
567
+ # Create a mol3D copy with a dummy metal metal
568
+ Conf3D = mol3D()
569
+ Conf3D.copymol3D(mol)
570
+ Conf3D.addAtom(atom3D('Fe', [0, 0, 0])) # Add dummy metal to the mol3D
571
+ dummy_metal = openbabel.OBAtom() # And add the dummy metal to the OBmol
572
+ dummy_metal.SetAtomicNum(26)
573
+ Conf3D.OBMol.AddAtom(dummy_metal)
574
+ for i in catoms:
575
+ Conf3D.OBMol.AddBond(i+1, Conf3D.OBMol.NumAtoms(), 1)
576
+ natoms = Conf3D.natoms
577
+ Conf3D.createMolecularGraph()
578
+
579
+ shape = findshape(args, mol)
580
+ LB, UB = GetBoundsMatrices(Conf3D, natoms, catoms, shape)
581
+ status = False
582
+ while not status:
583
+ D = Metrize(LB, UB, natoms)
584
+ D0, status = GetCMDists(D, natoms)
585
+ G = GetMetricMatrix(D, D0, natoms)
586
+ L, V = Get3Eigs(G, natoms)
587
+ X = np.dot(V, L) # get projection
588
+ x = np.reshape(X, 3*natoms)
589
+ res1 = optimize.fmin_cg(DistErr, x, fprime=DistErrGrad,
590
+ gtol=0.1, args=(LB, UB, natoms), disp=0)
591
+ X = np.reshape(res1, (natoms, 3))
592
+ Conf3D = SaveConf(X, Conf3D, True, catoms)
593
+
594
+ return Conf3D
595
+
596
+ # for testing
597
+ #
598
+ # n4py
599
+ # molsimplify -core ru -lig 'n1ccccc1CN(Cc2ccccn2)C(c3ccccn3)c4ccccn4' water
600
+ # -ligocc 1 1 -smicat [1,15,22,28,8] -spin 1 -ligloc True
601
+ # -geometry oct -rprompt True -ffoption A
602
+ # heptacoordinate water oxidation catalyst
603
+ # molsimplify -core ru -lig 'n1c(C(=O)[O-])cccc1c2cccc(c3cccc(C(=O)[O-])n3)n2' water pyridine
604
+ # -ligocc 1 1 2 -smicat [1,24,23,22] -spin 1 -ligloc True -geometry pbp -ffoption A
605
+ # same water oxidation catalyst in a hexacoordinate binding pattern
606
+ # molsimplify -core ru -lig 'n1c(C(=O)[O-])cccc1c2cccc(c3cccc(C(=O)[O-])n3)n2' water pyridine
607
+ # -ligocc 1 1 2 -smicat [1,24,23] -spin 1 -ligloc True -geometry oct -ffoption A
608
+ # tetrahedral with 2 bidentates
609
+ # molsimplify -core fe -lig 'n1ccccc1c2ccccn2' 'CC(=O)C=C([O-])C' -ligocc 1 1
610
+ # -smicat [[1,12],[3,6]] -ligloc True -geometry thd -ffoption A -rprompt True
611
+ # mol,emsg = lig_load('c1ccc(c(c1)C=NCCN=Cc2ccccc2[O-])[O-]')
612
+ # mol,emsg = lig_load('N(C)1CCN(C)CCCN(C)CCN(C)CCC1')
613
+ # catoms = [7,10,18,19]
614
+ # catoms = [0,4,9,13]
615
+ # mol.convert2mol3D()
616
+ # conf = GetConf(mol,catoms)
617
+ # conf.writexyz('conf')