Diff of /code/update_json.py [000000] .. [de1a2e]

Switch to side-by-side view

--- a
+++ b/code/update_json.py
@@ -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()
\ No newline at end of file