-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPipeline_infants_NocovReg.m
More file actions
143 lines (129 loc) · 7.19 KB
/
Pipeline_infants_NocovReg.m
File metadata and controls
143 lines (129 loc) · 7.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
function rMatrix = Pipeline_Huiqing_NocovReg(SubjectID,SessionID)
fmri_root='/export/bedny/Projects/dHCP_3rel/rel3_dhcp_fmri_pipeline';
ROI_root='/export/bedny/Projects/dHCP_3rel/ROIs';
fmri_dir=[fmri_root,filesep,SubjectID,filesep,SessionID,filesep,'func'];
ROI_dir=[ROI_root,filesep,'ROI_individual_nooverlap'];
file_motion_regressor=[fmri_dir,filesep,'confound.txt'];
file_fMRI=[fmri_dir,filesep,SubjectID,'_',SessionID,'_task-rest_desc-preproc_bold.nii.gz'];
MaskData = [fmri_dir,filesep,SubjectID,'_',SessionID,'_task-rest_desc-brain_mask.nii.gz'];
ROIs={'A1','math_frontal','lang_frontal','gngc_frontal','SMC','math_occ','gngc_occ','lang_occ','V1'};
hemi={'lh','rh'};
ROIDef=cell(1,size(ROIs,2)*2);
% for iROI=1:size(ROIs,2)
% for iHemi=1:2
% %--copy ROI to fMRI folder
% file_ROI_orig=[ROI_dir,filesep,ROIs{1,iROI},'_',SubjectID,'_',SessionID,'.',hemi{iHemi},'.nii.gz'];
% file_ROI_dest=[fmri_dir,filesep,ROIs{1,iROI},'_',SubjectID,'_',SessionID,'.',hemi{iHemi},'.nii.gz'];
% copyfile(file_ROI_orig,file_ROI_dest);
% %--reslicing
% file_ROI_reslice = [fmri_dir,filesep,'r_',ROIs{1,iROI},'_',SubjectID,'_',SessionID,'.',hemi{iHemi},'.nii'];
% y_Reslice(file_ROI_dest,file_ROI_reslice,'',0, MaskData);
% ROIDef{1,(iROI-1)*2+iHemi}=file_ROI_reslice;
% end
% end
%===============use ROI files in the ROI folder
for iROI=1:size(ROIs,2)
for iHemi=1:2
file_ROI_orig=[ROI_dir,filesep,ROIs{1,iROI},'_',SubjectID,'_',SessionID,'.',hemi{iHemi},'.nii.gz'];
ROIDef{1,(iROI-1)*2+iHemi}=file_ROI_orig;
end
end
%-----------------
OutputName=[fmri_dir,filesep,'ROI_signal'];
%===========Regress covariates=================
%--Regress covariates
% mask_dir = '/export/bedny/Projects/dHCP_3rel/MASK_func';
% %mask_file_WM = [SubjectID,'_',SessionID,'-WM.nii.gz'];
% mask_file_CSF = [SubjectID,'_',SessionID,'-CSF_func.nii.gz'];
%
% DataDir = [fmri_dir,filesep,'tmp_DPABI'];
% if ~isdir(DataDir)
% mkdir(DataDir)
% end
% copyfile(file_fMRI,DataDir);
% CovMask_list = {mask_file_CSF};
% % CovMask_list = {mask_file_CSF,mask_file_WM};
% Postfix='_Covremoved';
% MaskFilename = MaskData;
% ImgCovModel = 1;
% for iCovMask = 1:size(CovMask_list,2)
% file_CovMask_orig=[mask_dir,filesep,CovMask_list{1,iCovMask}];
% file_CovMask_dest=[fmri_dir,filesep,CovMask_list{1,iCovMask}];
% copyfile(file_CovMask_orig,file_CovMask_dest);
% %--reslicing
% file_CovMask_reslice = [fmri_dir,filesep,'r_',CovMask_list{1,iCovMask}];
% y_Reslice(file_CovMask_dest,file_CovMask_reslice,'',0, MaskData);
% CovariablesDef.CovMask{1,iCovMask}=file_CovMask_reslice(1:end-3);
% end
% y_RegressOutImgCovariates(DataDir,CovariablesDef,Postfix,MaskFilename,ImgCovModel);
% file_fMRI_Covremoved = [fmri_dir,filesep,'tmp_DPABI_Covremoved',filesep,'CovRegressed_4DVolume.nii'];
%===========QC with motion outlier==============
%--read motion regressor
%file_motion_regressor='confound.txt'; %confound.txt should be generated by fsl
motion_regressor=dlmread(file_motion_regressor);
%--generate temporal mask '1' to keep and '0' to remove
outlier_mask = sum(motion_regressor,2);
temporal_mask = ~outlier_mask;
%--total number of outliers in sliding windows (continuous set) of 1600 volumne
total_length = 2300;
window_length = 1600;
number_window = total_length - window_length + 1;
vector_outlier_number = zeros(1,number_window);
for i_window = 1:number_window
vector_outlier_number(1,i_window) = sum(outlier_mask(i_window:i_window + window_length - 1,1));
end
%--sliding window with minimum number of motion-outliers
[minimum_outlier,window_minimum_outlier] = min(vector_outlier_number);
continuous_set_mask = zeros(2300,1);
continuous_set_mask(window_minimum_outlier:window_minimum_outlier + window_length - 1) = 1;
%--QC
if minimum_outlier > 160 % not pass QC
%%%%%%% Do Something %%%%%
rMatrix = [];
disp([SubjectID, ':Not pass QC!']);
return % end the procedure
end
%============= Processing the fMRI==============
DataDir = [fmri_dir,filesep,'tmp_DPABI'];
if ~isdir(DataDir)
mkdir(DataDir)
end
file_fMRI=[fmri_dir,filesep,SubjectID,'_',SessionID,'_task-rest_desc-preproc_bold.nii.gz'];
file_fMRIcopy = [DataDir,filesep,SubjectID,'_',SessionID,'_task-rest_desc-preproc_bold.nii.gz'];
copyfile(file_fMRI,file_fMRIcopy);
gunzip(file_fMRIcopy,DataDir);
file_fMRIcopy = [DataDir,filesep,SubjectID,'_',SessionID,'_task-rest_desc-preproc_bold.nii'];
%file_fMRI = '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_bold.nii';
[Data, VoxelSize, FileList, Header] = y_ReadAll(file_fMRIcopy);
%[Data, VoxelSize, FileList, Header] = y_ReadAll(file_fMRI_Covremoved);
%file_fMRI = '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_bold.nii';
%[Data, VoxelSize, FileList, Header] = y_ReadAll(file_fMRI);
%[Data, VoxelSize, FileList, Header] = y_ReadAll(file_fMRI_Covremoved);
Data_continuous_set = Data(:,:,:,logical(continuous_set_mask));
AllVolume = Data_continuous_set;
% OutputName = 'test.nii';
% MaskData = '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_space-bold_brainmask.nii';
% TemporalMask = logical(temporal_mask(logical(continuous_set_mask)));
% ScrubbingMethod='cut';
% ScrubbingTiming = 'AfterFiltering';
% IsNeedDetrend = 0;
% Band = [0,0.08];
% TR = 0.392;
%
% [AllVolumeBrain, Header_Out] = y_Scrubbing(AllVolume, OutputName, MaskData, TemporalMask, ScrubbingMethod, ScrubbingTiming, IsNeedDetrend, Band, TR, Header);
%y_Reslice('A1_sub-CC00109XX10_ses-36901.lh.nii','r_A1_sub-CC00109XX10_ses-36901.lh.nii','',0, '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_space-bold_brainmask.nii');
%y_Reslice('gngcFrontal_sub-CC00109XX10_ses-36901.lh.nii','r_gngcFrontal_sub-CC00109XX10_ses-36901.lh.nii','',0, '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_space-bold_brainmask.nii');
%ROIDef={'r_A1_sub-CC00109XX10_ses-36901.lh.nii','r_gngcFrontal_sub-CC00109XX10_ses-36901.lh.nii'};
%OutputName='test_ROI_signal';
%MaskData = '/export/bedny/Projects/dHCP/sub_passed_QC_allROI/Scrubbing/sub-CC00109XX10_ses-36901_task-rest_desc-preproc_space-bold_brainmask.nii';
IsMultipleLabel=0;
IsNeedDetrend=1;
Band = [0,0.08];
TR = 0.392;
TemporalMask = logical(temporal_mask(logical(continuous_set_mask)));
ScrubbingMethod='cut';
ScrubbingTiming = 'AfterFiltering';
CUTNUMBER=10;
[ROISignals] = y_ExtractROISignal(AllVolume, ROIDef, OutputName, MaskData, IsMultipleLabel, IsNeedDetrend, Band, TR, TemporalMask, ScrubbingMethod, ScrubbingTiming, Header,CUTNUMBER);
rMatrix=corr(ROISignals);
end