Quantitative T1 Sampling - katielavigne/documentation GitHub Wiki
We can compute quantitative T1 (qT1) values for MAGeT labels or CIVET surfaces by sampling the qT1 images. See Surface Sampling Using CIVET Surfaces from the CobraLab. Below are instructions for doing this with MAGeT labels and CIVET surfaces on the Douglas Neuroinformatics Platform.
MAGeT labels
Modify the following script, save as maget_qT1.sh, and make executable with chmod +x maget_qT1.sh:
#!/bin/bash
# qT1 surface sampling using CIVET Surfaces: https://github.com/CobraLab/documentation/wiki/Surface-Sampling-Using-CIVET-surfaces
t2dir="/data/lepage/LAM/data/processed/t2-corrected"
magetdir="/data/lepage/LAM/data/processed/maget/march2021/output"
qT1dir="/data/lepage/LAM/data/output/minc/mp2rage"
mincdir="/data/lepage/LAM/data/raw/minc"
for file in ${qT1dir}/*.mnc; do
# get subjID
subj=${file##*/}
subj=${subj:4:6}
# define files
t2=${t2dir}/LAM_${subj}_T2_corrected.mnc
t1like=${mincdir}/${subj:0:4}/Scan${subj: -1}/${subj}*INV2*.mnc
if [ $(ls -1q ${t1like} | wc -l) -ne 1 ]; then
t1like=${mincdir}/${subj:0:4}/Scan${subj: -1}/${subj}*INV2*ND*.mnc
if [ $(ls -1q ${t1like} | wc -l) -ne 1 ]; then
echo "${subj} missing or multiple INV2s" >> SKIPPED.txt
continue
fi
fi
t1map=${file}
labels=${magetdir}/fusion/majority_vote/*${subj}*.mnc
if [ $(ls -1q ${labels} | wc -l) -ne 1 ]; then
echo "${subj} missing maget labels" >> SKIPPED.txt
continue
fi
# run sampling
mkdir -p ${subj}
# align T2 to T1-like (inv2)
echo bestlinreg_g -nmi -lsq12 -close ${t2} ${t1like} ${subj}/${subj}_transform_t2_to_inv2.xfm >> alignjob.txt
# apply inv2 transform to labels
echo mincresample -labels ${labels} -tfm_input_sampling -transformation ${subj}/${subj}_transform_t2_to_inv2.xfm ${subj}/${subj}_labels_resampled_inv2.mnc >> resample_inv2job.txt
# sample qT1
echo mincresample -clobber -nearest -unsigned -byte -keep_real_range -like ${t1map} ${subj}/${subj}_labels_resampled_inv2.mnc ${subj}/${subj}_labels_resampled_qT1.mnc >> resample_qT1job.txt
# output qT1 values
i='1 2 4 5 6 11 12 22 33 35 37 101 102 104 105 106 111 222'
for i in $i; do
echo "mincstats -mask ${subj}/${subj}_labels_resampled_qT1.mnc -mask_binvalue $i ${t1map} -mean -quiet >> ${subj}/${subj}_qT1values.txt" >> mincstats_job.txt
done
done
Run with ./maget_qt1.sh. This script will create *job.txt files that can be run on the DNP. Run each step separately (allowing previous step to finish) as follows:
module load minc-toolkit/1.9.17 qbatch
qbatch -N qT1_align -w 00:05:00 alignjob.txt
qbatch -N qT1_resample_inv2 -w 00:01:00 resample_inv2job.txt
qbatch -N qT1_resample_qT1 -w 00:01:00 resample_qT1job.txt
qbatch -N qT1_values -c 18 -w 00:01:00 mincstats_job.txt
MAGeT qT1 values will be saved for each subject, which can then be read in Matlab/Python, similar to CIVET thickness files.
CIVET surfaces
Modify the following script, save as civet_qT1.sh, and make executable with chmod +x civet_qT1.sh:
#!/bin/bash
#qT1 surface sampling using CIVET Surfaces: https://github.com/CobraLab/documentation/wiki/Surface-Sampling-Using-CIVET-surfaces
# Uncomment and comment loop sections to run missing or duplicate subjects after fixing issues.
civdir="/data/lepage/LAM/data/processed/civet/2.1.0/batch3/output"
qT1dir="/data/lepage/LAM/data/output/minc/mp2rage"
for dir in ${civdir}/LAM*; do
subj=${dir##*/}
if [ -f ${qT1dir}/${subj}_T1map.mnc ]; then
if [ ! -d ${subj} ]; then
mkdir -p ${subj}
# Align T1 to qT1
echo bestlinreg_g -nmi -lsq6 -close ${civdir}/${subj}/native/${subj}_t1.mnc ${qT1dir}/${subj}_T1map.mnc ${subj}/transform_t1_to_otherscan.xfm >> alignjob.txt
# Get inverse of CIVET linear transform
echo xfminvert ${civdir}/${subj}/transforms/linear/${subj}_t1_tal.xfm ${subj}/${subj}_t1_tal_invert.xfm >> invertjob.txt
# Combine transforms
echo xfmconcat ${subj}/${subj}_t1_tal_invert.xfm ${subj}/transform_t1_to_otherscan.xfm ${subj}/${subj}_combined.xfm >> concatjob.txt
# Apply transforms to CIVET mid surface (left and right)
echo transform_objects ${civdir}/${subj}/surfaces/${subj}_mid_surface_left_81920.obj ${subj}/${subj}_combined.xfm ${subj}/${subj}_transformed_left.obj >> transformjob.txt
echo transform_objects ${civdir}/${subj}/surfaces/${subj}_mid_surface_right_81920.obj ${subj}/${subj}_combined.xfm ${subj}/${subj}_transformed_right.obj >> transformjob.txt
# Evaluate scan values on mid surface
echo volume_object_evaluate ${qT1dir}/${subj}_T1map.mnc ${subj}/${subj}_transformed_left.obj ${subj}/${subj}_sampled_values_left.txt >> evaljob.txt
echo volume_object_evaluate ${qT1dir}/${subj}_T1map.mnc ${subj}/${subj}_transformed_right.obj ${subj}/${subj}_sampled_values_right.txt >> evaljob.txt
else
echo ${subj} >> duplicate_subjects.txt
fi
else
echo ${subj} >> missing_subjects.txt
fi
done
Run with ./civet_qt1.sh. This script will create *job.txt files that can be run on the DNP. Run each step separately (allowing previous step to finish) as follows:
module load minc-toolkit/1.9.17 qbatch
qbatch -N qT1_align -w 00:05:00 alignjob.txt
qbatch -N qT1_invert -w 00:01:00 invertjob.txt
qbatch -N qT1_concat -w 00:01:00 concatjob.txt
qbatch -N qT1_transform -w 00:01:00 transformjob.txt
qbatch -N qT1_eval -w 00:01:00 evaljob.txt