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,709 @@
1
+ # @file postmwfn.py
2
+ # Post-processes Multiwfn output
3
+ #
4
+ # Written by Tim Ioannidis for HJK Group
5
+ #
6
+ # Dpt of Chemical Engineering, MIT
7
+
8
+ import math
9
+ import glob
10
+ import os
11
+
12
+ from numpy import cross, dot
13
+ from math import sqrt
14
+
15
+ from molSimplify.Classes.globalvars import (globalvars,
16
+ mybash)
17
+
18
+
19
+ # Gets distance between points
20
+ # @param R1 Point 1
21
+ # @param R2 Point 2
22
+ # @return Distance
23
+
24
+
25
+ def distance(R1, R2):
26
+ d = 0.0
27
+ d += pow(R1[0]-R2[0], 2)
28
+ d += pow(R1[1]-R2[1], 2)
29
+ d += pow(R1[2]-R2[2], 2)
30
+ return sqrt(d)
31
+
32
+ # Gets subset of string between two substrings
33
+ # @param s String to be split
34
+ # @param first First substring
35
+ # @param last Last substring
36
+ # @return Subset of string between substrings
37
+
38
+
39
+ def find_between(s, first, last):
40
+ # returns string between first and last substrings
41
+ s = s.split(first, 1)
42
+ if len(s) > 1:
43
+ s = s[1].split(last, 1)
44
+ return s[0]
45
+ else:
46
+ return ""
47
+
48
+
49
+ # List of metals
50
+ metals = {'Sc': 21, 'Ti': 22, 'V': 23, 'Cr': 24, 'Mn': 25, 'Fe': 26, 'Co': 27, 'Ni': 28, 'Cu': 29,
51
+ 'Y': 39, 'Zr': 40, 'Nb': 41, 'Mo': 42, 'Tc': 43, 'Ru': 44, 'Rh': 45, 'Pd': 46, 'Pt': 78, 'Au': 79, 'In': 49}
52
+
53
+ # Gets distance of Cartesian point to origin
54
+ # @param v Cartesian point
55
+ # @return Distance
56
+
57
+
58
+ def radial(v):
59
+ rsq = v[1]*v[1]
60
+ rsq += v[2]*v[2]
61
+ rsq += v[3]*v[3]
62
+ return math.sqrt(rsq)
63
+
64
+ # Integrate grid
65
+ # @param den Array of points
66
+ # @param dV Volume of differential element
67
+ # @return Integrated quantity
68
+
69
+
70
+ def calc(den, dV):
71
+ integral = 0 # initialize integral
72
+ # loop over all integrating cubes
73
+ for dval in den:
74
+ # Sum values
75
+ integral += dval[0]
76
+ integral = integral*dV
77
+ return integral
78
+
79
+ # Calculate spreads and averages of density and ELF
80
+ # @param den Array of densities
81
+ # @param ELF Array of ELF values
82
+ # @param totel Total number of electrons
83
+ # @param dV Volume of differential element
84
+ # @return Spreads and averages (mean, stdev, skewness)
85
+
86
+
87
+ def spreadcalc(den, ELF, totel, dV):
88
+ Rm = 0 # mean distance = av(r*rho)
89
+ Sp = 0 # spread = standard dev
90
+ Sk = 0 # skewness
91
+ Em = 0 # mean ELF
92
+ ESD = 0 # stdv ELF
93
+ ESk = 0 # skewness ELF
94
+ for i, dval in enumerate(den):
95
+ # sum values
96
+ r = radial(dval)
97
+ Rm += dval[0]*r
98
+ Rm = dV*Rm/totel # normalize
99
+ # calculate spread
100
+ for dval in den:
101
+ r = radial(dval)
102
+ Sp += dval[0]*math.pow(r-Rm, 2)
103
+ Sp = math.sqrt(dV*Sp/totel)
104
+ # calculate skewness
105
+ for dval in den:
106
+ r = radial(dval)
107
+ Sk += dval[0]*math.pow((r-Rm)/Sp, 3)
108
+ Sk = dV*Sk/totel
109
+ for i, dval in enumerate(den):
110
+ # sum values
111
+ Em += dval[0]*ELF[i][0]
112
+ Em = dV*Em/totel # normalize
113
+ # calculate spread
114
+ for i, dval in enumerate(den):
115
+ ESD += dval[0]*math.pow(ELF[i][0]-Em, 2)
116
+ ESD = math.sqrt(dV*ESD/totel)
117
+ # calculate skewness
118
+ for i, dval in enumerate(den):
119
+ ESk += dval[0]*math.pow((ELF[i][0]-Em)/ESD, 3)
120
+ ESk = dV*ESk/totel
121
+ return Rm, Sp, Sk, Em, ESD, ESk
122
+
123
+ # Calculate HELP function from cube
124
+ # @param den Array of points
125
+ # @param ELF ELF values
126
+ # @param dV Volume of differential element
127
+ # @return Integrated HELP
128
+
129
+
130
+ def calcHELP(den, ELF, dV):
131
+ if len(den) != len(ELF):
132
+ exit('ELF and den cube files have not the same dimensions..Exiting.')
133
+ integral = 0 # initialize integral
134
+ # loop over all integrating cubes
135
+ for i, dval in enumerate(den):
136
+ if (dval[0] > 0.001 and ELF[i][0] >= 0.5):
137
+ # Summ values
138
+ integral += dval[0]
139
+ integral = integral*dV
140
+ return integral
141
+
142
+ # Parse cube file
143
+ # @param cubef Name of cube file
144
+ # @return Array of data, volume of differential element
145
+
146
+
147
+ def parsecube(cubef):
148
+ # open and read cube file
149
+ with open(cubef, 'r') as f:
150
+ s = f.read().splitlines()
151
+ params = []
152
+ for i in range(2, 6):
153
+ ss = [_f for _f in s[i].split(' ') if _f]
154
+ for sss in ss:
155
+ params.append(sss)
156
+ # get parameters
157
+ natoms = int(params[0])
158
+ n1 = int(params[4])
159
+ n2 = int(params[8])
160
+ n3 = int(params[12])
161
+ # origin and direction vectors
162
+ r_origin = [float(params[1]), float(params[2]),
163
+ float(params[3])] # UNITS in bohr
164
+ r1 = [float(params[5]), float(params[6]), float(params[7])]
165
+ r2 = [float(params[9]), float(params[10]), float(params[11])]
166
+ r3 = [float(params[13]), float(params[14]), float(params[15])]
167
+ # Calculate differential vector using |(a x b)*c|
168
+ dV = dot(cross(r1, r2), r3)
169
+ # loop over atoms
170
+ atoms = [[0 for x in range(5)] for x in range(natoms)]
171
+ # check for metal (WITH ECPs YOU NEED TO CORRECT ATOMIC NUMBER inside MOLDEN!)
172
+ mfound = False
173
+ rmetal = [atoms[0][2], atoms[0][3], atoms[0][4]] # metal coordinates
174
+ for i in range(6, 6+natoms):
175
+ ss = [_f for _f in s[i].split(' ') if _f]
176
+ for j, sss in enumerate(ss):
177
+ # each atom contains ATOMIC_NO, Charge, X, Y, Z
178
+ atoms[i-6][j] = float(sss)
179
+ if (21 <= atoms[i-6][0] <= 30) or (39 <= atoms[i-6][0] <= 48) or (72 <= atoms[i-6][0] <= 80):
180
+ rmetal = [atoms[i-6][2], atoms[i-6][3],
181
+ atoms[i-6][4]] # metal coordinates
182
+ mfound = True
183
+ break
184
+ # Check for ECPs
185
+ if not mfound:
186
+ for i in range(6, 6+natoms):
187
+ ss = [_f for _f in s[i].split(' ') if _f]
188
+ for j, sss in enumerate(ss):
189
+ # each atom contains ATOMIC_NO, Charge, X, Y, Z
190
+ atoms[i-6][j] = float(sss)
191
+ if (11 <= atoms[i-6][0] <= 20):
192
+ rmetal = [atoms[i-6][2], atoms[i-6][3],
193
+ atoms[i-6][4]] # metal coordinates
194
+ break
195
+ # read density values
196
+ den = [[0.0 for x in range(5)] for x in range(n1*n2*n3)]
197
+ offset = 6+natoms
198
+ summing = 0
199
+ fmax = 0
200
+ # get wfc values
201
+ sv = ''
202
+ for li in range(offset, len(s)):
203
+ sv += ' '.join(s[li].split('\n'))
204
+ val = [_f for _f in sv.split(' ') if _f]
205
+ for i in range(0, n1):
206
+ for j in range(0, n2):
207
+ for k in range(0, n3):
208
+ idx = i*(n2*n3)+j*n3 + k # global index
209
+ X = r_origin[0] + r1[0]*i + r2[0]*j + r3[0]*k # X value
210
+ Y = r_origin[1] + r1[1]*i + r2[1]*j + r3[1]*k # Y value
211
+ Z = r_origin[2] + r1[2]*i + r2[2]*j + r3[2]*k # Z value
212
+ # each element contains density, x, y, z
213
+ if(abs(float(val[idx])) < 1.0E-10):
214
+ den[idx][0] = 0.0
215
+ else:
216
+ den[idx][0] = float(val[idx])
217
+ summing += den[idx][0]
218
+ if abs(den[idx][0]) > fmax:
219
+ fmax = abs(den[idx][0])
220
+ den[idx][1] = X - rmetal[0] # with reference to Metal
221
+ den[idx][2] = Y - rmetal[1]
222
+ den[idx][3] = Z - rmetal[2]
223
+ return den, dV
224
+
225
+ # Calculate wavefunction properties
226
+ # @param denf Density cube file
227
+ # @param elff ELF cube file
228
+ # @return Integrated HELP, number of electrons, spreads
229
+
230
+
231
+ def wfncalc(denf, elff):
232
+ [den, dV] = parsecube(denf)
233
+ totel = calc(den, dV)
234
+ [ELF, dV] = parsecube(elff)
235
+ svars = spreadcalc(den, ELF, totel, dV)
236
+ HELPval = calcHELP(den, ELF, dV)
237
+ return HELPval, totel, svars
238
+
239
+ # Computes alpha and beta densities from total and spin density cubes
240
+ # @param cubefTOT Density cube file
241
+ # @param cubefSPIN Spin density cube file
242
+
243
+
244
+ def cubespin(cubefTOT, cubefSPIN):
245
+ # open and read cube files
246
+ [denT, n, pre] = readden(cubefTOT)
247
+ [denS, n, pre1] = readden(cubefSPIN)
248
+ # compute the difference
249
+ for i in range(0, len(denT)):
250
+ t = denT[i][0]
251
+ s = denS[i][0]
252
+ denT[i][0] = (t + s)/2.0
253
+ denS[i][0] = (t - s)/2.0
254
+ denA = denT # assign by reference
255
+ denB = denS # assign by reference
256
+ j = 0
257
+ with open('denalpha.cub', 'w') as f:
258
+ f.write(pre)
259
+ for i in range(0, len(denA)):
260
+ f.write("%.5e" % denA[i][0] + ' ')
261
+ j += 1
262
+ if (j % 6 == 0 or (i+1) % n == 0):
263
+ f.write('\n')
264
+ j = 0
265
+ with open('denbeta.cub', 'w') as f:
266
+ f.write(pre)
267
+ for i in range(0, len(denB)):
268
+ f.write("%.5e" % denB[i][0] + ' ')
269
+ j += 1
270
+ if (j % 6 == 0 or (i+1) % n == 0):
271
+ f.write('\n')
272
+ j = 0
273
+
274
+ # Parse density cube file
275
+ # @param inputf Density cube file
276
+ # @return Density array, parameters, additional info
277
+
278
+
279
+ def readden(inputf):
280
+ with open(inputf, 'r') as f:
281
+ s = f.read().splitlines()
282
+ params = []
283
+ for i in range(2, 6):
284
+ ss = [_f for _f in s[i].split(' ') if _f]
285
+ for sss in ss:
286
+ params.append(sss)
287
+ # get parameters
288
+ natoms = int(params[0])
289
+ n1 = int(params[4])
290
+ n2 = int(params[8])
291
+ n3 = int(params[12])
292
+ # origin and direction vectors
293
+ r_origin = [float(params[1]), float(params[2]),
294
+ float(params[3])] # UNITS in bohr
295
+ r1 = [float(params[5]), float(params[6]), float(params[7])]
296
+ r2 = [float(params[9]), float(params[10]), float(params[11])]
297
+ r3 = [float(params[13]), float(params[14]), float(params[15])]
298
+ atoms = [[0 for x in range(5)] for x in range(natoms)]
299
+ # check for metal (WITH ECPs YOU NEED TO CORRECT ATOMIC NUMBER in MOLDEN!)
300
+ for i in range(6, 6+natoms):
301
+ ss = [_f for _f in s[i].split(' ') if _f]
302
+ for j, sss in enumerate(ss):
303
+ # each atom contains ATOMIC_NO, Charge, X, Y, Z
304
+ atoms[i-6][j] = float(sss)
305
+ # read density values
306
+ den = [[0.0 for x in range(5)] for x in range(n1*n2*n3)]
307
+ offset = 6+natoms
308
+ summing = 0
309
+ fmax = 0
310
+ pre = ''
311
+ for i in range(0, offset):
312
+ pre += s[i] + '\n'
313
+ # get wfc values
314
+ sv = ''
315
+ for li in range(offset, len(s)):
316
+ sv += ' '.join(s[li].split('\n'))
317
+ val = [_f for _f in sv.split(' ') if _f]
318
+ for i in range(0, n1):
319
+ for j in range(0, n2):
320
+ for k in range(0, n3):
321
+ idx = i*(n2*n3)+j*n3 + k # global index
322
+ X = r_origin[0] + r1[0]*i + r2[0]*j + r3[0]*k # X value
323
+ Y = r_origin[1] + r1[1]*i + r2[1]*j + r3[1]*k # Y value
324
+ Z = r_origin[2] + r1[2]*i + r2[2]*j + r3[2]*k # Z value
325
+ # each element contains density, x, y, z
326
+ den[idx][0] = float(val[idx])
327
+ summing += den[idx][0]
328
+ if abs(den[idx][0]) > fmax:
329
+ fmax = abs(den[idx][0])
330
+ den[idx][1] = X
331
+ den[idx][2] = Y
332
+ den[idx][3] = Z
333
+ return den, n1, pre
334
+
335
+ # Use Multiwfn to generate cube files from molden files
336
+ # @param molf Input molden file
337
+ # @param folder Folder containing runs
338
+ # @param gui GUI flag
339
+ # @param flog Log filename
340
+
341
+
342
+ def getcubes(molf, folder, gui, flog):
343
+ # get Multiwfn
344
+ globs = globalvars()
345
+ Multiwfn = globs.multiwfn
346
+ # analyze results
347
+ flog.write(
348
+ "##################### Generating cube files ######################\n")
349
+ print("##################### Generating cube files ######################\n")
350
+ # loop over folders
351
+ for numi, resf in enumerate(molf):
352
+ resd = os.path.relpath(resf, folder)
353
+ resd = resd.split('.molden')[0]
354
+ resd = resd.replace('/', '_')
355
+ cubedir = folder+'/Cube_files/'
356
+ flog.write('Processing '+resf+'\n')
357
+ print(('Processing ', resf))
358
+ if gui:
359
+ gui.iWtxt.setText('Processing '+resf+'\n'+gui.iWtxt.toPlainText())
360
+ gui.app.processEvents()
361
+ #################################################
362
+ ### generate density cube ###
363
+ inputtxt = '5\n1\n3\n2\n'
364
+ with open('input1', 'w') as f:
365
+ f.write(inputtxt)
366
+ com = Multiwfn+' ' + "'" + resf + "'"+' < input1'
367
+ if not glob.glob(cubedir+resd+'-density.cub'):
368
+ _ = mybash(com)
369
+ os.remove('input1')
370
+ if glob.glob('density.cub'):
371
+ os.rename('density.cub', cubedir+resd+'-density.cub')
372
+ #################################################
373
+ inputtxt = '5\n9\n3\n2\n' # generate ELF
374
+ with open('input1', 'w') as f:
375
+ f.write(inputtxt)
376
+ com = Multiwfn+' ' + "'" + resf + "'"+' < input1'
377
+ if not glob.glob(cubedir+resd+'-ELF.cub'):
378
+ _ = mybash(com)
379
+ os.remove('input1')
380
+ if glob.glob('ELF.cub'):
381
+ os.rename('ELF.cub', cubedir+resd+'-ELF.cub')
382
+ #################################################
383
+ inputtxt = '5\n5\n3\n2\n' # generate spin density
384
+ with open('input1', 'w') as f:
385
+ f.write(inputtxt)
386
+ com = Multiwfn+' ' + "'" + resf + "'" + ' < input1'
387
+ if not glob.glob(cubedir+resd+'-spindensity.cub'):
388
+ _ = mybash(com)
389
+ os.remove('input1')
390
+ if glob.glob('spindensity.cub'):
391
+ os.rename('spindensity.cub', cubedir+resd+'-spindensity.cub')
392
+ #################################################
393
+ if not glob.glob(cubedir+resd+'-denalpha.cub'):
394
+ cubespin(cubedir+resd+'-density.cub', cubedir+resd +
395
+ '-spindensity.cub') # generate spin densities
396
+ if glob.glob('denalpha.cub'):
397
+ os.rename('denalpha.cub', cubedir+resd+'-denalpha.cub')
398
+ os.rename('denbeta.cub', cubedir+resd+'-denbeta.cub')
399
+
400
+ # Calculate wavefunction properties from molden file
401
+ # @param molf Input molden file
402
+ # @param folder Folder containing runs
403
+ # @param gui GUI flag
404
+ # @param flog Log filename
405
+
406
+
407
+ def getwfnprops(molf, folder, gui, flog):
408
+ # analyze results
409
+ flog.write(
410
+ "##################### Getting wavefunction properties ######################\n")
411
+ print("##################### Getting wavefunction properties ######################\n")
412
+ header = "\nFolder HELP (%) Rav RSD RSk ELFav ELFSD ELFSk\n"
413
+ header += "-----------------------------------------------------------------------------------------------------------------------------------------\n"
414
+ # loop over folders
415
+ txt = []
416
+ for numi, resf in enumerate(molf):
417
+ resd = os.path.relpath(resf, folder)
418
+ resd = resd.split('.molden')[0]
419
+ resdp = resd
420
+ resd = resd.replace('/', '_')
421
+ #################################################
422
+ print(('Processing ', resf))
423
+ flog.write('Processing '+resf+'\n')
424
+ if gui:
425
+ gui.iWtxt.setText('Processing '+resd+'\n'+gui.iWtxt.toPlainText())
426
+ gui.app.processEvents()
427
+ wfndir = folder+'/Wfn_files/'
428
+ outfile1 = wfndir+resd+'-HELP.txt'
429
+ outfile2 = wfndir+resd+'-denELF.txt'
430
+ if not glob.glob(outfile1) or not glob.glob(outfile2):
431
+ cubedir = folder + '/Cube_files/'
432
+ denf = cubedir+resd+'-density.cub'
433
+ elff = cubedir+resd+'-ELF.cub'
434
+ HELPpop, totel, svars = wfncalc(denf, elff) # calculate HELP
435
+ with open(outfile1, 'w') as f:
436
+ f.write('HELP: '+str(HELPpop)+' '+str(100*HELPpop/totel)+' %\n')
437
+ with open(outfile2, 'w') as f:
438
+ f.write('Rav: '+str(svars[0])+' RSD: ' +
439
+ str(svars[1])+' RSk: '+str(svars[2]))
440
+ f.write(' ELFav: '+str(svars[3])+' ELF_SD: ' +
441
+ str(svars[4])+' ELF_Sk: '+str(svars[5])+'\n')
442
+ #################################################
443
+ with open(outfile1, 'r') as f:
444
+ sf = f.read()
445
+ with open(outfile2, 'r') as f:
446
+ sff = f.read()
447
+ HELPpop = float([_f for _f in sf.split(None) if _f][1])
448
+ HELPper = float([_f for _f in sf.split(None) if _f][-2])
449
+ sf = [_f for _f in sff.split(None) if _f]
450
+ svars = [float(sf[1]), float(sf[3]), float(sf[5]),
451
+ float(sf[7]), float(sf[9]), float(sf[11])]
452
+ sr = []
453
+ for i, ss in enumerate(svars):
454
+ sr.append("{:10.5f}".format(ss))
455
+ txt.append(resdp.ljust(50)+"{:10.3f}".format(HELPpop).ljust(10)+' ('+"{:4.2f}".format(HELPper)+'%)' +
456
+ sr[0].ljust(10)+sr[1].ljust(10)+sr[2].ljust(10)+sr[3].ljust(10)+sr[4].ljust(11)+sr[5].ljust(10)+'\n')
457
+ text = sorted(txt)
458
+ with open(folder+'/wfnprops.txt', 'w') as f:
459
+ f.write(header+''.join(text))
460
+
461
+ # Calculate charges from molden file
462
+ # @param molf Input molden file
463
+ # @param folder Folder containing runs
464
+ # @param gui GUI flag
465
+ # @param flog Log filename
466
+
467
+
468
+ def getcharges(molf, folder, gui, flog):
469
+ # get Multiwfn
470
+ globs = globalvars()
471
+ Multiwfn = globs.multiwfn
472
+ # analyze results
473
+ header = "\nFolder Hirshfeld VDD Mulliken\n"
474
+ header += "-----------------------------------------------------------------------------------------\n"
475
+ txt = []
476
+ for numi, resf in enumerate(molf):
477
+ resd = os.path.relpath(resf, folder)
478
+ resd = resd.split('.molden')[0]
479
+ resdp = resd
480
+ resd = resd.replace('/', '_')
481
+ # get metal index in molden file
482
+ with open(resf, 'r') as f:
483
+ ss = f.read()
484
+ ss = find_between(ss, 'Atoms', 'GTO')
485
+ ss = ss.splitlines()
486
+ midx = 0 # default
487
+ for sl in ss:
488
+ sll = sl.split(None)
489
+ for met in metals:
490
+ if len(sll) > 1 and met in sll[0]:
491
+ midx = int(sll[1])-1
492
+ break
493
+ #################################################
494
+ outfile1 = folder+'/Charge_files/'+resd+'-chH.txt'
495
+ print(('Processing ', resdp))
496
+ flog.write('Processing '+resdp+'\n')
497
+ if gui:
498
+ gui.iWtxt.setText('Processing '+resf+'\n'+gui.iWtxt.toPlainText())
499
+ gui.app.processEvents()
500
+ # Run multiwfn
501
+ if not glob.glob(outfile1):
502
+ inputtxt = '7\n1\n1\n' # Hirschfeld
503
+ with open('input1', 'w') as f:
504
+ f.write(inputtxt)
505
+ com = Multiwfn+' ' + "'" + resf + "'" + " < input1 > '"+outfile1+"'"
506
+ _ = mybash(com)
507
+ os.remove('input1')
508
+ with open(outfile1, 'r') as f:
509
+ ss = f.read()
510
+ s = find_between(ss, ' of atom 1', 'Atomic dipole')
511
+ hirsch = 'NA'
512
+ if len(s.splitlines()) > midx+1:
513
+ hirscht = s.splitlines()[midx]
514
+ hirschll = hirscht.split(None)
515
+ if len(hirschll) > 2:
516
+ hirsch = "{:5.3f}".format(float(hirschll[-1]))
517
+ #################################################
518
+ outfile2 = folder+'/Charge_files/'+resd+'-chV.txt'
519
+ if not glob.glob(outfile2):
520
+ inputtxt = '7\n2\n1\n' # VDD
521
+ with open('input1', 'w') as f:
522
+ f.write(inputtxt)
523
+ com = Multiwfn+' '+"'" + resf + "'" + " < input1 > '"+outfile2+"'"
524
+ _ = mybash(com)
525
+ os.remove('input1')
526
+ with open(outfile2, 'r') as f:
527
+ ss = f.read()
528
+ s = find_between(ss, 'VDD charge', 'dipole')
529
+ vdd = 'NA'
530
+ if len(s.splitlines()) > midx+1:
531
+ vddt = s.splitlines()[midx]
532
+ vddll = vddt.split(None)
533
+ if len(vddll) > 2:
534
+ vdd = "{:5.3f}".format(float(vddll[-1]))
535
+ #################################################
536
+ outfile3 = folder+'/Charge_files/'+resd+'-chM.txt'
537
+ if not glob.glob(outfile3):
538
+ inputtxt = '7\n5\n1\n' # Mulliken
539
+ with open('input1', 'w') as f:
540
+ f.write(inputtxt)
541
+ com = Multiwfn+' ' + "'" + resf + "'" + " < input1 > '"+outfile3+"'"
542
+ _ = mybash(com)
543
+ os.remove('input1')
544
+ with open(outfile3, 'r') as f:
545
+ ss = f.read()
546
+ s = find_between(ss, 'Population of atoms', 'Total net')
547
+ mull = 'NA'
548
+ if len(s.splitlines()) > midx+2:
549
+ mullt = s.splitlines()[midx+2]
550
+ mulll = mullt.split(None)
551
+ if len(mulll) > 2:
552
+ mull = "{:5.3f}".format(float(mulll[-1]))
553
+ txt.append(resdp.ljust(60)+hirsch.ljust(10) +
554
+ vdd.ljust(10)+mull.ljust(10)+'\n')
555
+ text = sorted(txt)
556
+ with open(folder+'/charges.txt', 'w') as f:
557
+ f.write(header+''.join(text))
558
+
559
+ # Calculate delocalization indices from molden file
560
+ # @param molf Input molden file
561
+ # @param folder Folder containing runs
562
+ # @param gui GUI flag
563
+ # @param flog Log filename
564
+
565
+
566
+ def deloc(molf, folder, gui, flog):
567
+ # get multiwfn exec
568
+ globs = globalvars()
569
+ Multiwfn = globs.multiwfn
570
+ # get results files
571
+ header = "\nFile No Attr Loc-indx Tot-Deloc\n"
572
+ header += "-------------------------------------------------------------------------------------------------------\n"
573
+ text = []
574
+ indexin = []
575
+ mindices = []
576
+ skipm = False
577
+ # loop over molden files
578
+ for numi, resf in enumerate(molf):
579
+ indxst = ''
580
+ resd = resf.rsplit('/', 1)[0]
581
+ moln = resf.rsplit('/', 1)[-1]
582
+ moln = moln.split('.molden')[0]
583
+ resd = os.path.relpath(resd, folder)
584
+ resd = resd.replace('/', '_')+'_'+moln
585
+ print(resd)
586
+ outfile = folder+'/Deloc_files/'+resd+'-deloc.txt'
587
+ print(('Processing '+resd+' and writing output to '+outfile))
588
+ flog.write('Processing '+resd+'\n')
589
+ if gui:
590
+ gui.iWtxt.setText('Processing '+resd+'\n'+gui.iWtxt.toPlainText())
591
+ gui.app.processEvents()
592
+ # get coordinates of metal
593
+ with open(resf, 'r') as f:
594
+ sm = f.read().splitlines()
595
+ # get indices of heavy elements
596
+ found = False
597
+ for met in metals:
598
+ if not found:
599
+ ml = [line for line in sm if met in line]
600
+ if len(ml) > 0 and not found:
601
+ if 'Title' in ml[0] and len(ml) > 1:
602
+ mlll = ml[1].split(None)
603
+ else:
604
+ mlll = ml[0].split(None)
605
+ if len(mlll) > 2:
606
+ found = True
607
+ if len(ml) == 0:
608
+ print(
609
+ 'WARNING:No metal found, defaulting to 1st atom for relative properties..')
610
+ skipm = True
611
+ ml = [sm[4]]
612
+ mlll = [_f for _f in ml[0].split(None) if _f]
613
+ mindex = mlll[1]
614
+ mindices.append(mindex)
615
+ mcoords = [float(mlll[3]), float(mlll[4]), float(mlll[5])]
616
+ parse, skipc = False, False
617
+ # Run multiwfn
618
+ if not glob.glob(outfile):
619
+ inputtxt = '17\n1\n1\n2\n4\n'
620
+ with open('input0', 'w') as f:
621
+ f.write(inputtxt)
622
+ com = Multiwfn+' ' + "'" + resf + "'" + " < input0 > '"+outfile+"'"
623
+ tt = mybash(com)
624
+ print(tt)
625
+ # check if seg fault
626
+ skipc = False
627
+ if 'Segmentation' in tt or 'core dumped' in tt:
628
+ skipc = True
629
+ # read outputfile and check
630
+ with open(outfile, 'r') as f:
631
+ ssf = f.read()
632
+ # if error redo
633
+ if ('Note: There are attractors having very low ' in ssf or 'Hint' in ssf):
634
+ inputtxt = '17\n1\n1\n2\n3\n4\n'
635
+ with open('input0', 'w') as f:
636
+ f.write(inputtxt)
637
+ tt = mybash(com)
638
+ print(tt)
639
+ os.remove('input0')
640
+ # check if good
641
+ with open(outfile, 'r') as f:
642
+ ssf = f.read()
643
+ parse = False
644
+ if 'Total localization' in ssf:
645
+ parse = True
646
+ ################
647
+ # parse output #
648
+ ################
649
+ if not skipc and parse:
650
+ with open(outfile, 'r') as f:
651
+ s = f.read()
652
+ # get basins
653
+ if ('The attractors after clustering' in s):
654
+ st = find_between(s, 'Index Average', 'The number')
655
+ sst = [_f for _f in st.splitlines()[1:] if _f]
656
+ else:
657
+ st = find_between(s, 'Attractor', 'Detecting')
658
+ sst = [_f for _f in st.splitlines()[1:] if _f]
659
+ basidx = [] # list with metal attractors
660
+ attlist = [] # List with neighboring attractors
661
+ att_thrsd = 2.4 # Angstrom
662
+ att_range = 1.0 # Angstrom
663
+ for line in sst:
664
+ xyzcoords = line.split(None)
665
+ if (len(xyzcoords) > 3):
666
+ xyzc = [float(xyzcoords[1]), float(
667
+ xyzcoords[2]), float(xyzcoords[3])]
668
+ if distance(mcoords, xyzc) < att_range:
669
+ basidx.append(xyzcoords[0])
670
+ indxst += mindex+'\n'
671
+ elif (distance(mcoords, xyzc) > att_range and distance(mcoords, xyzc) < att_thrsd):
672
+ attlist.append(int(xyzcoords[0]))
673
+ # get total number of basins
674
+ if not skipm:
675
+ dd = int(find_between(
676
+ s, 'matrix for basin', '...').split(None)[-1])
677
+ # get delocalization matrix
678
+ sdel = find_between(
679
+ s, 'Total delocalization index matrix', 'Total localization')
680
+ sdeloc = sdel.splitlines()[1:]
681
+ deloc = []
682
+ for bidx in basidx:
683
+ [a, b] = divmod(int(bidx)-1, 5)
684
+ ll = sdeloc[a*(dd+1)+1:(a+1)*(dd+1)]
685
+ for ii, l in enumerate(ll):
686
+ if (ii+1 in attlist):
687
+ lf = [_f for _f in l.split(None) if _f]
688
+ deloc.append(float(lf[b+1]))
689
+ # get localization index
690
+ s = find_between(s, 'Total localization index:', '==')
691
+ loc = []
692
+ for bidx in basidx:
693
+ ss = s.split(bidx+':')[-1]
694
+ ss = ss.split(None)
695
+ loc.append(float(ss[0]))
696
+ if (len(attlist) == 0):
697
+ tdeloc = 0.0
698
+ else:
699
+ tdeloc = sum(deloc)/len(attlist)
700
+ tloc = sum(loc)
701
+ tt = resd.ljust(70)+str(len(basidx)).ljust(6)+"{:10.3f}".format(
702
+ tloc).ljust(14)+"{:10.3f}".format(tdeloc).ljust(10)+'\n'
703
+ text.append(tt)
704
+ indexin.append(indxst)
705
+ # sort alphabetically and print
706
+ text = sorted(text)
707
+ with open(folder+'/deloc_res.txt', 'w') as f:
708
+ f.write(header+''.join(text))
709
+ print("\n##################### Deloc indices are ready ######################\n")