mlmm-toolkit 0.2.2.dev0__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 (372) hide show
  1. hessian_ff/__init__.py +50 -0
  2. hessian_ff/analytical_hessian.py +609 -0
  3. hessian_ff/constants.py +46 -0
  4. hessian_ff/forcefield.py +339 -0
  5. hessian_ff/loaders.py +608 -0
  6. hessian_ff/native/Makefile +8 -0
  7. hessian_ff/native/__init__.py +28 -0
  8. hessian_ff/native/analytical_hessian.py +88 -0
  9. hessian_ff/native/analytical_hessian_ext.cpp +258 -0
  10. hessian_ff/native/bonded.py +82 -0
  11. hessian_ff/native/bonded_ext.cpp +640 -0
  12. hessian_ff/native/loader.py +349 -0
  13. hessian_ff/native/nonbonded.py +118 -0
  14. hessian_ff/native/nonbonded_ext.cpp +1150 -0
  15. hessian_ff/prmtop_parmed.py +23 -0
  16. hessian_ff/system.py +107 -0
  17. hessian_ff/terms/__init__.py +14 -0
  18. hessian_ff/terms/angle.py +73 -0
  19. hessian_ff/terms/bond.py +44 -0
  20. hessian_ff/terms/cmap.py +406 -0
  21. hessian_ff/terms/dihedral.py +141 -0
  22. hessian_ff/terms/nonbonded.py +209 -0
  23. hessian_ff/tests/__init__.py +0 -0
  24. hessian_ff/tests/conftest.py +75 -0
  25. hessian_ff/tests/data/small/complex.parm7 +1346 -0
  26. hessian_ff/tests/data/small/complex.pdb +125 -0
  27. hessian_ff/tests/data/small/complex.rst7 +63 -0
  28. hessian_ff/tests/test_coords_input.py +44 -0
  29. hessian_ff/tests/test_energy_force.py +49 -0
  30. hessian_ff/tests/test_hessian.py +137 -0
  31. hessian_ff/tests/test_smoke.py +18 -0
  32. hessian_ff/tests/test_validation.py +40 -0
  33. hessian_ff/workflows.py +889 -0
  34. mlmm/__init__.py +36 -0
  35. mlmm/__main__.py +7 -0
  36. mlmm/_version.py +34 -0
  37. mlmm/add_elem_info.py +374 -0
  38. mlmm/advanced_help.py +91 -0
  39. mlmm/align_freeze_atoms.py +601 -0
  40. mlmm/all.py +3535 -0
  41. mlmm/bond_changes.py +231 -0
  42. mlmm/bool_compat.py +223 -0
  43. mlmm/cli.py +574 -0
  44. mlmm/cli_utils.py +166 -0
  45. mlmm/default_group.py +337 -0
  46. mlmm/defaults.py +467 -0
  47. mlmm/define_layer.py +526 -0
  48. mlmm/dft.py +1041 -0
  49. mlmm/energy_diagram.py +253 -0
  50. mlmm/extract.py +2213 -0
  51. mlmm/fix_altloc.py +464 -0
  52. mlmm/freq.py +1406 -0
  53. mlmm/harmonic_constraints.py +140 -0
  54. mlmm/hessian_cache.py +44 -0
  55. mlmm/hessian_calc.py +174 -0
  56. mlmm/irc.py +638 -0
  57. mlmm/mlmm_calc.py +2262 -0
  58. mlmm/mm_parm.py +945 -0
  59. mlmm/oniom_export.py +1983 -0
  60. mlmm/oniom_import.py +457 -0
  61. mlmm/opt.py +1742 -0
  62. mlmm/path_opt.py +1353 -0
  63. mlmm/path_search.py +2299 -0
  64. mlmm/preflight.py +88 -0
  65. mlmm/py.typed +1 -0
  66. mlmm/pysis_runner.py +45 -0
  67. mlmm/scan.py +1047 -0
  68. mlmm/scan2d.py +1226 -0
  69. mlmm/scan3d.py +1265 -0
  70. mlmm/scan_common.py +184 -0
  71. mlmm/summary_log.py +736 -0
  72. mlmm/trj2fig.py +448 -0
  73. mlmm/tsopt.py +2871 -0
  74. mlmm/utils.py +2309 -0
  75. mlmm/xtb_embedcharge_correction.py +475 -0
  76. mlmm_toolkit-0.2.2.dev0.dist-info/METADATA +1159 -0
  77. mlmm_toolkit-0.2.2.dev0.dist-info/RECORD +372 -0
  78. mlmm_toolkit-0.2.2.dev0.dist-info/WHEEL +5 -0
  79. mlmm_toolkit-0.2.2.dev0.dist-info/entry_points.txt +2 -0
  80. mlmm_toolkit-0.2.2.dev0.dist-info/licenses/LICENSE +674 -0
  81. mlmm_toolkit-0.2.2.dev0.dist-info/top_level.txt +4 -0
  82. pysisyphus/Geometry.py +1667 -0
  83. pysisyphus/LICENSE +674 -0
  84. pysisyphus/TableFormatter.py +63 -0
  85. pysisyphus/TablePrinter.py +74 -0
  86. pysisyphus/__init__.py +12 -0
  87. pysisyphus/calculators/AFIR.py +452 -0
  88. pysisyphus/calculators/AnaPot.py +20 -0
  89. pysisyphus/calculators/AnaPot2.py +48 -0
  90. pysisyphus/calculators/AnaPot3.py +12 -0
  91. pysisyphus/calculators/AnaPot4.py +20 -0
  92. pysisyphus/calculators/AnaPotBase.py +337 -0
  93. pysisyphus/calculators/AnaPotCBM.py +25 -0
  94. pysisyphus/calculators/AtomAtomTransTorque.py +154 -0
  95. pysisyphus/calculators/CFOUR.py +250 -0
  96. pysisyphus/calculators/Calculator.py +844 -0
  97. pysisyphus/calculators/CerjanMiller.py +24 -0
  98. pysisyphus/calculators/Composite.py +123 -0
  99. pysisyphus/calculators/ConicalIntersection.py +171 -0
  100. pysisyphus/calculators/DFTBp.py +430 -0
  101. pysisyphus/calculators/DFTD3.py +66 -0
  102. pysisyphus/calculators/DFTD4.py +84 -0
  103. pysisyphus/calculators/Dalton.py +61 -0
  104. pysisyphus/calculators/Dimer.py +681 -0
  105. pysisyphus/calculators/Dummy.py +20 -0
  106. pysisyphus/calculators/EGO.py +76 -0
  107. pysisyphus/calculators/EnergyMin.py +224 -0
  108. pysisyphus/calculators/ExternalPotential.py +264 -0
  109. pysisyphus/calculators/FakeASE.py +35 -0
  110. pysisyphus/calculators/FourWellAnaPot.py +28 -0
  111. pysisyphus/calculators/FreeEndNEBPot.py +39 -0
  112. pysisyphus/calculators/Gaussian09.py +18 -0
  113. pysisyphus/calculators/Gaussian16.py +726 -0
  114. pysisyphus/calculators/HardSphere.py +159 -0
  115. pysisyphus/calculators/IDPPCalculator.py +49 -0
  116. pysisyphus/calculators/IPIClient.py +133 -0
  117. pysisyphus/calculators/IPIServer.py +234 -0
  118. pysisyphus/calculators/LEPSBase.py +24 -0
  119. pysisyphus/calculators/LEPSExpr.py +139 -0
  120. pysisyphus/calculators/LennardJones.py +80 -0
  121. pysisyphus/calculators/MOPAC.py +219 -0
  122. pysisyphus/calculators/MullerBrownSympyPot.py +51 -0
  123. pysisyphus/calculators/MultiCalc.py +85 -0
  124. pysisyphus/calculators/NFK.py +45 -0
  125. pysisyphus/calculators/OBabel.py +87 -0
  126. pysisyphus/calculators/ONIOMv2.py +1129 -0
  127. pysisyphus/calculators/ORCA.py +893 -0
  128. pysisyphus/calculators/ORCA5.py +6 -0
  129. pysisyphus/calculators/OpenMM.py +88 -0
  130. pysisyphus/calculators/OpenMolcas.py +281 -0
  131. pysisyphus/calculators/OverlapCalculator.py +908 -0
  132. pysisyphus/calculators/Psi4.py +218 -0
  133. pysisyphus/calculators/PyPsi4.py +37 -0
  134. pysisyphus/calculators/PySCF.py +341 -0
  135. pysisyphus/calculators/PyXTB.py +73 -0
  136. pysisyphus/calculators/QCEngine.py +106 -0
  137. pysisyphus/calculators/Rastrigin.py +22 -0
  138. pysisyphus/calculators/Remote.py +76 -0
  139. pysisyphus/calculators/Rosenbrock.py +15 -0
  140. pysisyphus/calculators/SocketCalc.py +97 -0
  141. pysisyphus/calculators/TIP3P.py +111 -0
  142. pysisyphus/calculators/TransTorque.py +161 -0
  143. pysisyphus/calculators/Turbomole.py +965 -0
  144. pysisyphus/calculators/VRIPot.py +37 -0
  145. pysisyphus/calculators/WFOWrapper.py +333 -0
  146. pysisyphus/calculators/WFOWrapper2.py +341 -0
  147. pysisyphus/calculators/XTB.py +418 -0
  148. pysisyphus/calculators/__init__.py +81 -0
  149. pysisyphus/calculators/cosmo_data.py +139 -0
  150. pysisyphus/calculators/parser.py +150 -0
  151. pysisyphus/color.py +19 -0
  152. pysisyphus/config.py +133 -0
  153. pysisyphus/constants.py +65 -0
  154. pysisyphus/cos/AdaptiveNEB.py +230 -0
  155. pysisyphus/cos/ChainOfStates.py +725 -0
  156. pysisyphus/cos/FreeEndNEB.py +25 -0
  157. pysisyphus/cos/FreezingString.py +103 -0
  158. pysisyphus/cos/GrowingChainOfStates.py +71 -0
  159. pysisyphus/cos/GrowingNT.py +309 -0
  160. pysisyphus/cos/GrowingString.py +508 -0
  161. pysisyphus/cos/NEB.py +189 -0
  162. pysisyphus/cos/SimpleZTS.py +64 -0
  163. pysisyphus/cos/__init__.py +22 -0
  164. pysisyphus/cos/stiffness.py +199 -0
  165. pysisyphus/drivers/__init__.py +17 -0
  166. pysisyphus/drivers/afir.py +855 -0
  167. pysisyphus/drivers/barriers.py +271 -0
  168. pysisyphus/drivers/birkholz.py +138 -0
  169. pysisyphus/drivers/cluster.py +318 -0
  170. pysisyphus/drivers/diabatization.py +133 -0
  171. pysisyphus/drivers/merge.py +368 -0
  172. pysisyphus/drivers/merge_mol2.py +322 -0
  173. pysisyphus/drivers/opt.py +375 -0
  174. pysisyphus/drivers/perf.py +91 -0
  175. pysisyphus/drivers/pka.py +52 -0
  176. pysisyphus/drivers/precon_pos_rot.py +669 -0
  177. pysisyphus/drivers/rates.py +480 -0
  178. pysisyphus/drivers/replace.py +219 -0
  179. pysisyphus/drivers/scan.py +212 -0
  180. pysisyphus/drivers/spectrum.py +166 -0
  181. pysisyphus/drivers/thermo.py +31 -0
  182. pysisyphus/dynamics/Gaussian.py +103 -0
  183. pysisyphus/dynamics/__init__.py +20 -0
  184. pysisyphus/dynamics/colvars.py +136 -0
  185. pysisyphus/dynamics/driver.py +297 -0
  186. pysisyphus/dynamics/helpers.py +256 -0
  187. pysisyphus/dynamics/lincs.py +105 -0
  188. pysisyphus/dynamics/mdp.py +364 -0
  189. pysisyphus/dynamics/rattle.py +121 -0
  190. pysisyphus/dynamics/thermostats.py +128 -0
  191. pysisyphus/dynamics/wigner.py +266 -0
  192. pysisyphus/elem_data.py +3473 -0
  193. pysisyphus/exceptions.py +2 -0
  194. pysisyphus/filtertrj.py +69 -0
  195. pysisyphus/helpers.py +623 -0
  196. pysisyphus/helpers_pure.py +649 -0
  197. pysisyphus/init_logging.py +50 -0
  198. pysisyphus/intcoords/Bend.py +69 -0
  199. pysisyphus/intcoords/Bend2.py +25 -0
  200. pysisyphus/intcoords/BondedFragment.py +32 -0
  201. pysisyphus/intcoords/Cartesian.py +41 -0
  202. pysisyphus/intcoords/CartesianCoords.py +140 -0
  203. pysisyphus/intcoords/Coords.py +56 -0
  204. pysisyphus/intcoords/DLC.py +197 -0
  205. pysisyphus/intcoords/DistanceFunction.py +34 -0
  206. pysisyphus/intcoords/DummyImproper.py +70 -0
  207. pysisyphus/intcoords/DummyTorsion.py +72 -0
  208. pysisyphus/intcoords/LinearBend.py +105 -0
  209. pysisyphus/intcoords/LinearDisplacement.py +80 -0
  210. pysisyphus/intcoords/OutOfPlane.py +59 -0
  211. pysisyphus/intcoords/PrimTypes.py +286 -0
  212. pysisyphus/intcoords/Primitive.py +137 -0
  213. pysisyphus/intcoords/RedundantCoords.py +659 -0
  214. pysisyphus/intcoords/RobustTorsion.py +59 -0
  215. pysisyphus/intcoords/Rotation.py +147 -0
  216. pysisyphus/intcoords/Stretch.py +31 -0
  217. pysisyphus/intcoords/Torsion.py +101 -0
  218. pysisyphus/intcoords/Torsion2.py +25 -0
  219. pysisyphus/intcoords/Translation.py +45 -0
  220. pysisyphus/intcoords/__init__.py +61 -0
  221. pysisyphus/intcoords/augment_bonds.py +126 -0
  222. pysisyphus/intcoords/derivatives.py +10512 -0
  223. pysisyphus/intcoords/eval.py +80 -0
  224. pysisyphus/intcoords/exceptions.py +37 -0
  225. pysisyphus/intcoords/findiffs.py +48 -0
  226. pysisyphus/intcoords/generate_derivatives.py +414 -0
  227. pysisyphus/intcoords/helpers.py +235 -0
  228. pysisyphus/intcoords/logging_conf.py +10 -0
  229. pysisyphus/intcoords/mp_derivatives.py +10836 -0
  230. pysisyphus/intcoords/setup.py +962 -0
  231. pysisyphus/intcoords/setup_fast.py +176 -0
  232. pysisyphus/intcoords/update.py +272 -0
  233. pysisyphus/intcoords/valid.py +89 -0
  234. pysisyphus/interpolate/Geodesic.py +93 -0
  235. pysisyphus/interpolate/IDPP.py +55 -0
  236. pysisyphus/interpolate/Interpolator.py +116 -0
  237. pysisyphus/interpolate/LST.py +70 -0
  238. pysisyphus/interpolate/Redund.py +152 -0
  239. pysisyphus/interpolate/__init__.py +9 -0
  240. pysisyphus/interpolate/helpers.py +34 -0
  241. pysisyphus/io/__init__.py +22 -0
  242. pysisyphus/io/aomix.py +178 -0
  243. pysisyphus/io/cjson.py +24 -0
  244. pysisyphus/io/crd.py +101 -0
  245. pysisyphus/io/cube.py +220 -0
  246. pysisyphus/io/fchk.py +184 -0
  247. pysisyphus/io/hdf5.py +49 -0
  248. pysisyphus/io/hessian.py +72 -0
  249. pysisyphus/io/mol2.py +146 -0
  250. pysisyphus/io/molden.py +293 -0
  251. pysisyphus/io/orca.py +189 -0
  252. pysisyphus/io/pdb.py +269 -0
  253. pysisyphus/io/psf.py +79 -0
  254. pysisyphus/io/pubchem.py +31 -0
  255. pysisyphus/io/qcschema.py +34 -0
  256. pysisyphus/io/sdf.py +29 -0
  257. pysisyphus/io/xyz.py +61 -0
  258. pysisyphus/io/zmat.py +175 -0
  259. pysisyphus/irc/DWI.py +108 -0
  260. pysisyphus/irc/DampedVelocityVerlet.py +134 -0
  261. pysisyphus/irc/Euler.py +22 -0
  262. pysisyphus/irc/EulerPC.py +345 -0
  263. pysisyphus/irc/GonzalezSchlegel.py +187 -0
  264. pysisyphus/irc/IMKMod.py +164 -0
  265. pysisyphus/irc/IRC.py +878 -0
  266. pysisyphus/irc/IRCDummy.py +10 -0
  267. pysisyphus/irc/Instanton.py +307 -0
  268. pysisyphus/irc/LQA.py +53 -0
  269. pysisyphus/irc/ModeKill.py +136 -0
  270. pysisyphus/irc/ParamPlot.py +53 -0
  271. pysisyphus/irc/RK4.py +36 -0
  272. pysisyphus/irc/__init__.py +31 -0
  273. pysisyphus/irc/initial_displ.py +219 -0
  274. pysisyphus/linalg.py +411 -0
  275. pysisyphus/line_searches/Backtracking.py +88 -0
  276. pysisyphus/line_searches/HagerZhang.py +184 -0
  277. pysisyphus/line_searches/LineSearch.py +232 -0
  278. pysisyphus/line_searches/StrongWolfe.py +108 -0
  279. pysisyphus/line_searches/__init__.py +9 -0
  280. pysisyphus/line_searches/interpol.py +15 -0
  281. pysisyphus/modefollow/NormalMode.py +40 -0
  282. pysisyphus/modefollow/__init__.py +10 -0
  283. pysisyphus/modefollow/davidson.py +199 -0
  284. pysisyphus/modefollow/lanczos.py +95 -0
  285. pysisyphus/optimizers/BFGS.py +99 -0
  286. pysisyphus/optimizers/BacktrackingOptimizer.py +113 -0
  287. pysisyphus/optimizers/ConjugateGradient.py +98 -0
  288. pysisyphus/optimizers/CubicNewton.py +75 -0
  289. pysisyphus/optimizers/FIRE.py +113 -0
  290. pysisyphus/optimizers/HessianOptimizer.py +1176 -0
  291. pysisyphus/optimizers/LBFGS.py +228 -0
  292. pysisyphus/optimizers/LayerOpt.py +411 -0
  293. pysisyphus/optimizers/MicroOptimizer.py +169 -0
  294. pysisyphus/optimizers/NCOptimizer.py +90 -0
  295. pysisyphus/optimizers/Optimizer.py +1084 -0
  296. pysisyphus/optimizers/PreconLBFGS.py +260 -0
  297. pysisyphus/optimizers/PreconSteepestDescent.py +7 -0
  298. pysisyphus/optimizers/QuickMin.py +74 -0
  299. pysisyphus/optimizers/RFOptimizer.py +181 -0
  300. pysisyphus/optimizers/RSA.py +99 -0
  301. pysisyphus/optimizers/StabilizedQNMethod.py +248 -0
  302. pysisyphus/optimizers/SteepestDescent.py +23 -0
  303. pysisyphus/optimizers/StringOptimizer.py +173 -0
  304. pysisyphus/optimizers/__init__.py +41 -0
  305. pysisyphus/optimizers/closures.py +301 -0
  306. pysisyphus/optimizers/cls_map.py +58 -0
  307. pysisyphus/optimizers/exceptions.py +6 -0
  308. pysisyphus/optimizers/gdiis.py +280 -0
  309. pysisyphus/optimizers/guess_hessians.py +311 -0
  310. pysisyphus/optimizers/hessian_updates.py +355 -0
  311. pysisyphus/optimizers/poly_fit.py +285 -0
  312. pysisyphus/optimizers/precon.py +153 -0
  313. pysisyphus/optimizers/restrict_step.py +24 -0
  314. pysisyphus/pack.py +172 -0
  315. pysisyphus/peakdetect.py +948 -0
  316. pysisyphus/plot.py +1031 -0
  317. pysisyphus/run.py +2106 -0
  318. pysisyphus/socket_helper.py +74 -0
  319. pysisyphus/stocastic/FragmentKick.py +132 -0
  320. pysisyphus/stocastic/Kick.py +81 -0
  321. pysisyphus/stocastic/Pipeline.py +303 -0
  322. pysisyphus/stocastic/__init__.py +21 -0
  323. pysisyphus/stocastic/align.py +127 -0
  324. pysisyphus/testing.py +96 -0
  325. pysisyphus/thermo.py +156 -0
  326. pysisyphus/trj.py +824 -0
  327. pysisyphus/tsoptimizers/RSIRFOptimizer.py +56 -0
  328. pysisyphus/tsoptimizers/RSPRFOptimizer.py +182 -0
  329. pysisyphus/tsoptimizers/TRIM.py +59 -0
  330. pysisyphus/tsoptimizers/TSHessianOptimizer.py +463 -0
  331. pysisyphus/tsoptimizers/__init__.py +23 -0
  332. pysisyphus/wavefunction/Basis.py +239 -0
  333. pysisyphus/wavefunction/DIIS.py +76 -0
  334. pysisyphus/wavefunction/__init__.py +25 -0
  335. pysisyphus/wavefunction/build_ext.py +42 -0
  336. pysisyphus/wavefunction/cart2sph.py +190 -0
  337. pysisyphus/wavefunction/diabatization.py +304 -0
  338. pysisyphus/wavefunction/excited_states.py +435 -0
  339. pysisyphus/wavefunction/gen_ints.py +1811 -0
  340. pysisyphus/wavefunction/helpers.py +104 -0
  341. pysisyphus/wavefunction/ints/__init__.py +0 -0
  342. pysisyphus/wavefunction/ints/boys.py +193 -0
  343. pysisyphus/wavefunction/ints/boys_table_N_64_xasym_27.1_step_0.01.npy +0 -0
  344. pysisyphus/wavefunction/ints/cart_gto3d.py +176 -0
  345. pysisyphus/wavefunction/ints/coulomb3d.py +25928 -0
  346. pysisyphus/wavefunction/ints/diag_quadrupole3d.py +10036 -0
  347. pysisyphus/wavefunction/ints/dipole3d.py +8762 -0
  348. pysisyphus/wavefunction/ints/int2c2e3d.py +7198 -0
  349. pysisyphus/wavefunction/ints/int3c2e3d_sph.py +65040 -0
  350. pysisyphus/wavefunction/ints/kinetic3d.py +8240 -0
  351. pysisyphus/wavefunction/ints/ovlp3d.py +3777 -0
  352. pysisyphus/wavefunction/ints/quadrupole3d.py +15054 -0
  353. pysisyphus/wavefunction/ints/self_ovlp3d.py +198 -0
  354. pysisyphus/wavefunction/localization.py +458 -0
  355. pysisyphus/wavefunction/multipole.py +159 -0
  356. pysisyphus/wavefunction/normalization.py +36 -0
  357. pysisyphus/wavefunction/pop_analysis.py +134 -0
  358. pysisyphus/wavefunction/shells.py +1171 -0
  359. pysisyphus/wavefunction/wavefunction.py +504 -0
  360. pysisyphus/wrapper/__init__.py +11 -0
  361. pysisyphus/wrapper/exceptions.py +2 -0
  362. pysisyphus/wrapper/jmol.py +120 -0
  363. pysisyphus/wrapper/mwfn.py +169 -0
  364. pysisyphus/wrapper/packmol.py +71 -0
  365. pysisyphus/xyzloader.py +168 -0
  366. pysisyphus/yaml_mods.py +45 -0
  367. thermoanalysis/LICENSE +674 -0
  368. thermoanalysis/QCData.py +244 -0
  369. thermoanalysis/__init__.py +0 -0
  370. thermoanalysis/config.py +3 -0
  371. thermoanalysis/constants.py +20 -0
  372. thermoanalysis/thermo.py +1011 -0
mlmm/defaults.py ADDED
@@ -0,0 +1,467 @@
1
+ # mlmm/defaults.py
2
+
3
+ """
4
+ Central configuration defaults for mlmm workflows.
5
+
6
+ All default dictionaries are defined here to avoid redundant definitions across modules.
7
+ Modules should import defaults from here instead of defining local copies.
8
+
9
+ Shared optimizer/IRC/path defaults — keep aligned with pdb2reaction/defaults.py.
10
+ Project-specific overrides are commented with rationale.
11
+ """
12
+
13
+ from typing import Any, Dict
14
+
15
+ # -----------------------------------------------
16
+ # B-factor values for 3-layer ML/MM system
17
+ # -----------------------------------------------
18
+
19
+ # B-factor values encode atom layer membership in PDB files:
20
+ # ML atoms: 0.0
21
+ # Movable MM atoms: 10.0
22
+ # Frozen MM atoms: 20.0
23
+ #
24
+ # NOTE:
25
+ # BFACTOR_HESS_MM uses the same value as movable MM for unified 3-layer encoding.
26
+ # Hessian-target MM atoms are selected dynamically (e.g., by hess_cutoff),
27
+ # not by a dedicated B-factor layer.
28
+ BFACTOR_ML = 0.0
29
+ BFACTOR_MOVABLE_MM = 10.0
30
+ BFACTOR_HESS_MM = BFACTOR_MOVABLE_MM
31
+ BFACTOR_FROZEN = 20.0
32
+
33
+ # Tolerance for B-factor matching (allow small variations)
34
+ BFACTOR_TOLERANCE = 1.0
35
+
36
+ # -----------------------------------------------
37
+ # Output directory defaults
38
+ # -----------------------------------------------
39
+
40
+ OUT_DIR_OPT = "./result_opt/"
41
+ OUT_DIR_SCAN = "./result_scan/"
42
+ OUT_DIR_SCAN2D = "./result_scan2d/"
43
+ OUT_DIR_SCAN3D = "./result_scan3d/"
44
+ OUT_DIR_FREQ = "./result_freq/"
45
+ OUT_DIR_IRC = "./result_irc/"
46
+ OUT_DIR_TSOPT = "./result_tsopt/"
47
+ OUT_DIR_PATH_OPT = "./result_path_opt/"
48
+ OUT_DIR_PATH_SEARCH = "./result_path_search/"
49
+
50
+ # -----------------------------------------------
51
+ # Geometry defaults
52
+ # -----------------------------------------------
53
+
54
+ GEOM_KW_DEFAULT: Dict[str, Any] = {
55
+ "coord_type": "cart",
56
+ "freeze_atoms": [],
57
+ }
58
+
59
+ # -----------------------------------------------
60
+ # Calculator defaults (ML/MM with MLIP backend + hessian_ff MM)
61
+ # -----------------------------------------------
62
+
63
+ MLMM_CALC_KW: Dict[str, Any] = {
64
+ "input_pdb": None,
65
+ "real_parm7": None,
66
+ "model_pdb": None,
67
+ "model_charge": 0,
68
+ "model_mult": 1,
69
+ "link_mlmm": None,
70
+ # ML backend selection: "uma" | "orb" | "mace" | "aimnet2"
71
+ "backend": "uma",
72
+ "uma_model": "uma-s-1p1",
73
+ "uma_task_name": "omol",
74
+ "orb_model": "orb_v3_conservative_omol",
75
+ "orb_precision": "float32",
76
+ "mace_model": "MACE-OMOL-0",
77
+ "mace_dtype": "float64",
78
+ "aimnet2_model": "aimnet2",
79
+ # ML Hessian mode
80
+ "ml_hessian_mode": "FiniteDifference",
81
+ "hessian_calc_mode": "FiniteDifference", # Alias for ml_hessian_mode
82
+ "out_hess_torch": True,
83
+ "H_double": False,
84
+ "ml_device": "auto",
85
+ "ml_cuda_idx": 0,
86
+ "mm_backend": "hessian_ff", # "hessian_ff" (analytical) | "openmm" (FD Hessian)
87
+ "mm_device": "cpu",
88
+ "mm_cuda_idx": 0,
89
+ "mm_threads": 16,
90
+ "mm_fd": True,
91
+ "mm_fd_dir": None,
92
+ "mm_fd_delta": 1e-3, # Legacy parameter (retained)
93
+ "symmetrize_hessian": True, # Symmetrize final Hessian as 0.5*(H+H^T)
94
+ "print_timing": True, # Print ML/MM Hessian timing breakdown
95
+ "print_vram": True, # Print CUDA VRAM usage (peak) during Hessian
96
+ "return_partial_hessian": False,
97
+ "freeze_atoms": [],
98
+ # 3-layer B-factor configuration:
99
+ # ML region (B=0)
100
+ # Movable MM (B=10)
101
+ # Frozen MM (B=20)
102
+ # Hessian-target MM is selected by hess_cutoff (distance from ML),
103
+ # independent of B-factor layer.
104
+ "hess_cutoff": None, # Å, MM atoms within this distance of ML get MM Hessian (None = all movable)
105
+ "movable_cutoff": None, # Å, MM atoms within this distance of ML are movable (None = use freeze_atoms)
106
+ # CLI defaults to --detect-layer for layer-aware commands.
107
+ # Keep the base default aligned so config merge semantics stay consistent.
108
+ "use_bfactor_layers": True, # If True, read layer assignments from input PDB B-factors
109
+ # Explicit YAML-based layer specification (0-based indices, takes precedence over cutoffs/B-factors)
110
+ "hess_mm_atoms": None, # Explicit Hessian-target MM atom indices
111
+ "movable_mm_atoms": None, # Explicit movable MM atom indices
112
+ "frozen_mm_atoms": None, # Explicit frozen MM atom indices
113
+ # xTB point-charge embedding correction
114
+ "embedcharge": False, # Enable xTB-based point-charge embedding
115
+ "embedcharge_step": 1.0e-3, # Numerical Hessian step for embedding correction (Å)
116
+ "embedcharge_cutoff": 12.0, # Distance cutoff (Å) for MM point charges in xTB embedding
117
+ "xtb_cmd": "xtb", # xTB executable command
118
+ "xtb_acc": 0.2, # xTB accuracy parameter
119
+ "xtb_workdir": "tmp", # xTB working directory
120
+ "xtb_keep_files": False, # Keep xTB temporary files
121
+ "xtb_ncores": 4, # Number of cores for xTB
122
+ }
123
+
124
+ # -----------------------------------------------
125
+ # Optimizer base (common to LBFGS & RFO)
126
+ # -----------------------------------------------
127
+
128
+ OPT_BASE_KW: Dict[str, Any] = {
129
+ "thresh": "gau",
130
+ "max_cycles": 10000,
131
+ "print_every": 100,
132
+ "min_step_norm": 1e-8,
133
+ "assert_min_step": True,
134
+ "rms_force": None,
135
+ "rms_force_only": False,
136
+ "max_force_only": False,
137
+ "force_only": False,
138
+ "converge_to_geom_rms_thresh": 0.05,
139
+ "overachieve_factor": 0.0,
140
+ "check_eigval_structure": False,
141
+ "line_search": True,
142
+ "dump": False,
143
+ "dump_restart": False,
144
+ "prefix": "",
145
+ "out_dir": OUT_DIR_OPT,
146
+ }
147
+
148
+ # -----------------------------------------------
149
+ # LBFGS-specific
150
+ # -----------------------------------------------
151
+
152
+ LBFGS_KW: Dict[str, Any] = {
153
+ **OPT_BASE_KW,
154
+ "keep_last": 7,
155
+ "beta": 1.0,
156
+ "gamma_mult": False,
157
+ "max_step": 0.30,
158
+ "control_step": True,
159
+ "double_damp": True,
160
+ "mu_reg": None,
161
+ "max_mu_reg_adaptions": 10,
162
+ }
163
+
164
+ # -----------------------------------------------
165
+ # RFO-specific
166
+ # -----------------------------------------------
167
+
168
+ RFO_KW: Dict[str, Any] = {
169
+ **OPT_BASE_KW,
170
+ "trust_radius": 0.30,
171
+ "trust_update": True,
172
+ "trust_min": 1e-4,
173
+ "trust_max": 0.30,
174
+ "max_energy_incr": None,
175
+ "hessian_update": "bfgs",
176
+ "hessian_init": "calc",
177
+ "hessian_recalc": 500,
178
+ "hessian_recalc_adapt": None,
179
+ "small_eigval_thresh": 1e-8,
180
+ "alpha0": 1.0,
181
+ "max_micro_cycles": 50,
182
+ "rfo_overlaps": False,
183
+ "gediis": False,
184
+ "gdiis": True,
185
+ "gdiis_thresh": 2.5e-3,
186
+ "gediis_thresh": 1.0e-2,
187
+ "gdiis_test_direction": True,
188
+ "adapt_step_func": True,
189
+ }
190
+
191
+ # -----------------------------------------------
192
+ # Bias (harmonic well) defaults
193
+ # -----------------------------------------------
194
+
195
+ BIAS_KW: Dict[str, Any] = {
196
+ "k": 300,
197
+ }
198
+
199
+ # -----------------------------------------------
200
+ # Bond-change detection
201
+ # -----------------------------------------------
202
+
203
+ BOND_KW: Dict[str, Any] = {
204
+ "device": "cuda",
205
+ "bond_factor": 1.20,
206
+ "margin_fraction": 0.05,
207
+ "delta_fraction": 0.05,
208
+ }
209
+
210
+ # -----------------------------------------------
211
+ # Optimizer mode aliases
212
+ # -----------------------------------------------
213
+
214
+ OPT_MODE_ALIASES = (
215
+ (("grad", "light", "lbfgs"), "lbfgs"),
216
+ (("hess", "heavy", "rfo"), "rfo"),
217
+ )
218
+
219
+ # -----------------------------------------------
220
+ # DMF (Direct Max Flux) defaults for path optimization
221
+ # -----------------------------------------------
222
+
223
+ DMF_KW: Dict[str, Any] = {
224
+ "max_cycles": 300,
225
+ "correlated": True,
226
+ "sequential": True,
227
+ "fbenm_only_endpoints": False,
228
+ "fbenm_options": {
229
+ "delta_scale": 0.2,
230
+ "bond_scale": 1.25,
231
+ "fix_planes": True,
232
+ },
233
+ "cfbenm_options": {
234
+ "bond_scale": 1.25,
235
+ "corr0_scale": 1.10,
236
+ "corr1_scale": 1.50,
237
+ "corr2_scale": 1.60,
238
+ "eps": 0.05,
239
+ "pivotal": True,
240
+ "single": True,
241
+ "remove_fourmembered": True,
242
+ },
243
+ "dmf_options": {
244
+ "remove_rotation_and_translation": False,
245
+ "mass_weighted": False,
246
+ "parallel": False,
247
+ "eps_vel": 0.01,
248
+ "eps_rot": 0.01,
249
+ "beta": 10.0,
250
+ "update_teval": False,
251
+ },
252
+ "k_fix": 300.0,
253
+ }
254
+
255
+ # -----------------------------------------------
256
+ # GrowingString (path representation) defaults
257
+ # -----------------------------------------------
258
+
259
+ GS_KW: Dict[str, Any] = {
260
+ "fix_first": True,
261
+ "fix_last": True,
262
+ "max_nodes": 20,
263
+ "perp_thresh": 5e-3,
264
+ "reparam_check": "rms",
265
+ "reparam_every": 1,
266
+ "reparam_every_full": 1,
267
+ "param": "equi",
268
+ "max_micro_cycles": 10,
269
+ "reset_dlc": True,
270
+ "climb": True,
271
+ "climb_rms": 5e-4,
272
+ "climb_lanczos": True,
273
+ "climb_lanczos_rms": 5e-4,
274
+ "climb_fixed": False,
275
+ "scheduler": None,
276
+ }
277
+
278
+ # -----------------------------------------------
279
+ # StringOptimizer (optimization control) defaults
280
+ # -----------------------------------------------
281
+
282
+ STOPT_KW: Dict[str, Any] = {
283
+ "type": "string",
284
+ "thresh": "gau_loose",
285
+ "stop_in_when_full": 300,
286
+ "align": False,
287
+ "scale_step": "global",
288
+ "max_cycles": 300,
289
+ "dump": False,
290
+ "dump_restart": False,
291
+ "reparam_thresh": 0.0,
292
+ "coord_diff_thresh": 0.0,
293
+ "out_dir": OUT_DIR_PATH_OPT,
294
+ "print_every": 10,
295
+ }
296
+
297
+ # -----------------------------------------------
298
+ # Path search control defaults
299
+ # -----------------------------------------------
300
+
301
+ SEARCH_KW: Dict[str, Any] = {
302
+ "max_depth": 10,
303
+ "stitch_rmsd_thresh": 1.0e-4,
304
+ "bridge_rmsd_thresh": 1.0e-4,
305
+ "max_nodes_segment": 10,
306
+ "max_nodes_bridge": 5,
307
+ "kink_max_nodes": 3,
308
+ "max_seq_kink": 2,
309
+ "refine_mode": None,
310
+ }
311
+
312
+ # -----------------------------------------------
313
+ # IRC defaults
314
+ # -----------------------------------------------
315
+
316
+ IRC_KW: Dict[str, Any] = {
317
+ "step_length": 0.10,
318
+ "max_cycles": 125,
319
+ "downhill": False,
320
+ "forward": True,
321
+ "backward": True,
322
+ "root": 0,
323
+ "hessian_init": "calc",
324
+ "displ": "energy",
325
+ "displ_energy": 1.0e-3,
326
+ "displ_length": 0.10,
327
+ "rms_grad_thresh": 1.0e-3,
328
+ "hard_rms_grad_thresh": None,
329
+ "energy_thresh": 1.0e-6,
330
+ "imag_below": 0.0,
331
+ "force_inflection": True,
332
+ "check_bonds": False,
333
+ "out_dir": OUT_DIR_IRC,
334
+ "prefix": "",
335
+ "hessian_update": "bofill",
336
+ "hessian_recalc": None,
337
+ "max_pred_steps": 500,
338
+ "loose_cycles": 3,
339
+ "corr_func": "mbs",
340
+ }
341
+
342
+ # -----------------------------------------------
343
+ # Microiteration defaults (opt heavy / tsopt heavy)
344
+ # -----------------------------------------------
345
+
346
+ MICROITER_KW: Dict[str, Any] = {
347
+ "micro_thresh": None, # Convergence threshold for MM relaxation (None → same as macro thresh)
348
+ "micro_max_cycles": 10000, # Max LBFGS cycles per micro iteration
349
+ }
350
+
351
+ # -----------------------------------------------
352
+ # Frequency analysis defaults
353
+ # -----------------------------------------------
354
+
355
+ FREQ_KW: Dict[str, Any] = {
356
+ "amplitude_ang": 0.8,
357
+ "n_frames": 20,
358
+ "max_write": 10,
359
+ "sort": "value",
360
+ "out_dir": OUT_DIR_FREQ,
361
+ }
362
+
363
+ # -----------------------------------------------
364
+ # Thermochemistry defaults
365
+ # -----------------------------------------------
366
+
367
+ THERMO_KW: Dict[str, Any] = {
368
+ "temperature": 298.15,
369
+ "pressure_atm": 1.0,
370
+ "dump": False,
371
+ }
372
+
373
+ # -----------------------------------------------
374
+ # TS optimization mode aliases
375
+ # -----------------------------------------------
376
+
377
+ TSOPT_MODE_ALIASES = (
378
+ (("grad", "light", "dimer"), "dimer"),
379
+ (("hess", "heavy", "rsirfo"), "rsirfo"),
380
+ )
381
+
382
+ # -----------------------------------------------
383
+ # Dimer defaults for TS optimization
384
+ # -----------------------------------------------
385
+
386
+ DIMER_KW: Dict[str, Any] = {
387
+ "length": 0.0189,
388
+ "rotation_max_cycles": 15,
389
+ "rotation_method": "fourier",
390
+ "rotation_thresh": 1e-4,
391
+ "rotation_tol": 1,
392
+ "rotation_max_element": 0.001,
393
+ "rotation_interpolate": True,
394
+ "rotation_disable": False,
395
+ "rotation_disable_pos_curv": True,
396
+ "rotation_remove_trans": True,
397
+ "trans_force_f_perp": True,
398
+ "bonds": None,
399
+ "N_hessian": None,
400
+ "bias_rotation": False,
401
+ "bias_translation": False,
402
+ "bias_gaussian_dot": 0.1,
403
+ "seed": None,
404
+ "write_orientations": True,
405
+ "forward_hessian": True,
406
+ }
407
+
408
+ # -----------------------------------------------
409
+ # Hessian-dimer defaults for TS optimization
410
+ # -----------------------------------------------
411
+
412
+ HESSIAN_DIMER_KW: Dict[str, Any] = {
413
+ "thresh_loose": "gau_loose",
414
+ "thresh": "baker",
415
+ "update_interval_hessian": 500,
416
+ "neg_freq_thresh_cm": 5.0,
417
+ "flatten_amp_ang": 0.10,
418
+ "flatten_max_iter": 50,
419
+ "flatten_sep_cutoff": 0.0,
420
+ "flatten_k": 10,
421
+ "flatten_loop_bofill": False,
422
+ "mem": 100000,
423
+ "device": "auto",
424
+ "root": 0,
425
+ # --- ONIOM-specific keys (not present in pdb2reaction) ---
426
+ "partial_hessian_flatten": True,
427
+ "ml_only_hessian_dimer": False,
428
+ }
429
+
430
+ # -----------------------------------------------
431
+ # RS-I-RFO defaults for TS optimization (heavy mode)
432
+ # -----------------------------------------------
433
+
434
+ # Inherit shared keys from RFO_KW, but exclude RFOptimizer-only params
435
+ # that RSIRFOptimizer (via TSHessianOptimizer → Optimizer) does not accept.
436
+ _RFO_ONLY_KEYS = {
437
+ "gediis", "gdiis", "gdiis_thresh", "gediis_thresh",
438
+ "gdiis_test_direction", "adapt_step_func", "rfo_overlaps",
439
+ }
440
+
441
+ RSIRFO_KW: Dict[str, Any] = {
442
+ **{k: v for k, v in RFO_KW.items() if k not in _RFO_ONLY_KEYS},
443
+ "thresh": "baker",
444
+ "trust_radius": 0.10, # ONIOM: smaller initial step (RFO default: 0.30)
445
+ "trust_max": 0.30,
446
+ "max_energy_incr": None,
447
+ "hessian_update": "bofill",
448
+ "hessian_init": "calc",
449
+ "hessian_recalc": 200, # ONIOM: more frequent recalc (RFO default: 500)
450
+ "small_eigval_thresh": 1e-8,
451
+ "out_dir": OUT_DIR_TSOPT,
452
+ }
453
+
454
+ # -----------------------------------------------
455
+ # DFT single-point defaults
456
+ # -----------------------------------------------
457
+
458
+ DFT_KW: Dict[str, Any] = {
459
+ "func_basis": "wb97m-v/def2-tzvpd",
460
+ "max_cycle": 100,
461
+ "conv_tol": 1e-9,
462
+ "grid_level": 3,
463
+ "verbose": 4,
464
+ "out_dir": "./result_dft/",
465
+ }
466
+
467
+ # Note: normalize_choice and deep_update are now in utils.py to avoid duplication