def __init__(self, parameters=None, xmlHandler=NumpyXMLHandler(), xmlLabel=None, xmlComment=None): XMLParamDrivenClass.__init__(self, parameters, xmlHandler, xmlLabel, xmlComment) clabel = self.parameters["name"] ad = self.parameters["domains"] an = self.parameters["orientation"] vlab = self.parameters["value_label"] fl = self.parameters["dataFiles"] eaxes = self.parameters["explodedAxes"] self.outDir = "./" # print '' # print 'clabel:', clabel # print 'eaxes :', eaxes # print 'an:', an if len(fl) > 0: ed = dict(zip(eaxes, [ad[ea] for ea in eaxes])) if len(eaxes) > 0: iaxes = list(set(an).difference(eaxes)) else: iaxes = an idomains = dict(zip(iaxes, [ad[ia] for ia in iaxes])) ctree = {} if 0: print "fl:", fl print "id:", idomains print "iaxes:", iaxes print "ad:", ad print "ed:", ed print "eaxes:", eaxes if len(eaxes) > 0: for fn in fl: n = os.path.splitext(os.path.basename(fn))[0] blabels, bvals = self.slice_idx_from_filename(n, clabel) if 0: print "blabels:", blabels print "bvals:", bvals print "fn:", fn cdata = self.load_cuboid(fn, iaxes, vlab, idomains) # print 'ctree:' # print ctree # print 'cdata:', cdata set_leaf(ctree, bvals, cdata) self.cuboid = tree_to_cuboid(ctree, branchLabels=blabels) else: self.cuboid = self.load_cuboid(fl[0], iaxes, vlab, idomains) self.cuboid.set_orientation(an) else: self.cuboid = None
def test_tree_to_cuboid(self): from pyhrf.ndarray import xndarray, tree_to_cuboid import numpy as _np d1 = {} set_leaf(d1, ['1','2.1','3.1'], xndarray(_np.array([1]))) set_leaf(d1, ['1','2.1','3.2'], xndarray(_np.array([2]))) set_leaf(d1, ['1','2.2','3.3'], xndarray(_np.array([3]))) d2 = {} set_leaf(d2, ['1','2.1','3.1'], xndarray(_np.array([10]))) set_leaf(d2, ['1','2.1','3.2'], xndarray(_np.array([11]))) set_leaf(d2, ['1','2.2','3.3'], xndarray(_np.array([12]))) d = {'d1':d1, 'd2':d2} labels = ['case', 'p1', 'p2', 'p3'] c = tree_to_cuboid(d, labels)
def analyse_roi(self, fdata): pyhrf.verbose(1, 'Run GLM analysis (ROI %d) ...' %fdata.get_roi_id()) if self.rescale_factor is not None: m = np.where(fdata.roiMask) rescale_factor = self.rescale_factor[:,m[0],m[1],m[2]] else: rescale_factor = None glm, dm, cons = glm_nipy(fdata, contrasts=self.contrasts, hrf_model=self.hrf_model, drift_model=self.drift_model, hfcut=self.hfcut, residuals_model=self.residuals_model, fit_method=self.fit_method, fir_delays=self.fir_delays, rescale_results=self.rescale_results, rescale_factor=rescale_factor) outputs = {} ns, nr = dm.matrix.shape tr = fdata.tr if rescale_factor is not None: #same sf for all voxels dm.matrix[:,:rescale_factor.shape[0]] /= rescale_factor[:,0] cdesign_matrix = xndarray(dm.matrix, axes_names=['time','regressor'], axes_domains={'time':np.arange(ns)*tr, 'regressor':dm.names}) outputs['design_matrix'] = cdesign_matrix axes_names = ['time', 'voxel'] axes_domains = {'time' : np.arange(ns)*tr} bold = xndarray(fdata.bold.astype(np.float32), axes_names=axes_names, axes_domains=axes_domains, value_label='BOLD') fit = np.dot(dm.matrix, glm.beta) cfit = xndarray(fit, axes_names=['time','voxel'], axes_domains={'time':np.arange(ns)*tr}) outputs['bold_fit'] = stack_cuboids([bold,cfit], 'stype', ['bold', 'fit']) nb_cond = fdata.nbConditions fit_cond = np.dot(dm.matrix[:,:nb_cond], glm.beta[:nb_cond,:]) fit_cond -= fit_cond.mean(0) fit_cond += fdata.bold.mean(0) outputs['fit_cond'] = xndarray(fit_cond, axes_names=['time','voxel'], axes_domains={'time':np.arange(ns)*tr}) outputs['s2'] = xndarray(glm.s2, axes_names=['voxel']) if 0: cbeta = xndarray(glm.beta, axes_names=['reg_name','voxel'], axes_domains={'reg_name':dm.names}) outputs['beta'] = cbeta else: if self.hrf_model == 'FIR': fir = dict((d * fdata.tr, OrderedDict()) for d in self.fir_delays) for ib, bname in enumerate(dm.names): outputs['beta_' + bname] = xndarray(glm.beta[ib], axes_names=['voxel']) if self.hrf_model == 'FIR' and 'delay' in bname: #reconstruct filter: cond, delay = bname.split('_delay_') delay = int(delay) * fdata.tr fir[delay][cond] = xndarray(glm.beta[ib], axes_names=['voxel']) if self.hrf_model == 'FIR': chrf = tree_to_cuboid(fir, ['time', 'condition']) outputs['hrf'] = chrf outputs['hrf_norm'] = (chrf**2).sum('time')**.5 for cname, con in cons.iteritems(): #print 'con:' #print dir(con) outputs['con_effect_'+cname] = xndarray(con.effect, axes_names=['voxel']) #print '%%%%%%% con.variance:', con.variance.shape ncon = con.effect / con.variance.std() outputs['ncon_effect_'+cname] = xndarray(ncon, axes_names=['voxel']) outputs['con_pvalue_'+cname] = xndarray(con.pvalue(self.con_bl), axes_names=['voxel']) roi_lab_vol = np.zeros(fdata.get_nb_vox_in_mask(), dtype=np.int32) + \ fdata.get_roi_id() outputs['mask'] = xndarray(roi_lab_vol, axes_names=['voxel']) # for ib, bname in enumerate(design_matrix.names): # beta_vol = expand_array_in_mask(my_glm.beta[ib], mask_array) # beta_image = Nifti1Image(beta_vol, affine) # beta_file = op.join(output_dir, 'beta_%s.nii' %bname) # save(beta_image, beta_file) # beta_files.append(beta_file) return outputs
def __init__(self, parameters=None, xmlHandler=NumpyXMLHandler(), xmlLabel=None, xmlComment=None): if 0: print "xndarrayXml2.__init__ ..." XMLParamDrivenClass.__init__(self, parameters, xmlHandler, xmlLabel, xmlComment) clabel = self.parameters["name"] ad = self.parameters["domains"] an = self.parameters["orientation"] vlab = self.parameters["value_label"] fl = self.parameters["dataFiles"] eaxes = self.parameters["explodedAxes"] self.outDir = "./" self.meta_data = None # print '' # print 'clabel:', clabel # print 'eaxes :', eaxes # print 'an:', an if len(fl) > 0 and self.loadxndarray: ed = dict(zip(eaxes, [ad[ea] for ea in eaxes])) if len(eaxes) > 0: iaxes = [] for a in an: if a not in eaxes: iaxes.append(a) # iaxes = list(set(an).difference(eaxes)) else: iaxes = an idomains = dict(zip(iaxes, [ad[ia] for ia in iaxes])) ctree = {} if 0: print "fl:", fl print "id:", idomains print "iaxes:", iaxes print "ad:", ad print "ed:", ed print "eaxes:", eaxes if len(eaxes) > 0: for slice, fn in fl.iteritems(): slice = list(slice) if 0: print "slice:", slice print "fn:", fn if slice is not None: if "_" in slice: slice.remove("_") if "_" in slice: slice.remove("_") cdata = self.load_cuboid(fn, iaxes, vlab, idomains) # print 'ctree:' # print ctree # print 'cdata:', cdata set_leaf(ctree, list(slice), cdata) self.cuboid = tree_to_cuboid(ctree, branchLabels=eaxes) else: self.cuboid = self.load_cuboid(fl.values()[0], iaxes, vlab, idomains) self.cuboid.set_orientation(an) else: self.cuboid = None self.useRelativePath = False