#
#
#

__author__ = "Randall J. Radmer"
__version__ = "1.0"
__doc__ = """Class to manage state for amber simulations."""


class AmberContext():
    """Builds and manages the full amber param/top/crd data set"""
    def __init__(self, aSystem, stepSize=0.001):
        self.aSystem = aSystem
        self.stepSize = stepSize

        self.mm = aSystem.mm
        self.mmSystem = aSystem.mmSystem

        #Select simple integrator
        self.integrator = self.mm.VerletIntegrator(stepSize)
        #Make a context for this OpenMM system
        self.mmContext=self.mm.OpenMMContext(self.mmSystem, self.integrator)
        #Staring config
        self.mmContext.setPositions(self.aSystem.pdb.getCoords(useNM=True))


    def getState(self,
                 getPositions=True,
                 getVelocities=False,
                 getForces=False):
        return self.mmContext.getState(getPositions=True,
                                       getVelocities=False,
                                       getForces=True)
        

    def step(self, stepsPerReport):
        self.integrator.step(stepsPerReport)


