Sophia Tang
Initial commit with LFS
7efee70
import numpy as np
import openmm.unit as unit
class ForceReporter(object):
def __init__(self, reportInterval):
self._reportInterval = reportInterval
self.force_history = []
self.position_history = []
self.potontial_history = []
self.max_potential = -np.inf
self.max_potential_step = 0
self.step = 0
def __del__(self):
return
def describeNextReport(self, simulation):
steps = self._reportInterval - simulation.currentStep%self._reportInterval
return (steps, True, False, True, True, None)
def report(self, simulation, state):
forces = state.getForces().value_in_unit(unit.kilojoules/unit.mole/unit.nanometer)
self.latest_forces = np.asarray(forces)
pos = state.getPositions().value_in_unit(unit.nanometer)
self.latest_positions = np.asarray(pos)
pot = state.getPotentialEnergy().value_in_unit(unit.kilojoules/unit.mole)
self.latest_potential = np.asarray(pot)
if self.latest_potential > self.max_potential:
self.max_potential_step = self.step
self.max_potential = self.latest_potential
self.step += 1