2. Build a SegmentationExtractor:#

To build a custom SegmentationExtractor that interfaces with the output of a custom segmentation pipeline used for post processing the raw image data.

  • get_accepted_list(): returns a list of accepted ROIs’ id numbers

  • get_image_size(): the y,x dim of the image(the resolution)

from roiextractors import SegmentationExtractor

class MyFormatSegmentationExtractor(SegmentationExtractor):
    def __init__(self, file_path):
        RecordingExtractor.__init__(self)

        ## All file specific initialization code can go here.

        self._sampling_frequency = # logic to extract sampling frequency here
        self._channel_names = ['OpticalChannel']
        self._num_planes = 1
        self._image_masks = self._load_rois()
        self._roi_response_raw = self._load_traces()# define a method to extract Flourescence traces
        self._roi_response_dff = self._load_traces()# define a method to extract dF/F traces if any else None
        self._roi_response_neuropil = self._load_traces()# define a method to extract neuropil info if any else None
        self._roi_response_denoised = self._load_traces() # define a method to extract denoised traces if any else None
        self._roi_response_deconvolved = self._load_traces() # define a method to extract deconvolved traces if any else None
        self._image_correlation = self._load_summary_images()# define method to extract a correlation image else None
        self._image_mean = self._load_summary_images() # define method to extract a mean image else None

    def _load_traces(self, name):

        # define your logic to extract roi time traces
        # return a np.ndarray, None

    def _load_rois(self):

        # define logic to extract the image masks used to define the extracted regions of interest
        # will return a np.ndarray with 0,1 values. 1: the ROI. Shape as image shape.

    def _load_summary_images(self):

        # define method to extract and return summary images like mean/correlation etc.
        # return np.ndarray , shape: x,y pixels

    def get_accepted_list(self):

        # define method to get all the accepted ROIs after the segmentation operation of pipeline

    def get_rejected_list(self):

        # define method to get all the rejected ROIs after the segmentation operation of pipeline
        # this can also be the compliment of accepted list

    def get_sampling_frequency(self):

        return self._sampling_frequency

    def get_roi_ids(self):

        # define logic to get the numerical id of the ROI output by the segmentation pipeline.

    def get_image_size(self)

        # returns something like self._image_mean.shape

    @staticmethod
    def write_segmentation(segmentation_obj, save_path, other_params):
        '''
        This is an example of a function that is not abstract so it is optional if you want to override it.
        It allows other SegmentationExtractor to use your new SegmentationExtractor to convert their data into your format
        '''