Пример #1
0
def create_physio_brf(physiological_params,
                      response_dt=.5,
                      response_duration=25.,
                      return_brf_q_v=False):
    """
    Generate a BOLD response function by integrating a physiological model and
    setting its driving input signal to a single impulse.

    Args:
        - physiological_params (dict (<pname (str)> : <pvalue (float)>)):
            parameters of the physiological model.
            In jde.sandbox.physio see PHY_PARAMS_FRISTON00, PHY_PARAMS_FMRII ...
        - response_dt (float): temporal resolution of the response, in second
        - response_duration (float): duration of the response, in second

    Return:
        - np.array(nb_time_coeffs, float)
          -> the BRF (normalized)
        - also return brf_not_normalized, q, v when return_prf_q_v=True
          (for error checking of v and q generation in calc_hrfs)
    """

    p = Paradigm({'c': [np.array([0.])]}, [response_duration],
                 {'c': [np.array([1.])]})
    n = np.array([[1.]])
    s, f, v, q = create_evoked_physio_signals(physiological_params, p, n,
                                              response_dt)
    brf = create_bold_from_hbr_and_cbv(physiological_params, q[:, 0], v[:, 0])
    if return_brf_q_v:
        return brf / (
            brf**2).sum()**.5, q, v, s, f  #WARNING!! Added to compute figures
        #return  brf, q, v, s, f  #WARNING!! Added to compute figures
    else:
        return brf / (brf**2).sum()**.5
Пример #2
0
def create_physio_prf(physiological_params,
                      response_dt=.5,
                      response_duration=25.,
                      return_prf_q_v=False):
    """
    Generate a perfusion response function by setting the input driving signal
    of the given physiological model with a single impulse.

    Args:
        - physiological_params (dict (<pname (str)> : <pvalue (float)>)):
            parameters of the physiological model.
            In jde.sandbox.physio see PHY_PARAMS_FRISTON00, PHY_PARAMS_FMRII ...
        - response_dt (float): temporal resolution of the response, in second
        - response_duration (float): duration of the response, in second

    Return:
        - np.array(nb_time_coeffs, float)
          -> the PRF
        - also return brf_not_normalized, q, v when return_prf_q_v=True
          (for error checking of v and q generation in calc_hrfs)
    """
    p = Paradigm({'c': [np.array([0.])]}, [response_duration],
                 {'c': [np.array([1.])]})  # response_dt to match convention
    # in JDE analysis
    n = np.array([[1.]])
    s, f, v, q = create_evoked_physio_signals(physiological_params, p, n,
                                              response_dt)
    prf = f[:, 0] - f[0, 0]  #remove y-intercept
    if return_prf_q_v:
        return prf / (prf**2).sum()**.5, q, v
        #return prf, q, v
    else:
        return prf / (prf**2).sum()**.5
Пример #3
0
    def __init__(self,
                 onsets,
                 bold,
                 tr,
                 sessionsScans,
                 roiMask,
                 graphs=None,
                 stimDurations=None,
                 meta_obj=None,
                 simulation=None,
                 backgroundLabel=0,
                 data_files=None,
                 data_type=None,
                 edge_lengths=None,
                 mask_loaded_from_file=False,
                 extra_data=None):

        logger.info('Creation of FmriData object ...')
        if isinstance(bold, xndarray):
            logger.info('bold shape: %s', str(bold.data.shape))
        else:
            logger.info('bold shape: %s', str(bold.shape))
        logger.info('roi mask shape: %s', str(roiMask.shape))
        logger.info('unique(mask): %s', str(np.unique(roiMask)))

        sessionsDurations = [len(ss) * tr for ss in sessionsScans]
        self.paradigm = Paradigm(onsets, sessionsDurations, stimDurations)

        self.tr = tr
        self.sessionsScans = sessionsScans

        self.extra_data = extra_data or {}

        if backgroundLabel is None:
            backgroundLabel = 0

        self.backgroundLabel = backgroundLabel

        logger.info('backgroundLabel: %d', self.backgroundLabel)

        self.store_mask_sparse(roiMask)

        m = self.np_roi_mask
        if isinstance(bold, xndarray):
            if bold.data.ndim > 2:  # volumic data
                print '----------------'
                if data_type is None:
                    data_type = 'volume'
                assert roiMask.ndim == 3
                if TIME_AXIS == 0:
                    bold = bold.data[:, m[0], m[1], m[2]]
                else:  # TIME_AXIS = 3
                    bold = bold.data[m[0], m[1], m[2], :].transpose()

            else:  # surfacic or already flatten data
                assert bold.data.ndim == 2
                if len(m[0]) != bold.data.shape[1]:
                    bold = bold.data[:, m[0]]
                else:
                    bold = bold.data
        else:
            if bold.ndim > 2:  # volumic data
                if data_type is None:
                    data_type = 'volume'
                assert roiMask.ndim == 3
                if TIME_AXIS == 0:
                    bold = bold[:, m[0], m[1], m[2]]
                else:  # TIME_AXIS = 3
                    bold = bold[m[0], m[1], m[2], :].transpose()

            else:  # surfacic or already flatten data
                assert bold.ndim == 2
                if len(m[0]) != bold.shape[1]:
                    bold = bold[:, m[0]]

        self.data_type = data_type

        logger.info('extracted bold shape (without background): %s',
                    str(bold.shape))

        self.bold = bold
        self.bold_full = bold
        self.bold_avg = None

        self.graphs = graphs
        self.edge_lengths = edge_lengths
        self.graphs_full = graphs
        self.graphs_avg = None
        self.meta_obj = meta_obj
        self.simulation = simulation

        self.nbConditions = len(self.paradigm.stimOnsets)
        self.nbSessions = len(sessionsScans)

        self.mask_loaded_from_file = mask_loaded_from_file
        if data_files is None:
            data_files = []
        self.data_files = data_files