def test_ensemble_potential_nompi(tpr_filename): """Test ensemble potential without an ensemble. """ print("Testing plugin potential with input file {}".format(os.path.abspath(tpr_filename))) assert gmx.version.api_is_at_least(0, 0, 5) md = from_tpr([tpr_filename], append_output=False) # Create a WorkElement for the potential params = {'sites': [1, 4], 'nbins': 10, 'binWidth': 0.1, 'min_dist': 0., 'max_dist': 10., 'experimental': [1.] * 10, 'nsamples': 1, 'sample_period': 0.001, 'nwindows': 4, 'k': 10000., 'sigma': 1.} potential = WorkElement(namespace="myplugin", operation="ensemble_restraint", params=params) # Note that we could flexibly capture accessor methods as workflow elements, too. Maybe we can # hide the extra Python bindings by letting myplugin.HarmonicRestraint automatically convert # to a WorkElement when add_dependency is called on it. potential.name = "ensemble_restraint" md.add_dependency(potential) context = ParallelArrayContext(md) with context as session: session.run()
def build_plugin(self): """Builds training phase plugin for BRER simulations. Returns ------- WorkElement a gmxapi WorkElement to be added to the workflow graph Raises ------ KeyError if required parameters for building the plugin are missing. """ WorkElement = _get_workelement() if self.get_missing_keys(): raise KeyError('Must define {}'.format(self.get_missing_keys())) potential = WorkElement(namespace="brer", operation="brer_restraint", depends=[], params=self.get_as_dictionary()) potential.name = '{}'.format(self.get('sites')) return potential
def test_ensemble_potential_withmpi(tpr_filename): import os from mpi4py import MPI rank = MPI.COMM_WORLD.Get_rank() rank_dir = os.path.join(os.getcwd(), str(rank)) os.mkdir(rank_dir) logger.info("Testing plugin potential with input file {}".format(os.path.abspath(tpr_filename))) assert gmx_version.api_is_at_least(0, 0, 5) md = from_tpr([tpr_filename, tpr_filename], append_output=False) # Create a WorkElement for the potential params = {'sites': [1, 4], 'nbins': 10, 'binWidth': 0.1, 'min_dist': 0., 'max_dist': 10., 'experimental': [0.5] * 10, 'nsamples': 1, 'sample_period': 0.001, 'nwindows': 4, 'k': 10000., 'sigma': 1.} potential = WorkElement(namespace="myplugin", operation="ensemble_restraint", params=params) # Note that we could flexibly capture accessor methods as workflow elements, too. Maybe we can # hide the extra Python bindings by letting myplugin.HarmonicRestraint automatically convert # to a WorkElement when add_dependency is called on it. potential.name = "ensemble_restraint" md.add_dependency(potential) context = ParallelArrayContext(md) with context as session: session.run()
def test_ensemble_potential_withmpi(spc_water_box): tpr_filename = spc_water_box logger.info("Testing plugin potential with input file {}".format( os.path.abspath(tpr_filename))) assert gmx_version.api_is_at_least(0, 0, 5) # Note that *threads* argument causes errors for MPI-enabled GROMACS. # Ref #3563 and #3573 md = from_tpr([tpr_filename, tpr_filename], append_output=False, threads=2) # Create a WorkElement for the potential params = { 'sites': [1, 4], 'nbins': 10, 'binWidth': 0.1, 'min_dist': 0., 'max_dist': 10., 'experimental': [0.5] * 10, 'nsamples': 1, 'sample_period': 0.001, 'nwindows': 4, 'k': 10000., 'sigma': 1. } potential = WorkElement(namespace="myplugin", operation="ensemble_restraint", params=params) # Note that we could flexibly capture accessor methods as workflow elements, too. Maybe we can # hide the extra Python bindings by letting myplugin.HarmonicRestraint automatically convert # to a WorkElement when add_dependency is called on it. potential.name = "ensemble_restraint" md.add_dependency(potential) context = Context(md) with context as session: session.run()
def test_binding_protocol(spc_water_box, mdrun_kwargs): """Test that gmxapi successfully attaches MD plugins.""" import myplugin if _MPI is not None: _size = _MPI.COMM_WORLD.Get_size() _rank = _MPI.COMM_WORLD.Get_rank() else: _size = 1 _rank = 0 tpr_filename = spc_water_box logger.info("Testing plugin potential with input file {}".format( os.path.abspath(tpr_filename))) assert gmx.version.api_is_at_least(0, 2, 1) md = from_tpr([tpr_filename] * _size, append_output=False, **mdrun_kwargs) potential = WorkElement(namespace="myplugin", operation="null_restraint", params={'sites': [1, 4]}) potential.name = "null restraint" md.add_dependency(potential) context = Context(md) with context as session: session.run() # See also #3038, #3145, #4079 assert isinstance(context.potentials, list) assert len(context.potentials) > 0 for restraint in context.potentials: if isinstance(restraint, myplugin.NullRestraint): assert gmx.version.api_is_at_least(0, 2, 1) assert restraint.count() > 1