Пример #1
0
def test_filter_events_array():
    with pytest.raises(ValueError):
        filter_events_array(arr=np.array([0.0, 0.0, 0.6]))

    with pytest.raises(ValueError):
        filter_events_array(arr=np.array([[0.0, 0.0, 0.6]]), n_time_steps=0)

    arr = np.array([[0.0, 0.0, 0.6]])
    filtered_events_array = filter_events_array(arr=arr)
    assert arr.shape[0] == filtered_events_array.shape[0]
    assert arr.shape[1] == filtered_events_array.shape[1]

    expected = np.array([[0.0, 0.0, 0.199559]])
    assert (np.abs(filtered_events_array - expected) < 1e-6).all()
Пример #2
0
    def __init__(self,
                 events: np.ndarray,
                 events_meta: pd.DataFrame,
                 filter_scale: float = 2,
                 filter_n_time_steps: int = 20):
        """
        Parameters
        ----------
        events
            events
        events_meta
            lambda, noise_std, cell_roi_id for each roi
        filter_scale
            See filter_events_array for description
        filter_n_time_steps
            See filter_events_array for description
        """

        filtered_events = filter_events_array(arr=events,
                                              scale=filter_scale,
                                              n_time_steps=filter_n_time_steps)

        # Convert matrix to list of 1d arrays so that it can be stored
        # in a single column of the dataframe
        events = [x for x in events]
        filtered_events = [x for x in filtered_events]

        df = pd.DataFrame({
            'events': events,
            'filtered_events': filtered_events,
            'lambda': events_meta['lambda'],
            'noise_std': events_meta['noise_std'],
            'cell_roi_id': events_meta['cell_roi_id']
        })
        super().__init__(name='events', value=df)
Пример #3
0
    def get_events(self,
                   filter_scale: float = 2,
                   filter_n_time_steps: int = 20) -> pd.DataFrame:
        """
        Parameters
        ----------
        filter_scale: float
            See filter_events_array for description
        filter_n_time_steps: int
            See filter_events_array for description

        Returns
        -------
        Events dataframe:
            columns:
            events: np.array
            lambda: float
            noise_std: float
            cell_roi_id: int

            index:
            cell_specimen_id: int

        """
        event_detection = self.nwbfile.processing['ophys']['event_detection']
        # NOTE: The rois with events are stored in event detection
        partial_cell_specimen_table = event_detection.rois.to_dataframe()

        events = event_detection.data[:]

        # events stored time x roi. Change back to roi x time
        events = events.T

        filtered_events = filter_events_array(arr=events,
                                              scale=filter_scale,
                                              n_time_steps=filter_n_time_steps)

        # Convert to list to that it can be stored in a single column
        events = [x for x in events]
        filtered_events = [x for x in filtered_events]

        return pd.DataFrame(
            {
                'cell_roi_id': partial_cell_specimen_table.index,
                'events': events,
                'filtered_events': filtered_events,
                'lambda': event_detection.lambdas[:],
                'noise_std': event_detection.noise_stds[:]
            },
            index=pd.Index(partial_cell_specimen_table['cell_specimen_id']))
    def get_events(self,
                   filter_scale: float = 2,
                   filter_n_time_steps: int = 20) -> pd.DataFrame:
        """
        Returns events in dataframe format

        Parameters
        ----------
        filter_scale: float
            See filter_events_array for description
        filter_n_time_steps: int
            See filter_events_array for description

        See behavior_ophys_session.events for return type
        """
        events_file = self.extractor.get_event_detection_filepath()
        with h5py.File(events_file, 'r') as f:
            events = f['events'][:]
            lambdas = f['lambdas'][:]
            noise_stds = f['noise_stds'][:]
            roi_ids = f['roi_names'][:]

        filtered_events = filter_events_array(arr=events,
                                              scale=filter_scale,
                                              n_time_steps=filter_n_time_steps)

        # Convert matrix to list of 1d arrays so that it can be stored
        # in a single column of the dataframe
        events = [x for x in events]
        filtered_events = [x for x in filtered_events]

        df = pd.DataFrame({
            'events': events,
            'filtered_events': filtered_events,
            'lambda': lambdas,
            'noise_std': noise_stds,
            'cell_roi_id': roi_ids
        })

        # Set index as cell_specimen_id from cell_specimen_table
        cell_specimen_table = self.get_cell_specimen_table()
        cell_specimen_table = cell_specimen_table.reset_index()
        df = cell_specimen_table[['cell_roi_id', 'cell_specimen_id']]\
            .merge(df, on='cell_roi_id')
        df = df.set_index('cell_specimen_id')

        return df