Commit 221ddd6d authored by Andrei Roibu's avatar Andrei Roibu
Browse files

new function for calculating the mean across subjects

parent 5931e6e6
"""Group Mean Calculator
This file contains the relevant scripts for calculating the group mean for the subjects present in the UK Biobank.
This is a standalone scrip, intended to be used only once during the project. Hence, it is not integrated into the larger utils packages.
To use content from this folder, import the functions and instantiate them as you wish to use them:
from utils.group_mean import function_name
import os
import numpy as np
from import Image
from fsl.utils.image.resample import resampleToPixdims
from utils.data_utils import directory_reader
def mean_calculator(data_directory, mean_type='dMRI'):
""" Population mean calculator
This function calculates the mean across all subjects for a given data type.
data_directory (str): A string containing the address of the required directory.
mean_type (str): String flag indicating which data type the algorithm should compute the mean for.
subDirectoryList, number_of_subjects = directory_reader(os.path.join(os.path.expanduser("~"), data_directory))
subject_number = len(os.listdir(os.path.join(os.path.expanduser("~"), data_directory)))
volume_sum = None
counter = None
header = None
for directory in subDirectoryList:
if mean_type == 'dMRI':
data_path = "dMRI/autoptx_preproc/tractsNormSummed.nii.gz"
elif mean_type == 'fMRI':
data_path = "fMRI/rfMRI_25.dr/dr_stage2.nii.gz"
raise ValueError('mean_type can be either dMRI or fMRI!')
subject_path = os.path.join(os.path.expanduser("~"), data_directory, directory, data_path)
if mean_type == 'dMRI':
volume = Image(subject_path).data
volume = Image(subject_path).data[:,:,:,0]
if volume_sum is None:
volume_sum = np.zeros(volume.shape)
if counter is None:
counter = 0
if header is None:
header = Image(subject_path).header
volume_sum = np.add(volume_sum, volume)
counter += 1
print("Added volume {}/{}, --{}%".format(counter, subject_number, counter/subject_number*100))
volume_mean = np.divide(volume_sum, counter)
volume_mean_image = Image(volume_mean, header=header)
if mean_type == 'dMRI':'utils/mean_tractsNormSummed.nii.gz')
volume_mean_donwsampled, xform = resampleToPixdims(Image('utils/mean_tractsNormSummed.nii.gz'), (2,2,2))
header_downsampled = Image(volume_mean_donwsampled, header=Image('utils/mean_tractsNormSummed.nii.gz').header, xform=xform).header
volume_mean_downsampled_image = Image(volume_mean_donwsampled, header=header_downsampled)'utils/mean_tractsNormSummed_downsampled.nii.gz')
if __name__ == '__main__':
data_directory = "/well/win-biobank/projects/imaging/data/data3/subjectsAll/"
mean_type = 'dMRI'
# mean_type = 'fMRI'
mean_calculator(data_directory, mean_type)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment