Skip to content

Commit

Permalink
Added FileMapper as a stage in the pipeline. (#20)
Browse files Browse the repository at this point in the history
* Stage needs entry in table.

* Files needed to run filemapper for the infant pipeline.

* Tell the pipeline how to find the FileMapper files.

* Match filename to the file's name.

* Left out space between args.

* The pipeline uses the path to files; wrapper must 'find' root.

* Use env var to find filemapper script.

* Jsons need executable?

* Fix applicaton name.

* Correct the name of the script.

* Seem to have lost a bunch of my script.

* Seem to have lost a bunch of my script.

* Have tested and merged internal tools; can used tagged version now.
  • Loading branch information
kathy-snider committed Apr 16, 2021
1 parent bead30d commit 82b9853
Show file tree
Hide file tree
Showing 7 changed files with 224 additions and 8 deletions.
149 changes: 149 additions & 0 deletions BIDS_filemapper_wrapper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
#! /bin/bash

# The file mapper uses a 'template' json file and replaces {SUBJECT}, {SESSION}, and
# {PIPELINE} strings with the subject number, session number, and pipeline name provided
# to it. However, it does not handle task-specific files (esp. motion regressors). This
# wrapper looks for task-specific files for each of the tasks it finds in the pipeline's
# output. It copies the task files to the appropriate locations/names and then calls
# file_mapper_script.py to copy the non-task files.
#

# Required
SUB=$1 # subject number - no 'sub-'.
SES=$2 # session number - no 'ses-'.
FILES=$3 # path to subject/session/files.
TEMPLATE_JSON=$4 # json file to use as a template.
shift 4

PIPE=infant-abcd-bids-pipeline

if [ -z "${SUB}" ] || [ -z "${SES}" ] || [ -z "${FILES}" ] || [ -z "${TEMPLATE_JSON}" ] ; then
echo "usage: $0 subject-id session-id path-to-processed-data path-to-template-json "
exit 1
fi

# Set up strings to use for subject, session, paths etc.
session_dir=$( dirname ${FILES} )
session=$( basename ${session_dir} )
subject_dir=$( dirname ${session_dir} )
subject=$(basename ${subject_dir} )
if [[ "${session}" == "ses-${SES}" ]] && [[ "${subject}" == "sub-${SUB}" ]] ; then
ROOT=$( dirname ${subject_dir} )
else
echo There is a problem with the processed data. Expected path to end with sub-${SUB}/ses-${SES}/files.
echo The path provided does not match that pattern. Path is: ${FILES}.
fi

results=${FILES}/MNINonLinear/Results
if ! [ -d ${results} ]; then
echo "ERROR: Filemapper is unable to find directory ${results}. "
exit 1
fi

derivs="${ROOT}/derivatives/${PIPE}/${subject}/${session}"
func="${derivs}/func"
mkdir -p ${func}


####### START PROCESSING #############
# Handle special cases.
#
# Each subject/session can have a different set of tasks and different numbers
# of runs of each.
#
# Furthermore, we may or may not have filtered files.
#
# These special cases cannot be handled with the json, because we would need
# to put in source and destination files for every possible combination.

shopt -s nullglob
pushd ${results} > /dev/null

# Each fMRI (task/run combination) has a subdirectory in processed files, in
# MNINonLinear/Results. We can use those subdirectories to get the names of the
# fMRIs.
# If filtering (bandstop) was used, there will be one file of filtered movement
# regressors for each fMRI.
# For example:
# MNINonLinear/Results/ses-1_task-rest_run-02/DCANBOLDProc_v4.0.0/DCANBOLDProc_v4.0.0_bs18.582_25.7263_filtered_Movement_Regressors.txt

filtered=( */DCANBOLDProc_v4.0.0/DCANBOLDProc_v4.0.0*filtered_Movement_Regressors.txt )
num=${#filtered[@]}
if (( num > 0 )) ; then
for filtered_in in ${filtered[@]} ; do
TASK=${filtered_in%%/*} # task name is *top* dirname.
if [[ ${TASK} =~ ses- ]] ; then
bids_prefix=${subject}_${TASK}
elif [[ ${TASK} =~ task- ]] ; then
bids_prefix=${subject}_${session}_${TASK}
else
echo "WARNING: Unable to make a valid bids name from ${TASK}."
bids_prefix=${subject}_${TASK}
fi

# Get the filtered motion file for this task.
filtered_out=${func}/${bids_prefix}_desc-filtered_motion.tsv
tr ' ' '\t' <<< "X Y Z RotX RotY RotZ XDt YDt ZDt RotXDt RotYDt RotZDt" > ${filtered_out}
cat ${filtered_in} | tr ' ' '\t' >> ${filtered_out}
done

# If we are here, then there was at least one filtered file. Therefore, the
# ptseries **are** filtered, even though the names don't reflect that. So,
# while we are in this part of the code, where we know we had at least one
# filtered movement regressors file, make the string to be used in the
# destination ptseries files (below).
ptseries_end="desc-filtered_timeseries.ptseries.nii"
else
# Since there were no filtered movement regressors files, we know that
# filtering was not used. The ptseries files are unfiltered.
ptseries_end="timeseries.ptseries.nii"
fi

# There should always be unfiltered motion regressors. Visit each task directory.
# Get the Atlas time series for each as well.
for TASK in $( ls -1d *task*/ ) ; do
TASK=${TASK%/}
if [[ ${TASK} =~ ses- ]] ; then
bids_prefix=${subject}_${TASK}
elif [[ ${TASK} =~ task- ]] ; then
bids_prefix=${subject}_${session}_${TASK}
else
echo "WARNING: Unable to make a valid bids name from ${TASK}."
bids_prefix=${subject}_${TASK}
fi

unfiltered_in="${TASK}/Movement_Regressors.txt"
unfiltered_out="${func}/${bids_prefix}_motion.tsv"

if [ -e ${unfiltered_in} ] ; then
# To be valid motion.tsv files, the motion regressors are required to have
# column headers and be tab-separated (per BEP012).
tr ' ' '\t' <<< "X Y Z RotX RotY RotZ XDt YDt ZDt RotXDt RotYDt RotZDt" > ${unfiltered_out}
cat ${unfiltered_in} | tr ' ' '\t' >> ${unfiltered_out}
else
echo "ERROR: Filemapper is unable to find file ${unfiltered_in}."
continue
fi

cp ${TASK}/${TASK}_Atlas.dtseries.nii ${func}/${bids_prefix}_bold_timeseries.dtseries.nii
done

popd > /dev/null
shopt -u nullglob


fmscript=${FILEMAPPERDIR}/file_mapper_script.py
CMD="${fmscript} ${TEMPLATE_JSON} -a copy -o -s -sp ${FILES} -dp ${ROOT} -t SUBJECT=${SUB},SESSION=${SES},PIPELINE=${PIPE}"
set -x
eval ${CMD}
set +x

result=$?
if (( 0 == result )) ; then
echo "FileMapper was successful."
else
echo "FileMapper had errors."
exit 1
fi


10 changes: 7 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM dcanlabs/internal-tools:v1.0.1
FROM dcanlabs/internal-tools:v1.0.2

RUN apt-get update && apt-get install -yq --no-install-recommends \
apt-utils \
Expand All @@ -18,8 +18,7 @@ RUN python3 -m pip install -r "/app/requirements.txt"

# insert pipeline code
ADD https://github.com/DCAN-Labs/dcan-infant-pipeline.git version.json
#RUN git clone -b 'v0.0.9' --single-branch --depth 1 https://github.com/DCAN-Labs/dcan-infant-pipeline.git /opt/pipeline
RUN git clone -b 'master' --single-branch --depth 1 https://github.com/DCAN-Labs/dcan-infant-pipeline.git /opt/pipeline
RUN git clone -b 'v0.0.9' --single-branch --depth 1 https://github.com/DCAN-Labs/dcan-infant-pipeline.git /opt/pipeline


# unless otherwise specified...
Expand All @@ -35,6 +34,11 @@ RUN mkdir /bids_input /output /atlases
COPY ["./baby_BIDS_cleaning.json", "/opt/dcan-tools/customclean/"]
COPY ["./baby_BIDS_no_session_cleaning.json", "/opt/dcan-tools/customclean/"]

# Copy file mapper files.
COPY ["./current_infant.json", "/opt/dcan-tools/filemapper/"]
COPY ["./current_infant_no_session.json", "/opt/dcan-tools/filemapper/"]
COPY ["./BIDS_filemapper_wrapper.sh", "/opt/dcan-tools/filemapper/"]

# setup ENTRYPOINT
COPY ["./entrypoint.sh", "/entrypoint.sh"]
COPY ["./SetupEnv.sh", "/SetupEnv.sh"]
Expand Down
1 change: 1 addition & 0 deletions SetupEnv.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export MATLAB_PREFDIR=/opt/mcr
export ABCDTASKPREPDIR=/opt/dcan-tools/ABCD_tfMRI
export CUSTOMCLEANDIR=/opt/dcan-tools/customclean
export CUSTOMCLEAN_JSON=${CUSTOMCLEANDIR}/baby_BIDS_cleaning.json
export FILEMAPPERDIR=/opt/dcan-tools/filemapper


# hacky solution for now...
Expand Down
2 changes: 2 additions & 0 deletions app/pipeline_expected_outputs.json
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@
],
"ExecutiveSummary": [
],
"FileMapper": [
],
"CustomClean": [
"{path}/custom_clean_success_record.txt"
]
Expand Down
10 changes: 5 additions & 5 deletions app/pipelines.py
Original file line number Diff line number Diff line change
Expand Up @@ -1125,12 +1125,12 @@ def args(self):

class FileMapper(Stage):

script = '{FILEMAPPERDIR}/filemapper_wrapper.sh'
script = '{FILEMAPPERDIR}/BIDS_filemapper_wrapper.sh'

spec = ' --output-root={path}' \
' --participant-label={subject}' \
' --session-id={session}' \
' --json={input_json}'
spec = '{subject} ' \
'{session} ' \
'{path} ' \
'{input_json} '

def __init__(self, config, input_json):
super(__class__, self).__init__(config)
Expand Down
30 changes: 30 additions & 0 deletions current_infant.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"DCANBOLDProc_v4.0.0/analyses_v2/motion/ses-{SESSION}_task-rest_run-_power_2014_FD_only.mat": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_motion_mask.mat",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Atlas.dtseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_timeseries.dtseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Gordon.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Gordon2014FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Gordon_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Gordon2014FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_HCP.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-HCP2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_HCP_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-HCP2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Markov.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Markov2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Markov_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Markov2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Power.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Power2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Power_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Power2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Yeo.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Yeo2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/ses-{SESSION}_task-rest_run-_DCANBOLDProc_v4.0.0_Yeo_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_ses-{SESSION}_task-rest_bold_atlas-Yeo2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.curvature.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_space-fsLR32k_curv.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.sulc.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_space-fsLR32k_sulc.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.thickness.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_space-fsLR32k_thickness.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.L.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-L_space-MNI_mesh-fsLR32k_midthickness.surf.gii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.R.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-R_space-MNI_mesh-fsLR32k_midthickness.surf.gii",
"MNINonLinear/{SUBJECT}.L.midthickness.164k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-L_space-MNI_mesh-fsLR164k_midthickness.surf.gii",
"MNINonLinear/{SUBJECT}.R.midthickness.164k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-R_space-MNI_mesh-fsLR164k_midthickness.surf.gii",
"MNINonLinear/Native/{SUBJECT}.L.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-L_space-MNI_mesh-native_midthickness.surf.gii",
"MNINonLinear/Native/{SUBJECT}.R.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-R_space-MNI_mesh-native_midthickness.surf.gii",
"T1w/fsaverage_LR32k/{SUBJECT}.L.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-L_space-T1w_mesh-fsLR32k_midthickness.surf.gii",
"T1w/fsaverage_LR32k/{SUBJECT}.R.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-R_space-T1w_mesh-fsLR32k_midthickness.surf.gii",
"T1w/Native/{SUBJECT}.L.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-L_space-T1w_mesh-native_midthickness.surf.gii",
"T1w/Native/{SUBJECT}.R.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_hemi-R_space-T1w_mesh-native_midthickness.surf.gii",
"T1w/aparc+aseg.nii.gz": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_space-ACPC_dseg.nii.gz",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.MyelinMap.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_atlas-MNI_space-fsLR32k_myelinmap.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.SmoothedMyelinMap.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_ses-{SESSION}_atlas-MNI_space-fsLR32k_desc-smoothed_myelinmap.dscalar.nii"
}
30 changes: 30 additions & 0 deletions current_infant_no_session.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"DCANBOLDProc_v4.0.0/analyses_v2/motion/task-rest_run-_power_2014_FD_only.mat": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_motion_mask.mat",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Atlas.dtseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_timeseries.dtseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Gordon.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Gordon2014FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Gordon_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Gordon2014FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_HCP.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-HCP2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_HCP_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-HCP2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Markov.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Markov2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Markov_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Markov2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Power.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Power2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Power_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Power2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Yeo.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Yeo2016FreeSurfer_timeseries.ptseries.nii",
"MNINonLinear/Results/task-rest_run-_DCANBOLDProc_v4.0.0_Yeo_subcorticals.ptseries.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/func/sub-{SUBJECT}_task-rest_bold_atlas-Yeo2016FreeSurferSubcortical_timeseries.ptseries.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.curvature.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_space-fsLR32k_curv.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.sulc.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_space-fsLR32k_sulc.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.thickness.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_space-fsLR32k_thickness.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.L.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-L_space-MNI_mesh-fsLR32k_midthickness.surf.gii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.R.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-R_space-MNI_mesh-fsLR32k_midthickness.surf.gii",
"MNINonLinear/{SUBJECT}.L.midthickness.164k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-L_space-MNI_mesh-fsLR164k_midthickness.surf.gii",
"MNINonLinear/{SUBJECT}.R.midthickness.164k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-R_space-MNI_mesh-fsLR164k_midthickness.surf.gii",
"MNINonLinear/Native/{SUBJECT}.L.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-L_space-MNI_mesh-native_midthickness.surf.gii",
"MNINonLinear/Native/{SUBJECT}.R.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-R_space-MNI_mesh-native_midthickness.surf.gii",
"T1w/fsaverage_LR32k/{SUBJECT}.L.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-L_space-T1w_mesh-fsLR32k_midthickness.surf.gii",
"T1w/fsaverage_LR32k/{SUBJECT}.R.midthickness.32k_fs_LR.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-R_space-T1w_mesh-fsLR32k_midthickness.surf.gii",
"T1w/Native/{SUBJECT}.L.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-L_space-T1w_mesh-native_midthickness.surf.gii",
"T1w/Native/{SUBJECT}.R.midthickness.native.surf.gii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_hemi-R_space-T1w_mesh-native_midthickness.surf.gii",
"T1w/aparc+aseg.nii.gz": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_space-ACPC_dseg.nii.gz",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.MyelinMap.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_atlas-MNI_space-fsLR32k_myelinmap.dscalar.nii",
"MNINonLinear/fsaverage_LR32k/{SUBJECT}.SmoothedMyelinMap.32k_fs_LR.dscalar.nii": "derivatives/{PIPELINE}/sub-{SUBJECT}/ses-{SESSION}/anat/sub-{SUBJECT}_atlas-MNI_space-fsLR32k_desc-smoothed_myelinmap.dscalar.nii"
}

0 comments on commit 82b9853

Please sign in to comment.