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
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
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