From 967b04d8ff959b18acb4c6d8fc569e6084c6ce77 Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Mon, 10 Sep 2018 17:36:14 -0500 Subject: [PATCH] Added 'directory' option to arbdmodel.simulate --- mrdna/model/arbdmodel.py | 96 ++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/mrdna/model/arbdmodel.py b/mrdna/model/arbdmodel.py index 3d565f0..048f3a6 100644 --- a/mrdna/model/arbdmodel.py +++ b/mrdna/model/arbdmodel.py @@ -676,56 +676,68 @@ class ArbdModel(PdbModel): if typeA != typeB: self.nbSchemes.append( (nbScheme, typeB, typeA) ) - def simulate(self, outputPrefix, outputDirectory='output', numSteps=100000000, timestep=None, gpu=0, outputPeriod=1e4, arbd=None): + def simulate(self, outputPrefix, outputDirectory='output', numSteps=100000000, timestep=None, gpu=0, outputPeriod=1e4, arbd=None, directory='.'): assert(type(gpu) is int) numSteps = int(numSteps) - if timestep is not None: - self.timestep = timestep + d_orig = os.getcwd() + try: + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) - if self.cacheUpToDate == False: # TODO: remove cache? - self._countParticleTypes() - self._updateParticleOrder() + if timestep is not None: + self.timestep = timestep - if outputDirectory == '': outputDirectory='.' - - if arbd is None: - for path in os.environ["PATH"].split(os.pathsep): - path = path.strip('"') - fname = os.path.join(path, "arbd") - if os.path.isfile(fname) and os.access(fname, os.X_OK): - arbd = fname - break - - if arbd is None: raise Exception("ARBD was not found") - - if not os.path.exists(arbd): - raise Exception("ARBD was not found") - if not os.path.isfile(arbd): - raise Exception("ARBD was not found") - if not os.access(arbd, os.X_OK): - raise Exception("ARBD is not executable") - - if not os.path.exists(outputDirectory): - os.makedirs(outputDirectory) - elif not os.path.isdir(outputDirectory): - raise Exception("outputDirectory '%s' is not a directory!" % outputDirectory) - + if self.cacheUpToDate == False: # TODO: remove cache? + self._countParticleTypes() + self._updateParticleOrder() - self.writePdb( outputPrefix + ".pdb" ) - self.writePsf( outputPrefix + ".psf" ) - self.writeArbdFiles( outputPrefix, numSteps=numSteps, outputPeriod=outputPeriod ) - os.sync() + if outputDirectory == '': outputDirectory='.' - ## http://stackoverflow.com/questions/18421757/live-output-from-subprocess-command - cmd = (arbd, '-g', "%d" % gpu, "%s.bd" % outputPrefix, "%s/%s" % (outputDirectory, outputPrefix)) - cmd = tuple(str(x) for x in cmd) + if arbd is None: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + fname = os.path.join(path, "arbd") + if os.path.isfile(fname) and os.access(fname, os.X_OK): + arbd = fname + break + + if arbd is None: raise Exception("ARBD was not found") + + if not os.path.exists(arbd): + raise Exception("ARBD was not found") + if not os.path.isfile(arbd): + raise Exception("ARBD was not found") + if not os.access(arbd, os.X_OK): + raise Exception("ARBD is not executable") + + if not os.path.exists(outputDirectory): + os.makedirs(outputDirectory) + elif not os.path.isdir(outputDirectory): + raise Exception("outputDirectory '%s' is not a directory!" % outputDirectory) + + + self.writePdb( outputPrefix + ".pdb" ) + self.writePsf( outputPrefix + ".psf" ) + self.writeArbdFiles( outputPrefix, numSteps=numSteps, outputPeriod=outputPeriod ) + os.sync() + + ## http://stackoverflow.com/questions/18421757/live-output-from-subprocess-command + cmd = (arbd, '-g', "%d" % gpu, "%s.bd" % outputPrefix, "%s/%s" % (outputDirectory, outputPrefix)) + cmd = tuple(str(x) for x in cmd) + + print("Running ARBD with: %s" % " ".join(cmd)) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) + for line in process.stdout: + sys.stdout.write(line) + sys.stdout.flush() + + except: + raise + finally: + os.chdir(d_orig) - print("Running ARBD with: %s" % " ".join(cmd)) - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) - for line in process.stdout: - sys.stdout.write(line) - sys.stdout.flush() # -------------------------- # # Methods for printing model # -- GitLab