-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
81 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from .integrators import PeriodicNonequilibriumIntegratorSettings | ||
from .nonequilibrium_cycling import NonEquilibriumCyclingSettings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
""" | ||
Settings objects for the different integrators used in the protocols. | ||
The reasoning is to have a base class that contains the settings that | ||
would be shared between different integrators, and subclasses of it | ||
for the specific integrator settings. | ||
""" | ||
|
||
try: | ||
from pydantic.v1 import validator | ||
except ImportError: | ||
from pydantic import validator # type: ignore[assignment] | ||
|
||
from openff.units import unit | ||
from openff.models.types import FloatQuantity | ||
from gufe.settings import SettingsBaseModel | ||
|
||
|
||
class PeriodicNonequilibriumIntegratorSettings(SettingsBaseModel): | ||
"""Settings for the PeriodicNonequilibriumIntegrator""" | ||
|
||
class Config: | ||
arbitrary_types_allowed = True | ||
|
||
timestep: FloatQuantity["femtosecond"] = 4 * unit.femtoseconds | ||
"""Size of the simulation timestep. Default 4 fs.""" | ||
splitting: str = "V R H O R V" | ||
"""Operator splitting""" | ||
equilibrium_steps: int = 250000 | ||
"""Number of steps for the equilibrium parts of the cycle. Default 250000""" | ||
nonequilibrium_steps: int = 250000 | ||
"""Number of steps for the non-equilibrium parts of the cycle. Default 250000""" | ||
|
||
# TODO: This validator is used in other settings, better create a new Type | ||
@validator("timestep") | ||
def must_be_positive(cls, v): | ||
if v <= 0: | ||
errmsg = (f"timestep must be positive, received {v}.") | ||
raise ValueError(errmsg) | ||
return v | ||
|
||
# TODO: This validator is used in other settings, better create a new Type | ||
@validator('timestep') | ||
def is_time(cls, v): | ||
# these are time units, not simulation steps | ||
if not v.is_compatible_with(unit.picosecond): | ||
raise ValueError("timestep must be in time units " | ||
"(i.e. picoseconds)") | ||
return v | ||
|
||
# TODO: This validator is used in other settings, better create a new Type | ||
@validator("equilibrium_steps", "nonequilibrium_steps") | ||
def must_be_positive_or_zero(cls, v): | ||
if v < 0: | ||
errmsg = ("langevin_collision_rate, and n_restart_attempts must be" | ||
f" zero or positive values, got {v}.") | ||
raise ValueError(errmsg) | ||
return v |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters