def runCloud(self, data): self.user_data.set_selected(1) job = SensitivityJobWrapper() service = backendservices(self.user_data) if not service.isOneOrMoreComputeNodesRunning(): raise Exception('No cloud computing resources found. (Have they been started?)') job.user_id = self.user.user_id() model = modeleditor.StochKitModelWrapper.get_by_id(data["id"]) job.startTime = time.strftime("%Y-%m-%d-%H-%M-%S") job.name = data["jobName"] job.status = "Pending" job.modelName = model.name runtime = float(data["time"]) dt = float(data["increment"]) job.indata = json.dumps(data) parameters = [] for parameter in data['selections']["pc"]: if data['selections']["pc"][parameter]: parameters.append(parameter) stochkitmodel = model.createStochKitModel() # Wow, what a hack if stochkitmodel.units.lower() == 'population': document = stochkitmodel.serialize() stochkitmodel = StochMLDocument.fromString(document).toModel(model.name) for reactionN in stochkitmodel.getAllReactions(): reaction = stochkitmodel.getAllReactions()[reactionN] if reaction.massaction: if len(reaction.reactants) == 1 and reaction.reactants.values()[0] == 2: reaction.marate.setExpression(reaction.marate.expression + ' / 2') params = { "job_type": "sensitivity", "document": str( stochkitmodel.serialize() ), "paramstring": "stochkit_ode.py --sensi --parameters {0} -t {1} -i {2}".format( " ".join(parameters), runtime, int(runtime / dt) ), "bucketname": self.user_data.getBucketName() } # Send the task to the backend cloud_result = service.submit_cloud_task(params) # if not cloud_result["success"]: if not cloud_result["success"]: return None, cloud_result job.cloudDatabaseID = cloud_result["db_id"] job.celeryPID = cloud_result["celery_pid"] job.resource = cloud_result['resource'] job.outData = None job.zipFileName = None job.output_stored = 'True' job.put() return job
def runCloud(self, data): self.user_data.set_selected(1) job = SensitivityJobWrapper() service = backendservices(self.user_data) if not service.isOneOrMoreComputeNodesRunning(): raise Exception( 'No cloud computing resources found. (Have they been started?)' ) job.user_id = self.user.user_id() model = modeleditor.StochKitModelWrapper.get_by_id(data["id"]) job.startTime = time.strftime("%Y-%m-%d-%H-%M-%S") job.name = data["jobName"] job.status = "Pending" job.modelName = model.name runtime = float(data["time"]) dt = float(data["increment"]) job.indata = json.dumps(data) parameters = [] for parameter in data['selections']["pc"]: if data['selections']["pc"][parameter]: parameters.append(parameter) stochkitmodel = model.createStochKitModel() # Wow, what a hack if stochkitmodel.units.lower() == 'population': document = stochkitmodel.serialize() stochkitmodel = StochMLDocument.fromString(document).toModel( model.name) for reactionN in stochkitmodel.getAllReactions(): reaction = stochkitmodel.getAllReactions()[reactionN] if reaction.massaction: if len(reaction.reactants ) == 1 and reaction.reactants.values()[0] == 2: reaction.marate.setExpression( reaction.marate.expression + ' / 2') params = { "job_type": "sensitivity", "document": str(stochkitmodel.serialize()), "paramstring": "stochkit_ode.py --sensi --parameters {0} -t {1} -i {2}".format( " ".join(parameters), runtime, int(runtime / dt)), "bucketname": self.user_data.getBucketName() } # Send the task to the backend cloud_result = service.submit_cloud_task(params) # if not cloud_result["success"]: if not cloud_result["success"]: return None, cloud_result job.cloudDatabaseID = cloud_result["db_id"] job.celeryPID = cloud_result["celery_pid"] job.resource = cloud_result['resource'] job.outData = None job.zipFileName = None job.output_stored = 'True' job.put() return job
def runLocal(self, data): ''' ''' self.user_data.set_selected(0) job = SensitivityJobWrapper() job.resource = "local" job.user_id = self.user.user_id() model = modeleditor.StochKitModelWrapper.get_by_id(data["id"]) job.startTime = time.strftime("%Y-%m-%d-%H-%M-%S") job.name = data["jobName"] job.modelName = model.name runtime = float(data["time"]) dt = float(data["increment"]) job.indata = json.dumps(data) path = os.path.abspath(os.path.dirname(__file__)) parameters = [] for parameter in data['selections']["pc"]: if data['selections']["pc"][parameter]: parameters.append(parameter) if len(parameters) == 0: raise Exception("At least one parameter must be selected"); basedir = path + '/../' dataDir = tempfile.mkdtemp(dir = basedir + 'output') job.outData = dataDir modelFileName = '{0}/{1}.xml'.format(job.outData, model.name) fmodelHandle = open(modelFileName, 'w') stochkitmodel = model.createStochKitModel() # Wow, what a hack if stochkitmodel.units.lower() == 'population': document = stochkitmodel.serialize() stochkitmodel = StochMLDocument.fromString(document).toModel(model.name) for reactionN in stochkitmodel.getAllReactions(): reaction = stochkitmodel.getAllReactions()[reactionN] if reaction.massaction: if len(reaction.reactants) == 1 and reaction.reactants.values()[0] == 2: reaction.marate.setExpression(reaction.marate.expression + ' / 2') fmodelHandle.write(stochkitmodel.serialize()) fmodelHandle.close() job.status = "Pending" args = "--sensi -m {0} --parameters {1} -t {2} --out-dir {3} -i {4}".format(modelFileName, " ".join(parameters), runtime, dataDir + '/result', int(runtime / dt)) ode = "{0}/../../ode/stochkit_ode.py {1}".format(path, args) exstring = '{0}/backend/wrapper.py {1}/stdout {1}/stderr {1}/return_code {2}'.format(basedir, dataDir, ode) handle = subprocess.Popen(exstring.split(), preexec_fn=os.setsid) job.pid = handle.pid job.put() return job
def runLocal(self, data): ''' ''' self.user_data.set_selected(0) job = SensitivityJobWrapper() job.resource = "local" job.user_id = self.user.user_id() model = modeleditor.StochKitModelWrapper.get_by_id(data["id"]) job.startTime = time.strftime("%Y-%m-%d-%H-%M-%S") job.name = data["jobName"] job.modelName = model.name runtime = float(data["time"]) dt = float(data["increment"]) job.indata = json.dumps(data) path = os.path.abspath(os.path.dirname(__file__)) parameters = [] for parameter in data['selections']["pc"]: if data['selections']["pc"][parameter]: parameters.append(parameter) if len(parameters) == 0: raise Exception("At least one parameter must be selected") basedir = path + '/../' dataDir = tempfile.mkdtemp(dir=basedir + 'output') job.outData = dataDir modelFileName = '{0}/{1}.xml'.format(job.outData, model.name) fmodelHandle = open(modelFileName, 'w') stochkitmodel = model.createStochKitModel() # Wow, what a hack if stochkitmodel.units.lower() == 'population': document = stochkitmodel.serialize() stochkitmodel = StochMLDocument.fromString(document).toModel( model.name) for reactionN in stochkitmodel.getAllReactions(): reaction = stochkitmodel.getAllReactions()[reactionN] if reaction.massaction: if len(reaction.reactants ) == 1 and reaction.reactants.values()[0] == 2: reaction.marate.setExpression( reaction.marate.expression + ' / 2') fmodelHandle.write(stochkitmodel.serialize()) fmodelHandle.close() job.status = "Pending" args = "--sensi -m {0} --parameters {1} -t {2} --out-dir {3} -i {4}".format( modelFileName, " ".join(parameters), runtime, dataDir + '/result', int(runtime / dt)) ode = "{0}/../../ode/stochkit_ode.py {1}".format(path, args) exstring = '{0}/backend/wrapper.py {1}/stdout {1}/stderr {1}/return_code {2}'.format( basedir, dataDir, ode) handle = subprocess.Popen(exstring.split(), preexec_fn=os.setsid) job.pid = handle.pid job.put() return job