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,631 @@
1
+ # @file dbinteract.py
2
+ # Interacts with databases for similarity searches and screening.
3
+ #
4
+ # Written by Tim Ioannidis for HJK Group
5
+ #
6
+ # Dpt of Chemical Engineering, MIT
7
+
8
+
9
+ import os
10
+ import sys
11
+ import re
12
+ import shutil
13
+ import string
14
+ try:
15
+ import pymol
16
+ except ImportError:
17
+ pass
18
+ try:
19
+ from openbabel import openbabel # version 3 style import
20
+ except ImportError:
21
+ import openbabel # fallback to version 2
22
+
23
+ from molSimplify.Classes.globalvars import (amassdict,
24
+ glob,
25
+ globalvars,
26
+ mybash)
27
+ from molSimplify.Scripts.io import plugin_defs
28
+
29
+
30
+ def float_from_str(txt):
31
+ numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?'
32
+ rx = re.compile(numeric_const_pattern, re.VERBOSE)
33
+ float_arr = rx.findall(txt)
34
+ if not len(float_arr):
35
+ return txt
36
+ else:
37
+ return float_arr[0]
38
+
39
+
40
+ # Setup database
41
+ # @param dbselect Name of database
42
+ # @return sdf and fs databases
43
+ def setupdb(dbselect):
44
+ globs = globalvars()
45
+ dbdir = os.path.relpath(globs.chemdbdir) + '/'
46
+ # get files in directory
47
+ dbfiles = os.listdir(dbdir)
48
+ # search for db files
49
+ dbmatches = [dbf for dbf in dbfiles if dbselect.lower() in dbf.lower()]
50
+ dbsdf = [dbm for dbm in dbmatches if '.sdf' in dbm]
51
+ dbfs = [dbm for dbm in dbmatches if '.fs' in dbm]
52
+ # print('thefile list' + str(dbfiles))
53
+ if len(dbsdf) == 0:
54
+ print((dbselect + ' sdf database file missing from ' + dbdir +
55
+ '. Please make sure file ' + dbselect + '.sdf is there..'))
56
+ dbf1 = False
57
+ else:
58
+ dbf1 = dbdir + dbsdf[0]
59
+ if len(dbfs) == 0:
60
+ print((dbselect + ' fastsearch database file missing from ' + dbdir +
61
+ '. Please make sure file ' + dbselect + '.fs is there, it speeds up search significantly..'))
62
+ dbf2 = False
63
+ else:
64
+ dbf2 = dbdir + dbfs[0]
65
+ return [dbf1, dbf2]
66
+
67
+
68
+ # Print prebuilt openbabel filters
69
+ # @return String of prebuilt openbabel filters
70
+ def obfilters():
71
+ s = " A list of available filters for Database searching is listed below.\n"
72
+ s += """
73
+ -abonds Number of aromatic bonds
74
+ -atoms Number of atoms
75
+ -bonds Number of bonds
76
+ -cansmi Canonical SMILES
77
+ -cansmiNS Canonical SMILES without isotopes or stereo
78
+ -dbonds Number of double bonds
79
+ -formula Chemical formula
80
+ -HBA1 Number of Hydrogen Bond Acceptors 1 (JoelLib)
81
+ -HBA2 Number of Hydrogen Bond Acceptors 2 (JoelLib)
82
+ -HBD Number of Hydrogen Bond Donors (JoelLib)
83
+ -InChI IUPAC InChI identifier
84
+ -InChIKey InChIKey
85
+ -L5 Lipinski Rule of Five
86
+ -logP octanol/water partition coefficient
87
+ -MR molar refractivity
88
+ -MW Molecular Weight filter
89
+ -nF Number of Fluorine Atoms
90
+ -s SMARTS filter
91
+ -sbonds Number of single bonds
92
+ -smarts SMARTS filter
93
+ -tbonds Number of triple bonds
94
+ -title For comparing a molecule's title
95
+ -TPSA topological polar surface area
96
+ """
97
+ s += "\n Similarity search can be performed using 4 fingerprints. Available fingerprints are:\n"
98
+ s += """
99
+ -FP2 Indexes linear fragments up to 7 atoms. (Default)
100
+ -FP3 SMARTS patterns specified in the file /usr/local/share/openbabel/*/patterns.txt
101
+ -FP4 SMARTS patterns specified in the file /usr/local/share/openbabel/*/SMARTS_InteLigand.txt
102
+ -MACCS SMARTS patterns specified in the file /usr/local/share/openbabel/*/MACCS.txt
103
+ """
104
+ return s
105
+
106
+
107
+ # Parse screening input from arguments
108
+ # @param args Argument namespace
109
+ # @return String of screening options
110
+ def checkscr(args):
111
+ scr = '"'
112
+ # if args.dbsmarts:
113
+ # scr += "s'"+args.dbsmarts+"' &"
114
+ if args.dbatoms:
115
+ nts = args.dbatoms.split('<')
116
+ print('adding atom constraints')
117
+ if nts[0] != '':
118
+ scr += " atoms>" + nts[0] + " &"
119
+ if nts[1] != '':
120
+ scr += " atoms<" + nts[1] + " &"
121
+ if args.dbbonds:
122
+ nts = args.dbbonds.split('<')
123
+ if nts[0] != '':
124
+ scr += " bonds>" + nts[0] + " &"
125
+ if nts[1] != '':
126
+ scr += " bonds<" + nts[1] + " &"
127
+ if args.dbarbonds:
128
+ nts = args.dbarbonds.split('<')
129
+ if nts[0] != '':
130
+ scr += " abonds>" + nts[0] + " &"
131
+ if nts[1] != '':
132
+ scr += " abonds<" + nts[1] + " &"
133
+ if args.dbsbonds:
134
+ nts = args.dbsbonds.split('<')
135
+ if nts[0] != '':
136
+ scr += " sbonds>" + nts[0] + " &"
137
+ if nts[1] != '':
138
+ scr += " sbonds<" + nts[1] + " &"
139
+ if args.dbmw:
140
+ nts = args.dbmw.split('<')
141
+ if nts[0] != '':
142
+ scr += " MW>" + nts[0] + " &"
143
+ if nts[1] != '':
144
+ scr += " MW<" + nts[1] + " &"
145
+ if scr == '"':
146
+ scr = ''
147
+ else:
148
+ scr = scr[:-2] + '"'
149
+ return scr
150
+
151
+
152
+ # Substructure search
153
+ # @param smi Reference SMILES string
154
+ # @param nmols Number of hits desired
155
+ # @param dbselect Database to be searched
156
+ # @param finger Fingerprint to be used
157
+ # @param squery Filters to be applied
158
+ # @param args Argument namespace
159
+ # @return Filename of screening results
160
+ def getsimilar(smi, nmols, dbselect, finger, squery, args):
161
+ # get database files
162
+ [dbsdf, dbfs] = setupdb(dbselect)
163
+ print(('database set up :' + str(dbsdf) + ' || ' + str(dbfs)))
164
+ print(('Finding results similar, comparing to ' + smi))
165
+
166
+ obab = 'obabel'
167
+ if dbfs and args.dbfs:
168
+ com = obab + ' ' + dbfs + ' ' + 'simres.smi -d -xf' + \
169
+ finger + ' -s"' + smi + '" -al' + nmols
170
+ else:
171
+ mybash(obab + ' -isdf ' + dbsdf + ' -osdf -O tmp.sdf -d')
172
+ com = obab + ' tmp.sdf -O simres.smi -xf' + finger + ' -s"' + smi + '"'
173
+ # perform search using bash commandline
174
+ print('Performing substructure search:')
175
+ print(('running: ' + str(com)))
176
+ res = mybash(com)
177
+ print(('res = ' + str(res)))
178
+ print(('number of SMILES returned : ' + str(mybash('cat simres.smi | wc -l'))))
179
+
180
+ if os.path.isfile('tmp.sdf'):
181
+ os.remove('tmp.sdf')
182
+ shutil.copy('simres.smi', 'initial.smi')
183
+ if args.dbmaxsmartsmatches:
184
+ print('Applying filters: inside get similar')
185
+ com = obab + " -ismi simres.smi -osmi -O simres.smi -h --filter " + squery
186
+ print(('running: ' + str(com)))
187
+ mybash(com)
188
+ print(('number of lines in simres.smi: ' +
189
+ str(mybash('cat simres.smi | wc -l'))))
190
+
191
+ # com = obab+" -ismi simres.smi -osmi -O simres.smi -d --filter 'nsmartsmatches<="+args.dbmaxsmartsmatches+"'"
192
+ # print('running: '+ str(com))
193
+
194
+ # res = mybash(com)
195
+ # print('number of lines in simres.smi after dxbsmartmatches: '+str(mybash('cat simres.smi | wc -l')))
196
+
197
+ # print res
198
+ shutil.copy('simres.smi', 'afterfilteringsmarts.smi')
199
+ # check output and print error if nothing was found
200
+ if ('errors' in res):
201
+ ss = 'No matches were found in DB. Log info:\n' + res
202
+ print(ss)
203
+ return ss, True
204
+ else:
205
+ return 'simres.smi', False
206
+
207
+
208
+ # Strip salts from list of SMILES results
209
+ #
210
+ # Performs text matching
211
+ # @param fname Filename of screening results
212
+ def stripsalts(fname):
213
+ acc0 = ['H', 'B', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I', 'Si']
214
+ acc1 = ['O-', 'F-', 'Cl-', 'Br-', 'I-', 'C@@H', 'C@H', 'N+', 'C@']
215
+ rejected = ['@@H', '@H', "/", "\\"]
216
+ accepted = acc0 + acc1
217
+ if glob.glob(fname):
218
+ with open(fname, 'r') as f:
219
+ s = f.read().splitlines()
220
+ else:
221
+ print(('not found fname ' + str(fname)))
222
+
223
+ return 0
224
+ with open(fname, 'w') as f:
225
+ for i, ss in enumerate(s):
226
+ ss = ss.split('\t')[0]
227
+ for r in rejected:
228
+ if r in ss:
229
+ ss = ss.replace(r, '')
230
+ ls = ss.split('[')
231
+ for li in ls:
232
+ if ']' in li:
233
+ lq = li.split(']')[0]
234
+ if lq not in accepted:
235
+ lq0 = '.[' + lq + ']'
236
+ lq1 = '[' + lq + '].'
237
+ if lq0 in ss:
238
+ ss = ss.replace(lq0, '')
239
+ elif lq1 in ss:
240
+ ss = ss.replace(lq1, '')
241
+ ss = ss.split('.')[0]
242
+ f.write(ss + '\n')
243
+ return 0
244
+
245
+
246
+ # Get list of unique elements in SMILES string
247
+ #
248
+ # Performs text matching
249
+ # @param smistr SMILES string
250
+ # @return List of elements
251
+ def getels(smistr):
252
+ els = []
253
+ els1 = ['H', 'B', 'C', 'N', 'O', 'F', 'K', 'P', 'S', 'V', 'Y', 'I']
254
+ els2 = ['He', 'Li', 'Be', 'Na', 'Al', 'Si', 'Cl', 'Ar', 'Ca', 'Ti', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga',
255
+ 'Ge', 'As', 'Se', 'se', 'Br', 'Kr', 'Rb', 'Sr', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In',
256
+ 'Sn', 'Sb', 'Te', 'Xe']
257
+ for char in (string.punctuation + string.digits):
258
+ smistr = smistr.replace(char, '')
259
+ smistr = list(smistr[::-1])
260
+ i = 0
261
+ while i < len(smistr):
262
+ if smistr[i].upper() in els1 and smistr[i].upper() not in els:
263
+ els.append(smistr[i].upper())
264
+ elif i < len(smistr) - 1:
265
+ if smistr[i + 1] + smistr[i] in els2:
266
+ if smistr[i + 1] + smistr[i] not in els:
267
+ els.append(smistr[i + 1] + smistr[i])
268
+ smistr[i + 1] = ''
269
+ i = i + 1
270
+ return els
271
+
272
+
273
+ # Filters screening results based on list of allowed elements
274
+ #
275
+ # Performs text matching
276
+ # @param fname Filename of screening results
277
+ # @param allowedels List of allowed elements
278
+ def checkels(fname, allowedels):
279
+ print(('Filtering by allowed elements:' + str(allowedels)))
280
+ if glob.glob(fname):
281
+ with open(fname, 'r') as f:
282
+ s = f.read().splitlines()
283
+ else:
284
+ return 0
285
+ with open(fname, 'w') as f:
286
+ nf = 0
287
+ for i, ss in enumerate(s):
288
+ ss = ss.split('\t')[0]
289
+ els = getels(ss)
290
+ flag = False
291
+ for el in els:
292
+ if el not in allowedels:
293
+ flag = True
294
+ # print(el)
295
+ if not flag:
296
+ f.write(ss + '\n')
297
+ nf = nf + 1
298
+ print(('Element filter returns', str(nf), 'results'))
299
+ return 0
300
+
301
+
302
+ # Maximal dissimilarity search
303
+ #
304
+ # Uses a greedy algorithm that maximizes sums of Tanimoto distances with all elements picked
305
+ #
306
+ # Results are written into dissimres.smi file.
307
+ # @param outf Filename containing SMILES strings to be processed
308
+ # @param n Number of dissimilar molecules required
309
+ def dissim(outf, n):
310
+ obab = 'obabel'
311
+
312
+ # clone hitlist file
313
+ hit_list_path = "hitlist.smi"
314
+
315
+ with open(outf) as f:
316
+ smiles_list = f.readlines()
317
+ with open(hit_list_path, 'w') as f:
318
+ f.writelines(smiles_list)
319
+
320
+ # generate fs of original hit list
321
+ mybash(obab + ' -ismi ' + hit_list_path + ' -osdf -O tmp.sdf')
322
+ mybash(obab + ' tmp.sdf -ofs')
323
+ # number of hits
324
+ numcpds = mybash('obabel tmp.sdf -onul')
325
+ numcpds = int(numcpds.split(None)[0])
326
+ # pick first element of list
327
+ mybash('obabel tmp.sdf -O 1.smi -f 1 -l 1')
328
+ del smiles_list[0]
329
+ with open(hit_list_path, 'w') as f:
330
+ f.writelines(smiles_list)
331
+ # recompute the fs and number of hits parameters
332
+ numcpds += -1 # decrease number of hits
333
+ mybash(obab + ' -ismi ' + hit_list_path + ' -osdf tmp.sdf')
334
+ mybash(obab + ' tmp.sdf -ofs')
335
+
336
+ print('Performing dissimilarity search:')
337
+ mostdissim = []
338
+ if n > 1:
339
+ # find most dissimilar structure
340
+ for i in range(n - 1):
341
+
342
+ # initialize list of total similarities
343
+ simsum = [0] * numcpds
344
+ # compute total similarity of each dissimilar structure with hit list
345
+ for j in range(i + 1):
346
+ a = mybash('obabel ' + str(j + 1) + '.smi tmp.sdf -ofpt')
347
+ a = a.splitlines()
348
+ a = [s.split('= ') for s in a]
349
+ a = [item for sublist in a for item in sublist]
350
+ aa = []
351
+ for k in a:
352
+ try:
353
+ aa.append(float(k))
354
+ except ValueError:
355
+ pass
356
+ a = aa
357
+ simsum = [x + y for x, y in zip(simsum, a)]
358
+ # pick most dissimilar structure by greedily minimizing total similarity
359
+ mostdissim = simsum.index(min(simsum))
360
+ mybash('obabel tmp.sdf -O ' + str(i + 2) + '.smi -f ' +
361
+ str(mostdissim + 1) + ' -l' + str(mostdissim + 1))
362
+
363
+ # remove most dissimilar from the list and re-write the smi file
364
+ del smiles_list[mostdissim]
365
+ with open(hit_list_path, 'w') as f:
366
+ f.writelines(smiles_list)
367
+
368
+ # recompute the fs and number of hits parameters
369
+ numcpds += -1 # decrease number of hits
370
+ mybash(obab + ' -ismi ' + hit_list_path + ' -osdf tmp.sdf')
371
+ mybash(obab + ' tmp.sdf -ofs')
372
+
373
+ # combine results into one file
374
+ with open('dissimres.smi', 'w') as f:
375
+ for i in range(n):
376
+ with open(str(i + 1) + '.smi', 'r') as ff:
377
+ s = ff.read().splitlines()
378
+ f.write(s[0] + '\n')
379
+ os.remove(str(i + 1) + '.smi')
380
+ return 0
381
+
382
+
383
+ # Matches initial SMARTS and computes connection atoms
384
+ # @param smarts SMARTS string
385
+ # @param outf Filename containing SMILES strings
386
+ # @param catoms Connection atoms of SMARTS string
387
+ def matchsmarts(smarts, outf, catoms, args):
388
+ sm = openbabel.OBSmartsPattern()
389
+ print('---Test for developer version----')
390
+ sm.Init(smarts)
391
+ print(('smart is:', smarts))
392
+ current_path = os.getcwd()
393
+ print(('current path:', current_path))
394
+ print(('file open:', outf))
395
+ with open(outf, 'r') as f:
396
+ s = f.read().splitlines()
397
+
398
+ with open(outf, 'w') as f:
399
+ # print('in file is:', s)
400
+ moll = openbabel.OBMol() # add
401
+ obConversion = openbabel.OBConversion() # add
402
+ obConversion.SetInAndOutFormats("smi", "smi") # add
403
+ # print('!!!s:', s)
404
+ # Set practically infinite size limit
405
+ max_atoms = sys.maxsize
406
+ if args.dbatoms: # Overwrite max_atoms if dbatoms is given
407
+ max_atoms = int(float_from_str(args.dbatoms))
408
+ for i, mol in enumerate(s):
409
+ obConversion.ReadString(moll, mol) # add
410
+ sm.Match(moll)
411
+ smm = list(sm.GetUMapList())
412
+ if 0 < len(smm) and len(mol) < max_atoms:
413
+ print(('#:', i))
414
+ print(('mol current:', mol))
415
+ print(('smm current', smm, len(smm)))
416
+ print(('catoms:', catoms))
417
+ print(('!!!dbatoms:', max_atoms))
418
+ pmatch = smm[0]
419
+ cc = ''
420
+ for at in catoms:
421
+ att = at - 1 # indexing
422
+ cc += str(pmatch[att]) + ','
423
+ # if i < nres:
424
+ f.write(mol + ' ' + cc[:-1] + '\n')
425
+ # f.write(s[i]+'\n')
426
+ else:
427
+ pass
428
+ return 0
429
+
430
+
431
+ # Main driver for database search
432
+ # @param rundir Run directory
433
+ # @param args Argument namespace
434
+ # @param globs Global variables
435
+ def dbsearch(rundir, args, globs):
436
+ cwd = os.getcwd()
437
+ flag = False
438
+
439
+ obab = 'obabel'
440
+ # in any case do similarity search over indexed db #
441
+ outf = args.dbfname if args.dbfname else 'simres.smi' # output file
442
+ # convert to SMILES/SMARTS if file
443
+ if not args.dbbase:
444
+ if args.gui:
445
+ from molSimplify.Classes.mWidgets import mQDialogWarn
446
+ qqb = mQDialogWarn('Warning', "No database file found within " +
447
+ globs.chemdbdir + '. Search not possible.')
448
+ qqb.setParent(args.gui.DBWindow)
449
+ print(("No database file found within " +
450
+ globs.chemdbdir + '. Search not possible.'))
451
+ return True
452
+ # if args.dbsim:
453
+ # print('similarity searching')
454
+ # if '.smi' in args.dbsim:
455
+ # if glob.glob(args.dbsim):
456
+ # with open(args.dbsim,'r') as f:
457
+ # smistr = f.read()
458
+ # else:
459
+ # print 'File '+args.dbsim+' not existing. Check your input.'
460
+ # print 'Similarity search terminating..'
461
+ # return True
462
+ # elif ('.mol' in args.dbsim or '.xyz' in args.dbsim):
463
+ # if glob.glob(args.dbsim):
464
+ # ftype = args.dbsim.split('.')[-1]
465
+ # obConversion = openbabel.OBConversion()
466
+ # obConversion.SetInFormat(ftype)
467
+ # OBMol = openbabel.OBMol()
468
+ # obConversion.ReadFile(OBMol,args.dbsim)
469
+ # smistr = pybel.write("smi")
470
+ # else:
471
+ # print 'File '+args.dbsim+' not existing. Check your input.'
472
+ # print 'Similarity search terminating..'
473
+ # return True
474
+ # else:
475
+ # smistr = args.dbsim
476
+ # print smistr
477
+ if args.dbsmarts:
478
+ if '.smi' in args.dbsmarts:
479
+ if glob.glob(args.dbsmarts):
480
+ with open(args.dbsmarts, 'r') as f:
481
+ smistr = f.read()
482
+ else:
483
+ print(('File ' + args.dbsmarts +
484
+ ' does not exist. Check your input.'))
485
+ print('Substructure search terminating..')
486
+ return 1
487
+ elif ('.mol' in args.dbsmarts or '.xyz' in args.dbsmarts):
488
+ if glob.glob(args.dbsmarts):
489
+ smistr = pymol.write("smi")
490
+ else:
491
+ print(('File ' + args.dbsmarts +
492
+ ' does not exist. Check your input.'))
493
+ print('Substructure search terminating..')
494
+ return True
495
+ else:
496
+ smistr = args.dbsmarts
497
+ elif args.dbhuman:
498
+ smistr = []
499
+ denticity = args.dbvdent if args.dbvdent else '1'
500
+ coordatoms = args.dbvconns if args.dbvconns else 'N'
501
+ hyb = args.dbvhyb if args.dbvhyb else '3'
502
+ nlinks = args.dbvlinks if args.dbvlinks else '2'
503
+ monod = ['1', 'mono', 'Mono', 'monodentate', 'Monodentate']
504
+ bid = ['2', 'bi', 'Bi', 'bidentate', 'Bidentate']
505
+ if args.debug:
506
+ print('dbhuman conversion')
507
+ print(('dbhuman coordatoms ' + str(coordatoms)))
508
+ print(('dbhuman nlinks ' + str(nlinks)))
509
+ print(('dbhuman hyb ' + str(hyb)))
510
+ if denticity in monod:
511
+ smistr = '[#' + str(amassdict[coordatoms[0]][1]
512
+ ) + '^' + hyb[0] + ';!+]'
513
+ elif denticity in bid:
514
+ smistr = '[#' + str(amassdict[coordatoms[0]][1]
515
+ ) + '^' + hyb[0] + ';!+]'
516
+ for i in range(int(nlinks)):
517
+ smistr = smistr + '[#6;R0]'
518
+ print((coordatoms, hyb))
519
+ smistr = smistr + \
520
+ '[#' + str(amassdict[coordatoms[1]][1]) + '^' + hyb[1] + ';!+]'
521
+ print(('setting smistr from dbhuman ' + smistr))
522
+
523
+ # else:
524
+ # get database
525
+ # [dbsdf,dbfs] = setupdb(args.dbbase)
526
+ # convert to smiles and print to output
527
+ # if globs.osx:
528
+ # cmd = "/usr/local/bin/obabel "+dbsdf+" -f0 -l100 -o"+outf[-3:]+" -O "+outf
529
+ # else:
530
+ # cmd = obab+" "+dbsdf+" -f0 -l100 -o"+outf[-3:]+" -O "+outf
531
+ # t = mybash(cmd)
532
+ # os.rename(outf,args.rundir+'/'+outf)
533
+ # print t
534
+ # return False
535
+ # parse filters
536
+ squery = checkscr(args)
537
+ if args.debug:
538
+ print(("squery is " + str(squery)))
539
+
540
+ if args.dbmaxsmartsmatches:
541
+ plugin_path = plugin_defs()
542
+ shutil.copy(plugin_path, 'plugindefines.txt')
543
+ cmd = "sed -i '/nsmartsmatches/!b;n;c" + smistr + "' " + 'plugindefines.txt'
544
+ mybash(cmd)
545
+ # run substructure search #
546
+ nmols = '10000' if not args.dbnsearch else args.dbnsearch
547
+ finger = 'FP2' if not args.dbfinger else args.dbfinger
548
+ if int(nmols) > 3000 and args.gui:
549
+ from molSimplify.Classes.mWidgets import mQDialogInf
550
+ qqb = mQDialogInf(
551
+ 'Warning', "Database search is going to take a few minutes. Please wait..OK?")
552
+ qqb.setParent(args.gui.DBWindow)
553
+ if args.dbsmarts or args.dbhuman or args.dbsim:
554
+ outputf, flag = getsimilar(
555
+ smistr, nmols, args.dbbase, finger, squery, args)
556
+ try:
557
+ shutil.copy('simres.smi', outf)
558
+ except (FileNotFoundError, shutil.SameFileError):
559
+ pass
560
+
561
+ if args.debug:
562
+ print(('after similarity search, outf is ' + str(outputf)))
563
+ if flag:
564
+ if args.gui:
565
+ from molSimplify.Classes.mWidgets import mQDialogWarn
566
+ qqb = mQDialogWarn('Warning', "No matches found in search..")
567
+ qqb.setParent(args.gui.DBWindow)
568
+ print("No matches found in search..")
569
+ return True
570
+ # strip metals and clean-up, remove duplicates etc
571
+ # print('mb ' + str(mybash('cat '+outf)))
572
+ if args.dbsmarts or args.dbhuman:
573
+ print('Stripping salts and removing duplicates')
574
+
575
+ print(('number of smiles strings BEFORE salt stripping: ' +
576
+ mybash("cat " + outf + '| wc -l')))
577
+ _ = stripsalts(outf)
578
+ print(('number of smiles strings AFTER salt stripping: ' +
579
+ mybash("cat " + outf + '| wc -l')))
580
+ print(('number of smiles strings BEFORE unique: ' +
581
+ mybash("cat " + outf + '| wc -l')))
582
+ cmd = obab + " -ismi " + outf + " -osmi -O " + outf + " --unique"
583
+ # print('running:' + str(cmd))
584
+ shutil.copy(outf, 'afterstrippingsalts.smi')
585
+ _ = mybash(cmd)
586
+ print(('number of smiles strings AFTER unique: ' +
587
+ mybash("cat " + outf + '| wc -l')))
588
+
589
+ # print 't (ret from bash) is '+ str(t)
590
+ # filter results containing elements that aren't allowed
591
+ if args.dballowedels:
592
+ if args.dballowedels == 'organic': # HCNO only
593
+ allowedels = ['H', 'C', 'N', 'O']
594
+ elif args.dballowedels == 'organohalides':
595
+ allowedels = ['H', 'C', 'N', 'O', 'F', 'Cl', 'Br', 'I']
596
+ elif args.dballowedels == 'common':
597
+ allowedels = ['H', 'C', 'N', 'O', 'F', 'Cl', 'Br', 'I', 'P', 'S']
598
+ else:
599
+ allowedels = args.dballowedels
600
+ print(('number of smiles strings BEFORE element filter: ' +
601
+ mybash("cat " + outf + '| wc -l')))
602
+ checkels(outf, allowedels)
603
+ print(('number of smiles strings AFTER element filter unique: ' +
604
+ mybash("cat " + outf + '| wc -l')))
605
+
606
+ shutil.copy(outf, 'afterfilteringels.smi')
607
+ # check if defined connection atoms
608
+ if args.dbcatoms:
609
+ catoms = [int(a) for a in args.dbcatoms]
610
+ else:
611
+ catoms = [1]
612
+ # do pattern matching
613
+ # nres = 50 if not args.dbresults else int(args.dbresults)
614
+ if args.dbsmarts or args.dbhuman:
615
+ print(('number of smiles strings BEFORE SMARTS filter: ' +
616
+ mybash("cat " + outf + '| wc -l')))
617
+ _ = matchsmarts(smistr, outf, catoms, args)
618
+ print(('number of smiles strings AFTER SMARTS filter: ' +
619
+ mybash("cat " + outf + '| wc -l')))
620
+ if args.debug:
621
+ print(('outf is ' + str(outf)))
622
+ # maximal dissimilarity search
623
+ if args.dbdissim:
624
+ dissim(outf, int(args.dbdissim))
625
+ if args.rundir:
626
+ print(('writing output to ' + str(args.rundir) + '/' + str(outf) + '\n'))
627
+ os.rename(outf, args.rundir + '/' + outf)
628
+ else:
629
+ print(('writing output to ' + str(cwd) + '/' + str(outf) + '\n'))
630
+ # os.chdir(cwd)
631
+ return False