pesky-fieldmaps/fix_dwi_sdc_datalad.sh
Richard Nkrumah 9a5e36bae2 Add script for renaming DWI field maps
The code was written by Richard for q01-mannheim/q01-bids-dataset and
shared in a discussion thread (all/status/issues/1). It is included here
because I can't access the original repo.
2026-05-08 14:13:37 +02:00

92 lines
2.3 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
BIDS_ROOT="${1:-.}"
find "$BIDS_ROOT" -type d -path "*/sub-*/ses-*/dwi" | while read -r DWI_DIR; do
SES_DIR="$(dirname "$DWI_DIR")"
FMAP_DIR="${SES_DIR}/fmap"
mkdir -p "$FMAP_DIR"
for DWI_NII in "$DWI_DIR"/sub-*_ses-*_acq-b1200_dwi.nii.gz; do
[ -e "$DWI_NII" ] || continue
DWI_BASE="${DWI_NII%.nii.gz}"
STEM="$(basename "$DWI_BASE" _dwi)"
SUBSES="${STEM%_acq-b1200}"
OLD_DWI="${DWI_DIR}/${STEM}_dwi"
NEW_DWI="${DWI_DIR}/${STEM}_dir-PA_dwi"
OLD_SBREF="${DWI_DIR}/${SUBSES}_acq-b1200_sbref"
NEW_EPI="${FMAP_DIR}/${SUBSES}_acq-b1200_dir-AP_epi"
echo "Processing ${SUBSES}"
for ext in nii.gz json bval bvec; do
if [ -e "${OLD_DWI}.${ext}" ] && [ ! -e "${NEW_DWI}.${ext}" ]; then
git mv "${OLD_DWI}.${ext}" "${NEW_DWI}.${ext}"
fi
done
for ext in nii.gz json; do
if [ -e "${OLD_SBREF}.${ext}" ] && [ ! -e "${NEW_EPI}.${ext}" ]; then
git mv "${OLD_SBREF}.${ext}" "${NEW_EPI}.${ext}"
fi
done
for ext in bval bvec; do
if [ -e "${OLD_SBREF}.${ext}" ]; then
git rm "${OLD_SBREF}.${ext}"
fi
done
EPI_JSON="${NEW_EPI}.json"
DWI_REL="$(basename "$SES_DIR")/dwi/$(basename "${NEW_DWI}.nii.gz")"
if [ -e "$EPI_JSON" ]; then
datalad unlock "$EPI_JSON" || true
python3 - <<PY
import json
from pathlib import Path
p = Path("$EPI_JSON")
with p.open("r", encoding="utf-8") as f:
data = json.load(f)
data["IntendedFor"] = ["$DWI_REL"]
with p.open("w", encoding="utf-8") as f:
json.dump(data, f, indent=2)
f.write("\\n")
PY
fi
SCANS_TSV="${SES_DIR}/$(basename "$(dirname "$SES_DIR")")_$(basename "$SES_DIR")_scans.tsv"
if [ -e "$SCANS_TSV" ]; then
datalad unlock "$SCANS_TSV" || true
python3 - <<PY
from pathlib import Path
p = Path("$SCANS_TSV")
txt = p.read_text()
repls = {
"dwi/$(basename "${OLD_DWI}.nii.gz")": "dwi/$(basename "${NEW_DWI}.nii.gz")",
"dwi/$(basename "${OLD_DWI}.json")": "dwi/$(basename "${NEW_DWI}.json")",
"dwi/$(basename "${OLD_SBREF}.nii.gz")": "fmap/$(basename "${NEW_EPI}.nii.gz")",
"dwi/$(basename "${OLD_SBREF}.json")": "fmap/$(basename "${NEW_EPI}.json")",
}
for old, new in repls.items():
txt = txt.replace(old, new)
p.write_text(txt)
PY
fi
done
done
datalad save -m "Fix DWI reverse PE fieldmap structure for QSIPrep SDC"