hillclimber 0.1.5__cp313-cp313-musllinux_1_2_aarch64.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.
- hillclimber/__init__.py +39 -0
- hillclimber/actions.py +53 -0
- hillclimber/analysis.py +590 -0
- hillclimber/biases.py +293 -0
- hillclimber/calc.py +22 -0
- hillclimber/cvs.py +1070 -0
- hillclimber/interfaces.py +133 -0
- hillclimber/metadynamics.py +325 -0
- hillclimber/nodes.py +6 -0
- hillclimber/opes.py +359 -0
- hillclimber/selectors.py +230 -0
- hillclimber/virtual_atoms.py +341 -0
- hillclimber-0.1.5.dist-info/METADATA +210 -0
- hillclimber-0.1.5.dist-info/RECORD +472 -0
- hillclimber-0.1.5.dist-info/WHEEL +5 -0
- hillclimber-0.1.5.dist-info/entry_points.txt +8 -0
- hillclimber-0.1.5.dist-info/licenses/LICENSE +165 -0
- hillclimber-0.1.5.dist-info/sboms/auditwheel.cdx.json +1 -0
- hillclimber.libs/libgcc_s-2d945d6c.so.1 +0 -0
- hillclimber.libs/libgomp-1ede7ee7.so.1.0.0 +0 -0
- hillclimber.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- plumed/__init__.py +104 -0
- plumed/_lib/bin/plumed +0 -0
- plumed/_lib/bin/plumed-config +9 -0
- plumed/_lib/bin/plumed-patch +9 -0
- plumed/_lib/include/plumed/adjmat/AdjacencyMatrixBase.h +659 -0
- plumed/_lib/include/plumed/adjmat/ContactMatrix.h +59 -0
- plumed/_lib/include/plumed/asmjit/arch.h +228 -0
- plumed/_lib/include/plumed/asmjit/arm.h +43 -0
- plumed/_lib/include/plumed/asmjit/asmjit.h +69 -0
- plumed/_lib/include/plumed/asmjit/asmjit_apibegin.h +143 -0
- plumed/_lib/include/plumed/asmjit/asmjit_apiend.h +93 -0
- plumed/_lib/include/plumed/asmjit/asmjit_build.h +971 -0
- plumed/_lib/include/plumed/asmjit/assembler.h +183 -0
- plumed/_lib/include/plumed/asmjit/base.h +56 -0
- plumed/_lib/include/plumed/asmjit/codebuilder.h +944 -0
- plumed/_lib/include/plumed/asmjit/codecompiler.h +767 -0
- plumed/_lib/include/plumed/asmjit/codeemitter.h +528 -0
- plumed/_lib/include/plumed/asmjit/codeholder.h +777 -0
- plumed/_lib/include/plumed/asmjit/constpool.h +286 -0
- plumed/_lib/include/plumed/asmjit/cpuinfo.h +402 -0
- plumed/_lib/include/plumed/asmjit/func.h +1327 -0
- plumed/_lib/include/plumed/asmjit/globals.h +370 -0
- plumed/_lib/include/plumed/asmjit/inst.h +137 -0
- plumed/_lib/include/plumed/asmjit/logging.h +317 -0
- plumed/_lib/include/plumed/asmjit/misc_p.h +103 -0
- plumed/_lib/include/plumed/asmjit/moved_string.h +318 -0
- plumed/_lib/include/plumed/asmjit/operand.h +1599 -0
- plumed/_lib/include/plumed/asmjit/osutils.h +207 -0
- plumed/_lib/include/plumed/asmjit/regalloc_p.h +597 -0
- plumed/_lib/include/plumed/asmjit/runtime.h +227 -0
- plumed/_lib/include/plumed/asmjit/simdtypes.h +1104 -0
- plumed/_lib/include/plumed/asmjit/utils.h +1387 -0
- plumed/_lib/include/plumed/asmjit/vmem.h +183 -0
- plumed/_lib/include/plumed/asmjit/x86.h +45 -0
- plumed/_lib/include/plumed/asmjit/x86assembler.h +125 -0
- plumed/_lib/include/plumed/asmjit/x86builder.h +117 -0
- plumed/_lib/include/plumed/asmjit/x86compiler.h +322 -0
- plumed/_lib/include/plumed/asmjit/x86emitter.h +5149 -0
- plumed/_lib/include/plumed/asmjit/x86globals.h +535 -0
- plumed/_lib/include/plumed/asmjit/x86inst.h +2547 -0
- plumed/_lib/include/plumed/asmjit/x86instimpl_p.h +74 -0
- plumed/_lib/include/plumed/asmjit/x86internal_p.h +108 -0
- plumed/_lib/include/plumed/asmjit/x86logging_p.h +92 -0
- plumed/_lib/include/plumed/asmjit/x86misc.h +417 -0
- plumed/_lib/include/plumed/asmjit/x86operand.h +1133 -0
- plumed/_lib/include/plumed/asmjit/x86regalloc_p.h +734 -0
- plumed/_lib/include/plumed/asmjit/zone.h +1157 -0
- plumed/_lib/include/plumed/bias/Bias.h +82 -0
- plumed/_lib/include/plumed/bias/ReweightBase.h +58 -0
- plumed/_lib/include/plumed/blas/blas.h +253 -0
- plumed/_lib/include/plumed/blas/def_external.h +61 -0
- plumed/_lib/include/plumed/blas/def_internal.h +97 -0
- plumed/_lib/include/plumed/blas/real.h +49 -0
- plumed/_lib/include/plumed/cltools/CLTool.h +32 -0
- plumed/_lib/include/plumed/clusters/ClusteringBase.h +70 -0
- plumed/_lib/include/plumed/colvar/Colvar.h +32 -0
- plumed/_lib/include/plumed/colvar/ColvarInput.h +68 -0
- plumed/_lib/include/plumed/colvar/ColvarShortcut.h +81 -0
- plumed/_lib/include/plumed/colvar/CoordinationBase.h +52 -0
- plumed/_lib/include/plumed/colvar/MultiColvarTemplate.h +333 -0
- plumed/_lib/include/plumed/colvar/PathMSDBase.h +101 -0
- plumed/_lib/include/plumed/colvar/RMSDVector.h +78 -0
- plumed/_lib/include/plumed/config/Config.h +118 -0
- plumed/_lib/include/plumed/config/version.h +9 -0
- plumed/_lib/include/plumed/contour/ContourFindingObject.h +87 -0
- plumed/_lib/include/plumed/contour/DistanceFromContourBase.h +82 -0
- plumed/_lib/include/plumed/contour/FindContour.h +67 -0
- plumed/_lib/include/plumed/core/Action.h +540 -0
- plumed/_lib/include/plumed/core/ActionAnyorder.h +48 -0
- plumed/_lib/include/plumed/core/ActionAtomistic.h +343 -0
- plumed/_lib/include/plumed/core/ActionForInterface.h +99 -0
- plumed/_lib/include/plumed/core/ActionPilot.h +57 -0
- plumed/_lib/include/plumed/core/ActionRegister.h +124 -0
- plumed/_lib/include/plumed/core/ActionSet.h +163 -0
- plumed/_lib/include/plumed/core/ActionSetup.h +48 -0
- plumed/_lib/include/plumed/core/ActionShortcut.h +73 -0
- plumed/_lib/include/plumed/core/ActionToGetData.h +59 -0
- plumed/_lib/include/plumed/core/ActionToPutData.h +101 -0
- plumed/_lib/include/plumed/core/ActionWithArguments.h +140 -0
- plumed/_lib/include/plumed/core/ActionWithMatrix.h +87 -0
- plumed/_lib/include/plumed/core/ActionWithValue.h +258 -0
- plumed/_lib/include/plumed/core/ActionWithVector.h +94 -0
- plumed/_lib/include/plumed/core/ActionWithVirtualAtom.h +123 -0
- plumed/_lib/include/plumed/core/CLTool.h +177 -0
- plumed/_lib/include/plumed/core/CLToolMain.h +102 -0
- plumed/_lib/include/plumed/core/CLToolRegister.h +108 -0
- plumed/_lib/include/plumed/core/Colvar.h +115 -0
- plumed/_lib/include/plumed/core/DataPassingObject.h +94 -0
- plumed/_lib/include/plumed/core/DataPassingTools.h +54 -0
- plumed/_lib/include/plumed/core/DomainDecomposition.h +120 -0
- plumed/_lib/include/plumed/core/ExchangePatterns.h +47 -0
- plumed/_lib/include/plumed/core/FlexibleBin.h +63 -0
- plumed/_lib/include/plumed/core/GREX.h +61 -0
- plumed/_lib/include/plumed/core/GenericMolInfo.h +89 -0
- plumed/_lib/include/plumed/core/Group.h +41 -0
- plumed/_lib/include/plumed/core/ModuleMap.h +30 -0
- plumed/_lib/include/plumed/core/ParallelTaskManager.h +1023 -0
- plumed/_lib/include/plumed/core/PbcAction.h +61 -0
- plumed/_lib/include/plumed/core/PlumedMain.h +632 -0
- plumed/_lib/include/plumed/core/PlumedMainInitializer.h +118 -0
- plumed/_lib/include/plumed/core/RegisterBase.h +340 -0
- plumed/_lib/include/plumed/core/TargetDist.h +48 -0
- plumed/_lib/include/plumed/core/Value.h +547 -0
- plumed/_lib/include/plumed/core/WithCmd.h +93 -0
- plumed/_lib/include/plumed/dimred/SMACOF.h +55 -0
- plumed/_lib/include/plumed/drr/DRR.h +383 -0
- plumed/_lib/include/plumed/drr/colvar_UIestimator.h +777 -0
- plumed/_lib/include/plumed/fisst/legendre_rule_fast.h +44 -0
- plumed/_lib/include/plumed/function/Custom.h +54 -0
- plumed/_lib/include/plumed/function/Function.h +85 -0
- plumed/_lib/include/plumed/function/FunctionOfMatrix.h +368 -0
- plumed/_lib/include/plumed/function/FunctionOfScalar.h +135 -0
- plumed/_lib/include/plumed/function/FunctionOfVector.h +296 -0
- plumed/_lib/include/plumed/function/FunctionSetup.h +180 -0
- plumed/_lib/include/plumed/function/FunctionShortcut.h +130 -0
- plumed/_lib/include/plumed/function/FunctionWithSingleArgument.h +165 -0
- plumed/_lib/include/plumed/gridtools/ActionWithGrid.h +43 -0
- plumed/_lib/include/plumed/gridtools/EvaluateGridFunction.h +99 -0
- plumed/_lib/include/plumed/gridtools/FunctionOfGrid.h +295 -0
- plumed/_lib/include/plumed/gridtools/GridCoordinatesObject.h +179 -0
- plumed/_lib/include/plumed/gridtools/GridSearch.h +135 -0
- plumed/_lib/include/plumed/gridtools/Interpolator.h +45 -0
- plumed/_lib/include/plumed/gridtools/KDE.h +455 -0
- plumed/_lib/include/plumed/gridtools/RDF.h +40 -0
- plumed/_lib/include/plumed/gridtools/SumOfKernels.h +219 -0
- plumed/_lib/include/plumed/isdb/MetainferenceBase.h +398 -0
- plumed/_lib/include/plumed/lapack/def_external.h +207 -0
- plumed/_lib/include/plumed/lapack/def_internal.h +388 -0
- plumed/_lib/include/plumed/lapack/lapack.h +899 -0
- plumed/_lib/include/plumed/lapack/lapack_limits.h +79 -0
- plumed/_lib/include/plumed/lapack/real.h +50 -0
- plumed/_lib/include/plumed/lepton/CompiledExpression.h +164 -0
- plumed/_lib/include/plumed/lepton/CustomFunction.h +143 -0
- plumed/_lib/include/plumed/lepton/Exception.h +93 -0
- plumed/_lib/include/plumed/lepton/ExpressionProgram.h +137 -0
- plumed/_lib/include/plumed/lepton/ExpressionTreeNode.h +145 -0
- plumed/_lib/include/plumed/lepton/Lepton.h +85 -0
- plumed/_lib/include/plumed/lepton/MSVC_erfc.h +123 -0
- plumed/_lib/include/plumed/lepton/Operation.h +1302 -0
- plumed/_lib/include/plumed/lepton/ParsedExpression.h +165 -0
- plumed/_lib/include/plumed/lepton/Parser.h +111 -0
- plumed/_lib/include/plumed/lepton/windowsIncludes.h +73 -0
- plumed/_lib/include/plumed/mapping/Path.h +44 -0
- plumed/_lib/include/plumed/mapping/PathProjectionCalculator.h +57 -0
- plumed/_lib/include/plumed/matrixtools/MatrixOperationBase.h +54 -0
- plumed/_lib/include/plumed/matrixtools/MatrixTimesMatrix.h +309 -0
- plumed/_lib/include/plumed/matrixtools/MatrixTimesVectorBase.h +365 -0
- plumed/_lib/include/plumed/matrixtools/OuterProduct.h +238 -0
- plumed/_lib/include/plumed/maze/Core.h +65 -0
- plumed/_lib/include/plumed/maze/Loss.h +86 -0
- plumed/_lib/include/plumed/maze/Member.h +66 -0
- plumed/_lib/include/plumed/maze/Memetic.h +799 -0
- plumed/_lib/include/plumed/maze/Optimizer.h +357 -0
- plumed/_lib/include/plumed/maze/Random_MT.h +156 -0
- plumed/_lib/include/plumed/maze/Tools.h +183 -0
- plumed/_lib/include/plumed/metatomic/vesin.h +188 -0
- plumed/_lib/include/plumed/molfile/Gromacs.h +2013 -0
- plumed/_lib/include/plumed/molfile/endianswap.h +217 -0
- plumed/_lib/include/plumed/molfile/fastio.h +683 -0
- plumed/_lib/include/plumed/molfile/largefiles.h +78 -0
- plumed/_lib/include/plumed/molfile/libmolfile_plugin.h +77 -0
- plumed/_lib/include/plumed/molfile/molfile_plugin.h +1034 -0
- plumed/_lib/include/plumed/molfile/periodic_table.h +248 -0
- plumed/_lib/include/plumed/molfile/readpdb.h +447 -0
- plumed/_lib/include/plumed/molfile/vmdplugin.h +236 -0
- plumed/_lib/include/plumed/multicolvar/MultiColvarShortcuts.h +45 -0
- plumed/_lib/include/plumed/opes/ExpansionCVs.h +79 -0
- plumed/_lib/include/plumed/sasa/Sasa.h +32 -0
- plumed/_lib/include/plumed/secondarystructure/SecondaryStructureBase.h +372 -0
- plumed/_lib/include/plumed/setup/ActionSetup.h +25 -0
- plumed/_lib/include/plumed/small_vector/small_vector.h +6114 -0
- plumed/_lib/include/plumed/symfunc/CoordinationNumbers.h +41 -0
- plumed/_lib/include/plumed/tools/Angle.h +52 -0
- plumed/_lib/include/plumed/tools/AtomDistribution.h +138 -0
- plumed/_lib/include/plumed/tools/AtomNumber.h +152 -0
- plumed/_lib/include/plumed/tools/BiasRepresentation.h +106 -0
- plumed/_lib/include/plumed/tools/BitmaskEnum.h +167 -0
- plumed/_lib/include/plumed/tools/Brent1DRootSearch.h +159 -0
- plumed/_lib/include/plumed/tools/CheckInRange.h +44 -0
- plumed/_lib/include/plumed/tools/Citations.h +74 -0
- plumed/_lib/include/plumed/tools/ColvarOutput.h +118 -0
- plumed/_lib/include/plumed/tools/Communicator.h +316 -0
- plumed/_lib/include/plumed/tools/ConjugateGradient.h +80 -0
- plumed/_lib/include/plumed/tools/DLLoader.h +79 -0
- plumed/_lib/include/plumed/tools/ERMSD.h +73 -0
- plumed/_lib/include/plumed/tools/Exception.h +406 -0
- plumed/_lib/include/plumed/tools/File.h +28 -0
- plumed/_lib/include/plumed/tools/FileBase.h +153 -0
- plumed/_lib/include/plumed/tools/FileTools.h +37 -0
- plumed/_lib/include/plumed/tools/ForwardDecl.h +54 -0
- plumed/_lib/include/plumed/tools/Grid.h +638 -0
- plumed/_lib/include/plumed/tools/HistogramBead.h +136 -0
- plumed/_lib/include/plumed/tools/IFile.h +117 -0
- plumed/_lib/include/plumed/tools/KernelFunctions.h +113 -0
- plumed/_lib/include/plumed/tools/Keywords.h +380 -0
- plumed/_lib/include/plumed/tools/LatticeReduction.h +66 -0
- plumed/_lib/include/plumed/tools/LeptonCall.h +64 -0
- plumed/_lib/include/plumed/tools/LinkCells.h +126 -0
- plumed/_lib/include/plumed/tools/Log.h +41 -0
- plumed/_lib/include/plumed/tools/LoopUnroller.h +163 -0
- plumed/_lib/include/plumed/tools/Matrix.h +721 -0
- plumed/_lib/include/plumed/tools/MatrixSquareBracketsAccess.h +138 -0
- plumed/_lib/include/plumed/tools/MergeVectorTools.h +153 -0
- plumed/_lib/include/plumed/tools/Minimise1DBrent.h +244 -0
- plumed/_lib/include/plumed/tools/MinimiseBase.h +120 -0
- plumed/_lib/include/plumed/tools/MolDataClass.h +51 -0
- plumed/_lib/include/plumed/tools/NeighborList.h +112 -0
- plumed/_lib/include/plumed/tools/OFile.h +286 -0
- plumed/_lib/include/plumed/tools/OpenACC.h +180 -0
- plumed/_lib/include/plumed/tools/OpenMP.h +75 -0
- plumed/_lib/include/plumed/tools/PDB.h +154 -0
- plumed/_lib/include/plumed/tools/Pbc.h +139 -0
- plumed/_lib/include/plumed/tools/PlumedHandle.h +105 -0
- plumed/_lib/include/plumed/tools/RMSD.h +493 -0
- plumed/_lib/include/plumed/tools/Random.h +80 -0
- plumed/_lib/include/plumed/tools/RootFindingBase.h +79 -0
- plumed/_lib/include/plumed/tools/Stopwatch.h +475 -0
- plumed/_lib/include/plumed/tools/Subprocess.h +142 -0
- plumed/_lib/include/plumed/tools/SwitchingFunction.h +208 -0
- plumed/_lib/include/plumed/tools/Tensor.h +724 -0
- plumed/_lib/include/plumed/tools/TokenizedLine.h +123 -0
- plumed/_lib/include/plumed/tools/Tools.h +638 -0
- plumed/_lib/include/plumed/tools/Torsion.h +55 -0
- plumed/_lib/include/plumed/tools/TrajectoryParser.h +118 -0
- plumed/_lib/include/plumed/tools/Tree.h +61 -0
- plumed/_lib/include/plumed/tools/TypesafePtr.h +463 -0
- plumed/_lib/include/plumed/tools/Units.h +167 -0
- plumed/_lib/include/plumed/tools/Vector.h +433 -0
- plumed/_lib/include/plumed/tools/View.h +296 -0
- plumed/_lib/include/plumed/tools/View2D.h +100 -0
- plumed/_lib/include/plumed/tools/h36.h +39 -0
- plumed/_lib/include/plumed/vatom/ActionWithVirtualAtom.h +32 -0
- plumed/_lib/include/plumed/ves/BasisFunctions.h +380 -0
- plumed/_lib/include/plumed/ves/CoeffsBase.h +310 -0
- plumed/_lib/include/plumed/ves/CoeffsMatrix.h +220 -0
- plumed/_lib/include/plumed/ves/CoeffsVector.h +251 -0
- plumed/_lib/include/plumed/ves/FermiSwitchingFunction.h +74 -0
- plumed/_lib/include/plumed/ves/GridIntegrationWeights.h +50 -0
- plumed/_lib/include/plumed/ves/GridLinearInterpolation.h +81 -0
- plumed/_lib/include/plumed/ves/GridProjWeights.h +61 -0
- plumed/_lib/include/plumed/ves/LinearBasisSetExpansion.h +303 -0
- plumed/_lib/include/plumed/ves/Optimizer.h +444 -0
- plumed/_lib/include/plumed/ves/TargetDistModifer.h +53 -0
- plumed/_lib/include/plumed/ves/TargetDistribution.h +266 -0
- plumed/_lib/include/plumed/ves/VesBias.h +545 -0
- plumed/_lib/include/plumed/ves/VesTools.h +142 -0
- plumed/_lib/include/plumed/ves/WaveletGrid.h +75 -0
- plumed/_lib/include/plumed/volumes/ActionVolume.h +268 -0
- plumed/_lib/include/plumed/volumes/VolumeShortcut.h +147 -0
- plumed/_lib/include/plumed/wrapper/Plumed.h +5025 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile.h +663 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile_trr.h +89 -0
- plumed/_lib/include/plumed/xdrfile/xdrfile_xtc.h +90 -0
- plumed/_lib/lib/PythonCVInterface.so +0 -0
- plumed/_lib/lib/libplumed.a +0 -0
- plumed/_lib/lib/libplumed.so +0 -0
- plumed/_lib/lib/libplumedKernel.so +0 -0
- plumed/_lib/lib/libplumedWrapper.a +0 -0
- plumed/_lib/lib/pkgconfig/plumed.pc +13 -0
- plumed/_lib/lib/pkgconfig/plumedInternals.pc +13 -0
- plumed/_lib/lib/pkgconfig/plumedWrapper.pc +13 -0
- plumed/_lib/lib/plumed/fortran/plumed.f90 +879 -0
- plumed/_lib/lib/plumed/fortran/plumed_f08.f90 +2625 -0
- plumed/_lib/lib/plumed/modulefile +69 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt +543 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/CMakeLists.txt.preplumed +540 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp +1628 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1590 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h +103 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/expanded.h.preplumed +99 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp +2527 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +408 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +394 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp +2348 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2091 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp +3573 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3495 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1506 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1402 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp +997 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +906 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp +2780 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2738 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2022.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt +549 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/CMakeLists.txt.preplumed +546 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h +104 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp +2624 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2610 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h +409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +395 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp +2419 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/md.cpp.preplumed +2164 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp +3546 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3468 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp +991 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/rerun.cpp.preplumed +900 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp +2895 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/mdrun/runner.cpp.preplumed +2849 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp +886 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +880 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +347 -0
- plumed/_lib/lib/plumed/patches/gromacs-2023.5.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +345 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.config +43 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt +575 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/CMakeLists.txt.preplumed +572 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp +1632 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.cpp.preplumed +1594 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h +104 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/expanded.h.preplumed +100 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp +2564 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdlib/sim_util.cpp.preplumed +2550 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp +208 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.cpp.preplumed +175 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h +410 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/legacymdrunoptions.h.preplumed +396 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp +2435 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/md.cpp.preplumed +2187 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp +3592 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/minimize.cpp.preplumed +3514 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp +1513 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.cpp.preplumed +1409 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h +114 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/replicaexchange.h.preplumed +106 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp +958 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/rerun.cpp.preplumed +929 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp +2987 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/mdrun/runner.cpp.preplumed +2941 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp +224 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/modularsimulator/expandedensembleelement.cpp.preplumed +222 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp +904 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/decidegpuusage.cpp.preplumed +898 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h +353 -0
- plumed/_lib/lib/plumed/patches/gromacs-2024.3.diff/src/gromacs/taskassignment/include/gromacs/taskassignment/decidegpuusage.h.preplumed +351 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.config +39 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake +82 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/cmake/gmxManagePlumed.cmake.preplumed +82 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp +162 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedMDModule.cpp.preplumed +154 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp +107 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.cpp.preplumed +99 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h +120 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedOptions.h.preplumed +111 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp +215 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.cpp.preplumed +197 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h +87 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/applied_forces/plumed/plumedforceprovider.h.preplumed +86 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp +2971 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrun/runner.cpp.preplumed +2970 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h +430 -0
- plumed/_lib/lib/plumed/patches/gromacs-2025.0.diff/src/gromacs/mdrunutility/mdmodulesnotifiers.h.preplumed +429 -0
- plumed/_lib/lib/plumed/patches/namd-2.12.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.12.diff +267 -0
- plumed/_lib/lib/plumed/patches/namd-2.13.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.13.diff +267 -0
- plumed/_lib/lib/plumed/patches/namd-2.14.config +30 -0
- plumed/_lib/lib/plumed/patches/namd-2.14.diff +268 -0
- plumed/_lib/lib/plumed/patches/patch.sh +500 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.config +25 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90 +368 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/forces.f90.preplumed +366 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90 +71 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_forces.f90.preplumed +24 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90 +62 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90 +189 -0
- plumed/_lib/lib/plumed/patches/qespresso-5.0.2.diff/PW/src/pwscf.f90.preplumed +185 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.config +26 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90 +422 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/forces.f90.preplumed +420 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90 +70 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90 +62 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90 +233 -0
- plumed/_lib/lib/plumed/patches/qespresso-6.2.diff/PW/src/run_pwscf.f90.preplumed +230 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.config +28 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile +175 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/Modules/Makefile.preplumed +171 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90 +486 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/forces.f90.preplumed +484 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90 +74 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90 +64 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90 +532 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.0.diff/PW/src/run_pwscf.f90.preplumed +518 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.config +28 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile +249 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/Modules/Makefile.preplumed +244 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90 +532 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/forces.f90.preplumed +535 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90 +74 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_ext_forces.f90.preplumed +23 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90 +64 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/plugin_initialization.f90.preplumed +21 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90 +569 -0
- plumed/_lib/lib/plumed/patches/qespresso-7.2.diff/PW/src/run_pwscf.f90.preplumed +560 -0
- plumed/_lib/lib/plumed/plumed-config +9 -0
- plumed/_lib/lib/plumed/plumed-mklib +9 -0
- plumed/_lib/lib/plumed/plumed-newcv +9 -0
- plumed/_lib/lib/plumed/plumed-partial_tempering +9 -0
- plumed/_lib/lib/plumed/plumed-patch +9 -0
- plumed/_lib/lib/plumed/plumed-runtime +0 -0
- plumed/_lib/lib/plumed/plumed-selector +9 -0
- plumed/_lib/lib/plumed/plumed-vim2html +9 -0
- plumed/_lib/lib/plumed/scripts/config.sh +126 -0
- plumed/_lib/lib/plumed/scripts/mklib.sh +175 -0
- plumed/_lib/lib/plumed/scripts/newcv.sh +26 -0
- plumed/_lib/lib/plumed/scripts/partial_tempering.sh +319 -0
- plumed/_lib/lib/plumed/scripts/patch.sh +4 -0
- plumed/_lib/lib/plumed/scripts/selector.sh +234 -0
- plumed/_lib/lib/plumed/scripts/vim2html.sh +190 -0
- plumed/_lib/lib/plumed/src/colvar/Template.cpp +116 -0
- plumed/_lib/lib/plumed/src/config/compile_options.sh +3 -0
- plumed/_lib/lib/plumed/src/config/config.txt +179 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake +8 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.runtime +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.shared +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.cmake.static +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc +8 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.runtime +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.shared +5 -0
- plumed/_lib/lib/plumed/src/lib/Plumed.inc.static +5 -0
- plumed/_lib/lib/plumed/vim/scripts.vim +6 -0
- plumed/_plumed_core.cpython-311-aarch64-linux-musl.so +0 -0
- plumed/_plumed_core.cpython-312-aarch64-linux-musl.so +0 -0
- plumed/_plumed_core.cpython-313-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-311-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-312-aarch64-linux-musl.so +0 -0
- plumedCommunications.cpython-313-aarch64-linux-musl.so +0 -0
- 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
|
hillclimber/selectors.py
ADDED
|
@@ -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
|
+
)
|