def process(self, mol, port): try: # The copy of the dictionary option as local variable # is necessary to avoid filename collisions due to # the parallel cube processes opt = dict(self.opt) if utils.PackageOEMol.checkTags(mol, ['Structure']): gd = utils.PackageOEMol.unpack(mol) opt['outfname'] = '{}-{}'.format(gd['IDTag'], self.opt['outfname']) mdData = utils.MDData(mol) opt['molecule'] = mol self.log.info('START NPT SIMULATION %s' % gd['IDTag']) simtools.simulation(mdData, **opt) packedmol = mdData.packMDData(mol) self.success.emit(packedmol) except Exception as e: # Attach error message to the molecule that failed self.log.error(traceback.format_exc()) mol.SetData('error', str(e)) # Return failed mol self.failure.emit(mol) return
def process(self, mol, port): try: # The copy of the dictionary option as local variable # is necessary to avoid filename collisions due to # the parallel cube processes opt = dict(self.opt) # Update cube simulation parameters with the eventually molecule SD tags new_args = { dp.GetTag(): dp.GetValue() for dp in oechem.OEGetSDDataPairs(mol) if dp.GetTag() in ["temperature", "pressure"] } if new_args: for k in new_args: try: new_args[k] = float(new_args[k]) except: pass self.log.info( "Updating parameters for molecule: {}\n{}".format( mol.GetTitle(), new_args)) opt.update(new_args) if utils.PackageOEMol.checkTags(mol, ['Structure']): gd = utils.PackageOEMol.unpack(mol) opt['outfname'] = '{}-{}'.format(gd['IDTag'], self.opt['outfname']) mdData = utils.MDData(mol) opt['molecule'] = mol self.log.info('START NPT SIMULATION %s' % gd['IDTag']) simtools.simulation(mdData, **opt) packedmol = mdData.packMDData(mol) self.success.emit(packedmol) except Exception as e: # Attach error message to the molecule that failed self.log.error(traceback.format_exc()) mol.SetData('error', str(e)) # Return failed mol self.failure.emit(mol) return