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,561 @@
1
+ # @file nn_prep.py
2
+ # Helper routines for ANN integration
3
+ #
4
+ # Written by JP Janet for HJK Group
5
+ #
6
+ # Dpt of Chemical Engineering, MIT
7
+
8
+ from typing import List, Tuple, Union, Dict, Any
9
+ from molSimplify.Scripts.io import lig_load
10
+ from molSimplify.Informatics.decoration_manager import (decorate_ligand)
11
+ from molSimplify.Informatics.graph_analyze import (get_lig_EN,
12
+ get_truncated_kier)
13
+ from molSimplify.python_nn.ANN import (find_eu_dist,
14
+ simple_hs_ann,
15
+ simple_ls_ann,
16
+ simple_slope_ann,
17
+ simple_splitting_ann)
18
+
19
+
20
+ def get_bond_order(OBMol, connection_atoms, mol) -> int:
21
+ # informs the ANN of the highest bond order in ligand
22
+ # INPUT:
23
+ # - OBMol: OBMol class ligand
24
+ # OUTPUT:
25
+ # - max_bo: int, max bond order
26
+
27
+ bond_order_pairs = []
28
+
29
+ OBMol.PerceiveBondOrders()
30
+ for atoms in connection_atoms:
31
+ this_neighbourhood = mol.getBondedAtoms(atoms)
32
+ for items in this_neighbourhood:
33
+ bond_order_pairs.append(tuple([atoms, items]))
34
+
35
+ max_bo = 0
36
+ for index_pairs in bond_order_pairs:
37
+ this_bond = OBMol.GetBond(int(index_pairs[0]+1), int(index_pairs[1]+1))
38
+ if this_bond.IsAromatic():
39
+ this_BO = int(2)
40
+ else:
41
+ this_BO = int(this_bond.GetBondOrder())
42
+ if this_BO > max_bo:
43
+ max_bo = this_BO
44
+ return max_bo
45
+
46
+
47
+ def check_ligands(ligs, batlist, dents, tcats):
48
+ # tests if ligand combination
49
+ # is compatiable with the ANN
50
+ # INPUT:
51
+ # - ligs: list of mol3D class, ligands
52
+ # - batlist: list of int, occupations
53
+ # - dents: list of int, denticity
54
+ # - tcats: list of int/bool
55
+ # OUTPUT:
56
+ # - valid: bool
57
+ # tcats controls
58
+ # manual overide
59
+ # of connection atoms
60
+
61
+ n_ligs = len(ligs)
62
+ axial_ind_list = []
63
+ equatorial_ind_list = []
64
+ axial_ligs = []
65
+ equatorial_ligs = []
66
+ ax_dent = 0
67
+ eq_dent = 0
68
+ eq_tcat = False
69
+ ax_tcat = False
70
+ valid = True
71
+ if (set(dents) == set([2])):
72
+ print('triple bidentate case\n')
73
+ unique_ligs = []
74
+ ucats = []
75
+ if not (n_ligs) == 3:
76
+ # something unexpected happened!
77
+ valid = False
78
+ for i in range(0, n_ligs):
79
+ this_lig = ligs[i]
80
+ this_dent = dents[i]
81
+ # mulitple points
82
+ if not (this_lig in unique_ligs):
83
+ unique_ligs.append(this_lig)
84
+ ucats.append(tcats[i])
85
+ elif (this_lig in unique_ligs) and not (this_lig in equatorial_ligs):
86
+ equatorial_ligs.append(this_lig)
87
+ eq_dent = this_dent
88
+ eq_tcat = tcats[i]
89
+ if len(unique_ligs) == 1:
90
+ axial_ligs.append(equatorial_ligs[0])
91
+ ax_dent = 2
92
+ ax_tcat = eq_tcat
93
+ elif len(unique_ligs) == 2:
94
+ for i, uligs in enumerate(unique_ligs):
95
+ if not (uligs in equatorial_ligs): # only occured once
96
+ axial_ligs.append(uligs)
97
+ ax_dent = 2
98
+ ax_tcat = ucats[i]
99
+ else:
100
+ valid = False
101
+ else:
102
+ for i in range(0, n_ligs):
103
+ this_bat = batlist[i]
104
+ this_lig = ligs[i]
105
+ this_dent = dents[i]
106
+ # print(this_bat,this_lig,this_dent)
107
+ # mulitple points
108
+ if len(this_bat) == 1:
109
+ if (5 in this_bat) or (6 in this_bat):
110
+ if not (this_lig in axial_ligs):
111
+ axial_ligs.append(this_lig)
112
+ ax_dent = this_dent
113
+ ax_tcat = tcats[i]
114
+ else:
115
+ if not (this_lig in equatorial_ligs):
116
+ equatorial_ligs.append(this_lig)
117
+ eq_dent = this_dent
118
+ eq_tcat = tcats[i]
119
+ else:
120
+ if not (this_lig in equatorial_ligs):
121
+ equatorial_ligs.append(this_lig)
122
+ eq_dent = this_dent
123
+ eq_tcat = tcats[i]
124
+ if not (len(axial_ligs) == 1):
125
+ print(('axial ligs mismatch: ', axial_ligs, ax_dent))
126
+ valid = False
127
+ if not (len(equatorial_ligs) == 1):
128
+ print(('equatorial ligs mismatch: ', equatorial_ligs, eq_dent))
129
+ valid = False
130
+ if valid: # get the index position in ligs
131
+ axial_ind_list = [ligs.index(ax_lig) for ax_lig in axial_ligs]
132
+ equatorial_ind_list = [ligs.index(eq_lig)
133
+ for eq_lig in equatorial_ligs]
134
+ return valid, axial_ligs, equatorial_ligs, ax_dent, eq_dent, ax_tcat, eq_tcat, axial_ind_list, equatorial_ind_list
135
+
136
+
137
+ def check_metal(metal: str, oxidation_state: str) -> Tuple[bool, str]:
138
+ supported_metal_dict = {"fe": [2, 3], "mn": [2, 3], "cr": [2, 3],
139
+ "co": [2, 3], "ni": [2]}
140
+ romans = {'I': '1', 'II': '2', 'III': '3', 'IV': '4', 'V': '5', 'VI': '6'}
141
+ if oxidation_state in list(romans.keys()):
142
+ oxidation_state = romans[oxidation_state]
143
+ outcome = False
144
+ if metal in list(supported_metal_dict.keys()):
145
+ # print('metal in',supported_metal_dict[metal])
146
+ if int(oxidation_state) in supported_metal_dict[metal]:
147
+ outcome = True
148
+ return outcome, oxidation_state
149
+
150
+
151
+ def get_con_at_type(mol, connection_atoms: List[Union[int, str]]) -> Tuple[bool, str]:
152
+ this_type = ""
153
+ been_set = False
154
+ valid = True
155
+ # test if the ligand is pi-bonded
156
+ if 'pi' in connection_atoms:
157
+ print('ANN cannot handle Pi bonding (yet)')
158
+ valid = False
159
+ this_type = 'pi'
160
+ else:
161
+ for atoms in connection_atoms:
162
+ this_symbol = mol.getAtom(atoms).symbol()
163
+ if not (this_symbol == this_type):
164
+ if not been_set:
165
+ this_type = this_symbol
166
+ # RM 2022/08/10: added this because I assume this was the
167
+ # original intention to avoid multidentate ligands with
168
+ # connecting atoms of different types. Otherwise I have no
169
+ # idea what 'been_set' was intended for (previously unused)
170
+ been_set = True
171
+ else:
172
+ print('different connection atoms in one ligand')
173
+ valid = False
174
+ if this_type not in ['C', 'O', 'Cl', 'N', 'S']:
175
+ valid = False
176
+ print(('untrained atom type: ', this_type))
177
+ return valid, this_type
178
+
179
+
180
+ def ANN_preproc(args, ligs: List[str], occs: List[int], dents: List[int],
181
+ batslist: List[List[int]], tcats: List[List[Union[int, str]]],
182
+ licores: dict) -> Tuple[bool, str, dict]:
183
+ # prepares and runs ANN calculation
184
+
185
+ ######################
186
+ ANN_reason = '' # holder for reason to reject ANN call
187
+ ANN_attributes: Dict[str, Any] = {}
188
+ ######################
189
+
190
+ nn_excitation = []
191
+ emsg = []
192
+ valid = True
193
+ metal = args.core
194
+ spin = args.spin
195
+ # Set default oxidation state variables
196
+ ox = 0
197
+ this_metal = metal.lower()
198
+ if len(this_metal) > 2:
199
+ this_metal = this_metal[0:2]
200
+ newligs = []
201
+ newcats = []
202
+ newdents = []
203
+ newdecs = [False]*6
204
+ newdec_inds = [[0]]*6
205
+ ANN_trust = ''
206
+ count = -1
207
+ for i, lig in enumerate(ligs):
208
+ this_occ = occs[i]
209
+ for j in range(0, int(this_occ)):
210
+ count += 1
211
+ newligs.append(lig)
212
+ newdents.append(dents[i])
213
+ newcats.append(tcats[i])
214
+ if args.decoration:
215
+ newdecs[count] = (args.decoration[i])
216
+ newdec_inds[count] = (args.decoration_index[i])
217
+
218
+ ligs = newligs
219
+ dents = newdents
220
+ tcats = newcats
221
+
222
+ if not args.geometry == "oct":
223
+ # print('nn: geom is',args.geometry)
224
+ # emsg.append("[ANN] Geometry is not supported at this time, MUST give -geometry = oct")
225
+ valid = False
226
+ ANN_reason = 'geometry not oct'
227
+ if not args.oxstate:
228
+ emsg.append("\n oxidation state must be given")
229
+ valid = False
230
+ ANN_reason = 'oxstate not given'
231
+ if not valid:
232
+ return valid, ANN_reason, ANN_attributes
233
+
234
+ oxidation_state = args.oxstate
235
+ valid, oxidation_state = check_metal(this_metal, oxidation_state)
236
+ # generate key in descriptor space
237
+ ox = int(oxidation_state)
238
+ if args.debug:
239
+ print(('metal is ' + str(this_metal)))
240
+ print(('metal validity', valid))
241
+ if not valid:
242
+ emsg.append("\n Oxidation state not available for this metal")
243
+ ANN_reason = 'ox state not avail for metal'
244
+ return valid, ANN_reason, ANN_attributes
245
+
246
+ try:
247
+ high_spin, spin_ops = spin_classify(this_metal, spin, ox)
248
+ except KeyError:
249
+ valid = False
250
+ emsg.append("\n this spin state not available for this metal")
251
+ ANN_reason = 'spin state not available for metal'
252
+ return valid, ANN_reason, ANN_attributes
253
+
254
+ if emsg:
255
+ print((str(" ".join(["ANN messages:"] + [str(i) for i in emsg]))))
256
+
257
+ (valid, axial_ligs, equatorial_ligs, ax_dent, eq_dent, ax_tcat,
258
+ eq_tcat, axial_ind_list, equatorial_ind_list) = check_ligands(
259
+ ligs, batslist, dents, tcats)
260
+ if args.debug:
261
+ print("\n")
262
+ print(("ligand validity is "+str(valid)))
263
+ print('Occs')
264
+ print(occs)
265
+ print('Ligands')
266
+ print(ligs)
267
+ print('Dents')
268
+ print(dents)
269
+ print('Bats (backbone atoms)')
270
+ print(batslist)
271
+ print(('lig validity', valid))
272
+ print(('ax ligs', axial_ligs))
273
+ print(('eq ligs', equatorial_ligs))
274
+ print(('spin is', spin))
275
+ if not valid:
276
+ ANN_reason = 'found incorrect ligand symmetry'
277
+ return valid, ANN_reason, ANN_attributes
278
+
279
+ ax_lig3D, r_emsg = lig_load(axial_ligs[0], licores) # load ligand
280
+ if r_emsg:
281
+ emsg += r_emsg
282
+ # check decoration index
283
+ if newdecs:
284
+ if newdecs[axial_ind_list[0]]:
285
+ ax_lig3D = decorate_ligand(
286
+ axial_ligs[0], newdecs[axial_ind_list[0]], newdec_inds[axial_ind_list[0]], args.debug)
287
+
288
+ ax_lig3D.convert2mol3D() # mol3D representation of ligand
289
+ # eq
290
+ eq_lig3D, r_emsg = lig_load(equatorial_ligs[0], licores) # load ligand
291
+ if newdecs:
292
+ if newdecs[equatorial_ind_list[0]]:
293
+ eq_lig3D = decorate_ligand(
294
+ equatorial_ligs[0], newdecs[equatorial_ind_list[0]], newdec_inds[equatorial_ind_list[0]], args.debug)
295
+ if r_emsg:
296
+ emsg += r_emsg
297
+ eq_lig3D.convert2mol3D() # mol3D representation of ligand
298
+ if ax_tcat:
299
+ ax_lig3D.cat = ax_tcat
300
+ if args.debug:
301
+ print(('custom ax connect atom given (0-ind) '+str(ax_tcat)))
302
+ if eq_tcat:
303
+ eq_lig3D.cat = eq_tcat
304
+ if args.debug:
305
+ print(('custom eq connect atom given (0-ind) '+str(eq_tcat)))
306
+
307
+ if args.debug:
308
+ print(('finished checking ligands, valid is '+str(valid)))
309
+
310
+ valid, ax_type = get_con_at_type(ax_lig3D, ax_lig3D.cat)
311
+ valid, eq_type = get_con_at_type(eq_lig3D, eq_lig3D.cat)
312
+ if args.debug:
313
+ print(('finished con atom types ' +
314
+ str(ax_type) + ' and ' + str(eq_type)))
315
+ if not valid:
316
+ return valid, ANN_reason, ANN_attributes
317
+
318
+ eq_ki = get_truncated_kier(eq_lig3D, eq_lig3D.cat)
319
+ ax_ki = get_truncated_kier(ax_lig3D, ax_lig3D.cat)
320
+ eq_EN = get_lig_EN(eq_lig3D, eq_lig3D.cat)
321
+ ax_EN = get_lig_EN(ax_lig3D, ax_lig3D.cat)
322
+ eq_bo = get_bond_order(eq_lig3D.OBMol, eq_lig3D.cat, eq_lig3D)
323
+ ax_bo = get_bond_order(ax_lig3D.OBMol, ax_lig3D.cat, ax_lig3D)
324
+
325
+ if axial_ligs[0] in ['carbonyl', 'cn']:
326
+ ax_bo = 3
327
+ if equatorial_ligs[0] in ['carbonyl', 'cn']:
328
+ eq_bo = 3
329
+ eq_charge = eq_lig3D.OBMol.GetTotalCharge()
330
+ ax_charge = ax_lig3D.OBMol.GetTotalCharge()
331
+
332
+ # preprocess:
333
+ sum_delen = (2.0)*ax_EN + (4.0)*eq_EN
334
+ if abs(eq_EN) > abs(ax_EN):
335
+ max_delen = eq_EN
336
+ else:
337
+ max_delen = ax_EN
338
+ alpha = 0.2 # default for B3LYP
339
+ if args.exchange:
340
+ try:
341
+ if float(args.exchange) > 1:
342
+ alpha = float(args.exchange)/100 # if given as %
343
+ elif float(args.exchange) <= 1:
344
+ alpha = float(args.exchange)
345
+ except ValueError:
346
+ print('cannot cast exchange argument to float, using 20%')
347
+
348
+ if args.debug:
349
+ print(('ax_bo', ax_bo))
350
+ print(('eq_bo', eq_bo))
351
+ print(('ax_dent', ax_dent))
352
+ print(('eq_dent', eq_dent))
353
+ print(('ax_charge', ax_charge))
354
+ print(('eq_charge', eq_charge))
355
+ print(('sum_delen', sum_delen))
356
+ print(('max_delen', max_delen))
357
+ print(('ax_type', ax_type))
358
+ print(('eq_type', eq_type))
359
+ print(('ax_ki', ax_ki))
360
+ print(('eq_ki', eq_ki))
361
+
362
+ nn_excitation = [0, 0, 0, 0, 0, # metals co/cr/fe/mn/ni #1-5
363
+ ox, alpha, ax_charge, eq_charge, # ox/alpha/axlig charge/eqlig charge #6-9
364
+ ax_dent, eq_dent, # ax_dent/eq_dent/ #10-11
365
+ 0, 0, 0, 0, # axlig_connect: Cl,N,O,S #12 -15
366
+ 0, 0, 0, 0, # eqliq_connect: Cl,N,O,S #16-19
367
+ sum_delen, max_delen, # mdelen, maxdelen #20-21
368
+ ax_bo, eq_bo, # axlig_bo, eqliq_bo #22-23
369
+ ax_ki, eq_ki] # axlig_ki, eqliq_kii #24-25
370
+ slope_excitation = [0, 0, 0, 0, 0, # metals co/cr/fe/mn/ni #1-5
371
+ ox, ax_charge, eq_charge, # ox/axlig charge/eqlig charge #6-8
372
+ ax_dent, eq_dent, # ax_dent/eq_dent/ #9-10
373
+ 0, 0, 0, 0, # axlig_connect: Cl,N,O,S #11 -14
374
+ 0, 0, 0, 0, # eqliq_connect: Cl,N,O,S #15-18
375
+ sum_delen, max_delen, # mdelen, maxdelen #19-20
376
+ ax_bo, eq_bo, # axlig_bo, eqliq_bo #21-22
377
+ ax_ki, eq_ki] # axlig_ki, eqliq_kii #23-24
378
+
379
+ # print(slope_excitation)
380
+ # print('\n')
381
+ # discrete variable encodings
382
+
383
+ valid, nn_excitation = metal_corrector(nn_excitation, this_metal)
384
+ valid, slope_excitation = metal_corrector(slope_excitation, this_metal)
385
+
386
+ valid, nn_excitation = ax_lig_corrector(nn_excitation, ax_type)
387
+ valid, slope_excitation = ax_lig_corrector(slope_excitation, ax_type)
388
+
389
+ valid, nn_excitation = eq_lig_corrector(nn_excitation, eq_type)
390
+ valid, slope_excitation = eq_lig_corrector(slope_excitation, eq_type)
391
+
392
+ if not valid:
393
+ return valid, ANN_reason, ANN_attributes
394
+
395
+ print("******************************************************************")
396
+ print("************** ANN is engaged and advising on spin ***************")
397
+ print("************** and metal-ligand bond distances ****************")
398
+ print("******************************************************************")
399
+ if high_spin:
400
+ print(('You have selected a high-spin state, s = ' + str(spin)))
401
+ else:
402
+ print(('You have selected a low-spin state, s = ' + str(spin)))
403
+ # test Euclidean norm to training data distance
404
+ train_dist, best_row = find_eu_dist(nn_excitation)
405
+
406
+ ANN_attributes.update({'ANN_dist_to_train': train_dist})
407
+ ANN_attributes.update({'ANN_closest_train': best_row})
408
+ print(('distance to training data is ' +
409
+ "{0:.2f}".format(train_dist) + ' ANN trust: ' + "{0:.2f}".format(max(0.01, 1.0-train_dist))))
410
+ print((' with closest training row ' +
411
+ best_row[:-2] + ' at ' + str(best_row[-2:]) + '% HFX'))
412
+ ANN_trust = 'not set'
413
+ if float(train_dist) < 0.25:
414
+ print('ANN results should be trustworthy for this complex ')
415
+ ANN_trust = 'high'
416
+ elif float(train_dist) < 0.75:
417
+ print('ANN results are probably useful for this complex ')
418
+ ANN_trust = 'medium'
419
+ elif float(train_dist) < 1.0:
420
+ print('ANN results are fairly far from training data, be cautious ')
421
+ ANN_trust = 'low'
422
+ elif float(train_dist) > 1.0:
423
+ print('ANN results are too far from training data, be cautious ')
424
+ ANN_trust = 'very low'
425
+ ANN_attributes.update({'ANN_trust': ANN_trust})
426
+ # engage ANN
427
+
428
+ delta, scaled_excitation = get_splitting(nn_excitation)
429
+ # report to stdout
430
+ if delta[0] < 0 and not high_spin:
431
+ if abs(delta[0]) > 5:
432
+ print('warning, ANN predicts a high spin ground state for this complex')
433
+ else:
434
+ print(
435
+ 'warning, ANN predicts a near degenerate ground state for this complex')
436
+ if delta[0] >= 0 and high_spin:
437
+ if abs(delta[0]) > 5:
438
+ print('warning, ANN predicts a low spin ground state for this complex')
439
+ else:
440
+ print(
441
+ 'warning, ANN predicts a near degenerate ground state for this complex')
442
+ print(("ANN predicts a spin splitting (HS - LS) of " + "{0:.2f}".format(
443
+ float(delta[0])) + ' kcal/mol at '+"{0:.0f}".format(100*alpha) + '% HFX'))
444
+ ANN_attributes.update({'pred_split_HS_LS': delta[0]})
445
+ # reparse to save attributes
446
+ ANN_attributes.update({'This spin': spin})
447
+ if delta[0] < 0 and (abs(delta[0]) > 5):
448
+ ANN_attributes.update({'ANN_ground_state': spin_ops[1]})
449
+ elif delta[0] > 0 and (abs(delta[0]) > 5):
450
+ ANN_attributes.update({'ANN_ground_state': spin_ops[0]})
451
+ else:
452
+ ANN_attributes.update({'ANN_gound_state': 'dgen ' + str(spin_ops)})
453
+
454
+ r_ls = get_ls_dist(nn_excitation)
455
+ r_hs = get_hs_dist(nn_excitation)
456
+ if not high_spin:
457
+ r = r_ls
458
+ else:
459
+ r = r_hs
460
+
461
+ print(('ANN bond length is predicted to be: ' +
462
+ "{0:.2f}".format(float(r)) + ' angstrom'))
463
+ ANN_attributes.update({'ANN_bondl': len(batslist)*[r[0]]})
464
+ print(('ANN low spin bond length is predicted to be: ' +
465
+ "{0:.2f}".format(float(r_ls)) + ' angstrom'))
466
+ print(('ANN high spin bond length is predicted to be: ' +
467
+ "{0:.2f}".format(float(r_hs)) + ' angstrom'))
468
+
469
+ # use ANN to predict fucntional sensitivty
470
+ HFX_slope = 0
471
+ HFX_slope = get_slope(slope_excitation)
472
+ print(('Predicted HFX exchange sensitivity is : ' +
473
+ "{0:.2f}".format(float(HFX_slope)) + ' kcal/HFX'))
474
+ ANN_attributes.update({'ANN_slope': HFX_slope})
475
+ print("*******************************************************************")
476
+ print("************** ANN complete, saved in record file *****************")
477
+ print("*******************************************************************")
478
+
479
+ if not valid and not ANN_reason:
480
+ ANN_reason = ' uncaught rejection (see sdout/stderr)'
481
+ return valid, ANN_reason, ANN_attributes
482
+
483
+
484
+ def ax_lig_corrector(excitation, con_atom_type):
485
+ ax_lig_index_dictionary = {'Cl': 11, 'F': 11, 'N': 12, 'O': 13, 'S': 14}
486
+ # C is the basic value
487
+ try:
488
+ if not con_atom_type == "C":
489
+ excitation[ax_lig_index_dictionary[con_atom_type]] = 1
490
+ valid = True
491
+ except KeyError:
492
+ valid = False
493
+ return valid, excitation
494
+
495
+
496
+ def eq_lig_corrector(excitation, con_atom_type):
497
+ # print('in eliq cor, excitation 1;5' + str(excitation[1:5]))
498
+ eq_lig_index_dictionary = {'Cl': 15, 'F': 15, 'N': 16, 'O': 17, 'S': 18}
499
+ try:
500
+ if not con_atom_type == "C":
501
+ excitation[eq_lig_index_dictionary[con_atom_type]] = 1
502
+ valid = True
503
+ except KeyError:
504
+ valid = False
505
+ # print('end eliq cor, excitation 1;5' + str(excitation[1:5]))
506
+ return valid, excitation
507
+
508
+
509
+ def metal_corrector(excitation, metal):
510
+ metal_index_dictionary = {'co': 0, 'cr': 1, 'fe': 2, 'mn': 3, 'ni': 4}
511
+ # print(excitation)
512
+ # print('metal is ' + str(metal) +' setting slot ' +str(metal_index_dictionary[metal]) + ' to 1' )
513
+ try:
514
+ excitation[metal_index_dictionary[metal]] += 1
515
+ valid = True
516
+ except KeyError:
517
+ valid = False
518
+
519
+ return valid, excitation
520
+ # n = network_builder([25,50,51],"nn_split")
521
+
522
+
523
+ def spin_classify(metal, spin, ox):
524
+ metal_spin_dictionary = {'co': {2: 4, 3: 5},
525
+ 'cr': {2: 5, 3: 4},
526
+ 'fe': {2: 5, 3: 6},
527
+ 'mn': {2: 6, 3: 5},
528
+ 'ni': {2: 3}}
529
+
530
+ suggest_spin_dictionary = {'co': {2: [2, 4], 3: [1, 5]},
531
+ 'cr': {2: [1, 5], 3: [2, 4]},
532
+ 'fe': {2: [1, 5], 3: [2, 6]},
533
+ 'mn': {2: [2, 6], 3: [1, 5]},
534
+ 'ni': {2: [1, 3]}}
535
+
536
+ high_spin = False
537
+ if (int(spin) >= int(metal_spin_dictionary[metal][ox])):
538
+ high_spin = True
539
+ spin_ops = suggest_spin_dictionary[metal][ox]
540
+ return high_spin, spin_ops
541
+
542
+
543
+ def get_splitting(excitation):
544
+ # print(excitation)
545
+ delta, scaled_excitation = simple_splitting_ann(excitation)
546
+ return delta, scaled_excitation
547
+
548
+
549
+ def get_slope(slope_excitation):
550
+ HFX = simple_slope_ann(slope_excitation)
551
+ return HFX
552
+
553
+
554
+ def get_ls_dist(excitation):
555
+ r = simple_ls_ann(excitation)
556
+ return r
557
+
558
+
559
+ def get_hs_dist(excitation):
560
+ r = simple_hs_ann(excitation)
561
+ return r