Example #1
0
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)
Example #2
0
 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)
Example #3
0
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)
Example #4
0
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'])
Example #5
0
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'])
Example #6
0
    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)
Example #7
0
        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!'
Example #8
0
        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!'
Example #9
0
    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)
Example #10
0
    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)
Example #11
0
File: batch.py Project: cmci/cecog
    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!'