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.
92 lines
2.3 KiB
Bash
Executable file
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"
|
|
|