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,415 @@
1
+ from molSimplify.Scripts.io import getlicores, lig_load
2
+ from copy import copy, deepcopy
3
+
4
+ # NOTE: -isomers does not currently support ligands with denticity > 2 or complexes with 3 bidentate molecules
5
+
6
+ # These adjacency matrices represent what an atom at each position can "see."
7
+ # For example, in an octahedral complex, an atom at the 0th position in an
8
+ # octahedral complex can see atoms at positions (1,3,4,5). Used to check
9
+ # whether a given isomer is unique. NOTE: uses python numbering (zero indexed)
10
+ oct_adjacency = {0: (1, 3, 4, 5), 1: (0, 2, 4, 5), 2: (1, 3, 4, 5), 3: (0, 2, 4, 5),
11
+ 4: (0, 1, 2, 3), 5: (0, 1, 2, 3)}
12
+ thd_adjacency = {0: (1, 2, 3), 1: (0, 2, 3), 2: (0, 1, 3), 3: (0, 1, 2)}
13
+ sqp_adjacency = {0: (1, 3), 1: (0, 2), 2: (1, 3), 3: (0, 2)}
14
+ tbp_adjacency = {0: (2, 3, 4), 1: (2, 3, 4), 2: (0, 1), 3: (0, 1), 4: (0, 1)}
15
+ spy_adjacency = {0: (1, 3, 4), 1: (0, 2, 4), 2: (1, 3, 4), 3: (0, 2, 4), 4: (0, 1, 2, 3)}
16
+ pbp_adjacency = {0: (1, 4), 1: (0, 2), 2: (1, 3), 3: (2, 4), 4: (3, 0), 5: (0, 1, 2, 3, 4), 6: (0, 1, 2, 3, 4)}
17
+
18
+ # Core functionality of isomers.py
19
+ # @param args A class containing the user specified input
20
+ # @return collapsed A list of lists, each list contains the args.lig for a unique isomer
21
+
22
+
23
+ def generateisomers(args):
24
+ # Check if this is a non-supported case
25
+ dents = []
26
+ for ligands in args.lig:
27
+ denticity = checkdenticity(ligands)
28
+ dents.append(denticity)
29
+ if max(dents) > 2:
30
+ print('WARNING, -isomers does not support ligand denticities greater than two. Quiting...')
31
+ return []
32
+
33
+ # If supported, run the program
34
+ expanded = expandrepresentation(args)
35
+ permutations = findpermutations(expanded)
36
+ unique_permutations = checkunique(args, permutations)
37
+ isomers = collapserepresentation(args, unique_permutations)
38
+ if args.stereos:
39
+ isomers = generatestereo(isomers)
40
+
41
+ return isomers
42
+
43
+ # Takes the user specified -lig and rewrites it in an explicit form
44
+ # @param args The list of user specified inputs
45
+ # @return expanded The ligand list in expanded form
46
+
47
+
48
+ def expandrepresentation(args):
49
+ expanded_temp = []
50
+ for occ, ligand in enumerate(args.lig):
51
+ occ = int(args.ligocc[occ])
52
+ for duplicate in range(occ):
53
+ expanded_temp.append(ligand)
54
+
55
+ expanded = []
56
+ for counter, ligand in enumerate(expanded_temp):
57
+ if checkdenticity(ligand) == 2:
58
+ expanded.append(ligand+'_alphabond')
59
+ expanded.append(ligand+'_betabond')
60
+ elif checkdenticity(ligand) > 2:
61
+ print(
62
+ 'WARNING, -isomers does not fully support ligand denticities greater than two!')
63
+ expanded.append(ligand)
64
+ else:
65
+ expanded.append(ligand)
66
+ return expanded
67
+
68
+ # Given a list, generates all possible permutations of that list
69
+ # @param lst The list to permute
70
+ # @return master A list of lists, with each specifying a permutation
71
+
72
+
73
+ def findpermutations(lst, master=None):
74
+ if master is None:
75
+ master = []
76
+ for _ in range(len(lst)-1):
77
+ if not master:
78
+ for element in lst:
79
+ master.append([element])
80
+
81
+ master_updated = []
82
+ for permutation in master:
83
+ master_tmp = []
84
+ lst_tmp = copy(lst)
85
+ for element in permutation:
86
+ lst_tmp.remove(element)
87
+ for element in lst_tmp:
88
+ master_tmp.append(permutation+[element])
89
+ master_updated = master_updated + master_tmp
90
+
91
+ master = deepcopy(master_updated)
92
+
93
+ return master
94
+
95
+ # Filters a list of lig lists for permutations which correspond to unique compounds
96
+ #
97
+ # based on the geometry of the metal complex
98
+ #
99
+ # @param args The user specified input
100
+ # @param master Should be left empty and allowed to default to an empty list
101
+ # @return A smaller list of lists, corresponding only to unique compounds
102
+
103
+
104
+ def checkunique(args, permutations):
105
+ adjacency = getadjacency(args.geometry)
106
+ unique_representations = []
107
+ unique_simple_geometries = []
108
+
109
+ for permutation in permutations:
110
+ geometry = []
111
+ for index, ligand in enumerate(permutation):
112
+ visible_indices = adjacency[index]
113
+
114
+ visible_ligands = []
115
+ for i in visible_indices:
116
+ visible_ligands.append(permutation[i])
117
+ visible_ligands.sort()
118
+
119
+ geometry.append([permutation[index]] + visible_ligands)
120
+
121
+ if checkallowedbidentates(permutation, args.geometry):
122
+ geometry.sort()
123
+ if checkincluded(geometry, unique_representations):
124
+ unique_representations.append(geometry)
125
+ unique_simple_geometries.append(permutation)
126
+
127
+ return unique_simple_geometries
128
+
129
+ # Changes the lig list from the expanded representation back to the traditional molsimplify representation
130
+ #
131
+ # Also, filters out compounds which are not actually unique due to symmetry in bidentate ligands
132
+ #
133
+ # @param args The user specified input
134
+ # @param permutations A list of lists. The lig lists in expanded representation to be collapsed
135
+ # @return recheck_unique A further filtered -lig list, back in the standard representation
136
+
137
+
138
+ def collapserepresentation(args, permutations):
139
+
140
+ # First, relabel symmetric ligands
141
+ permutations_tmp = deepcopy(permutations)
142
+ for geo in permutations_tmp:
143
+ for counter, ligand in enumerate(geo):
144
+ if ligand.endswith('_alphabond'):
145
+ name = ligand.split('_')[0]
146
+ if checksymmetric(name):
147
+ geo[counter] = name+'_sym'
148
+ geo[counter+1] = name+'_sym'
149
+ elif ligand.endswith('_betabond'):
150
+ name = ligand.split('_')[0]
151
+ if checksymmetric(name):
152
+ geo[counter] = name+'_sym'
153
+ geo[counter+1] = name+'_sym'
154
+
155
+ recheck_unique = checkunique(args, permutations_tmp)
156
+
157
+ for geo in recheck_unique:
158
+ for counter, ligand in enumerate(geo):
159
+ if ligand.endswith('_alphabond'):
160
+ name = ligand.split('_')[0]
161
+ geo[counter] = name
162
+ del geo[counter+1]
163
+ elif ligand.endswith('_betabond'):
164
+ name = ligand.split('_')[0]
165
+ geo[counter] = name+'_flipped'
166
+ del geo[counter+1]
167
+ elif ligand.endswith('_sym'):
168
+ name = ligand.split('_')[0]
169
+ geo[counter] = name
170
+ del geo[counter+1]
171
+
172
+ return recheck_unique
173
+
174
+ # If requested, generates the stereoisomer of all unique isomers found by isomers.py
175
+ #
176
+ # Stereoisomers are generated by reflecting the ligands over the plane containing ligands 2,4,5 and 6
177
+ # There is no check to determine if the generated "stereoisomer" is unique from the original compound
178
+ #
179
+ # @param collapsed_representation A list of lists specifying all possible isomers. Output by collapserepresentation()
180
+ # @return stereoisomers_Final A list of lists containing twice as many values as collapsed_representation, corresponding to the stereoisomers for each compound.
181
+
182
+
183
+ def generatestereo(collapsed_representation):
184
+ stereoisomers_tmp = deepcopy(collapsed_representation)
185
+
186
+ stereoisomers = []
187
+ for isomer in stereoisomers_tmp:
188
+ stereoisomer = []
189
+ for ligand in isomer:
190
+ if checkdenticity(ligand) == 2:
191
+ if ligand.endswith('_flipped'):
192
+ stereoisomer.append(ligand.split('_')[0]+'_betabond')
193
+ stereoisomer.append(ligand.split('_')[0]+'_alphabond')
194
+ else:
195
+ stereoisomer.append(ligand.split('_')[0]+'_alphabond')
196
+ stereoisomer.append(ligand.split('_')[0]+'_betabond')
197
+ else:
198
+ stereoisomer.append(ligand)
199
+ if len(stereoisomer) == 6:
200
+ stereoisomers.append(stereoisomer)
201
+ else:
202
+ print(
203
+ 'WARNING, isomers.py has detected a non-octahedral complex in stereoisomer generation.')
204
+ print('Stereoisomer generation only supports octahedral complexes!')
205
+
206
+ stereoisomers_final = []
207
+ for isomer in stereoisomers:
208
+ stereo = copy(isomer)
209
+ # flip ligand 1 and ligand 3 to generate a stereoisomer
210
+ stereo[0], stereo[2] = stereo[2], stereo[0]
211
+ # skip rotation if sites 4 and 5 are bonded
212
+ if not stereo[4].endswith('_alphabond') and not stereo[4].endswith('_betabond'):
213
+ # molSimplify can't handle a bidentate ligand at sites 1 and 4, to address this, rotate the compound 90 degrees in the equatorial plane
214
+ stereo[0], stereo[1], stereo[2], stereo[3] = stereo[3], stereo[0], stereo[1], stereo[2]
215
+ stereoisomers_final.append(isomer)
216
+ stereoisomers_final.append(stereo)
217
+
218
+ for stereoisomer in stereoisomers_final:
219
+ for counter, ligand in enumerate(stereoisomer):
220
+ if ligand.endswith('_alphabond'):
221
+ stereoisomer[counter] = ligand.split('_')[0]
222
+ del stereoisomer[counter+1]
223
+ elif ligand.endswith('_betabond'):
224
+ stereoisomer[counter] = ligand.split('_')[0]+'_flipped'
225
+ del stereoisomer[counter+1]
226
+ return stereoisomers_final
227
+
228
+
229
+ # Filters to only allow bidentates in adjacent locations on the metal complex
230
+ #
231
+ # This is enforced by ensuring that bidentates are adjacent in the exoanded -lig list
232
+ #
233
+ # @param simple_geometry A lig list in expanded form.
234
+ # @return allowed Returns a boolean. True if the bidentates are in allowed positions.
235
+ def checkallowedbidentates(simple_geometry, geometry):
236
+ simple_geometry_tmp = copy(simple_geometry)
237
+
238
+ # Check if bidentate is in a position where there's nothing to coordinate to
239
+
240
+ if geometry in ['oct', 'pbp']:
241
+ if simple_geometry[-1].endswith('_alphabond') or simple_geometry[-1].endswith('_betabond'):
242
+ return False
243
+ if geometry in ['tbp']:
244
+ if simple_geometry[0].endswith('_alphabond') or simple_geometry[0].endswith('_betabond'):
245
+ return False
246
+
247
+ for counter, bonds in enumerate(simple_geometry_tmp):
248
+ if counter > 0:
249
+ bond_previous = simple_geometry_tmp[counter - 1]
250
+ else:
251
+ bond_previous = 'None'
252
+ if counter < (len(simple_geometry) - 1):
253
+ bond_next = simple_geometry_tmp[counter + 1]
254
+ else:
255
+ bond_next = 'None'
256
+
257
+ ligand_name = bonds.split('_')[0]
258
+
259
+ if bonds.endswith('_alphabond'):
260
+ if bond_previous.endswith('_betabond') and bond_previous.startswith(ligand_name):
261
+ simple_geometry_tmp[counter] = 'None'
262
+ simple_geometry_tmp[counter - 1] = 'None'
263
+ elif bond_next.endswith('_betabond') and bond_next.startswith(ligand_name):
264
+ simple_geometry_tmp[counter] = 'None'
265
+ simple_geometry_tmp[counter + 1] = 'None'
266
+ else:
267
+ return False
268
+
269
+ elif bonds.endswith('_betabond'):
270
+ if bond_previous.endswith('_alphabond') and bond_previous.startswith(ligand_name):
271
+ simple_geometry_tmp[counter] = 'None'
272
+ simple_geometry_tmp[counter - 1] = 'None'
273
+ elif bond_next.endswith('_alphabond') and bond_next.startswith(ligand_name):
274
+ simple_geometry_tmp[counter] = 'None'
275
+ simple_geometry_tmp[counter + 1] = 'None'
276
+ else:
277
+ return False
278
+ return True
279
+ # Fetches the ligand dictionary and returns the denticity of a ligand
280
+ # @param ligand The name of the ligand, as a string
281
+ # @return dent The denticity of the ligand.
282
+
283
+
284
+ def checkdenticity(ligand):
285
+ ligands_dict = getlicores()
286
+ connecting_atoms = ligands_dict[ligand][2]
287
+ dent = len(connecting_atoms)
288
+ return dent
289
+
290
+ # Fetches the adjacency dictionary (beginning of this script) for a given geometry
291
+ # @param The metal complex geometry, in short form, as a string
292
+ # @return adjacency The adjacency matrix, if it exists. Else, returns None.
293
+
294
+
295
+ def getadjacency(geo):
296
+ if geo == 'oct':
297
+ return oct_adjacency
298
+ elif geo == 'thd':
299
+ return thd_adjacency
300
+ elif geo == 'sqp':
301
+ return sqp_adjacency
302
+ elif geo == 'tbp':
303
+ return tbp_adjacency
304
+ elif geo == 'spy':
305
+ return spy_adjacency
306
+ elif geo == 'pbp':
307
+ return pbp_adjacency
308
+ else:
309
+ print('****************************************************')
310
+ print(('****** WARNING, '+geo+' not supported by -isomers! *****'))
311
+ print('****************************************************')
312
+ return None
313
+
314
+ # Searches through a list and returns the index(es) as which a value occurs
315
+ # @param lst The list to search through
316
+ # @param key The value to search for
317
+ # @retrun indices A list of indices at which key is found
318
+
319
+
320
+ def searchlist(lst, key):
321
+ indices = []
322
+ for counter, element in enumerate(lst):
323
+ if element == key:
324
+ indices.append(counter)
325
+ return indices
326
+
327
+ # Checks if a list is in a list of lists
328
+ # @param geometry The list which may or may not be included
329
+ # @param unique_representations The list of lists to search through
330
+ # @return unique Returns a boolean. True if the list is NOT in the list of lists
331
+
332
+
333
+ def checkincluded(geometry, unique_representations):
334
+ unique_array = []
335
+ unique = False
336
+ if unique_representations:
337
+ for saved_geometry in unique_representations:
338
+ for counter, foo in enumerate(geometry):
339
+ breaker = False
340
+ try:
341
+ for counter2, spam in enumerate(geometry[counter]):
342
+ if saved_geometry[counter][counter2] != geometry[counter][counter2]:
343
+ unique_array.append(True)
344
+ breaker = True
345
+ if breaker:
346
+ break
347
+ if breaker:
348
+ break
349
+ except IndexError:
350
+ pass
351
+
352
+ if len(unique_array) == len(unique_representations):
353
+ unique = True
354
+ else:
355
+ unique = False
356
+ else:
357
+ unique = True
358
+
359
+ return unique
360
+
361
+ # Checks if a ligand is symmetric when it binds a metal
362
+ # @param lig The name of the ligand, as a string
363
+ # @return symmetric Returns a boolean. True if the ligand is symmetric
364
+
365
+
366
+ def checksymmetric(lig):
367
+ symmetric = True
368
+ ligand, emsg = lig_load(lig)
369
+ ligand.convert2mol3D()
370
+ ligands_dict = getlicores()
371
+ connecting_atoms = ligands_dict[lig][2]
372
+
373
+ # Each bonding atom will be represented as a bonding enviroment. This
374
+ # is a list of lists, where each individual list corresponds to atoms
375
+ # a certain number of bonds away from the bonding atom. The
376
+ # bonding_atom_environments variable holds a list of bonding environemnts,
377
+ # one for each bonding atom.
378
+ bonding_atom_environments = []
379
+ for atom in connecting_atoms:
380
+ index = int(atom)
381
+ coordination_spheres = [[index]]
382
+ used_atoms = {index}
383
+
384
+ finding_atoms = True
385
+ while finding_atoms:
386
+ current_sphere = coordination_spheres[-1]
387
+ length = len(coordination_spheres)
388
+
389
+ next_sphere = set([])
390
+ for atoms in current_sphere:
391
+ # get a set containing elements from both sets
392
+ next_sphere = next_sphere | set(ligand.getBondedAtoms(atoms))
393
+
394
+ next_sphere = next_sphere - used_atoms # subtracting sets
395
+ used_atoms = used_atoms | next_sphere
396
+ if list(next_sphere):
397
+ coordination_spheres.append(list(next_sphere))
398
+
399
+ if length == len(coordination_spheres):
400
+ finding_atoms = False
401
+ bonding_atom_environments.append(coordination_spheres)
402
+
403
+ bonding_atom_environments0 = deepcopy(bonding_atom_environments)
404
+ # Change the list of atoms from atom indices to atom names, also sort them
405
+ for counter1, bonding_atoms in enumerate(bonding_atom_environments0):
406
+ for counter2, sphere in enumerate(bonding_atoms):
407
+ for counter3, atom in enumerate(sphere):
408
+ atom = ligand.getAtom(int(atom))
409
+ bonding_atom_environments0[counter1][counter2][counter3] = atom.name
410
+ sphere.sort()
411
+ if bonding_atom_environments0[0] == bonding_atom_environments0[1]:
412
+ symmetric = True
413
+ else:
414
+ symmetric = False
415
+ return symmetric
@@ -0,0 +1,247 @@
1
+ # @file jobgen.py
2
+ # Generates jobscripts for queueing systems
3
+ #
4
+ # Written by Tim Ioannidis for HJK Group
5
+ #
6
+ # Dpt of Chemical Engineering, MIT
7
+
8
+ # Generates jobscripts for SGE queueing system
9
+ # @param args Namespace of arguments
10
+ # @param jobdirs Subdirectories for jobscript placement
11
+
12
+
13
+ def sgejobgen(args, jobdirs):
14
+ # consolidate lists
15
+ jd = []
16
+ for i, s in enumerate(jobdirs):
17
+ if isinstance(s, list):
18
+ for ss in s:
19
+ jd.append(ss)
20
+ else:
21
+ jd.append(s)
22
+ jobdirs = jd
23
+ cpus = '1' # initialize cpus
24
+ # loop over job directories
25
+ for job in jobdirs:
26
+ # form jobscript identifier
27
+ if args.jname:
28
+ jobname = args.jname+str(args.jid)
29
+ # jobname = jobname[:8]
30
+ else:
31
+ jobname = 'job'+str(args.jid)
32
+ args.jid += 1
33
+ output = []
34
+ output.append('#$ -S /bin/bash\n')
35
+ output.append('#$ -N %s\n' % (jobname))
36
+ output.append('#$ -R y\n')
37
+ output.append('#$ -cwd\n')
38
+ if not args.wtime:
39
+ output.append('#$ -l h_rt=168:00:00\n')
40
+ else:
41
+ wtime = args.wtime.split(':')[0]
42
+ wtime = wtime.split('h')[0]
43
+ output.append('#$ -l h_rt='+wtime+':00:00\n')
44
+ if not args.memory:
45
+ output.append('#$ -l h_rss=8G\n')
46
+ else:
47
+ mem = args.memory.split('G')[0]
48
+ output.append('#$ -l h_rss='+mem+'G\n')
49
+ if not args.queue:
50
+ if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
51
+ output.append('#$ -q gpus\n')
52
+ if args.gpus:
53
+ output.append('#$ -l gpus='+args.gpus+'\n')
54
+ else:
55
+ output.append('#$ -l gpus=1\n')
56
+ else:
57
+ output.append('#$ -q cpus\n')
58
+ if args.cpus:
59
+ output.append('#$ -l cpus='+args.cpus+'\n')
60
+ cpus = args.cpus
61
+ else:
62
+ output.append('#$ -l cpus=1\n')
63
+ else:
64
+ output.append('#$ -q '+args.queue+'\n')
65
+ if args.cpus:
66
+ output.append('#$ -l cpus='+args.cpus+'\n')
67
+ cpus = args.cpus
68
+ elif args.gpus:
69
+ output.append('#$ -l gpus='+args.gpus+'\n')
70
+ else:
71
+ output.append('#$ -l gpus=1\n')
72
+ if args.gpus:
73
+ output.append('#$ -pe smp '+args.gpus+'\n')
74
+ elif args.cpus:
75
+ output.append('#$ -pe smp '+args.cpus+'\n')
76
+ else:
77
+ output.append('#$ -pe smp 1\n')
78
+ if args.joption:
79
+ multi_option = args.joption[0].split('-')
80
+ if len(multi_option) > 1:
81
+ args.joption = []
82
+ for option in multi_option[1:]:
83
+ args.joption += ["-" + option]
84
+ for jopt in args.joption:
85
+ output.append(f'# {jopt.strip()}\n')
86
+ if args.modules:
87
+ for mod in args.modules:
88
+ output.append('module load '+mod+'\n')
89
+ if args.gpus:
90
+ output.append('export OMP_NUM_THREADS='+args.gpus+'\n')
91
+ elif args.cpus:
92
+ output.append('export OMP_NUM_THREADS='+args.cpus+'\n')
93
+ else:
94
+ output.append('export OMP_NUM_THREADS=1\n')
95
+ if args.jcommand:
96
+ for com in args.jcommand:
97
+ output.append(com+'\n')
98
+ if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
99
+ tc = False
100
+ if args.jcommand:
101
+ for jc in args.jcommand:
102
+ if 'terachem' in jc:
103
+ tc = True
104
+ if not tc:
105
+ output.append(
106
+ 'terachem terachem_input > $SGE_O_WORKDIR/opttest.out\n')
107
+ output.append('\nsleep 30\n')
108
+ elif args.qccode and ('gam' in args.qccode.lower() or 'qch' in args.qccode.lower()):
109
+ gm = False
110
+ qch = False
111
+ if args.jcommand:
112
+ for jc in args.jcommand:
113
+ if 'rungms' in jc:
114
+ gm = True
115
+ if 'qchem' in jc:
116
+ qch = True
117
+ if not gm and 'gam' in args.qccode.lower():
118
+ output.append('rungms gam.inp '+cpus + ' > gam.out\n')
119
+ elif not qch and 'qch' in args.qccode.lower():
120
+ output.append('qchem qch.inp '+cpus + ' > qch.out\n')
121
+ output.append('\nsleep 30\n')
122
+ elif args.qccode and ('orc' in args.qccode.lower() or 'molc' in args.qccode.lower()):
123
+ orc = False
124
+ molc = False
125
+ if args.jcommand:
126
+ for jc in args.jcommand:
127
+ if 'orca' in jc:
128
+ orc = True
129
+ if 'molcas' in jc:
130
+ molc = True
131
+ if not orc and 'orca' in args.qccode.lower():
132
+ output.append('orca orca.in > orca.out\n')
133
+ elif not molc and 'molc' in args.qccode.lower():
134
+ output.append('pymolcas molcas.input -f\n')
135
+ output.append('\nsleep 30\n')
136
+ else:
137
+ print(
138
+ 'Not supported QC code requested. Please input execution command manually')
139
+ with open(job+'/'+'jobscript', 'w') as f:
140
+ f.writelines(output)
141
+
142
+ # Generates jobscripts for SLURM queueing system
143
+ # @param args Namespace of arguments
144
+ # @param jobdirs Subdirectories for jobscript placement
145
+
146
+
147
+ def slurmjobgen(args, jobdirs):
148
+ # consolidate lists
149
+ jd = []
150
+ for i, s in enumerate(jobdirs):
151
+ if isinstance(s, list):
152
+ for ss in s:
153
+ jd.append(ss)
154
+ else:
155
+ jd.append(s)
156
+ jobdirs = jd
157
+ cpus = '1' # initialize cpus
158
+ # loop over job directories
159
+ for job in jobdirs:
160
+ # form jobscript identifier
161
+ if args.jname:
162
+ jobname = args.jname+str(args.jid)
163
+ jobname = jobname[:8]
164
+ else:
165
+ jobname = 'job'+str(args.jid)
166
+ args.jid += 1
167
+ output = []
168
+ output.append('#!/bin/bash\n')
169
+ output.append('#SBATCH --job-name=%s\n' % (jobname))
170
+ output.append('#SBATCH --output=batch.log\n')
171
+ output.append('#SBATCH --export=ALL\n')
172
+ if not args.wtime:
173
+ output.append('#SBATCH -t 168:00:00\n')
174
+ else:
175
+ wtime = args.wtime.split(':')[0]
176
+ wtime = wtime.split('h')[0]
177
+ output.append('#SBATCH -t '+wtime+':00:00\n')
178
+ if not args.memory:
179
+ output.append('#SBATCH --mem==8G\n')
180
+ else:
181
+ mem = args.memory.split('G')[0]
182
+ output.append('#SBATCH --mem='+mem+'G\n')
183
+ if not args.queue:
184
+ if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
185
+ output.append('#SBATCH --partition=gpus\n')
186
+ else:
187
+ output.append('#SBATCH --partition=cpus\n')
188
+ else:
189
+ output.append('#SBATCH --partition='+args.queue+'\n')
190
+ nod = False
191
+ nnod = False
192
+ if args.joption:
193
+ for jopt in args.joption:
194
+ output.append('#SBATCH '+jopt+'\n')
195
+ if 'nodes' in jopt:
196
+ nod = True
197
+ if 'ntasks' in jopt:
198
+ nnod = True
199
+ if not nod:
200
+ output.append('#SBATCH --nodes=1\n')
201
+ if not nnod:
202
+ output.append('#SBATCH --ntasks-per-node=1\n')
203
+ if args.modules:
204
+ for mod in args.modules:
205
+ output.append('module load '+mod+'\n')
206
+ if args.jcommand:
207
+ for com in args.jcommand:
208
+ output.append(com+'\n')
209
+ if args.qccode and args.qccode in 'terachem TeraChem TERACHEM tc TC Terachem':
210
+ tc = False
211
+ if args.jcommand:
212
+ for jc in args.jcommand:
213
+ if 'terachem' in jc:
214
+ tc = True
215
+ if not tc:
216
+ output.append('terachem terachem_input > tc.out\n')
217
+ elif args.qccode and ('gam' in args.qccode.lower() or 'qch' in args.qccode.lower()):
218
+ gm = False
219
+ qch = False
220
+ if args.jcommand:
221
+ for jc in args.jcommand:
222
+ if 'rungms' in jc:
223
+ gm = True
224
+ if 'qchem' in jc:
225
+ qch = True
226
+ if not gm and 'gam' in args.qccode.lower():
227
+ output.append('rungms gam.inp '+cpus + ' > gam.out\n')
228
+ elif not qch and 'qch' in args.qccode.lower():
229
+ output.append('qchem qch.inp '+cpus + ' > qch.out\n')
230
+ elif args.qccode and ('orc' in args.qccode.lower() or 'molc' in args.qccode.lower()):
231
+ orc = False
232
+ molc = False
233
+ if args.jcommand:
234
+ for jc in args.jcommand:
235
+ if 'orca' in jc:
236
+ orc = True
237
+ if 'molcas' in jc:
238
+ molc = True
239
+ if not orc and 'orca' in args.qccode.lower():
240
+ output.append('orca orca.in > orca.out\n')
241
+ elif not molc and 'molc' in args.qccode.lower():
242
+ output.append('pymolcas molcas.input -f\n')
243
+ else:
244
+ print(
245
+ 'No supported QC code requested. Please input execution command manually')
246
+ with open(job+'/'+'jobscript', 'w') as f:
247
+ f.writelines(output)