def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlAutoproc.preProcess") self.xds_anom = self.loadPlugin('EDPluginExecMinimalXds') self.xds_noanom = self.loadPlugin('EDPluginExecMinimalXds') path = os.path.abspath(self.dataInput.previous_run_dir.value) # create the data inputs now we know the files are here input_anom = XSDataMinimalXdsIn() input_anom.input_file = XSDataString(os.path.join(path, 'XDS.INP')) input_anom.friedels_law = XSDataBoolean(True) input_anom.job = XSDataString('CORRECT') input_anom.resolution = self.dataInput.resolution input_anom.resolution_range = [ XSDataFloat(60), self.dataInput.resolution ] self.xds_anom.dataInput = input_anom input_noanom = XSDataMinimalXdsIn() input_noanom.input_file = XSDataString(os.path.join(path, 'XDS.INP')) input_noanom.fridels_law = XSDataBoolean(False) input_noanom.job = XSDataString('CORRECT') input_noanom.resolution_range = [ XSDataFloat(60), self.dataInput.resolution ] self.xds_noanom.dataInput = input_noanom xds_anom_dir = os.path.abspath(self.xds_anom.getWorkingDirectory()) xds_noanom_dir = os.path.abspath(self.xds_noanom.getWorkingDirectory()) # let's make some links! for f in self._to_link: os.symlink(f, os.path.join(xds_anom_dir, os.path.basename(f))) os.symlink(f, os.path.join(xds_noanom_dir, os.path.basename(f))) # now this is the horrible part, we need to make symlinks to # the images also. for now we rely on the fact that the links # in the previous run are most likely the links to the # images. So we will make the same links and rely on the fact # that in the input file the path to the images is already # relative to the CWD path = os.path.abspath(self.dataInput.previous_run_dir.value) for f in os.listdir(path): fullpath = os.path.join(path, f) if os.path.islink(fullpath): # symlink the symlink... os.symlink(fullpath, os.path.join(xds_anom_dir, f)) os.symlink(fullpath, os.path.join(xds_noanom_dir, f))
def preProcess(self, _edObject = None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlAutoproc.preProcess") self.xds_anom = self.loadPlugin('EDPluginExecMinimalXds') self.xds_noanom = self.loadPlugin('EDPluginExecMinimalXds') path = os.path.abspath(self.dataInput.previous_run_dir.value) # The MinimalXds plugin takes care of creating determining the # real images directory and creating a symlink to it so we # only need to update the NAMED_TEMPLATE_OF_DATA_FILES keyword # to not be relative anymore. We'll copy it to our own dir # beforehand to avoid clobbering it xdsinp = os.path.join(path, 'XDS.INP') new_xdsinp = os.path.join(self.getWorkingDirectory(), 'XDS.INP') copyfile(xdsinp, new_xdsinp) parsed_config = parse_xds_file(new_xdsinp) file_template = parsed_config['NAME_TEMPLATE_OF_DATA_FRAMES='][0] parsed_config['NAME_TEMPLATE_OF_DATA_FRAMES='] = os.path.abspath(os.path.join(path, file_template)) dump_xds_file(new_xdsinp, parsed_config) # create the data inputs now we know the files are here input_anom = XSDataMinimalXdsIn() input_anom.input_file = XSDataString(new_xdsinp) input_anom.friedels_law = XSDataBoolean(False) input_anom.job = XSDataString('CORRECT') input_anom.resolution = self.dataInput.resolution input_anom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_anom.dataInput = input_anom input_noanom = XSDataMinimalXdsIn() input_noanom.input_file = XSDataString(new_xdsinp) input_noanom.friedels_law = XSDataBoolean(True) input_noanom.job = XSDataString('CORRECT') input_noanom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_noanom.dataInput = input_noanom xds_anom_dir = os.path.abspath(self.xds_anom.getWorkingDirectory()) xds_noanom_dir = os.path.abspath(self.xds_noanom.getWorkingDirectory()) # let's make some links! for f in self._to_link: os.symlink(f, os.path.join(xds_anom_dir, os.path.basename(f))) os.symlink(f, os.path.join(xds_noanom_dir, os.path.basename(f)))
def preProcess(self, _edObject = None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlAutoproc.preProcess") self.xds_anom = self.loadPlugin('EDPluginExecMinimalXds') self.xds_noanom = self.loadPlugin('EDPluginExecMinimalXds') path = os.path.abspath(self.dataInput.previous_run_dir.value) # The MinimalXds plugin takes care of creating determining the # real images directory and creating a symlink to it so we # only need to update the NAMED_TEMPLATE_OF_DATA_FILES keyword # to not be relative anymore. We'll copy it to our own dir # beforehand to avoid clobbering it xdsinp = os.path.join(path, 'XDS.INP') new_xdsinp = os.path.join(self.getWorkingDirectory(), 'XDS.INP') copyfile(xdsinp, new_xdsinp) parsed_config = parse_xds_file(new_xdsinp) file_template = parsed_config['NAME_TEMPLATE_OF_DATA_FRAMES='][0] parsed_config['NAME_TEMPLATE_OF_DATA_FRAMES='] = os.path.abspath(os.path.join(path, file_template)) dump_xds_file(new_xdsinp, parsed_config) # create the data inputs now we know the files are here input_anom = XSDataMinimalXdsIn() input_anom.input_file = XSDataString(new_xdsinp) input_anom.friedels_law = XSDataBoolean(True) input_anom.job = XSDataString('CORRECT') input_anom.resolution = self.dataInput.resolution input_anom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_anom.dataInput = input_anom input_noanom = XSDataMinimalXdsIn() input_noanom.input_file = XSDataString(new_xdsinp) input_noanom.friedels_law = XSDataBoolean(False) input_noanom.job = XSDataString('CORRECT') input_noanom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_noanom.dataInput = input_noanom xds_anom_dir = os.path.abspath(self.xds_anom.getWorkingDirectory()) xds_noanom_dir = os.path.abspath(self.xds_noanom.getWorkingDirectory()) # let's make some links! for f in self._to_link: os.symlink(f, os.path.join(xds_anom_dir, os.path.basename(f))) os.symlink(f, os.path.join(xds_noanom_dir, os.path.basename(f)))
def preProcess(self, _edObject = None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlAutoproc.preProcess") self.xds_anom = self.loadPlugin('EDPluginExecMinimalXds') self.xds_noanom = self.loadPlugin('EDPluginExecMinimalXds') path = os.path.abspath(self.dataInput.previous_run_dir.value) # create the data inputs now we know the files are here input_anom = XSDataMinimalXdsIn() input_anom.input_file = XSDataString(os.path.join(path, 'XDS.INP')) input_anom.friedels_law = XSDataBoolean(True) input_anom.job = XSDataString('CORRECT') input_anom.resolution = self.dataInput.resolution input_anom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_anom.dataInput = input_anom input_noanom = XSDataMinimalXdsIn() input_noanom.input_file = XSDataString(os.path.join(path, 'XDS.INP')) input_noanom.fridels_law = XSDataBoolean(False) input_noanom.job = XSDataString('CORRECT') input_noanom.resolution_range = [XSDataFloat(60), self.dataInput.resolution] self.xds_noanom.dataInput = input_noanom xds_anom_dir = os.path.abspath(self.xds_anom.getWorkingDirectory()) xds_noanom_dir = os.path.abspath(self.xds_noanom.getWorkingDirectory()) # let's make some links! for f in self._to_link: os.symlink(f, os.path.join(xds_anom_dir, os.path.basename(f))) os.symlink(f, os.path.join(xds_noanom_dir, os.path.basename(f))) # now this is the horrible part, we need to make symlinks to # the images also. for now we rely on the fact that the links # in the previous run are most likely the links to the # images. So we will make the same links and rely on the fact # that in the input file the path to the images is already # relative to the CWD path = os.path.abspath(self.dataInput.previous_run_dir.value) for f in os.listdir(path): fullpath = os.path.join(path, f) if os.path.islink(fullpath): # symlink the symlink... os.symlink(fullpath, os.path.join(xds_anom_dir, f)) os.symlink(fullpath, os.path.join(xds_noanom_dir, f))
def process(self, _edObject = None): EDPluginControl.process(self) self.DEBUG("EDPluginControlRunXdsFastProc.process") # First run is vanilla without any modification params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell self.first_run.dataInput = params self.first_run.executeSynchronous() EDVerbose.DEBUG('first run completed...') if self.first_run.dataOutput is not None and self.first_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.first_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: self.second_run = self.loadPlugin(self.controlled_plugin_name) self.DEBUG('retrying with increased SPOT_RANGE') self.DEBUG('copying previously generated files to the new plugin dir') copy_xds_files(self.first_run.getWorkingDirectory(), self.second_run.getWorkingDirectory()) params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.job = XSDataString('DEFPIX INTEGRATE CORRECT') params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell # increase all the spot ranges end by 20, constrained to # the data range upper limit spot_range = list() for srange in self.spot_range: range_begin = srange[0] range_end = srange[1] + 20 if range_end > self.end_image_no: self.DEBUG('End of range {0} would be past the last image {1}'.format(range_end, self.end_image_no)) range_end = self.end_image_no self.DEBUG('Changing spot range {0} to [{1} {2}]'.format(srange, range_begin, range_end)) r = XSDataRange(begin=range_begin, end=range_end) spot_range.append(r) params.spot_range = spot_range self.second_run.dataInput = params self.second_run.executeSynchronous() EDVerbose.DEBUG('second run completed') if self.second_run.dataOutput is not None and self.second_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.second_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: self.third_run = self.loadPlugin(self.controlled_plugin_name) self.DEBUG('retrying with increased SPOT_RANGE') self.DEBUG('copying previously generated files to the new plugin dir') copy_xds_files(self.second_run.getWorkingDirectory(), self.third_run.getWorkingDirectory()) params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.job = XSDataString('DEFPIX INTEGRATE CORRECT') params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell spot_range = list() for srange in self.spot_range: range_begin = srange[0] range_end = srange[1] + 40 if range_end > self.end_image_no: self.DEBUG('End of range {0} would be past the last image {1}'.format(range_end, self.end_image_no)) range_end = self.end_image_no self.DEBUG('Changing spot range {0} to [{1} {2}]'.format(srange, range_begin, range_end)) r = XSDataRange(begin=range_begin, end=range_end) spot_range.append(r) params.spot_range = spot_range self.third_run.dataInput = params self.third_run.executeSynchronous() EDVerbose.DEBUG('third run completed') if self.third_run.dataOutput is not None and self.third_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.third_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: # all runs failed so bail out ... self.setFailure() else: # use the xds parser plugin to parse the xds output file... parser = self.loadPlugin("EDPluginParseXdsOutput") wd = self.successful_run.getWorkingDirectory() parser_input = XSDataXdsOutputFile() correct_lp_path = XSDataFile() correct_lp_path.path = XSDataString(os.path.join(wd, 'CORRECT.LP')) parser_input.correct_lp = correct_lp_path gxparm_path = os.path.join(wd, 'GXPARM.XDS') if os.path.isfile(gxparm_path): gxparm = XSDataFile() gxparm.path = XSDataString(os.path.join(wd, 'GXPARM.XDS')) parser_input.gxparm = gxparm parser.dataInput = parser_input parser.executeSynchronous() if parser.isFailure(): # that should not happen self.setFailure() return self.dataOutput = parser.dataOutput
def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginControlRunXdsFastProc.process") # First run is vanilla without any modification params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell self.first_run.dataInput = params self.first_run.executeSynchronous() EDVerbose.DEBUG('first run completed...') if self.first_run.dataOutput is not None and self.first_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.first_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: self.second_run = self.loadPlugin(self.controlled_plugin_name) self.DEBUG('retrying with increased SPOT_RANGE') self.DEBUG( 'copying previously generated files to the new plugin dir') copy_xds_files(self.first_run.getWorkingDirectory(), self.second_run.getWorkingDirectory()) params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.job = XSDataString('DEFPIX INTEGRATE CORRECT') params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell # increase all the spot ranges end by 20, constrained to # the data range upper limit spot_range = list() for srange in self.spot_range: range_begin = srange[0] range_end = srange[1] + 20 if range_end > self.end_image_no: self.DEBUG( 'End of range {0} would be past the last image {1}'. format(range_end, self.end_image_no)) range_end = self.end_image_no self.DEBUG('Changing spot range {0} to [{1} {2}]'.format( srange, range_begin, range_end)) r = XSDataRange(begin=range_begin, end=range_end) spot_range.append(r) params.spot_range = spot_range self.second_run.dataInput = params self.second_run.executeSynchronous() EDVerbose.DEBUG('second run completed') if self.second_run.dataOutput is not None and self.second_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.second_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: self.third_run = self.loadPlugin(self.controlled_plugin_name) self.DEBUG('retrying with increased SPOT_RANGE') self.DEBUG( 'copying previously generated files to the new plugin dir') copy_xds_files(self.second_run.getWorkingDirectory(), self.third_run.getWorkingDirectory()) params = XSDataMinimalXdsIn() params.input_file = self.dataInput.input_file params.job = XSDataString('DEFPIX INTEGRATE CORRECT') params.spacegroup = self.dataInput.spacegroup params.unit_cell = self.dataInput.unit_cell spot_range = list() for srange in self.spot_range: range_begin = srange[0] range_end = srange[1] + 40 if range_end > self.end_image_no: self.DEBUG( 'End of range {0} would be past the last image {1}'. format(range_end, self.end_image_no)) range_end = self.end_image_no self.DEBUG('Changing spot range {0} to [{1} {2}]'.format( srange, range_begin, range_end)) r = XSDataRange(begin=range_begin, end=range_end) spot_range.append(r) params.spot_range = spot_range self.third_run.dataInput = params self.third_run.executeSynchronous() EDVerbose.DEBUG('third run completed') if self.third_run.dataOutput is not None and self.third_run.dataOutput.succeeded.value: EDVerbose.DEBUG('... and it worked') self.successful_run = self.third_run else: EDVerbose.DEBUG('... and it failed') if not self.successful_run: # all runs failed so bail out ... self.setFailure() else: # use the xds parser plugin to parse the xds output file... parser = self.loadPlugin("EDPluginParseXdsOutput") wd = self.successful_run.getWorkingDirectory() parser_input = XSDataXdsOutputFile() correct_lp_path = XSDataFile() correct_lp_path.path = XSDataString(os.path.join(wd, 'CORRECT.LP')) parser_input.correct_lp = correct_lp_path gxparm_path = os.path.join(wd, 'GXPARM.XDS') if os.path.isfile(gxparm_path): gxparm = XSDataFile() gxparm.path = XSDataString(os.path.join(wd, 'GXPARM.XDS')) parser_input.gxparm = gxparm parser.dataInput = parser_input parser.executeSynchronous() if parser.isFailure(): # that should not happen self.setFailure() return self.dataOutput = parser.dataOutput