def create_dm(self, drop=None, convolve=True): """ Create a unit (boxcar-only) DM with one columns for each condition in self.trials. If <convolve> the dm is convolved with the HRF (self.hrf). """ cond_levels = sorted(list(set(self.trials))) ## Find and sort conditions in trials # Some useful counts... num_conds = len(cond_levels) num_tr = np.sum(self.durations) # Map each condition in trials to a # 2d binary 2d array. Each row is a trial # and each column is a condition. dm_unit = np.zeros((num_tr, num_conds)) for col, cond in enumerate(cond_levels): # Create boolean array use it to # populate the dm with ones... # which must be in tr time. mask_in_tr = dtime(self.trials == cond, self.durations, drop, False) dm_unit[mask_in_tr, col] = 1 self.dm = dm_unit if convolve: self.dm = self._convolve_hrf(self.dm)
def create_dm(self, drop=None, convolve=True): """ Create a unit (boxcar-only) DM with one columns for each condition in self.trials. If <convolve> the dm is convolved with the HRF (self.hrf). """ cond_levels = sorted(list(set(self.trials))) ## Find and sort conditions in trials # Some useful counts... num_conds = len(cond_levels) num_tr = np.sum(self.durations) # Map each condition in trials to a # 2d binary 2d array. Each row is a trial # and each column is a condition. dm_unit = np.zeros((num_tr, num_conds)) for col, cond in enumerate(cond_levels): # Create boolean array use it to # populate the dm with ones... # which must be in tr time. mask_in_tr = dtime( self.trials == cond, self.durations, drop, False) dm_unit[mask_in_tr,col] = 1 self.dm = dm_unit if convolve: self.dm = self._convolve_hrf(self.dm)
def create_dm_param(self, names, drop=None, box=True, orth=False, convolve=True): """ Create a parametric design matrix based on <names> in self.data. If <box> a univariate dm is created that fills the leftmost side of the dm. If <orth> each regressor is orthgonalized with respect to its left-hand neighbor (excluding the baseline). If <convolve> the dm is convolved with the HRF (self.hrf). """ cond_levels = sorted(list(set(self.trials))) ## Find and sort conditions in trials # Some useful counts... num_names = len(names) num_tr = np.sum(self.durations) dm_param = None ## Will eventually hold the ## parametric DM. for cond in cond_levels: if cond == 0: continue ## We add the baseline ## in at the end # Create a temp dm to hold this # condition"s data dm_temp = np.zeros((num_tr, num_names)) mask_in_tr = dtime(self.trials == cond, self.durations, drop, False) # Get the named data, convert to tr time # then add to the temp dm using the mask for col, name in enumerate(names): data_in_tr = dtime(self.data[name], self.durations, drop, 0) dm_temp[mask_in_tr, col] = data_in_tr[mask_in_tr] # Store the temporary DM in # the final DM. if dm_param == None: dm_param = dm_temp ## reinit else: dm_param = np.hstack((dm_param, dm_temp)) ## adding # Create the unit DM too, then combine them. # defining self.dm in the process self.create_dm(convolve=False) dm_unit = self.dm.copy() self.dm = None ## Copy and reset if box: self.dm = np.hstack((dm_unit, dm_param)) else: baseline = dm_unit[:, 0] baseline = baseline.reshape(baseline.shape[0], 1) self.dm = np.hstack((baseline, dm_param)) ## If not including the boxcar, ## we still need the baseline model. # Orthgonalize the regessors? if orth: self._orth_dm() # Convolve with self.hrf? if convolve: self.dm = self._convolve_hrf(self.dm)
def create_dm_param(self, names, drop=None, box=True, orth=False, convolve=True): """ Create a parametric design matrix based on <names> in self.data. If <box> a univariate dm is created that fills the leftmost side of the dm. If <orth> each regressor is orthgonalized with respect to its left-hand neighbor (excluding the baseline). If <convolve> the dm is convolved with the HRF (self.hrf). """ cond_levels = sorted(list(set(self.trials))) ## Find and sort conditions in trials # Some useful counts... num_names = len(names) num_tr = np.sum(self.durations) dm_param = None ## Will eventually hold the ## parametric DM. for cond in cond_levels: if cond == 0: continue ## We add the baseline ## in at the end # Create a temp dm to hold this # condition"s data dm_temp = np.zeros((num_tr, num_names)) mask_in_tr = dtime( self.trials == cond, self.durations, drop, False) # Get the named data, convert to tr time # then add to the temp dm using the mask for col, name in enumerate(names): data_in_tr = dtime( self.data[name], self.durations, drop, 0) dm_temp[mask_in_tr,col] = data_in_tr[mask_in_tr] # Store the temporary DM in # the final DM. if dm_param == None: dm_param = dm_temp ## reinit else: dm_param = np.hstack((dm_param, dm_temp)) ## adding # Create the unit DM too, then combine them. # defining self.dm in the process self.create_dm(convolve=False) dm_unit = self.dm.copy() self.dm = None ## Copy and reset if box: self.dm = np.hstack((dm_unit, dm_param)) else: baseline = dm_unit[:,0] baseline = baseline.reshape(baseline.shape[0], 1) self.dm = np.hstack((baseline, dm_param)) ## If not including the boxcar, ## we still need the baseline model. # Orthgonalize the regessors? if orth: self._orth_dm() # Convolve with self.hrf? if convolve: self.dm = self._convolve_hrf(self.dm)