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