コード例 #1
0
ファイル: io.py プロジェクト: philouc/pyhrf
    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
コード例 #2
0
ファイル: toolsTest.py プロジェクト: Solvi/pyhrf
    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)
コード例 #3
0
ファイル: glm_ui.py プロジェクト: Solvi/pyhrf
    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
コード例 #4
0
ファイル: io.py プロジェクト: philouc/pyhrf
    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