Пример #1
0
def region_overlap_report(regionName, atlasBase, atlasTarget):
    """
	This function is used to generate a region overlap report. It is used to find which regions a given
	area in an atlas (base) correspond to in another atlas (target). 
	The returned list is sorted according to overlap ratio. Each element is a tuple with the region name, counts and ratio
	"""
    regionData = atlasBase.regions[atlasBase.ticks.index(regionName)]
    atlasBaseImg = loadsave.load_nii(atlasBase.get_volume('1mm')['niifile'])
    atlasTargetImg = loadsave.load_nii(
        atlasTarget.get_volume('1mm')['niifile'])
    atlasBaseData = atlasBaseImg.get_data()
    atlasTargetData = atlasTargetImg.get_data()
    maskMatrix = atlasTargetData.copy()
    maskMatrix[atlasBaseData == regionData] = 1
    maskMatrix[atlasBaseData != regionData] = 0
    maskedTargetMatrix = np.multiply(atlasTargetData, maskMatrix)
    unique, counts = np.unique(maskedTargetMatrix, return_counts=True)
    resultList = []
    for areaData, count in zip(unique, counts):
        if areaData == 0:
            continue
        descriptionTuple = (
            atlasTarget.ticks[atlasTarget.regions.index(areaData)],
            '%d/%s' % (count, atlasTarget.get_volume('1mm')['regioncounts'][
                atlasTarget.regions.index(areaData)]), float(count) / int(
                    atlasTarget.get_volume('1mm')['regioncounts'][
                        atlasTarget.regions.index(areaData)]))
        resultList.append(descriptionTuple)
    resultList = sorted(resultList,
                        key=lambda x: int(x[1].split('/')[0]),
                        reverse=True)
    return resultList
Пример #2
0
def calc_attr(theattr):
    img = load_nii('../iso2.0_dtifitresult_{}.nii.gz'.format(theattr))
    atlasobj = atlas.getbywd()
    atlasname = atlasobj.name
    atlasimg = load_nii(os.path.join('nativespace', 'wtemplate_2.nii.gz'))
    res = niicalc.calc_region_mean(img, atlasobj, atlasimg)
    save_csvmat(os.path.join('nativespace', 'mean{}.csv'.format(theattr)), res)
Пример #3
0
	def __init__(self, atlasobj, volumename, img, outfolder, windowLength = 100, stepSize = 1):
		self.img = img
		self.atlasobj = atlasobj
		self.atlasimg = load_nii(atlasobj.get_volume(volumename)['niifile'])
		self.outfolder = outfolder
		self.windowLength = windowLength
		self.stepSize = stepSize
Пример #4
0
	def build_cmd(self, attr = None, nethold = None, out = None):  #attr[1,2,3,4,5,6]
		
		cmd = [self.exeName,"-i",self.corrPath]


		if out:
			cmd.extend(["-o",out+"\\"])
		else:
			cmd.extend(["-o",self.outfolder+"\\"])

		if nethold:
			cmd.extend(["-n",str(nethold)])
		else:
			cmd.extend(["-n",str(self.argsDict['netthreshold'])])
		
		cmd.extend(["-w",str(self.argsDict['windowLength'])])
		cmd.extend(["-t",str(self.argsDict['stepSize'])])
		img = load_nii(self.niipath)
		cmd.extend(["-l",str(img.header.get_data_shape()[3])])

		if attr:
			for i in attr:
				cmd.append("-c"+str(i))
		else:
			for k,v in self.argsDict['calc_attr'].items():
				if v:
					cmd.append("-c"+str(INTER_ATTR_MAPPING[k]))
		return cmd
Пример #5
0
def func(args):
	subject = args[0]
	atlasname = args[1]
	volumename = '3mm'
	atlasobj = atlas.get(atlasname)
	outfolder = os.path.join(mmdps_locale.MSA_ProcessedPath, subject, atlasobj.name, 'bold_net', 'dynamic 1 100')
	img = load_nii(os.path.join(mmdps_locale.MSA_ProcessedPath, subject, 'pBOLD.nii'))
	os.makedirs(outfolder, exist_ok = True)
	c = CalcDynamic(atlasobj, volumename, img, outfolder, 100, 1)
	c.run()
Пример #6
0
def color_atlas_region(atlasobj,
                       regions,
                       colors,
                       outfilepath,
                       resolution='1mm'):
    """
	This function is used to color one or several regions in an atlas.
	An nii file is saved where the specified region is set to 1 and other areas to 0
	Input 
		- regions: a string or a list of strings
		- colors: int or a list of int
	Note: if both regions and colors are lists, these two must have the same length
	"""
    if type(regions) is list and type(colors) is list and len(regions) != len(
            colors):
        print(
            'You must specify colors for each regions to label, or specify a single color'
        )
        raise Exception('Number of colors and regions not match')
    atlasImg = loadsave.load_nii(atlasobj.get_volume(resolution)['niifile'])
    atlasData = atlasImg.get_data()
    newAtlasData = atlasData.copy()
    if type(regions) is list and type(colors) is list:
        # each color for each region
        newAtlasData = np.zeros(newAtlasData.shape)
        for region, color in zip(regions, colors):
            regionMask = atlasData.copy()
            regionMask[regionMask != atlasobj.regions[atlasobj.ticks.index(
                region)]] = 0
            regionMask[regionMask == atlasobj.regions[atlasobj.ticks.index(
                region)]] = color
            newAtlasData += regionMask
    elif type(regions) is list and type(colors) is int:
        # one color for each region
        newAtlasData = np.zeros(newAtlasData.shape)
        for region in regions:
            regionMask = atlasData.copy()
            regionMask[regionMask != atlasobj.regions[atlasobj.ticks.index(
                region)]] = 0
            regionMask[regionMask == atlasobj.regions[atlasobj.ticks.index(
                region)]] = colors
            newAtlasData += regionMask
    elif type(regions) is str and type(colors) is int:
        # one color for one region
        newAtlasData[newAtlasData != atlasobj.regions[atlasobj.ticks.index(
            regions)]] = 0
        newAtlasData[newAtlasData == atlasobj.regions[atlasobj.ticks.index(
            regions)]] = colors
    else:
        raise Exception(
            'Unsupported combinations. regions as %s, colors as %s.' %
            (type(regions), type(colors)))
    newAtlasImg = nib.Nifti1Image(newAtlasData, atlasImg.affine,
                                  atlasImg.header)
    nib.save(newAtlasImg, outfilepath)
Пример #7
0
	def __init__(self, atlasobj, volumename, img, outfolder, windowLength = 100, stepsize = 3):
		"""
		volumename = '3mm' is the name of the atlas volume
		img is the nii file loaded using load_nii function
		"""
		self.img = img
		self.atlasobj = atlasobj
		self.atlasimg = load_nii(atlasobj.get_volume(volumename)['niifile'])
		self.outfolder = outfolder
		self.stepsize = stepsize
		self.windowLength = windowLength
def func(args):
    subject = args[0]
    atlasname = args[1]
    windowLength = args[2]
    stepsize = args[3]
    volumename = '3mm'
    atlasobj = atlas.get(atlasname)
    work_path = 'D:/Research/xuquan_FMRI/Dynamic_tfMRI_work/'
    outfolder = os.path.join(work_path, subject, atlasname, 'bold_net',
                             'dynamic_%d_%d' % (stepsize, windowLength))
    img = load_nii(os.path.join(work_path, subject, 'pBOLD.nii'))
    os.makedirs(outfolder, exist_ok=True)
    c = CalcDynamic(atlasobj, volumename, img, outfolder, windowLength,
                    stepsize)
    c.run()
Пример #9
0
 def __init__(self, atlasobj, volumename, img, outfolder):
     self.img = img
     self.atlasobj = atlasobj
     self.atlasimg = load_nii(atlasobj.get_volume(volumename)['niifile'])
     self.outfolder = outfolder
Пример #10
0
    def gen_timeseries(self):
        data = self.img.get_data()
        atdata = self.atlasimg.get_data()
        timepoints = data.shape[3]
        timeseries = np.empty((self.atlasobj.count, timepoints))
        for i, region in enumerate(self.atlasobj.regions):
            regiondots = data[atdata == region, :]
            regionts = np.mean(regiondots, axis=0)
            timeseries[i, :] = regionts
        return timeseries

    def gen_net(self):
        ts = self.gen_timeseries()
        save_csvmat(self.outpath('timeseries.csv'), ts)
        tscorr = np.corrcoef(ts)
        save_csvmat(self.outpath('corrcoef.csv'), tscorr)

    def run(self):
        self.gen_net()


if __name__ == '__main__':
    atlasobj = path.curatlas()
    volumename = '3mm'
    img = load_nii(os.path.join(path.curparent(), 'pBOLD.nii'))
    outfolder = 'bold_net'

    c = Calc(atlasobj, volumename, img, outfolder)
    c.run()
Пример #11
0
        timepoints = data.shape[3]
        timeseries = np.empty((atlasobj.count, timepoints))
        for i, region in enumerate(atlasobj.regions):
            regiondots = data[atdata == region, :]
            regionts = np.mean(regiondots, axis=0)
            timeseries[i, :] = regionts
        return timeseries

    def gen_net(self):
        ts = self.gen_timeseries()
        save_csvmat(self.outpath('timeseries.csv'), ts)
        tscorr = np.corrcoef(ts)
        save_csvmat(self.outpath('corrcoef.csv'), tscorr)

    def run(self):
        self.gen_net()


if __name__ == '__main__':
    atlasobj = atlas.get('bnatlas')
    volumename = '3mm'
    for subject in sorted(os.listdir(mmdps_locale.ChanggungAllFullPath)):
        print('building subject %s' % subject)
        outfolder = os.path.join(mmdps_locale.ChanggungAllFullPath, subject,
                                 'bold_net', 'bnatlas_3')
        os.makedirs(outfolder, exist_ok=True)
        img = load_nii(
            os.path.join(mmdps_locale.ChanggungAllFullPath, subject,
                         'Filtered_4DVolume.nii'))
        c = Calc(atlasobj, volumename, img, outfolder)
        c.run()
Пример #12
0
import os
import t1_niicalc as niicalc
from mmdps.proc import atlas
from mmdps.util.loadsave import load_nii, save_csvmat

if __name__ == '__main__':
    img = load_nii('../grey.hdr')
    curatlas = atlas.getbywd()
    atlasimg = load_nii(curatlas.get_volume('1mm')['niifile'])
    res = niicalc.calc_region_mean(img, curatlas, atlasimg)
    save_csvmat(os.path.join('t1mean', 'greyvolume.csv'), res)
Пример #13
0
 def get_data(self, resolution=1):
     return loadsave.load_nii(
         os.path.join(rootconfig.path.atlas, self.name,
                      '%s_%d.nii' % (self.name, resolution))).get_data()
Пример #14
0
		for i, region in enumerate(atlasobj.regions):
			regiondots = data[atdata==region, :]
			regionts = np.mean(regiondots, axis=0)
			timeseries[i, :] = regionts
		return timeseries

	def gen_net(self):
		ts = self.gen_timeseries()
		save_csvmat(self.outpath('timeseries.csv'), ts)
		timepoints = ts.shape[1] # number of total timepoints
		start = 0
		while start + self.windowLength < timepoints:
			tscorr = np.corrcoef(ts[:, start:start + self.windowLength])
			save_csvmat(self.outpath('corrcoef-%d.%d.csv' % (start, start + self.windowLength)), tscorr)
			start += self.stepsize

	def run(self):
		self.gen_net()

if __name__ == '__main__':
	atlasList = ['brodmann_lr', 'brodmann_lrce', 'aicha', 'bnatlas']
	volumename = '3mm'
	for subject in sorted(os.listdir(mmdps_locale.ChanggungAllFullPath)):
		print('building subject %s' % subject)
		img = load_nii(os.path.join(mmdps_locale.ChanggungAllFullPath, subject, 'pBOLD.nii'))
		for atlasname in atlasList:
			atlasobj = atlas.get(atlasname)
			outfolder = os.path.join(mmdps_locale.ChanggungAllFullPath, subject, atlasobj.name, 'bold_net')
			os.makedirs(outfolder, exist_ok = True)
			c = CalcDynamic(atlasobj, volumename, img, outfolder)
			c.run()