def core_helper(plate, settings_dict, imagecontainer, position, version, redirect=True, debug=False): """Embeds analysis of a positon in a single function""" # see http://stackoverflow.com/questions/3288595/ # multiprocessing-using-pool-map-on-a-function-defined-in-a-class logger = logging.getLogger(str(os.getpid())) import numpy reload(numpy.core._dotblas) try: settings = ConfigSettings() settings.from_dict(settings_dict) settings.set('General', 'constrain_positions', True) settings.set('General', 'positions', position) environ = CecogEnvironment(version, redirect=redirect, debug=debug) if debug: environ.pprint() analyzer = AnalyzerCore(plate, settings, imagecontainer) post_hdf5_link_list = analyzer.processPositions() return plate, position, copy.deepcopy(post_hdf5_link_list) except Exception as e: errortxt = "plate: %s, position: %s\n" %(plate, position) errortxt = "".join([errortxt] + \ traceback.format_exception(*sys.exc_info())) logger.error(errortxt) raise e.__class__(errortxt)
def _run(self): for plate_id in self._imagecontainer.plates: analyzer = AnalyzerCore(plate_id, self._settings, copy.deepcopy(self._imagecontainer)) h5_links = analyzer.processPositions(self) if h5_links: link_hdf5_files(h5_links)
def core_helper(plate, settings_dict, imagecontainer, position, version, redirect=True, debug=False): """Embeds analysis of a positon in a single function""" # see http://stackoverflow.com/questions/3288595/ # multiprocessing-using-pool-map-on-a-function-defined-in-a-class logger = logging.getLogger(str(os.getpid())) import numpy reload(numpy.core._dotblas) try: settings = ConfigSettings() settings.from_dict(settings_dict) settings.set('General', 'constrain_positions', True) settings.set('General', 'positions', position) environ = CecogEnvironment(version, redirect=redirect, debug=debug) if debug: environ.pprint() analyzer = AnalyzerCore(plate, settings, imagecontainer) post_hdf5_link_list = analyzer.processPositions() return plate, position, copy.deepcopy(post_hdf5_link_list) except Exception as e: errortxt = "plate: %s, position: %s\n" % (plate, position) errortxt = "".join([errortxt] + \ traceback.format_exception(*sys.exc_info())) logger.error(errortxt) raise e.__class__(errortxt)
def _process_image(self): print 'process image' self._stopwatch.reset() s = StopWatch() settings = _ProcessorMixin.get_special_settings(self._settings) settings.set_section('General') settings.set2('constrain_positions', True) settings.set2('positions', self.coordinate.position) settings.set2('redofailedonly', False) settings.set2('framerange', True) settings.set2('framerange_begin', self.coordinate.time) settings.set2('framerange_end', self.coordinate.time) settings.set_section('ObjectDetection') prim_id = PrimaryChannel.NAME #sec_id = SecondaryChannel.NAME #sec_regions = settings.get2('secondary_regions') settings.set_section('Processing') settings.set2('primary_classification', False) settings.set2('secondary_classification', False) settings.set2('primary_featureextraction', False) settings.set2('secondary_featureextraction', False) settings.set2('objectdetection', self._show_objects) settings.set2('tracking', False) settings.set_section('Output') settings.set2('rendering_contours_discwrite', False) settings.set2('rendering_class_discwrite', False) settings.set2('export_object_counts', False) settings.set2('export_object_details', False) settings.set2('export_track_data', False) settings.set_section('Classification') settings.set2('collectsamples', False) settings.set('General', 'rendering', {}) settings.set('General', 'rendering_class', {}) if len(self._imagecontainer.channels) > 1: settings.set('Processing', 'secondary_processChannel', True) settings.set('General', 'rendering', {}) print settings analyzer = AnalyzerCore(self.coordinate.plate, settings, self._imagecontainer) analyzer.processPositions(myhack=self) print('PROCESS IMAGE: %s' % s)
def core_helper(plate_id, settings_str, imagecontainer, position): settings = ConfigSettings(SECTION_REGISTRY) settings.from_string(settings_str) settings.set(SECTION_NAME_GENERAL, 'constrain_positions', True) settings.set(SECTION_NAME_GENERAL, 'positions', position) try: analyzer = AnalyzerCore(plate_id, settings, imagecontainer) result = analyzer.processPositions() except Exception: traceback.print_exc() raise return plate_id, position, copy.deepcopy(result['post_hdf5_link_list'])
elif len(compound) == 1: if not multiple_plates: plate_id = os.path.split(path_input)[1] pos = compound[0] else: parser.error("Position must be of the form 'plateid___position'. Found '%s' instead." % item) else: parser.error("Position must be of the form 'position' or 'plateid___position'. Found '%s' instead." % item) if not plate_id in plates: plates[plate_id] = [] plates[plate_id].append(pos) # start one analyzer per plate with the corresponding positions post_hdf5_link_list = [] for plate_id in plates: # redefine the positions settings.set(SECTION_NAME_GENERAL, 'constrain_positions', True) settings.set(SECTION_NAME_GENERAL, 'positions', ','.join(plates[plate_id])) logger.info("Launching analyzer for plate '%s' with positions %s" % (plate_id, plates[plate_id])) # initialize and run the analyzer analyzer = AnalyzerCore(plate_id, settings, imagecontainer) hdf_links = analyzer.processPositions() post_hdf5_link_list.append(hdf_links) if settings.get('Output', 'hdf5_create_file') and settings.get('Output', 'hdf5_merge_positions'): if len(post_hdf5_link_list) > 0: post_hdf5_link_list = reduce(lambda x,y: x + y, post_hdf5_link_list) link_hdf5_files(sorted(post_hdf5_link_list)) print 'BATCHPROCESSING DONE!'
def _process_image(self): settings = _ProcessorMixin.get_special_settings(self._settings) settings.set_section('General') settings.set2('constrain_positions', True) settings.set2('positions', self.coordinate.position) settings.set2('redofailedonly', False) settings.set2('framerange', True) settings.set2('framerange_begin', self.coordinate.time) settings.set2('framerange_end', self.coordinate.time) settings.set_section('ObjectDetection') prim_id = PrimaryChannel.NAME #sec_id = SecondaryChannel.NAME #sec_regions = settings.get2('secondary_regions') settings.set_section('Processing') settings.set2('primary_classification', False) settings.set2('secondary_classification', False) settings.set2('tertiary_classification', False) settings.set2('merged_classification', False) settings.set2('primary_featureextraction', False) settings.set2('secondary_featureextraction', False) settings.set2('objectdetection', self._show_objects) settings.set2('tracking', False) settings.set_section('Output') settings.set2('rendering_contours_discwrite', False) settings.set2('rendering_class_discwrite', False) settings.set2('export_object_counts', False) settings.set2('export_object_details', False) settings.set2('export_track_data', False) settings.set2('hdf5_create_file', False) settings.set_section('Classification') settings.set2('collectsamples', False) settings.set('General', 'rendering', {}) settings.set('General', 'rendering_class', {}) settings.set('Output', 'events_export_gallery_images', False) # turn of output: settings.set('Output', 'export_object_counts', False) settings.set('Output', 'export_object_details', False) settings.set('Output', 'export_file_names', False) settings.set('Output', 'events_export_gallery_images', False) settings.set('Output', 'export_track_data', False) settings.set('Output', 'export_tracking_as_dot', False) nchannels = len(self._imagecontainer.channels) # XXX channel mapping unclear # processing channel <--> color channel # i.e problems if 2 processing channels have the # same color if nchannels == 2: settings.set('Processing', 'secondary_processChannel', True) elif nchannels == 3: settings.set('Processing', 'secondary_processChannel', True) settings.set('Processing', 'tertiary_processChannel', True) # need turn of virtual channels settings.set('Processing', 'merged_processChannel', False) settings.set('General', 'rendering', {}) analyzer = AnalyzerCore(self.coordinate.plate, settings, self._imagecontainer) # as long the GIL is not released, if GIL is released # just use self.setCursor try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) analyzer.processPositions(myhack=self) except Exception, e: import traceback traceback.print_exc() raise(e)
def _process_image(self): settings = _ProcessorMixin.get_special_settings(self._settings) settings.set_section('General') settings.set2('constrain_positions', True) settings.set2('positions', self.coordinate.position) settings.set2('redofailedonly', False) settings.set2('framerange', True) settings.set2('framerange_begin', self.coordinate.time) settings.set2('framerange_end', self.coordinate.time) settings.set_section('ObjectDetection') prim_id = PrimaryChannel.NAME #sec_id = SecondaryChannel.NAME #sec_regions = settings.get2('secondary_regions') settings.set_section('Processing') settings.set2('primary_classification', False) settings.set2('secondary_classification', False) settings.set2('tertiary_classification', False) settings.set2('merged_classification', False) settings.set2('primary_featureextraction', False) settings.set2('secondary_featureextraction', False) settings.set2('objectdetection', self._show_objects) settings.set2('tracking', False) settings.set_section('Output') settings.set2('rendering_contours_discwrite', False) settings.set2('rendering_class_discwrite', False) settings.set2('export_object_counts', False) settings.set2('export_object_details', False) settings.set2('export_track_data', False) settings.set2('hdf5_create_file', False) settings.set_section('Classification') settings.set2('collectsamples', False) settings.set('General', 'rendering', {}) settings.set('General', 'rendering_class', {}) settings.set('Output', 'events_export_gallery_images', False) # turn of output: settings.set('Output', 'export_object_counts', False) settings.set('Output', 'export_object_details', False) settings.set('Output', 'export_file_names', False) settings.set('Output', 'events_export_gallery_images', False) settings.set('Output', 'export_track_data', False) settings.set('Output', 'export_tracking_as_dot', False) nchannels = len(self._imagecontainer.channels) # XXX channel mapping unclear # processing channel <--> color channel # i.e problems if 2 processing channels have the # same color if nchannels == 2: settings.set('Processing', 'secondary_processChannel', True) elif nchannels == 3: settings.set('Processing', 'secondary_processChannel', True) settings.set('Processing', 'tertiary_processChannel', True) # need turn of virtual channels settings.set('Processing', 'merged_processChannel', False) settings.set('General', 'rendering', {}) analyzer = AnalyzerCore(self.coordinate.plate, settings, self._imagecontainer) # as long the GIL is not released, if GIL is released # just use self.setCursor try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) analyzer.processPositions(myhack=self) except Exception, e: import traceback traceback.print_exc() raise (e)
for item in positions: compound = item.split('___') if len(compound) == 2: plate_id, pos = compound elif len(compound) == 1: if not multiple_plates: plate_id = os.path.split(path_input)[1] pos = compound[0] else: parser.error("Position must be of the form 'plateid___position'. Found '%s' instead." % item) else: parser.error("Position must be of the form 'position' or 'plateid___position'. Found '%s' instead." % item) if not plate_id in plates: plates[plate_id] = [] plates[plate_id].append(pos) # start one analyzer per plate with the corresponding positions for plate_id in plates: # redefine the positions settings.set(SECTION_NAME_GENERAL, 'constrain_positions', True) settings.set(SECTION_NAME_GENERAL, 'positions', ','.join(plates[plate_id])) logger.info("Launching analyzer for plate '%s' with positions %s" % (plate_id, plates[plate_id])) # initialize and run the analyzer analyzer = AnalyzerCore(plate_id, settings, imagecontainer) analyzer.processPositions() print 'BATCHPROCESSING DONE!'