Example #1
0
	def test_rotate(self):
		# image rotated 9 degrees in first axis
		input_img = nbload(os.path.join(test_data_directory, 'img_rot.nii'))
		base_img = nbload(os.path.join(test_data_directory, 'img.nii'))

		registered_img, xfm_pred = transform(input_img, base_img, output_transform=True)
		xfm_true = np.linalg.inv(load_afni_xfm(os.path.join(test_data_directory, 'rotmat.aff12.1D')))

		self.assertTrue(np.allclose(xfm_true, xfm_pred, rtol=0.01, atol=0.01))
Example #2
0
	def test_motion_correct(self):
		reference_path = os.path.join(test_data_directory, 'img.nii')
		reference_img = nbload(reference_path)

		input_img = nbload(os.path.join(test_data_directory, 'img_rot.nii'))
		mc = MotionCorrect()
		mc.load_reference(reference_path)
		registered_img = mc.run(input_img)
		self.assertTrue(np.corrcoef(reference_img.get_data().flatten(), 
			registered_img.get_data().flatten())[0,1]>0.99)
Example #3
0
	def test_motion_correct_shift(self):
		input_img = nbload(os.path.join(test_data_directory, 'img.nii'))
		# base image is identical
		base_img = nbload(os.path.join(test_data_directory, 'img.nii'))
		base_affine = base_img.affine[:]
		base_affine[0,3] += 10
		
		output_img = transform(input_img, Nifti1Image(base_img.get_data(), base_affine))
		
		self.assertTrue(np.allclose(input_img.get_data(), output_img.get_data()))
Example #4
0
	def __init__(self, subject, model_name=None, **kwargs):
		'''
		This should set up the class instance to be ready to take an image input
		and output the detrended gray matter activation

		To do this, it needs:
			wm_mask_funcref: white matter masks in functional reference space
			gm_mask_funcref: gray matter masks in functional reference space
			funcref_nifti1: the functional reference image
			input_affine: affine transform for the input images
				since we'll be dealing with raw pixel data, we need to
				have a predetermined image orientation
		'''
		self.subj_dir = get_subject_directory(subject)
		self.subject = subject

		self.funcref_nifti1 = nbload(os.path.join(self.subj_dir, 'funcref.nii'))

		try:
			model_path = os.path.join(self.subj_dir, 'model-%s.pkl'%model_name)
			pca_path = os.path.join(self.subj_dir, 'pca-%s.pkl'%model_name)

			with open(model_path, 'r') as f:
				model = cPickle.load(f)
			self.model = model

			with open(pca_path, 'r') as f:
				pca = cPickle.load(f)
			self.pca = pca
		except IOError:
			warnings.warn('''Could not load...\n\tModel from %s\nand\n\tPCA from %s. Load them manually before running.''' % (model_path, pca_path))
Example #5
0
	def __init__(self, subject, xfm_name, pre_mask_name, roi_names, **kwargs):
		'''
		Extract activity from an ROI
		Input
		--------
		subject (str) subject ID
		xfm_name (str) pycortex transform ID
		pre_mask_name (str) ROI masks returned by pycortex are in volume space, but activity is provided as a vector of gray matter activity. pre_mask_name is the name of the mask that was applied to the raw image volume to produce the gray matter activity vector.
		roi_names (list of str) names of the ROIs to extract

		Returns
		--------
		roi_activities (list of float) mean activity in the requested ROIs
		'''
		subj_dir = get_subject_directory(subject)
		pre_mask_path = os.path.join(subj_dir, pre_mask_name+'.nii')
		
		# mask in zyx
		pre_mask = nbload(pre_mask_path).get_data().T.astype(bool)

		# returns masks in zyx
		roi_masks, roi_dict = cortex.get_roi_masks(subject, xfm_name, roi_names)

		self.masks = dict()
		for name, mask_value in roi_dict.iteritems():
			roi_mask = roi_masks==mask_value
			self.masks[name] = secondary_mask(pre_mask, roi_mask)
Example #6
0
	def __init__(self, subject=None, reference_name='funcref.nii', **kwargs):
		if not subject is None:
			funcref_path = os.path.join(get_subject_directory(subject), reference_name)
			funcref = nbload(funcref_path)
			self.affine = funcref.affine[:]
		else:
			warnings.warn('No subject provided. Set affine attribute manually before calling run.')
Example #7
0
	def __init__(self, subject, mask1_name, mask2_name, **kwargs):
		'''
		Input:
		-----
		mask1_path: path to a boolean mask in xyz format
		mask2_path: path to a boolean mask in xyz format
	
		Initialization will generate a boolean vector that selects elements 
		from the vector output of mask1 applied to a volume that are also in
		mask2.
		'''
		subj_dir = get_subject_directory(subject)
		mask1_path = os.path.join(subj_dir, mask1_name+'.nii')
		mask2_path = os.path.join(subj_dir, mask2_name+'.nii')

		mask1 = nbload(mask1_path).get_data().astype(bool) # in xyz
		mask2 = nbload(mask2_path).get_data().astype(bool) # in xyz		
		self.mask = secondary_mask(mask1, mask2, order='F')
Example #8
0
	def test_raw_to_nifti(self):
		with open(os.path.join(test_data_directory, 'img_rot.PixelData'), 'r') as f:
			raw_image_binary = f.read()

		raw_to_nifti = RawToNifti()
		funcref_path = os.path.join(test_data_directory, 'img_rot.nii')
		raw_to_nifti.affine = nbload(funcref_path).affine
		volume = raw_to_nifti.run(raw_image_binary)
		self.assertTrue(isinstance(volume, Nifti1Image))
Example #9
0
	def test_transform_identity(self):
		# load test image
		input_img = nbload(os.path.join(test_data_directory, 'img.nii'))
		# base image is identical
		base_path = os.path.join(test_data_directory, 'img.nii')

		output_img = transform(input_img, base_path)
		
		self.assertTrue(np.allclose(input_img.get_data(), output_img.get_data()))
		self.assertTrue(isinstance(output_img, Nifti1Image))
Example #10
0
	def test_get_activity_in_mask(self):

		input_fpath = os.path.join(test_data_directory, 'img_rot.PixelData')
		with open(input_fpath, 'r') as f:
			raw_image_binary = f.read()

		ref_img = nbload(os.path.join(test_data_directory, 'img.nii'))

		wm_mask = nbload(os.path.join(test_data_directory, 'wm_mask.nii'))
		gm_mask = nbload(os.path.join(test_data_directory, 'gm_mask.nii'))

		wm = WMDetrend()
		raw_to_volume = RawToVolume()

		wm.funcref_nifti1 = ref_img
		wm.masks = { 'wm': wm_mask.get_data().astype(bool),
				         'gm': gm_mask.get_data().astype(bool)
				       }

		d = raw_to_volume.run(raw_image_binary)
		mask_activity = wm.get_activity_in_masks(d['raw_image_volume'])

		ref_wm = ref_img.get_data().T[wm.masks['wm'].T]
		self.assertTrue(np.corrcoef(mask_activity['wm'], ref_wm)[0,1]>0.99)
Example #11
0
	def load_mask(self, mask_path):
			mask_nifti1 = nbload(mask_path)
			self.mask_affine = mask_nifti1.affine
			self.mask = mask_nifti1.get_data().astype(bool)
Example #12
0
	def load_reference(self, reference_path):
		self.reference_path = reference_path
		self.reference_affine = nbload(self.reference_path).affine
Example #13
0
def transform(inp, base, output_transform=False):
	if type(base)==str:
		base_path = base
	else:
		base_path = str(uuid4())+'.nii'
		nbsave(base, base_path)

	if type(inp)==str:
		inp_path = inp
	else:	
		inp_path = str(uuid4())+'.nii'
		nbsave(inp, inp_path)

	out_path = str(uuid4())+'.nii'
	params = [
		{
			'name': 'input file path',
			'position': 'last',
			'value': inp_path
		},
		{
			'name': 'reference path',
			'flag': 'base',
			'value': base_path
		},
		{
			'name': 'output file path',
			'flag': 'prefix',
			'value': out_path
		}
	]
	
	if output_transform:
		transform_path = str(uuid4())+'.aff12.1D'
		params.append({
			'name': 'transform path',
			'flag': '1Dmatrix_save',
			'value': transform_path
		})

	cmd = generate_command('3dvolreg', params)

	devnull = open(os.devnull, 'w')
	ret = call(cmd, stdout=devnull, stderr=STDOUT, close_fds=True)
	if ret>0:
		print ' '.join(cmd)

	out_img = nbload(out_path)
	out_img.get_data()

	os.remove(out_path)
	if inp is not inp_path:
		os.remove(inp_path)
	if base is not base_path:
		os.remove(base_path)

	if output_transform:
		xfm = load_afni_xfm(transform_path)
		os.remove(transform_path)
		return out_img, xfm	
		
	else:
		return out_img