#!/bin/bash # ============================================================================= # XCP-D Post-processing Pipeline — waves_3_6 TEST (single subject) # Subject: sub-110087 # Strategy: aCompCor + motion regression # High-pass via cosine regressors (Steven/XCP-D developer rec.) # Interpolation + scrubbing (FD > 0.5mm) + smoothing (6mm FWHM) # Sessions: ses-ams03 (200 vols) + ses-lei06 (310 vols) # No explicit bandpass filter — cosine regressors handle high-pass internally # No parcellation — voxelwise NIfTI output for MATLAB tbCAPs # XCP-D version: 0.14.1 # ============================================================================= # ── Paths ──────────────────────────────────────────────────────────────────── FMRIPREP_DIR="/data/jagavirialopez/NESDA/BIDS/BIDS_derivatives/waves_3_6" OUTPUT_DIR="/data/jagavirialopez/NESDA/BIDS/BIDS_derivatives/waves_3_6_xcpd_test" WORK_DIR="/data/jagavirialopez/NESDA/BIDS/work_xcpd_waves_3_6_test" XCP_D_IMG="/data/jagavirialopez/xcp_d_0.14.1.sif" FS_LICENSE="/data/jagavirialopez/freesurfer/license.txt" # ── Test subject ─────────────────────────���─────────────────────────────────── TEST_SUBJECT="110087" # ── Parameters ─────────────────────────────────────────────────────────────── NPROCS=15 OMP_NTHREADS=8 MEM_MB=105000 # in MB (105 GB) FD_THRESH=0.5 # Scrubbing threshold in mm (Power et al. 2014) SMOOTHING=6 # FWHM in mm # NO explicit high-pass — cosine regressors handle this within GLM (XCP-D dev recommendation) # ── Setup ──────────────────────────────────────────────────────────────────── mkdir -p ${OUTPUT_DIR} ${WORK_DIR} echo "==========================================" echo "XCP-D TEST RUN — single subject" echo "Subject: sub-${TEST_SUBJECT}" echo "Mode: none (custom settings)" echo "Confound strategy: aCompCor + cosine regressors (high-pass)" echo "FD threshold: ${FD_THRESH} mm" echo "Smoothing: ${SMOOTHING} mm FWHM" echo "High-pass: via cosine regressors (no explicit bandpass)" echo "Low-pass: none" echo "Threads: ${NPROCS}" echo "Memory: ${MEM_MB} MB" echo "Output dir: ${OUTPUT_DIR}" echo "Started at: $(date '+%Y-%m-%d %H:%M:%S')" echo "==========================================" singularity run --cleanenv \ -B ${FMRIPREP_DIR}:${FMRIPREP_DIR} \ -B ${OUTPUT_DIR}:${OUTPUT_DIR} \ -B ${WORK_DIR}:${WORK_DIR} \ -B $(dirname ${FS_LICENSE}):$(dirname ${FS_LICENSE}) \ ${XCP_D_IMG} \ ${FMRIPREP_DIR} \ ${OUTPUT_DIR} \ participant \ --mode none \ --participant-label ${TEST_SUBJECT} \ --input-type fmriprep \ --file-format nifti \ --skip-parcellation \ -p acompcor \ --smoothing ${SMOOTHING} \ -f ${FD_THRESH} \ --disable-bandpass-filter \ --output-type censored \ --head-radius auto \ --motion-filter-type none \ --despike y \ --combine-runs n \ --warp-surfaces-native2std n \ --linc-qc n \ --abcc-qc n \ --output-run-wise-correlations n \ --min-coverage 0.5 \ --fs-license-file ${FS_LICENSE} \ --nprocs ${NPROCS} \ --omp-nthreads ${OMP_NTHREADS} \ --mem-mb ${MEM_MB} \ --work-dir ${WORK_DIR} \ --notrack \ -v exit_code=$? echo "" echo "==========================================" echo "Finished at: $(date '+%Y-%m-%d %H:%M:%S')" if [ ${exit_code} -ne 0 ]; then echo "STATUS: ❌ FAILED (exit code ${exit_code})" echo "" echo "Troubleshooting tips:" echo " 1. Check logs in: ${OUTPUT_DIR}/logs/" echo " 2. Check work dir: ${WORK_DIR}" echo " 3. Run with --stop-on-first-crash for detailed traceback" else echo "STATUS: ✅ SUCCESS" echo "" echo "Expected outputs:" echo " ${OUTPUT_DIR}/sub-${TEST_SUBJECT}/ses-ams03/func/" echo " └── sub-${TEST_SUBJECT}_ses-ams03_task-rest_space-MNI152NLin6Asym_res-2_desc-denoised_bold.nii.gz" echo " ${OUTPUT_DIR}/sub-${TEST_SUBJECT}/ses-lei06/func/" echo " └── sub-${TEST_SUBJECT}_ses-lei06_task-rest_space-MNI152NLin6Asym_res-2_desc-denoised_bold.nii.gz" echo "" echo "QC report:" echo " ${OUTPUT_DIR}/sub-${TEST_SUBJECT}.html" fi echo "=========================================="