Exemplo n.º 1
0
    def from_json(cls,
                  session_data: dict,
                  monitor_delay: Optional[float] = None) \
            -> "BehaviorSession":
        """

        Parameters
        ----------
        session_data
            Dict of input data necessary to construct a session
        monitor_delay
            Monitor delay. If not provided, will use an estimate.
            To provide this value, see for example
            allensdk.brain_observatory.behavior.data_objects.stimuli.util.
            calculate_monitor_delay

        Returns
        -------
        `BehaviorSession` instance

        """
        behavior_session_id = BehaviorSessionId.from_json(
            dict_repr=session_data)
        stimulus_file = StimulusFile.from_json(dict_repr=session_data)
        stimulus_timestamps = StimulusTimestamps.from_json(
            dict_repr=session_data)
        running_acquisition = RunningAcquisition.from_json(
            dict_repr=session_data)
        raw_running_speed = RunningSpeed.from_json(dict_repr=session_data,
                                                   filtered=False)
        running_speed = RunningSpeed.from_json(dict_repr=session_data)
        metadata = BehaviorMetadata.from_json(dict_repr=session_data)

        if monitor_delay is None:
            monitor_delay = cls._get_monitor_delay()

        licks, rewards, stimuli, task_parameters, trials = \
            cls._read_data_from_stimulus_file(
                stimulus_file=stimulus_file,
                stimulus_timestamps=stimulus_timestamps,
                trial_monitor_delay=monitor_delay
            )
        date_of_acquisition = DateOfAcquisition.from_json(
            dict_repr=session_data)\
            .validate(
            stimulus_file=stimulus_file,
            behavior_session_id=behavior_session_id.value)

        return BehaviorSession(behavior_session_id=behavior_session_id,
                               stimulus_timestamps=stimulus_timestamps,
                               running_acquisition=running_acquisition,
                               raw_running_speed=raw_running_speed,
                               running_speed=running_speed,
                               metadata=metadata,
                               licks=licks,
                               rewards=rewards,
                               stimuli=stimuli,
                               task_parameters=task_parameters,
                               trials=trials,
                               date_of_acquisition=date_of_acquisition)
def test_running_acquisition_from_json(monkeypatch, dict_repr,
                                       returned_running_acq_df,
                                       expected_running_acq_df):
    mock_stimulus_file = create_autospec(StimulusFile)
    mock_stimulus_timestamps = create_autospec(StimulusTimestamps)
    mock_get_running_df = create_autospec(get_running_df)

    mock_get_running_df.return_value = returned_running_acq_df

    with monkeypatch.context() as m:
        m.setattr(
            "allensdk.brain_observatory.behavior.data_objects"
            ".running_speed.running_acquisition.StimulusFile",
            mock_stimulus_file)
        m.setattr(
            "allensdk.brain_observatory.behavior.data_objects"
            ".running_speed.running_acquisition.StimulusTimestamps",
            mock_stimulus_timestamps)
        m.setattr(
            "allensdk.brain_observatory.behavior.data_objects"
            ".running_speed.running_acquisition.get_running_df",
            mock_get_running_df)
        obt = RunningAcquisition.from_json(dict_repr)

    mock_stimulus_file.from_json.assert_called_once_with(dict_repr)
    mock_stimulus_file_instance = mock_stimulus_file.from_json(dict_repr)
    assert obt._stimulus_file == mock_stimulus_file_instance

    mock_stimulus_timestamps.from_json.assert_called_once_with(dict_repr)
    mock_stimulus_timestamps_instance = mock_stimulus_timestamps.from_json(
        dict_repr)
    assert obt._stimulus_timestamps == mock_stimulus_timestamps_instance

    mock_get_running_df.assert_called_once_with(
        data=mock_stimulus_file_instance.data,
        time=mock_stimulus_timestamps_instance.value,
    )

    pd.testing.assert_frame_equal(obt.value, expected_running_acq_df)