hillclimber 0.1.5a8__cp314-cp314-macosx_15_0_x86_64.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 (469) hide show
  1. hillclimber/__init__.py +39 -0
  2. hillclimber/actions.py +53 -0
  3. hillclimber/analysis.py +590 -0
  4. hillclimber/biases.py +293 -0
  5. hillclimber/calc.py +22 -0
  6. hillclimber/cvs.py +1065 -0
  7. hillclimber/interfaces.py +133 -0
  8. hillclimber/metadynamics.py +325 -0
  9. hillclimber/nodes.py +6 -0
  10. hillclimber/opes.py +359 -0
  11. hillclimber/selectors.py +230 -0
  12. hillclimber/virtual_atoms.py +341 -0
  13. hillclimber-0.1.5a8.dist-info/METADATA +209 -0
  14. hillclimber-0.1.5a8.dist-info/RECORD +469 -0
  15. hillclimber-0.1.5a8.dist-info/WHEEL +6 -0
  16. hillclimber-0.1.5a8.dist-info/entry_points.txt +8 -0
  17. hillclimber-0.1.5a8.dist-info/licenses/LICENSE +165 -0
  18. plumed/__init__.py +104 -0
  19. plumed/_lib/bin/plumed +0 -0
  20. plumed/_lib/bin/plumed-config +9 -0
  21. plumed/_lib/bin/plumed-patch +9 -0
  22. plumed/_lib/include/plumed/adjmat/AdjacencyMatrixBase.h +659 -0
  23. plumed/_lib/include/plumed/adjmat/ContactMatrix.h +59 -0
  24. plumed/_lib/include/plumed/asmjit/arch.h +228 -0
  25. plumed/_lib/include/plumed/asmjit/arm.h +43 -0
  26. plumed/_lib/include/plumed/asmjit/asmjit.h +69 -0
  27. plumed/_lib/include/plumed/asmjit/asmjit_apibegin.h +143 -0
  28. plumed/_lib/include/plumed/asmjit/asmjit_apiend.h +93 -0
  29. plumed/_lib/include/plumed/asmjit/asmjit_build.h +971 -0
  30. plumed/_lib/include/plumed/asmjit/assembler.h +183 -0
  31. plumed/_lib/include/plumed/asmjit/base.h +56 -0
  32. plumed/_lib/include/plumed/asmjit/codebuilder.h +944 -0
  33. plumed/_lib/include/plumed/asmjit/codecompiler.h +767 -0
  34. plumed/_lib/include/plumed/asmjit/codeemitter.h +528 -0
  35. plumed/_lib/include/plumed/asmjit/codeholder.h +777 -0
  36. plumed/_lib/include/plumed/asmjit/constpool.h +286 -0
  37. plumed/_lib/include/plumed/asmjit/cpuinfo.h +402 -0
  38. plumed/_lib/include/plumed/asmjit/func.h +1327 -0
  39. plumed/_lib/include/plumed/asmjit/globals.h +370 -0
  40. plumed/_lib/include/plumed/asmjit/inst.h +137 -0
  41. plumed/_lib/include/plumed/asmjit/logging.h +317 -0
  42. plumed/_lib/include/plumed/asmjit/misc_p.h +103 -0
  43. plumed/_lib/include/plumed/asmjit/moved_string.h +318 -0
  44. plumed/_lib/include/plumed/asmjit/operand.h +1599 -0
  45. plumed/_lib/include/plumed/asmjit/osutils.h +207 -0
  46. plumed/_lib/include/plumed/asmjit/regalloc_p.h +597 -0
  47. plumed/_lib/include/plumed/asmjit/runtime.h +227 -0
  48. plumed/_lib/include/plumed/asmjit/simdtypes.h +1104 -0
  49. plumed/_lib/include/plumed/asmjit/utils.h +1387 -0
  50. plumed/_lib/include/plumed/asmjit/vmem.h +183 -0
  51. plumed/_lib/include/plumed/asmjit/x86.h +45 -0
  52. plumed/_lib/include/plumed/asmjit/x86assembler.h +125 -0
  53. plumed/_lib/include/plumed/asmjit/x86builder.h +117 -0
  54. plumed/_lib/include/plumed/asmjit/x86compiler.h +322 -0
  55. plumed/_lib/include/plumed/asmjit/x86emitter.h +5149 -0
  56. plumed/_lib/include/plumed/asmjit/x86globals.h +535 -0
  57. plumed/_lib/include/plumed/asmjit/x86inst.h +2547 -0
  58. plumed/_lib/include/plumed/asmjit/x86instimpl_p.h +74 -0
  59. plumed/_lib/include/plumed/asmjit/x86internal_p.h +108 -0
  60. plumed/_lib/include/plumed/asmjit/x86logging_p.h +92 -0
  61. plumed/_lib/include/plumed/asmjit/x86misc.h +417 -0
  62. plumed/_lib/include/plumed/asmjit/x86operand.h +1133 -0
  63. plumed/_lib/include/plumed/asmjit/x86regalloc_p.h +734 -0
  64. plumed/_lib/include/plumed/asmjit/zone.h +1157 -0
  65. plumed/_lib/include/plumed/bias/Bias.h +82 -0
  66. plumed/_lib/include/plumed/bias/ReweightBase.h +58 -0
  67. plumed/_lib/include/plumed/blas/blas.h +253 -0
  68. plumed/_lib/include/plumed/blas/def_external.h +61 -0
  69. plumed/_lib/include/plumed/blas/def_internal.h +97 -0
  70. plumed/_lib/include/plumed/blas/real.h +49 -0
  71. plumed/_lib/include/plumed/cltools/CLTool.h +32 -0
  72. plumed/_lib/include/plumed/clusters/ClusteringBase.h +70 -0
  73. plumed/_lib/include/plumed/colvar/Colvar.h +32 -0
  74. plumed/_lib/include/plumed/colvar/ColvarInput.h +68 -0
  75. plumed/_lib/include/plumed/colvar/ColvarShortcut.h +81 -0
  76. plumed/_lib/include/plumed/colvar/CoordinationBase.h +52 -0
  77. plumed/_lib/include/plumed/colvar/MultiColvarTemplate.h +333 -0
  78. plumed/_lib/include/plumed/colvar/PathMSDBase.h +101 -0
  79. plumed/_lib/include/plumed/colvar/RMSDVector.h +78 -0
  80. plumed/_lib/include/plumed/config/Config.h +118 -0
  81. plumed/_lib/include/plumed/config/version.h +9 -0
  82. plumed/_lib/include/plumed/contour/ContourFindingObject.h +87 -0
  83. plumed/_lib/include/plumed/contour/DistanceFromContourBase.h +82 -0
  84. plumed/_lib/include/plumed/contour/FindContour.h +67 -0
  85. plumed/_lib/include/plumed/core/Action.h +540 -0
  86. plumed/_lib/include/plumed/core/ActionAnyorder.h +48 -0
  87. plumed/_lib/include/plumed/core/ActionAtomistic.h +343 -0
  88. plumed/_lib/include/plumed/core/ActionForInterface.h +99 -0
  89. plumed/_lib/include/plumed/core/ActionPilot.h +57 -0
  90. plumed/_lib/include/plumed/core/ActionRegister.h +124 -0
  91. plumed/_lib/include/plumed/core/ActionSet.h +163 -0
  92. plumed/_lib/include/plumed/core/ActionSetup.h +48 -0
  93. plumed/_lib/include/plumed/core/ActionShortcut.h +73 -0
  94. plumed/_lib/include/plumed/core/ActionToGetData.h +59 -0
  95. plumed/_lib/include/plumed/core/ActionToPutData.h +101 -0
  96. plumed/_lib/include/plumed/core/ActionWithArguments.h +140 -0
  97. plumed/_lib/include/plumed/core/ActionWithMatrix.h +87 -0
  98. plumed/_lib/include/plumed/core/ActionWithValue.h +258 -0
  99. plumed/_lib/include/plumed/core/ActionWithVector.h +94 -0
  100. plumed/_lib/include/plumed/core/ActionWithVirtualAtom.h +123 -0
  101. plumed/_lib/include/plumed/core/CLTool.h +177 -0
  102. plumed/_lib/include/plumed/core/CLToolMain.h +102 -0
  103. plumed/_lib/include/plumed/core/CLToolRegister.h +108 -0
  104. plumed/_lib/include/plumed/core/Colvar.h +115 -0
  105. plumed/_lib/include/plumed/core/DataPassingObject.h +94 -0
  106. plumed/_lib/include/plumed/core/DataPassingTools.h +54 -0
  107. plumed/_lib/include/plumed/core/DomainDecomposition.h +120 -0
  108. plumed/_lib/include/plumed/core/ExchangePatterns.h +47 -0
  109. plumed/_lib/include/plumed/core/FlexibleBin.h +63 -0
  110. plumed/_lib/include/plumed/core/GREX.h +61 -0
  111. plumed/_lib/include/plumed/core/GenericMolInfo.h +89 -0
  112. plumed/_lib/include/plumed/core/Group.h +41 -0
  113. plumed/_lib/include/plumed/core/ModuleMap.h +30 -0
  114. plumed/_lib/include/plumed/core/ParallelTaskManager.h +1023 -0
  115. plumed/_lib/include/plumed/core/PbcAction.h +61 -0
  116. plumed/_lib/include/plumed/core/PlumedMain.h +632 -0
  117. plumed/_lib/include/plumed/core/PlumedMainInitializer.h +118 -0
  118. plumed/_lib/include/plumed/core/RegisterBase.h +340 -0
  119. plumed/_lib/include/plumed/core/TargetDist.h +48 -0
  120. plumed/_lib/include/plumed/core/Value.h +547 -0
  121. plumed/_lib/include/plumed/core/WithCmd.h +93 -0
  122. plumed/_lib/include/plumed/dimred/SMACOF.h +55 -0
  123. plumed/_lib/include/plumed/drr/DRR.h +383 -0
  124. plumed/_lib/include/plumed/drr/colvar_UIestimator.h +777 -0
  125. plumed/_lib/include/plumed/fisst/legendre_rule_fast.h +44 -0
  126. plumed/_lib/include/plumed/function/Custom.h +54 -0
  127. plumed/_lib/include/plumed/function/Function.h +85 -0
  128. plumed/_lib/include/plumed/function/FunctionOfMatrix.h +368 -0
  129. plumed/_lib/include/plumed/function/FunctionOfScalar.h +135 -0
  130. plumed/_lib/include/plumed/function/FunctionOfVector.h +296 -0
  131. plumed/_lib/include/plumed/function/FunctionSetup.h +180 -0
  132. plumed/_lib/include/plumed/function/FunctionShortcut.h +130 -0
  133. plumed/_lib/include/plumed/function/FunctionWithSingleArgument.h +165 -0
  134. plumed/_lib/include/plumed/gridtools/ActionWithGrid.h +43 -0
  135. plumed/_lib/include/plumed/gridtools/EvaluateGridFunction.h +99 -0
  136. plumed/_lib/include/plumed/gridtools/FunctionOfGrid.h +295 -0
  137. plumed/_lib/include/plumed/gridtools/GridCoordinatesObject.h +179 -0
  138. plumed/_lib/include/plumed/gridtools/GridSearch.h +135 -0
  139. plumed/_lib/include/plumed/gridtools/Interpolator.h +45 -0
  140. plumed/_lib/include/plumed/gridtools/KDE.h +455 -0
  141. plumed/_lib/include/plumed/gridtools/RDF.h +40 -0
  142. plumed/_lib/include/plumed/gridtools/SumOfKernels.h +219 -0
  143. plumed/_lib/include/plumed/isdb/MetainferenceBase.h +398 -0
  144. plumed/_lib/include/plumed/lapack/def_external.h +207 -0
  145. plumed/_lib/include/plumed/lapack/def_internal.h +388 -0
  146. plumed/_lib/include/plumed/lapack/lapack.h +899 -0
  147. plumed/_lib/include/plumed/lapack/lapack_limits.h +79 -0
  148. plumed/_lib/include/plumed/lapack/real.h +50 -0
  149. plumed/_lib/include/plumed/lepton/CompiledExpression.h +164 -0
  150. plumed/_lib/include/plumed/lepton/CustomFunction.h +143 -0
  151. plumed/_lib/include/plumed/lepton/Exception.h +93 -0
  152. plumed/_lib/include/plumed/lepton/ExpressionProgram.h +137 -0
  153. plumed/_lib/include/plumed/lepton/ExpressionTreeNode.h +145 -0
  154. plumed/_lib/include/plumed/lepton/Lepton.h +85 -0
  155. plumed/_lib/include/plumed/lepton/MSVC_erfc.h +123 -0
  156. plumed/_lib/include/plumed/lepton/Operation.h +1302 -0
  157. plumed/_lib/include/plumed/lepton/ParsedExpression.h +165 -0
  158. plumed/_lib/include/plumed/lepton/Parser.h +111 -0
  159. plumed/_lib/include/plumed/lepton/windowsIncludes.h +73 -0
  160. plumed/_lib/include/plumed/mapping/Path.h +44 -0
  161. plumed/_lib/include/plumed/mapping/PathProjectionCalculator.h +57 -0
  162. plumed/_lib/include/plumed/matrixtools/MatrixOperationBase.h +54 -0
  163. plumed/_lib/include/plumed/matrixtools/MatrixTimesMatrix.h +309 -0
  164. plumed/_lib/include/plumed/matrixtools/MatrixTimesVectorBase.h +365 -0
  165. plumed/_lib/include/plumed/matrixtools/OuterProduct.h +238 -0
  166. plumed/_lib/include/plumed/maze/Core.h +65 -0
  167. plumed/_lib/include/plumed/maze/Loss.h +86 -0
  168. plumed/_lib/include/plumed/maze/Member.h +66 -0
  169. plumed/_lib/include/plumed/maze/Memetic.h +799 -0
  170. plumed/_lib/include/plumed/maze/Optimizer.h +357 -0
  171. plumed/_lib/include/plumed/maze/Random_MT.h +156 -0
  172. plumed/_lib/include/plumed/maze/Tools.h +183 -0
  173. plumed/_lib/include/plumed/metatomic/vesin.h +188 -0
  174. plumed/_lib/include/plumed/molfile/Gromacs.h +2013 -0
  175. plumed/_lib/include/plumed/molfile/endianswap.h +217 -0
  176. plumed/_lib/include/plumed/molfile/fastio.h +683 -0
  177. plumed/_lib/include/plumed/molfile/largefiles.h +78 -0
  178. plumed/_lib/include/plumed/molfile/libmolfile_plugin.h +77 -0
  179. plumed/_lib/include/plumed/molfile/molfile_plugin.h +1034 -0
  180. plumed/_lib/include/plumed/molfile/periodic_table.h +248 -0
  181. plumed/_lib/include/plumed/molfile/readpdb.h +447 -0
  182. plumed/_lib/include/plumed/molfile/vmdplugin.h +236 -0
  183. plumed/_lib/include/plumed/multicolvar/MultiColvarShortcuts.h +45 -0
  184. plumed/_lib/include/plumed/opes/ExpansionCVs.h +79 -0
  185. plumed/_lib/include/plumed/sasa/Sasa.h +32 -0
  186. plumed/_lib/include/plumed/secondarystructure/SecondaryStructureBase.h +372 -0
  187. plumed/_lib/include/plumed/setup/ActionSetup.h +25 -0
  188. plumed/_lib/include/plumed/small_vector/small_vector.h +6114 -0
  189. plumed/_lib/include/plumed/symfunc/CoordinationNumbers.h +41 -0
  190. plumed/_lib/include/plumed/tools/Angle.h +52 -0
  191. plumed/_lib/include/plumed/tools/AtomDistribution.h +138 -0
  192. plumed/_lib/include/plumed/tools/AtomNumber.h +152 -0
  193. plumed/_lib/include/plumed/tools/BiasRepresentation.h +106 -0
  194. plumed/_lib/include/plumed/tools/BitmaskEnum.h +167 -0
  195. plumed/_lib/include/plumed/tools/Brent1DRootSearch.h +159 -0
  196. plumed/_lib/include/plumed/tools/CheckInRange.h +44 -0
  197. plumed/_lib/include/plumed/tools/Citations.h +74 -0
  198. plumed/_lib/include/plumed/tools/ColvarOutput.h +118 -0
  199. plumed/_lib/include/plumed/tools/Communicator.h +316 -0
  200. plumed/_lib/include/plumed/tools/ConjugateGradient.h +80 -0
  201. plumed/_lib/include/plumed/tools/DLLoader.h +79 -0
  202. plumed/_lib/include/plumed/tools/ERMSD.h +73 -0
  203. plumed/_lib/include/plumed/tools/Exception.h +406 -0
  204. plumed/_lib/include/plumed/tools/File.h +28 -0
  205. plumed/_lib/include/plumed/tools/FileBase.h +153 -0
  206. plumed/_lib/include/plumed/tools/FileTools.h +37 -0
  207. plumed/_lib/include/plumed/tools/ForwardDecl.h +54 -0
  208. plumed/_lib/include/plumed/tools/Grid.h +638 -0
  209. plumed/_lib/include/plumed/tools/HistogramBead.h +136 -0
  210. plumed/_lib/include/plumed/tools/IFile.h +117 -0
  211. plumed/_lib/include/plumed/tools/KernelFunctions.h +113 -0
  212. plumed/_lib/include/plumed/tools/Keywords.h +380 -0
  213. plumed/_lib/include/plumed/tools/LatticeReduction.h +66 -0
  214. plumed/_lib/include/plumed/tools/LeptonCall.h +64 -0
  215. plumed/_lib/include/plumed/tools/LinkCells.h +126 -0
  216. plumed/_lib/include/plumed/tools/Log.h +41 -0
  217. plumed/_lib/include/plumed/tools/LoopUnroller.h +163 -0
  218. plumed/_lib/include/plumed/tools/Matrix.h +721 -0
  219. plumed/_lib/include/plumed/tools/MatrixSquareBracketsAccess.h +138 -0
  220. plumed/_lib/include/plumed/tools/MergeVectorTools.h +153 -0
  221. plumed/_lib/include/plumed/tools/Minimise1DBrent.h +244 -0
  222. plumed/_lib/include/plumed/tools/MinimiseBase.h +120 -0
  223. plumed/_lib/include/plumed/tools/MolDataClass.h +51 -0
  224. plumed/_lib/include/plumed/tools/NeighborList.h +112 -0
  225. plumed/_lib/include/plumed/tools/OFile.h +286 -0
  226. plumed/_lib/include/plumed/tools/OpenACC.h +180 -0
  227. plumed/_lib/include/plumed/tools/OpenMP.h +75 -0
  228. plumed/_lib/include/plumed/tools/PDB.h +154 -0
  229. plumed/_lib/include/plumed/tools/Pbc.h +139 -0
  230. plumed/_lib/include/plumed/tools/PlumedHandle.h +105 -0
  231. plumed/_lib/include/plumed/tools/RMSD.h +493 -0
  232. plumed/_lib/include/plumed/tools/Random.h +80 -0
  233. plumed/_lib/include/plumed/tools/RootFindingBase.h +79 -0
  234. plumed/_lib/include/plumed/tools/Stopwatch.h +475 -0
  235. plumed/_lib/include/plumed/tools/Subprocess.h +142 -0
  236. plumed/_lib/include/plumed/tools/SwitchingFunction.h +208 -0
  237. plumed/_lib/include/plumed/tools/Tensor.h +724 -0
  238. plumed/_lib/include/plumed/tools/TokenizedLine.h +123 -0
  239. plumed/_lib/include/plumed/tools/Tools.h +638 -0
  240. plumed/_lib/include/plumed/tools/Torsion.h +55 -0
  241. plumed/_lib/include/plumed/tools/TrajectoryParser.h +118 -0
  242. plumed/_lib/include/plumed/tools/Tree.h +61 -0
  243. plumed/_lib/include/plumed/tools/TypesafePtr.h +463 -0
  244. plumed/_lib/include/plumed/tools/Units.h +167 -0
  245. plumed/_lib/include/plumed/tools/Vector.h +433 -0
  246. plumed/_lib/include/plumed/tools/View.h +296 -0
  247. plumed/_lib/include/plumed/tools/View2D.h +100 -0
  248. plumed/_lib/include/plumed/tools/h36.h +39 -0
  249. plumed/_lib/include/plumed/vatom/ActionWithVirtualAtom.h +32 -0
  250. plumed/_lib/include/plumed/ves/BasisFunctions.h +380 -0
  251. plumed/_lib/include/plumed/ves/CoeffsBase.h +310 -0
  252. plumed/_lib/include/plumed/ves/CoeffsMatrix.h +220 -0
  253. plumed/_lib/include/plumed/ves/CoeffsVector.h +251 -0
  254. plumed/_lib/include/plumed/ves/FermiSwitchingFunction.h +74 -0
  255. plumed/_lib/include/plumed/ves/GridIntegrationWeights.h +50 -0
  256. plumed/_lib/include/plumed/ves/GridLinearInterpolation.h +81 -0
  257. plumed/_lib/include/plumed/ves/GridProjWeights.h +61 -0
  258. plumed/_lib/include/plumed/ves/LinearBasisSetExpansion.h +303 -0
  259. plumed/_lib/include/plumed/ves/Optimizer.h +444 -0
  260. plumed/_lib/include/plumed/ves/TargetDistModifer.h +53 -0
  261. plumed/_lib/include/plumed/ves/TargetDistribution.h +266 -0
  262. plumed/_lib/include/plumed/ves/VesBias.h +545 -0
  263. plumed/_lib/include/plumed/ves/VesTools.h +142 -0
  264. plumed/_lib/include/plumed/ves/WaveletGrid.h +75 -0
  265. plumed/_lib/include/plumed/volumes/ActionVolume.h +268 -0
  266. plumed/_lib/include/plumed/volumes/VolumeShortcut.h +147 -0
  267. plumed/_lib/include/plumed/wrapper/Plumed.h +5025 -0
  268. plumed/_lib/include/plumed/xdrfile/xdrfile.h +663 -0
  269. plumed/_lib/include/plumed/xdrfile/xdrfile_trr.h +89 -0
  270. plumed/_lib/include/plumed/xdrfile/xdrfile_xtc.h +90 -0
  271. plumed/_lib/lib/PythonCVInterface.dylib +0 -0
  272. plumed/_lib/lib/libplumed.dylib +0 -0
  273. plumed/_lib/lib/libplumedKernel.dylib +0 -0
  274. plumed/_lib/lib/libplumedWrapper.a +0 -0
  275. plumed/_lib/lib/pkgconfig/plumed.pc +13 -0
  276. plumed/_lib/lib/pkgconfig/plumedInternals.pc +13 -0
  277. plumed/_lib/lib/pkgconfig/plumedWrapper.pc +13 -0
  278. plumed/_lib/lib/plumed/fortran/plumed.f90 +879 -0
  279. plumed/_lib/lib/plumed/fortran/plumed_f08.f90 +2625 -0
  280. plumed/_lib/lib/plumed/modulefile +69 -0
  281. plumed/_lib/lib/plumed/patches/gromacs-2022.5.config +43 -0
  282. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt +543 -0
  283. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt.preplumed +540 -0
  284. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp +1628 -0
  285. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1590 -0
  286. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h +103 -0
  287. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h.preplumed +99 -0
  288. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp +2527 -0
  289. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2513 -0
  290. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  291. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  292. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +408 -0
  293. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +394 -0
  294. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp +2348 -0
  295. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2091 -0
  296. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp +3573 -0
  297. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3495 -0
  298. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1506 -0
  299. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1402 -0
  300. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  301. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  302. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp +997 -0
  303. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +906 -0
  304. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp +2780 -0
  305. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2738 -0
  306. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  307. plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  308. plumed/_lib/lib/plumed/patches/gromacs-2023.5.config +43 -0
  309. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt +549 -0
  310. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt.preplumed +546 -0
  311. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  312. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  313. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h +104 -0
  314. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  315. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp +2624 -0
  316. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2610 -0
  317. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  318. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  319. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +409 -0
  320. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +395 -0
  321. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp +2419 -0
  322. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2164 -0
  323. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp +3546 -0
  324. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3468 -0
  325. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  326. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  327. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  328. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  329. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp +991 -0
  330. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +900 -0
  331. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp +2895 -0
  332. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2849 -0
  333. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  334. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  335. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp +886 -0
  336. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +880 -0
  337. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +347 -0
  338. plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +345 -0
  339. plumed/_lib/lib/plumed/patches/gromacs-2024.3.config +43 -0
  340. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt +575 -0
  341. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt.preplumed +572 -0
  342. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
  343. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
  344. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h +104 -0
  345. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
  346. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp +2564 -0
  347. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2550 -0
  348. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
  349. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
  350. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h +410 -0
  351. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +396 -0
  352. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp +2435 -0
  353. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp.preplumed +2187 -0
  354. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp +3592 -0
  355. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3514 -0
  356. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
  357. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
  358. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
  359. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
  360. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp +958 -0
  361. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp.preplumed +929 -0
  362. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp +2987 -0
  363. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp.preplumed +2941 -0
  364. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
  365. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
  366. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp +904 -0
  367. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +898 -0
  368. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +353 -0
  369. plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +351 -0
  370. plumed/_lib/lib/plumed/patches/gromacs-2025.0.config +39 -0
  371. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake +82 -0
  372. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake.preplumed +82 -0
  373. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp +162 -0
  374. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp.preplumed +154 -0
  375. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp +107 -0
  376. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp.preplumed +99 -0
  377. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h +120 -0
  378. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h.preplumed +111 -0
  379. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp +215 -0
  380. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp.preplumed +197 -0
  381. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h +87 -0
  382. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h.preplumed +86 -0
  383. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp +2971 -0
  384. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp.preplumed +2970 -0
  385. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h +430 -0
  386. plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h.preplumed +429 -0
  387. plumed/_lib/lib/plumed/patches/namd-2.12.config +30 -0
  388. plumed/_lib/lib/plumed/patches/namd-2.12.diff +267 -0
  389. plumed/_lib/lib/plumed/patches/namd-2.13.config +30 -0
  390. plumed/_lib/lib/plumed/patches/namd-2.13.diff +267 -0
  391. plumed/_lib/lib/plumed/patches/namd-2.14.config +30 -0
  392. plumed/_lib/lib/plumed/patches/namd-2.14.diff +268 -0
  393. plumed/_lib/lib/plumed/patches/patch.sh +500 -0
  394. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.config +25 -0
  395. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90 +368 -0
  396. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90.preplumed +366 -0
  397. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90 +71 -0
  398. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90.preplumed +24 -0
  399. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90 +62 -0
  400. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  401. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90 +189 -0
  402. plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90.preplumed +185 -0
  403. plumed/_lib/lib/plumed/patches/qespresso-6.2.config +26 -0
  404. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90 +422 -0
  405. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90.preplumed +420 -0
  406. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90 +70 -0
  407. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  408. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90 +62 -0
  409. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  410. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90 +233 -0
  411. plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90.preplumed +230 -0
  412. plumed/_lib/lib/plumed/patches/qespresso-7.0.config +28 -0
  413. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile +175 -0
  414. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile.preplumed +171 -0
  415. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90 +486 -0
  416. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90.preplumed +484 -0
  417. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90 +74 -0
  418. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  419. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90 +64 -0
  420. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  421. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90 +532 -0
  422. plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90.preplumed +518 -0
  423. plumed/_lib/lib/plumed/patches/qespresso-7.2.config +28 -0
  424. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile +249 -0
  425. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile.preplumed +244 -0
  426. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90 +532 -0
  427. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90.preplumed +535 -0
  428. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90 +74 -0
  429. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
  430. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90 +64 -0
  431. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
  432. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90 +569 -0
  433. plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90.preplumed +560 -0
  434. plumed/_lib/lib/plumed/plumed-config +9 -0
  435. plumed/_lib/lib/plumed/plumed-mklib +9 -0
  436. plumed/_lib/lib/plumed/plumed-newcv +9 -0
  437. plumed/_lib/lib/plumed/plumed-partial_tempering +9 -0
  438. plumed/_lib/lib/plumed/plumed-patch +9 -0
  439. plumed/_lib/lib/plumed/plumed-runtime +0 -0
  440. plumed/_lib/lib/plumed/plumed-selector +9 -0
  441. plumed/_lib/lib/plumed/plumed-vim2html +9 -0
  442. plumed/_lib/lib/plumed/scripts/config.sh +126 -0
  443. plumed/_lib/lib/plumed/scripts/mklib.sh +175 -0
  444. plumed/_lib/lib/plumed/scripts/newcv.sh +26 -0
  445. plumed/_lib/lib/plumed/scripts/partial_tempering.sh +319 -0
  446. plumed/_lib/lib/plumed/scripts/patch.sh +4 -0
  447. plumed/_lib/lib/plumed/scripts/selector.sh +234 -0
  448. plumed/_lib/lib/plumed/scripts/vim2html.sh +190 -0
  449. plumed/_lib/lib/plumed/src/colvar/Template.cpp +116 -0
  450. plumed/_lib/lib/plumed/src/config/compile_options.sh +3 -0
  451. plumed/_lib/lib/plumed/src/config/config.txt +181 -0
  452. plumed/_lib/lib/plumed/src/lib/Plumed.cmake +6 -0
  453. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.runtime +5 -0
  454. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.shared +5 -0
  455. plumed/_lib/lib/plumed/src/lib/Plumed.cmake.static +3 -0
  456. plumed/_lib/lib/plumed/src/lib/Plumed.inc +6 -0
  457. plumed/_lib/lib/plumed/src/lib/Plumed.inc.runtime +5 -0
  458. plumed/_lib/lib/plumed/src/lib/Plumed.inc.shared +5 -0
  459. plumed/_lib/lib/plumed/src/lib/Plumed.inc.static +3 -0
  460. plumed/_lib/lib/plumed/vim/scripts.vim +6 -0
  461. plumed/_plumed_core.cpython-311-darwin.so +0 -0
  462. plumed/_plumed_core.cpython-312-darwin.so +0 -0
  463. plumed/_plumed_core.cpython-313-darwin.so +0 -0
  464. plumed/_plumed_core.cpython-314-darwin.so +0 -0
  465. plumedCommunications.cpython-311-darwin.so +0 -0
  466. plumedCommunications.cpython-312-darwin.so +0 -0
  467. plumedCommunications.cpython-313-darwin.so +0 -0
  468. plumedCommunications.cpython-314-darwin.so +0 -0
  469. plumedCommunications.pyi +431 -0
hillclimber/opes.py ADDED
@@ -0,0 +1,359 @@
1
+ """OPES (On-the-fly Probability Enhanced Sampling) methods.
2
+
3
+ This module provides classes for OPES enhanced sampling, a modern alternative
4
+ to traditional metadynamics with improved convergence properties.
5
+ """
6
+
7
+ import dataclasses
8
+ from pathlib import Path
9
+
10
+ import ase.units
11
+ import zntrack
12
+
13
+ from hillclimber.calc import NonOverwritingPlumed
14
+ from hillclimber.interfaces import (
15
+ CollectiveVariable,
16
+ NodeWithCalculator,
17
+ PlumedGenerator,
18
+ )
19
+
20
+
21
+ @dataclasses.dataclass
22
+ class OPESBias:
23
+ """OPES bias configuration for a collective variable.
24
+
25
+ Parameters
26
+ ----------
27
+ cv : CollectiveVariable
28
+ The collective variable to bias.
29
+ sigma : float | str, optional
30
+ Initial kernel width in CV units (e.g., Å for distances, radians for angles).
31
+ Use "ADAPTIVE" for automatic adaptation (recommended).
32
+ If numeric, specifies the initial width.
33
+ Default: "ADAPTIVE".
34
+
35
+ Resources
36
+ ---------
37
+ - https://www.plumed.org/doc-master/user-doc/html/OPES_METAD/
38
+
39
+ Notes
40
+ -----
41
+ The ADAPTIVE sigma option automatically adjusts kernel widths based on
42
+ CV fluctuations, which is usually the best choice. The automatic width
43
+ is measured every ADAPTIVE_SIGMA_STRIDE steps (default: 10×PACE).
44
+ """
45
+
46
+ cv: CollectiveVariable
47
+ sigma: float | str = "ADAPTIVE"
48
+
49
+
50
+ @dataclasses.dataclass
51
+ class OPESConfig:
52
+ """Configuration for OPES_METAD and OPES_METAD_EXPLORE.
53
+
54
+ OPES (On-the-fly Probability Enhanced Sampling) is a modern enhanced
55
+ sampling method that samples well-tempered target distributions.
56
+
57
+ Units
58
+ -----
59
+ hillclimber uses ASE units throughout. The UNITS line in the PLUMED input tells
60
+ PLUMED to interpret all values in ASE units:
61
+ - Distances: Ångström (Å)
62
+ - Energies: electronvolt (eV) - including BARRIER, SIGMA_MIN, etc.
63
+ - Time: femtoseconds (fs)
64
+ - Temperature: Kelvin (K)
65
+
66
+ Parameters
67
+ ----------
68
+ barrier : float
69
+ Highest free energy barrier to overcome (eV). This is the key
70
+ parameter that determines sampling efficiency.
71
+ pace : int, optional
72
+ Frequency of kernel deposition in MD steps (default: 500).
73
+ temp : float, optional
74
+ Temperature in Kelvin (default: 300.0). If -1, retrieved from MD engine.
75
+ explore_mode : bool, optional
76
+ If True, uses OPES_METAD_EXPLORE which estimates target distribution
77
+ directly (better exploration, slower reweighting convergence).
78
+ If False, uses OPES_METAD which estimates unbiased distribution
79
+ (faster convergence, less exploration). Default: False.
80
+ biasfactor : float, optional
81
+ Well-tempered gamma factor. If not specified, uses default behavior.
82
+ Set to inf for custom target distributions.
83
+ compression_threshold : float, optional
84
+ Merge kernels if closer than this threshold in sigma units (default: 1.0).
85
+ file : str, optional
86
+ File to store deposited kernels (default: "KERNELS").
87
+ adaptive_sigma_stride : int, optional
88
+ MD steps between adaptive sigma measurements. If not set, uses 10×PACE.
89
+ sigma_min : float, optional
90
+ Minimum allowable sigma value for adaptive sigma in CV units.
91
+ state_wfile : str, optional
92
+ State file for writing exact restart information.
93
+ state_rfile : str, optional
94
+ State file for reading restart information.
95
+ state_wstride : int, optional
96
+ Frequency of STATE file writing in number of kernel depositions.
97
+ walkers_mpi : bool, optional
98
+ Enable multiple walker mode with MPI communication (default: False).
99
+ calc_work : bool, optional
100
+ Calculate and output accumulated work (default: False).
101
+ flush : int, optional
102
+ Frequency of flushing output files in MD steps.
103
+
104
+ Resources
105
+ ---------
106
+ - https://www.plumed.org/doc-master/user-doc/html/OPES_METAD/
107
+ - https://www.plumed.org/doc-master/user-doc/html/OPES_METAD_EXPLORE/
108
+ - Invernizzi & Parrinello, J. Phys. Chem. Lett. 2020
109
+
110
+ Notes
111
+ -----
112
+ **When to use OPES_METAD vs OPES_METAD_EXPLORE:**
113
+
114
+ - OPES_METAD: Use when you want quick convergence of reweighted free energy.
115
+ Estimates unbiased distribution P(s).
116
+
117
+ - OPES_METAD_EXPLORE: Use for systems with unknown barriers or when testing
118
+ new CVs. Allows more exploration but slower reweighting convergence.
119
+ Estimates target distribution p^WT(s) directly.
120
+
121
+ Both methods converge to the same bias given enough time, but approach it
122
+ differently. OPES is more sensitive to degenerate CVs than standard METAD.
123
+ """
124
+
125
+ barrier: float # kJ/mol
126
+ pace: int = 500
127
+ temp: float = 300.0
128
+ explore_mode: bool = False # False=OPES_METAD, True=OPES_METAD_EXPLORE
129
+ biasfactor: float | None = None
130
+ compression_threshold: float = 1.0
131
+ file: str = "KERNELS"
132
+ adaptive_sigma_stride: int | None = None
133
+ sigma_min: float | None = None
134
+ state_wfile: str | None = None
135
+ state_rfile: str | None = None
136
+ state_wstride: int | None = None
137
+ walkers_mpi: bool = False
138
+ calc_work: bool = False
139
+ flush: int | None = None
140
+
141
+
142
+ class OPESModel(zntrack.Node, NodeWithCalculator):
143
+ """OPES (On-the-fly Probability Enhanced Sampling) model.
144
+
145
+ Implements OPES_METAD and OPES_METAD_EXPLORE enhanced sampling methods.
146
+ OPES samples well-tempered target distributions and provides better
147
+ convergence properties than traditional metadynamics.
148
+
149
+ Parameters
150
+ ----------
151
+ config : OPESConfig
152
+ Configuration for the OPES simulation.
153
+ data : list[ase.Atoms]
154
+ Input data for simulation.
155
+ data_idx : int, optional
156
+ Index of data to use (default: -1).
157
+ bias_cvs : list[OPESBias], optional
158
+ Collective variables to bias (default: []).
159
+ actions : list[PlumedGenerator], optional
160
+ Additional actions like restraints, walls, print (default: []).
161
+ timestep : float, optional
162
+ Timestep in fs (default: 1.0).
163
+ model : NodeWithCalculator
164
+ Underlying force field model.
165
+
166
+ Examples
167
+ --------
168
+ >>> import hillclimber as hc
169
+ >>>
170
+ >>> # Define collective variables
171
+ >>> phi = hc.TorsionCV(...)
172
+ >>> psi = hc.TorsionCV(...)
173
+ >>>
174
+ >>> # OPES configuration (standard mode)
175
+ >>> config = hc.OPESConfig(
176
+ ... barrier=40.0, # kJ/mol
177
+ ... pace=500,
178
+ ... temp=300.0,
179
+ ... explore_mode=False # Use OPES_METAD
180
+ ... )
181
+ >>>
182
+ >>> # Bias configuration with adaptive sigma
183
+ >>> bias1 = hc.OPESBias(cv=phi, sigma="ADAPTIVE")
184
+ >>> bias2 = hc.OPESBias(cv=psi, sigma="ADAPTIVE")
185
+ >>>
186
+ >>> # Create OPES model
187
+ >>> opes = hc.OPESModel(
188
+ ... config=config,
189
+ ... bias_cvs=[bias1, bias2],
190
+ ... data=data.frames,
191
+ ... model=force_field,
192
+ ... timestep=0.5
193
+ ... )
194
+ >>>
195
+ >>> # For exploration mode, set explore_mode=True
196
+ >>> explore_config = hc.OPESConfig(
197
+ ... barrier=40.0,
198
+ ... pace=500,
199
+ ... explore_mode=True # Use OPES_METAD_EXPLORE
200
+ ... )
201
+
202
+ Resources
203
+ ---------
204
+ - https://www.plumed.org/doc-master/user-doc/html/OPES_METAD/
205
+ - https://www.plumed.org/doc-master/user-doc/html/OPES_METAD_EXPLORE/
206
+ - https://www.plumed.org/doc-master/user-doc/html/masterclass-22-03.html
207
+ - Invernizzi & Parrinello, J. Phys. Chem. Lett. 2020
208
+
209
+ Notes
210
+ -----
211
+ **Output Components:**
212
+ OPES provides several diagnostic outputs (accessible via PrintAction):
213
+ - opes.bias: Instantaneous bias potential value
214
+ - opes.rct: Convergence indicator (should flatten at convergence)
215
+ - opes.zed: Normalization estimate (should stabilize)
216
+ - opes.neff: Effective sample size
217
+ - opes.nker: Number of compressed kernels
218
+ - opes.work: Accumulated work (if calc_work=True)
219
+
220
+ **Advantages over Metadynamics:**
221
+ - Better convergence properties
222
+ - Automatic variance adaptation
223
+ - Lower systematic error
224
+ - More sensitive to degenerate CVs (helps identify CV problems)
225
+ """
226
+
227
+ config: OPESConfig = zntrack.deps()
228
+ data: list[ase.Atoms] = zntrack.deps()
229
+ data_idx: int = zntrack.params(-1)
230
+ bias_cvs: list[OPESBias] = zntrack.deps(default_factory=list)
231
+ actions: list[PlumedGenerator] = zntrack.deps(default_factory=list)
232
+ timestep: float = zntrack.params(1.0)
233
+ model: NodeWithCalculator = zntrack.deps()
234
+
235
+ figures: Path = zntrack.outs_path(zntrack.nwd / "figures", independent=True)
236
+
237
+ def run(self):
238
+ self.figures.mkdir(parents=True, exist_ok=True)
239
+ for cv in self.bias_cvs:
240
+ img = cv.cv.get_img(self.data[self.data_idx])
241
+ img.save(self.figures / f"{cv.cv.prefix}.png")
242
+
243
+ def get_calculator(
244
+ self, *, directory: str | Path | None = None, **kwargs
245
+ ) -> NonOverwritingPlumed:
246
+ if directory is None:
247
+ raise ValueError("Directory must be specified for PLUMED input files.")
248
+ directory = Path(directory)
249
+ directory.mkdir(parents=True, exist_ok=True)
250
+
251
+ lines = self.to_plumed(self.data[self.data_idx])
252
+ # replace FILE= with f"FILE={directory}/" inside config
253
+ lines = [line.replace("FILE=", f"FILE={directory}/") for line in lines]
254
+
255
+ # Write plumed input file
256
+ with (directory / "plumed.dat").open("w") as file:
257
+ for line in lines:
258
+ file.write(line + "\n")
259
+
260
+ kT = ase.units.kB * self.config.temp
261
+
262
+ return NonOverwritingPlumed(
263
+ calc=self.model.get_calculator(directory=directory),
264
+ atoms=self.data[self.data_idx],
265
+ input=lines,
266
+ timestep=float(self.timestep * ase.units.fs),
267
+ kT=float(kT),
268
+ log=(directory / "plumed.log").as_posix(),
269
+ )
270
+
271
+ def to_plumed(self, atoms: ase.Atoms) -> list[str]:
272
+ """Generate PLUMED input string for the OPES model."""
273
+ # check for duplicate CV prefixes
274
+ cv_labels = set()
275
+ for bias_cv in self.bias_cvs:
276
+ if bias_cv.cv.prefix in cv_labels:
277
+ raise ValueError(f"Duplicate CV prefix found: {bias_cv.cv.prefix}")
278
+ cv_labels.add(bias_cv.cv.prefix)
279
+
280
+ plumed_lines = []
281
+ all_labels = []
282
+
283
+ sigmas = []
284
+
285
+ # PLUMED UNITS line specifies conversion factors from ASE units to PLUMED's native units:
286
+ # - LENGTH=A: ASE uses Ångström (A), PLUMED native is nm → A is a valid PLUMED unit
287
+ # - TIME: ASE uses fs, PLUMED native is ps → 1 fs = 0.001 ps
288
+ # - ENERGY: ASE uses eV, PLUMED native is kJ/mol → 1 eV = 96.485 kJ/mol
289
+ # See: https://www.plumed.org/doc-master/user-doc/html/ (MD engine integration docs)
290
+ plumed_lines.append(
291
+ f"UNITS LENGTH=A TIME={1 / 1000} ENERGY={ase.units.mol / ase.units.kJ}"
292
+ )
293
+
294
+ for bias_cv in self.bias_cvs:
295
+ labels, cv_str = bias_cv.cv.to_plumed(atoms)
296
+ plumed_lines.extend(cv_str)
297
+ all_labels.extend(labels)
298
+
299
+ # Collect sigma values
300
+ if isinstance(bias_cv.sigma, str):
301
+ sigmas.append(bias_cv.sigma)
302
+ else:
303
+ sigmas.append(str(bias_cv.sigma))
304
+
305
+ # Determine which OPES method to use
306
+ method_name = "OPES_METAD_EXPLORE" if self.config.explore_mode else "OPES_METAD"
307
+
308
+ # Build OPES command
309
+ opes_parts = [
310
+ f"opes: {method_name}",
311
+ f"ARG={','.join(all_labels)}",
312
+ f"PACE={self.config.pace}",
313
+ f"BARRIER={self.config.barrier}",
314
+ f"TEMP={self.config.temp}",
315
+ ]
316
+
317
+ # Add SIGMA (required parameter)
318
+ # If all sigmas are the same, use single value; otherwise comma-separated
319
+ if len(set(sigmas)) == 1:
320
+ opes_parts.append(f"SIGMA={sigmas[0]}")
321
+ else:
322
+ opes_parts.append(f"SIGMA={','.join(sigmas)}")
323
+
324
+ # Add FILE and COMPRESSION_THRESHOLD
325
+ opes_parts.append(f"FILE={self.config.file}")
326
+ opes_parts.append(f"COMPRESSION_THRESHOLD={self.config.compression_threshold}")
327
+
328
+ # Optional parameters
329
+ if self.config.biasfactor is not None:
330
+ opes_parts.append(f"BIASFACTOR={self.config.biasfactor}")
331
+ if self.config.adaptive_sigma_stride is not None:
332
+ opes_parts.append(
333
+ f"ADAPTIVE_SIGMA_STRIDE={self.config.adaptive_sigma_stride}"
334
+ )
335
+ if self.config.sigma_min is not None:
336
+ opes_parts.append(f"SIGMA_MIN={self.config.sigma_min}")
337
+ if self.config.state_wfile is not None:
338
+ opes_parts.append(f"STATE_WFILE={self.config.state_wfile}")
339
+ if self.config.state_rfile is not None:
340
+ opes_parts.append(f"STATE_RFILE={self.config.state_rfile}")
341
+ if self.config.state_wstride is not None:
342
+ opes_parts.append(f"STATE_WSTRIDE={self.config.state_wstride}")
343
+ if self.config.walkers_mpi:
344
+ opes_parts.append("WALKERS_MPI")
345
+ if self.config.calc_work:
346
+ opes_parts.append("CALC_WORK")
347
+
348
+ plumed_lines.append(" ".join(opes_parts))
349
+
350
+ # Add any additional actions (restraints, walls, print actions, etc.)
351
+ for action in self.actions:
352
+ action_lines = action.to_plumed(atoms)
353
+ plumed_lines.extend(action_lines)
354
+
355
+ # Add FLUSH if configured
356
+ if self.config.flush is not None:
357
+ plumed_lines.append(f"FLUSH STRIDE={self.config.flush}")
358
+
359
+ return plumed_lines
@@ -0,0 +1,230 @@
1
+ import dataclasses
2
+ import typing as tp
3
+
4
+ import ase
5
+ import molify
6
+ import rdkit2ase
7
+
8
+ from hillclimber.interfaces import AtomSelector
9
+
10
+ # --- Indexable Selector Wrappers ---
11
+
12
+
13
+ @dataclasses.dataclass
14
+ class _GroupIndexedSelector(AtomSelector):
15
+ """Selector with group-level indexing applied.
16
+
17
+ This is an internal class created when you index a selector at the group level.
18
+ For example: water_sel[0] or water_sel[0:2]
19
+ """
20
+
21
+ selector: AtomSelector
22
+ group_index: int | slice | list[int]
23
+
24
+ def __getitem__(self, idx: int | slice | list[int]) -> AtomSelector:
25
+ """Atom-level indexing.
26
+
27
+ After group indexing, this applies atom-level indexing.
28
+ For example: water_sel[0:2][1:3] selects atoms 1-2 from groups 0-1.
29
+ """
30
+ return _AtomIndexedSelector(self, idx)
31
+
32
+ def __add__(self, other: AtomSelector) -> AtomSelector:
33
+ """Combine two selectors."""
34
+ return _CombinedSelector([self, other])
35
+
36
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
37
+ """Apply group indexing to the underlying selector."""
38
+ groups = self.selector.select(atoms)
39
+
40
+ # Apply group indexing (supports negative indices)
41
+ if isinstance(self.group_index, int):
42
+ return [groups[self.group_index]] # Python handles negative indices
43
+ elif isinstance(self.group_index, slice):
44
+ return groups[self.group_index] # Python handles negative indices in slices
45
+ else: # list[int]
46
+ return [
47
+ groups[i] for i in self.group_index
48
+ ] # Negative indices work here too
49
+
50
+
51
+ @dataclasses.dataclass
52
+ class _AtomIndexedSelector(AtomSelector):
53
+ """Selector with both group and atom-level indexing applied.
54
+
55
+ This is an internal class created when you apply two levels of indexing.
56
+ For example: water_sel[0][0] or water_sel[0:2][1:3]
57
+ """
58
+
59
+ group_selector: _GroupIndexedSelector
60
+ atom_index: int | slice | list[int]
61
+
62
+ def __getitem__(self, idx) -> AtomSelector:
63
+ """Prevent three-level indexing."""
64
+ raise ValueError("Cannot index beyond 2 levels (group, then atom)")
65
+
66
+ def __add__(self, other: AtomSelector) -> AtomSelector:
67
+ """Combine two selectors."""
68
+ return _CombinedSelector([self, other])
69
+
70
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
71
+ """Apply atom-level indexing to each group."""
72
+ groups = self.group_selector.select(atoms)
73
+
74
+ # Apply atom-level indexing to each group (supports negative indices)
75
+ result = []
76
+ for group in groups:
77
+ if isinstance(self.atom_index, int):
78
+ result.append([group[self.atom_index]]) # Negative indices work
79
+ elif isinstance(self.atom_index, slice):
80
+ result.append(group[self.atom_index]) # Negative indices in slices work
81
+ else: # list[int]
82
+ result.append(
83
+ [group[i] for i in self.atom_index]
84
+ ) # Negative indices work
85
+
86
+ return result
87
+
88
+
89
+ @dataclasses.dataclass
90
+ class _CombinedSelector(AtomSelector):
91
+ """Selector that combines multiple selectors.
92
+
93
+ This is an internal class created when you combine selectors with +.
94
+ For example: water_sel + ethanol_sel
95
+ """
96
+
97
+ selectors: list[AtomSelector]
98
+
99
+ def __getitem__(self, idx: int | slice | list[int]) -> AtomSelector:
100
+ """Group-level indexing on combined result."""
101
+ return _GroupIndexedSelector(self, idx)
102
+
103
+ def __add__(self, other: AtomSelector) -> AtomSelector:
104
+ """Combine with another selector."""
105
+ # Flatten if other is also a CombinedSelector
106
+ if isinstance(other, _CombinedSelector):
107
+ return _CombinedSelector(self.selectors + other.selectors)
108
+ return _CombinedSelector(self.selectors + [other])
109
+
110
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
111
+ """Concatenate all groups from all selectors."""
112
+ result = []
113
+ for selector in self.selectors:
114
+ result.extend(selector.select(atoms))
115
+ return result
116
+
117
+
118
+ @dataclasses.dataclass
119
+ class IndexSelector(AtomSelector):
120
+ """Select atoms based on grouped indices.
121
+
122
+ Parameters
123
+ ----------
124
+ indices : list[list[int]]
125
+ A list of atom index groups to select. Each inner list represents
126
+ a group of atoms (e.g., a molecule). For example:
127
+ - [[0, 1], [2, 3]] selects two groups: atoms [0,1] and atoms [2,3]
128
+ - [[0], [1]] selects two single-atom groups
129
+ """
130
+
131
+ # mostly used for debugging
132
+ indices: list[list[int]]
133
+
134
+ def __getitem__(self, idx: int | slice | list[int]) -> AtomSelector:
135
+ """Group-level indexing."""
136
+ return _GroupIndexedSelector(self, idx)
137
+
138
+ def __add__(self, other: AtomSelector) -> AtomSelector:
139
+ """Combine two selectors."""
140
+ return _CombinedSelector([self, other])
141
+
142
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
143
+ return self.indices
144
+
145
+
146
+ @dataclasses.dataclass
147
+ class SMILESSelector(AtomSelector):
148
+ """Select atoms based on a SMILES string.
149
+
150
+ Parameters
151
+ ----------
152
+ smiles : str
153
+ The SMILES string to use for selection.
154
+ """
155
+
156
+ smiles: str
157
+
158
+ def __getitem__(self, idx: int | slice | list[int]) -> AtomSelector:
159
+ """Group-level indexing."""
160
+ return _GroupIndexedSelector(self, idx)
161
+
162
+ def __add__(self, other: AtomSelector) -> AtomSelector:
163
+ """Combine two selectors."""
164
+ return _CombinedSelector([self, other])
165
+
166
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
167
+ # TODO: switch to molify once available
168
+ matches = rdkit2ase.match_substructure(atoms, smiles=self.smiles)
169
+ return [list(match) for match in matches]
170
+
171
+
172
+ @dataclasses.dataclass
173
+ class SMARTSSelector(AtomSelector):
174
+ """Select atoms based on SMARTS or mapped SMILES patterns.
175
+
176
+ This selector uses RDKit's substructure matching to identify atoms
177
+ matching a given SMARTS pattern or mapped SMILES string. It supports
178
+ flexible hydrogen handling and can work with mapped atoms for
179
+ precise selection.
180
+
181
+ Note
182
+ ----
183
+ The selector is applied only to the first trajectory frame.
184
+ Since indices can change during e.g. proton transfer, biasing specific groups (e.g. `[OH-]`) may fail.
185
+ In such cases, select all `[OH2]` and `[OH-]` groups and use CoordinationNumber CVs.
186
+ Account for this method with all changes in chemical structure.
187
+
188
+ Parameters
189
+ ----------
190
+ pattern : str
191
+ SMARTS pattern (e.g., "[F]", "[OH]", "C(=O)O") or SMILES with
192
+ atom maps (e.g., "C1[C:1]OC(=[O:1])O1"). If atom maps are present,
193
+ only the mapped atoms are selected.
194
+ hydrogens : {'exclude', 'include', 'isolated'}, default='exclude'
195
+ How to handle hydrogen atoms in the selection:
196
+ - 'exclude': Remove all hydrogens from the selection
197
+ - 'include': Include hydrogens bonded to selected heavy atoms
198
+ - 'isolated': Select only hydrogens bonded to selected heavy atoms
199
+
200
+ Examples
201
+ --------
202
+ >>> # Select all fluorine atoms
203
+ >>> selector = SMARTSSelection(pattern="[F]")
204
+
205
+ >>> # Select carboxylic acid groups including hydrogens
206
+ >>> selector = SMARTSSelection(pattern="C(=O)O", hydrogens="include")
207
+
208
+ >>> # Select only specific mapped atoms
209
+ >>> selector = SMARTSSelection(pattern="C1[C:1]OC(=[O:1])O1")
210
+
211
+ >>> # Select 4 elements in order to define an angle
212
+ >>> selector = SMARTSSelection(pattern="CC(=O)N[C:1]([C:2])[C:3](=O)[N:4]C")
213
+ """
214
+
215
+ pattern: str
216
+ hydrogens: tp.Literal["include", "exclude", "isolated"] = "exclude"
217
+
218
+ def __getitem__(self, idx: int | slice | list[int]) -> AtomSelector:
219
+ """Group-level indexing."""
220
+ return _GroupIndexedSelector(self, idx)
221
+
222
+ def __add__(self, other: AtomSelector) -> AtomSelector:
223
+ """Combine two selectors."""
224
+ return _CombinedSelector([self, other])
225
+
226
+ def select(self, atoms: ase.Atoms) -> list[list[int]]:
227
+ # TODO: switch to molify once available
228
+ return rdkit2ase.select_atoms_grouped(
229
+ molify.ase2rdkit(atoms), self.pattern, self.hydrogens
230
+ )