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,778 @@
1
+ import numpy as np
2
+ from molSimplify.Classes.globalvars import globalvars
3
+ from molSimplify.Classes.ligand import ligand_breakdown, ligand_assign
4
+ from molSimplify.Scripts.geometry import distance
5
+
6
+ # UNIT CONVERSION
7
+ HF_to_Kcal_mol = 627.503
8
+
9
+
10
+ def autocorrelation(mol, prop_vec, orig, d, oct=True, catoms=None, use_dist=False):
11
+ # this function returns the autocorrelation
12
+ # for one atom
13
+ # Inputs:
14
+ # mol - mol3D class
15
+ # prop_vec - vector, property of atoms in mol in order of index
16
+ # orig - int, zero-indexed starting atom
17
+ # d - int, number of hops to travel
18
+ # oct - bool, if complex is octahedral, will use better bond checks
19
+ result_vector = np.zeros(d + 1)
20
+ hopped = 0
21
+ active_set = set([orig])
22
+ historical_set = set()
23
+ if not use_dist:
24
+ result_vector[hopped] = prop_vec[orig] * prop_vec[orig]
25
+ else:
26
+ result_vector[hopped] = 0.5 * abs(prop_vec[orig]) ** 2.4 / mol.natoms
27
+ while hopped < (d):
28
+
29
+ hopped += 1
30
+ new_active_set = set()
31
+ for this_atom in active_set:
32
+ # prepare all atoms attached to this connection
33
+ # print('called in AC')
34
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom, oct=oct)
35
+ for bound_atoms in this_atoms_neighbors:
36
+ if (bound_atoms not in historical_set) and (bound_atoms not in active_set):
37
+ new_active_set.add(bound_atoms)
38
+ # print('new active set at hop = ' +str(hopped) + ' is ' +str(new_active_set))
39
+ for inds in new_active_set:
40
+ if not use_dist:
41
+ result_vector[hopped] += prop_vec[orig] * prop_vec[inds]
42
+ else:
43
+ this_dist = distance(mol.getAtom(orig).coords(), mol.getAtom(inds).coords())
44
+ result_vector[hopped] += prop_vec[orig] * prop_vec[inds] / (this_dist * mol.natoms)
45
+ historical_set.update(active_set)
46
+ active_set = new_active_set
47
+ return (result_vector)
48
+
49
+
50
+ def deltametric(mol, prop_vec, orig, d, oct=True, catoms=None):
51
+ # this function returns the deltametric
52
+ # over the whole molecule
53
+ # Inputs:
54
+ # mol - mol3D class
55
+ # prop_vec - vector, property of atoms in mol in order of index
56
+ # orig - int, zero-indexed starting atom
57
+ # d - int, number of hops to travel
58
+ # oct - bool, if complex is octahedral, will use better bond checks
59
+ # if oct:
60
+ # print('using OCT delta autocorrelation')
61
+ # else:
62
+ # print('NOT using OCT delta autocorrelation')
63
+ result_vector = np.zeros(d + 1)
64
+ hopped = 0
65
+ active_set = set([orig])
66
+ historical_set = set()
67
+ result_vector[hopped] = 0.00
68
+ while hopped < (d):
69
+ hopped += 1
70
+ new_active_set = set()
71
+ for this_atom in active_set:
72
+ # prepare all atoms attached to this connection
73
+ # print('called in DAC')
74
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom, oct=oct)
75
+ for bound_atoms in this_atoms_neighbors:
76
+ if (bound_atoms not in historical_set) and (bound_atoms not in active_set):
77
+ new_active_set.add(bound_atoms)
78
+ # print('new active set at hop = ' +str(hopped) + ' is ' +str(new_active_set))
79
+ for inds in new_active_set:
80
+ result_vector[hopped] += prop_vec[orig] - prop_vec[inds]
81
+ historical_set.update(active_set)
82
+ active_set = new_active_set
83
+ return (result_vector)
84
+
85
+
86
+ def full_autocorrelation(mol, prop, d, oct=oct, modifier=False, use_dist=False):
87
+ w = construct_property_vector(mol, prop, oct=oct, modifier=modifier)
88
+ index_set = list(range(0, mol.natoms))
89
+ autocorrelation_vector = np.zeros(d + 1)
90
+ for centers in index_set:
91
+ autocorrelation_vector += autocorrelation(mol, w, centers, d, oct=oct, use_dist=use_dist)
92
+ return (autocorrelation_vector)
93
+
94
+
95
+ def atom_only_autocorrelation(mol, prop, d, atomIdx, oct=True):
96
+ # atomIdx must b either a list of indcies
97
+ # or a single index
98
+ w = construct_property_vector(mol, prop, oct)
99
+ autocorrelation_vector = np.zeros(d + 1)
100
+ if hasattr(atomIdx, "__len__"):
101
+ for elements in atomIdx:
102
+ autocorrelation_vector += autocorrelation(mol, w, elements, d, oct=oct)
103
+ autocorrelation_vector = np.divide(autocorrelation_vector, len(atomIdx))
104
+ else:
105
+ autocorrelation_vector += autocorrelation(mol, w, atomIdx, d, oct=oct)
106
+ return (autocorrelation_vector)
107
+
108
+
109
+ def generate_atomonly_autocorrelations(mol, atomIdx, loud, depth=4, oct=True, NumB=False, Gval=False, polarizability=False):
110
+ # # this function gets autocorrelations for a molecule starting
111
+ # # in one single atom only
112
+ # Inputs:
113
+ # mol - mol3D class
114
+ # atomIdx - int, index of atom3D class
115
+ # loud - bool, print output
116
+ result = list()
117
+ colnames = []
118
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
119
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
120
+ if Gval:
121
+ allowed_strings += ['group_number']
122
+ labels_strings += ['Gval']
123
+ if NumB:
124
+ allowed_strings += ["num_bonds"]
125
+ labels_strings += ["NumB"]
126
+ if polarizability:
127
+ allowed_strings += ['polarizability']
128
+ labels_strings += ['alpha']
129
+ # print('The selected connection type is ' + str(mol.getAtom(atomIdx).symbol()))
130
+ for ii, properties in enumerate(allowed_strings):
131
+ atom_only_ac = atom_only_autocorrelation(mol, properties, depth, atomIdx, oct=oct)
132
+ this_colnames = []
133
+ for i in range(0, depth + 1):
134
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
135
+ colnames.append(this_colnames)
136
+ result.append(atom_only_ac)
137
+ results_dictionary = {'colnames': colnames, 'results': result}
138
+ return results_dictionary
139
+
140
+
141
+ def metal_only_autocorrelation(mol, prop, d, oct=True, catoms=None,
142
+ func=autocorrelation, modifier=False, allow_multi=False):
143
+ autocorrelation_vector = np.zeros(d+1)
144
+ try:
145
+ n_met = len(mol.findMetal())
146
+ w = construct_property_vector(mol, prop, oct=oct, modifier=modifier)
147
+ if allow_multi:
148
+ for metal_ind in mol.findMetal():
149
+ print(autocorrelation_vector)
150
+ autocorrelation_vector += func(mol, w, metal_ind, d, oct=oct, catoms=catoms)
151
+ autocorrelation_vector = np.divide(autocorrelation_vector, n_met)
152
+ else:
153
+ autocorrelation_vector = func(mol, w, mol.findMetal()[0], d, oct=oct, catoms=catoms)
154
+ except:
155
+ print('Error, no metal found in mol object!')
156
+ return False
157
+ return (autocorrelation_vector)
158
+
159
+
160
+ def autocorrelation_catoms(mol, prop_vec, orig, d, oct=True, catoms=None):
161
+ # Calculate the autocorrelation for the orig to certain connecting atoms.
162
+ result_vector = np.zeros(d + 1)
163
+ hopped = 0
164
+ active_set = set([orig])
165
+ historical_set = set()
166
+ result_vector[hopped] = prop_vec[orig] * prop_vec[orig]
167
+ # if oct:
168
+ # print('using OCT autocorrelation')
169
+ # #else:
170
+ # print('NOT using OCT autocorrelation')
171
+ while hopped < (d):
172
+
173
+ hopped += 1
174
+ new_active_set = set()
175
+ for this_atom in active_set:
176
+ # prepare all atoms attached to this connection
177
+ # print('called in AC')
178
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom, oct=oct)
179
+ # print('--1--:', this_atoms_neighbors)
180
+ if this_atom == orig and catoms is not None:
181
+ this_atoms_neighbors = catoms
182
+ # print('--2--:', this_atoms_neighbors)
183
+ for bound_atoms in this_atoms_neighbors:
184
+ if (bound_atoms not in historical_set) and (bound_atoms not in active_set):
185
+ new_active_set.add(bound_atoms)
186
+ # print('new active set at hop = ' +str(hopped) + ' is ' +str(new_active_set))
187
+ for inds in new_active_set:
188
+ result_vector[hopped] += prop_vec[orig] * prop_vec[inds]
189
+ historical_set.update(active_set)
190
+ active_set = new_active_set
191
+ return (result_vector)
192
+
193
+
194
+ def deltametric_catoms(mol, prop_vec, orig, d, oct=True, catoms=None):
195
+ # Calculate the deltametrics for the orig to certain connecting atoms.
196
+ result_vector = np.zeros(d + 1)
197
+ hopped = 0
198
+ active_set = set([orig])
199
+ historical_set = set()
200
+ result_vector[hopped] = 0.00
201
+ # metal_idx = mol.findMetal()[0]
202
+ while hopped < (d):
203
+ hopped += 1
204
+ new_active_set = set()
205
+ for this_atom in active_set:
206
+ # prepare all atoms attached to this connection
207
+ # print('called in DAC')
208
+ this_atoms_neighbors = mol.getBondedAtomsSmart(this_atom, oct=oct)
209
+ # print('--1--:', this_atoms_neighbors)
210
+ if this_atom == orig and (catoms is not None):
211
+ this_atoms_neighbors = catoms
212
+ # print('--2--:', this_atoms_neighbors)
213
+ for bound_atoms in this_atoms_neighbors:
214
+ if (bound_atoms not in historical_set) and (bound_atoms not in active_set):
215
+ new_active_set.add(bound_atoms)
216
+ # print('new active set at hop = ' +str(hopped) + ' is ' +str(new_active_set))
217
+ for inds in new_active_set:
218
+ result_vector[hopped] += prop_vec[orig] - prop_vec[inds]
219
+ historical_set.update(active_set)
220
+ active_set = new_active_set
221
+ return (result_vector)
222
+
223
+
224
+ def atom_only_deltametric(mol, prop, d, atomIdx, oct=True, modifier=False):
225
+ # atomIdx must b either a list of indcies
226
+ # or a single index
227
+ w = construct_property_vector(mol, prop, oct=oct, modifier=modifier)
228
+
229
+ deltametric_vector = np.zeros(d + 1)
230
+ if hasattr(atomIdx, "__len__"):
231
+ for elements in atomIdx:
232
+ deltametric_vector += deltametric(mol, w, elements, d, oct=oct)
233
+ deltametric_vector = np.divide(deltametric_vector, len(atomIdx))
234
+ else:
235
+ deltametric_vector += deltametric(mol, w, atomIdx, d, oct=oct)
236
+ return (deltametric_vector)
237
+
238
+
239
+ def metal_only_deltametric(mol, prop, d, oct=True, catoms=None,
240
+ func=deltametric, modifier=False, allow_multi=False):
241
+ deltametric_vector = np.zeros(d + 1)
242
+ try:
243
+ n_met = len(mol.findMetal())
244
+ w = construct_property_vector(mol, prop, oct=oct, modifier=modifier)
245
+ if allow_multi:
246
+ for metal_ind in mol.findMetal():
247
+ deltametric_vector += func(mol, w, metal_ind, d, oct=oct,
248
+ catoms=catoms)
249
+ deltametric_vector = np.divide(deltametric_vector, n_met)
250
+ else:
251
+ metal_ind = mol.findMetal()[0]
252
+ deltametric_vector = func(mol, w, metal_ind, d, oct=oct,
253
+ catoms=catoms)
254
+ except:
255
+ print('Error, no metal found in mol object!')
256
+ return False
257
+ return (deltametric_vector)
258
+
259
+
260
+ def construct_property_vector(mol, prop, oct=True, modifier=False):
261
+ # assigns the value of property
262
+ # for atom i (zero index) in mol
263
+ # to position i in returned vector
264
+ # can be used to create weighted
265
+ # graph representations
266
+ # oct - bool, if complex is octahedral, will use better bond checks
267
+ # modifier - dict, used to modify prop vector (e.g. for adding
268
+ # ONLY used with ox_nuclear_charge ox or charge)
269
+ # {"Fe":2, "Co": 3} etc
270
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology',
271
+ 'ox_nuclear_charge', 'size', 'vdwrad', 'group_number', 'polarizability',
272
+ 'bondvalence', 'num_bonds', 'bondvalence_devi', 'bodavrg', 'bodstd', 'charge']
273
+ # note that ident just codes every atom as one, this gives
274
+ # a purely toplogical index. coord gives the number of
275
+ # connecting atom to attom i (similar to Randic index)
276
+ # if not oct:
277
+ # print('NOT using octahedral bonding pattern')
278
+ globs = globalvars()
279
+ prop_dict = dict()
280
+ w = np.zeros(mol.natoms)
281
+ done = False
282
+ if prop not in allowed_strings:
283
+ print(('error, property ' + str(prop) + ' is not a vaild choice'))
284
+ print((' options are ' + str(allowed_strings)))
285
+ return False
286
+ if prop == 'electronegativity':
287
+ prop_dict = globs.endict()
288
+ elif prop == 'size':
289
+ at_keys = list(globs.amass().keys())
290
+ for keys in at_keys:
291
+ values = globs.amass()[keys][2]
292
+ prop_dict.update({keys: values})
293
+ elif prop == 'nuclear_charge':
294
+ at_keys = list(globs.amass().keys())
295
+ for keys in at_keys:
296
+ values = globs.amass()[keys][1]
297
+ prop_dict.update({keys: values})
298
+ elif prop == 'group_number': # Uses number of valence electrons
299
+ # if not modifier:
300
+ at_keys = list(globs.amass().keys())
301
+ for keys in at_keys:
302
+ values = globs.amass()[keys][0]
303
+ prop_dict.update({keys: values})
304
+ # ###### 11/06/2019 -- Adjusted Gval RACs to not adjust on oxidation state. Confounded with O RACs. #####
305
+ # # else:
306
+ # at_keys = globs.amass().keys()
307
+ # for keys in at_keys:
308
+ # values = globs.amass()[keys][3]
309
+ # if keys in modifier.keys():
310
+ # values -= float(modifier[keys]) # assumes oxidation state provided (i.e. Fe(IV))
311
+ # prop_dict.update({keys: values})
312
+ elif prop == 'ox_nuclear_charge':
313
+ if not modifier:
314
+ print('Error, must give modifier with ox_nuclear_charge')
315
+ return False
316
+ else:
317
+ at_keys = list(globs.amass().keys())
318
+ for keys in at_keys:
319
+ values = globs.amass()[keys][1]
320
+ if keys in list(modifier.keys()):
321
+ values -= float(modifier[keys]) # assumes oxidation state provided (i.e. Fe(IV))
322
+ prop_dict.update({keys: values})
323
+ elif prop == 'polarizability':
324
+ prop_dict = globs.polarizability()
325
+ for i, atoms in enumerate(mol.getAtoms()):
326
+ atom_type = atoms.symbol()
327
+ w[i] = prop_dict[atom_type]
328
+ elif prop == 'ident':
329
+ at_keys = list(globs.amass().keys())
330
+ for keys in at_keys:
331
+ prop_dict.update({keys: 1})
332
+ elif prop == 'topology':
333
+ for i, atoms in enumerate(mol.getAtoms()):
334
+ # print('atom # ' + str(i) + " symbol = " + str(atoms.symbol()))
335
+ w[i] = len(mol.getBondedAtomsSmart(i, oct=oct))
336
+ done = True
337
+ elif prop == 'vdwrad':
338
+ prop_dict = globs.vdwrad()
339
+ for i, atoms in enumerate(mol.getAtoms()):
340
+ atom_type = atoms.symbol()
341
+ if atom_type in globs.metalslist():
342
+ w[i] = globs.amass()[atoms.symbol()][2]
343
+ else:
344
+ w[i] = prop_dict[atoms.symbol()]
345
+ done = True
346
+ # for keys in at_keys:
347
+ # prop_dict.update({keys: 1})
348
+ elif prop == 'bondvalence':
349
+ assert len(mol.getAtoms()) == len(mol.bv_dict)
350
+ for i, atoms in enumerate(mol.getAtoms()):
351
+ w[i] = mol.bv_dict[i]
352
+ done = True
353
+ elif prop == 'num_bonds':
354
+ for i, atom in enumerate(mol.getAtoms()):
355
+ if not atom.ismetal():
356
+ w[i] = globs.bondsdict()[atom.symbol()]
357
+ else:
358
+ w[i] = len(mol.getBondedAtomsSmart(i, oct=True))
359
+ done = True
360
+ elif prop == 'bondvalence_devi':
361
+ assert len(mol.getAtoms()) == len(mol.bvd_dict)
362
+ for i, atoms in enumerate(mol.getAtoms()):
363
+ w[i] = mol.bvd_dict[i]
364
+ done = True
365
+ elif prop == 'bodavrg':
366
+ assert len(mol.getAtoms()) == len(mol.bodavrg_dict)
367
+ for i, atoms in enumerate(mol.getAtoms()):
368
+ w[i] = mol.bodavrg_dict[i]
369
+ done = True
370
+ elif prop == 'bodstd':
371
+ assert len(mol.getAtoms()) == len(mol.bodstd_dict)
372
+ for i, atoms in enumerate(mol.getAtoms()):
373
+ w[i] = mol.bodstd_dict[i]
374
+ done = True
375
+ elif prop == 'charge':
376
+ assert len(mol.getAtoms()) == len(mol.charge_dict)
377
+ for i, atoms in enumerate(mol.getAtoms()):
378
+ w[i] = mol.charge_dict[i]
379
+ done = True
380
+ if not done:
381
+ for i, atoms in enumerate(mol.getAtoms()):
382
+ # print('atom # ' + str(i) + " symbol = " + str(atoms.symbol()))
383
+ w[i] = prop_dict[atoms.symbol()]
384
+ return (w)
385
+
386
+
387
+ def find_ligand_autocorrelations_oct(mol, prop, loud, depth, name=False,
388
+ oct=True, custom_ligand_dict=False):
389
+ # this function takes a
390
+ # symmetric (axial == axial,
391
+ # equatorial == equatorial)
392
+ # octahedral complex
393
+ # and returns autocorrelations for
394
+ # the axial an equatorial ligands
395
+ # custom_ligand_dict allows the user to skip the breakdown
396
+ # in cases where 3D geo is not correct/formed
397
+ # custom_ligand_dict.keys() must be eq_ligands_list, ax_ligand_list
398
+ # ax_con_int_list ,eq_con_int_list
399
+ # with types: eq/ax_ligand_list list of mol3D
400
+ # eq/ax_con_int_list list of list/tuple of int e.g, [[1,2] [1,2]]
401
+ if not custom_ligand_dict:
402
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=oct)
403
+ (ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list,
404
+ eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list) = ligand_assign(
405
+ mol, liglist, ligdents, ligcons, loud, name=False)
406
+ else:
407
+ ax_ligand_list = custom_ligand_dict["ax_ligand_list"]
408
+ eq_ligand_list = custom_ligand_dict["eq_ligand_list"]
409
+ ax_con_int_list = custom_ligand_dict["ax_con_int_list"]
410
+ eq_con_int_list = custom_ligand_dict["eq_con_int_list"]
411
+ # count ligands
412
+ n_ax = len(ax_ligand_list)
413
+ n_eq = len(eq_ligand_list)
414
+ # get full ligand AC
415
+ ax_ligand_ac_full = []
416
+ eq_ligand_ac_full = []
417
+ for i in range(0, n_ax):
418
+ if not list(ax_ligand_ac_full):
419
+ ax_ligand_ac_full = full_autocorrelation(ax_ligand_list[i].mol, prop, depth)
420
+ else:
421
+ ax_ligand_ac_full += full_autocorrelation(ax_ligand_list[i].mol, prop, depth)
422
+ ax_ligand_ac_full = np.divide(ax_ligand_ac_full, n_ax)
423
+ for i in range(0, n_eq):
424
+ if not list(eq_ligand_ac_full):
425
+ eq_ligand_ac_full = full_autocorrelation(eq_ligand_list[i].mol, prop, depth)
426
+ else:
427
+ eq_ligand_ac_full += full_autocorrelation(eq_ligand_list[i].mol, prop, depth)
428
+ eq_ligand_ac_full = np.divide(eq_ligand_ac_full, n_eq)
429
+
430
+ # get partial ligand AC
431
+ ax_ligand_ac_con = []
432
+ eq_ligand_ac_con = []
433
+
434
+ for i in range(0, n_ax):
435
+ if not list(ax_ligand_ac_con):
436
+ ax_ligand_ac_con = atom_only_autocorrelation(ax_ligand_list[i].mol, prop, depth, ax_con_int_list[i])
437
+ else:
438
+ ax_ligand_ac_con += atom_only_autocorrelation(ax_ligand_list[i].mol, prop, depth, ax_con_int_list[i])
439
+ ax_ligand_ac_con = np.divide(ax_ligand_ac_con, n_ax)
440
+ for i in range(0, n_eq):
441
+ if not list(eq_ligand_ac_con):
442
+ eq_ligand_ac_con = atom_only_autocorrelation(eq_ligand_list[i].mol, prop, depth, eq_con_int_list[i])
443
+ else:
444
+ eq_ligand_ac_con += atom_only_autocorrelation(eq_ligand_list[i].mol, prop, depth, eq_con_int_list[i])
445
+ eq_ligand_ac_con = np.divide(eq_ligand_ac_con, n_eq)
446
+
447
+ # ax_ligand_ac_con = atom_only_autocorrelation(ax_ligand.mol,prop,depth,ax_con_int)
448
+ # eq_ligand_ac_con = atom_only_autocorrelation(eq_ligand.mol,prop,depth,eq_con_int)
449
+ return ax_ligand_ac_full, eq_ligand_ac_full, ax_ligand_ac_con, eq_ligand_ac_con
450
+
451
+
452
+ def find_ligand_deltametrics_oct(mol, prop, loud, depth, name=False, oct=True, custom_ligand_dict=False):
453
+ # custom_ligand_dict.keys() must be eq_ligands_list, ax_ligand_list
454
+ # ax_con_int_list ,eq_con_int_list
455
+ # with types: eq/ax_ligand_list list of mol3D
456
+ # eq/ax_con_int_list list of list/tuple of int e.g, [[1,2] [1,2]]
457
+ # this function takes a
458
+ # octahedral complex
459
+ # and returns deltametrics for
460
+ # the axial an equatorial ligands
461
+ if not custom_ligand_dict:
462
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=oct)
463
+ (ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list,
464
+ eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list) = ligand_assign(
465
+ mol, liglist, ligdents, ligcons, loud, name=False)
466
+ else:
467
+ ax_ligand_list = custom_ligand_dict["ax_ligand_list"]
468
+ eq_ligand_list = custom_ligand_dict["eq_ligand_list"]
469
+ ax_con_int_list = custom_ligand_dict["ax_con_int_list"]
470
+ eq_con_int_list = custom_ligand_dict["eq_con_int_list"]
471
+ # count ligands
472
+ n_ax = len(ax_ligand_list)
473
+ n_eq = len(eq_ligand_list)
474
+
475
+ # get partial ligand AC
476
+ ax_ligand_ac_con = []
477
+ eq_ligand_ac_con = []
478
+
479
+ for i in range(0, n_ax):
480
+ if not list(ax_ligand_ac_con):
481
+ ax_ligand_ac_con = atom_only_deltametric(ax_ligand_list[i].mol, prop, depth, ax_con_int_list[i])
482
+ else:
483
+ ax_ligand_ac_con += atom_only_deltametric(ax_ligand_list[i].mol, prop, depth, ax_con_int_list[i])
484
+ ax_ligand_ac_con = np.divide(ax_ligand_ac_con, n_ax)
485
+ for i in range(0, n_eq):
486
+ if not list(eq_ligand_ac_con):
487
+ eq_ligand_ac_con = atom_only_deltametric(eq_ligand_list[i].mol, prop, depth, eq_con_int_list[i])
488
+ else:
489
+ eq_ligand_ac_con += atom_only_deltametric(eq_ligand_list[i].mol, prop, depth, eq_con_int_list[i])
490
+ eq_ligand_ac_con = np.divide(eq_ligand_ac_con, n_eq)
491
+
492
+ return ax_ligand_ac_con, eq_ligand_ac_con
493
+
494
+
495
+ def find_mc_eq_ax_deltametrics_oct(mol, prop, loud, depth, name=False, oct=True,
496
+ func=deltametric_catoms):
497
+ # For octahedral complexes only.
498
+ # Calculate mc/ax, mc/eq deltametrics.
499
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=oct)
500
+ (ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list,
501
+ eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list) = ligand_assign(
502
+ mol, liglist, ligdents, ligcons, loud, name=False)
503
+ # shape reduce
504
+ ax_con_list = [x[0] for x in ax_con_list]
505
+ eq_con_list = [x[0] for x in eq_con_list]
506
+ ax_ligand_del_mc = metal_only_deltametric(mol, prop, depth, catoms=ax_con_list, func=func)
507
+ eq_ligand_del_mc = metal_only_deltametric(mol, prop, depth, catoms=eq_con_list, func=func)
508
+ ax_ligand_del_mc = np.divide(ax_ligand_del_mc, len(ax_con_list))
509
+ eq_ligand_del_mc = np.divide(eq_ligand_del_mc, len(eq_con_list))
510
+ return ax_ligand_del_mc, eq_ligand_del_mc
511
+
512
+
513
+ def find_mc_eq_ax_autocorrelation_oct(mol, prop, loud, depth, name=False, oct=True,
514
+ func=autocorrelation_catoms, modifier=False):
515
+ # For octahedral complexes only.
516
+ # Calculate mc/ax, mc/eq deltametrics.
517
+ liglist, ligdents, ligcons = ligand_breakdown(mol, BondedOct=oct)
518
+ (ax_ligand_list, eq_ligand_list, ax_natoms_list, eq_natoms_list, ax_con_int_list,
519
+ eq_con_int_list, ax_con_list, eq_con_list, built_ligand_list) = ligand_assign(
520
+ mol, liglist, ligdents, ligcons, loud, name=False)
521
+ # shape reduce
522
+ ax_con_list = [x[0] for x in ax_con_list]
523
+ eq_con_list = [x[0] for x in eq_con_list]
524
+ ax_ligand_ac_mc = metal_only_autocorrelation(mol, prop, depth, catoms=ax_con_list, func=func, modifier=modifier)
525
+ eq_ligand_ac_mc = metal_only_autocorrelation(mol, prop, depth, catoms=eq_con_list, func=func, modifier=modifier)
526
+ ax_ligand_ac_mc = np.divide(ax_ligand_ac_mc, len(ax_con_list))
527
+ eq_ligand_ac_mc = np.divide(eq_ligand_ac_mc, len(eq_con_list))
528
+ return ax_ligand_ac_mc, eq_ligand_ac_mc
529
+
530
+
531
+ def generate_mc_eq_ax_deltametrics(mol, loud, depth=4, name=False,
532
+ func=deltametric_catoms, NumB=False, Gval=False):
533
+ result_ax_mc = list()
534
+ result_eq_mc = list()
535
+ colnames = []
536
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
537
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
538
+ if Gval:
539
+ allowed_strings += ['group_number']
540
+ labels_strings += ['Gval']
541
+ if NumB:
542
+ allowed_strings += ["num_bonds"]
543
+ labels_strings += ["NumB"]
544
+ for ii, properties in enumerate(allowed_strings):
545
+ ax_ligand_ac_con, eq_ligand_ac_con = find_mc_eq_ax_deltametrics_oct(mol, properties, loud, depth, name,
546
+ func=func)
547
+ this_colnames = []
548
+ for i in range(0, depth + 1):
549
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
550
+ colnames.append(this_colnames)
551
+ result_ax_mc.append(ax_ligand_ac_con)
552
+ result_eq_mc.append(eq_ligand_ac_con)
553
+ results_dictionary = {'colnames': colnames, 'result_mc_ax_del': result_ax_mc,
554
+ 'result_mc_eq_del': result_eq_mc}
555
+ return results_dictionary
556
+
557
+
558
+ def generate_mc_eq_ax_autocorrelation(mol, loud, depth=4, name=False,
559
+ func=autocorrelation_catoms, NumB=False, Gval=False):
560
+ result_ax_mc = list()
561
+ result_eq_mc = list()
562
+ colnames = []
563
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
564
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
565
+ if Gval:
566
+ allowed_strings += ['group_number']
567
+ labels_strings += ['Gval']
568
+ if NumB:
569
+ allowed_strings += ["num_bonds"]
570
+ labels_strings += ["NumB"]
571
+ for ii, properties in enumerate(allowed_strings):
572
+ ax_ligand_ac_con, eq_ligand_ac_con = find_mc_eq_ax_autocorrelation_oct(mol, properties, loud, depth, name,
573
+ func=func)
574
+ this_colnames = []
575
+ for i in range(0, depth + 1):
576
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
577
+ colnames.append(this_colnames)
578
+ result_ax_mc.append(ax_ligand_ac_con)
579
+ result_eq_mc.append(eq_ligand_ac_con)
580
+ results_dictionary = {'colnames': colnames, 'result_mc_ax_ac': result_ax_mc,
581
+ 'result_mc_eq_ac': result_eq_mc}
582
+ return results_dictionary
583
+
584
+
585
+ def generate_all_ligand_autocorrelations(mol, loud, depth=4, name=False, flag_name=False,
586
+ custom_ligand_dict=False, NumB=False, Gval=False):
587
+ # custom_ligand_dict.keys() must be eq_ligands_list, ax_ligand_list
588
+ # ax_con_int_list ,eq_con_int_list
589
+ # with types: eq/ax_ligand_list list of mol3D
590
+ # eq/ax_con_int_list list of list/tuple of int e.g, [[1,2] [1,2]]
591
+ result_ax_full = list()
592
+ result_eq_full = list()
593
+ result_ax_con = list()
594
+ result_eq_con = list()
595
+ colnames = []
596
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
597
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
598
+ if Gval:
599
+ allowed_strings += ['group_number']
600
+ labels_strings += ['Gval']
601
+ if NumB:
602
+ allowed_strings += ["num_bonds"]
603
+ labels_strings += ["NumB"]
604
+ for ii, properties in enumerate(allowed_strings):
605
+ (ax_ligand_ac_full, eq_ligand_ac_full,
606
+ ax_ligand_ac_con, eq_ligand_ac_con) = find_ligand_autocorrelations_oct(mol, properties, loud=loud,
607
+ depth=depth, name=name, oct=True,
608
+ custom_ligand_dict=custom_ligand_dict)
609
+ this_colnames = []
610
+ for i in range(0, depth + 1):
611
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
612
+ colnames.append(this_colnames)
613
+ result_ax_full.append(ax_ligand_ac_full)
614
+ result_eq_full.append(eq_ligand_ac_full)
615
+ result_ax_con.append(ax_ligand_ac_con)
616
+ result_eq_con.append(eq_ligand_ac_con)
617
+ if flag_name:
618
+ results_dictionary = {'colnames': colnames, 'result_ax_full_ac': result_ax_full,
619
+ 'result_eq_full_ac': result_eq_full,
620
+ 'result_ax_con_ac': result_ax_con, 'result_eq_con_ac': result_eq_con}
621
+ else:
622
+ results_dictionary = {'colnames': colnames, 'result_ax_full': result_ax_full, 'result_eq_full': result_eq_full,
623
+ 'result_ax_con': result_ax_con, 'result_eq_con': result_eq_con}
624
+ return results_dictionary
625
+
626
+
627
+ def generate_all_ligand_deltametrics(mol, loud, depth=4, name=False, flag_name=False,
628
+ custom_ligand_dict=False, NumB=False, Gval=False):
629
+ # custom_ligand_dict.keys() must be eq_ligands_list, ax_ligand_list
630
+ # ax_con_int_list ,eq_con_int_list
631
+ # with types: eq/ax_ligand_list list of mol3D
632
+ # eq/ax_con_int_list list of list/tuple of int e.g, [[1,2] [1,2]]
633
+
634
+ result_ax_con = list()
635
+ result_eq_con = list()
636
+ colnames = []
637
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
638
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
639
+ if Gval:
640
+ allowed_strings += ['group_number']
641
+ labels_strings += ['Gval']
642
+ if NumB:
643
+ allowed_strings += ["num_bonds"]
644
+ labels_strings += ["NumB"]
645
+ for ii, properties in enumerate(allowed_strings):
646
+ ax_ligand_ac_con, eq_ligand_ac_con = find_ligand_deltametrics_oct(mol, properties, loud, depth, name, oct=True,
647
+ custom_ligand_dict=custom_ligand_dict)
648
+ this_colnames = []
649
+ for i in range(0, depth + 1):
650
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
651
+ colnames.append(this_colnames)
652
+ result_ax_con.append(ax_ligand_ac_con)
653
+ result_eq_con.append(eq_ligand_ac_con)
654
+ if flag_name:
655
+ results_dictionary = {'colnames': colnames, 'result_ax_con_del': result_ax_con,
656
+ 'result_eq_con_del': result_eq_con}
657
+ else:
658
+ results_dictionary = {'colnames': colnames, 'result_ax_con': result_ax_con, 'result_eq_con': result_eq_con}
659
+ return results_dictionary
660
+
661
+
662
+ def generate_metal_autocorrelations(mol, loud, depth=4, oct=True, flag_name=False,
663
+ modifier=False, NumB=False, Gval=False, allow_multi=False):
664
+ # oct - bool, if complex is octahedral, will use better bond checks
665
+ result = list()
666
+ colnames = []
667
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
668
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
669
+ if Gval:
670
+ allowed_strings += ['group_number']
671
+ labels_strings += ['Gval']
672
+ if NumB:
673
+ allowed_strings += ["num_bonds"]
674
+ labels_strings += ["NumB"]
675
+ for ii, properties in enumerate(allowed_strings):
676
+ metal_ac = metal_only_autocorrelation(mol, properties, depth, oct=oct, modifier=modifier, allow_multi=allow_multi)
677
+ this_colnames = []
678
+ for i in range(0, depth + 1):
679
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
680
+ colnames.append(this_colnames)
681
+ result.append(metal_ac)
682
+ if flag_name:
683
+ results_dictionary = {'colnames': colnames, 'results_mc_ac': result}
684
+ else:
685
+ results_dictionary = {'colnames': colnames, 'results': result}
686
+ return results_dictionary
687
+
688
+
689
+ def generate_metal_deltametrics(mol, loud, depth=4, oct=True, flag_name=False,
690
+ modifier=False, NumB=False, Gval=False, allow_multi=False):
691
+ # oct - bool, if complex is octahedral, will use better bond checks
692
+ result = list()
693
+ colnames = []
694
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
695
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
696
+ if Gval:
697
+ allowed_strings += ['group_number']
698
+ labels_strings += ['Gval']
699
+ if NumB:
700
+ allowed_strings += ["num_bonds"]
701
+ labels_strings += ["NumB"]
702
+ for ii, properties in enumerate(allowed_strings):
703
+ metal_ac = metal_only_deltametric(mol, properties, depth, oct=oct, modifier=modifier, allow_multi=allow_multi)
704
+ this_colnames = []
705
+ for i in range(0, depth + 1):
706
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
707
+ colnames.append(this_colnames)
708
+ result.append(metal_ac)
709
+ if flag_name:
710
+ results_dictionary = {'colnames': colnames, 'results_mc_del': result}
711
+ else:
712
+ results_dictionary = {'colnames': colnames, 'results': result}
713
+ return results_dictionary
714
+
715
+
716
+ def generate_full_complex_autocorrelations(mol, loud,
717
+ depth=4, oct=True,
718
+ flag_name=False, modifier=False,
719
+ use_dist=False, NumB=False, Gval=False, polarizability=False):
720
+ result = list()
721
+ colnames = []
722
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
723
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
724
+ if Gval:
725
+ allowed_strings += ['group_number']
726
+ labels_strings += ['Gval']
727
+ if NumB:
728
+ allowed_strings += ["num_bonds"]
729
+ labels_strings += ["NumB"]
730
+ if polarizability:
731
+ allowed_strings += ["polarizability"]
732
+ labels_strings += ["alpha"]
733
+ for ii, properties in enumerate(allowed_strings):
734
+ metal_ac = full_autocorrelation(mol, properties, depth,
735
+ oct=oct, modifier=modifier,
736
+ use_dist=use_dist)
737
+ this_colnames = []
738
+ for i in range(0, depth + 1):
739
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
740
+ colnames.append(this_colnames)
741
+ result.append(metal_ac)
742
+ if flag_name:
743
+ results_dictionary = {'colnames': colnames, 'results_f_all': result}
744
+ else:
745
+ results_dictionary = {'colnames': colnames, 'results': result}
746
+ return results_dictionary
747
+
748
+
749
+ def generate_atomonly_deltametrics(mol, atomIdx, loud, depth=4, oct=True, NumB=False, Gval=False, polarizability=False):
750
+ # this function gets deltametrics for a molecule starting
751
+ # in one single atom only
752
+ # Inputs:
753
+ # mol - mol3D class
754
+ # atomIdx - int, index of atom3D class
755
+ # loud - bool, print output
756
+ result = list()
757
+ colnames = []
758
+ allowed_strings = ['electronegativity', 'nuclear_charge', 'ident', 'topology', 'size']
759
+ labels_strings = ['chi', 'Z', 'I', 'T', 'S']
760
+ if Gval:
761
+ allowed_strings += ['group_number']
762
+ labels_strings += ['Gval']
763
+ if NumB:
764
+ allowed_strings += ["num_bonds"]
765
+ labels_strings += ["NumB"]
766
+ if polarizability:
767
+ allowed_strings += ["polarizability"]
768
+ labels_strings += ["alpha"]
769
+ # print('The selected connection type is ' + str(mol.getAtom(atomIdx).symbol()))
770
+ for ii, properties in enumerate(allowed_strings):
771
+ atom_only_ac = atom_only_deltametric(mol, properties, depth, atomIdx, oct=oct)
772
+ this_colnames = []
773
+ for i in range(0, depth + 1):
774
+ this_colnames.append(labels_strings[ii] + '-' + str(i))
775
+ colnames.append(this_colnames)
776
+ result.append(atom_only_ac)
777
+ results_dictionary = {'colnames': colnames, 'results': result}
778
+ return results_dictionary