Skip to content

Commit

Permalink
have a working gmx wrapper that can run minimizations on single folda…
Browse files Browse the repository at this point in the history
…mer systems, next is to build topologies for the entire system
  • Loading branch information
tlfobe authored and tlfobe committed Mar 1, 2024
1 parent bf046c6 commit 4eaa011
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.9", "3.10", "3.11"]

steps:
- uses: actions/checkout@v4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ sim_id : sim
build_foldamer : mop_tetramer.build
param_method : bespoke
n_replicas : 3
gromacs_exe :
gromacs_exe : gmx
11 changes: 11 additions & 0 deletions terphenyl_simulations/analysis_workflows/remd.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,22 @@ def parameterize_foldamer(job):
path = job.fn("")
)
top_generator.assign_parameters()
job.doc['foldamer_topology'] = top_generator.top_file
job.doc['foldamer_gro'] = top_generator.gro_file

@FlowProject.pre.after(parameterize_foldamer)
@FlowProject.operation
def minimize_foldamer(job):
top_dir = os.path.abspath(".")
os.chdir(job.fn(""))
gmx_wrapper = terphenyl_simulations.gromacs_wrapper.GromacsWrapper(job.sp['gromacs_exe'])
out_name = job.doc['foldamer_gro'].split('.gro')[0] + '_centered.gro'
gmx_wrapper.center(job.doc['foldamer_gro'], out_name)
job.doc['foldamer_gro'] = out_name
gmx_wrapper.minimize(job.doc['foldamer_gro'], job.doc['foldamer_topology'])

os.chdir(top_dir)



@FlowProject.pre.after(build_system)
Expand Down
9 changes: 8 additions & 1 deletion terphenyl_simulations/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,15 @@ def __init__(self, build_file_yml, ff_method, path="", ff_name = "openff-2.0.0")
'force field parameter generation methods. Please pick from:\n' + \
' '.join(self._ff_generation_methods.keys()))

# Define other attributes populated by other functions
self.md_engine = None
self.top_file = None
self.gro_file = None

def set_simulation_engine(self, md_engine_object):
self.md_engine = md_engine_object

def assign_parameters(self):
self.ff_generator.assign_parameters()
top_file, gro_file = self.ff_generator.assign_parameters()
self.top_file = top_file
self.gro_file = gro_file
11 changes: 8 additions & 3 deletions terphenyl_simulations/force_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ def __init__(self, mol_file, pdb_file, path="", ff_str="openff-2.0.0"):

def assign_parameters(self, charge_method = 'am1bcc'):
self._get_partial_charges(charge_method)
self._generate_ff_topologies()
top_file, gro_file = self._generate_ff_topologies()
return top_file, gro_file

def _get_partial_charges(self, method="am1bcc"):
sdf_file = os.path.join(
Expand All @@ -45,8 +46,12 @@ def _generate_ff_topologies(self):
)
interchange.positions = self.pdb_file.getPositions()

interchange.to_top(os.path.join(self.path, self.name + "_openff-2.0.0.top"))
interchange.to_gro(os.path.join(self.path, self.name + "_openff-2.0.0.gro"))
top_file = os.path.join(self.path, self.name + "_openff-2.0.0.top")
gro_file = os.path.join(self.path, self.name + "_openff-2.0.0.gro")
interchange.to_top(top_file)
interchange.to_gro(gro_file)

return top_file, gro_file



Expand Down
11 changes: 9 additions & 2 deletions terphenyl_simulations/gromacs_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@ def __init__(self, gromacs_exe = None, path = '.'):
self.mpi = True
self.gmx = 'mpirun -np 1 ' + self.gmx

def center(self, gro_file, out_file):
editconf_call = self.gmx + ' editconf -f ' + gro_file + \
' -c yes' + \
' -o ' + out_file
process = subprocess.Popen(editconf_call.split(' '))
process.wait()

def minimize(self, gro_file, top_file, prefix = 'em', mdp = 'em.mdp'):
# Check for mdp file
if mdp not in os.listdir(self.path):
if not mdp in os.listdir(self.path):
mdp = os.path.join(ROOT_DIR, 'data/simulation_templates/remd/em.mdp')

# Run gmx grompp
Expand All @@ -50,7 +57,7 @@ def minimize(self, gro_file, top_file, prefix = 'em', mdp = 'em.mdp'):
process = subprocess.Popen(mdrun_call.split(' '))
process.wait()





Expand Down

0 comments on commit 4eaa011

Please sign in to comment.