From 4d006f604455a438bc07fbf13292ba4c530f6aee Mon Sep 17 00:00:00 2001 From: RomanKova Date: Fri, 16 Apr 2021 09:05:57 +0530 Subject: [PATCH 1/5] creates the main entry point facade file --- foldFacade.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 foldFacade.py diff --git a/foldFacade.py b/foldFacade.py new file mode 100644 index 0000000..3680b96 --- /dev/null +++ b/foldFacade.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +from simtk.openmm.app import * +from simtk.openmm import * +from simtk.unit import * +from sys import stdout +import os +import sys +import argparse + +from parser import Parser +from unfold import Unfold +from simulate import Simulate +from modeller import ModellerF + +args = Parser(argparse).parse() + +try: + platform = Platform.getPlatformByName("CUDA") +except Exception: + platform = Platform.getPlatformByName("OpenCL") + +pdb = Unfold(args).unfold +forcefield = ForceField('amber03.xml', 'amber03_obc.xml') + +ModellerF(forcefield).model() + +Simulate(forcefield, modeller, args).simulate() From e9f5b3e50261acb5514a61924b75323550cefafb Mon Sep 17 00:00:00 2001 From: RomanKova Date: Fri, 16 Apr 2021 09:06:27 +0530 Subject: [PATCH 2/5] separate out modeller to be used by the facade --- modeller.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 modeller.py diff --git a/modeller.py b/modeller.py new file mode 100644 index 0000000..b5074ed --- /dev/null +++ b/modeller.py @@ -0,0 +1,12 @@ +import sys + + +class ModellerF: + def __init__(self, forcefield): + self.forcefield = forcefield + + def model(self): + #forcefield = ForceField('amber99sb.xml', 'tip3p.xml') + modeller = Modeller(pdb.topology, pdb.positions) + modeller.addHydrogens(self.forcefield) + print(modeller.topology) From 1671ee5983e1ef3545812dc308c8dd955f7373d2 Mon Sep 17 00:00:00 2001 From: RomanKova Date: Fri, 16 Apr 2021 09:06:58 +0530 Subject: [PATCH 3/5] separate out simulation to be used by facade --- simulate.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 simulate.py diff --git a/simulate.py b/simulate.py new file mode 100644 index 0000000..b967192 --- /dev/null +++ b/simulate.py @@ -0,0 +1,29 @@ +import sys + + +class Simulate: + def __init__(self, forcefield, modeller, args): + self.forcefield = forcefield + self.modeller = modeller + self.args = args + + def simulate(self): + system = self.forcefield.createSystem(self.modeller.topology, + # matches https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2980750/#bib39 + implicitSolvent=OBC2, + nonbondedMethod=NoCutoff, nonbondedCutoff=1*nanometer, + constraints=HBonds) + integrator = LangevinIntegrator( + self.args.temp*kelvin, 1/picosecond, 2*femtoseconds) + simulation = Simulation( + self.modeller.topology, system, integrator, platform) + simulation.context.setPositions(self.modeller.positions) + simulation.minimizeEnergy() + + steps = self.args.steps + steps_write = max(1, steps//self.args.writes) + print("writing every %d steps" % steps_write) + simulation.reporters.append(PDBReporter(args.out, steps_write)) + simulation.reporters.append(StateDataReporter( + stdout, steps_write, step=True, potentialEnergy=True, temperature=True)) + simulation.step(steps) From df0b531f508d39d41eb7beca2b1f1a00e72deb8f Mon Sep 17 00:00:00 2001 From: RomanKova Date: Fri, 16 Apr 2021 09:07:19 +0530 Subject: [PATCH 4/5] separate out unfold operation --- unfold.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 unfold.py diff --git a/unfold.py b/unfold.py new file mode 100644 index 0000000..7ac44aa --- /dev/null +++ b/unfold.py @@ -0,0 +1,23 @@ +import sys + + +class Unfold: + def __init__(self, args): + self.args = args + + def unfold(self): + if self.args.scratch: + # unfolded protein + if self.args.fasta is not None: + fasta = self.args.fasta + else: + protein_fasta = "proteins/villin/1vii.fasta" + fasta = open(protein_fasta).read().split("\n")[1] + print("folding %s" % fasta) + from lib import write_unfolded + write_unfolded(fasta, "/tmp/unfolded.pdb") + pdb = PDBFile("/tmp/unfolded.pdb") + else: + # already folded protein + pdb = PDBFile(self.args.pdb) + return pdb From 00c2daaef965cacf387dea957a7e6f3f0d9d4566 Mon Sep 17 00:00:00 2001 From: RomanKova Date: Fri, 16 Apr 2021 09:08:05 +0530 Subject: [PATCH 5/5] fold.py is converted to foldFacade.py --- fold.py | 62 --------------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100755 fold.py diff --git a/fold.py b/fold.py deleted file mode 100755 index 50b2e22..0000000 --- a/fold.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python3 -from simtk.openmm.app import * -from simtk.openmm import * -from simtk.unit import * -from sys import stdout -import os -import sys -import argparse - -parser = argparse.ArgumentParser(description='Fold some proteins.') -parser.add_argument('--scratch', action='store_true') -parser.add_argument('--temp', type=int, default=300) -parser.add_argument('--steps', type=int, default=100000, help="2500000000 should fold the protein") -parser.add_argument('--writes', type=int, default=1000, help="default is 1000") -parser.add_argument('--out', type=str, default="/tmp/output.pdb") -parser.add_argument('--pdb', type=str, default="proteins/villin/1vii.pdb") -parser.add_argument('--fasta', type=str, default=None) -args = parser.parse_args(sys.argv[1:]) - -try: - platform = Platform.getPlatformByName("CUDA") -except Exception: - platform = Platform.getPlatformByName("OpenCL") - -if args.scratch: - # unfolded protein - if args.fasta is not None: - fasta = args.fasta - else: - protein_fasta = "proteins/villin/1vii.fasta" - fasta = open(protein_fasta).read().split("\n")[1] - print("folding %s" % fasta) - from lib import write_unfolded - write_unfolded(fasta, "/tmp/unfolded.pdb") - pdb = PDBFile("/tmp/unfolded.pdb") -else: - # already folded protein - pdb = PDBFile(args.pdb) - -#forcefield = ForceField('amber99sb.xml', 'tip3p.xml') -forcefield = ForceField('amber03.xml', 'amber03_obc.xml') - -modeller = Modeller(pdb.topology, pdb.positions) -modeller.addHydrogens(forcefield) -print(modeller.topology) - -system = forcefield.createSystem(modeller.topology, - implicitSolvent=OBC2, # matches https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2980750/#bib39 - nonbondedMethod=NoCutoff, nonbondedCutoff=1*nanometer, - constraints=HBonds) -integrator = LangevinIntegrator(args.temp*kelvin, 1/picosecond, 2*femtoseconds) -simulation = Simulation(modeller.topology, system, integrator, platform) -simulation.context.setPositions(modeller.positions) -simulation.minimizeEnergy() - -steps = args.steps -steps_write = max(1, steps//args.writes) -print("writing every %d steps" % steps_write) -simulation.reporters.append(PDBReporter(args.out, steps_write)) -simulation.reporters.append(StateDataReporter(stdout, steps_write, step=True, potentialEnergy=True, temperature=True)) -simulation.step(steps) -