Source code for molsysmt.thirds.openmm.forces.add_constant_force

from molsysmt._private.digestion import digest
from molsysmt import pyunitwizard as puw

[docs] @digest() def add_constant_force(molecular_system, selection='all', force='[500,0,0] kilojoules/(mole*nanometer)', return_force=False, syntax='MolSysMT', skip_digestion=False): from molsysmt import select, get, get_form from openmm import CustomExternalForce atom_indices = select(molecular_system, selection=selection, syntax=syntax) potential = "-(px*x+py*y+pz*z)" force = puw.convert(force, to_form='openmm.unit') ommforce = CustomExternalForce(potential) ommforce.addGlobalParameter('px', force[0]) ommforce.addGlobalParameter('py', force[1]) ommforce.addGlobalParameter('pz', force[2]) for ii in atom_indices: ommforce.addParticle(int(ii)) if not return_force: form_in = get_form(molecular_system) if form_in == 'openmm.Context': context = molecular_system index_force = context.getSystem().addForce(ommforce) context.reinitialize(preserveState=True) return index_force elif form_in == 'openmm.System': system = molecular_system index_force = system.addForce(ommforce) return index_force elif form_in == 'openmm.Simulation': simulation = molecular_system index_force = simulation.system.addForce(ommforce) simulation.context.reinitialize(preserveState=True) return index_force else: return ommforce