{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## **Imports**","metadata":{}},{"cell_type":"code","source":"import os\nimport PIL\nimport cv2\nimport tarfile\nimport numpy as np\nimport pydicom\nimport pandas as pd\nfrom glob import glob\nimport nibabel as nib\nfrom PIL import Image\nimport matplotlib.pyplot as plt\nfrom scipy import ndimage as ndi","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:33:17.094789Z","iopub.execute_input":"2021-08-26T12:33:17.095743Z","iopub.status.idle":"2021-08-26T12:33:17.280174Z","shell.execute_reply.started":"2021-08-26T12:33:17.095685Z","shell.execute_reply":"2021-08-26T12:33:17.279148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Extract the Tar Files Containing the Task 1 Dataset**","metadata":{}},{"cell_type":"code","source":"# Create Data Directory\nif not os.path.isdir(\"/kaggle/working/data\"):\n    os.makedirs(\"/kaggle/working/data\", exist_ok=True)\n    \n# Load Competition Training Dataframe\ntrain_df = pd.read_csv(\"/kaggle/input/rsna-miccai-brain-tumor-radiogenomic-classification/train_labels.csv\")\n\n# Extract Update\nprint(\"\\n... Extracting BraTSID=00495 Task1 Update Files ...\")\ntar = tarfile.open(\"/kaggle/input/brats-2021-task1/BraTS2021_00495.tar\")\ntar.extractall(\"/kaggle/working/data\")\ntar.close()\n\n# Extract Update\nprint(\"... Extracting BraTSID=00621 Task1 Update Files ...\")\ntar = tarfile.open(\"/kaggle/input/brats-2021-task1/BraTS2021_00621.tar\")\ntar.extractall(\"/kaggle/working/data\")\ntar.close()\n\n# Extract Main Training Data\nprint(\"... Extracting Main Task1 Training Files (3-5 Minutes) ...\\n\")\ntar = tarfile.open(\"/kaggle/input/brats-2021-task1/BraTS2021_Training_Data.tar\")\ntar.extractall(\"/kaggle/working/data\")\ntar.close()","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:11:41.880993Z","iopub.execute_input":"2021-08-26T12:11:41.881306Z","iopub.status.idle":"2021-08-26T12:14:29.3526Z","shell.execute_reply.started":"2021-08-26T12:11:41.881275Z","shell.execute_reply":"2021-08-26T12:14:29.351534Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Plot An Assortment of Task 1 Dataset Images At A Particular Scan Depth**","metadata":{}},{"cell_type":"code","source":"img_ids = [\"00376\", \"00789\", \"00441\", \"00703\", \"00807\", \"00523\", \"00241\", \"00778\",]\nSCAN_NUM = 83\n\nfor img_id in img_ids:\n    print(f\"\\n\\n\\n... IMAGE ID={img_id} **MGMT={train_df[train_df['BraTS21ID']==int(img_id)].MGMT_value.values[0]}** ...       [SHOWING SLICE/SCAN {SCAN_NUM}] \")\n    plt.figure(figsize=(18, 5))\n\n    for i, nii in enumerate([f'./data/BraTS2021_{img_id}/BraTS2021_{img_id}_{s_type}.nii.gz' for s_type in [\"flair\", \"t1\", \"t1ce\", \"t2\", \"seg\"]]):\n        # PLOTTING\n        plt.subplot(1,5,i+1)\n        image = nib.load(nii).get_fdata()\n        plt.title(nii.rsplit(\"_\", 1)[1].split(\".\", 1)[0], fontweight=\"bold\")\n        plt.axis(False)\n        plt.imshow(image[:, :, SCAN_NUM], cmap=\"bone\")\n        \n    plt.tight_layout()    \n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:14:29.354699Z","iopub.execute_input":"2021-08-26T12:14:29.355137Z","iopub.status.idle":"2021-08-26T12:15:17.382208Z","shell.execute_reply.started":"2021-08-26T12:14:29.355093Z","shell.execute_reply":"2021-08-26T12:15:17.38111Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **All Scans For Patient <font color=\"blue\">#441</font> - <font color=\"red\">Pulling From Task 1 Dataset</font>**","metadata":{}},{"cell_type":"code","source":"img_id = \"00441\"\n\n\nfor i, nii in enumerate([f'./data/BraTS2021_{img_id}/BraTS2021_{img_id}_{s_type}.nii.gz' for s_type in [\"flair\", \"t1\", \"t1ce\", \"t2\", \"seg\"]]):\n    # PLOTTING\n    image = nib.load(nii).get_fdata()\n    slices = image.shape[-1]\n    rows = int(np.ceil((slices/2)/10))\n    plt.figure(figsize=(20, rows*2))\n    plt.suptitle(f\"\\n\\n\\n{nii.rsplit('_', 1)[-1].split('.', 1)[0]} SCAN\\n\".upper(), fontsize=18, fontweight=\"bold\")\n    for j in range(0, slices, 2):\n        plt.subplot(rows, 10, 1+j//2)\n        plt.axis(False)\n        plt.imshow(image[:, :, j], cmap=\"bone\")\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:15:17.383828Z","iopub.execute_input":"2021-08-26T12:15:17.38424Z","iopub.status.idle":"2021-08-26T12:15:38.540506Z","shell.execute_reply.started":"2021-08-26T12:15:17.384188Z","shell.execute_reply":"2021-08-26T12:15:38.539556Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **All Scans For Patient <font color=\"blue\">#441</font> - <font color=\"red\">Pulling From Task 2 Dataset</font>**","metadata":{}},{"cell_type":"code","source":"def load_dicom(path):\n    dicom = pydicom.read_file(path)\n    data = dicom.pixel_array\n    data = data - np.min(data)\n    data = data / np.max(data)\n    data = (data * 255).astype(np.uint8)\n    return data\n\nfor i, scan_type in enumerate([\"FLAIR\", \"T1w\", \"T1wCE\", \"T2w\"]):\n    dicom_paths = [os.path.join(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train\", img_id, scan_type, x) for x in os.listdir(os.path.join(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train\", img_id, scan_type))]\n    dicom_paths = sorted(dicom_paths, key=lambda x: (int(x.rsplit(\"-\", 1)[-1].split(\".\", 1)[0])), reverse=True)\n    slices = max([int(x.rsplit(\"-\", 1)[-1].split(\".\", 1)[0]) for x in dicom_paths])\n    rows = int(np.ceil(slices/8))\n    plt.figure(figsize=(20, rows*4))\n    plt.suptitle(f\"\\n\\n\\n{scan_type} SCAN\\n\".upper(), fontsize=18, fontweight=\"bold\")\n\n    # PLOTTING\n    for j, path in enumerate(dicom_paths):\n        image = load_dicom(path)    \n        plt.subplot(rows, 8, j+1)\n        plt.axis(False)\n        plt.imshow(image, cmap=\"bone\")\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:15:38.541754Z","iopub.execute_input":"2021-08-26T12:15:38.542046Z","iopub.status.idle":"2021-08-26T12:15:48.88756Z","shell.execute_reply.started":"2021-08-26T12:15:38.542018Z","shell.execute_reply":"2021-08-26T12:15:48.886481Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **All Scans For Patient <font color=\"blue\">#441</font> - <font color=\"red\">Pulling From Alternative Task 2 Dataset</font>**","metadata":{}},{"cell_type":"code","source":"task2_fixed_path = \"../input/pngtest/png_voxel_converted_ds/train\"\n\nfor i, scan_type in enumerate([\"FLAIR\", \"T1w\", \"T1wCE\", \"T2w\"]):\n    png_paths = [os.path.join(task2_fixed_path, img_id, scan_type, x) for x in os.listdir(os.path.join(task2_fixed_path, img_id, scan_type))]\n    png_paths = sorted(png_paths, key=lambda x: (int(x.rsplit(\"-\", 1)[-1].split(\".\", 1)[0])), reverse=True)\n    slices = len(png_paths)\n    rows = int(np.ceil(slices/8))\n    plt.figure(figsize=(20, rows*4))\n    plt.suptitle(f\"\\n\\n\\n{scan_type} SCAN\\n\".upper(), fontsize=18, fontweight=\"bold\")\n\n    # PLOTTING\n    for j, path in enumerate(png_paths):\n        image = cv2.imread(path)\n        plt.subplot(rows, 8, j+1)\n        plt.axis(False)\n        plt.imshow(image, cmap=\"bone\")\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-26T12:34:54.007132Z","iopub.execute_input":"2021-08-26T12:34:54.007472Z","iopub.status.idle":"2021-08-26T12:35:04.166229Z","shell.execute_reply.started":"2021-08-26T12:34:54.007441Z","shell.execute_reply":"2021-08-26T12:35:04.165169Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}