dlh=dlh,volume=volume, output_directory=output_folder, output_prefix=output_prefix) # Now we will count the number of voxels and compare the two methods grf_files = glob("%s/*.nii.gz" %output_folder) grf_files.sort() input_files.sort() voxel_counts = pandas.DataFrame(columns=["rft","thresh_0.0","thresh_1.0","thresh_2.0"]) brain_mask = nibabel.load(mask) brain_voxels = len(brain_mask.get_data()[brain_mask.get_data()!=0]) for f in range(0,len(grf_files)): f1 = IT.t_to_z(nibabel.load(input_files[f]),46) f2 = nibabel.load(grf_files[f]) print "Comparing %s vs %s" %(os.path.basename(grf_files[f]),os.path.basename(input_files[f])) mrthresh = IT.threshold_abs(f1,thresholds=[0.0,1.0,2.0]) masked_mrthresh = [(thresh,apply_mask([nii],brain_mask)) for thresh,nii in mrthresh.iteritems()] # Count voxels in each image_name = os.path.basename(input_files[f]) voxel_counts.loc[image_name] = (len(f2.get_data()[f2.get_data()!=0]), len(masked_mrthresh[0][1][0][masked_mrthresh[0][1][0]!=0]), len(masked_mrthresh[1][1][0][masked_mrthresh[1][1][0]!=0]), len(masked_mrthresh[2][1][0][masked_mrthresh[2][1][0]!=0])) voxel_counts["absolute_difference_0.0"] = voxel_counts["thresh_0.0"] - voxel_counts["rft"] voxel_counts["absolute_difference_1.0"] = voxel_counts["thresh_1.0"] - voxel_counts["rft"] voxel_counts["absolute_difference_2.0"] = voxel_counts["thresh_2.0"] - voxel_counts["rft"] voxel_counts["perc_brainvox_0.0"] = voxel_counts["thresh_0.0"] / brain_voxels
# standard brain mask that will be used for "brain mask" and to eliminate out of brain voxels for all masks brain_mask = nib.load(standard) # Read in main image mrA = nib.load(groupA) input_directory = os.path.dirname(groupA) contrast_task = os.path.basename(groupA).replace("_groupA_tstat1.nii.gz","") # Get degrees of freedom (it's 46) try: dofA = len(open("%s/../copesA.txt" %(input_directory),"r").readlines())-2 except: dofA = 44 # Convert to Z score maps mrA = IT.t_to_z(mrA,dofA) # 3/12/2015: confirmed that thresholding at 0.0 is equivalent to original image # Complete case analysis, single value imputation, multiple-imputation cca_pearson = [] svi_pearson = [] cca_spearman = [] svi_spearman = [] # Edge cases: # No surviving voxels: we append nan # Thresholded image is 0: all correlations nan # Fewer than 3 remaining voxels to compare: we append nan # Suggested by Russ 3/13/2015, and I agree
outdir = "../img" # These maps are not provided input_maps = glob("../../data/results/0/*groupA_tstat1.nii.gz") os.chdir("../preprocessing/") import image_transformations as IT # Load in dataframe to look up image and contrast names lookup = pandas.read_csv("../doc/hcp_contrasts_id.tsv", sep="\t") # Get max and min values max = 0 min = 0 for input_map in input_maps: img = nibabel.load(input_map) img = IT.t_to_z(img, 46).get_data() if img.max() > max: max = img.max() if img.min() < min: min = img.min() for i in range(0, len(input_maps)): print "Processing %s of %s" % (i, len(input_maps)) input_map = input_maps[i] mapname = os.path.basename(input_map).replace("_groupA_tstat1.nii.gz", "") task = lookup.task[lookup.id == mapname].tolist()[0] contrast = lookup.contrasts[lookup.id == mapname].tolist()[0] title = "%s_%s" % (task, contrast) image = nibabel.load(input_map) Z = IT.t_to_z(image, 46)