{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":36363,"databundleVersionId":4050810,"sourceType":"competition"},{"sourceId":5718655,"sourceType":"datasetVersion","datasetId":2373279}],"dockerImageVersionId":30213,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom pathlib import Path\nimport shutil\nimport pydicom\n\n# Load CSV and select studies\ntrain_csv = pd.read_csv(\"/kaggle/input/rsna-2022-cervical-spine-fracture-detection/train.csv\")\nselected_studies = train_csv[\"StudyInstanceUID\"].unique()[100:108]\nfiltered_csv = train_csv[train_csv[\"StudyInstanceUID\"].isin(selected_studies)]\n\n# Define paths\nsource_dicom_base = Path(\"/kaggle/input/rsna-2022-cervical-spine-fracture-detection/train_images\")\nsource_seg_base = Path(\"/kaggle/input/rsna-2022-cervical-spine-fracture-detection/segmentations\")\noutput_dicom_base = Path(\"/kaggle/working/filtered_dicom\")\noutput_seg_base = Path(\"/kaggle/working/filtered_segmentations\")\noutput_csv_path = Path(\"/kaggle/working/filtered_train.csv\")\n\noutput_dicom_base.mkdir(parents=True, exist_ok=True)\noutput_seg_base.mkdir(parents=True, exist_ok=True)\n\n# DICOM metadata patch\ndefault_fields = {\n    (0x0008, 0x0060): 'CT',\n    (0x0008, 0x0020): '20250508',\n    (0x0008, 0x0030): '120000',\n    (0x0008, 0x1030): 'Cervical Spine CT',\n    (0x0008, 0x103E): 'Axial Slices',\n    (0x0020, 0x0011): '1',\n    (0x0018, 0x1210): 'STANDARD'\n}\n\n# Process each selected study\nfor study_uid in selected_studies:\n    study_folder = source_dicom_base / study_uid\n    output_folder = output_dicom_base / study_uid\n    output_folder.mkdir(parents=True, exist_ok=True)\n\n    for dcm_path in study_folder.glob(\"*.dcm\"):\n        ds = pydicom.dcmread(dcm_path)\n        for tag, val in default_fields.items():\n            ds.setdefault(tag, val)\n        ds.save_as(output_folder / dcm_path.name)\n\n    # Copy segmentation file if available\n    seg_file = source_seg_base / f\"{study_uid}.nii\"\n    if seg_file.exists():\n        print(\"Segmentation file available: \", seg_file)\n        shutil.copy(seg_file, output_seg_base / f\"{study_uid}.nii\")\n\n# Save filtered CSV\nfiltered_csv.to_csv(output_csv_path, index=False)\n\nprint(f\"✅ Extracted DICOMs, segmentations, and filtered CSV to /kaggle/working\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2025-05-23T07:35:51.159798Z","iopub.execute_input":"2025-05-23T07:35:51.160232Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}