Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refractor derivatives naming convention #159

Merged
merged 22 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
108 changes: 108 additions & 0 deletions code/update_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import os
import json
import argparse


def get_parser():
parser = argparse.ArgumentParser(
description="Adds spatial reference information to json sidecars." )
parser.add_argument('-d',
required=True, help='Directory to process JSON files in')
parser.add_argument('-r',
default='0.8x0.8x0.8',
help='Resampling factor to add to SpatialReference')

return parser


def create_json_file(nii_gz_files, resampling_factor):
"""Creates a JSON file listing all .nii.gz files and includes the resampling factor.
Args:
nii_gz_files (list): A list of paths to .nii.gz files.
"""
data = {
#"SpatialReference": {
# "Orientation": "RPI",
# "Resampling": resampling_factor,
# },
"GeneratedBy":[
{
"Name": "sct_dmri_moco",
"Version": "SCT v6.1",
#"Author": "Paul Bautin",
#"Date": "2020-07-30 11:57:54",
"Description": "Mean image across directions after motion correction"
}]
}
for file in nii_gz_files:
output_path = file.replace('.nii.gz', '.json')
with open(output_path, 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4)


def add_spatial_reference(file_path, resampling_factor):
"""Adds the SpatialReference field to a JSON file.
Args:
file_path (str): The path to the JSON file.
"""
with open(file_path, 'r+', encoding='utf-8') as file:
# Load the existing data
data = json.load(file)

# Add the "SpatialReference" field
data["SpatialReference"] = {
"Resampling": resampling_factor,
"Reorientation": "RPI",
"Other": "root-mean square across 4th dimension (if it exists)"
}

# Reset file pointer to the beginning and truncate the file
file.seek(0)
file.truncate()

# Write the modified data back to the file
json.dump(data, file, indent=4)


def find_nii_gz_files(directory):
"""Finds all .nii.gz files in a directory and its subdirectories.
Args:
directory (str): The root directory to start the search from.
Returns:
list: A list of paths to the .nii.gz files found.
"""
nii_gz_files = []
for root, _, files in os.walk(directory):
for file in files:
if ('rec-average_dwi.nii.gz' in file):
nii_gz_files.append(os.path.join(root, file))

return nii_gz_files


def process_directory(directory, resampling_factor):
"""Recursively processes directories to find and update JSON files.
Args:
directory (str): The root directory to start the search from.
"""
for root, _, files in os.walk(directory):
for file in files:
if ('T2w' in file) and ('.json' in file):
file_path = os.path.join(root, file)
add_spatial_reference(file_path, resampling_factor)
print(f"Updated {file_path}")

def main():
parser = get_parser()
args = parser.parse_args()
#process_directory(args.d, args.r)
nii_gz_files = find_nii_gz_files(args.d)
create_json_file(nii_gz_files, args.r)

if __name__ == "__main__":
main()
18 changes: 18 additions & 0 deletions derivatives/data_preprocessed/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
This folder contains the preprocessed images using [process_data.sh](https:/spine-generic/spine-generic/blob/v2.7/process_data.sh). The preprocessing steps include:

T2w:
* Resampling to 0.8x0.8x0.8 mm
* Reorientation to RPI
T1w:
* Resampling to 1x1x1 mm
* Reorientation to RPI
T2star:
* Reorientation to RPI
* Root-mean square across 4th dimension (if exists)

MTS (flip-1_mt-on & flip-2_mt-off):
* Reorientation to RPI

DWI:
* Motion correction
* Avreage across 4th dimension
101 changes: 101 additions & 0 deletions derivatives/data_preprocessed/dataset_description.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"Name": "Spinal Cord MRI Public Database (Multi-subjects)",
"BIDSVersion": "1.2.0",
"License": "CC0",
"Authors": [
"J. Cohen-Adad",
"M. Abramovic",
"C. Arneitz",
"L. Barlow",
"B. De Leener",
"J. Doyon",
"F. Eippert",
"J. Finsterbusch",
"A. Hagiwara",
"K. Kamiya",
"H. Karbasforoushan",
"A. Khatibi",
"N. Kinany",
"S. Kusmia",
"C. Laule",
"T. Leutritz",
"E. Martinez-Heras",
"D. Papp",
"M. Seif",
"Y. Suzuki",
"G. Tackley",
"A. Tinnermann",
"N. Weiskopf",
"R. Wise",
"A. V. Dvorak",
"S. Kolind",
"S. Smith",
"B. Landman",
"K. O\u2019Grady",
"A. Combes",
"P. Freund",
"Y. Kong",
"Y. Liu",
"Y. Duan",
"T. Hor\u00e1k",
"P. Kudli\u010dka",
"J. Valo\u0161ek",
"K. Paul",
"L. Mattera",
"D. Van De Ville",
"M.M. Lagan\u00e0",
"A. Smith",
"N.D. Kurniawan",
"M.J. Ruitenberg",
"M. Barth",
"N. Atcheson",
"P.-G. Henry",
"J. Joers",
"R. Labounek",
"C. Lenglet",
"I. Nestrasil",
"T. Parrish",
"Z. Smith\u00a0",
"A. Foias",
"R.L. Barry",
"G. Savini",
"J. Xu",
"A. Seifert",
"J-W. Kim",
"D. Pareto",
"\u00c0. Rovira",
"V. Callot",
"P. De Sousa",
"A.J.E. Combes",
"C. Law",
"C.Gandini Wheeler-Kingshott",
"H. Benali",
"K.A. Weber II",
"K.P. O'Grady",
"M. Descoteaux",
"M. Dost\u00e1l",
"M. Fratini",
"M. Ke\u0159kovsk\u00fd",
"P. Wyss",
"S.A. Smith",
"F. Grussu",
"M. Battiston",
"M. C. Yiannakas",
"R. S. Samson"
],
"Acknowledgements": "We thank Gerald Moran and Bart Schraa (Siemens Healthcare), Suchandrima Banerjee and Naoyuki Takei (GE Healthcare), Carollyn Hurst, Andr\u00e9 Cyr, Arnaud Bor\u00e9 and Pierre Bellec (Functional Neuroimaging Unit), Charles Tremblay (Polytechnique Montreal), Antonys Melek and Habib Benali (PERFORM center, Concordia University), Ives Levesque (McGill University) and all the volunteers who participated in the Spinal Cord MRI Public Database.",
"Funding": [
"Funded by the Canada Research Chair in Quantitative Magnetic Resonance Imaging [950-230815]",
"the Canadian Institute of Health Research [CIHR FDN-143263]",
"the Canada Foundation for Innovation [32454, 34824]",
"the Fonds de Recherche du Qu\u00e9bec - Sant\u00e9 [28826]",
"the Fonds de Recherche du Qu\u00e9bec - Nature et Technologies [2015-PR-182754]",
"the Natural Sciences and Engineering Research Council of Canada [435897-2013]",
"the Canada First Research Excellence Fund (IVADO and TransMedTech)",
"the Quebec BioImaging Network [5886]",
"Spinal Research and Wings for Life (INSPIRED project)",
"the National Institutes of Health (NIH) through grant R00EB016689 (R.L.B.)",
"the Instituto Investigaci\u00f3n Carlos III (Spain, PI18/00823). The content is solely the responsibility of the authors and does not necessarily represent the official views of the NIH."
],
"DatasetDOI": "10.18112/openneuro.ds002902.v1.0.0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"Modality": "MR",
"MagneticFieldStrength": 3,
"Manufacturer": "Siemens",
"ManufacturersModelName": "Verio",
"InstitutionName": "CEMEREM",
"InstitutionalDepartmentName": "CEMEREM",
"InstitutionAddress": "RUE_ST_PIERRE_264_MARSEILLE...92C536..._District_FR_13006",
"DeviceSerialNumber": "40146",
"StationName": "MRC40146",
"PatientPosition": "HFS",
"ProcedureStepDescription": "TEST_VC_SPINE",
"SoftwareVersions": "syngo_MR_B17",
"MRAcquisitionType": "3D",
"SeriesDescription": "GRE-MT1",
"ProtocolName": "GRE-MT1",
"ScanningSequence": "GR",
"SequenceVariant": "MTC_SP",
"ScanOptions": "MT",
"SequenceName": "_fl3d1",
"ImageType": [
"ORIGINAL",
"PRIMARY",
"M",
"DIS2D"
],
"SeriesNumber": 13,
"AcquisitionTime": "12:09:20.497500",
"AcquisitionNumber": 1,
"SliceThickness": 5,
"SAR": 0.543298,
"EchoTime": 0.0035,
"RepetitionTime": 0.035,
"FlipAngle": 9,
"PartialFourier": 1,
"BaseResolution": 256,
"ShimSetting": [
-5818,
12738,
-11958,
-438,
-319,
1383,
480,
-194
],
"TxRefAmp": 351.351,
"PhaseResolution": 1,
"ReceiveCoilName": "NeckMatrix",
"PulseSequenceDetails": "%SiemensSeq%_gre",
"PercentPhaseFOV": 100,
"PhaseEncodingSteps": 255,
"AcquisitionMatrixPE": 256,
"ReconMatrixPE": 256,
"ParallelReductionFactorInPlane": 2,
"PixelBandwidth": 260,
"DwellTime": 7.5e-06,
"ImageOrientationPatientDICOM": [
1,
0,
0,
0,
0.99889,
-0.0471065
],
"InPlanePhaseEncodingDirectionDICOM": "COL",
"ConversionSoftware": "dcm2niix",
"ConversionSoftwareVersion": "v1.0.20171215 (OpenJPEG build) Clang8.1.0",
"SpatialReference": {
"Reorientation": "RPI"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/annex/objects/SHA256E-s1174002--9aa6ec79a78cdfa40d54e8ff8ac2d55629d5c5023c0f918e3fb626ce74ea3c3d.nii.gz
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{
"Modality": "MR",
"MagneticFieldStrength": 3,
"Manufacturer": "Siemens",
"ManufacturersModelName": "Verio",
"InstitutionName": "CEMEREM",
"InstitutionalDepartmentName": "CEMEREM",
"InstitutionAddress": "RUE_ST_PIERRE_264_MARSEILLE...92C536..._District_FR_13006",
"DeviceSerialNumber": "40146",
"StationName": "MRC40146",
"PatientPosition": "HFS",
"ProcedureStepDescription": "TEST_VC_SPINE",
"SoftwareVersions": "syngo_MR_B17",
"MRAcquisitionType": "3D",
"SeriesDescription": "GRE-T1w",
"ProtocolName": "GRE-T1w",
"ScanningSequence": "GR",
"SequenceVariant": "SP",
"SequenceName": "_fl3d1",
"ImageType": [
"ORIGINAL",
"PRIMARY",
"M",
"DIS2D"
],
"SeriesNumber": 15,
"AcquisitionTime": "12:13:48.242500",
"AcquisitionNumber": 1,
"SliceThickness": 5,
"SAR": 0.0352258,
"EchoTime": 0.0035,
"RepetitionTime": 0.015,
"FlipAngle": 15,
"PartialFourier": 1,
"BaseResolution": 256,
"ShimSetting": [
-5818,
12738,
-11958,
-438,
-319,
1383,
480,
-194
],
"TxRefAmp": 351.351,
"PhaseResolution": 1,
"ReceiveCoilName": "NeckMatrix",
"PulseSequenceDetails": "%SiemensSeq%_gre",
"PercentPhaseFOV": 100,
"PhaseEncodingSteps": 255,
"AcquisitionMatrixPE": 256,
"ReconMatrixPE": 256,
"ParallelReductionFactorInPlane": 2,
"PixelBandwidth": 260,
"DwellTime": 7.5e-06,
"ImageOrientationPatientDICOM": [
1,
0,
0,
0,
0.99889,
-0.0471065
],
"InPlanePhaseEncodingDirectionDICOM": "COL",
"ConversionSoftware": "dcm2niix",
"ConversionSoftwareVersion": "v1.0.20171215 (OpenJPEG build) Clang8.1.0",
"SpatialReference": {
"Reorientation": "RPI"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/annex/objects/SHA256E-s1229554--48c6bd34de552527ad6bc57d911585113a995f1edb07d33d0d5ec0dd77736e5c.nii.gz
Loading
Loading