diff --git a/README.md b/README.md index 1f2ab86..66dc58a 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,23 @@ The scattered nature of health data, along with the lack of standardization and ## Installation -By pulling the latest version from GitHub. Please note that your Python installation should be 3.6 or later. +1. To perfome the **installation** you should clone the latest version from GitHub. Please note that your Python installation should be 3.6 or later. ``` git clone https://github.com/kildealab/mCODE-MOSAICO ``` +2. To install the **dependecies** +``` +cd mCODE-MOSAICO +pip install -r requirements.txt +``` + +3. To **import** the package in Jupyter Notebook or Python3 file + +``` +import sys +sys.path.append('/path/to/the/folder/mCODE-MOSAICO/utils') +``` + ## Usage and Examples

@@ -91,6 +104,48 @@ git clone https://github.com/kildealab/mCODE-MOSAICO | └── ... +### Sort and Save Images + +### Save mCODE attributes + +### Features and Factors Extraction + +##### (1) Radiomics + +To extract **only** the **radiomics** for a single patient and a single ROI +``` +python extract_only_radiomics patient ROI +``` + +To extract **only** the **radiomics** for *all* the patient and *all* the available ROIs +``` +python extract_only_radiomcis all all +``` + +##### (2) Dosiomics + +To extract **only** the **dosiomics** for a single patient and a single ROI +``` +python extract_only_dosiomics patient ROI +``` + +To extract **only** the **dosiomics** for *all* the patient and *all* the available ROIs +``` +python extract_only_dosiomics all all +``` + +##### (3) Dosimetric (DVH factors) +To extract **only** the **dosimetric or dvh factors** for a single patient and a single ROI +``` +python extract_only_dvh_factors patient ROI +``` + +To extract **only** the **dosimetric or dvh factors** for *all* the patient and *all* the available ROIs +``` +python extract_only_dvh_factors all all +``` +### Full pipeline + ## License This project is provided under the GNU General Public License version 3 (GPLv3) to preserve open-source access to any derivative works. See the LICENSE file for more information. ## References diff --git a/examples/.ipynb_checkpoints/example_mcode_utils(FULL_PIPELINE)-checkpoint.ipynb b/examples/.ipynb_checkpoints/example_mcode_utils(FULL_PIPELINE)-checkpoint.ipynb new file mode 100644 index 0000000..581568a --- /dev/null +++ b/examples/.ipynb_checkpoints/example_mcode_utils(FULL_PIPELINE)-checkpoint.ipynb @@ -0,0 +1,594 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "07a03228-daa4-4003-968c-8f9d77249729", + "metadata": {}, + "outputs": [], + "source": [ + "import pydicom as dcm\n", + "import numpy as np\n", + "import pandas as pd\n", + "from matplotlib import pyplot as plt\n", + "import json\n", + "import sys\n", + "import os\n", + "sys.path.append('../utils')\n", + "import radiomics_utils\n", + "from radiomics_utils import *\n", + "import mcode_utils\n", + "from mcode_utils import *\n", + "import dicom_utils\n", + "from dicom_utils import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "25b8f98b-bc5d-4c93-9fbb-504829d91736", + "metadata": {}, + "outputs": [], + "source": [ + "#import getpass\n", + "#password = getpass.getpass(\"Sudo password: \")" + ] + }, + { + "cell_type": "markdown", + "id": "0064e664-e756-44bc-8316-a4e70ea895b6", + "metadata": {}, + "source": [ + "## Creates folders and sorts them. Extract the mCODE extension elements for images, radiomics, and dosiomics" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "2571e468-b274-4ddb-a649-7125dbf3ca60", + "metadata": {}, + "outputs": [], + "source": [ + "path_patient = '../examples/GBM_burdenko_example/1'\n", + "path_save = '../examples/output_example'\n", + "if not os.path.isdir(path_save):\n", + " os.makedirs(path_save)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "7304f454-a250-4522-ae8e-e9b419cfeba4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The folder '../examples/output_example/1' exists.\n", + "The folder '../examples/output_example/1/medical_images' exists.\n", + "The folder '../examples/output_example/1/radiomics' exists.\n", + "The folder '../examples/output_example/1/dosiomics' exists.\n", + "The folder '../examples/output_example/1/dosimetrics' does not exist\n", + "############### CREATING FOLDER ################\n", + "Folder created sucessfully\n", + "\n", + "\n" + ] + } + ], + "source": [ + "#Create the folders for given the patient path and the path to save\n", + "new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "08eb0af8-038f-4d67-af74-432724c7cd4e", + "metadata": {}, + "outputs": [], + "source": [ + "#GET THE PATH OF THE IMAGES FORM THE EXAMPLE\n", + "paths_images_all = get_all_folder_images(path_patient)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "30a0c7a2-3c00-4a43-a912-0d66335287fd", + "metadata": {}, + "outputs": [], + "source": [ + "def search_RD_path(dir_RD_path,RT_ref=None,dicoPATH=False): \n", + " if dicoPATH==False:\n", + " if RT_ref!=None:\n", + " RD_files = sorted([os.path.join(dir_RD_path, x) for x in os.listdir(dir_RD_path) if '.dcm' in x])\n", + " slices = [dcm.dcmread(j, force=True) for j in RD_files]\n", + " if len(slices)!=0:\n", + " try:\n", + " if slices[0].Modality=='RTDOSE' and slices[0].FrameOfReferenceUID==RT_ref:\n", + " return True\n", + " except:\n", + " if slices[0][0x0008, 0x0016].value=='1.2.840.10008.5.1.4.1.1.481.2' and slices[0].FrameOfReferenceUID==RT_ref:\n", + " return True\n", + "\n", + "\n", + "def get_dirs_RD(paths_RT,dicoPATH=False):\n", + " paths = {}\n", + " for key in paths_RT.items():\n", + " RT_path = paths_RT[key[0]]\n", + " if dicoPATH==False:\n", + " RT_files = sorted([os.path.join(RT_path, x) for x in os.listdir(RT_path) if '.dcm' in x])\n", + " slices = [dcm.dcmread(j, force=True) for j in RT_files]\n", + " for path_2 in paths_images_all:\n", + " RD_file = search_RD_path(path_2,slices[0].ReferencedFrameOfReferenceSequence[0].FrameOfReferenceUID)\n", + " if RD_file==True:\n", + " paths[RT_path] = path_2\n", + " else:\n", + " continue\n", + " else:\n", + " path_RD = get_path_RD_dicoPATH(RT_path)\n", + " paths[RT_path] = path_RD\n", + " return paths\n", + " \n", + "def search_RS_path(dir_RS_path,image_UID=None,dicoPATH=False): \n", + " if image_UID!=None:\n", + " RS_files = sorted([os.path.join(dir_RS_path, x) for x in os.listdir(dir_RS_path) if '.dcm' in x])\n", + " slices = [dcm.dcmread(j, force=True) for j in RS_files]\n", + " if len(slices)!=0:\n", + " try: \n", + " if slices[0].Modality=='RTSTRUCT' and slices[0].StructureSetLabel==image_UID:\n", + " return True\n", + " elif slices[0][0x0008, 0x0016].value=='1.2.840.10008.5.1.4.1.1.481.3' and slices[0].StructureSetLabel==image_UID:\n", + " return True\n", + " else:\n", + " print('############ Check RT format ############')\n", + " except:\n", + " print('The RT Structure file does not have StructureSetLabel Tag or Modality')\n", + " #uid_rt = slices[0].ReferencedFrameOfReferenceSequence[0].RTReferencedStudySequence[0].RTReferencedSeriesSequence[0]\n", + " #if slices[0].Modality=='RTSTRUCT' and uid_rt==image_UID:\n", + " ##\n", + " \n", + "def get_dirs_RT(paths_images_all,dicoPATH=False):\n", + " paths = {}\n", + " for path in paths_images_all:\n", + " set_images = get_set_images(path)\n", + " if len(set_images)!=0:\n", + " if dicoPATH==False:\n", + " for path_2 in paths_images_all:\n", + " print(set_images[0])\n", + " RS_file = search_RS_path(path_2,set_images[0].ReferencedSOPInstanceUID)\n", + " if RS_file==True:\n", + " paths[path] = path_2\n", + " else:\n", + " continue\n", + " else:\n", + " if path.split('/')[-1][9:11] == 'CT' and len(path.split('/')[-1])==23:\n", + " path_RS = get_path_RS_dicoPATH(path)\n", + " paths[path] = path_RS\n", + " else:\n", + " continue\n", + " return paths\n", + " \n", + "def search_RS_file(path,image_UID=None):\n", + " RS_files = get_set_RS_path(path,image_UID)\n", + " return RS_files\n", + "\n", + "def get_path_RS_dicoPATH(path_CT): \n", + " '''Gets the RS path (Rt structure file) for the CT folder''' \n", + " file_RS = [x for x in os.listdir(path_CT) if 'RS' in x][0]\n", + " return os.path.join(path_CT, file_RS)\n", + "\n", + "def get_path_RD_dicoPATH(path_RS): \n", + " path_RS2 = '/'.join(path_RS.split('/')[:-1])\n", + " file_RD = [x for x in os.listdir(path_RS2) if 'RD' in x]\n", + " files = [[dcm.dcmread(path_RS2+'/'+x).InstanceCreationTime,x] for x in file_RD]\n", + " sorted_data = sorted(files)# finds the RD file with the name RD.######.dcm\n", + " return os.path.join(path_RS2, sorted_data[-1][-1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "79188680-9f24-4764-9a66-5e5774887f5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataset.file_meta -------------------------------\n", + "(0002, 0000) File Meta Information Group Length UL: 204\n", + "(0002, 0001) File Meta Information Version OB: b'\\x00\\x01'\n", + "(0002, 0002) Media Storage SOP Class UID UI: CT Image Storage\n", + "(0002, 0003) Media Storage SOP Instance UID UI: 1.3.6.1.4.1.14519.5.2.1.204275413579935378693906623868620316607\n", + "(0002, 0010) Transfer Syntax UID UI: Implicit VR Little Endian\n", + "(0002, 0012) Implementation Class UID UI: 1.3.6.1.4.1.22213.1.143\n", + "(0002, 0013) Implementation Version Name SH: '0.5'\n", + "(0002, 0016) Source Application Entity Title AE: 'POSDA'\n", + "-------------------------------------------------\n", + "(0008, 0005) Specific Character Set CS: 'ISO_IR 192'\n", + "(0008, 0008) Image Type CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']\n", + "(0008, 0012) Instance Creation Date DA: '20040506'\n", + "(0008, 0013) Instance Creation Time TM: '140330'\n", + "(0008, 0016) SOP Class UID UI: CT Image Storage\n", + "(0008, 0018) SOP Instance UID UI: 1.3.6.1.4.1.14519.5.2.1.204275413579935378693906623868620316607\n", + "(0008, 0020) Study Date DA: '20040506'\n", + "(0008, 0021) Series Date DA: '20040506'\n", + "(0008, 0022) Acquisition Date DA: '20040506'\n", + "(0008, 0023) Content Date DA: '20040506'\n", + "(0008, 0030) Study Time TM: '133626'\n", + "(0008, 0031) Series Time TM: '133933'\n", + "(0008, 0032) Acquisition Time TM: '133949.687'\n", + "(0008, 0033) Content Time TM: '133952'\n", + "(0008, 0050) Accession Number SH: ''\n", + "(0008, 0060) Modality CS: 'CT'\n", + "(0008, 0070) Manufacturer LO: 'GE MEDICAL SYSTEMS'\n", + "(0008, 0090) Referring Physician's Name PN: ''\n", + "(0008, 1030) Study Description LO: 'Radiotherapy planning 00'\n", + "(0008, 103e) Series Description LO: 'CT00CT'\n", + "(0008, 1080) Admitting Diagnoses Description LO: 'high grade glioma/glioblastoma'\n", + "(0008, 1090) Manufacturer's Model Name LO: 'Optima CT580'\n", + "(0008, 1140) Referenced Image Sequence 1 item(s) ---- \n", + " (0008, 1150) Referenced SOP Class UID UI: CT Image Storage\n", + " (0008, 1155) Referenced SOP Instance UID UI: 1.3.6.1.4.1.14519.5.2.1.127316590047021268513519701476515394071\n", + " ---------\n", + "(0010, 0010) Patient's Name PN: 'Burdenko-GBM-001'\n", + "(0010, 0020) Patient ID LO: 'Burdenko-GBM-001'\n", + "(0010, 0030) Patient's Birth Date DA: ''\n", + "(0010, 0040) Patient's Sex CS: 'F'\n", + "(0012, 0062) Patient Identity Removed CS: 'YES'\n", + "(0012, 0063) De-identification Method LO: 'Per DICOM PS 3.15 AnnexE. Details in 0012,0064'\n", + "(0012, 0064) De-identification Method Code Sequence 8 item(s) ---- \n", + " (0008, 0100) Code Value SH: '113100'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Basic Application Confidentiality Profile'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113101'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Clean Pixel Data Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113104'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Clean Structured Content Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113105'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Clean Descriptors Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113107'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Retain Longitudinal Temporal Information Modified Dates Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113108'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Retain Patient Characteristics Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113109'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Retain Device Identity Option'\n", + " ---------\n", + " (0008, 0100) Code Value SH: '113111'\n", + " (0008, 0102) Coding Scheme Designator SH: 'DCM'\n", + " (0008, 0104) Code Meaning LO: 'Retain Safe Private Option'\n", + " ---------\n", + "(0013, 0010) Private Creator LO: 'CTP'\n", + "(0013, 1010) Private tag data UN: Array of 24 elements\n", + "(0013, 1013) Private tag data UN: b'74002725'\n", + "(0018, 0022) Scan Options CS: 'HELICAL MODE'\n", + "(0018, 0050) Slice Thickness DS: '1.25'\n", + "(0018, 0060) KVP DS: '120.0'\n", + "(0018, 0090) Data Collection Diameter DS: '500.0'\n", + "(0018, 1020) Software Versions LO: 'qin.3'\n", + "(0018, 1100) Reconstruction Diameter DS: '382.0'\n", + "(0018, 1110) Distance Source to Detector DS: '1062.55'\n", + "(0018, 1111) Distance Source to Patient DS: '605.945'\n", + "(0018, 1120) Gantry/Detector Tilt DS: '0.0'\n", + "(0018, 1130) Table Height DS: '221.0'\n", + "(0018, 1140) Rotation Direction CS: 'CW'\n", + "(0018, 1150) Exposure Time IS: '897'\n", + "(0018, 1151) X-Ray Tube Current IS: '491'\n", + "(0018, 1152) Exposure IS: '22'\n", + "(0018, 1160) Filter Type SH: 'BODY FILTER'\n", + "(0018, 1170) Generator Power IS: '66000'\n", + "(0018, 1190) Focal Spot(s) DS: '1.2'\n", + "(0018, 1210) Convolution Kernel SH: 'STANDARD'\n", + "(0018, 5100) Patient Position CS: 'HFS'\n", + "(0020, 000d) Study Instance UID UI: 1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357\n", + "(0020, 000e) Series Instance UID UI: 1.3.6.1.4.1.14519.5.2.1.20417500794672593138065669875767558964\n", + "(0020, 0010) Study ID SH: ''\n", + "(0020, 0011) Series Number IS: '2'\n", + "(0020, 0012) Acquisition Number IS: '1'\n", + "(0020, 0013) Instance Number IS: '1'\n", + "(0020, 0032) Image Position (Patient) DS: [-191, -191, -106.25]\n", + "(0020, 0037) Image Orientation (Patient) DS: [1, 0, 0, 0, 1, 0]\n", + "(0020, 0052) Frame of Reference UID UI: 1.3.6.1.4.1.14519.5.2.1.151315482802192106755560105964415801607\n", + "(0020, 1040) Position Reference Indicator LO: 'OM'\n", + "(0020, 1041) Slice Location DS: '-106.25'\n", + "(0028, 0002) Samples per Pixel US: 1\n", + "(0028, 0004) Photometric Interpretation CS: 'MONOCHROME2'\n", + "(0028, 0010) Rows US: 512\n", + "(0028, 0011) Columns US: 512\n", + "(0028, 0030) Pixel Spacing DS: [0.746094, 0.746094]\n", + "(0028, 0100) Bits Allocated US: 16\n", + "(0028, 0101) Bits Stored US: 16\n", + "(0028, 0102) High Bit US: 15\n", + "(0028, 0103) Pixel Representation US: 1\n", + "(0028, 0303) Longitudinal Temporal Information M CS: 'MODIFIED'\n", + "(0028, 1050) Window Center DS: '50.0'\n", + "(0028, 1051) Window Width DS: '130.0'\n", + "(0028, 1052) Rescale Intercept DS: '-1000.0'\n", + "(0028, 1053) Rescale Slope DS: '1.0'\n", + "(0028, 1054) Rescale Type LO: 'HU'\n", + "(300e, 0008) Reviewer Name PN: ''\n", + "(7fe0, 0010) Pixel Data OW: Array of 524288 elements\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'FileDataset' object has no attribute 'ReferencedSOPInstanceUID'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[103], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m paths_RT \u001b[38;5;241m=\u001b[39m \u001b[43mget_dirs_RT\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpaths_images_all\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m paths_RT\n", + "Cell \u001b[0;32mIn[102], line 59\u001b[0m, in \u001b[0;36mget_dirs_RT\u001b[0;34m(paths_images_all, dicoPATH)\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m path_2 \u001b[38;5;129;01min\u001b[39;00m paths_images_all:\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28mprint\u001b[39m(set_images[\u001b[38;5;241m0\u001b[39m])\n\u001b[0;32m---> 59\u001b[0m RS_file \u001b[38;5;241m=\u001b[39m search_RS_path(path_2,\u001b[43mset_images\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mReferencedSOPInstanceUID\u001b[49m)\n\u001b[1;32m 60\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m RS_file\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 61\u001b[0m paths[path] \u001b[38;5;241m=\u001b[39m path_2\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/pydicom/dataset.py:908\u001b[0m, in \u001b[0;36mDataset.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 906\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m {}\n\u001b[1;32m 907\u001b[0m \u001b[38;5;66;03m# Try the base class attribute getter (fix for issue 332)\u001b[39;00m\n\u001b[0;32m--> 908\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mobject\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getattribute__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'FileDataset' object has no attribute 'ReferencedSOPInstanceUID'" + ] + } + ], + "source": [ + "paths_RT = get_dirs_RT(paths_images_all,False)\n", + "paths_RT" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "ddb81b8b-2147-41eb-8fc6-3101dd16d993", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'/mnt/iDriveShare/Kayla/CBCT_images/kayla_extracted/19/20180411_CT_09_APR_2018/RS.1.2.246.352.221.517676499749755326116065057580640769465.dcm': '/mnt/iDriveShare/Kayla/CBCT_images/kayla_extracted/19/20180411_CT_09_APR_2018/RD.1.2.246.352.221.496653093475654566110581392788903530119.dcm',\n", + " '/mnt/iDriveShare/Kayla/CBCT_images/kayla_extracted/19/20180515_CT_10_MAY_2018/RS.1.2.246.352.221.512918800176871666811861798212289084078.dcm': '/mnt/iDriveShare/Kayla/CBCT_images/kayla_extracted/19/20180515_CT_10_MAY_2018/RD.1.2.246.352.221.51974249515870709541297634066003681696.dcm'}" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "paths_RD = get_dirs_RD(paths_RT,True)\n", + "paths_RD" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "7fd9b5b8-f23c-40f0-b9a8-4e390a53a2e9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306\n", + "../examples/GBM_burdenko_example/1/1.000000-RTSTRUCT-83947\n", + "../examples/GBM_burdenko_example/1/0.000000-RTSTRUCT-45697\n" + ] + } + ], + "source": [ + "for key in paths_RT.items():\n", + " print(paths_RT[key[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "fd4c41e5-314a-4d1d-ab31-1570f4ddd0d6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161\n" + ] + } + ], + "source": [ + "for key in paths_RD.items():\n", + " print(paths_RD[key[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f489848d-66fd-4b12-bf3b-b0287533e0c4", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n" + ] + } + ], + "source": [ + "#GET THE SET OF THE IMAGES OF THE PATIENTS\n", + "for path in paths_images_all:\n", + " set_images = get_set_images(path)\n", + " #if len(set_images)==0:\n", + " #continue\n", + " #else:\n", + " #save_dicom_attributes_and_volume(path,new_path_save_images)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4a58ee50-4b6d-4c62-b2d5-177f9c1466b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1520" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gc\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d1074825-803f-4db2-aa5d-97302c10ebb9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n", + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics' exists.\n", + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT' exists.\n", + "--------------------------------------------------------\n", + "- Wrote nrrd file for RT structure Brain file seg_Brain to ../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT -\n", + "--------------------------------------------------------\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "GLCM is symmetrical, therefore Sum Average = 2 * Joint Average, only 1 needs to be calculated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/voxel_based' exists.\n" + ] + }, + { + "ename": "MemoryError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMemoryError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 10\u001b[0m\n\u001b[1;32m 8\u001b[0m RS_file\u001b[38;5;241m.\u001b[39msort(key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m x: (x\u001b[38;5;241m.\u001b[39mStructureSetDate))\n\u001b[1;32m 9\u001b[0m ROis \u001b[38;5;241m=\u001b[39m get_ROI_keys_2(RS_file[\u001b[38;5;241m0\u001b[39m])\n\u001b[0;32m---> 10\u001b[0m \u001b[43mradiomics_utils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_ROI_folders_and_radiomics_specific\u001b[49m\u001b[43m(\u001b[49m\u001b[43mRS_file\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBrain\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mfolder_path_radiomics\u001b[49m\u001b[43m,\u001b[49m\u001b[43mset_images\u001b[49m\u001b[43m,\u001b[49m\u001b[43mnew_path_save_images\u001b[49m\u001b[43m)\u001b[49m \n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m#except:\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m# continue\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#print(RS_file)\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n", + "File \u001b[0;32m~/mCODE-MOSAICO/examples/../utils/radiomics_utils.py:253\u001b[0m, in \u001b[0;36mcreate_ROI_folders_and_radiomics_specific\u001b[0;34m(RS_file, ROI, folder_path_radiomics, set_images, new_path_save_images)\u001b[0m\n\u001b[1;32m 250\u001b[0m create_folder(RS_save_path\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/voxel_based\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 252\u001b[0m \u001b[38;5;66;03m#try:\u001b[39;00m\n\u001b[0;32m--> 253\u001b[0m \u001b[43mget_radiomics\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvoxel\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mimage_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43mmask_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43mROI\u001b[49m\u001b[43m,\u001b[49m\u001b[43mRS_save_path\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/mCODE-MOSAICO/examples/../utils/radiomics_utils.py:522\u001b[0m, in \u001b[0;36mget_radiomics\u001b[0;34m(method, image_file, mask_file, ROIName, path_radiomics)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[38;5;66;03m#featureVector = extractor.execute(image,image)\u001b[39;00m\n\u001b[1;32m 519\u001b[0m \n\u001b[1;32m 520\u001b[0m \u001b[38;5;66;03m#TO DO: reshape the feature map\u001b[39;00m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvoxel\u001b[39m\u001b[38;5;124m'\u001b[39m: \n\u001b[0;32m--> 522\u001b[0m featureVector \u001b[38;5;241m=\u001b[39m \u001b[43mextractor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimageName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmaskName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvoxelBased\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 523\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key, val \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(featureVector):\n\u001b[1;32m 524\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(val, sitk\u001b[38;5;241m.\u001b[39mImage): \u001b[38;5;66;03m# Feature map\u001b[39;00m\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/featureextractor.py:330\u001b[0m, in \u001b[0;36mRadiomicsFeatureExtractor.execute\u001b[0;34m(self, imageFilepath, maskFilepath, label, label_channel, voxelBased)\u001b[0m\n\u001b[1;32m 328\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCalculating features for \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m image\u001b[39m\u001b[38;5;124m'\u001b[39m, imageTypeName)\n\u001b[1;32m 329\u001b[0m inputImage, inputMask \u001b[38;5;241m=\u001b[39m imageoperations\u001b[38;5;241m.\u001b[39mcropToTumorMask(inputImage, mask, boundingBox, padDistance\u001b[38;5;241m=\u001b[39mkernelRadius)\n\u001b[0;32m--> 330\u001b[0m featureVector\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcomputeFeatures\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputImage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputMask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mimageTypeName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputKwargs\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 332\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFeatures extracted\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m featureVector\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/featureextractor.py:517\u001b[0m, in \u001b[0;36mRadiomicsFeatureExtractor.computeFeatures\u001b[0;34m(self, image, mask, imageTypeName, **kwargs)\u001b[0m\n\u001b[1;32m 514\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m feature \u001b[38;5;129;01min\u001b[39;00m featureNames:\n\u001b[1;32m 515\u001b[0m featureClass\u001b[38;5;241m.\u001b[39menableFeatureByName(feature)\n\u001b[0;32m--> 517\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m (featureName, featureValue) \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(\u001b[43mfeatureClass\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m):\n\u001b[1;32m 518\u001b[0m newFeatureName \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (imageTypeName, featureClassName, featureName)\n\u001b[1;32m 519\u001b[0m featureVector[newFeatureName] \u001b[38;5;241m=\u001b[39m featureValue\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:183\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase.execute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menableAllFeatures()\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvoxelBased:\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_calculateVoxels\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateSegment()\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:209\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase._calculateVoxels\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 207\u001b[0m voxelCoords \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabelledVoxelCoordinates[:, voxel_batch_idx:voxel_batch_idx \u001b[38;5;241m+\u001b[39m voxelBatch]\n\u001b[1;32m 208\u001b[0m \u001b[38;5;66;03m# Calculate the feature values for the current kernel\u001b[39;00m\n\u001b[0;32m--> 209\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m success, featureName, featureValue \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateFeatures(voxelCoords):\n\u001b[1;32m 210\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m success:\n\u001b[1;32m 211\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfeatureValues[featureName][\u001b[38;5;28mtuple\u001b[39m(voxelCoords)] \u001b[38;5;241m=\u001b[39m featureValue\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:231\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase._calculateFeatures\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_calculateFeatures\u001b[39m(\u001b[38;5;28mself\u001b[39m, voxelCoordinates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 229\u001b[0m \u001b[38;5;66;03m# Initialize the calculation\u001b[39;00m\n\u001b[1;32m 230\u001b[0m \u001b[38;5;66;03m# This function serves to calculate the texture matrices where applicable\u001b[39;00m\n\u001b[0;32m--> 231\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_initCalculation\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvoxelCoordinates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCalculating features\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m feature, enabled \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menabledFeatures):\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/glcm.py:111\u001b[0m, in \u001b[0;36mRadiomicsGLCM._initCalculation\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_initCalculation\u001b[39m(\u001b[38;5;28mself\u001b[39m, voxelCoordinates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m--> 111\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mP_glcm \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_calculateMatrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvoxelCoordinates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateCoefficients()\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mGLCM feature class initialized, calculated GLCM with shape \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mP_glcm\u001b[38;5;241m.\u001b[39mshape)\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/glcm.py:139\u001b[0m, in \u001b[0;36mRadiomicsGLCM._calculateMatrix\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 136\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvoxelBased:\n\u001b[1;32m 137\u001b[0m matrix_args \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msettings\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mkernelRadius\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;241m1\u001b[39m), voxelCoordinates]\n\u001b[0;32m--> 139\u001b[0m P_glcm, angles \u001b[38;5;241m=\u001b[39m \u001b[43mcMatrices\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_glcm\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmatrix_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mProcess calculated matrix\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 143\u001b[0m \u001b[38;5;66;03m# Delete rows and columns that specify gray levels not present in the ROI\u001b[39;00m\n", + "\u001b[0;31mMemoryError\u001b[0m: " + ] + } + ], + "source": [ + "paths_images_RS = {}\n", + "for path in paths_images_all:\n", + " set_images = get_set_images(path)\n", + " if len(set_images)!=0:\n", + " for path_2 in paths_images_all:\n", + " RS_file = search_RS_file(path_2,set_images[0].SeriesDescription)\n", + " \n", + " #if len(RS_file)!=0:\n", + " #RS_file.sort(key = lambda x: (x.StructureSetDate))\n", + " #ROis = get_ROI_keys_2(RS_file[0])\n", + " #radiomics_utils.create_ROI_folders_and_radiomics_specific(RS_file[0],'Brain',folder_path_radiomics,set_images,new_path_save_images) \n", + " #except:\n", + " # continue\n", + " #print(RS_file)\n", + " \n", + " #\n", + " #\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7deb2328-4ad9-4ca9-91c7-6e002e5a1132", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c028d6f2-4260-46e1-bffb-67cc4d86e372", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdcc3f42-6ebd-49b7-b7cc-26a2a6dfaa57", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11f82404-783e-456a-86d1-c5c84f239962", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "226dab8f-c37c-43a3-872c-75703813b280", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/.ipynb_checkpoints/examples_radiomics-checkpoint.ipynb b/examples/.ipynb_checkpoints/examples_radiomics-checkpoint.ipynb new file mode 100644 index 0000000..dedc876 --- /dev/null +++ b/examples/.ipynb_checkpoints/examples_radiomics-checkpoint.ipynb @@ -0,0 +1,587 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ba5041e3", + "metadata": {}, + "outputs": [], + "source": [ + "import pydicom as dcm\n", + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "from matplotlib import pyplot as plt\n", + "import json\n", + "\n", + "import sys\n", + "sys.path.append('../utils')\n", + "import radiomics_utils\n", + "from radiomics_utils import *" + ] + }, + { + "cell_type": "markdown", + "id": "04a0895d-6992-43a2-9c1b-080e0ec7b34d", + "metadata": {}, + "source": [ + "# (1) Extract Radiomics Features" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "98adb6dc-23cc-462d-8543-299a1af860fc", + "metadata": {}, + "outputs": [], + "source": [ + "#DEFINE THE PATHS\n", + "RS_file_path = '/mnt/iDriveShare/OdetteR/RS.1.2.246.352.221.5025178147081550296.39585418623785370.dcm'\n", + "RD_file_path = '/mnt/iDriveShare/OdetteR/RD.1.2.246.352.221.5033396232640089036.3564551512373665180.dcm'\n", + "PATH_TO_SAVE = ''\n", + "dir_image_path = '../examples/GBM_burdenko_example/'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "568b9b6a-2bb8-4e2b-85ff-35da77706d28", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#GET THE SET OF THE MEDICAL IMAGES TO ANALYZE\n", + "get_set_images(dir_image_path)" + ] + }, + { + "cell_type": "markdown", + "id": "90413e13-e05b-4819-8fd2-83734e800d4e", + "metadata": {}, + "source": [ + "# (2) Extract Dosiomics Features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a4efec0-4665-42be-a8eb-2fe8d76c32f6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "01356d5f", + "metadata": {}, + "source": [ + "# (3) Extract Dosimetric Features" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e93ccc7e-a588-45d6-a10b-0905c6295e2e", + "metadata": {}, + "outputs": [], + "source": [ + "#DEFINE THE PATHS\n", + "RS_file_path = '/mnt/iDriveShare/OdetteR/RS.1.2.246.352.221.5025178147081550296.39585418623785370.dcm'\n", + "RD_file_path = '/mnt/iDriveShare/OdetteR/RD.1.2.246.352.221.5033396232640089036.3564551512373665180.dcm'\n", + "PATH_TO_SAVE = ''" + ] + }, + { + "cell_type": "markdown", + "id": "ce696a24-28da-4839-a2fa-ba6fd1a68b1e", + "metadata": {}, + "source": [ + "### Get the dosimetric factors for one structure" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c65921d7-8850-4452-abdd-71af09b9ab4d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034, 'V0.5cc': 13118.5072209096}\n", + "\n", + "\n", + "----------BODY JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n" + ] + } + ], + "source": [ + "# DEFINE THE DOSIMETRIC FACTORS YOU WANT \n", + "# THE DEFAULT FACTORS ARE: D0%, D100%, D50%, Mean Dose.\n", + "#To define the volume factors write: V20cc, V0.5cc\n", + "\n", + "#if you want to get the factor for all the structure input 'all', otherwise you can the results for one structrue typing the label\n", + "#I THINK THE BODY DOES NOT HAVE DHV VALUES \n", + "\n", + "all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors = ['D0', 'D100', 'D50','mean','V0.5cc'],ROI_names = 'BODY')\n" + ] + }, + { + "cell_type": "markdown", + "id": "aa6d88d4-7b21-499e-be46-8cc430179d49", + "metadata": {}, + "source": [ + "### Get the dosimetric factors for all structures" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1d920cd7-6d16-4931-b8bc-109256025e3d", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034}\n", + "\n", + "\n", + "----------BODY JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BrachialPlexus_L', 'units': 'GY', 'D0': 63.08999999999602, 'D100': 31.120000000002065, 'D50': 48.129999999998994, 'mean': 48.24932504374163}\n", + "\n", + "\n", + "----------BrachialPlexus_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Sup', 'units': 'GY', 'D0': 73.39000000000064, 'D100': 0.0, 'D50': 71.06999999999945, 'mean': 69.95433860014305}\n", + "\n", + "\n", + "----------PharCon_Sup JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BoneRadCalc', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.01, 'D50': 2.569999999999989, 'mean': 11.781885296206337}\n", + "\n", + "\n", + "----------BoneRadCalc JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brain', 'units': 'GY', 'D0': 39.320000000000746, 'D100': 0.25000000000000006, 'D50': 0.9500000000000006, 'mean': 2.517160116394192}\n", + "\n", + "\n", + "----------Brain JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Pituitary', 'units': 'GY', 'D0': 3.139999999999977, 'D100': 0.0, 'D50': 2.9399999999999813, 'mean': 2.9435141301097176}\n", + "\n", + "\n", + "----------Pituitary JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BrachialPlexus_R', 'units': 'GY', 'D0': 67.14999999999745, 'D100': 35.58000000000149, 'D50': 52.35999999999815, 'mean': 52.72075531992825}\n", + "\n", + "\n", + "----------BrachialPlexus_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'TemporalLobe_L', 'units': 'GY', 'D0': 5.799999999999921, 'D100': 0.49000000000000027, 'D50': 1.6100000000000012, 'mean': 1.8414351317501298}\n", + "\n", + "\n", + "----------TemporalLobe_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Eye_R', 'units': 'GY', 'D0': 2.109999999999999, 'D100': 0.9100000000000006, 'D50': 1.400000000000001, 'mean': 1.4108398390666461}\n", + "\n", + "\n", + "----------Eye_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Inf', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 47.5799999999991, 'D50': 70.99999999999942, 'mean': 66.67849889960024}\n", + "\n", + "\n", + "----------PharCon_Inf JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Esophagus_Upper', 'units': 'GY', 'D0': 60.00999999999663, 'D100': 0.34000000000000014, 'D50': 4.519999999999948, 'mean': 15.862390748161694}\n", + "\n", + "\n", + "----------Esophagus_Upper JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SpinalCord', 'units': 'GY', 'D0': 31.61000000000214, 'D100': 0.25000000000000006, 'D50': 25.78000000000123, 'mean': 16.954778127631347}\n", + "\n", + "\n", + "----------SpinalCord JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SubmndSalv_R', 'units': 'GY', 'D0': 73.80000000000085, 'D100': 64.309999999996, 'D50': 71.68999999999977, 'mean': 71.34122256100727}\n", + "\n", + "\n", + "----------SubmndSalv_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Mandible', 'units': 'GY', 'D0': 73.68000000000079, 'D100': 5.079999999999936, 'D50': 43.27999999999996, 'mean': 44.48027023280471}\n", + "\n", + "\n", + "----------Mandible JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Parotid_L', 'units': 'GY', 'D0': 73.75000000000082, 'D100': 13.519999999999756, 'D50': 42.71000000000007, 'mean': 44.31780152397997}\n", + "\n", + "\n", + "----------Parotid_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Larynx', 'units': 'GY', 'D0': 74.45000000000118, 'D100': 53.249999999997975, 'D50': 71.33999999999959, 'mean': 69.76499584305088}\n", + "\n", + "\n", + "----------Larynx JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lens_L', 'units': 'GY', 'D0': 1.5500000000000012, 'D100': 1.1900000000000008, 'D50': 1.340000000000001, 'mean': 1.3456971443396637}\n", + "\n", + "\n", + "----------Lens_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'TemporalLobe_R', 'units': 'GY', 'D0': 6.349999999999909, 'D100': 0.5300000000000002, 'D50': 1.7300000000000013, 'mean': 1.940498069401837}\n", + "\n", + "\n", + "----------TemporalLobe_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lips', 'units': 'GY', 'D0': 22.44000000000071, 'D100': 2.4499999999999917, 'D50': 12.659999999999775, 'mean': 12.74151854563645}\n", + "\n", + "\n", + "----------Lips JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brainstem_PRV5', 'units': 'GY', 'D0': 27.140000000001443, 'D100': 1.360000000000001, 'D50': 3.9199999999999604, 'mean': 7.556756500917696}\n", + "\n", + "\n", + "----------Brainstem_PRV5 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OpticNerve_R', 'units': 'GY', 'D0': 2.439999999999992, 'D100': 1.5800000000000012, 'D50': 2.0400000000000005, 'mean': 2.0308479713918173}\n", + "\n", + "\n", + "----------OpticNerve_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OpticNerve_L', 'units': 'GY', 'D0': 2.3199999999999945, 'D100': 1.5100000000000011, 'D50': 1.9400000000000015, 'mean': 1.9427105584239939}\n", + "\n", + "\n", + "----------OpticNerve_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PAROTID_L_NOS', 'units': 'GY', 'D0': 55.72999999999748, 'D100': 13.519999999999756, 'D50': 34.67000000000167, 'mean': 35.124731324344936}\n", + "\n", + "\n", + "----------PAROTID_L_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PAROTID_R_NOS', 'units': 'GY', 'D0': 55.54999999999752, 'D100': 13.059999999999766, 'D50': 33.190000000001966, 'mean': 33.435691202934386}\n", + "\n", + "\n", + "----------PAROTID_R_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LUNG_L', 'units': 'GY', 'D0': 41.38000000000034, 'D100': 0.20000000000000004, 'D50': 1.390000000000001, 'mean': 2.6167874969022558}\n", + "\n", + "\n", + "----------LUNG_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LUNG_R', 'units': 'GY', 'D0': 42.13000000000019, 'D100': 0.21000000000000005, 'D50': 1.380000000000001, 'mean': 2.3016952334984366}\n", + "\n", + "\n", + "----------LUNG_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'ESOPHAGUS_2CM', 'units': 'GY', 'D0': 60.00999999999663, 'D100': 4.699999999999944, 'D50': 32.70000000000206, 'mean': 31.142471374192258}\n", + "\n", + "\n", + "----------ESOPHAGUS_2CM JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV70+PTV60', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 53.65999999999789, 'D50': 68.0299999999979, 'mean': 67.61579412005825}\n", + "\n", + "\n", + "----------PTV70+PTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV_ALL', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 50.829999999998456, 'D50': 65.27999999999649, 'mean': 65.90769008033311}\n", + "\n", + "\n", + "----------PTV_ALL JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LARYNX_NOS', 'units': 'GY', 'D0': 66.16999999999695, 'D100': 53.249999999997975, 'D50': 60.54999999999652, 'mean': 60.19495324918354}\n", + "\n", + "\n", + "----------LARYNX_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OralCavity_NOS', 'units': 'GY', 'D0': 65.4799999999966, 'D100': 7.179999999999891, 'D50': 34.350000000001735, 'mean': 35.292158391127984}\n", + "\n", + "\n", + "----------OralCavity_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'AVOID 56', 'units': 'GY', 'D0': 61.10999999999641, 'D100': 28.350000000001632, 'D50': 57.24999999999718, 'mean': 56.0668940613376}\n", + "\n", + "\n", + "----------AVOID 56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'AVOID 60', 'units': 'GY', 'D0': 69.0099999999984, 'D100': 28.85000000000171, 'D50': 61.85999999999626, 'mean': 60.91755369271381}\n", + "\n", + "\n", + "----------AVOID 60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 56', 'units': 'GY', 'D0': 58.18999999999699, 'D100': 3.5899999999999674, 'D50': 35.010000000001604, 'mean': 32.33822042943649}\n", + "\n", + "\n", + "----------RING 56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 60', 'units': 'GY', 'D0': 63.30999999999597, 'D100': 3.8799999999999613, 'D50': 42.21000000000017, 'mean': 41.49827693799373}\n", + "\n", + "\n", + "----------RING 60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 70', 'units': 'GY', 'D0': 72.22000000000004, 'D100': 5.139999999999935, 'D50': 57.33999999999716, 'mean': 52.777156206112835}\n", + "\n", + "\n", + "----------RING 70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'MIDDLE AVOID', 'units': 'GY', 'D0': 62.33999999999617, 'D100': 12.84999999999977, 'D50': 51.91999999999824, 'mean': 49.308600443594074}\n", + "\n", + "\n", + "----------MIDDLE AVOID JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'POST AVOID', 'units': 'GY', 'D0': 44.459999999999724, 'D100': 0.0, 'D50': 26.10000000000128, 'mean': 24.78531014103551}\n", + "\n", + "\n", + "----------POST AVOID JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SHOULDERS', 'units': 'GY', 'D0': 26.980000000001418, 'D100': 0.5700000000000003, 'D50': 4.759999999999943, 'mean': 6.432666291608502}\n", + "\n", + "\n", + "----------SHOULDERS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lens_R', 'units': 'GY', 'D0': 1.5700000000000012, 'D100': 1.2100000000000009, 'D50': 1.360000000000001, 'mean': 1.3708988013898094}\n", + "\n", + "\n", + "----------Lens_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Cochlea_R', 'units': 'GY', 'D0': 10.789999999999814, 'D100': 4.809999999999942, 'D50': 6.149999999999913, 'mean': 6.802517071499305}\n", + "\n", + "\n", + "----------Cochlea_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Parotid_R', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 13.059999999999766, 'D50': 37.76000000000106, 'mean': 40.97684368573284}\n", + "\n", + "\n", + "----------Parotid_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Eye_L', 'units': 'GY', 'D0': 2.1899999999999973, 'D100': 0.9100000000000006, 'D50': 1.390000000000001, 'mean': 1.412414381345314}\n", + "\n", + "\n", + "----------Eye_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Mid', 'units': 'GY', 'D0': 73.59000000000074, 'D100': 64.18999999999593, 'D50': 72.10999999999999, 'mean': 71.3000647243097}\n", + "\n", + "\n", + "----------PharCon_Mid JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Thyroid', 'units': 'GY', 'D0': 72.65000000000026, 'D100': 49.679999999998685, 'D50': 57.169999999997195, 'mean': 57.16648470918692}\n", + "\n", + "\n", + "----------Thyroid JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Cochlea_L', 'units': 'GY', 'D0': 12.229999999999784, 'D100': 0.0, 'D50': 7.0799999999998935, 'mean': 7.674024321878931}\n", + "\n", + "\n", + "----------Cochlea_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SpinalCord_PRV5', 'units': 'GY', 'D0': 39.92000000000063, 'D100': 0.24000000000000007, 'D50': 26.48000000000134, 'mean': 18.522233473045542}\n", + "\n", + "\n", + "----------SpinalCord_PRV5 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Chiasm', 'units': 'GY', 'D0': 2.1799999999999975, 'D100': 1.7500000000000013, 'D50': 1.9700000000000015, 'mean': 1.9642507698029732}\n", + "\n", + "\n", + "----------Chiasm JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brainstem', 'units': 'GY', 'D0': 22.490000000000716, 'D100': 1.6900000000000013, 'D50': 4.099999999999957, 'mean': 7.235430969796047}\n", + "\n", + "\n", + "----------Brainstem JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OralCavity', 'units': 'GY', 'D0': 74.090000000001, 'D100': 7.179999999999891, 'D50': 44.47999999999972, 'mean': 44.26944893359331}\n", + "\n", + "\n", + "----------OralCavity JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV60', 'units': 'GY', 'D0': 74.12000000000101, 'D100': 58.329999999996964, 'D50': 65.25999999999648, 'mean': 66.19974988117924}\n", + "\n", + "\n", + "----------CTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV70', 'units': 'GY', 'D0': 74.74000000000133, 'D100': 0.0, 'D50': 72.16000000000001, 'mean': 72.10643745253883}\n", + "\n", + "\n", + "----------CTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'GTV70', 'units': 'GY', 'D0': 74.50000000000121, 'D100': 0.0, 'D50': 72.00999999999993, 'mean': 71.97108846611944}\n", + "\n", + "\n", + "----------GTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CARINA', 'units': 'GY', 'D0': 2.759999999999985, 'D100': 0.34000000000000014, 'D50': 1.2200000000000009, 'mean': 1.3727575566465058}\n", + "\n", + "\n", + "----------CARINA JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV56', 'units': 'GY', 'D0': 60.31999999999657, 'D100': 50.36999999999855, 'D50': 57.90999999999705, 'mean': 57.8644303881639}\n", + "\n", + "\n", + "----------CTV56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV70', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 65.18999999999645, 'D50': 71.9299999999999, 'mean': 71.78635390717827}\n", + "\n", + "\n", + "----------PTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV60', 'units': 'GY', 'D0': 72.19000000000003, 'D100': 53.65999999999789, 'D50': 63.82999999999587, 'mean': 64.02441745265358}\n", + "\n", + "\n", + "----------PTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV56', 'units': 'GY', 'D0': 61.10999999999641, 'D100': 50.6099999999985, 'D50': 57.80999999999707, 'mean': 57.758823467388126}\n", + "\n", + "\n", + "----------PTV56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "---------POST Avoid30 does not have DVH information ----------------\n", + "---------SubmndSalv_L does not have DVH information ----------------\n", + "---------PHARYNX does not have DVH information ----------------\n", + "{'ROI Name': 'GTVp', 'units': 'GY', 'D0': 36.160000000001375, 'D100': 2.7299999999999858, 'D50': 24.330000000001004, 'mean': 22.558829644061664}\n", + "\n", + "\n", + "----------GTVp JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'GTVn', 'units': 'GY', 'D0': 73.16000000000052, 'D100': 61.75999999999628, 'D50': 69.0199999999984, 'mean': 68.88324339991766}\n", + "\n", + "\n", + "----------GTVn JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'DENSITY_OVERIDE', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 47.5799999999991, 'D50': 71.40999999999963, 'mean': 68.76466606856228}\n", + "\n", + "\n", + "----------DENSITY_OVERIDE JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n" + ] + } + ], + "source": [ + "all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors = ['D0', 'D100', 'D50','mean'],ROI_names = 'all')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8663c7f8-62f5-4a40-b86a-1e8f66df1ade", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/GBM_burdenko_example/1/0.000000-RTSTRUCT-45697/1-1.dcm b/examples/GBM_burdenko_example/1/0.000000-RTSTRUCT-45697/1-1.dcm new file mode 100644 index 0000000..ae10e5e Binary files /dev/null and b/examples/GBM_burdenko_example/1/0.000000-RTSTRUCT-45697/1-1.dcm differ diff --git a/examples/GBM_burdenko_example/1/1.000000-RTSTRUCT-83947/1-1.dcm b/examples/GBM_burdenko_example/1/1.000000-RTSTRUCT-83947/1-1.dcm new file mode 100644 index 0000000..18289a4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/1.000000-RTSTRUCT-83947/1-1.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-001.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-001.dcm new file mode 100644 index 0000000..2603119 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-001.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-002.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-002.dcm new file mode 100644 index 0000000..380b57f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-002.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-003.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-003.dcm new file mode 100644 index 0000000..d921cae Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-003.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-004.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-004.dcm new file mode 100644 index 0000000..dcb323c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-004.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-005.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-005.dcm new file mode 100644 index 0000000..e8eed74 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-005.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-006.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-006.dcm new file mode 100644 index 0000000..83757a7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-006.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-007.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-007.dcm new file mode 100644 index 0000000..e8c08be Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-007.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-008.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-008.dcm new file mode 100644 index 0000000..69dca24 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-008.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-009.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-009.dcm new file mode 100644 index 0000000..8e0268c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-009.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-010.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-010.dcm new file mode 100644 index 0000000..852b924 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-010.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-011.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-011.dcm new file mode 100644 index 0000000..ce8dbc2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-011.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-012.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-012.dcm new file mode 100644 index 0000000..fadde95 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-012.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-013.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-013.dcm new file mode 100644 index 0000000..3acbb0e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-013.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-014.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-014.dcm new file mode 100644 index 0000000..a6a1d61 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-014.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-015.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-015.dcm new file mode 100644 index 0000000..6f00679 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-015.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-016.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-016.dcm new file mode 100644 index 0000000..1d362b9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-016.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-017.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-017.dcm new file mode 100644 index 0000000..0862de6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-017.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-018.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-018.dcm new file mode 100644 index 0000000..bd27077 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-018.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-019.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-019.dcm new file mode 100644 index 0000000..5fe6004 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-019.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-020.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-020.dcm new file mode 100644 index 0000000..48ce6cd Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-020.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-021.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-021.dcm new file mode 100644 index 0000000..601a8d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-021.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-022.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-022.dcm new file mode 100644 index 0000000..b9cd400 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-022.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-023.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-023.dcm new file mode 100644 index 0000000..3da47b4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-023.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-024.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-024.dcm new file mode 100644 index 0000000..19f672e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-024.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-025.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-025.dcm new file mode 100644 index 0000000..1dba2b4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-025.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-026.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-026.dcm new file mode 100644 index 0000000..bda499d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-026.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-027.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-027.dcm new file mode 100644 index 0000000..55822a9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-027.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-028.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-028.dcm new file mode 100644 index 0000000..f994f0a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-028.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-029.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-029.dcm new file mode 100644 index 0000000..2a16187 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-029.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-030.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-030.dcm new file mode 100644 index 0000000..7aeb88a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-030.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-031.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-031.dcm new file mode 100644 index 0000000..2348dab Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-031.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-032.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-032.dcm new file mode 100644 index 0000000..58a0e95 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-032.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-033.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-033.dcm new file mode 100644 index 0000000..c400bf9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-033.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-034.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-034.dcm new file mode 100644 index 0000000..c37c3d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-034.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-035.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-035.dcm new file mode 100644 index 0000000..03149d8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-035.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-036.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-036.dcm new file mode 100644 index 0000000..e952a57 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-036.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-037.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-037.dcm new file mode 100644 index 0000000..1fe64df Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-037.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-038.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-038.dcm new file mode 100644 index 0000000..d752c21 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-038.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-039.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-039.dcm new file mode 100644 index 0000000..6f7fec0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-039.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-040.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-040.dcm new file mode 100644 index 0000000..399bdba Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-040.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-041.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-041.dcm new file mode 100644 index 0000000..0dd2e57 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-041.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-042.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-042.dcm new file mode 100644 index 0000000..bb39e55 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-042.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-043.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-043.dcm new file mode 100644 index 0000000..dcea7fe Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-043.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-044.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-044.dcm new file mode 100644 index 0000000..569ea2a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-044.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-045.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-045.dcm new file mode 100644 index 0000000..96b4903 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-045.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-046.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-046.dcm new file mode 100644 index 0000000..a5ecc78 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-046.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-047.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-047.dcm new file mode 100644 index 0000000..ada9611 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-047.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-048.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-048.dcm new file mode 100644 index 0000000..fba0539 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-048.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-049.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-049.dcm new file mode 100644 index 0000000..ef62445 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-049.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-050.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-050.dcm new file mode 100644 index 0000000..a7b57cd Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-050.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-051.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-051.dcm new file mode 100644 index 0000000..9b305a8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-051.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-052.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-052.dcm new file mode 100644 index 0000000..4d45b0b Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-052.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-053.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-053.dcm new file mode 100644 index 0000000..3eee4db Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-053.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-054.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-054.dcm new file mode 100644 index 0000000..8853720 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-054.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-055.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-055.dcm new file mode 100644 index 0000000..9cd0df1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-055.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-056.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-056.dcm new file mode 100644 index 0000000..bd1cb00 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-056.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-057.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-057.dcm new file mode 100644 index 0000000..1ea9002 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-057.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-058.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-058.dcm new file mode 100644 index 0000000..b0e0cb0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-058.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-059.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-059.dcm new file mode 100644 index 0000000..5eb34c3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-059.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-060.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-060.dcm new file mode 100644 index 0000000..1c5036d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-060.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-061.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-061.dcm new file mode 100644 index 0000000..f5877c8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-061.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-062.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-062.dcm new file mode 100644 index 0000000..dc85206 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-062.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-063.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-063.dcm new file mode 100644 index 0000000..ed98001 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-063.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-064.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-064.dcm new file mode 100644 index 0000000..9c0f7dd Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-064.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-065.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-065.dcm new file mode 100644 index 0000000..e65559e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-065.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-066.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-066.dcm new file mode 100644 index 0000000..0c8ce5a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-066.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-067.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-067.dcm new file mode 100644 index 0000000..3d0bced Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-067.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-068.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-068.dcm new file mode 100644 index 0000000..e793201 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-068.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-069.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-069.dcm new file mode 100644 index 0000000..bfe7bef Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-069.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-070.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-070.dcm new file mode 100644 index 0000000..d365ab1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-070.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-071.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-071.dcm new file mode 100644 index 0000000..af541db Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-071.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-072.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-072.dcm new file mode 100644 index 0000000..b8b8aa1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-072.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-073.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-073.dcm new file mode 100644 index 0000000..3d7a3ae Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-073.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-074.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-074.dcm new file mode 100644 index 0000000..00bda0f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-074.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-075.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-075.dcm new file mode 100644 index 0000000..0b744fa Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-075.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-076.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-076.dcm new file mode 100644 index 0000000..52978ad Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-076.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-077.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-077.dcm new file mode 100644 index 0000000..20c0d7c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-077.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-078.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-078.dcm new file mode 100644 index 0000000..065dd21 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-078.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-079.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-079.dcm new file mode 100644 index 0000000..d42ecf8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-079.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-080.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-080.dcm new file mode 100644 index 0000000..5e7cac8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-080.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-081.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-081.dcm new file mode 100644 index 0000000..356a43e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-081.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-082.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-082.dcm new file mode 100644 index 0000000..8331604 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-082.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-083.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-083.dcm new file mode 100644 index 0000000..85f8557 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-083.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-084.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-084.dcm new file mode 100644 index 0000000..8ec80e4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-084.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-085.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-085.dcm new file mode 100644 index 0000000..2786304 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-085.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-086.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-086.dcm new file mode 100644 index 0000000..0ea8491 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-086.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-087.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-087.dcm new file mode 100644 index 0000000..53fcff6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-087.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-088.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-088.dcm new file mode 100644 index 0000000..d885a08 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-088.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-089.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-089.dcm new file mode 100644 index 0000000..f3a4d0d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-089.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-090.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-090.dcm new file mode 100644 index 0000000..058fb0b Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-090.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-091.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-091.dcm new file mode 100644 index 0000000..4d2b62e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-091.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-092.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-092.dcm new file mode 100644 index 0000000..e583dd4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-092.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-093.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-093.dcm new file mode 100644 index 0000000..da3d9b8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-093.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-094.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-094.dcm new file mode 100644 index 0000000..92d1dd6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-094.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-095.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-095.dcm new file mode 100644 index 0000000..1b58796 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-095.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-096.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-096.dcm new file mode 100644 index 0000000..1780bc6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-096.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-097.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-097.dcm new file mode 100644 index 0000000..df663f0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-097.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-098.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-098.dcm new file mode 100644 index 0000000..89e6282 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-098.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-099.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-099.dcm new file mode 100644 index 0000000..57c22db Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-099.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-100.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-100.dcm new file mode 100644 index 0000000..965d0ae Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-100.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-101.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-101.dcm new file mode 100644 index 0000000..3f657ab Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-101.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-102.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-102.dcm new file mode 100644 index 0000000..df2e2e0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-102.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-103.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-103.dcm new file mode 100644 index 0000000..6e4b2d5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-103.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-104.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-104.dcm new file mode 100644 index 0000000..16f53c3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-104.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-105.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-105.dcm new file mode 100644 index 0000000..5212c1e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-105.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-106.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-106.dcm new file mode 100644 index 0000000..f92c5b8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-106.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-107.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-107.dcm new file mode 100644 index 0000000..fffa79b Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-107.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-108.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-108.dcm new file mode 100644 index 0000000..91d9a9d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-108.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-109.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-109.dcm new file mode 100644 index 0000000..bff210e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-109.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-110.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-110.dcm new file mode 100644 index 0000000..a59dfb6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-110.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-111.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-111.dcm new file mode 100644 index 0000000..2a56d84 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-111.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-112.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-112.dcm new file mode 100644 index 0000000..d421ba3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-112.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-113.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-113.dcm new file mode 100644 index 0000000..93a2c74 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-113.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-114.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-114.dcm new file mode 100644 index 0000000..38d16ff Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-114.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-115.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-115.dcm new file mode 100644 index 0000000..5539572 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-115.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-116.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-116.dcm new file mode 100644 index 0000000..89798b7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-116.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-117.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-117.dcm new file mode 100644 index 0000000..f09edcd Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-117.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-118.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-118.dcm new file mode 100644 index 0000000..fcf9b0e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-118.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-119.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-119.dcm new file mode 100644 index 0000000..386f9a0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-119.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-120.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-120.dcm new file mode 100644 index 0000000..0db16a6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-120.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-121.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-121.dcm new file mode 100644 index 0000000..52fa43e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-121.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-122.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-122.dcm new file mode 100644 index 0000000..f403ed6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-122.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-123.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-123.dcm new file mode 100644 index 0000000..9e620d6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-123.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-124.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-124.dcm new file mode 100644 index 0000000..83eeb99 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-124.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-125.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-125.dcm new file mode 100644 index 0000000..d781588 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-125.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-126.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-126.dcm new file mode 100644 index 0000000..3329e2a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-126.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-127.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-127.dcm new file mode 100644 index 0000000..ae29a3d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-127.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-128.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-128.dcm new file mode 100644 index 0000000..ebe83e1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-128.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-129.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-129.dcm new file mode 100644 index 0000000..ab17561 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-129.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-130.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-130.dcm new file mode 100644 index 0000000..bc1b399 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-130.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-131.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-131.dcm new file mode 100644 index 0000000..47ce20d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-131.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-132.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-132.dcm new file mode 100644 index 0000000..3d217d9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-132.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-133.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-133.dcm new file mode 100644 index 0000000..1f12e33 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-133.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-134.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-134.dcm new file mode 100644 index 0000000..813ff49 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-134.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-135.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-135.dcm new file mode 100644 index 0000000..9f1ad5e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-135.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-136.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-136.dcm new file mode 100644 index 0000000..abdab76 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-136.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-137.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-137.dcm new file mode 100644 index 0000000..e195260 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-137.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-138.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-138.dcm new file mode 100644 index 0000000..37085c2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-138.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-139.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-139.dcm new file mode 100644 index 0000000..115f580 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-139.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-140.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-140.dcm new file mode 100644 index 0000000..5cf3b5d Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-140.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-141.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-141.dcm new file mode 100644 index 0000000..b88c244 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-141.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-142.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-142.dcm new file mode 100644 index 0000000..3673bed Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-142.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-143.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-143.dcm new file mode 100644 index 0000000..434d8cb Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-143.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-144.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-144.dcm new file mode 100644 index 0000000..379931f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-144.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-145.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-145.dcm new file mode 100644 index 0000000..fa153f9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-145.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-146.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-146.dcm new file mode 100644 index 0000000..3d29d58 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-146.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-147.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-147.dcm new file mode 100644 index 0000000..837cac9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-147.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-148.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-148.dcm new file mode 100644 index 0000000..8390c72 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-148.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-149.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-149.dcm new file mode 100644 index 0000000..a4e1100 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-149.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-150.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-150.dcm new file mode 100644 index 0000000..c478b6a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-150.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-151.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-151.dcm new file mode 100644 index 0000000..059385a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-151.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-152.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-152.dcm new file mode 100644 index 0000000..ff5a9d9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-152.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-153.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-153.dcm new file mode 100644 index 0000000..8e94d71 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-153.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-154.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-154.dcm new file mode 100644 index 0000000..93c7400 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-154.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-155.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-155.dcm new file mode 100644 index 0000000..da414b6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-155.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-156.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-156.dcm new file mode 100644 index 0000000..1263324 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-156.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-157.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-157.dcm new file mode 100644 index 0000000..376689f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-157.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-158.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-158.dcm new file mode 100644 index 0000000..89cea3a Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-158.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-159.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-159.dcm new file mode 100644 index 0000000..257e0cd Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-159.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-160.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-160.dcm new file mode 100644 index 0000000..207f9b6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-160.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-161.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-161.dcm new file mode 100644 index 0000000..9f924be Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-161.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-162.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-162.dcm new file mode 100644 index 0000000..e6f2595 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-162.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-163.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-163.dcm new file mode 100644 index 0000000..ac821f9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-163.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-164.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-164.dcm new file mode 100644 index 0000000..bc03e14 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-164.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-165.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-165.dcm new file mode 100644 index 0000000..90d4296 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-165.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-166.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-166.dcm new file mode 100644 index 0000000..e9ca01f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-166.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-167.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-167.dcm new file mode 100644 index 0000000..87de3d6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-167.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-168.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-168.dcm new file mode 100644 index 0000000..ad029f7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-168.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-169.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-169.dcm new file mode 100644 index 0000000..3f254ce Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-169.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-170.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-170.dcm new file mode 100644 index 0000000..41aef1f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-170.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-171.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-171.dcm new file mode 100644 index 0000000..1a3b8c5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-171.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-172.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-172.dcm new file mode 100644 index 0000000..813b1b0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-172.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-173.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-173.dcm new file mode 100644 index 0000000..c11eaf0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-173.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-174.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-174.dcm new file mode 100644 index 0000000..b8442a5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-174.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-175.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-175.dcm new file mode 100644 index 0000000..e084990 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-175.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-176.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-176.dcm new file mode 100644 index 0000000..31a0f82 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-176.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-177.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-177.dcm new file mode 100644 index 0000000..10cb224 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-177.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-178.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-178.dcm new file mode 100644 index 0000000..b08b0db Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-178.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-179.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-179.dcm new file mode 100644 index 0000000..752bed0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-179.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-180.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-180.dcm new file mode 100644 index 0000000..0e1c5c3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-180.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-181.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-181.dcm new file mode 100644 index 0000000..eaf9c69 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-181.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-182.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-182.dcm new file mode 100644 index 0000000..bf1ce00 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-182.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-183.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-183.dcm new file mode 100644 index 0000000..946c58c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-183.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-184.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-184.dcm new file mode 100644 index 0000000..925679c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-184.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-185.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-185.dcm new file mode 100644 index 0000000..b3c23d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-185.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-186.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-186.dcm new file mode 100644 index 0000000..8138548 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-186.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-187.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-187.dcm new file mode 100644 index 0000000..e506800 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-187.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-188.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-188.dcm new file mode 100644 index 0000000..2712b50 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-188.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-189.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-189.dcm new file mode 100644 index 0000000..314cc03 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-189.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-190.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-190.dcm new file mode 100644 index 0000000..45adf4c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-190.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-191.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-191.dcm new file mode 100644 index 0000000..96d875c Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-191.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-192.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-192.dcm new file mode 100644 index 0000000..9e66e33 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-192.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-193.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-193.dcm new file mode 100644 index 0000000..6ed53d5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-193.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-194.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-194.dcm new file mode 100644 index 0000000..d5642b7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-194.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-195.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-195.dcm new file mode 100644 index 0000000..deca37f Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-195.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-196.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-196.dcm new file mode 100644 index 0000000..201a5d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-196.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-197.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-197.dcm new file mode 100644 index 0000000..a11b625 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-197.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-198.dcm b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-198.dcm new file mode 100644 index 0000000..4f10c3e Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-CT00CT-58964/1-198.dcm differ diff --git a/examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306/1-1.dcm b/examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306/1-1.dcm new file mode 100644 index 0000000..669f2b1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306/1-1.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-001.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-001.dcm new file mode 100644 index 0000000..83bd3d8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-001.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-002.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-002.dcm new file mode 100644 index 0000000..6d62de7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-002.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-003.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-003.dcm new file mode 100644 index 0000000..b3f3cf9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-003.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-004.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-004.dcm new file mode 100644 index 0000000..cd2a153 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-004.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-005.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-005.dcm new file mode 100644 index 0000000..d5e804c Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-005.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-006.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-006.dcm new file mode 100644 index 0000000..24693f1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-006.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-007.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-007.dcm new file mode 100644 index 0000000..0f778ca Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-007.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-008.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-008.dcm new file mode 100644 index 0000000..afada7b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-008.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-009.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-009.dcm new file mode 100644 index 0000000..1f5810d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-009.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-010.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-010.dcm new file mode 100644 index 0000000..6ce5702 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-010.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-011.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-011.dcm new file mode 100644 index 0000000..08fa44a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-011.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-012.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-012.dcm new file mode 100644 index 0000000..59c53a8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-012.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-013.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-013.dcm new file mode 100644 index 0000000..9e02bf8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-013.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-014.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-014.dcm new file mode 100644 index 0000000..435d90d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-014.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-015.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-015.dcm new file mode 100644 index 0000000..0a5be6a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-015.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-016.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-016.dcm new file mode 100644 index 0000000..cf9cce3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-016.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-017.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-017.dcm new file mode 100644 index 0000000..dba8059 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-017.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-018.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-018.dcm new file mode 100644 index 0000000..b589821 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-018.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-019.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-019.dcm new file mode 100644 index 0000000..cc5dc6f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-019.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-020.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-020.dcm new file mode 100644 index 0000000..e28a527 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-020.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-021.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-021.dcm new file mode 100644 index 0000000..4ff9b32 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-021.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-022.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-022.dcm new file mode 100644 index 0000000..6329290 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-022.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-023.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-023.dcm new file mode 100644 index 0000000..90b92d5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-023.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-024.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-024.dcm new file mode 100644 index 0000000..20f67c1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-024.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-025.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-025.dcm new file mode 100644 index 0000000..a04473f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-025.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-026.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-026.dcm new file mode 100644 index 0000000..1a4df64 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-026.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-027.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-027.dcm new file mode 100644 index 0000000..3e2ccc5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-027.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-028.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-028.dcm new file mode 100644 index 0000000..ab9a7f7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-028.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-029.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-029.dcm new file mode 100644 index 0000000..6213c61 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-029.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-030.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-030.dcm new file mode 100644 index 0000000..e61a7d2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-030.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-031.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-031.dcm new file mode 100644 index 0000000..f02b33d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-031.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-032.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-032.dcm new file mode 100644 index 0000000..931858b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-032.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-033.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-033.dcm new file mode 100644 index 0000000..5114c55 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-033.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-034.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-034.dcm new file mode 100644 index 0000000..b939aee Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-034.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-035.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-035.dcm new file mode 100644 index 0000000..b2fe433 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-035.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-036.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-036.dcm new file mode 100644 index 0000000..af1a38b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-036.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-037.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-037.dcm new file mode 100644 index 0000000..555100e Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-037.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-038.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-038.dcm new file mode 100644 index 0000000..13f70da Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-038.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-039.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-039.dcm new file mode 100644 index 0000000..5865dbc Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-039.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-040.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-040.dcm new file mode 100644 index 0000000..4059634 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-040.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-041.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-041.dcm new file mode 100644 index 0000000..b9ee702 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-041.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-042.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-042.dcm new file mode 100644 index 0000000..cd538f1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-042.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-043.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-043.dcm new file mode 100644 index 0000000..841c862 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-043.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-044.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-044.dcm new file mode 100644 index 0000000..97a2d6b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-044.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-045.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-045.dcm new file mode 100644 index 0000000..19a0eb2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-045.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-046.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-046.dcm new file mode 100644 index 0000000..ef38c03 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-046.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-047.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-047.dcm new file mode 100644 index 0000000..01d19b8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-047.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-048.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-048.dcm new file mode 100644 index 0000000..c4096c5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-048.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-049.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-049.dcm new file mode 100644 index 0000000..b8fe541 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-049.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-050.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-050.dcm new file mode 100644 index 0000000..9ded900 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-050.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-051.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-051.dcm new file mode 100644 index 0000000..b77b7dd Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-051.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-052.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-052.dcm new file mode 100644 index 0000000..3db5c46 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-052.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-053.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-053.dcm new file mode 100644 index 0000000..b249260 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-053.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-054.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-054.dcm new file mode 100644 index 0000000..5eece13 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-054.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-055.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-055.dcm new file mode 100644 index 0000000..9f28210 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-055.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-056.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-056.dcm new file mode 100644 index 0000000..84dcbc4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-056.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-057.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-057.dcm new file mode 100644 index 0000000..d5a1f2c Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-057.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-058.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-058.dcm new file mode 100644 index 0000000..7e503d6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-058.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-059.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-059.dcm new file mode 100644 index 0000000..f6e9201 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-059.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-060.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-060.dcm new file mode 100644 index 0000000..44f64db Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-060.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-061.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-061.dcm new file mode 100644 index 0000000..47a0fd6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-061.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-062.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-062.dcm new file mode 100644 index 0000000..e75f2e7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-062.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-063.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-063.dcm new file mode 100644 index 0000000..999b6ee Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-063.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-064.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-064.dcm new file mode 100644 index 0000000..ce5a2ea Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-064.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-065.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-065.dcm new file mode 100644 index 0000000..00de6a4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-065.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-066.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-066.dcm new file mode 100644 index 0000000..8249efb Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-066.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-067.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-067.dcm new file mode 100644 index 0000000..7e60dcc Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-067.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-068.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-068.dcm new file mode 100644 index 0000000..4d9349d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-068.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-069.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-069.dcm new file mode 100644 index 0000000..4ea6a43 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-069.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-070.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-070.dcm new file mode 100644 index 0000000..95bc073 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-070.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-071.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-071.dcm new file mode 100644 index 0000000..67e4212 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-071.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-072.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-072.dcm new file mode 100644 index 0000000..31d9727 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-072.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-073.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-073.dcm new file mode 100644 index 0000000..96b6732 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-073.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-074.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-074.dcm new file mode 100644 index 0000000..8627a4a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-074.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-075.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-075.dcm new file mode 100644 index 0000000..bc73688 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-075.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-076.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-076.dcm new file mode 100644 index 0000000..8729060 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-076.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-077.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-077.dcm new file mode 100644 index 0000000..d818590 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-077.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-078.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-078.dcm new file mode 100644 index 0000000..2f050df Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-078.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-079.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-079.dcm new file mode 100644 index 0000000..fb9bf86 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-079.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-080.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-080.dcm new file mode 100644 index 0000000..334445d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-080.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-081.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-081.dcm new file mode 100644 index 0000000..427f1e7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-081.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-082.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-082.dcm new file mode 100644 index 0000000..e58fc80 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-082.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-083.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-083.dcm new file mode 100644 index 0000000..9e1ec39 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-083.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-084.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-084.dcm new file mode 100644 index 0000000..15faec6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-084.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-085.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-085.dcm new file mode 100644 index 0000000..ad0c224 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-085.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-086.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-086.dcm new file mode 100644 index 0000000..a908dbc Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-086.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-087.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-087.dcm new file mode 100644 index 0000000..4740999 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-087.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-088.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-088.dcm new file mode 100644 index 0000000..130baf5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-088.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-089.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-089.dcm new file mode 100644 index 0000000..4abf68a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-089.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-090.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-090.dcm new file mode 100644 index 0000000..61eefd4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-090.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-091.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-091.dcm new file mode 100644 index 0000000..61dea03 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-091.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-092.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-092.dcm new file mode 100644 index 0000000..532a8d5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-092.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-093.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-093.dcm new file mode 100644 index 0000000..d1c4508 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-093.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-094.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-094.dcm new file mode 100644 index 0000000..4c68be6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-094.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-095.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-095.dcm new file mode 100644 index 0000000..8d30df6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-095.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-096.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-096.dcm new file mode 100644 index 0000000..07d716f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-096.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-097.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-097.dcm new file mode 100644 index 0000000..d69b442 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-097.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-098.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-098.dcm new file mode 100644 index 0000000..d4370a5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-098.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-099.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-099.dcm new file mode 100644 index 0000000..ad78477 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-099.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-100.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-100.dcm new file mode 100644 index 0000000..9879d79 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-100.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-101.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-101.dcm new file mode 100644 index 0000000..c2a992e Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-101.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-102.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-102.dcm new file mode 100644 index 0000000..4376064 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-102.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-103.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-103.dcm new file mode 100644 index 0000000..39309d0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-103.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-104.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-104.dcm new file mode 100644 index 0000000..48515dd Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-104.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-105.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-105.dcm new file mode 100644 index 0000000..0d2d553 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-105.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-106.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-106.dcm new file mode 100644 index 0000000..6720a80 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-106.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-107.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-107.dcm new file mode 100644 index 0000000..915bcfd Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-107.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-108.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-108.dcm new file mode 100644 index 0000000..5348fc2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-108.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-109.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-109.dcm new file mode 100644 index 0000000..a0ebb2d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-109.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-110.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-110.dcm new file mode 100644 index 0000000..7fe6d2c Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-110.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-111.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-111.dcm new file mode 100644 index 0000000..44dc1ee Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-111.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-112.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-112.dcm new file mode 100644 index 0000000..233a90f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-112.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-113.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-113.dcm new file mode 100644 index 0000000..7d529c8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-113.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-114.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-114.dcm new file mode 100644 index 0000000..0d43edd Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-114.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-115.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-115.dcm new file mode 100644 index 0000000..730a370 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-115.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-116.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-116.dcm new file mode 100644 index 0000000..e2da812 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-116.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-117.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-117.dcm new file mode 100644 index 0000000..deac36d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-117.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-118.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-118.dcm new file mode 100644 index 0000000..e510aea Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-118.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-119.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-119.dcm new file mode 100644 index 0000000..8984dfc Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-119.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-120.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-120.dcm new file mode 100644 index 0000000..8c0e8d1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-120.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-121.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-121.dcm new file mode 100644 index 0000000..ca6a802 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-121.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-122.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-122.dcm new file mode 100644 index 0000000..961049a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-122.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-123.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-123.dcm new file mode 100644 index 0000000..320b11f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-123.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-124.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-124.dcm new file mode 100644 index 0000000..3052305 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-124.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-125.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-125.dcm new file mode 100644 index 0000000..b2a512b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-125.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-126.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-126.dcm new file mode 100644 index 0000000..38b4f57 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-126.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-127.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-127.dcm new file mode 100644 index 0000000..783cdd4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-127.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-128.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-128.dcm new file mode 100644 index 0000000..5b1190a Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-128.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-129.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-129.dcm new file mode 100644 index 0000000..8c0b014 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-129.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-130.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-130.dcm new file mode 100644 index 0000000..c87ba68 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-130.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-131.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-131.dcm new file mode 100644 index 0000000..bf212a8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-131.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-132.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-132.dcm new file mode 100644 index 0000000..9a16c8d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-132.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-133.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-133.dcm new file mode 100644 index 0000000..5ecf6a8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-133.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-134.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-134.dcm new file mode 100644 index 0000000..ad93487 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-134.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-135.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-135.dcm new file mode 100644 index 0000000..8b6f7ea Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-135.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-136.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-136.dcm new file mode 100644 index 0000000..95d33d2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-136.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-137.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-137.dcm new file mode 100644 index 0000000..3524b2e Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-137.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-138.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-138.dcm new file mode 100644 index 0000000..3bf908d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-138.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-139.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-139.dcm new file mode 100644 index 0000000..8198b11 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-139.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-140.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-140.dcm new file mode 100644 index 0000000..61a8499 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-140.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-141.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-141.dcm new file mode 100644 index 0000000..676ac33 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-141.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-142.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-142.dcm new file mode 100644 index 0000000..89e3eae Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-142.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-143.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-143.dcm new file mode 100644 index 0000000..82046f7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-143.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-144.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-144.dcm new file mode 100644 index 0000000..2a24f35 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-144.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-145.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-145.dcm new file mode 100644 index 0000000..cbbb2b5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-145.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-146.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-146.dcm new file mode 100644 index 0000000..ab39be8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-146.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-147.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-147.dcm new file mode 100644 index 0000000..b3f025c Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-147.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-148.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-148.dcm new file mode 100644 index 0000000..6e42788 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-148.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-149.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-149.dcm new file mode 100644 index 0000000..e84512c Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-149.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-150.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-150.dcm new file mode 100644 index 0000000..87a299b Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-150.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-151.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-151.dcm new file mode 100644 index 0000000..ec45e1d Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-151.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-152.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-152.dcm new file mode 100644 index 0000000..eb67412 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-152.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-153.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-153.dcm new file mode 100644 index 0000000..b01f666 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-153.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-154.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-154.dcm new file mode 100644 index 0000000..6a8ea5f Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-154.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-155.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-155.dcm new file mode 100644 index 0000000..6993e3e Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-155.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-156.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-156.dcm new file mode 100644 index 0000000..817d8ef Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-156.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-157.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-157.dcm new file mode 100644 index 0000000..bba794e Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-157.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-158.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-158.dcm new file mode 100644 index 0000000..c4f4b31 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-158.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-159.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-159.dcm new file mode 100644 index 0000000..e9b6465 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-159.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-160.dcm b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-160.dcm new file mode 100644 index 0000000..e5bdc30 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-MR0T2FLAIR-90484/1-160.dcm differ diff --git a/examples/GBM_burdenko_example/1/3.000000-RTPLAN-07507/1-1.dcm b/examples/GBM_burdenko_example/1/3.000000-RTPLAN-07507/1-1.dcm new file mode 100644 index 0000000..ea3e9b2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/3.000000-RTPLAN-07507/1-1.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-001.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-001.dcm new file mode 100644 index 0000000..979fec9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-001.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-002.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-002.dcm new file mode 100644 index 0000000..84f7e52 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-002.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-003.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-003.dcm new file mode 100644 index 0000000..56b8a12 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-003.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-004.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-004.dcm new file mode 100644 index 0000000..679c836 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-004.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-005.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-005.dcm new file mode 100644 index 0000000..cb063d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-005.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-006.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-006.dcm new file mode 100644 index 0000000..b1d81df Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-006.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-007.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-007.dcm new file mode 100644 index 0000000..5f433f3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-007.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-008.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-008.dcm new file mode 100644 index 0000000..d0a44e9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-008.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-009.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-009.dcm new file mode 100644 index 0000000..99d3198 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-009.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-010.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-010.dcm new file mode 100644 index 0000000..2cdb4be Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-010.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-011.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-011.dcm new file mode 100644 index 0000000..826c960 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-011.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-012.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-012.dcm new file mode 100644 index 0000000..1f37421 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-012.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-013.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-013.dcm new file mode 100644 index 0000000..ebaff94 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-013.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-014.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-014.dcm new file mode 100644 index 0000000..cd1f6e3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-014.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-015.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-015.dcm new file mode 100644 index 0000000..b980016 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-015.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-016.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-016.dcm new file mode 100644 index 0000000..17b0284 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-016.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-017.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-017.dcm new file mode 100644 index 0000000..337ff8d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-017.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-018.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-018.dcm new file mode 100644 index 0000000..1c104d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-018.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-019.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-019.dcm new file mode 100644 index 0000000..db9fa82 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-019.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-020.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-020.dcm new file mode 100644 index 0000000..e391af3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-020.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-021.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-021.dcm new file mode 100644 index 0000000..a8a3ad2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-021.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-022.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-022.dcm new file mode 100644 index 0000000..1d96faa Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-022.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-023.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-023.dcm new file mode 100644 index 0000000..ce5a9f1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-023.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-024.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-024.dcm new file mode 100644 index 0000000..26ffb32 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-024.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-025.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-025.dcm new file mode 100644 index 0000000..a807125 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-025.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-026.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-026.dcm new file mode 100644 index 0000000..232860b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-026.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-027.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-027.dcm new file mode 100644 index 0000000..219de00 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-027.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-028.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-028.dcm new file mode 100644 index 0000000..7eb2ff8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-028.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-029.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-029.dcm new file mode 100644 index 0000000..33fa999 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-029.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-030.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-030.dcm new file mode 100644 index 0000000..fc994c3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-030.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-031.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-031.dcm new file mode 100644 index 0000000..479475d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-031.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-032.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-032.dcm new file mode 100644 index 0000000..9eb9fdd Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-032.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-033.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-033.dcm new file mode 100644 index 0000000..04f4b84 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-033.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-034.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-034.dcm new file mode 100644 index 0000000..0c9667c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-034.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-035.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-035.dcm new file mode 100644 index 0000000..755be38 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-035.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-036.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-036.dcm new file mode 100644 index 0000000..372cf83 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-036.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-037.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-037.dcm new file mode 100644 index 0000000..439ce48 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-037.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-038.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-038.dcm new file mode 100644 index 0000000..6235049 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-038.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-039.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-039.dcm new file mode 100644 index 0000000..b672094 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-039.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-040.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-040.dcm new file mode 100644 index 0000000..015ff95 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-040.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-041.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-041.dcm new file mode 100644 index 0000000..680743b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-041.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-042.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-042.dcm new file mode 100644 index 0000000..866ee3c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-042.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-043.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-043.dcm new file mode 100644 index 0000000..51e34ac Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-043.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-044.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-044.dcm new file mode 100644 index 0000000..c2599f4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-044.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-045.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-045.dcm new file mode 100644 index 0000000..f31a35a Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-045.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-046.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-046.dcm new file mode 100644 index 0000000..9361eee Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-046.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-047.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-047.dcm new file mode 100644 index 0000000..5f58790 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-047.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-048.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-048.dcm new file mode 100644 index 0000000..921604d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-048.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-049.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-049.dcm new file mode 100644 index 0000000..c0c205d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-049.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-050.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-050.dcm new file mode 100644 index 0000000..a42d85b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-050.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-051.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-051.dcm new file mode 100644 index 0000000..273a3b7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-051.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-052.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-052.dcm new file mode 100644 index 0000000..e277bf7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-052.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-053.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-053.dcm new file mode 100644 index 0000000..a6e09e9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-053.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-054.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-054.dcm new file mode 100644 index 0000000..08251d1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-054.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-055.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-055.dcm new file mode 100644 index 0000000..6aac902 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-055.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-056.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-056.dcm new file mode 100644 index 0000000..8f625a0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-056.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-057.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-057.dcm new file mode 100644 index 0000000..1f1a171 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-057.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-058.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-058.dcm new file mode 100644 index 0000000..299abcb Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-058.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-059.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-059.dcm new file mode 100644 index 0000000..9a14731 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-059.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-060.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-060.dcm new file mode 100644 index 0000000..6a6b2d2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-060.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-061.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-061.dcm new file mode 100644 index 0000000..019d63e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-061.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-062.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-062.dcm new file mode 100644 index 0000000..1af033b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-062.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-063.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-063.dcm new file mode 100644 index 0000000..416ccec Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-063.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-064.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-064.dcm new file mode 100644 index 0000000..658265e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-064.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-065.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-065.dcm new file mode 100644 index 0000000..ce4509b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-065.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-066.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-066.dcm new file mode 100644 index 0000000..4f45fa0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-066.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-067.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-067.dcm new file mode 100644 index 0000000..3c03a12 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-067.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-068.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-068.dcm new file mode 100644 index 0000000..19b8c09 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-068.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-069.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-069.dcm new file mode 100644 index 0000000..5987fac Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-069.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-070.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-070.dcm new file mode 100644 index 0000000..ab02dbb Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-070.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-071.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-071.dcm new file mode 100644 index 0000000..1be57e4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-071.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-072.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-072.dcm new file mode 100644 index 0000000..5552f14 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-072.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-073.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-073.dcm new file mode 100644 index 0000000..9cef6d4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-073.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-074.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-074.dcm new file mode 100644 index 0000000..aab8d36 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-074.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-075.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-075.dcm new file mode 100644 index 0000000..ed5c764 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-075.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-076.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-076.dcm new file mode 100644 index 0000000..80bd07d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-076.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-077.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-077.dcm new file mode 100644 index 0000000..76241ec Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-077.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-078.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-078.dcm new file mode 100644 index 0000000..127ae28 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-078.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-079.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-079.dcm new file mode 100644 index 0000000..2c92d89 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-079.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-080.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-080.dcm new file mode 100644 index 0000000..cdd8452 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-080.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-081.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-081.dcm new file mode 100644 index 0000000..f3c0cae Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-081.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-082.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-082.dcm new file mode 100644 index 0000000..bef1859 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-082.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-083.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-083.dcm new file mode 100644 index 0000000..878c5f8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-083.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-084.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-084.dcm new file mode 100644 index 0000000..078021c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-084.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-085.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-085.dcm new file mode 100644 index 0000000..049d2de Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-085.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-086.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-086.dcm new file mode 100644 index 0000000..82e8f6f Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-086.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-087.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-087.dcm new file mode 100644 index 0000000..b11865b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-087.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-088.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-088.dcm new file mode 100644 index 0000000..bbabf76 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-088.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-089.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-089.dcm new file mode 100644 index 0000000..2e6bd33 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-089.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-090.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-090.dcm new file mode 100644 index 0000000..68275e9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-090.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-091.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-091.dcm new file mode 100644 index 0000000..e03b6ad Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-091.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-092.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-092.dcm new file mode 100644 index 0000000..a068013 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-092.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-093.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-093.dcm new file mode 100644 index 0000000..3b0c672 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-093.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-094.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-094.dcm new file mode 100644 index 0000000..3c543cc Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-094.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-095.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-095.dcm new file mode 100644 index 0000000..ef0206f Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-095.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-096.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-096.dcm new file mode 100644 index 0000000..9373272 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-096.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-097.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-097.dcm new file mode 100644 index 0000000..81f38e6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-097.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-098.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-098.dcm new file mode 100644 index 0000000..1122d56 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-098.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-099.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-099.dcm new file mode 100644 index 0000000..03f1fcb Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-099.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-100.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-100.dcm new file mode 100644 index 0000000..1df1498 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-100.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-101.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-101.dcm new file mode 100644 index 0000000..e750d79 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-101.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-102.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-102.dcm new file mode 100644 index 0000000..95ba90d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-102.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-103.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-103.dcm new file mode 100644 index 0000000..325911d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-103.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-104.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-104.dcm new file mode 100644 index 0000000..f588c77 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-104.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-105.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-105.dcm new file mode 100644 index 0000000..9c84841 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-105.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-106.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-106.dcm new file mode 100644 index 0000000..cff5410 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-106.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-107.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-107.dcm new file mode 100644 index 0000000..0098bc0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-107.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-108.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-108.dcm new file mode 100644 index 0000000..5e1281e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-108.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-109.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-109.dcm new file mode 100644 index 0000000..f8b8e9c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-109.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-110.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-110.dcm new file mode 100644 index 0000000..988fe0e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-110.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-111.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-111.dcm new file mode 100644 index 0000000..c5c87ef Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-111.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-112.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-112.dcm new file mode 100644 index 0000000..0a2b505 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-112.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-113.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-113.dcm new file mode 100644 index 0000000..f996553 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-113.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-114.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-114.dcm new file mode 100644 index 0000000..faae82c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-114.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-115.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-115.dcm new file mode 100644 index 0000000..741b753 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-115.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-116.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-116.dcm new file mode 100644 index 0000000..924d12c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-116.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-117.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-117.dcm new file mode 100644 index 0000000..58f8f95 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-117.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-118.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-118.dcm new file mode 100644 index 0000000..bc81e8b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-118.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-119.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-119.dcm new file mode 100644 index 0000000..2af2f98 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-119.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-120.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-120.dcm new file mode 100644 index 0000000..829fafd Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-120.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-121.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-121.dcm new file mode 100644 index 0000000..a68dc0a Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-121.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-122.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-122.dcm new file mode 100644 index 0000000..b9f941a Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-122.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-123.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-123.dcm new file mode 100644 index 0000000..5de205b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-123.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-124.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-124.dcm new file mode 100644 index 0000000..82d3a4b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-124.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-125.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-125.dcm new file mode 100644 index 0000000..8b82407 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-125.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-126.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-126.dcm new file mode 100644 index 0000000..3af3f79 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-126.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-127.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-127.dcm new file mode 100644 index 0000000..83b9472 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-127.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-128.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-128.dcm new file mode 100644 index 0000000..6466204 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-128.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-129.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-129.dcm new file mode 100644 index 0000000..a567309 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-129.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-130.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-130.dcm new file mode 100644 index 0000000..a65224b Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-130.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-131.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-131.dcm new file mode 100644 index 0000000..56a72a1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-131.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-132.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-132.dcm new file mode 100644 index 0000000..a5f4cf3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-132.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-133.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-133.dcm new file mode 100644 index 0000000..ca8f2c4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-133.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-134.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-134.dcm new file mode 100644 index 0000000..ce483b2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-134.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-135.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-135.dcm new file mode 100644 index 0000000..00b1f7e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-135.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-136.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-136.dcm new file mode 100644 index 0000000..8a7baca Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-136.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-137.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-137.dcm new file mode 100644 index 0000000..937077a Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-137.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-138.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-138.dcm new file mode 100644 index 0000000..f124799 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-138.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-139.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-139.dcm new file mode 100644 index 0000000..8ac533f Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-139.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-140.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-140.dcm new file mode 100644 index 0000000..f017226 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-140.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-141.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-141.dcm new file mode 100644 index 0000000..78b4e0c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-141.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-142.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-142.dcm new file mode 100644 index 0000000..1d02a73 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-142.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-143.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-143.dcm new file mode 100644 index 0000000..f90ed8d Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-143.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-144.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-144.dcm new file mode 100644 index 0000000..443578c Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-144.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-145.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-145.dcm new file mode 100644 index 0000000..db9c908 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-145.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-146.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-146.dcm new file mode 100644 index 0000000..ab9d66e Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-146.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-147.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-147.dcm new file mode 100644 index 0000000..f03a0ae Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-147.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-148.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-148.dcm new file mode 100644 index 0000000..6307400 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-148.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-149.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-149.dcm new file mode 100644 index 0000000..32f3f61 Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-149.dcm differ diff --git a/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-150.dcm b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-150.dcm new file mode 100644 index 0000000..4b763cc Binary files /dev/null and b/examples/GBM_burdenko_example/1/4.000000-MR00T1-28157/1-150.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-01.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-01.dcm new file mode 100644 index 0000000..d68228e Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-01.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-02.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-02.dcm new file mode 100644 index 0000000..9a72bb0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-02.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-03.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-03.dcm new file mode 100644 index 0000000..03f9b26 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-03.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-04.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-04.dcm new file mode 100644 index 0000000..09cd40e Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-04.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-05.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-05.dcm new file mode 100644 index 0000000..774973a Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-05.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-06.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-06.dcm new file mode 100644 index 0000000..74ffb1a Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-06.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-07.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-07.dcm new file mode 100644 index 0000000..d70e27d Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-07.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-08.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-08.dcm new file mode 100644 index 0000000..16be954 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-08.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-09.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-09.dcm new file mode 100644 index 0000000..fe2bbf8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-09.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-10.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-10.dcm new file mode 100644 index 0000000..42602c8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-10.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-11.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-11.dcm new file mode 100644 index 0000000..a3eae17 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-11.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-12.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-12.dcm new file mode 100644 index 0000000..f457906 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-12.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-13.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-13.dcm new file mode 100644 index 0000000..7572de5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-13.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-14.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-14.dcm new file mode 100644 index 0000000..9b71964 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-14.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-15.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-15.dcm new file mode 100644 index 0000000..58b1dfe Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-15.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-16.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-16.dcm new file mode 100644 index 0000000..6b01ac1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-16.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-17.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-17.dcm new file mode 100644 index 0000000..1f11eff Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-17.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-18.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-18.dcm new file mode 100644 index 0000000..bb00c00 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-18.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-19.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-19.dcm new file mode 100644 index 0000000..51da8f3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-19.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-20.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-20.dcm new file mode 100644 index 0000000..42fed45 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-20.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-21.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-21.dcm new file mode 100644 index 0000000..7163fe8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-21.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-22.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-22.dcm new file mode 100644 index 0000000..63d0321 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-22.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-23.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-23.dcm new file mode 100644 index 0000000..63c9327 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-23.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-24.dcm b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-24.dcm new file mode 100644 index 0000000..cb619fc Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-MR00T2-45066/1-24.dcm differ diff --git a/examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161/1-1.dcm b/examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161/1-1.dcm new file mode 100644 index 0000000..4b94039 Binary files /dev/null and b/examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161/1-1.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-001.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-001.dcm new file mode 100644 index 0000000..22ff22e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-001.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-002.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-002.dcm new file mode 100644 index 0000000..405cc11 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-002.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-003.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-003.dcm new file mode 100644 index 0000000..4823151 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-003.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-004.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-004.dcm new file mode 100644 index 0000000..2a09c1e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-004.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-005.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-005.dcm new file mode 100644 index 0000000..09dcff1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-005.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-006.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-006.dcm new file mode 100644 index 0000000..8a747e4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-006.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-007.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-007.dcm new file mode 100644 index 0000000..2cc5f62 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-007.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-008.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-008.dcm new file mode 100644 index 0000000..9665fd5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-008.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-009.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-009.dcm new file mode 100644 index 0000000..826d2c7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-009.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-010.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-010.dcm new file mode 100644 index 0000000..35dc41e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-010.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-011.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-011.dcm new file mode 100644 index 0000000..f53749a Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-011.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-012.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-012.dcm new file mode 100644 index 0000000..0f4f4fe Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-012.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-013.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-013.dcm new file mode 100644 index 0000000..4e026df Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-013.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-014.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-014.dcm new file mode 100644 index 0000000..652edd3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-014.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-015.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-015.dcm new file mode 100644 index 0000000..174be84 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-015.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-016.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-016.dcm new file mode 100644 index 0000000..6ecaad4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-016.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-017.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-017.dcm new file mode 100644 index 0000000..63eef93 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-017.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-018.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-018.dcm new file mode 100644 index 0000000..f1f7563 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-018.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-019.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-019.dcm new file mode 100644 index 0000000..05b6e94 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-019.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-020.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-020.dcm new file mode 100644 index 0000000..d3a7ead Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-020.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-021.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-021.dcm new file mode 100644 index 0000000..1b8dd0e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-021.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-022.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-022.dcm new file mode 100644 index 0000000..a7751ac Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-022.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-023.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-023.dcm new file mode 100644 index 0000000..58be232 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-023.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-024.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-024.dcm new file mode 100644 index 0000000..254ab2d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-024.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-025.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-025.dcm new file mode 100644 index 0000000..336639e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-025.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-026.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-026.dcm new file mode 100644 index 0000000..03af1af Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-026.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-027.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-027.dcm new file mode 100644 index 0000000..73176cd Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-027.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-028.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-028.dcm new file mode 100644 index 0000000..9123751 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-028.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-029.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-029.dcm new file mode 100644 index 0000000..c43a262 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-029.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-030.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-030.dcm new file mode 100644 index 0000000..d89955b Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-030.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-031.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-031.dcm new file mode 100644 index 0000000..99c3f4e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-031.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-032.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-032.dcm new file mode 100644 index 0000000..bc84a42 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-032.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-033.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-033.dcm new file mode 100644 index 0000000..f0705fd Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-033.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-034.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-034.dcm new file mode 100644 index 0000000..86140f9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-034.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-035.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-035.dcm new file mode 100644 index 0000000..61b0109 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-035.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-036.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-036.dcm new file mode 100644 index 0000000..0b5e26b Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-036.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-037.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-037.dcm new file mode 100644 index 0000000..04330ad Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-037.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-038.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-038.dcm new file mode 100644 index 0000000..4c5330e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-038.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-039.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-039.dcm new file mode 100644 index 0000000..4c28ca1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-039.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-040.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-040.dcm new file mode 100644 index 0000000..0f40441 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-040.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-041.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-041.dcm new file mode 100644 index 0000000..12a999f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-041.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-042.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-042.dcm new file mode 100644 index 0000000..c4aea7d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-042.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-043.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-043.dcm new file mode 100644 index 0000000..568e297 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-043.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-044.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-044.dcm new file mode 100644 index 0000000..af39a9d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-044.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-045.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-045.dcm new file mode 100644 index 0000000..7c92012 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-045.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-046.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-046.dcm new file mode 100644 index 0000000..a546590 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-046.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-047.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-047.dcm new file mode 100644 index 0000000..cda438e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-047.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-048.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-048.dcm new file mode 100644 index 0000000..b9dc6c2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-048.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-049.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-049.dcm new file mode 100644 index 0000000..7763d36 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-049.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-050.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-050.dcm new file mode 100644 index 0000000..ffde2d0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-050.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-051.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-051.dcm new file mode 100644 index 0000000..071a659 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-051.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-052.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-052.dcm new file mode 100644 index 0000000..d86d01d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-052.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-053.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-053.dcm new file mode 100644 index 0000000..1f5677f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-053.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-054.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-054.dcm new file mode 100644 index 0000000..3059794 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-054.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-055.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-055.dcm new file mode 100644 index 0000000..599bf75 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-055.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-056.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-056.dcm new file mode 100644 index 0000000..700103e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-056.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-057.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-057.dcm new file mode 100644 index 0000000..d452d83 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-057.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-058.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-058.dcm new file mode 100644 index 0000000..7b5b86a Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-058.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-059.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-059.dcm new file mode 100644 index 0000000..4e2d19e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-059.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-060.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-060.dcm new file mode 100644 index 0000000..2f2f8b2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-060.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-061.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-061.dcm new file mode 100644 index 0000000..6f1fb0d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-061.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-062.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-062.dcm new file mode 100644 index 0000000..6b60da1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-062.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-063.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-063.dcm new file mode 100644 index 0000000..4588475 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-063.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-064.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-064.dcm new file mode 100644 index 0000000..d489cca Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-064.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-065.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-065.dcm new file mode 100644 index 0000000..d656f58 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-065.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-066.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-066.dcm new file mode 100644 index 0000000..2c47ec5 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-066.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-067.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-067.dcm new file mode 100644 index 0000000..6859d55 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-067.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-068.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-068.dcm new file mode 100644 index 0000000..30adc59 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-068.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-069.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-069.dcm new file mode 100644 index 0000000..8084764 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-069.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-070.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-070.dcm new file mode 100644 index 0000000..3e84717 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-070.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-071.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-071.dcm new file mode 100644 index 0000000..001b6c1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-071.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-072.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-072.dcm new file mode 100644 index 0000000..e72d5fb Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-072.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-073.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-073.dcm new file mode 100644 index 0000000..1434645 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-073.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-074.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-074.dcm new file mode 100644 index 0000000..350564a Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-074.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-075.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-075.dcm new file mode 100644 index 0000000..25bc222 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-075.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-076.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-076.dcm new file mode 100644 index 0000000..5455df7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-076.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-077.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-077.dcm new file mode 100644 index 0000000..a218463 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-077.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-078.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-078.dcm new file mode 100644 index 0000000..4aaba3a Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-078.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-079.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-079.dcm new file mode 100644 index 0000000..c774912 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-079.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-080.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-080.dcm new file mode 100644 index 0000000..c4c5beb Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-080.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-081.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-081.dcm new file mode 100644 index 0000000..7d62f29 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-081.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-082.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-082.dcm new file mode 100644 index 0000000..efb19e7 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-082.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-083.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-083.dcm new file mode 100644 index 0000000..f40866d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-083.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-084.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-084.dcm new file mode 100644 index 0000000..ce27ebb Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-084.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-085.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-085.dcm new file mode 100644 index 0000000..0cdd642 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-085.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-086.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-086.dcm new file mode 100644 index 0000000..03adadc Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-086.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-087.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-087.dcm new file mode 100644 index 0000000..ce25104 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-087.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-088.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-088.dcm new file mode 100644 index 0000000..75be673 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-088.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-089.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-089.dcm new file mode 100644 index 0000000..193b40d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-089.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-090.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-090.dcm new file mode 100644 index 0000000..17ee28f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-090.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-091.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-091.dcm new file mode 100644 index 0000000..ef39b24 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-091.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-092.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-092.dcm new file mode 100644 index 0000000..161700a Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-092.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-093.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-093.dcm new file mode 100644 index 0000000..31419ac Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-093.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-094.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-094.dcm new file mode 100644 index 0000000..fce33e8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-094.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-095.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-095.dcm new file mode 100644 index 0000000..cc65793 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-095.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-096.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-096.dcm new file mode 100644 index 0000000..544a56b Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-096.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-097.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-097.dcm new file mode 100644 index 0000000..d950669 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-097.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-098.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-098.dcm new file mode 100644 index 0000000..63b2e1c Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-098.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-099.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-099.dcm new file mode 100644 index 0000000..1dc2c9f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-099.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-100.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-100.dcm new file mode 100644 index 0000000..20cff15 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-100.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-101.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-101.dcm new file mode 100644 index 0000000..591733c Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-101.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-102.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-102.dcm new file mode 100644 index 0000000..cfbe3d3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-102.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-103.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-103.dcm new file mode 100644 index 0000000..d4ab223 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-103.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-104.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-104.dcm new file mode 100644 index 0000000..daf5494 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-104.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-105.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-105.dcm new file mode 100644 index 0000000..822510f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-105.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-106.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-106.dcm new file mode 100644 index 0000000..d65fdbc Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-106.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-107.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-107.dcm new file mode 100644 index 0000000..1d32205 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-107.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-108.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-108.dcm new file mode 100644 index 0000000..ed6bcc8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-108.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-109.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-109.dcm new file mode 100644 index 0000000..52d3c22 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-109.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-110.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-110.dcm new file mode 100644 index 0000000..f0b3592 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-110.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-111.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-111.dcm new file mode 100644 index 0000000..e584d39 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-111.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-112.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-112.dcm new file mode 100644 index 0000000..dd78a63 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-112.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-113.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-113.dcm new file mode 100644 index 0000000..201162d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-113.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-114.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-114.dcm new file mode 100644 index 0000000..a7ce8a2 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-114.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-115.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-115.dcm new file mode 100644 index 0000000..f29c98f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-115.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-116.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-116.dcm new file mode 100644 index 0000000..c1e286e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-116.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-117.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-117.dcm new file mode 100644 index 0000000..02d3ca8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-117.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-118.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-118.dcm new file mode 100644 index 0000000..6f541ba Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-118.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-119.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-119.dcm new file mode 100644 index 0000000..90602a0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-119.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-120.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-120.dcm new file mode 100644 index 0000000..8d0c500 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-120.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-121.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-121.dcm new file mode 100644 index 0000000..f8c687e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-121.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-122.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-122.dcm new file mode 100644 index 0000000..e7d801d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-122.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-123.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-123.dcm new file mode 100644 index 0000000..7c344a0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-123.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-124.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-124.dcm new file mode 100644 index 0000000..6473a3c Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-124.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-125.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-125.dcm new file mode 100644 index 0000000..5876474 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-125.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-126.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-126.dcm new file mode 100644 index 0000000..d53cae8 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-126.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-127.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-127.dcm new file mode 100644 index 0000000..570ce9e Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-127.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-128.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-128.dcm new file mode 100644 index 0000000..210a72b Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-128.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-129.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-129.dcm new file mode 100644 index 0000000..7b713a0 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-129.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-130.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-130.dcm new file mode 100644 index 0000000..ceae04d Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-130.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-131.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-131.dcm new file mode 100644 index 0000000..6271402 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-131.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-132.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-132.dcm new file mode 100644 index 0000000..88acce4 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-132.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-133.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-133.dcm new file mode 100644 index 0000000..5a42047 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-133.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-134.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-134.dcm new file mode 100644 index 0000000..d4b742c Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-134.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-135.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-135.dcm new file mode 100644 index 0000000..d966563 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-135.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-136.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-136.dcm new file mode 100644 index 0000000..1593729 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-136.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-137.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-137.dcm new file mode 100644 index 0000000..5124506 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-137.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-138.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-138.dcm new file mode 100644 index 0000000..f56af48 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-138.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-139.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-139.dcm new file mode 100644 index 0000000..fb86e3f Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-139.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-140.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-140.dcm new file mode 100644 index 0000000..3302d61 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-140.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-141.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-141.dcm new file mode 100644 index 0000000..fefdec9 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-141.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-142.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-142.dcm new file mode 100644 index 0000000..a2cb9e6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-142.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-143.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-143.dcm new file mode 100644 index 0000000..467c2b3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-143.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-144.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-144.dcm new file mode 100644 index 0000000..c4180ff Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-144.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-145.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-145.dcm new file mode 100644 index 0000000..f269349 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-145.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-146.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-146.dcm new file mode 100644 index 0000000..88ae2da Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-146.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-147.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-147.dcm new file mode 100644 index 0000000..1ae62c1 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-147.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-148.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-148.dcm new file mode 100644 index 0000000..135c2e6 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-148.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-149.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-149.dcm new file mode 100644 index 0000000..1f97089 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-149.dcm differ diff --git a/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-150.dcm b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-150.dcm new file mode 100644 index 0000000..bd325f3 Binary files /dev/null and b/examples/GBM_burdenko_example/1/8.000000-MRCET1-61578/1-150.dcm differ diff --git a/examples/Params.yaml b/examples/Params.yaml new file mode 100644 index 0000000..cd7aaf6 --- /dev/null +++ b/examples/Params.yaml @@ -0,0 +1,43 @@ +# This is an example of a parameters file +# It is written according to the YAML-convention (www.yaml.org) and is checked by the code for consistency. +# Three types of parameters are possible and reflected in the structure of the document: +# +# Parameter category: +# Setting Name: +# +# The three parameter categories are: +# - setting: Setting to use for preprocessing and class specific settings. if no is specified, the value for +# this setting is set to None. +# - featureClass: Feature class to enable, is list of strings representing enabled features. If no is +# specified or is an empty list ('[]'), all features for this class are enabled. +# - imageType: image types to calculate features on. is custom kwarg settings (dictionary). if is an +# empty dictionary ('{}'), no custom settings are added for this input image. +# +# Some parameters have a limited list of possible values. Where this is the case, possible values are listed in the +# package documentation + +# Settings to use, possible settings are listed in the documentation (section "Customizing the extraction"). +setting: + binWidth: 25 + label: 1 + interpolator: 'sitkBSpline' # This is an enumerated value, here None is not allowed + resampledPixelSpacing: # This disables resampling, as it is interpreted as None, to enable it, specify spacing in x, y, z as [x, y , z] + weightingNorm: # If no value is specified, it is interpreted as None + +# Image types to use: "Original" for unfiltered image, for possible filters, see documentation. +imageType: + Original: {} # for dictionaries / mappings, None values are not allowed, '{}' is interpreted as an empty dictionary + +# Featureclasses, from which features must be calculated. If a featureclass is not mentioned, no features are calculated +# for that class. Otherwise, the specified features are calculated, or, if none are specified, all are calculated (excluding redundant/deprecated features). +featureClass: + # redundant Compactness 1, Compactness 2 an Spherical Disproportion features are disabled by default, they can be + # enabled by specifying individual feature names (as is done for glcm) and including them in the list. + shape: [] + firstorder: [] # specifying an empty list has the same effect as specifying nothing. + glcm: [] # Disable SumAverage by specifying all other GLCM features available + + glrlm: [] # for lists none values are allowed, in this case, all features are enabled + glszm: [] + gldm: [] + ngtdm: [] # contains deprecated features, but as no individual features are specified, the deprecated features are not enabled diff --git a/examples/_BODY_dosimetric.json b/examples/_BODY_dosimetric.json new file mode 100644 index 0000000..ecfcd08 --- /dev/null +++ b/examples/_BODY_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "BODY", + "units": "GY", + "D0": 74.78000000000135, + "D100": 0.0, + "D50": 2.0000000000000013, + "mean": 12.478146303650034, + "V0.5cc": 13118.5072209096 +} \ No newline at end of file diff --git a/examples/example_mcode_utils(FULL_PIPELINE).ipynb b/examples/example_mcode_utils(FULL_PIPELINE).ipynb new file mode 100644 index 0000000..50c32a6 --- /dev/null +++ b/examples/example_mcode_utils(FULL_PIPELINE).ipynb @@ -0,0 +1,383 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "07a03228-daa4-4003-968c-8f9d77249729", + "metadata": {}, + "outputs": [], + "source": [ + "import pydicom as dcm\n", + "import numpy as np\n", + "import pandas as pd\n", + "from matplotlib import pyplot as plt\n", + "import json\n", + "import sys\n", + "import os\n", + "sys.path.append('../utils')\n", + "import radiomics_utils\n", + "from radiomics_utils import *\n", + "import mcode_utils\n", + "from mcode_utils import *\n", + "import dicom_utils\n", + "from dicom_utils import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "25b8f98b-bc5d-4c93-9fbb-504829d91736", + "metadata": {}, + "outputs": [], + "source": [ + "#import getpass\n", + "#password = getpass.getpass(\"Sudo password: \")" + ] + }, + { + "cell_type": "markdown", + "id": "0064e664-e756-44bc-8316-a4e70ea895b6", + "metadata": {}, + "source": [ + "## Creates folders and sorts them. Extract the mCODE extension elements for images, radiomics, and dosiomics" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2571e468-b274-4ddb-a649-7125dbf3ca60", + "metadata": {}, + "outputs": [], + "source": [ + "path_patient = '../examples/GBM_burdenko_example/1'\n", + "path_save = '../examples/output_example'\n", + "if not os.path.isdir(path_save):\n", + " os.makedirs(path_save)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7304f454-a250-4522-ae8e-e9b419cfeba4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The folder '../examples/output_example/1' exists.\n", + "The folder '../examples/output_example/1/medical_images' exists.\n", + "The folder '../examples/output_example/1/radiomics' exists.\n", + "The folder '../examples/output_example/1/dosiomics' exists.\n", + "The folder '../examples/output_example/1/dosimetrics' exists.\n" + ] + } + ], + "source": [ + "#Create the folders for given the patient path and the path to save\n", + "new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "08eb0af8-038f-4d67-af74-432724c7cd4e", + "metadata": {}, + "outputs": [], + "source": [ + "#GET THE PATH OF THE IMAGES FORM THE EXAMPLE\n", + "paths_images_all = get_all_folder_images(path_patient)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "79188680-9f24-4764-9a66-5e5774887f5c", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "cannot unpack non-iterable NoneType object", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m paths_RT \u001b[38;5;241m=\u001b[39m \u001b[43mget_dirs_RT\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpaths_images_all\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m paths_RT\n", + "File \u001b[0;32m~/mCODE-MOSAICO/examples/../utils/dicom_utils.py:603\u001b[0m, in \u001b[0;36mget_dirs_RT\u001b[0;34m(paths_images_all, dicoPATH)\u001b[0m\n\u001b[1;32m 601\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dicoPATH\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[1;32m 602\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m path_2 \u001b[38;5;129;01min\u001b[39;00m paths_images_all:\n\u001b[0;32m--> 603\u001b[0m RS_file, p \u001b[38;5;241m=\u001b[39m search_RS_path(path_2,set_images[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mSeriesDescription)\n\u001b[1;32m 604\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m RS_file\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 605\u001b[0m paths[path] \u001b[38;5;241m=\u001b[39m p\n", + "\u001b[0;31mTypeError\u001b[0m: cannot unpack non-iterable NoneType object" + ] + } + ], + "source": [ + "paths_RT = get_dirs_RT(paths_images_all,False)\n", + "paths_RT" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "ddb81b8b-2147-41eb-8fc6-3101dd16d993", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'../examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306': '../examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161'}" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "paths_RD = get_dirs_RD(paths_RT,False)\n", + "paths_RD" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "7fd9b5b8-f23c-40f0-b9a8-4e390a53a2e9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306\n", + "../examples/GBM_burdenko_example/1/1.000000-RTSTRUCT-83947\n", + "../examples/GBM_burdenko_example/1/0.000000-RTSTRUCT-45697\n" + ] + } + ], + "source": [ + "for key in paths_RT.items():\n", + " print(paths_RT[key[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "2d00d46b-3d40-4b07-a05f-63d15bd6e778", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'CT00CT'" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dcm.dcmread('../examples/GBM_burdenko_example/1/2.000000-RTSTRUCT-92306/1-1.dcm').StructureSetLabel" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "fd4c41e5-314a-4d1d-ab31-1570f4ddd0d6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../examples/GBM_burdenko_example/1/5.000000-RTDOSE-35161\n" + ] + } + ], + "source": [ + "for key in paths_RD.items():\n", + " print(paths_RD[key[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f489848d-66fd-4b12-bf3b-b0287533e0c4", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n" + ] + } + ], + "source": [ + "#GET THE SET OF THE IMAGES OF THE PATIENTS\n", + "for path in paths_images_all:\n", + " set_images = get_set_images(path)\n", + " #if len(set_images)==0:\n", + " #continue\n", + " #else:\n", + " #save_dicom_attributes_and_volume(path,new_path_save_images)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4a58ee50-4b6d-4c62-b2d5-177f9c1466b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1520" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gc\n", + "gc.collect()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d1074825-803f-4db2-aa5d-97302c10ebb9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n", + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics' exists.\n", + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT' exists.\n", + "--------------------------------------------------------\n", + "- Wrote nrrd file for RT structure Brain file seg_Brain to ../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT -\n", + "--------------------------------------------------------\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "GLCM is symmetrical, therefore Sum Average = 2 * Joint Average, only 1 needs to be calculated\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The folder '../examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/voxel_based' exists.\n" + ] + }, + { + "ename": "MemoryError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMemoryError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 10\u001b[0m\n\u001b[1;32m 8\u001b[0m RS_file\u001b[38;5;241m.\u001b[39msort(key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m x: (x\u001b[38;5;241m.\u001b[39mStructureSetDate))\n\u001b[1;32m 9\u001b[0m ROis \u001b[38;5;241m=\u001b[39m get_ROI_keys_2(RS_file[\u001b[38;5;241m0\u001b[39m])\n\u001b[0;32m---> 10\u001b[0m \u001b[43mradiomics_utils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_ROI_folders_and_radiomics_specific\u001b[49m\u001b[43m(\u001b[49m\u001b[43mRS_file\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBrain\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mfolder_path_radiomics\u001b[49m\u001b[43m,\u001b[49m\u001b[43mset_images\u001b[49m\u001b[43m,\u001b[49m\u001b[43mnew_path_save_images\u001b[49m\u001b[43m)\u001b[49m \n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m#except:\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;66;03m# continue\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;66;03m#print(RS_file)\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n", + "File \u001b[0;32m~/mCODE-MOSAICO/examples/../utils/radiomics_utils.py:253\u001b[0m, in \u001b[0;36mcreate_ROI_folders_and_radiomics_specific\u001b[0;34m(RS_file, ROI, folder_path_radiomics, set_images, new_path_save_images)\u001b[0m\n\u001b[1;32m 250\u001b[0m create_folder(RS_save_path\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/voxel_based\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 252\u001b[0m \u001b[38;5;66;03m#try:\u001b[39;00m\n\u001b[0;32m--> 253\u001b[0m \u001b[43mget_radiomics\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvoxel\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mimage_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43mmask_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43mROI\u001b[49m\u001b[43m,\u001b[49m\u001b[43mRS_save_path\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/mCODE-MOSAICO/examples/../utils/radiomics_utils.py:522\u001b[0m, in \u001b[0;36mget_radiomics\u001b[0;34m(method, image_file, mask_file, ROIName, path_radiomics)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[38;5;66;03m#featureVector = extractor.execute(image,image)\u001b[39;00m\n\u001b[1;32m 519\u001b[0m \n\u001b[1;32m 520\u001b[0m \u001b[38;5;66;03m#TO DO: reshape the feature map\u001b[39;00m\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvoxel\u001b[39m\u001b[38;5;124m'\u001b[39m: \n\u001b[0;32m--> 522\u001b[0m featureVector \u001b[38;5;241m=\u001b[39m \u001b[43mextractor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimageName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmaskName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvoxelBased\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 523\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key, val \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(featureVector):\n\u001b[1;32m 524\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(val, sitk\u001b[38;5;241m.\u001b[39mImage): \u001b[38;5;66;03m# Feature map\u001b[39;00m\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/featureextractor.py:330\u001b[0m, in \u001b[0;36mRadiomicsFeatureExtractor.execute\u001b[0;34m(self, imageFilepath, maskFilepath, label, label_channel, voxelBased)\u001b[0m\n\u001b[1;32m 328\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCalculating features for \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m image\u001b[39m\u001b[38;5;124m'\u001b[39m, imageTypeName)\n\u001b[1;32m 329\u001b[0m inputImage, inputMask \u001b[38;5;241m=\u001b[39m imageoperations\u001b[38;5;241m.\u001b[39mcropToTumorMask(inputImage, mask, boundingBox, padDistance\u001b[38;5;241m=\u001b[39mkernelRadius)\n\u001b[0;32m--> 330\u001b[0m featureVector\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcomputeFeatures\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputImage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputMask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mimageTypeName\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputKwargs\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 332\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFeatures extracted\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m featureVector\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/featureextractor.py:517\u001b[0m, in \u001b[0;36mRadiomicsFeatureExtractor.computeFeatures\u001b[0;34m(self, image, mask, imageTypeName, **kwargs)\u001b[0m\n\u001b[1;32m 514\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m feature \u001b[38;5;129;01min\u001b[39;00m featureNames:\n\u001b[1;32m 515\u001b[0m featureClass\u001b[38;5;241m.\u001b[39menableFeatureByName(feature)\n\u001b[0;32m--> 517\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m (featureName, featureValue) \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(\u001b[43mfeatureClass\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m):\n\u001b[1;32m 518\u001b[0m newFeatureName \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (imageTypeName, featureClassName, featureName)\n\u001b[1;32m 519\u001b[0m featureVector[newFeatureName] \u001b[38;5;241m=\u001b[39m featureValue\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:183\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase.execute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menableAllFeatures()\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvoxelBased:\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_calculateVoxels\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateSegment()\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:209\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase._calculateVoxels\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 207\u001b[0m voxelCoords \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabelledVoxelCoordinates[:, voxel_batch_idx:voxel_batch_idx \u001b[38;5;241m+\u001b[39m voxelBatch]\n\u001b[1;32m 208\u001b[0m \u001b[38;5;66;03m# Calculate the feature values for the current kernel\u001b[39;00m\n\u001b[0;32m--> 209\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m success, featureName, featureValue \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateFeatures(voxelCoords):\n\u001b[1;32m 210\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m success:\n\u001b[1;32m 211\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfeatureValues[featureName][\u001b[38;5;28mtuple\u001b[39m(voxelCoords)] \u001b[38;5;241m=\u001b[39m featureValue\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/base.py:231\u001b[0m, in \u001b[0;36mRadiomicsFeaturesBase._calculateFeatures\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_calculateFeatures\u001b[39m(\u001b[38;5;28mself\u001b[39m, voxelCoordinates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 229\u001b[0m \u001b[38;5;66;03m# Initialize the calculation\u001b[39;00m\n\u001b[1;32m 230\u001b[0m \u001b[38;5;66;03m# This function serves to calculate the texture matrices where applicable\u001b[39;00m\n\u001b[0;32m--> 231\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_initCalculation\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvoxelCoordinates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCalculating features\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m feature, enabled \u001b[38;5;129;01min\u001b[39;00m six\u001b[38;5;241m.\u001b[39miteritems(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menabledFeatures):\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/glcm.py:111\u001b[0m, in \u001b[0;36mRadiomicsGLCM._initCalculation\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m_initCalculation\u001b[39m(\u001b[38;5;28mself\u001b[39m, voxelCoordinates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m--> 111\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mP_glcm \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_calculateMatrix\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvoxelCoordinates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_calculateCoefficients()\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mGLCM feature class initialized, calculated GLCM with shape \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mP_glcm\u001b[38;5;241m.\u001b[39mshape)\n", + "File \u001b[0;32m/data/odette/p3venv/lib/python3.10/site-packages/radiomics/glcm.py:139\u001b[0m, in \u001b[0;36mRadiomicsGLCM._calculateMatrix\u001b[0;34m(self, voxelCoordinates)\u001b[0m\n\u001b[1;32m 136\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvoxelBased:\n\u001b[1;32m 137\u001b[0m matrix_args \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msettings\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mkernelRadius\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;241m1\u001b[39m), voxelCoordinates]\n\u001b[0;32m--> 139\u001b[0m P_glcm, angles \u001b[38;5;241m=\u001b[39m \u001b[43mcMatrices\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_glcm\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmatrix_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlogger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mProcess calculated matrix\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 143\u001b[0m \u001b[38;5;66;03m# Delete rows and columns that specify gray levels not present in the ROI\u001b[39;00m\n", + "\u001b[0;31mMemoryError\u001b[0m: " + ] + } + ], + "source": [ + "paths_images_RS = {}\n", + "for path in paths_images_all:\n", + " set_images = get_set_images(path)\n", + " if len(set_images)!=0:\n", + " for path_2 in paths_images_all:\n", + " RS_file = search_RS_file(path_2,set_images[0].SeriesDescription)\n", + " \n", + " #if len(RS_file)!=0:\n", + " #RS_file.sort(key = lambda x: (x.StructureSetDate))\n", + " #ROis = get_ROI_keys_2(RS_file[0])\n", + " #radiomics_utils.create_ROI_folders_and_radiomics_specific(RS_file[0],'Brain',folder_path_radiomics,set_images,new_path_save_images) \n", + " #except:\n", + " # continue\n", + " #print(RS_file)\n", + " \n", + " #\n", + " #\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7deb2328-4ad9-4ca9-91c7-6e002e5a1132", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c028d6f2-4260-46e1-bffb-67cc4d86e372", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdcc3f42-6ebd-49b7-b7cc-26a2a6dfaa57", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11f82404-783e-456a-86d1-c5c84f239962", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "226dab8f-c37c-43a3-872c-75703813b280", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/examples_radiomics.ipynb b/examples/examples_radiomics.ipynb new file mode 100644 index 0000000..dedc876 --- /dev/null +++ b/examples/examples_radiomics.ipynb @@ -0,0 +1,587 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ba5041e3", + "metadata": {}, + "outputs": [], + "source": [ + "import pydicom as dcm\n", + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "from matplotlib import pyplot as plt\n", + "import json\n", + "\n", + "import sys\n", + "sys.path.append('../utils')\n", + "import radiomics_utils\n", + "from radiomics_utils import *" + ] + }, + { + "cell_type": "markdown", + "id": "04a0895d-6992-43a2-9c1b-080e0ec7b34d", + "metadata": {}, + "source": [ + "# (1) Extract Radiomics Features" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "98adb6dc-23cc-462d-8543-299a1af860fc", + "metadata": {}, + "outputs": [], + "source": [ + "#DEFINE THE PATHS\n", + "RS_file_path = '/mnt/iDriveShare/OdetteR/RS.1.2.246.352.221.5025178147081550296.39585418623785370.dcm'\n", + "RD_file_path = '/mnt/iDriveShare/OdetteR/RD.1.2.246.352.221.5033396232640089036.3564551512373665180.dcm'\n", + "PATH_TO_SAVE = ''\n", + "dir_image_path = '../examples/GBM_burdenko_example/'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "568b9b6a-2bb8-4e2b-85ff-35da77706d28", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "************* Error in path: No medical images found *************\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#GET THE SET OF THE MEDICAL IMAGES TO ANALYZE\n", + "get_set_images(dir_image_path)" + ] + }, + { + "cell_type": "markdown", + "id": "90413e13-e05b-4819-8fd2-83734e800d4e", + "metadata": {}, + "source": [ + "# (2) Extract Dosiomics Features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a4efec0-4665-42be-a8eb-2fe8d76c32f6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "01356d5f", + "metadata": {}, + "source": [ + "# (3) Extract Dosimetric Features" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e93ccc7e-a588-45d6-a10b-0905c6295e2e", + "metadata": {}, + "outputs": [], + "source": [ + "#DEFINE THE PATHS\n", + "RS_file_path = '/mnt/iDriveShare/OdetteR/RS.1.2.246.352.221.5025178147081550296.39585418623785370.dcm'\n", + "RD_file_path = '/mnt/iDriveShare/OdetteR/RD.1.2.246.352.221.5033396232640089036.3564551512373665180.dcm'\n", + "PATH_TO_SAVE = ''" + ] + }, + { + "cell_type": "markdown", + "id": "ce696a24-28da-4839-a2fa-ba6fd1a68b1e", + "metadata": {}, + "source": [ + "### Get the dosimetric factors for one structure" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c65921d7-8850-4452-abdd-71af09b9ab4d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034}\n", + "\n", + "\n", + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034, 'V0.5cc': 13118.5072209096}\n", + "\n", + "\n", + "----------BODY JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n" + ] + } + ], + "source": [ + "# DEFINE THE DOSIMETRIC FACTORS YOU WANT \n", + "# THE DEFAULT FACTORS ARE: D0%, D100%, D50%, Mean Dose.\n", + "#To define the volume factors write: V20cc, V0.5cc\n", + "\n", + "#if you want to get the factor for all the structure input 'all', otherwise you can the results for one structrue typing the label\n", + "#I THINK THE BODY DOES NOT HAVE DHV VALUES \n", + "\n", + "all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors = ['D0', 'D100', 'D50','mean','V0.5cc'],ROI_names = 'BODY')\n" + ] + }, + { + "cell_type": "markdown", + "id": "aa6d88d4-7b21-499e-be46-8cc430179d49", + "metadata": {}, + "source": [ + "### Get the dosimetric factors for all structures" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1d920cd7-6d16-4931-b8bc-109256025e3d", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ROI Name': 'BODY', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.0, 'D50': 2.0000000000000013, 'mean': 12.478146303650034}\n", + "\n", + "\n", + "----------BODY JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BrachialPlexus_L', 'units': 'GY', 'D0': 63.08999999999602, 'D100': 31.120000000002065, 'D50': 48.129999999998994, 'mean': 48.24932504374163}\n", + "\n", + "\n", + "----------BrachialPlexus_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Sup', 'units': 'GY', 'D0': 73.39000000000064, 'D100': 0.0, 'D50': 71.06999999999945, 'mean': 69.95433860014305}\n", + "\n", + "\n", + "----------PharCon_Sup JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BoneRadCalc', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 0.01, 'D50': 2.569999999999989, 'mean': 11.781885296206337}\n", + "\n", + "\n", + "----------BoneRadCalc JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brain', 'units': 'GY', 'D0': 39.320000000000746, 'D100': 0.25000000000000006, 'D50': 0.9500000000000006, 'mean': 2.517160116394192}\n", + "\n", + "\n", + "----------Brain JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Pituitary', 'units': 'GY', 'D0': 3.139999999999977, 'D100': 0.0, 'D50': 2.9399999999999813, 'mean': 2.9435141301097176}\n", + "\n", + "\n", + "----------Pituitary JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'BrachialPlexus_R', 'units': 'GY', 'D0': 67.14999999999745, 'D100': 35.58000000000149, 'D50': 52.35999999999815, 'mean': 52.72075531992825}\n", + "\n", + "\n", + "----------BrachialPlexus_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'TemporalLobe_L', 'units': 'GY', 'D0': 5.799999999999921, 'D100': 0.49000000000000027, 'D50': 1.6100000000000012, 'mean': 1.8414351317501298}\n", + "\n", + "\n", + "----------TemporalLobe_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Eye_R', 'units': 'GY', 'D0': 2.109999999999999, 'D100': 0.9100000000000006, 'D50': 1.400000000000001, 'mean': 1.4108398390666461}\n", + "\n", + "\n", + "----------Eye_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Inf', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 47.5799999999991, 'D50': 70.99999999999942, 'mean': 66.67849889960024}\n", + "\n", + "\n", + "----------PharCon_Inf JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Esophagus_Upper', 'units': 'GY', 'D0': 60.00999999999663, 'D100': 0.34000000000000014, 'D50': 4.519999999999948, 'mean': 15.862390748161694}\n", + "\n", + "\n", + "----------Esophagus_Upper JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SpinalCord', 'units': 'GY', 'D0': 31.61000000000214, 'D100': 0.25000000000000006, 'D50': 25.78000000000123, 'mean': 16.954778127631347}\n", + "\n", + "\n", + "----------SpinalCord JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SubmndSalv_R', 'units': 'GY', 'D0': 73.80000000000085, 'D100': 64.309999999996, 'D50': 71.68999999999977, 'mean': 71.34122256100727}\n", + "\n", + "\n", + "----------SubmndSalv_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Mandible', 'units': 'GY', 'D0': 73.68000000000079, 'D100': 5.079999999999936, 'D50': 43.27999999999996, 'mean': 44.48027023280471}\n", + "\n", + "\n", + "----------Mandible JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Parotid_L', 'units': 'GY', 'D0': 73.75000000000082, 'D100': 13.519999999999756, 'D50': 42.71000000000007, 'mean': 44.31780152397997}\n", + "\n", + "\n", + "----------Parotid_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Larynx', 'units': 'GY', 'D0': 74.45000000000118, 'D100': 53.249999999997975, 'D50': 71.33999999999959, 'mean': 69.76499584305088}\n", + "\n", + "\n", + "----------Larynx JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lens_L', 'units': 'GY', 'D0': 1.5500000000000012, 'D100': 1.1900000000000008, 'D50': 1.340000000000001, 'mean': 1.3456971443396637}\n", + "\n", + "\n", + "----------Lens_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'TemporalLobe_R', 'units': 'GY', 'D0': 6.349999999999909, 'D100': 0.5300000000000002, 'D50': 1.7300000000000013, 'mean': 1.940498069401837}\n", + "\n", + "\n", + "----------TemporalLobe_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lips', 'units': 'GY', 'D0': 22.44000000000071, 'D100': 2.4499999999999917, 'D50': 12.659999999999775, 'mean': 12.74151854563645}\n", + "\n", + "\n", + "----------Lips JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brainstem_PRV5', 'units': 'GY', 'D0': 27.140000000001443, 'D100': 1.360000000000001, 'D50': 3.9199999999999604, 'mean': 7.556756500917696}\n", + "\n", + "\n", + "----------Brainstem_PRV5 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OpticNerve_R', 'units': 'GY', 'D0': 2.439999999999992, 'D100': 1.5800000000000012, 'D50': 2.0400000000000005, 'mean': 2.0308479713918173}\n", + "\n", + "\n", + "----------OpticNerve_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OpticNerve_L', 'units': 'GY', 'D0': 2.3199999999999945, 'D100': 1.5100000000000011, 'D50': 1.9400000000000015, 'mean': 1.9427105584239939}\n", + "\n", + "\n", + "----------OpticNerve_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PAROTID_L_NOS', 'units': 'GY', 'D0': 55.72999999999748, 'D100': 13.519999999999756, 'D50': 34.67000000000167, 'mean': 35.124731324344936}\n", + "\n", + "\n", + "----------PAROTID_L_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PAROTID_R_NOS', 'units': 'GY', 'D0': 55.54999999999752, 'D100': 13.059999999999766, 'D50': 33.190000000001966, 'mean': 33.435691202934386}\n", + "\n", + "\n", + "----------PAROTID_R_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LUNG_L', 'units': 'GY', 'D0': 41.38000000000034, 'D100': 0.20000000000000004, 'D50': 1.390000000000001, 'mean': 2.6167874969022558}\n", + "\n", + "\n", + "----------LUNG_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LUNG_R', 'units': 'GY', 'D0': 42.13000000000019, 'D100': 0.21000000000000005, 'D50': 1.380000000000001, 'mean': 2.3016952334984366}\n", + "\n", + "\n", + "----------LUNG_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'ESOPHAGUS_2CM', 'units': 'GY', 'D0': 60.00999999999663, 'D100': 4.699999999999944, 'D50': 32.70000000000206, 'mean': 31.142471374192258}\n", + "\n", + "\n", + "----------ESOPHAGUS_2CM JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV70+PTV60', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 53.65999999999789, 'D50': 68.0299999999979, 'mean': 67.61579412005825}\n", + "\n", + "\n", + "----------PTV70+PTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV_ALL', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 50.829999999998456, 'D50': 65.27999999999649, 'mean': 65.90769008033311}\n", + "\n", + "\n", + "----------PTV_ALL JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'LARYNX_NOS', 'units': 'GY', 'D0': 66.16999999999695, 'D100': 53.249999999997975, 'D50': 60.54999999999652, 'mean': 60.19495324918354}\n", + "\n", + "\n", + "----------LARYNX_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OralCavity_NOS', 'units': 'GY', 'D0': 65.4799999999966, 'D100': 7.179999999999891, 'D50': 34.350000000001735, 'mean': 35.292158391127984}\n", + "\n", + "\n", + "----------OralCavity_NOS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'AVOID 56', 'units': 'GY', 'D0': 61.10999999999641, 'D100': 28.350000000001632, 'D50': 57.24999999999718, 'mean': 56.0668940613376}\n", + "\n", + "\n", + "----------AVOID 56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'AVOID 60', 'units': 'GY', 'D0': 69.0099999999984, 'D100': 28.85000000000171, 'D50': 61.85999999999626, 'mean': 60.91755369271381}\n", + "\n", + "\n", + "----------AVOID 60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 56', 'units': 'GY', 'D0': 58.18999999999699, 'D100': 3.5899999999999674, 'D50': 35.010000000001604, 'mean': 32.33822042943649}\n", + "\n", + "\n", + "----------RING 56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 60', 'units': 'GY', 'D0': 63.30999999999597, 'D100': 3.8799999999999613, 'D50': 42.21000000000017, 'mean': 41.49827693799373}\n", + "\n", + "\n", + "----------RING 60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'RING 70', 'units': 'GY', 'D0': 72.22000000000004, 'D100': 5.139999999999935, 'D50': 57.33999999999716, 'mean': 52.777156206112835}\n", + "\n", + "\n", + "----------RING 70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'MIDDLE AVOID', 'units': 'GY', 'D0': 62.33999999999617, 'D100': 12.84999999999977, 'D50': 51.91999999999824, 'mean': 49.308600443594074}\n", + "\n", + "\n", + "----------MIDDLE AVOID JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'POST AVOID', 'units': 'GY', 'D0': 44.459999999999724, 'D100': 0.0, 'D50': 26.10000000000128, 'mean': 24.78531014103551}\n", + "\n", + "\n", + "----------POST AVOID JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SHOULDERS', 'units': 'GY', 'D0': 26.980000000001418, 'D100': 0.5700000000000003, 'D50': 4.759999999999943, 'mean': 6.432666291608502}\n", + "\n", + "\n", + "----------SHOULDERS JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Lens_R', 'units': 'GY', 'D0': 1.5700000000000012, 'D100': 1.2100000000000009, 'D50': 1.360000000000001, 'mean': 1.3708988013898094}\n", + "\n", + "\n", + "----------Lens_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Cochlea_R', 'units': 'GY', 'D0': 10.789999999999814, 'D100': 4.809999999999942, 'D50': 6.149999999999913, 'mean': 6.802517071499305}\n", + "\n", + "\n", + "----------Cochlea_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Parotid_R', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 13.059999999999766, 'D50': 37.76000000000106, 'mean': 40.97684368573284}\n", + "\n", + "\n", + "----------Parotid_R JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Eye_L', 'units': 'GY', 'D0': 2.1899999999999973, 'D100': 0.9100000000000006, 'D50': 1.390000000000001, 'mean': 1.412414381345314}\n", + "\n", + "\n", + "----------Eye_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PharCon_Mid', 'units': 'GY', 'D0': 73.59000000000074, 'D100': 64.18999999999593, 'D50': 72.10999999999999, 'mean': 71.3000647243097}\n", + "\n", + "\n", + "----------PharCon_Mid JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Thyroid', 'units': 'GY', 'D0': 72.65000000000026, 'D100': 49.679999999998685, 'D50': 57.169999999997195, 'mean': 57.16648470918692}\n", + "\n", + "\n", + "----------Thyroid JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Cochlea_L', 'units': 'GY', 'D0': 12.229999999999784, 'D100': 0.0, 'D50': 7.0799999999998935, 'mean': 7.674024321878931}\n", + "\n", + "\n", + "----------Cochlea_L JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'SpinalCord_PRV5', 'units': 'GY', 'D0': 39.92000000000063, 'D100': 0.24000000000000007, 'D50': 26.48000000000134, 'mean': 18.522233473045542}\n", + "\n", + "\n", + "----------SpinalCord_PRV5 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Chiasm', 'units': 'GY', 'D0': 2.1799999999999975, 'D100': 1.7500000000000013, 'D50': 1.9700000000000015, 'mean': 1.9642507698029732}\n", + "\n", + "\n", + "----------Chiasm JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'Brainstem', 'units': 'GY', 'D0': 22.490000000000716, 'D100': 1.6900000000000013, 'D50': 4.099999999999957, 'mean': 7.235430969796047}\n", + "\n", + "\n", + "----------Brainstem JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'OralCavity', 'units': 'GY', 'D0': 74.090000000001, 'D100': 7.179999999999891, 'D50': 44.47999999999972, 'mean': 44.26944893359331}\n", + "\n", + "\n", + "----------OralCavity JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV60', 'units': 'GY', 'D0': 74.12000000000101, 'D100': 58.329999999996964, 'D50': 65.25999999999648, 'mean': 66.19974988117924}\n", + "\n", + "\n", + "----------CTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV70', 'units': 'GY', 'D0': 74.74000000000133, 'D100': 0.0, 'D50': 72.16000000000001, 'mean': 72.10643745253883}\n", + "\n", + "\n", + "----------CTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'GTV70', 'units': 'GY', 'D0': 74.50000000000121, 'D100': 0.0, 'D50': 72.00999999999993, 'mean': 71.97108846611944}\n", + "\n", + "\n", + "----------GTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CARINA', 'units': 'GY', 'D0': 2.759999999999985, 'D100': 0.34000000000000014, 'D50': 1.2200000000000009, 'mean': 1.3727575566465058}\n", + "\n", + "\n", + "----------CARINA JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'CTV56', 'units': 'GY', 'D0': 60.31999999999657, 'D100': 50.36999999999855, 'D50': 57.90999999999705, 'mean': 57.8644303881639}\n", + "\n", + "\n", + "----------CTV56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV70', 'units': 'GY', 'D0': 74.78000000000135, 'D100': 65.18999999999645, 'D50': 71.9299999999999, 'mean': 71.78635390717827}\n", + "\n", + "\n", + "----------PTV70 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV60', 'units': 'GY', 'D0': 72.19000000000003, 'D100': 53.65999999999789, 'D50': 63.82999999999587, 'mean': 64.02441745265358}\n", + "\n", + "\n", + "----------PTV60 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'PTV56', 'units': 'GY', 'D0': 61.10999999999641, 'D100': 50.6099999999985, 'D50': 57.80999999999707, 'mean': 57.758823467388126}\n", + "\n", + "\n", + "----------PTV56 JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "---------POST Avoid30 does not have DVH information ----------------\n", + "---------SubmndSalv_L does not have DVH information ----------------\n", + "---------PHARYNX does not have DVH information ----------------\n", + "{'ROI Name': 'GTVp', 'units': 'GY', 'D0': 36.160000000001375, 'D100': 2.7299999999999858, 'D50': 24.330000000001004, 'mean': 22.558829644061664}\n", + "\n", + "\n", + "----------GTVp JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'GTVn', 'units': 'GY', 'D0': 73.16000000000052, 'D100': 61.75999999999628, 'D50': 69.0199999999984, 'mean': 68.88324339991766}\n", + "\n", + "\n", + "----------GTVn JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n", + "{'ROI Name': 'DENSITY_OVERIDE', 'units': 'GY', 'D0': 73.92000000000091, 'D100': 47.5799999999991, 'D50': 71.40999999999963, 'mean': 68.76466606856228}\n", + "\n", + "\n", + "----------DENSITY_OVERIDE JSON file with DOSIMETRIC factors were saved correctly ------------\n", + "\n", + "\n" + ] + } + ], + "source": [ + "all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors = ['D0', 'D100', 'D50','mean'],ROI_names = 'all')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8663c7f8-62f5-4a40-b86a-1e8f66df1ade", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/output_example/1/dosimetrics/BODY_dosimetric.json b/examples/output_example/1/dosimetrics/BODY_dosimetric.json new file mode 100644 index 0000000..fd0a19c --- /dev/null +++ b/examples/output_example/1/dosimetrics/BODY_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "BODY", + "units": "GY", + "D0": 74.73000000000133, + "D100": 0.0, + "D50": 4.41999999999995, + "mean": 10.504937945597998, + "V0.5cc": 3577.54951219606 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Brain-PTV_dosimetric.json b/examples/output_example/1/dosimetrics/Brain-PTV_dosimetric.json new file mode 100644 index 0000000..399360c --- /dev/null +++ b/examples/output_example/1/dosimetrics/Brain-PTV_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Brain-PTV", + "units": "GY", + "D0": 68.06999999999792, + "D100": 0.7300000000000004, + "D50": 11.4499999999998, + "mean": 15.249880267980094, + "V0.5cc": 1078.27117795716 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/BrainStem_dosimetric.json b/examples/output_example/1/dosimetrics/BrainStem_dosimetric.json new file mode 100644 index 0000000..778b3e2 --- /dev/null +++ b/examples/output_example/1/dosimetrics/BrainStem_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "BrainStem", + "units": "GY", + "D0": 37.920000000001025, + "D100": 1.5700000000000012, + "D50": 6.589999999999904, + "mean": 8.073935016074667, + "V0.5cc": 24.6828711857814 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Brain_dosimetric.json b/examples/output_example/1/dosimetrics/Brain_dosimetric.json new file mode 100644 index 0000000..dcb1f5b --- /dev/null +++ b/examples/output_example/1/dosimetrics/Brain_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Brain", + "units": "GY", + "D0": 74.63000000000127, + "D100": 0.7300000000000004, + "D50": 13.449999999999758, + "mean": 22.633741269739172, + "V0.5cc": 1270.50192021375 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/CTV_20 mm_dosimetric.json b/examples/output_example/1/dosimetrics/CTV_20 mm_dosimetric.json new file mode 100644 index 0000000..9a399c6 --- /dev/null +++ b/examples/output_example/1/dosimetrics/CTV_20 mm_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "CTV_20 mm", + "units": "GY", + "D0": 74.63000000000127, + "D100": 47.0999999999992, + "D50": 64.36999999999603, + "mean": 64.34469406354704, + "V0.5cc": 169.275454027487 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Chiasm_dosimetric.json b/examples/output_example/1/dosimetrics/Chiasm_dosimetric.json new file mode 100644 index 0000000..2f67a21 --- /dev/null +++ b/examples/output_example/1/dosimetrics/Chiasm_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Chiasm", + "units": "GY", + "D0": 25.670000000001213, + "D100": 3.2199999999999753, + "D50": 10.97999999999981, + "mean": 11.905644510230077, + "V0.5cc": 0.5979444272301 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Eye_L_dosimetric.json b/examples/output_example/1/dosimetrics/Eye_L_dosimetric.json new file mode 100644 index 0000000..dc21ba9 --- /dev/null +++ b/examples/output_example/1/dosimetrics/Eye_L_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Eye_L", + "units": "GY", + "D0": 5.099999999999936, + "D100": 0.8000000000000005, + "D50": 1.270000000000001, + "mean": 1.7741703382182303, + "V0.5cc": 9.14982276840401 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Eye_R_dosimetric.json b/examples/output_example/1/dosimetrics/Eye_R_dosimetric.json new file mode 100644 index 0000000..923ef9d --- /dev/null +++ b/examples/output_example/1/dosimetrics/Eye_R_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Eye_R", + "units": "GY", + "D0": 6.539999999999905, + "D100": 2.07, + "D50": 2.8899999999999824, + "mean": 3.1742882930453367, + "V0.5cc": 9.14460979954108 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/GTV_FLAIR_dosimetric.json b/examples/output_example/1/dosimetrics/GTV_FLAIR_dosimetric.json new file mode 100644 index 0000000..bbd2cfa --- /dev/null +++ b/examples/output_example/1/dosimetrics/GTV_FLAIR_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "GTV_FLAIR", + "units": "GY", + "D0": 71.19999999999952, + "D100": 55.38999999999755, + "D50": 64.65999999999617, + "mean": 64.72588224020664, + "V0.5cc": 20.8523904101018 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Lens_L_dosimetric.json b/examples/output_example/1/dosimetrics/Lens_L_dosimetric.json new file mode 100644 index 0000000..d7ec742 --- /dev/null +++ b/examples/output_example/1/dosimetrics/Lens_L_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Lens_L", + "units": "GY", + "D0": 3.5999999999999672, + "D100": 0.0, + "D50": 1.1900000000000008, + "mean": 1.5065477986823226, + "V0.5cc": 1.74933192230384 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/Lens_R_dosimetric.json b/examples/output_example/1/dosimetrics/Lens_R_dosimetric.json new file mode 100644 index 0000000..2f8536a --- /dev/null +++ b/examples/output_example/1/dosimetrics/Lens_R_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "Lens_R", + "units": "GY", + "D0": 3.5799999999999677, + "D100": 0.0, + "D50": 2.3199999999999945, + "mean": 2.387986192273429, + "V0.5cc": 1.55018110572697 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/OpticNerve_L_dosimetric.json b/examples/output_example/1/dosimetrics/OpticNerve_L_dosimetric.json new file mode 100644 index 0000000..baebaa6 --- /dev/null +++ b/examples/output_example/1/dosimetrics/OpticNerve_L_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "OpticNerve_L", + "units": "GY", + "D0": 4.249999999999954, + "D100": 1.270000000000001, + "D50": 1.6000000000000012, + "mean": 1.7429748206193434, + "V0.5cc": 0.56168308745862 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/OpticNerve_R_dosimetric.json b/examples/output_example/1/dosimetrics/OpticNerve_R_dosimetric.json new file mode 100644 index 0000000..f1ef879 --- /dev/null +++ b/examples/output_example/1/dosimetrics/OpticNerve_R_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "OpticNerve_R", + "units": "GY", + "D0": 12.359999999999781, + "D100": 4.459999999999949, + "D50": 9.049999999999851, + "mean": 8.681461812008783, + "V0.5cc": 0.61328087638374 +} \ No newline at end of file diff --git a/examples/output_example/1/dosimetrics/PTV_dosimetric.json b/examples/output_example/1/dosimetrics/PTV_dosimetric.json new file mode 100644 index 0000000..710345f --- /dev/null +++ b/examples/output_example/1/dosimetrics/PTV_dosimetric.json @@ -0,0 +1,9 @@ +{ + "ROI Name": "PTV", + "units": "GY", + "D0": 74.63000000000127, + "D100": 44.86999999999964, + "D50": 64.14999999999591, + "mean": 64.05078421540071, + "V0.5cc": 191.93152516635 +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_CT/20040506_CT.nrrd b/examples/output_example/1/medical_images/20040506_CT/20040506_CT.nrrd new file mode 100644 index 0000000..3faa20a Binary files /dev/null and b/examples/output_example/1/medical_images/20040506_CT/20040506_CT.nrrd differ diff --git a/examples/output_example/1/medical_images/20040506_CT/CT_acquisition_properties.json b/examples/output_example/1/medical_images/20040506_CT/CT_acquisition_properties.json new file mode 100644 index 0000000..17f7034 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_CT/CT_acquisition_properties.json @@ -0,0 +1,9 @@ +{ + "Image Type": "['ORIGINAL', 'PRIMARY', 'AXIAL']", + "Scan Mode": "HELICAL MODE", + "KVP": "120", + "XRayTubeCurrent": "491", + "Exposure (msec)": "897", + "Spiral Pitch": "None", + "Image Filter": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_CT/cancer_patient_attributes.json b/examples/output_example/1/medical_images/20040506_CT/cancer_patient_attributes.json new file mode 100644 index 0000000..a85baa8 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_CT/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_CT/image_acquisition_attributes.json b/examples/output_example/1/medical_images/20040506_CT/image_acquisition_attributes.json new file mode 100644 index 0000000..657053f --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_CT/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "Optima CT580", + "Scan Duration": "133949.687", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "382", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_CT/image_study_attributes.json b/examples/output_example/1/medical_images/20040506_CT/image_study_attributes.json new file mode 100644 index 0000000..bcff2f2 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_CT/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "CT", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_CT/reconstruction_attributes.json b/examples/output_example/1/medical_images/20040506_CT/reconstruction_attributes.json new file mode 100644 index 0000000..65559e3 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_CT/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "CT", + "Slice Thickness (mm)": "1.25", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.746094, 0.746094]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "STANDARD" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd b/examples/output_example/1/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd new file mode 100644 index 0000000..31c7e53 Binary files /dev/null and b/examples/output_example/1/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd differ diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json new file mode 100644 index 0000000..67907ac --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "085821", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_study_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T1/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json new file mode 100644 index 0000000..0a10ad9 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "1", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[1, 1]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd b/examples/output_example/1/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd new file mode 100644 index 0000000..9513076 Binary files /dev/null and b/examples/output_example/1/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd differ diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json new file mode 100644 index 0000000..e248aa8 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "090545", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_study_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T2/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json new file mode 100644 index 0000000..fd8df51 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "5", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.4883, 0.4883]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd new file mode 100644 index 0000000..ded7c0a Binary files /dev/null and b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd differ diff --git a/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json new file mode 100644 index 0000000..1874c64 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "085320", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json new file mode 100644 index 0000000..baa5b29 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "2", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.5, 0.5]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd b/examples/output_example/1/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd new file mode 100644 index 0000000..a7be7c0 Binary files /dev/null and b/examples/output_example/1/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd differ diff --git a/examples/output_example/1/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json new file mode 100644 index 0000000..2e3e2d8 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "091625", + "Contrast Enhancement/Bolus": { + "Agent": "YES 15", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_study_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MRCET1/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/1/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json b/examples/output_example/1/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json new file mode 100644 index 0000000..0a10ad9 --- /dev/null +++ b/examples/output_example/1/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "1", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[1, 1]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_CT/20040506_CT.nrrd b/examples/output_example/patient/medical_images/20040506_CT/20040506_CT.nrrd new file mode 100644 index 0000000..895b897 Binary files /dev/null and b/examples/output_example/patient/medical_images/20040506_CT/20040506_CT.nrrd differ diff --git a/examples/output_example/patient/medical_images/20040506_CT/CT_acquisition_properties.json b/examples/output_example/patient/medical_images/20040506_CT/CT_acquisition_properties.json new file mode 100644 index 0000000..17f7034 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_CT/CT_acquisition_properties.json @@ -0,0 +1,9 @@ +{ + "Image Type": "['ORIGINAL', 'PRIMARY', 'AXIAL']", + "Scan Mode": "HELICAL MODE", + "KVP": "120", + "XRayTubeCurrent": "491", + "Exposure (msec)": "897", + "Spiral Pitch": "None", + "Image Filter": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_CT/cancer_patient_attributes.json b/examples/output_example/patient/medical_images/20040506_CT/cancer_patient_attributes.json new file mode 100644 index 0000000..a85baa8 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_CT/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_CT/image_acquisition_attributes.json b/examples/output_example/patient/medical_images/20040506_CT/image_acquisition_attributes.json new file mode 100644 index 0000000..657053f --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_CT/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "Optima CT580", + "Scan Duration": "133949.687", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "382", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_CT/image_study_attributes.json b/examples/output_example/patient/medical_images/20040506_CT/image_study_attributes.json new file mode 100644 index 0000000..bcff2f2 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_CT/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "CT", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_CT/reconstruction_attributes.json b/examples/output_example/patient/medical_images/20040506_CT/reconstruction_attributes.json new file mode 100644 index 0000000..65559e3 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_CT/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "CT", + "Slice Thickness (mm)": "1.25", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.746094, 0.746094]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "STANDARD" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd new file mode 100644 index 0000000..2c6ec37 Binary files /dev/null and b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/20040506_MR_MR00T1.nrrd differ diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json new file mode 100644 index 0000000..67907ac --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "085821", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_study_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json new file mode 100644 index 0000000..0a10ad9 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T1/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "1", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[1, 1]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd new file mode 100644 index 0000000..a6fd41f Binary files /dev/null and b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/20040506_MR_MR00T2.nrrd differ diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json new file mode 100644 index 0000000..e248aa8 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "090545", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_study_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json new file mode 100644 index 0000000..fd8df51 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR00T2/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "5", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.4883, 0.4883]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd new file mode 100644 index 0000000..d926f9e Binary files /dev/null and b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/20040506_MR_MR0T2FLAIR.nrrd differ diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json new file mode 100644 index 0000000..1874c64 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "085320", + "Contrast Enhancement/Bolus": { + "Agent": "None", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json new file mode 100644 index 0000000..baa5b29 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MR0T2FLAIR/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "2", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[0.5, 0.5]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd new file mode 100644 index 0000000..9cafff9 Binary files /dev/null and b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/20040506_MR_MRCET1.nrrd differ diff --git a/examples/output_example/patient/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json new file mode 100644 index 0000000..6b2fa40 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/cancer_patient_attributes.json @@ -0,0 +1,8 @@ +{ + "Patient Name": "Burdenko-GBM-001", + "Patient's Birth Date": "", + "Patient's Sex": "F", + "Patient's Ethnic Group": "None", + "Patient's Age": "None", + "Patient's Weight": "69" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json new file mode 100644 index 0000000..2e3e2d8 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_acquisition_attributes.json @@ -0,0 +1,20 @@ +{ + "Imaging Protocol": "None\nNone", + "Scanner Vendor": "GE MEDICAL SYSTEMS", + "Scanner Type": "OPTIMA MR360", + "Scan Duration": "091625", + "Contrast Enhancement/Bolus": { + "Agent": "YES 15", + "Ingredient": "None" + }, + "Acquisition Field Of View": { + "Reconstruction FOV Diameter": "None", + "FOV Shape": "None", + "FOV Dimensions": "None", + "FOV/Geometry": "None" + }, + "Patient Instructions": { + "Patient Orientation": "None", + "Instruction Sequence": "HFS" + } +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_study_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_study_attributes.json new file mode 100644 index 0000000..abbde1b --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/image_study_attributes.json @@ -0,0 +1,10 @@ +{ + "Date of Imaging": "20040506", + "Image Modality": "MR", + "Image Identifier": "1.3.6.1.4.1.14519.5.2.1.263048362707067743353550175629196601357", + "Body Site": "None", + "Body Structure or Part": "None", + "Series Date": "20040506", + "Study Description": "Radiotherapy planning 00", + "Reason": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json new file mode 100644 index 0000000..0a10ad9 --- /dev/null +++ b/examples/output_example/patient/medical_images/20040506_MR_MRCET1/reconstruction_attributes.json @@ -0,0 +1,11 @@ +{ + "Image Type": "MR", + "Slice Thickness (mm)": "1", + "Slice Spacing (mm)": "None", + "Pixel Spacing (mm)": "[1, 1]", + "Reconstruction Technique": { + "Method": "None", + "Algoritihm": "None" + }, + "Convolution Kernel": "None" +} \ No newline at end of file diff --git a/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain.nrrd b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain.nrrd new file mode 100644 index 0000000..29943a2 Binary files /dev/null and b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain.nrrd differ diff --git a/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain_radiomics.json b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain_radiomics.json new file mode 100644 index 0000000..a2617d7 --- /dev/null +++ b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_CT/seg_Brain_radiomics.json @@ -0,0 +1,110 @@ +{ + "ROI Name": "Brain", + "original_shape_Elongation": 0.8669202011279025, + "original_shape_Flatness": 0.4195954560161778, + "original_shape_LeastAxisLength": 79.48899042477039, + "original_shape_MajorAxisLength": 189.44197151102045, + "original_shape_Maximum2DDiameterColumn": 183.3303030052588, + "original_shape_Maximum2DDiameterRow": 211.463944917331, + "original_shape_Maximum2DDiameterSlice": 214.57399656062708, + "original_shape_Maximum3DDiameter": 215.56669501571898, + "original_shape_MeshVolume": 1398378.6666666667, + "original_shape_MinorAxisLength": 164.23107204440024, + "original_shape_Sphericity": 0.22364465617052817, + "original_shape_SurfaceArea": 270401.31059945736, + "original_shape_SurfaceVolumeRatio": 0.19336773153441797, + "original_shape_VoxelVolume": 1399176.0, + "original_firstorder_10Percentile": 1013.0, + "original_firstorder_90Percentile": 1060.0, + "original_firstorder_Energy": 1503916948949.0, + "original_firstorder_Entropy": 1.7737546325296447, + "original_firstorder_InterquartileRange": 24.0, + "original_firstorder_Kurtosis": 971.2702836873799, + "original_firstorder_Maximum": 2953.0, + "original_firstorder_MeanAbsoluteDeviation": 15.336586657303807, + "original_firstorder_Mean": 1036.4162342693128, + "original_firstorder_Median": 1035.0, + "original_firstorder_Minimum": 190.0, + "original_firstorder_Range": 2763.0, + "original_firstorder_RobustMeanAbsoluteDeviation": 9.984147652819535, + "original_firstorder_RootMeanSquared": 1036.7540804922614, + "original_firstorder_Skewness": 18.766748342861188, + "original_firstorder_TotalEnergy": 1503916948949.0, + "original_firstorder_Uniformity": 0.3634018237636076, + "original_firstorder_Variance": 700.4127603711514, + "original_glcm_Autocorrelation": 1221.7211833335346, + "original_glcm_ClusterProminence": 10863.100455349691, + "original_glcm_ClusterShade": 106.11117117401646, + "original_glcm_ClusterTendency": 3.0324297238217426, + "original_glcm_Contrast": 0.9017033645113368, + "original_glcm_Correlation": 0.529329038067237, + "original_glcm_DifferenceAverage": 0.611969177477694, + "original_glcm_DifferenceEntropy": 1.3306787473644293, + "original_glcm_DifferenceVariance": 0.5245153793898365, + "original_glcm_Id": 0.7226919377445842, + "original_glcm_Idm": 0.7132824867903623, + "original_glcm_Idmn": 0.9999290051363428, + "original_glcm_Idn": 0.9946048752798345, + "original_glcm_Imc1": -0.08549944077611493, + "original_glcm_Imc2": 0.49216937230494306, + "original_glcm_InverseVariance": 0.47638861462653137, + "original_glcm_JointAverage": 34.94550685531111, + "original_glcm_JointEnergy": 0.15374494736522784, + "original_glcm_JointEntropy": 3.3010534057551157, + "original_glcm_MCC": 0.9781538350772462, + "original_glcm_MaximumProbability": 0.30666728053497777, + "original_glcm_SumAverage": 69.89101371062219, + "original_glcm_SumEntropy": 2.448695833154965, + "original_glcm_SumSquares": 0.9835332720832698, + "original_glrlm_GrayLevelNonUniformity": 236274.0529433863, + "original_glrlm_GrayLevelNonUniformityNormalized": 0.30135806661375014, + "original_glrlm_GrayLevelVariance": 1.8111984422507896, + "original_glrlm_HighGrayLevelRunEmphasis": 1227.4837929752935, + "original_glrlm_LongRunEmphasis": 5.216536551947728, + "original_glrlm_LongRunHighGrayLevelEmphasis": 6378.804275970129, + "original_glrlm_LongRunLowGrayLevelEmphasis": 0.004276035843167391, + "original_glrlm_LowGrayLevelRunEmphasis": 0.0008206970287644432, + "original_glrlm_RunEntropy": 3.6702795216321955, + "original_glrlm_RunLengthNonUniformity": 335805.6173349894, + "original_glrlm_RunLengthNonUniformityNormalized": 0.4248630790101871, + "original_glrlm_RunPercentage": 0.5601349541554348, + "original_glrlm_RunVariance": 1.9611215987081816, + "original_glrlm_ShortRunEmphasis": 0.6727581560609069, + "original_glrlm_ShortRunHighGrayLevelEmphasis": 828.0860236105485, + "original_glrlm_ShortRunLowGrayLevelEmphasis": 0.0005520792985428167, + "original_glszm_GrayLevelNonUniformity": 7683.128875707738, + "original_glszm_GrayLevelNonUniformityNormalized": 0.2071482576356899, + "original_glszm_GrayLevelVariance": 17.790665434489615, + "original_glszm_HighGrayLevelZoneEmphasis": 1297.6475599892153, + "original_glszm_LargeAreaEmphasis": 5568720.806632515, + "original_glszm_LargeAreaHighGrayLevelEmphasis": 6779254300.15794, + "original_glszm_LargeAreaLowGrayLevelEmphasis": 4577.5345738253145, + "original_glszm_LowGrayLevelZoneEmphasis": 0.000839800222193661, + "original_glszm_SizeZoneNonUniformity": 13249.554489080614, + "original_glszm_SizeZoneNonUniformityNormalized": 0.35722713640012443, + "original_glszm_SmallAreaEmphasis": 0.6193147258266279, + "original_glszm_SmallAreaHighGrayLevelEmphasis": 813.6890304816826, + "original_glszm_SmallAreaLowGrayLevelEmphasis": 0.0005295999480482928, + "original_glszm_ZoneEntropy": 4.973385496893929, + "original_glszm_ZonePercentage": 0.026508459264595732, + "original_glszm_ZoneVariance": 5567297.721021259, + "original_gldm_DependenceEntropy": 5.857117155886179, + "original_gldm_DependenceNonUniformity": 70506.96967214989, + "original_gldm_DependenceNonUniformityNormalized": 0.05039178035654549, + "original_gldm_DependenceVariance": 29.289427925662995, + "original_gldm_GrayLevelNonUniformity": 508463.1101662693, + "original_gldm_GrayLevelVariance": 1.2029864786962758, + "original_gldm_HighGrayLevelEmphasis": 1224.6375652526915, + "original_gldm_LargeDependenceEmphasis": 183.9557410933292, + "original_gldm_LargeDependenceHighGrayLevelEmphasis": 224688.40369474606, + "original_gldm_LargeDependenceLowGrayLevelEmphasis": 0.15076955135705156, + "original_gldm_LowGrayLevelEmphasis": 0.000820449033325775, + "original_gldm_SmallDependenceEmphasis": 0.033183561598353416, + "original_gldm_SmallDependenceHighGrayLevelEmphasis": 42.40342682445136, + "original_gldm_SmallDependenceLowGrayLevelEmphasis": 2.7678386120940944e-05, + "original_ngtdm_Busyness": 27.23708069286398, + "original_ngtdm_Coarseness": 5.232482638913478e-06, + "original_ngtdm_Complexity": 3260.693906990136, + "original_ngtdm_Contrast": 0.00011253882603829943, + "original_ngtdm_Strength": 0.4524042607173468 +} \ No newline at end of file diff --git a/examples/output_example/patient/radiomics/Brain_radiomics/20040506_MR_MR0T2FLAIR/seg_Brain.nrrd b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_MR_MR0T2FLAIR/seg_Brain.nrrd new file mode 100644 index 0000000..ebfcb59 Binary files /dev/null and b/examples/output_example/patient/radiomics/Brain_radiomics/20040506_MR_MR0T2FLAIR/seg_Brain.nrrd differ diff --git a/longiDICOM b/longiDICOM index 73eb031..ab2722b 160000 --- a/longiDICOM +++ b/longiDICOM @@ -1 +1 @@ -Subproject commit 73eb031ccd97b6c2e823baf327efb5806e21191a +Subproject commit ab2722beaf81031629038040079c222480e7c84b diff --git a/radiomics_utils.py b/radiomics_utils.py deleted file mode 100644 index 6f51e0f..0000000 --- a/radiomics_utils.py +++ /dev/null @@ -1,157 +0,0 @@ -#GET RADIOMICS FUNCTION, WITH METHOD AS INPUT TO GET THE FEATURES SEGMENTATION BASED OR VOXEL BASED -#FOR VOXEL BASED IT RETURNS THE FEATURE MAP. -def get_radiomics(method,imageName,maskName,ROIName,path_radiomics): - - software_version = radiomics.__version__ - parameters = os.path.abspath(os.path.join('Params.yaml')) - - #params = os.path.join(dataDir, "examples", "exampleSettings", "Params.yaml") - extractor = featureextractor.RadiomicsFeatureExtractor(parameters) - featureClasses = getFeatureClasses() - #featureVector = extractor.execute(image,image) - - #TO DO: reshape the feature map - if method=='voxel': - featureVector = extractor.execute(imageName, maskName, voxelBased=True) - for key, val in six.iteritems(featureVector): - if isinstance(val, sitk.Image): # Feature map - sitk.WriteImage(val, path_radiomics+'/voxel_based/'+key + '.nrrd', True) #SAVE THE FEATURE MAP - print("Stored feature %s in %s at 'radiomics/voxel_based/'" % (key, key + ".nrrd")) - - else: #Get RADIOMICS SEGMENTATION BASED - featureVector = extractor.execute(imageName, maskName) - feature_dict = {'ROI Name': ROIName} - parameters_dict= {} - - features_names = [] - keys_features = list(extractor.enabledFeatures.keys()) - for i,featureName in enumerate(featureVector.keys()): - if featureName.split('_')[1] in keys_features: - feature_dict[featureName] = float(featureVector[featureName]) - with open(path_radiomics+'seg_'+ROIName+"_radiomics.json", "w") as outfile: - #FEATURE JSON FILE SAVE IN THE RADIOMICS FOLDER PER PATIENT AND IMAGE STUDIED - json.dump(feature_dict, outfile,indent=4) - return - - -#FUNCTION TO RESAMPLE AND RESIZING THE DOSE MAP DISTRIBUTION -#IT RECEIVED THE DOSE MAP (dsDose), number of the slices in the image -#THE SET OF CT ARRAYS (ctArray) in pixel array, and dsCTs (DICOM information image) -def resample_dose_dist(dsDose,number_slices,dsCTs,ctArray): - ctArray = np.array(ctArray) - pixel_spacing = dsCTs[0].PixelSpacing #get pixel spacing [#horizontal pixels, #vertical pixels] - doseArray = dsDose.pixel_array * dsDose.DoseGridScaling #Scale the pixel values with the DoseScale values - assert doseArray.shape[0] == float(dsDose.NumberOfFrames) #check dimension - #Define new dose spacing - doseSpacing = [float(each) for each in dsDose.PixelSpacing] + [float(dsCTs[0].SliceThickness)] - #Define the dose position of the patients int the dose map - doseImagePositionPatient = [float(each) for each in dsDose.ImagePositionPatient] - #Define spacing of the CT - ctSpacing = [float(each) for each in dsCTs[0].PixelSpacing] + [float(dsCTs[0].SliceThickness)] - - resample_set = [] - #resample each slice - for slicei in doseArray: - #WE CONVERT EACH SLICE TO AN IMAGE FROM THE ARRAY USING SITK TO RESAMPLE AND RESIZE - doseImage = sitk.GetImageFromArray(slicei) - #WE SET THE NEW SPACING - doseImage.SetSpacing(doseSpacing) - resampler = sitk.ResampleImageFilter() - resampler.SetOutputSpacing(ctSpacing) #set new spacing - #GET THE CT ARRAY SHAPE WITH NUMPY - resampler.SetSize(ctArray.shape[::-1]) # SimpleITK convention: [HEIGHT,WIDTH,Slices], numpy convention: [Slices,HEIGHT,WIDTH] - resampled_image = resampler.Execute(doseImage) #resample the dose slice - #WE GET AN ARRAY FROM THE IMAGE USING SITK - doseArrayResampled = sitk.GetArrayFromImage(resampled_image) - - ctImagePositionPatientMin = [float(each) for each in dsCTs[0].ImagePositionPatient] - ctImagePositionPatientMax = [float(each) for each in dsCTs[-1].ImagePositionPatient] - #re escale and shift the pixels position to have the equivalent dimension - dx, dy, dz = ((np.array(doseImagePositionPatient) - np.array(ctImagePositionPatientMax)) / np.array(ctSpacing)).astype(int) - - doseArrayResampled = shift(doseArrayResampled, (dy, dx)) #shift using the sITK format - resample_set.append(doseArrayResampled) - - doseImage2 = sitk.GetImageFromArray(np.array(resample_set)) #transform to image again - - doseImage2.SetSpacing(ctSpacing) #set spacing in 3D with the same slice thickness - resampler = sitk.ResampleImageFilter() - resampler.SetOutputSpacing(ctSpacing) - - resampler.SetSize(ctArray.shape[::-1]) - resampled_image2 = resampler.Execute(doseImage2) - doseArrayResampled2 = sitk.GetArrayFromImage(resampled_image2) - - return doseArrayResampled2 - - -#FUNCTION TO EXTRACT THE DOSIOMICS INFORMATION FROM A GIVEN ROI NAME -def get_dosiomics(method,imageName,maskName,ROIName,path_dosiomics): - - software_version = radiomics.__version__ - parameters = os.path.abspath(os.path.join('Params.yaml')) - - #params = os.path.join(dataDir, "examples", "exampleSettings", "Params.yaml") - extractor = featureextractor.RadiomicsFeatureExtractor(parameters) - featureClasses = getFeatureClasses() - #featureVector = extractor.execute(image,image) - - #TO DO: reshape the feature map - if method=='voxel': - featureVector = extractor.execute(imageName, maskName, voxelBased=True) - for key, val in six.iteritems(featureVector): - if isinstance(val, sitk.Image): # Feature map - sitk.WriteImage(val, path_radiomics+'/voxel_based/'+key + '.nrrd', True) #SAVE THE FEATURE MAP - print("Stored feature %s in %s at 'dosiomics/voxel_based/'" % (key, key + ".nrrd")) - - else: #Get DOSIOMICS SEGMENTATION BASED - featureVector = extractor.execute(imageName, maskName) - feature_dict = {'ROI Name': ROIName} - parameters_dict= {} - - features_names = [] - keys_features = list(extractor.enabledFeatures.keys()) - for i,featureName in enumerate(featureVector.keys()): - if featureName.split('_')[1] in keys_features: - feature_dict[featureName] = float(featureVector[featureName]) - with open(path_dosiomics+'Seg_'+ROIName+"_dosiomics.json", "w") as outfile: - #FEATURE JSON FILE SAVE IN THE RADIOMICS FOLDER PER PATIENT AND IMAGE STUDIED - json.dump(feature_dict, outfile,indent=4) - return - -def get_radiomics_dosiomics(imageName,maskName,ROIname,path_radiomics,path_dosiomics): - get_radiomics('segmentation',imageName,maskName,ROIname,path_radiomics) - get_dosiomics('segmentation',imageName,maskName,ROIname,path_dosiomics) - return - -def save_dicom_attributes_and_volume(folder_image,new_path_save_images): - #CREATING FOLDER FOR THE SPECIFIC PATIENT - #GETTING SET OF IMAGES FROM THE PATH OF THE DATA - - name_folder = folder_image.split('/')[-1] - set_images = get_set_images(folder_image) - - if len(set_images)!=0: - if isCBCT(set_images)==True: - try: - image_name = set_images[0].ContentDate+'_CBCT' #DEFINE THE FOLDER NAME FOR THE MODALITY - except: - image_name = set_images[0].SeriesDate+'_CBCT' - - else: - try: - image_name = set_images[0].ContentDate+'_'+set_images[0].Modality #DEFINE THE FOLDER NAME FOR THE MODALITY - except: - image_name = set_images[0].SeriesDate+'_'+set_images[0].Modality - - new_folder_name = new_path_save_images+'/'+image_name - create_folder(new_folder_name) - save_JSON_attributes(new_folder_name,folder_image,set_images[0]) - save_img_dcm_as_nrrd(set_images, new_folder_name,image_name) - -def create_ROI_folders(RS_file_path,folder_path_radiomics): - ROI_names = get_ROI_keys(RS_file_path) - for ROI in ROI_names: - new_folder = folder_path_radiomics+'/'+ROI+'_radiomics' - create_folder(new_folder) - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..81363d1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,15 @@ +pydicom==2.4.4 +scipy>=0.24.0 +numpy>=1.19.5 +scikit-learn>=1.5.2 +shapely>=2.0.2 +opencv-python>=4.9.0.80 +pyradiomics>=3.1.0 +scikit-image>=0.25.2 +simpleitk>=2.5.2 +pandas>=2.3.1 +pynrrd>=1.1.3 +scipy>=1.16.1 +matplotlib>=3.10.5 +dicompyler-core>=0.5.6 +-e . diff --git a/utils/.ipynb_checkpoints/dicom_utils-checkpoint.py b/utils/.ipynb_checkpoints/dicom_utils-checkpoint.py new file mode 100644 index 0000000..331735c --- /dev/null +++ b/utils/.ipynb_checkpoints/dicom_utils-checkpoint.py @@ -0,0 +1,523 @@ + +from pydicom.uid import generate_uid +from pydicom.dataset import Dataset, FileDataset, FileMetaDataset +from pydicom.sequence import Sequence +from pydicom.uid import ImplicitVRLittleEndian +from rt_utils.image_helper import get_contours_coords +from rt_utils.utils import ROIData, SOPClassUID + +import sys +from typing import List +from pydicom.dataset import Dataset +from pydicom.filereader import dcmread +import warnings +from rt_utils import RTStructBuilder +import datetime +import numpy as np +import json +import pydicom +import pydicom as dcm + +import matplotlib.pyplot as plt +from skimage.draw import polygon +import random +import SimpleITK as sit +from pydicom.uid import generate_uid + + + + +'''snippet code from rt-utils. I modified it just a little bit''' +'''CREDITS TO RT-UTILDS. FOR MORE DETAILS PLEASE SEE THEIR GITHUB REPOSITORY''' + +def create_contour_sequence(contours_coords, series_data) -> Sequence: + """ + Iterate through each slice of the mask + For each connected segment within a slice, create a contour + """ + contour_sequence = Sequence() + + #contours_coords = get_contours_coords(roi_data, series_data) + + for series_slice, slice_contours in zip(series_data, contours_coords): + for contour_data in slice_contours: + contour = create_contour(series_slice, contour_data) + contour_sequence.append(contour) + + return contour_sequence + +def create_structure_set_roi(roi_data): + # Structure Set ROI Sequence: Structure Set ROI 1 + structure_set_roi = Dataset() + structure_set_roi.ROINumber = roi_data.number + structure_set_roi.ReferencedFrameOfReferenceUID = frame_of_reference_uid + structure_set_roi.ROIName = roi_data.name + structure_set_roi.ROIDescription = roi_data.description + #structure_set_roi.ROIGenerationAlgorithm = roi_data.roi_generation_algorithm + return structure_set_roi + + +def create_contour_image_sequence(series_data): + contour_image_sequence = Sequence() + for series in series_data: + #print(series) + contour_image = Dataset() + contour_image.ReferencedSOPClassUID = series.SOPClassUID + contour_image.ReferencedSOPInstanceUID = series.SOPInstanceUID + contour_image_sequence.append(contour_image) + + return contour_image_sequence + +def create_rtstruct_dataset(series_data) -> FileDataset: + ds = generate_base_dataset() + add_study_and_series_information(ds, series_data) + add_patient_information(ds, series_data) + add_refd_frame_of_ref_sequence(ds, series_data) + return ds + +def create_frame_of_ref_study_sequence(series_data) -> Sequence: + reference_ds = series_data[0] # All elements in series should have the same data + rt_refd_series = Dataset() + rt_refd_series.SeriesInstanceUID = reference_ds.SeriesInstanceUID + rt_refd_series.ContourImageSequence = create_contour_image_sequence(series_data) + + rt_refd_series_sequence = Sequence() + rt_refd_series_sequence.append(rt_refd_series) + + rt_refd_study = Dataset() + rt_refd_study.ReferencedSOPClassUID = SOPClassUID.DETACHED_STUDY_MANAGEMENT + rt_refd_study.ReferencedSOPInstanceUID = reference_ds.StudyInstanceUID + rt_refd_study.RTReferencedSeriesSequence = rt_refd_series_sequence + + rt_refd_study_sequence = Sequence() + rt_refd_study_sequence.append(rt_refd_study) + return rt_refd_study_sequence + +def generate_base_dataset() -> FileDataset: + file_name = "rt-utils-struct" + file_meta = get_file_meta() + ds = FileDataset(file_name, {}, file_meta=file_meta, preamble=b"\0" * 128) + add_required_elements_to_ds(ds) + add_sequence_lists_to_ds(ds) + return ds + + +def get_file_meta() -> FileMetaDataset: + file_meta = FileMetaDataset() + file_meta.FileMetaInformationGroupLength = 202 + file_meta.FileMetaInformationVersion = b"\x00\x01" + file_meta.TransferSyntaxUID = ImplicitVRLittleEndian + file_meta.MediaStorageSOPClassUID = SOPClassUID.RTSTRUCT + file_meta.MediaStorageSOPInstanceUID = ( + generate_uid() + ) + file_meta.ImplementationClassUID = SOPClassUID.RTSTRUCT_IMPLEMENTATION_CLASS + return file_meta + + +def add_required_elements_to_ds(ds: FileDataset): + dt = datetime.datetime.now() + # Append data elements required by the DICOM standarad + ds.SpecificCharacterSet = "ISO_IR 100" + ds.InstanceCreationDate = dt.strftime("%Y%m%d") + ds.InstanceCreationTime = dt.strftime("%H%M%S.%f") + ds.StructureSetLabel = "RTstruct" + ds.StructureSetDate = dt.strftime("%Y%m%d") + ds.StructureSetTime = dt.strftime("%H%M%S.%f") + ds.Modality = "RTSTRUCT" + ds.Manufacturer = "" + ds.ManufacturerModelName = "rt-utils" + ds.InstitutionName = "" + # Set the transfer syntax + ds.is_little_endian = True + ds.is_implicit_VR = True + # Set values already defined in the file meta + ds.SOPClassUID = ds.file_meta.MediaStorageSOPClassUID + ds.SOPInstanceUID = ds.file_meta.MediaStorageSOPInstanceUID + + ds.ApprovalStatus = "UNAPPROVED" + + +def add_sequence_lists_to_ds(ds: FileDataset): + ds.StructureSetROISequence = Sequence() + ds.ROIContourSequence = Sequence() + ds.RTROIObservationsSequence = Sequence() + + +def add_study_and_series_information(ds: FileDataset, series_data): + reference_ds = series_data[0] # All elements in series should have the same data + ds.StudyDate = reference_ds.StudyDate + ds.SeriesDate = getattr(reference_ds, "SeriesDate", "") + ds.StudyTime = reference_ds.StudyTime + ds.SeriesTime = getattr(reference_ds, "SeriesTime", "") + ds.StudyInstanceUID = reference_ds.StudyInstanceUID + ds.SeriesInstanceUID = generate_uid() # TODO: find out if random generation is ok + ds.StudyID = reference_ds.StudyID + ds.SeriesNumber = "1" # TODO: find out if we can just use 1 (Should be fine since its a new series) + + +def add_patient_information(ds: FileDataset, series_data): + reference_ds = series_data[0] # All elements in series should have the same data + ds.PatientName = getattr(reference_ds, "PatientName", "") + ds.PatientID = getattr(reference_ds, "PatientID", "") + + +def add_refd_frame_of_ref_sequence(ds: FileDataset, series_data): + refd_frame_of_ref = Dataset() + refd_frame_of_ref.FrameOfReferenceUID = getattr(series_data[0], 'FrameOfReferenceUID', generate_uid()) + refd_frame_of_ref.RTReferencedStudySequence = create_frame_of_ref_study_sequence(series_data) + # Add to sequence + ds.ReferencedFrameOfReferenceSequence = Sequence() + ds.ReferencedFrameOfReferenceSequence.append(refd_frame_of_ref) + +def create_frame_of_ref_study_sequence(series_data): + reference_ds = series_data[0] # All elements in series should have the same data + rt_refd_series = Dataset() + rt_refd_series.SeriesInstanceUID = reference_ds.SeriesInstanceUID + rt_refd_series.ContourImageSequence = create_contour_image_sequence(series_data) + + rt_refd_series_sequence = Sequence() + rt_refd_series_sequence.append(rt_refd_series) + + rt_refd_study = Dataset() + rt_refd_study.ReferencedSOPClassUID = SOPClassUID.DETACHED_STUDY_MANAGEMENT + rt_refd_study.ReferencedSOPInstanceUID = reference_ds.StudyInstanceUID + rt_refd_study.RTReferencedSeriesSequence = rt_refd_series_sequence + + rt_refd_study_sequence = Sequence() + rt_refd_study_sequence.append(rt_refd_study) + return rt_refd_study_sequence + +def get_z_positions(CT_path): + positions = [] + for f in [file for file in os.listdir(CT_path) if 'CT' in file]: + d = dcm.dcmread(CT_path+'/'+f) + positions.append(d.ImagePositionPatient) + + positions = sorted(positions, key=lambda x: x[-1]) + return np.array(positions)[:,2] + +def series_conturss(zs,contour,data): + series_contours = [] + for i in range(0,len(zs)): + xys= [] + for p in data[contour]: + if p[2]==zs[i]: + xys.append(p) + xys2 = [[x for lst in xys for x in lst]] + series_contours.append(xys2) + + return series_contours + + +def create_contour(series_slice: Dataset, contour_data: np.ndarray) -> Dataset: + #print(contour_data) + contour_image = Dataset() + contour_image.ReferencedSOPClassUID = series_slice.SOPClassUID + contour_image.ReferencedSOPInstanceUID = series_slice.SOPInstanceUID + + # Contour Image Sequence + contour_image_sequence = Sequence() + contour_image_sequence.append(contour_image) + + contour = Dataset() + contour.ContourImageSequence = contour_image_sequence + contour.ContourGeometricType = ("CLOSED_PLANAR") + contour.NumberOfContourPoints = (len(contour_data) / 3) # Each point has an x, y, and z value + + # Rounds ContourData to 10 decimal places to ensure it is <16 bytes length, as per NEMA DICOM standard guidelines. + contour.ContourData = contour_data + + return contour + + +def plot_dcm_contour_with_images(dc,roi_number,ct_files): +# Get the list of structures from the RTSS file + roi_sequences = dc.StructureSetROISequence +# Print the list of ROI names and corresponding ROI numbers +# Prompt the user to select a ROI + +# Get the Contour Sequence for the selected ROI +# Contour Sequence = Sequence of Contours (per slice) + roi_contour_seq = None + for roi_seq in dc.ROIContourSequence: + if roi_seq.ReferencedROINumber == roi_number: + roi_contour_seq = roi_seq.ContourSequence + + contour_keys = dc.StructureSetROISequence + slice_numbers_list = set() + slice_numbers = set() + slice_to_contour_seq = dict() # maps CT slice # to structure contour sequence + + for contour_seq in roi_contour_seq: + # uid of slice that this contour appears on + slice_uid = contour_seq.ContourImageSequence[0].ReferencedSOPInstanceUID + # find that corresponding slice in our CT files + #print(slice_uid) + for i, ct_file in enumerate(ct_files): + if ct_file.SOPInstanceUID == slice_uid: + slice_numbers.add(i) + slice_to_contour_seq[i] = contour_seq + + # sort and choose a random CT slice (only between our contour limits) + slice_numbers_list = list(slice_numbers) + slice_numbers_list.sort() + + for number_file in range(0,len(ct_files)): + + selected_contour_seq = slice_to_contour_seq[number_file] + + # ContourData = Sequence of (x,y,z) triplets defining a contour + # "-1" in reshape # of rows not specified and determined + # based on size of ContourData and number of columns (= 3) + # Ultimately, # of rows = slice count for contour and 3 columns = (x,y,z) + + if selected_contour_seq.ContourData==None: + continue + else: + + ct_file = ct_files[number_file] + pixel_spacing = ct_file.PixelSpacing + ct_pixel_array = ct_file.pixel_array + + contour_data = np.array(selected_contour_seq.ContourData).reshape((-1, 3)) + non_nan_mask = ~np.isnan(contour_data) + contour_data_2 = contour_data[non_nan_mask] + if len(contour_data_2)==0: + continue + else: + image_pos = ct_file.ImagePositionPatient + selected_slice = np.zeros(np.array(ct_pixel_array).shape) # array of 0 size of CT + + contour_data[:,1] /= pixel_spacing[1] # y scaling + contour_data[:,1] -= (image_pos[1] / pixel_spacing[1]) # y shift + contour_data[:,0] /= pixel_spacing[0] # x scaling + contour_data[:,0] -= (image_pos[0] / pixel_spacing[0]) # x shift + rows, cols = polygon(contour_data[:,1], contour_data[:,0]) + + selected_slice[rows, cols] = 1 # set only contour area to 1 + + fig, ax = plt.subplots() + ax.imshow(ct_pixel_array, cmap=plt.cm.gray) + ax.plot(contour_data[:,0],contour_data[:,1],'r') + plt.savefig('image_slice_'+str(number_file)+'.png') + plt.show() + + +def get_info(path_dicom_patient,modality): + #INSERT MODALITY NAME 'MR', 'PET','CT', or if the files are saved with a number '1'. PLEASE TYPE '1' if so + path_files = os.path.join(path_patient, path_dicom_patient) + files = [x for x in os.listdir(path_files) if modality in x] + + return path_files,files + + +def save_RS_dicom(contour_name,patient_id,output_name,path_dcm,path_contour,path_to_save): + f = open(path_contour+contour_name+".json") + data = json.load(f) #LOADING THE CONTOUR PREVIOUSLY SAVED IN JSON FORMAT + f.close() + + path_files, files = get_info(path_dicom_patient,modality) + + series_data = [] + for file in files: + file_dcm = dcm.read_file(path_dcm+"/"+file) + series_data.append(file_dcm) + + series_data.sort(key=lambda x: x.ImagePositionPatient[2]) + contour_image_sequence = create_contour_image_sequence(filess) + ds = create_rtstruct_dataset(series_data) + frame_of_reference_uid = ds.ReferencedFrameOfReferenceSequence[-1].FrameOfReferenceUID + + rtstruct = RTStructBuilder.create_new(dicom_series_path=path_dcm) + zs = get_z_positions(path_dcm) + series_contours = series_conturss(zs,contour_name,data) + contour_dcm = create_contour_sequence(series_contours, series_data ) + roi_contour = Dataset() + roi_contour.ROIDisplayColor = [255,0,255] + roi_contour.ContourSequence = contour_dcm + roi_contour.ReferencedROINumber = str(1) + file_path = output_name+'.dcm' + file_path = file_path if file_path.endswith(".dcm") else file_path + ".dcm" + + file = open(file_path, "w") + print('===============================================') + print(" Writing file into ", file_path) + print('===============================================') + + structure_set_roi = Dataset() + structure_set_roi.ROINumber = 1 + structure_set_roi.ReferencedFrameOfReferenceUID = frame_of_reference_uid + structure_set_roi.ROIName = contour_name + structure_set_roi.ROIDescription = "" + structure_set_roi.ROIGenerationAlgorithm = "" + ds.StructureSetROISequence.append(structure_set_roi) + ds.ROIContourSequence.append(roi_contour) + ds.save_as(file_path) + + +def save_dcm(data_directory,path_to_save,image_3D,modality): + + series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(data_directory) + + if not series_IDs: + print('ERROR: given directory "'+ data_directory+ '" does not contain a DICOM series.') + sys.exit(1) + + series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(data_directory, series_IDs[0]) + + series_reader = sitk.ImageSeriesReader() + series_reader.SetFileNames(series_file_names) + series_reader.MetaDataDictionaryArrayUpdateOn() + series_reader.LoadPrivateTagsOn() + image3D = series_reader.Execute() + + filtered_image = image_3D + + writer = sitk.ImageFileWriter() +# Use the study/series/frame of reference information given in the meta-data +# dictionary and not the automatically generated information from the file IO + writer.KeepOriginalImageUIDOn() + +# Copy relevant tags from the original meta-data dictionary (private tags are +# also accessible). + tags_to_copy = [ + "0010|0010", # Patient Name + "0010|0020", # Patient ID + "0010|0030", # Patient Birth Date + "0020|000D", # Study Instance UID, for machine consumption + "0020|0010", # Study ID, for human consumption + "0008|0020", # Study Date + "0008|0030", # Study Time + "0008|0050", # Accession Number + "0008|0060", # Modality + ] + + modification_time = time.strftime("%H%M%S") + modification_date = time.strftime("%Y%m%d") + + + direction = filtered_image.GetDirection() + series_tag_values = [ + (k, series_reader.GetMetaData(0, k.lower())) + for k in tags_to_copy + if series_reader.HasMetaDataKey(0, k.lower()) + ] + [ + ("0008|0031", modification_time), # Series Time + ("0008|0021", modification_date), # Series Date + ("0008|0008", "DERIVED\\SECONDARY"), # Image Type + ("0020|000e","1.2.826.0.1.3680043.2.1125." + modification_date + ".1" + modification_time,), + # Series Instance UID + ("0020|0037","\\".join(map(str,(direction[0],direction[3],direction[6],direction[1],direction[4],direction[7], +), # Image Orientation (Patient) + ) + ), + ), + ( + "0008|103e", + series_reader.GetMetaData(0, "0008|103e") + if series_reader.HasMetaDataKey(0, "0008|103e") + else "" + " Processed-SimpleITK", + ), # Series Description is an optional tag, so may not exist +] + + number_digits = len(str(filtered_image.GetDepth())) + + for i in range(filtered_image.GetDepth()): + digits = len(str(i)) + number_zeros = number_digits - digits + + image_slice = filtered_image[:, :, i] + # Tags shared by the series. + for tag, value in series_tag_values: + image_slice.SetMetaData(tag, value) + # Slice specific tags. + # Instance Creation Date + image_slice.SetMetaData("0008|0012", time.strftime("%Y%m%d")) + # Instance Creation Time + image_slice.SetMetaData("0008|0013", time.strftime("%H%M%S")) + # Image Position (Patient) + image_slice.SetMetaData( + "0020|0032", + "\\".join(map(str, filtered_image.TransformIndexToPhysicalPoint((0, 0, i)))), + ) + # Instance Number + image_slice.SetMetaData("0020|0013", str(i)) + image_slice.SetMetaData("0008|0018", new_UID) + # Write to the output directory and add the extension dcm, to force writing + # in DICOM format. + new_UID = generate_uid() + writer.SetFileName(os.path.join(path_to_save, modality+'.'+new_UID".dcm")) + writer.Execute(image_slice) + print('===============================================') + print(" DCM file saved into ",path_to_save) + print('===============================================') + + + +def generate_sitk_image(DCM_path,modality): + """ + generate_sitk_image Reads DICOM file at DCM_path as a SITK (SimpleITK) image. + + :param DCM_path: Path to dicom series directory. + :returns: The DICOM image in SITK format + """ + series_id = '' + for file in os.listdir(DCM_path): + if modality in file: + series_id = dcm.read_file(DCM_path+file).SeriesInstanceUID + continue + fixed_reader = sitk.ImageSeriesReader() + dicom_names = fixed_reader.GetGDCMSeriesFileNames(DCM_path, seriesID=series_id) + fixed_reader.SetFileNames(dicom_names) + fixed_image = fixed_reader.Execute() + + return fixed_image + +def save_dose_RD_mask(ROI_name, RS_file_path, image_files, dsDose, RS_save_path): + RS = dcm.read_file(RS_file_path) + slices = image_files.copy() + contour_coords = [] + + roi_contour_seq = None + for i, seq in enumerate(RS.StructureSetROISequence): + if seq.ROIName == ROI_name: + roi_seq = RS.ROIContourSequence[i] + roi_contour_seq = roi_seq.ContourSequence + + slice_numbers = set() + slice_to_contour_seq = dict() # maps slice # to structure contour sequence + slices_id = [] + contour = [] + for contour_seq in roi_contour_seq: + # uid of slice that this contour appears on + slice_uid = contour_seq.ContourImageSequence[0].ReferencedSOPInstanceUID + # find that corresponding slice in the files + for i, ct_file in enumerate(image_files): + if ct_file.SOPInstanceUID == slice_uid: + slice_new = np.array(contour_seq.ContourData).reshape((-1,3)) + contour.append(slice_new) + + + doseSpacing = [float(each) for each in dsDose.PixelSpacing] + [float(slices[0].SliceThickness)] + doseImagePositionPatient = [float(each) for each in dsDose.ImagePositionPatient] + mask_full = np.zeros(dsDose.pixel_array.shape,dtype='uint32')#SET A BLANK MASK WITH THE SIZE OF THE IMAGE OF REFERENCE + + #USUALLY THE IMAGES ARE REGISTERED HAVING THE SAME SIZE #IF NOT, THE POSITION OF THE CONTOURS SHOULD BE ALIGNED + + for slicei in contour: + coords_px = get_mask_nifti_dose(slicei,doseImagePositionPatient[0],doseImagePositionPatient[1],doseImagePositionPatient[2],doseSpacing) + rows,cols = polygon(coords_px[1],coords_px[0]) + #if int(coords_px[-1]) Sequence: + """ + Iterate through each slice of the mask + For each connected segment within a slice, create a contour + """ + contour_sequence = Sequence() + + #contours_coords = get_contours_coords(roi_data, series_data) + + for series_slice, slice_contours in zip(series_data, contours_coords): + for contour_data in slice_contours: + contour = create_contour(series_slice, contour_data) + contour_sequence.append(contour) + + return contour_sequence + +def create_structure_set_roi(roi_data): + # Structure Set ROI Sequence: Structure Set ROI 1 + structure_set_roi = Dataset() + structure_set_roi.ROINumber = roi_data.number + structure_set_roi.ReferencedFrameOfReferenceUID = frame_of_reference_uid + structure_set_roi.ROIName = roi_data.name + structure_set_roi.ROIDescription = roi_data.description + #structure_set_roi.ROIGenerationAlgorithm = roi_data.roi_generation_algorithm + return structure_set_roi + + +def create_contour_image_sequence(series_data): + contour_image_sequence = Sequence() + for series in series_data: + #print(series) + contour_image = Dataset() + contour_image.ReferencedSOPClassUID = series.SOPClassUID + contour_image.ReferencedSOPInstanceUID = series.SOPInstanceUID + contour_image_sequence.append(contour_image) + + return contour_image_sequence + +def create_rtstruct_dataset(series_data) -> FileDataset: + ds = generate_base_dataset() + add_study_and_series_information(ds, series_data) + add_patient_information(ds, series_data) + add_refd_frame_of_ref_sequence(ds, series_data) + return ds + +def create_frame_of_ref_study_sequence(series_data) -> Sequence: + reference_ds = series_data[0] # All elements in series should have the same data + rt_refd_series = Dataset() + rt_refd_series.SeriesInstanceUID = reference_ds.SeriesInstanceUID + rt_refd_series.ContourImageSequence = create_contour_image_sequence(series_data) + + rt_refd_series_sequence = Sequence() + rt_refd_series_sequence.append(rt_refd_series) + + rt_refd_study = Dataset() + rt_refd_study.ReferencedSOPClassUID = SOPClassUID.DETACHED_STUDY_MANAGEMENT + rt_refd_study.ReferencedSOPInstanceUID = reference_ds.StudyInstanceUID + rt_refd_study.RTReferencedSeriesSequence = rt_refd_series_sequence + + rt_refd_study_sequence = Sequence() + rt_refd_study_sequence.append(rt_refd_study) + return rt_refd_study_sequence + +def generate_base_dataset() -> FileDataset: + file_name = "rt-utils-struct" + file_meta = get_file_meta() + ds = FileDataset(file_name, {}, file_meta=file_meta, preamble=b"\0" * 128) + add_required_elements_to_ds(ds) + add_sequence_lists_to_ds(ds) + return ds + + +def get_file_meta() -> FileMetaDataset: + file_meta = FileMetaDataset() + file_meta.FileMetaInformationGroupLength = 202 + file_meta.FileMetaInformationVersion = b"\x00\x01" + file_meta.TransferSyntaxUID = ImplicitVRLittleEndian + file_meta.MediaStorageSOPClassUID = SOPClassUID.RTSTRUCT + file_meta.MediaStorageSOPInstanceUID = ( + generate_uid() + ) + file_meta.ImplementationClassUID = SOPClassUID.RTSTRUCT_IMPLEMENTATION_CLASS + return file_meta + + +def add_required_elements_to_ds(ds: FileDataset): + dt = datetime.datetime.now() + # Append data elements required by the DICOM standarad + ds.SpecificCharacterSet = "ISO_IR 100" + ds.InstanceCreationDate = dt.strftime("%Y%m%d") + ds.InstanceCreationTime = dt.strftime("%H%M%S.%f") + ds.StructureSetLabel = "RTstruct" + ds.StructureSetDate = dt.strftime("%Y%m%d") + ds.StructureSetTime = dt.strftime("%H%M%S.%f") + ds.Modality = "RTSTRUCT" + ds.Manufacturer = "" + ds.ManufacturerModelName = "rt-utils" + ds.InstitutionName = "" + # Set the transfer syntax + ds.is_little_endian = True + ds.is_implicit_VR = True + # Set values already defined in the file meta + ds.SOPClassUID = ds.file_meta.MediaStorageSOPClassUID + ds.SOPInstanceUID = ds.file_meta.MediaStorageSOPInstanceUID + + ds.ApprovalStatus = "UNAPPROVED" + + +def add_sequence_lists_to_ds(ds: FileDataset): + ds.StructureSetROISequence = Sequence() + ds.ROIContourSequence = Sequence() + ds.RTROIObservationsSequence = Sequence() + + +def add_study_and_series_information(ds: FileDataset, series_data): + reference_ds = series_data[0] # All elements in series should have the same data + ds.StudyDate = reference_ds.StudyDate + ds.SeriesDate = getattr(reference_ds, "SeriesDate", "") + ds.StudyTime = reference_ds.StudyTime + ds.SeriesTime = getattr(reference_ds, "SeriesTime", "") + ds.StudyInstanceUID = reference_ds.StudyInstanceUID + ds.SeriesInstanceUID = generate_uid() # TODO: find out if random generation is ok + ds.StudyID = reference_ds.StudyID + ds.SeriesNumber = "1" # TODO: find out if we can just use 1 (Should be fine since its a new series) + + +def add_patient_information(ds: FileDataset, series_data): + reference_ds = series_data[0] # All elements in series should have the same data + ds.PatientName = getattr(reference_ds, "PatientName", "") + ds.PatientID = getattr(reference_ds, "PatientID", "") + + +def add_refd_frame_of_ref_sequence(ds: FileDataset, series_data): + refd_frame_of_ref = Dataset() + refd_frame_of_ref.FrameOfReferenceUID = getattr(series_data[0], 'FrameOfReferenceUID', generate_uid()) + refd_frame_of_ref.RTReferencedStudySequence = create_frame_of_ref_study_sequence(series_data) + # Add to sequence + ds.ReferencedFrameOfReferenceSequence = Sequence() + ds.ReferencedFrameOfReferenceSequence.append(refd_frame_of_ref) + +def create_frame_of_ref_study_sequence(series_data): + reference_ds = series_data[0] # All elements in series should have the same data + rt_refd_series = Dataset() + rt_refd_series.SeriesInstanceUID = reference_ds.SeriesInstanceUID + rt_refd_series.ContourImageSequence = create_contour_image_sequence(series_data) + + rt_refd_series_sequence = Sequence() + rt_refd_series_sequence.append(rt_refd_series) + + rt_refd_study = Dataset() + rt_refd_study.ReferencedSOPClassUID = SOPClassUID.DETACHED_STUDY_MANAGEMENT + rt_refd_study.ReferencedSOPInstanceUID = reference_ds.StudyInstanceUID + rt_refd_study.RTReferencedSeriesSequence = rt_refd_series_sequence + + rt_refd_study_sequence = Sequence() + rt_refd_study_sequence.append(rt_refd_study) + return rt_refd_study_sequence + +def get_z_positions(CT_path): + positions = [] + for f in [file for file in os.listdir(CT_path) if 'CT' in file]: + d = dcm.dcmread(CT_path+'/'+f) + positions.append(d.ImagePositionPatient) + + positions = sorted(positions, key=lambda x: x[-1]) + return np.array(positions)[:,2] + +def series_conturss(zs,contour,data): + series_contours = [] + for i in range(0,len(zs)): + xys= [] + for p in data[contour]: + if p[2]==zs[i]: + xys.append(p) + xys2 = [[x for lst in xys for x in lst]] + series_contours.append(xys2) + + return series_contours + + +def create_contour(series_slice: Dataset, contour_data: np.ndarray) -> Dataset: + #print(contour_data) + contour_image = Dataset() + contour_image.ReferencedSOPClassUID = series_slice.SOPClassUID + contour_image.ReferencedSOPInstanceUID = series_slice.SOPInstanceUID + + # Contour Image Sequence + contour_image_sequence = Sequence() + contour_image_sequence.append(contour_image) + + contour = Dataset() + contour.ContourImageSequence = contour_image_sequence + contour.ContourGeometricType = ("CLOSED_PLANAR") + contour.NumberOfContourPoints = (len(contour_data) / 3) # Each point has an x, y, and z value + + # Rounds ContourData to 10 decimal places to ensure it is <16 bytes length, as per NEMA DICOM standard guidelines. + contour.ContourData = contour_data + + return contour + + +def plot_dcm_contour_with_images(dc,roi_number,ct_files): +# Get the list of structures from the RTSS file + roi_sequences = dc.StructureSetROISequence +# Print the list of ROI names and corresponding ROI numbers +# Prompt the user to select a ROI + +# Get the Contour Sequence for the selected ROI +# Contour Sequence = Sequence of Contours (per slice) + roi_contour_seq = None + for roi_seq in dc.ROIContourSequence: + if roi_seq.ReferencedROINumber == roi_number: + roi_contour_seq = roi_seq.ContourSequence + + contour_keys = dc.StructureSetROISequence + slice_numbers_list = set() + slice_numbers = set() + slice_to_contour_seq = dict() # maps CT slice # to structure contour sequence + + for contour_seq in roi_contour_seq: + # uid of slice that this contour appears on + slice_uid = contour_seq.ContourImageSequence[0].ReferencedSOPInstanceUID + # find that corresponding slice in our CT files + #print(slice_uid) + for i, ct_file in enumerate(ct_files): + if ct_file.SOPInstanceUID == slice_uid: + slice_numbers.add(i) + slice_to_contour_seq[i] = contour_seq + + # sort and choose a random CT slice (only between our contour limits) + slice_numbers_list = list(slice_numbers) + slice_numbers_list.sort() + + for number_file in range(0,len(ct_files)): + + selected_contour_seq = slice_to_contour_seq[number_file] + + # ContourData = Sequence of (x,y,z) triplets defining a contour + # "-1" in reshape # of rows not specified and determined + # based on size of ContourData and number of columns (= 3) + # Ultimately, # of rows = slice count for contour and 3 columns = (x,y,z) + + if selected_contour_seq.ContourData==None: + continue + else: + + ct_file = ct_files[number_file] + pixel_spacing = ct_file.PixelSpacing + ct_pixel_array = ct_file.pixel_array + + contour_data = np.array(selected_contour_seq.ContourData).reshape((-1, 3)) + non_nan_mask = ~np.isnan(contour_data) + contour_data_2 = contour_data[non_nan_mask] + if len(contour_data_2)==0: + continue + else: + image_pos = ct_file.ImagePositionPatient + selected_slice = np.zeros(np.array(ct_pixel_array).shape) # array of 0 size of CT + + contour_data[:,1] /= pixel_spacing[1] # y scaling + contour_data[:,1] -= (image_pos[1] / pixel_spacing[1]) # y shift + contour_data[:,0] /= pixel_spacing[0] # x scaling + contour_data[:,0] -= (image_pos[0] / pixel_spacing[0]) # x shift + rows, cols = polygon(contour_data[:,1], contour_data[:,0]) + + selected_slice[rows, cols] = 1 # set only contour area to 1 + + fig, ax = plt.subplots() + ax.imshow(ct_pixel_array, cmap=plt.cm.gray) + ax.plot(contour_data[:,0],contour_data[:,1],'r') + plt.savefig('image_slice_'+str(number_file)+'.png') + plt.show() + + +def get_info(path_dicom_patient,modality): + #INSERT MODALITY NAME 'MR', 'PET','CT', or if the files are saved with a number '1'. PLEASE TYPE '1' if so + path_files = os.path.join(path_patient, path_dicom_patient) + files = [x for x in os.listdir(path_files) if modality in x] + + return path_files,files + + +def save_RS_dicom(contour_name,patient_id,output_name,path_dcm,path_contour,path_to_save): + f = open(path_contour+contour_name+".json") + data = json.load(f) #LOADING THE CONTOUR PREVIOUSLY SAVED IN JSON FORMAT + f.close() + + path_files, files = get_info(path_dicom_patient,modality) + + series_data = [] + for file in files: + file_dcm = dcm.read_file(path_dcm+"/"+file) + series_data.append(file_dcm) + + series_data.sort(key=lambda x: x.ImagePositionPatient[2]) + contour_image_sequence = create_contour_image_sequence(filess) + ds = create_rtstruct_dataset(series_data) + frame_of_reference_uid = ds.ReferencedFrameOfReferenceSequence[-1].FrameOfReferenceUID + + rtstruct = RTStructBuilder.create_new(dicom_series_path=path_dcm) + zs = get_z_positions(path_dcm) + series_contours = series_conturss(zs,contour_name,data) + contour_dcm = create_contour_sequence(series_contours, series_data ) + roi_contour = Dataset() + roi_contour.ROIDisplayColor = [255,0,255] + roi_contour.ContourSequence = contour_dcm + roi_contour.ReferencedROINumber = str(1) + file_path = output_name+'.dcm' + file_path = file_path if file_path.endswith(".dcm") else file_path + ".dcm" + + file = open(file_path, "w") + print('===============================================') + print(" Writing file into ", file_path) + print('===============================================') + + structure_set_roi = Dataset() + structure_set_roi.ROINumber = 1 + structure_set_roi.ReferencedFrameOfReferenceUID = frame_of_reference_uid + structure_set_roi.ROIName = contour_name + structure_set_roi.ROIDescription = "" + structure_set_roi.ROIGenerationAlgorithm = "" + ds.StructureSetROISequence.append(structure_set_roi) + ds.ROIContourSequence.append(roi_contour) + ds.save_as(file_path) + + +def save_dcm(data_directory,path_to_save,image_3D,modality): + + series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(data_directory) + + if not series_IDs: + print('ERROR: given directory "'+ data_directory+ '" does not contain a DICOM series.') + sys.exit(1) + + series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(data_directory, series_IDs[0]) + + series_reader = sitk.ImageSeriesReader() + series_reader.SetFileNames(series_file_names) + series_reader.MetaDataDictionaryArrayUpdateOn() + series_reader.LoadPrivateTagsOn() + image3D = series_reader.Execute() + + filtered_image = image_3D + + writer = sitk.ImageFileWriter() +# Use the study/series/frame of reference information given in the meta-data +# dictionary and not the automatically generated information from the file IO + writer.KeepOriginalImageUIDOn() + +# Copy relevant tags from the original meta-data dictionary (private tags are +# also accessible). + tags_to_copy = [ + "0010|0010", # Patient Name + "0010|0020", # Patient ID + "0010|0030", # Patient Birth Date + "0020|000D", # Study Instance UID, for machine consumption + "0020|0010", # Study ID, for human consumption + "0008|0020", # Study Date + "0008|0030", # Study Time + "0008|0050", # Accession Number + "0008|0060", # Modality + ] + + modification_time = time.strftime("%H%M%S") + modification_date = time.strftime("%Y%m%d") + + + direction = filtered_image.GetDirection() + series_tag_values = [ + (k, series_reader.GetMetaData(0, k.lower())) + for k in tags_to_copy + if series_reader.HasMetaDataKey(0, k.lower()) + ] + [ + ("0008|0031", modification_time), # Series Time + ("0008|0021", modification_date), # Series Date + ("0008|0008", "DERIVED\\SECONDARY"), # Image Type + ("0020|000e","1.2.826.0.1.3680043.2.1125." + modification_date + ".1" + modification_time,), + # Series Instance UID + ("0020|0037","\\".join(map(str,(direction[0],direction[3],direction[6],direction[1],direction[4],direction[7], +), # Image Orientation (Patient) + ) + ), + ), + ( + "0008|103e", + series_reader.GetMetaData(0, "0008|103e") + if series_reader.HasMetaDataKey(0, "0008|103e") + else "" + " Processed-SimpleITK", + ), # Series Description is an optional tag, so may not exist +] + + number_digits = len(str(filtered_image.GetDepth())) + + for i in range(filtered_image.GetDepth()): + digits = len(str(i)) + number_zeros = number_digits - digits + + image_slice = filtered_image[:, :, i] + # Tags shared by the series. + for tag, value in series_tag_values: + image_slice.SetMetaData(tag, value) + # Slice specific tags. + # Instance Creation Date + image_slice.SetMetaData("0008|0012", time.strftime("%Y%m%d")) + # Instance Creation Time + image_slice.SetMetaData("0008|0013", time.strftime("%H%M%S")) + # Image Position (Patient) + image_slice.SetMetaData( + "0020|0032", + "\\".join(map(str, filtered_image.TransformIndexToPhysicalPoint((0, 0, i)))), + ) + # Instance Number + new_UID = generate_uid() + image_slice.SetMetaData("0020|0013", str(i)) + image_slice.SetMetaData("0008|0018", new_UID) + # Write to the output directory and add the extension dcm, to force writing + # in DICOM format. + + writer.SetFileName(os.path.join(path_to_save, modality+'.'+new_UID+".dcm")) + writer.Execute(image_slice) + print('===============================================') + print(" DCM file saved into ",path_to_save) + print('===============================================') + + + +def generate_sitk_image(DCM_path,modality): + """ + generate_sitk_image Reads DICOM file at DCM_path as a SITK (SimpleITK) image. + + :param DCM_path: Path to dicom series directory. + :returns: The DICOM image in SITK format + """ + series_id = '' + for file in os.listdir(DCM_path): + if modality in file: + series_id = dcm.read_file(DCM_path+file).SeriesInstanceUID + continue + fixed_reader = sitk.ImageSeriesReader() + dicom_names = fixed_reader.GetGDCMSeriesFileNames(DCM_path, seriesID=series_id) + fixed_reader.SetFileNames(dicom_names) + fixed_image = fixed_reader.Execute() + + return fixed_image + +def save_dose_RD_mask(ROI_name, RS_file_path, image_files, dsDose, RS_save_path): + RS = dcm.read_file(RS_file_path) + slices = image_files.copy() + contour_coords = [] + + roi_contour_seq = None + for i, seq in enumerate(RS.StructureSetROISequence): + if seq.ROIName == ROI_name: + roi_seq = RS.ROIContourSequence[i] + roi_contour_seq = roi_seq.ContourSequence + + slice_numbers = set() + slice_to_contour_seq = dict() # maps slice # to structure contour sequence + slices_id = [] + contour = [] + for contour_seq in roi_contour_seq: + # uid of slice that this contour appears on + slice_uid = contour_seq.ContourImageSequence[0].ReferencedSOPInstanceUID + # find that corresponding slice in the files + for i, ct_file in enumerate(image_files): + if ct_file.SOPInstanceUID == slice_uid: + slice_new = np.array(contour_seq.ContourData).reshape((-1,3)) + contour.append(slice_new) + + + doseSpacing = [float(each) for each in dsDose.PixelSpacing] + [float(slices[0].SliceThickness)] + doseImagePositionPatient = [float(each) for each in dsDose.ImagePositionPatient] + mask_full = np.zeros(dsDose.pixel_array.shape,dtype='uint32')#SET A BLANK MASK WITH THE SIZE OF THE IMAGE OF REFERENCE + + #USUALLY THE IMAGES ARE REGISTERED HAVING THE SAME SIZE #IF NOT, THE POSITION OF THE CONTOURS SHOULD BE ALIGNED + + for slicei in contour: + coords_px = get_mask_nifti_dose(slicei,doseImagePositionPatient[0],doseImagePositionPatient[1],doseImagePositionPatient[2],doseSpacing) + rows,cols = polygon(coords_px[1],coords_px[0]) + #if int(coords_px[-1])=3: + patient = sys.argv[1] + ROI_name = sys.argv[2] + + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + for path in patients_to_sort: + path_save = '../examples/output_example' + path_patient = path_patients+path + + + RS_file_path = search_RS_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + create_ROI_folders_and_radiomics_specific(RS_file[-1],ROI_name,folder_path_radiomics,set_images,new_path_save_images) + + RD_file_path = + all_dosimetric_features_dvh_json(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + + + else: + path_patient = path_patients+patient + RS_file_path = + RD_file_path = + all_dosimetric_features_dvh_json(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + + + + + + +if __name__ == "__main__": + main() + \ No newline at end of file diff --git a/utils/extract_only_dosiomics.py b/utils/extract_only_dosiomics.py new file mode 100644 index 0000000..cfedb85 --- /dev/null +++ b/utils/extract_only_dosiomics.py @@ -0,0 +1,69 @@ +import pydicom as dcm +import numpy as np +import pandas as pd +import os +from matplotlib import pyplot as plt +import json +import gc + +import sys +sys.path.append('../utils') +import radiomics_utils +from radiomics_utils import * + +factors = ['D0', 'D100', 'D50','mean','V0.5cc'] + +path_patients = '../examples/GBM_burdenko_example/' +path_save = '../examples/output_example' + +def main(): + start = time.time() + if len(sys.argv[1:]) <= 0: + print("WARNING") + print("Specify patient directory(ies) or write 'all' to sort all patients." +'\n'+ + "Please ALSO specify the ROI of interest") + exit() + + elif len(sys.argv)>=3: + patient = sys.argv[1] + ROI_name = sys.argv[2] + + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + for path in patients_to_sort: + path_patient = path_patients+path + PATH_TO_SAVE = check_main_dosiomics_per_patient(path_patient,path_save)+'/' + + RS_file_path = search_RS_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + create_ROI_folders_and_radiomics_specific(RS_file[-1],ROI_name,folder_path_radiomics,set_images,new_path_save_images) + + RD_file_path = search_RD_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + all_dosimetric_features_dvh_json(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + + end = time.time() + + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + print('\n') + + else: + path_patient = path_patients+patient + PATH_TO_SAVE = check_main_dosiomics_per_patient(path_patient,path_save)+'/' + + RS_file_path = search_RS_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + create_ROI_folders_and_radiomics_specific(RS_file[-1],ROI_name,folder_path_radiomics,set_images,new_path_save_images) + + RD_file_path = search_RD_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + + all_dosimetric_features_dvh_json(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + + + end = time.time() + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + print('\n') + + +if __name__ == "__main__": + main() + \ No newline at end of file diff --git a/utils/extract_only_dvh_factors.py b/utils/extract_only_dvh_factors.py new file mode 100644 index 0000000..f64b142 --- /dev/null +++ b/utils/extract_only_dvh_factors.py @@ -0,0 +1,85 @@ +import pydicom as dcm +import numpy as np +import pandas as pd +import os +from matplotlib import pyplot as plt +import json +import gc +import time +import sys +sys.path.append('../utils') +import radiomics_utils +from radiomics_utils import * + +import dicom_utils +from dicom_utils import * +import mcode_utils +from mcode_utils import * + +factors = ['D0', 'D100', 'D50','mean','V0.5cc'] + +path_patients = '../examples/GBM_burdenko_example/' +path_save = '../examples/output_example' +dicoPATH = True + +def main(): + start = time.time() + if len(sys.argv[1:]) <= 0: + print("WARNING") + print("Specify patient directory(ies) or write 'all' to sort all patients." +'\n'+ + "Please ALSO specify the ROI of interest") + exit() + + elif len(sys.argv)>=3: + patient = sys.argv[1] + ROI_name = sys.argv[2] + + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + + for path in patients_to_sort: + print(" Processing patient: "+path[0]+" ") + + path_patient = path_patients+path + PATH_TO_SAVE = check_main_dosimetric_per_patient(path_patient,path_save)+'/' + + paths_images_all = get_all_folder_images(path_patient) + + paths_RT = get_dirs_RT(paths_images_all,dicoPATH) + paths_RD = get_dirs_RD(paths_RT,paths_images_all,dicoPATH) + gc.collect() + for key in paths_RT.items(): + RS_file_path = paths_RT[key[0]] + RS_file_path_2 = ("/").join(RS_file_path.split('/')[:-1]) + keys_RD = [key_RD[0] for key_RD in paths_RD.items()] + if RS_file_path_2 in keys_RD: + RD_file_path = paths_RD[RS_file_path_2] + + all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + + else: + + path_patient = path_patients+patient + PATH_TO_SAVE = check_main_dosimetric_per_patient(path_patient,path_save)+'/' + + print(" Processing patient: "+patient+" ") + + paths_images_all = get_all_folder_images(path_patient) + paths_RT = get_dirs_RT(paths_images_all,dicoPATH) + paths_RD = get_dirs_RD(paths_RT,paths_images_all,dicoPATH) + + gc.collect() + for key in paths_RT.items(): + RS_file_path = paths_RT[key[0]] + RS_file_path_2 = ("/").join(RS_file_path.split('/')[:-1]) + keys_RD = [key_RD[0] for key_RD in paths_RD.items()] + + if RS_file_path_2 in keys_RD: + RD_file_path = paths_RD[RS_file_path_2] + all_dosimetric_features_dvh_json_input(RS_file_path,RD_file_path,PATH_TO_SAVE,factors,str(ROI_name)) + +#TO DO: IF A PATIENT DOES NOT +if __name__ == "__main__": + main() + + diff --git a/utils/extract_only_radiomics.py b/utils/extract_only_radiomics.py new file mode 100644 index 0000000..7e13308 --- /dev/null +++ b/utils/extract_only_radiomics.py @@ -0,0 +1,59 @@ +import pydicom as dcm +import numpy as np +import pandas as pd +import os +from matplotlib import pyplot as plt +import json +import sys +import gc + +sys.path.append('../utils') +import radiomics_utils +from radiomics_utils import * + +path_patients = '../examples/GBM_burdenko_example/' +path_save = '../examples/output_example' +PATH_TO_SAVE = '../examples/output_example' + + +def main(): + start = time.time() + if len(sys.argv[1:]) <= 0: + print("WARNING") + print("Specify patient directory(ies) or write 'all' to sort all patients." +'\n'+ + "Please ALSO specify the ROI of interest and image of interest. You can write 'all' for both.") + exit() + + elif len(sys.argv)>=4: + patient = sys.argv[1] + ROI_name = sys.argv[2] + images = sys.argv[3] + + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + for path in patients_to_sort: + path_patient = path_patients+path + paths_images_all = get_all_folder_images(path_patient) + + for path in paths_images_all: + set_images = get_set_images(path) + if len(set_images)!=0: + for path_2 in paths_images_all: + RS_file = search_RS_file(path_2,set_images[0].SeriesDescription) + if len(RS_file)!=0: + RS_file.sort(key = lambda x: (x.StructureSetDate)) + ROis = get_ROI_keys_2(RS_file[0]) + create_ROI_folders_and_radiomics_specific(RS_file[0],'Brain',folder_path_radiomics,set_images,new_path_save_images) + + else: + path_patient = path_patients+patient + paths_images_all = get_all_folder_images(path_patient) + RS_file_path = + + + + + +if __name__ == "__main__": + main() + \ No newline at end of file diff --git a/utils/images_utils.py b/utils/images_utils.py new file mode 100644 index 0000000..6823168 --- /dev/null +++ b/utils/images_utils.py @@ -0,0 +1,32 @@ +from longiDICOM import * +import sys +sys.path.append('../longiDICOM/code') +import sys +import matplotlib.pyplot as plt +import pydicom as dcm +import SimpleITK as sitk +import numpy as np +from __future__ import print_function +import time, os +from pydicom.uid import generate_uid +import shutil +from importlib import reload + +from Registration.registration_core import find_registration_file_two_images, register_two_images, find_moving_reference +from sitk_img_tools import save_dicoms, generate_sitk_image +from Registration.dicom_registration import get_file_lists + + +def register_images(): + register_patient(patients_path[INDEXP], plot = True,opt=True) + + return + + +def save_registration_dcm(): + return + +def save_registered_image_dcm(): + return + + diff --git a/utils/mcode_utils.py b/utils/mcode_utils.py new file mode 100644 index 0000000..75ad0c3 --- /dev/null +++ b/utils/mcode_utils.py @@ -0,0 +1,510 @@ +import pydicom as dcm +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt +import json +import radiomics +import shutil +import os +import numpy as np +import matplotlib.pyplot as plt +from skimage.draw import polygon +import random +import platform +import SimpleITK as sitk +import six +import nrrd + +from radiomics import featureextractor, getFeatureClasses +from skimage.draw import polygon + +from scipy.ndimage import shift +from matplotlib import ticker +import radiomics_utils +from radiomics_utils import * +########################################################### +# UTILS TO GET DICOM TAG INFORMATION +############################################################ +system = platform.system() + +#GETS THE TAG VALUE FROM THE DICOM +def get_dicom_tag_value(dicom, keyword, default=None): + '''this function will get the dicom tag from the dicom filde for the given tag/code''' + if isinstance(keyword,str): + tag_value = dicom.get(keyword,None) + if tag_value is None: + return default + else: + tag_value = dicom.get(keyword,None).value + return tag_value + +#WITH THIS CODE WE ARE READING THE IMAGE STUDY DICOM METADATA AND STRUCTURING IT! +#THE INFORMATION IS PART OF THE MCODE MEDICAL IMAGES EXTENSION +def get_img_study(path,dicom): + tag_label_list = ['Date of Imaging',"Image Modality", "Image Identifier","Body Site","Body Structure or Part","Series Date","Study Description","Reason"] + img_study = {} + img_study_keywords = ['SeriesDate','Modality','StudyInstanceUID','AnatomicRegionSequence',"BodyPartExamined", "SeriesDate", 'StudyDescription','ReasonForPerformedProcedureCodeSequenceAttribute'] + + for label in range(0,len(img_study_keywords)): + if isinstance(tag_label_list[label], list): + img_study[tag_label_list[label]] = {} + for word in range(1,len(img_study_keywords[label])): + img_study[tag_label_list[label][0]][tag_label_list[label][word]]= str(get_dicom_tag_value(dicom,img_study_keywords[label][word-1])) + else: + img_study[tag_label_list[label]] = str(get_dicom_tag_value(dicom,img_study_keywords[label])) + + return img_study + +#FUNCTION GETS THE PATIENT DATA FROM THE DCM FILES THAT ARE COMPLIANT WITH mCODE +def get_pat_data_in_dcm(path,dicom): + pat_keywords=['PatientName','PatientBirthDate','PatientSex', + 'EthnicGroup','PatientAge','PatientWeight'] + + pat_labels=["Patient Name","Patient's Birth Date","Patient's Sex", + "Patient's Ethnic Group","Patient's Age","Patient's Weight"] + patient_data = {} + for keyword in range(0,len(pat_keywords)): + patient_data[pat_labels[keyword]] = str(get_dicom_tag_value(dicom,pat_keywords[keyword])) + + return patient_data + +#GETS THE ACQUISITION ATTRIBUTES OF MEDICAL IMAGES (PART OF THE MEDICAL IMAGES MCODE EXTENSION) +def get_acq_tags(path,dicom): + acquisition_dict = {"Imaging Protocol": str(get_dicom_tag_value(dicom,'PerfomedCodeSequenceAttribute')) + +'\n' + str(get_dicom_tag_value(dicom,'CodeMeaning'))} + + acq_labels = ["Scanner Vendor","Scanner Type","Scan Duration", + ["Contrast Enhancement/Bolus","Agent","Ingredient"], + ["Acquisition Field Of View","Reconstruction FOV Diameter", + "FOV Shape","FOV Dimensions", "FOV/Geometry"], + ["Patient Instructions","Patient Orientation", + "Instruction Sequence"]] + + acq_keywords = ['Manufacturer', + 'ManufacturerModelName', + 'AcquisitionTime', + ["ContrastBolusAgent", + "ContrastBolusIngredient"], + ["ReconstructionDiameter",'FieldOfViewShape','FieldOfViewDimensions',"PercentPhaseFieldOfView"], + ["PatientOrientation","PatientPosition", + "InstructionSequence"]] + + for label in range(0,len(acq_labels)): + if isinstance(acq_labels[label], list): + acquisition_dict[acq_labels[label][0]] = {} + for word in range(1,len(acq_labels[label])): + acquisition_dict[acq_labels[label][0]][acq_labels[label][word]]= str(get_dicom_tag_value(dicom,acq_keywords[label][word-1])) + else: + acquisition_dict[acq_labels[label]] = str(get_dicom_tag_value(dicom,acq_keywords[label])) + + return acquisition_dict + +#GETS THE RECONSTRUCTION PARAMETERS OF THE MEDICAL IMAGE OF INTEREST +#THIS INFORMATION IS PART OF OUR MCODE EXTENSION +def recon_parameters(path,dicom): + recon_dict = {} + recon_labels = ["Image Type","Slice Thickness (mm)","Slice Spacing (mm)", + "Pixel Spacing (mm)", ["Reconstruction Technique","Method","Algoritihm"], + "Convolution Kernel"] + + recon_keywords = ["Modality","SliceThickness","SpacingBetweenSlices","PixelSpacing", + ["ReconstructionMethod","ReconstructionAlgorithm"],"ConvolutionKernel"] + + for label in range(0,len(recon_labels)): + if isinstance(recon_labels[label], list): + recon_dict[recon_labels[label][0]] = {} + for word in range(1,len(recon_labels[label])): + recon_dict[recon_labels[label][0]][recon_labels[label][word]]= str(get_dicom_tag_value(dicom,recon_keywords[label][word-1])) + else: + recon_dict[recon_labels[label]] = str(get_dicom_tag_value(dicom,recon_keywords[label])) + + return recon_dict + +#GETS THE TAGS OF INTEREST FOR THE CT IMAGE (PART OF THE mCODE EXTENSION) +def get_ct_tags(path,dicom): + ct_dict = {} + + ct_tags = ["ImageType","ScanOptions","KVP", + "XRayTubeCurrent", "ExposureTime","SpiralPitchFactor", + "ImageFilter"] + #"Acquisition Field Of View": {"Scan Field of View": dicom.DataCollectionDiameter,"Reconstruction FOV Diameter": dicom.ReconstructionDiameter, + #"FOV Origin": dicom.FieldOfViewOrigin}, + #"Image Orientation Patient": list(dicom.ImageOrientationPatient), + # "Series Instance UID": str(dicom.SeriesInstanceUID), + + ct_labels = ["Image Type", "Scan Mode","KVP","XRayTubeCurrent","Exposure (msec)", + "Spiral Pitch","Image Filter"] + #"Acquisition Field Of View": {"Scan Field of View": dicom.DataCollectionDiameter,"Reconstruction FOV Diameter": dicom.ReconstructionDiameter, + #"FOV Origin": dicom.FieldOfViewOrigin}, + #"Image Orientation Patient": list(dicom.ImageOrientationPatient), + # "Series Instance UID": str(dicom.SeriesInstanceUID), + + for keyword in range(0,len(ct_tags)): + ct_dict[ct_labels[keyword]] = str(get_dicom_tag_value(dicom,ct_tags[keyword])) + + return ct_dict + +#MRI INFORMATION OF INTEREST FROM THE DICOM FILE +#REQUIRED INFORMATION FOR THE mCODE EXTENSION +def get_mri_tags(path,dicom): + mri_dict = {} + + mri_tags = ["ImageType","SeriesDescription","SequenceName","MagneticFieldStrength","RepetitionTime","EchoTime", + "EchoTrainLength","InversionTime","FlipAngle","NumberOfAverages","GeometryOfKSpaceTraversal"] + + mri_labels = ["Image Type","Series Description","Scanning Sequence Acquired","Magnetic Field Strength", + "Repetition Time","Echo Time","Echo Time Length","Inversion Time", + "Flip Angle","Number of Excitations","k-Space Trajectory"] + + for keyword in range(0,len(mri_tags)): + mri_dict[mri_labels[keyword]] = str(get_dicom_tag_value(dicom,mri_tags[keyword])) + + return mri_dict + +#PET INFORMATION TO EXTRACT THE mCODE INFORMATION EXTRACTION +def get_pet_tags(dicom): + pet_dict = {} + + pet_tags = ["ImageType",["Radiopharmaceutical",0x00091036],"RadiopharmaceuticalAdministrationEventUID", + [["RadionuclideTotalDose",0x00091038],"RadiopharmaceuticalSpecificActivity"],"TimeOfFlightinformationUsed", + ["CorrectedImage","ScatterCorrectionMethod","ScatterFractionFactor","RandomsCorrectionMethod","AttenuationCorrectionMethod","DecayFactor","DeadTimeFactor"],"TypeOfDetectorMotion"] + + pet_labels = ["Image Type","Radioactive Tracer","Radioactive Tracer Admin. Method",["Injected Activity","Total Dose (Bq)","Specific Activity (Bq/micromole)"], "Time-of-flight", + ["Image Correction Method","Methods Applied","Scatter Correction","Scatter Correction Factor","Randoms Correction","Attenuation Correction","Decay Correction Factor","Dead Time Factor"],"Type of Detector Bed Motion"] + + for label in range(0,len(pet_tags)): + if isinstance(pet_labels[label], list): + pet_dict[pet_labels[label][0]] = {} + for word in range(1,len(pet_labels[label])): + if isinstance(pet_tags[label][word-1], list): + count = 0 + for word2 in range(0,len(pet_tags[label][word-1])): + if str(get_dicom_tag_value(dicom,pet_tags[label][word-1][word2]))== None: + count = count + 1 + continue + elif count==len(pet_tags[label][word]): + pet_dict[pet_labels[label][0]][pet_labels[label][word]] = None + else: + pet_dict[pet_labels[label][0]][pet_labels[label][word]] = str(get_dicom_tag_value(dicom,pet_tags[label][word-1][word2])) + else: + pet_dict[pet_labels[label][0]][pet_labels[label][word]]= str(get_dicom_tag_value(dicom,pet_tags[label][word-1])) + + elif isinstance(pet_tags[label], list)==True and isinstance(pet_labels[label], list)==False: + for word in range(0,len(pet_tags[label])): + count0 = 0 + if str(get_dicom_tag_value(dicom,pet_tags[label][word]))==None: + count0 = count0+1 + continue + elif count0==len(pet_tags[label]): + pet_dict[pet_labels[label]] = None + else: + pet_dict[pet_labels[label]] = str(get_dicom_tag_value(dicom,pet_tags[label][word])) + else: + pet_dict[pet_labels[label]] = str(get_dicom_tag_value(dicom,pet_tags[label])) + + return pet_dict + +##################################################### +# SAVE JSON FILES +##################################################### + +#SAVE THE JSON FILES FOR A GIVEN PATH TO SAVE (PATH_SAVE), FOR A GIVEN DICOM IMAGE +def save_JSON_attributes(path_save,path,dicom): + img_study_dict = get_img_study(path,dicom) + with open(path_save+"/image_study_attributes.json", "w") as outfile: + json.dump(img_study_dict, outfile,indent=4) + + print('-------------------------------------------') + pat_data_dict = get_pat_data_in_dcm(path,dicom) + print('-------------------------------------------') + with open(path_save+"/cancer_patient_attributes.json", "w") as outfile: + json.dump(pat_data_dict, outfile,indent=4) + + acq_data_dict = get_acq_tags(path,dicom) + + with open(path_save+"/image_acquisition_attributes.json", "w") as outfile: + json.dump(acq_data_dict, outfile,indent=4) + + recon_data_dict =recon_parameters(path,dicom) + + with open(path_save+"/reconstruction_attributes.json", "w") as outfile: + json.dump(recon_data_dict, outfile,indent=4) + + if str(img_study_dict['Image Modality']).lower()=='ct' or str(img_study_dict['Image Modality']).lower()=='cbct': + ct_dict_data = get_ct_tags(path,dicom) + with open(path_save+"/CT_acquisition_properties.json", "w") as outfile: + json.dump(ct_dict_data, outfile,indent=4) + elif str(img_study_dict['Image Modality']).lower()=='mri': + mri_dict_data = get_mri_tags(path,dicom) + with open(path_save+"/MRI_acquisition_properties.json", "w") as outfile: + json.dump(mri_dict_data, outfile,indent=4) + elif str(img_study_dict['Image Modality']).lower()=='pt': + pet_dict_data = get_pet_tags(path,dicom) + with open(path_save+"/PET_acquisition_properties.json", "w") as outfile: + json.dump(pet_dict_data, outfile,indent=4) + + return + +################################################# +# UTILS TO CREATE AND SAVE THE PATHS FOR EACH PATIENT +################################################# +#CREATE THE FOLDER FOR THE GIVEN PATIENT USING THE MRN +def create_patient_folder(folder_path): + #SET THE PATH FOR THE PATIENT #CHANGE THE PATH IF NECESSARY + name_patient_mrn = folder_path.split('_')[-1] + if os.path.isdir(folder_path): + print(f"The folder '{folder_path}' exists.") + else: + + print(f"The folder '{folder_path}' does not exist") #CREATION OF THE FOLDER + print(f"##### Creating folder for Patient '{name_patient_mrn}'... ######") + if system == "Linux": + os.system("mkdir " + folder_path) #add sudo + elif system == "Windows": + os.makedirs(folder_path) + print(f"Folder created sucessfully") + print('\n') + +#IT COPIES THE ORIGINAL DIRECTORY NAMES WITHOUT THE FILES IN IT, ONLY THE LINK PATHS OF THE FOLDERS. +def copy_paths(source_folder): + paths = [] + for root, _, files in os.walk(source_folder): + for file in files: + file_path = os.path.join(root, file) + if '.dcm' in file_path or '.nrrd' in file_path or '.nii.gz' in file_path or '.nii' in file_path: + continue + else: + paths.append(file_path) + + for subdir in os.listdir(root): + subdir_path = os.path.join(root, subdir) + if '.dcm' in subdir_path or '.nrrd' in subdir_path or '.nii.gz' in subdir_path or '.nii' in subdir_path: + continue + else: + if os.path.isdir(subdir_path): + paths.append(subdir_path) + return paths + +#GET THE PATHS OF THE DIRECTORY OF THE DIRECTORIES AVAILABLE +def create_folder(folder_path): + if os.path.isdir(folder_path): + print(f"The folder '{folder_path}' exists.") + else: + print(f"The folder '{folder_path}' does not exist") #CREATION OF THE FOLDER + print('############### CREATING FOLDER ################') + if system == "Linux": + os.system("mkdir " + folder_path) #add sudo + elif system == "Windows": + os.makedirs(folder_path) + print(f"Folder created sucessfully") + print('\n') + +def get_folders_in_directory(directory_path): + """ + Returns a list of folder names present in the given directory. + """ + folder_list = [entry.name for entry in os.scandir(directory_path) if entry.is_dir()] + return folder_list + +def get_dict_paths(directory_path,paths_dict,folders): + for folder in folders: + directory_path2= directory_path+'/'+folder + last_format = directory_path2.split('.')[-1] + folders2 = sorted(get_folders_in_directory(directory_path2)) + if len(folders2)!=0: + paths_dict[folder] = folders2 + else: + continue + get_dict_paths(directory_path2,paths_dict,folders2) + +#def save_dose_map() + + #resample_dose_dist(dsDose,number_slices,dsCTs,ctArray) + #save_RT_dose_as_nrrd(rt_dose,set_images,dcm_save_path) + + +#CREATE THE FOLDER PER EACH LINK PATH IN THE NEW DIRECTORY (SAVE_PATH) +#BASICALLY FOR NOW, IT CLONES THE FOLDERS IN EACH PATIENT FOLDER WITHOUT THE FILES, ONLY THE DIRECTORIES +def create_folder_per_path(save_path,paths_dict,folders): + for folder in folders: + directory_path2= save_path+'/'+folder+'/' + create_folder(directory_path2) + if folder in paths_dict.keys(): + folders2 = paths_dict[folder] + for folder2 in folders2: + new_path = directory_path2+folder2 + create_folder(new_path) + else: + continue + create_folder_per_path(new_path,paths_dict,folders2) + +#FUNCTION TO PERFORM THE EXTRACTION OF DATA OF ALL THE PATIENTS +def clone_folders_per_patient(path_patient,path_save): + directory_path = path_patient + folders = sorted(get_folders_in_directory(directory_path)) + + paths_dict = {'Patient':directory_path.split('/')[-1]} + paths_dict['Folders'] = folders + + #return paths_dict + get_dict_paths(directory_path,paths_dict,folders) + + create_patient_folder(path_save,paths_dict['Patient']) + if paths_dict['Patient']=='': + folder_path = path_save+"/patient" + else: + folder_path = path_save+"/"+paths_dict['Patient'] + path_save3 = folder_path+'/medical_images' + + create_folder(path_save3) + + create_folder_per_path(path_save3,paths_dict,paths_dict['Folders']) + create_folder(folder_path+'/radiomics') + create_folder(folder_path+'/dosiomics') + create_folder(folder_path+'/dosimetric') + return path_save3 + +def check_main_dosimetric_per_patient(path_patient,path_save): + directory_path = path_patient + folders = sorted(get_folders_in_directory(directory_path)) + + paths_dict = {'Patient':directory_path.split('/')[-1]} + paths_dict['Folders'] = folders + folder_path = path_save+"/"+paths_dict['Patient'] + + if os.path.isdir(folder_path): + print(f"The folder '{folder_path}' exists.") + else: + create_folder(folder_path) + + folder_path_dosimetric = folder_path+'/dosimetrics' + + if os.path.isdir(folder_path_dosimetric): + print(f"The folder '{folder_path_dosimetric}' exists.") + else: + create_folder(folder_path_dosimetric) + + return folder_path_dosimetric + +def check_main_dosiomics_per_patient(path_patient,path_save): + directory_path = path_patient + folders = sorted(get_folders_in_directory(directory_path)) + + paths_dict = {'Patient':directory_path.split('/')[-1]} + paths_dict['Folders'] = folders + folder_path = path_save+"/"+paths_dict['Patient'] + folder_path_dosiomics = folder_path+'/dosiomics' + + if os.path.isdir(folder_path_dosiomics): + print(f"The folder '{folder_path_dosiomics}' exists.") + else: + create_folder(folder_path_dosiomics) + + return folder_path_dosiomics + +def check_main_radiomics_per_patient(path_patient,path_save): + directory_path = path_patient + folders = sorted(get_folders_in_directory(directory_path)) + + paths_dict = {'Patient':directory_path.split('/')[-1]} + paths_dict['Folders'] = folders + folder_path = path_save+"/"+paths_dict['Patient'] + folder_path_radiomics = folder_path+'/radiomics' + + if os.path.isdir(folder_path_radiomics): + print(f"The folder '{folder_path_radiomics}' exists.") + else: + create_folder(folder_path_radiomics) + + return folder_path_radiomics + + +def create_main_paths_per_patient(path_patient,path_save): + directory_path = path_patient + folders = sorted(get_folders_in_directory(directory_path)) + + paths_dict = {'Patient':directory_path.split('/')[-1]} + paths_dict['Folders'] = folders + if paths_dict['Patient']=='': + folder_path = path_save+"/patient" + else: + folder_path = path_save+"/"+paths_dict['Patient'] + + path_save_images = folder_path+'/medical_images' + folder_path_radiomics = folder_path+'/radiomics' + folder_path_dosiomics = folder_path+'/dosiomics' + folder_path_dosimetric = folder_path+'/dosimetrics' + + create_patient_folder(folder_path) + create_folder(path_save_images) + create_folder(folder_path_radiomics) + create_folder(folder_path_dosiomics) + create_folder(folder_path_dosimetric) + + return path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path + +#def create_folders_main_folders_per_patient(folder_path,new_path_save_images,folder_path_radiomics,folder_path_dosiomics): + + +def get_all_folder_images(path_patient): + folder_path_images = sorted(copy_paths(path_patient)) + return folder_path_images + +def create_folder_image(set_images,new_path_save_images): + image_name = '' + if len(set_images)!=0: + if isCBCT(set_images)==True: + try: + image_name = image_name + set_images[0].ContentDate+'_CBCT' #DEFINE THE FOLDER NAME FOR THE MODALITY + except: + image_name = image_name + set_images[0].SeriesDate+'_CBCT' + else: + try: + image_name = image_name + set_images[0].ContentDate+'_'+set_images[0].Modality #DEFINE THE FOLDER NAME FOR THE MODALITY + except: + image_name = image_name + set_images[0].SeriesDate+'_'+set_images[0].Modality + + if 'MR' in image_name: + #sequence = set_images[0].SeriesDescription.replace(" ", "").lower() + image_name = image_name+ "_"+set_images[0].SeriesDescription.replace(" ", "") + + new_folder_name = new_path_save_images+'/'+image_name + return new_folder_name + +def save_dicom_attributes_and_volume(folder_image,new_path_save_images): + #CREATING FOLDER FOR THE SPECIFIC PATIENT + #GETTING SET OF IMAGES FROM THE PATH OF THE DATA + + name_folder = folder_image.split('/')[-1] + set_images = radiomics_utils.get_set_images(folder_image) + image_name = '' + if len(set_images)!=0: + if isCBCT(set_images)==True: + try: + image_name = image_name + set_images[0].ContentDate+'_CBCT' #DEFINE THE FOLDER NAME FOR THE MODALITY + except: + image_name = image_name + set_images[0].SeriesDate+'_CBCT' + else: + try: + image_name = image_name + set_images[0].ContentDate+'_'+set_images[0].Modality #DEFINE THE FOLDER NAME FOR THE MODALITY + except: + image_name = image_name + set_images[0].SeriesDate+'_'+set_images[0].Modality + + if 'MR' in image_name: + #sequence = set_images[0].SeriesDescription.replace(" ", "").lower() + image_name = image_name+ "_"+set_images[0].SeriesDescription.replace(" ", "") + + new_folder_name = new_path_save_images+'/'+image_name + create_folder(new_folder_name) + save_JSON_attributes(new_folder_name,folder_image,set_images[0]) + radiomics_utils.save_img_dcm_as_nrrd(set_images, new_folder_name,image_name) + +def isCBCT(set_images): + try: + is_CBCT= set_images[0][0x0008,0x114a].value[0][0x0008,0x1150].value + return True + except: + return False + + + diff --git a/utils/radiomics_utils.py b/utils/radiomics_utils.py new file mode 100644 index 0000000..d7a6416 --- /dev/null +++ b/utils/radiomics_utils.py @@ -0,0 +1,714 @@ + +import pydicom as dcm +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt +import json +import radiomics +import shutil +import os +import gc + +import numpy as np +import matplotlib.pyplot as plt +from skimage.draw import polygon +import random +from dicompylercore import dicomparser, dvh, dvhcalc + +import SimpleITK as sitk +import six +import nrrd + +from radiomics import featureextractor, getFeatureClasses +from skimage.draw import polygon + +from scipy.ndimage import shift +from matplotlib import ticker +import sys +sys.path.append('../longiDICOM/code') +import RD_tools +from RD_tools import find_dose_file, get_dose_in_gy, get_dose_xyz, get_dose_spacing, resample_dose_map_3D, resize_dose_map_3D, get_struct_dose_values, create_binary_mask, extract_dose_values +from rs_tools import find_RS_file, find_ROI_names +from mcode_utils import save_JSON_attributes +from dicompylercore import dicomparser, dvh, dvhcalc + +import mcode_utils +from mcode_utils import * + + +############################################################################ +# UTILS FOR THE RADIOMICS AND DOSIOMICS EXTRACTION +# NRRD CONVERSION, DOSE MAP EXTRACTION AND RT STRUCTURES +############################################################################ + +#GETS THE FORMAT OF THE MEDICAL IMAGES EITHER DCM, NII OR NRRD +def get_set_images(dir_image_path): + format_image = os.listdir(dir_image_path)[0].split('.')[-1] + if format_image=='dcm': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.dcm' in x]) + slices = [dcm.dcmread(j, force=True) for j in img_files] + + try: + slice_filtered = [i for i in slices if i.Modality in ['CT','CBCT','CBCT_SCAN','MR','PT']] + return slice_filtered + except: +#CHECKING THAT IF THE UID IS NOT AVAILABLE THE TAG MODALITY IS ANOTHER WAY TO GET THE TYPE OF DCM IMAGE + CT = '1.2.840.10008.5.1.4.1.1.2' + MR = '1.2.840.10008.5.1.4.1.1.4' + PT = '1.2.840.10008.5.1.4.1.1.128' + slice_filtered = [i for i in slices if i[0x0008, 0x0016].value in [CT, MR,PT]] + return slice_filtered + elif format_image=='nii': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nii' in x]) + return img_files + elif format_image=='nrrd': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nrrd' in x]) + return img_files + else: + print('************* Error in path: No medical images found *************') + return [] + +#IT GETS THE MASKS WHEN THEY ARE SAVED IN NII.GZ +def get_set_masks_nii(dir_mask_path,ROI): + mask_files = sorted([os.path.join(dir_mask_path, x) for x in os.listdir(dir_mask_path) if '.nii.gz' in x]) + return + +#GET THE RD DCM FILE +def get_set_RD(dir_image_path): + format_image = os.listdir(dir_image_path)[0].split('.')[-1] + if format_image=='dcm': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.dcm' in x]) + slices = [dcm.dcmread(j, force=True) for j in img_files] + try: + slice_filtered = [i for i in slices if i.Modality=='RTDOSE'] + return slice_filtered + except: + RT = '1.2.840.10008.5.1.4.1.1.481.2' + slice_filtered = [i for i in slices if i[0x0008, 0x0016].value==RT] + return slice_filtered + elif format_image=='nii': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nii' in x]) + return img_files + elif format_image=='nrrd': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nrrd' in x]) + return img_files + +def get_set_RS(dir_image_path): + format_image = os.listdir(dir_image_path)[0].split('.')[-1] + if format_image=='dcm': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.dcm' in x]) + slices = [dcm.dcmread(j, force=True) for j in img_files] + try: + slice_filtered = [i for i in slices if i.Modality=='RTSTRUCT'] + return slice_filtered + except: + RT = '1.2.840.10008.5.1.4.1.1.481.3' + slice_filtered = [i for i in slices if i[0x0008, 0x0016].value==RT] + return slice_filtered + elif format_image=='nii': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nii' in x]) + return img_files + elif format_image=='nrrd': + img_files = sorted([os.path.join(dir_image_path, x) for x in os.listdir(dir_image_path) if '.nrrd' in x]) + return img_files + + +#THIS FUNCTION SAVES THE RT STRUCTURE FROM DCM TO NRRD 3D FILE +#FUNCTION TO GET THE CONTOUR FROM THE ROI_NAME +#RECEIVES THE RS DICOM FILE (RT STRUCTURE) PATH +#IMAGE FILES (SET OF NP ARRAYS OF THE IMAGES) +def save_RT_tructure_dcm_as_nrrd(ROI_name, RS_file,image_files, RS_save_path): + RS = RS_file + slices = image_files.copy() + contour_coords = [] + + roi_contour_seq = None + for i, seq in enumerate(RS.StructureSetROISequence): + + if seq.ROIName == ROI_name: + roi_seq = RS.ROIContourSequence[i] + roi_contour_seq = roi_seq.ContourSequence + + slice_numbers = set() + slice_to_contour_seq = dict() # maps slice # to structure contour sequence + slices_id = [] + for contour_seq in roi_contour_seq: + # uid of slice that this contour appears on + slice_uid = contour_seq.ContourImageSequence[0].ReferencedSOPInstanceUID + # find that corresponding slice in the files + + for i, ct_file in enumerate(image_files): + if ct_file.SOPInstanceUID == slice_uid: + slice_to_contour_seq[i] = contour_seq + slices_id.append(i) + + ds0 = slices[0] + pixel_spacing = (float(ds0.PixelSpacing[0]),float(ds0.PixelSpacing[1]),float(ds0.SliceThickness)) #DESIRE PIXEL SPACING AND VOLUME + pixels_dimensions = (int(ds0.Rows),int(ds0.Columns),len(image_files)) #DESIRE IMAGE SIZE + mask_full = np.zeros(pixels_dimensions,dtype=ds0.pixel_array.dtype) #SET A BLANK MASK WITH THE SIZE OF THE IMAGE OF REFERENCE + #USUALLY THE IMAGES ARE REGISTERED HAVING THE SAME SIZE #IF NOT, THE POSITION OF THE CONTOURS SHOULD BE ALIGNED + + for slicei in range(0,len(slices)): #READING THE SLICES + if slicei in slices_id: + slice_new = np.array(slice_to_contour_seq[slicei].ContourData).reshape((-1,3)) + start_x2, start_y2, start_z2, pixel_spacing2 = get_start_position_dcm(image_files) + coords_px = get_mask_nifti(slice_new,start_x2,start_y2,pixel_spacing2) + else: + coords_px = None + + mask = np.zeros(np.array(ds0.pixel_array).shape) + if coords_px!=None: + rows,cols = polygon(coords_px[1],coords_px[0]) + mask[rows,cols] = 1 + + mask_full[:,:,slicei] = mask + + + mask_full_v2= np.swapaxes(mask_full, 0, 1) + #print(mask_full_v2.shape) + #print(pixels_dimensions) + try: + nrrd.write(RS_save_path+'/seg_'+ROI_name+'.nrrd', mask_full_v2) + print("--------------------------------------------------------") + print(f"- Wrote nrrd file for RT structure {ROI_name} file seg_"+ROI_name+" to " + f"{RS_save_path}"+" -") + print("--------------------------------------------------------") + except: + print("--------------------------------------------------------") + print(f"- Failed to write nrrd for RT structure {ROI_name} file seg_"+ROI_name+" to " + f"{RS_save_path}"+" -") + print("--------------------------------------------------------") + + return RS_save_path+'/seg_'+ROI_name+'.nrrd' + +#THIS SAVES THE IMAGE NII AS NRRD +def save_img_nii_as_nrrd(set_image,save_path,image_name): + images = sitk.GetArrayFromImage(set_image) + pixels_dimensions = (int(images.shape[1]),int(images.shape[2]),int(images.shape[0])) + array_dicom = np.zeros(pixels_dimensions) + + for image in range(0,len(images)): + # IT CONCATENATES THE LAYER BBY LAYER (SLICE BY SLICE) + array_dicom[:,:,image] = images[image] + data_3d = np.swapaxes(array_dicom, 0, 1) + + try: + nrrd.write(save_path+'/'+image_name+'.nrrd', data_3d) + print("--------------------------------------------------------") + print(f"- Wrote nrrd file {image_name} to {save_path} -") + print("--------------------------------------------------------") + except: + print("--------------------------------------------------------") + print(f"- Failed to write nrrd file {image_name} to {save_path} -") + print("--------------------------------------------------------") + + + +def create_ROI_folders_and_radiomics(RS_file,folder_path_radiomics,set_images,new_path_save_images): + ROI_names = get_ROI_keys_2(RS_file) + + for ROI in ROI_names: + new_folder = folder_path_radiomics+'/'+ROI+'_radiomics' + print(new_folder) + create_folder(new_folder) + + RS_save_path = create_folder_image(set_images,new_folder) + create_folder(RS_save_path) + save_RT_tructure_dcm_as_nrrd(ROI, RS_file,set_images, RS_save_path) + + file_name = RS_save_path.split('/')[-1] + image_file = new_path_save_images+'/'+file_name+'/'+file_name+'.nrrd' + print(image_file) + #try: + get_radiomics('segmentation',image_file,mask_file,ROI,RS_save_path) + #except: + #print('--------------------------------------------------') + #print('- No possible to get the segmentation based features: check the mask -') + #print('--------------------------------------------------') + + create_folder(RS_save_path+'/voxel_based') + #try: + get_radiomics('voxel',image_file,mask_file,ROI,RS_save_path) + #except: + # print('--------------------------------------------------') + # print('- No possible to get the voxel based features: check the mask -') + # print('--------------------------------------------------') + +def create_ROI_folders_and_radiomics_specific(RS_file,ROI,folder_path_radiomics,set_images,new_path_save_images): + new_folder = folder_path_radiomics+'/'+ROI+'_radiomics' + create_folder(new_folder) + + RS_save_path = create_folder_image(set_images,new_folder) + create_folder(RS_save_path) + mask_path = save_RT_tructure_dcm_as_nrrd(ROI, RS_file, set_images, RS_save_path) + + file_name = RS_save_path.split('/')[-1] + image_path= new_path_save_images+'/'+file_name+'/'+file_name+'.nrrd' + + #try: + get_radiomics('segmentation',image_path,mask_path,ROI,RS_save_path) + #except: + # print('--------------------------------------------------') + # print('- No possible to get the segmentation based features: check the mask -') + # print('--------------------------------------------------') + create_folder(RS_save_path+'/voxel_based') + + #try: + get_radiomics('voxel',image_path,mask_path,ROI,RS_save_path) + #except: + # print('--------------------------------------------------') + # print('- No possible to get the voxel based features: check the mask -') + # print('--------------------------------------------------') + + + + + +#GET IMAGE FROM DCM TO NRRD +def save_img_dcm_as_nrrd(set_images, dcm_save_path,image_name): + data_3d = None + dicom_files = set_images + ds0= set_images[0] + + pixel_spacing = (float(ds0.PixelSpacing[0]),float(ds0.PixelSpacing[1]),float(ds0.SliceThickness)) + pixels_dimensions = (int(ds0.Rows),int(ds0.Columns),len(dicom_files)) + array_dicom = np.zeros(pixels_dimensions,dtype=ds0.pixel_array.dtype) + + slices = [j for j in set_images] + slices.sort(key = lambda x: (x.InstanceNumber)) + + for dicom_file in slices: + array_dicom[:,:,slices.index(dicom_file)] = dicom_file.pixel_array + + # transpose the data + data_3d = np.swapaxes(array_dicom, 0, 1) + + try: + nrrd.write(dcm_save_path+'/'+image_name+'.nrrd', data_3d) + print("--------------------------------------------------------") + print(f"- Wrote nrrd file {image_name} to {dcm_save_path} -") + print("--------------------------------------------------------") + except: + print("--------------------------------------------------------") + print(f"- Failed to write nrrd file {image_name} to {dcm_save_path} -") + print("--------------------------------------------------------") + + return + +#SAVES RT DOSE AS NRRD FILE +#TO DO: ADD THE DATE! +def save_RT_dose_as_nrrd(rt_dose,set_images,dcm_save_path): + data_3d = None + + dicom_files = set_images + ds0= dcm.dcmread(set_images[0], force=True) + + pixel_spacing = (float(ds0.PixelSpacing[0]),float(ds0.PixelSpacing[1]),float(ds0.SliceThickness)) + pixels_dimensions = (int(ds0.Rows),int(ds0.Columns),len(dicom_files)) + array_dicom = np.zeros(pixels_dimensions,dtype=ds0.pixel_array.dtype) + + for data in range(0,len(rt_dose)): + array_dicom[:,:,data] = rt_dose[data] + + # transpose the data + data_3d = np.swapaxes(array_dicom, 0, 1) + try: + nrrd.write(dcm_save_path+'/doseMap.nrrd', data_3d) + + print(f"Wrote Dose Map nrrd file {image_name} to {dcm_save_path}") + except: + print(f"Failed to write Dose Map nrrd file {image_name} to {dcm_save_path}") + + return + +#FUNCTION TO GET THE KEYS FOR EACH NAME ROI +def get_ROI_keys(RS_file_path): #ROI Name different from the PTV + RS_file = dcm.read_file(RS_file_path) + contour_keys = RS_file.StructureSetROISequence + return [str(x.ROIName) for x in contour_keys] + +#FUNCTION TO GET THE KEYS FOR EACH NAME ROI +def get_ROI_keys_2(RS_file): #ROI Name different from the PTV + contour_keys = RS_file.StructureSetROISequence + return [str(x.ROIName) for x in contour_keys] + +#FUNCTION TO GET THE KEY NAME FOR THE PTV RELATED ELEMENTS +def get_PTV_keys(RS_file_path): + ROI_keys = get_ROI_keys(RS_file_path) + return [x for x in ROI_keys if 'ptv' in x.lower()] + +#FUNCTION TO GET THE KEY NAME FOR THE GTV RELATED ELEMENTS +def get_GTV_keys(RS_file_path): + ROI_keys = get_ROI_keys(RS_file_path) + return [x for x in ROI_keys if 'gtv' in x.lower()] + +#FUNCTION TO GET THE KEY NAME FOR THE CTV +#IN CASE THAT THERE ARE MORE THAN ONE CTV KEY (E.G. CTV_5MM) THE RADIOMICS/DOSIOMICS CAN BE EXTRACTED FOR ALL OF THEM +def get_CTV_keys(RS_file_path): + ROI_keys = get_ROI_keys(RS_file_path) + return [x for x in ROI_keys if 'ctv' in x.lower()] + +def get_mask_nifti(roi_array,start_x,start_y,pixel_spacing): + ''' + Get the pixel positions (rather than the x,y coords) of the contour array so it can be plotted. + ''' + x = [] + y = [] + + for i in range(0,len(roi_array)): + x.append((roi_array[i][0]/pixel_spacing[0]) - start_x/pixel_spacing[0]) + y.append((roi_array[i][1]/pixel_spacing[1]) - start_y/pixel_spacing[1]) + + return x, y + +def get_mask_nifti_dose(roi_array,start_x,start_y,start_z,pixel_spacing): + ''' + Get the pixel positions (rather than the x,y coords) of the contour array so it can be plotted. + ''' + x = [] + y = [] + z = ((roi_array[0][2]/pixel_spacing[2]) - (start_z/pixel_spacing[2])) + for i in range(0,len(roi_array)): + x.append((roi_array[i][0]/pixel_spacing[0]) - start_x/pixel_spacing[0]) + y.append((roi_array[i][1]/pixel_spacing[1]) - start_y/pixel_spacing[1]) + + return x, y, z + +#THIS FUNCTION GETS THE IMAGE PATIENT POSITIONING FROM THE IMAGE +def get_start_position_dcm(slices): + positions = [] + for f in slices: + positions.append(f.ImagePositionPatient) + positions = sorted(positions, key=lambda x: x[-1]) + start_z = positions[0][2] + start_x = positions[0][0] + start_y = positions[0][1] + pixel_spacing = f.PixelSpacing + + return start_x, start_y, start_z, pixel_spacing + +#FUNCTION TO VISUALIZE DOSE MAP+CT MEDICAL IMAGE + SEGMENTATION +def data_visualize(dose_img,slices,seg): + doseArrayResampled = sitk.GetArrayFromImage(dose_img) + dose_min = np.min(doseArrayResampled) + dose_max = np.max(doseArrayResampled) + locator = ticker.MaxNLocator(11,min_n_ticks=10) + dose_levels = locator.tick_values(dose_min,dose_max) + plt.imshow(slices[75].pixel_array, cmap='gray') + plt.imshow(doseArrayResampled[75],cmap=plt.cm.plasma,alpha=.5) + plt.contour(sitk.GetArrayFromImage(seg)[75,:,:], colors='red', linewidths=0.4) + return + + +def get_settings(param_files): + return + +def get_dosimetric_from_RD_data(ROI_name,RT_file,RS_file): + #dose_file = + # Script that tabulates basic DVH statistics for each structure + roi_contour_seq = None + for i, seq in enumerate(RT_file.StructureSetROISequence): + if seq.ROIName == ROI_name: + dvh_seq = dose_file.DVHSequence[i] + min_dose = dvh_seq.DVHMinimumDose + max_dose = dvh_seq.DVHMaximumDose + mean_dose = dvh_seq.DVHMeanDose + return min_dose, mean_dose, max_dose + +def get_dosimetric_factors_dvh(index_roi,RS_file_path,RD_file_path,factors = ['D0', 'D100', 'D50','mean']): + + rtdose = dicomparser.DicomParser(RD_file_path) + calc_dvh = dvh.DVH.from_dicom_dvh(rtdose.ds, index_roi) + result_factors = [] + for factor in factors: + if factor=='mean': + result_factors.append(calc_dvh.mean) + else: + dose_f = calc_dvh.statistic(factor).value + result_factors.append(dose_f) + return result_factors, factors + + +def search_check_keys(roi_names,ROI_name): + stri = '' + for roi in roi_names: + if ROI_name.lower() in roi.lower(): + stri=roi + else: + continue + return stri + +def all_dosimetric_features_dvh_json(RS_file_path, RD_file_path,path_dosiomics, factors): + dp = dicomparser.DicomParser(RS_file_path) + # i.e. Gets a dict of structure information + structures = dp.GetStructures() + elements_structures = [[key] + list(inner.values())[0:2] for key, inner in structures.items()] + roi_names = np.array(elements_structures)[:,2] + + for ROI_names in sys.argv[1:]: + if ROI_names.lower() == "all": + for ROI_name in roi_names: + index_roi = list(roi_names).index(ROI_name) + 1 + try: + results_dvh,factors = get_dosimetric_factors_dvh(index_roi,RS_file_path,RD_file_path,factors) + feature_dict = {'ROI Name': ROI_name, 'units' : 'GY'} + + for i in range(0,len(results_dvh)): + feature_dict[factors[i]] = float(results_dvh[i]) + + print(feature_dict) + print('\n') + try: + with open(path_dosiomics+'_'+ROI_name+'_dosimetric.json', 'w') as file: + json.dump(feature_dict, file, indent=4) + print('------------'+ ROI_name+' JSON file with DOSIMETRIC factors were saved correctly ------------') + print('\n') + except: + print('---------------- ERROR ERROR ERROR check files and path -------------------') + except: + print('---------' + ROI_name+ ' does not have DVH information ----------------') + continue + + else: + search_key = search_check_keys(roi_names,ROI_names) + if search_key=='': + print('---------------- ERROR in ROI name. Check the labels in the RS file and input -------') + sys.exit() + + index_roi = list(roi_names).index(ROI_names) + 1 + results_dvh,factors = get_dosimetric_factors_dvh(index_roi,RS_file_path,RD_file_path,factors) + feature_dict = {'ROI Name': ROI_names, 'units' : 'GY'} #check the units from the RD file! + for i in range(0,len(results_dvh)): + feature_dict[factors[i]] = float(results_dvh[i]) + + #print(feature_dict) + #print('\n') + try: + with open(path_dosiomics+'_'+ROI_names+'_dosimetric.json', 'w') as file: + json.dump(feature_dict, file, indent=4) + print('----------'+ ROI_names+' JSON file with DOSIMETRIC factors were saved correctly ------------') + print('\n') + except: + print('--------------------- ERROR ERROR ERROR check files and path -------------------') + return + + +def all_dosimetric_features_dvh_json_input(RS_file_path, RD_file_path, path_dosiomics, factors, ROI_names): + dp = dicomparser.DicomParser(RS_file_path) + # i.e. Gets a dict of structure information + structures = dp.GetStructures() + elements_structures = [[key] + list(inner.values())[0:2] for key, inner in structures.items()] + roi_names = np.array(elements_structures)[:,2] + + if ROI_names.lower() == "all": + for ROI_name in roi_names: + index_roi = list(roi_names).index(ROI_name) + 1 + #try: + + results_dvh, factors = get_dosimetric_factors_dvh(index_roi,RS_file_path,RD_file_path,factors) + feature_dict = {'ROI Name': ROI_name, 'units' : 'GY'} + for i in range(0,len(results_dvh)): + feature_dict[factors[i]] = float(results_dvh[i]) + + print(feature_dict) + print('\n') + try: + with open(path_dosiomics+ROI_name+'_dosimetric.json', 'w') as file: + json.dump(feature_dict, file, indent=4) + print('------------'+ ROI_name+' JSON file with DOSIMETRIC factors were saved correctly ------------') + print('\n') + except: + print('---------------- ERROR ERROR ERROR check files and path -------------------') + #except: + #print('--------- CHECK FILES OR' + ROI_name+ ' does not have DVH information ----------------') + #continue + + else: + search_key = search_check_keys(roi_names,ROI_names) + if search_key=='': + print('---------------- ERROR in ROI name. Check the labels in the RS file and input -------') + sys.exit() + index_roi = list(roi_names).index(ROI_names) + 1 + results_dvh,factors = get_dosimetric_factors_dvh(index_roi,RS_file_path,RD_file_path,factors) + feature_dict = {'ROI Name': ROI_names, 'units' : 'GY'} #check the units from the RD file! + for i in range(0,len(results_dvh)): + feature_dict[factors[i]] = float(results_dvh[i]) + + print(feature_dict) + print('\n') + try: + with open(path_dosiomics+ROI_names+'_dosimetric.json', 'w') as file: + json.dump(feature_dict, file, indent=4) + print('----------'+ ROI_names+' JSON file with DOSIMETRIC factors were saved correctly ------------') + print('\n') + except: + print('--------------------- ERROR ERROR ERROR check files and path -------------------') + return + +def get_data_from_csv(path): + return + +def set_default(obj): + if isinstance(obj, set): + return list(obj) + raise TypeError + +def get_data_from_documents(path,type): + if type=='csv': + get_data_from_csv(path) + + return + +#GET RADIOMICS FUNCTION, WITH METHOD AS INPUT TO GET THE FEATURES SEGMENTATION BASED OR VOXEL BASED +#FOR VOXEL BASED IT RETURNS THE FEATURE MAP. +def get_radiomics(method,image_file,mask_file,ROIName,path_radiomics): + + maskName = sitk.ReadImage(mask_file,imageIO='NrrdImageIO') + imageName = sitk.ReadImage(image_file,imageIO='NrrdImageIO') + + + software_version = radiomics.__version__ + parameters = os.path.abspath(os.path.join('Params.yaml')) + + #params = os.path.join(dataDir, "examples", "exampleSettings", "Params.yaml") + extractor = featureextractor.RadiomicsFeatureExtractor(parameters) + featureClasses = getFeatureClasses() + #featureVector = extractor.execute(image,image) + + #TO DO: reshape the feature map + if method=='voxel': + featureVector = extractor.execute(imageName, maskName, voxelBased=True) + for key, val in six.iteritems(featureVector): + if isinstance(val, sitk.Image): # Feature map + sitk.WriteImage(val, path_radiomics+'/voxel_based/'+key + '.nrrd', True) #SAVE THE FEATURE MAP + print("Stored feature %s in %s at 'radiomics/voxel_based/'" % (key, key + ".nrrd")) + + else: #Get RADIOMICS SEGMENTATION BASED + featureVector = extractor.execute(imageName, maskName) + feature_dict = {'ROI Name': ROIName} + parameters_dict= {} + + features_names = [] + keys_features = list(extractor.enabledFeatures.keys()) + for i,featureName in enumerate(featureVector.keys()): + if featureName.split('_')[1] in keys_features: + feature_dict[featureName] = float(featureVector[featureName]) + with open(path_radiomics+'/seg_'+ROIName+"_radiomics.json", "w") as outfile: + #FEATURE JSON FILE SAVE IN THE RADIOMICS FOLDER PER PATIENT AND IMAGE STUDIED + json.dump(feature_dict, outfile,indent=4) + return + +#FUNCTION TO RESAMPLE AND RESIZING THE DOSE MAP DISTRIBUTION +#IT RECEIVED THE DOSE MAP (dsDose), number of the slices in the image +#THE SET OF CT ARRAYS (ctArray) in pixel array, and dsCTs (DICOM information image) +def resample_dose_dist(dsDose,number_slices,dsCTs,ctArray): + ctArray = np.array(ctArray) + pixel_spacing = dsCTs[0].PixelSpacing #get pixel spacing [#horizontal pixels, #vertical pixels] + doseArray = dsDose.pixel_array * dsDose.DoseGridScaling #Scale the pixel values with the DoseScale values + assert doseArray.shape[0] == float(dsDose.NumberOfFrames) #check dimension + #Define new dose spacing + doseSpacing = [float(each) for each in dsDose.PixelSpacing] + [float(dsCTs[0].SliceThickness)] + #Define the dose position of the patients int the dose map + doseImagePositionPatient = [float(each) for each in dsDose.ImagePositionPatient] + #Define spacing of the CT + ctSpacing = [float(each) for each in dsCTs[0].PixelSpacing] + [float(dsCTs[0].SliceThickness)] + + resample_set = [] + #resample each slice + for slicei in doseArray: + #WE CONVERT EACH SLICE TO AN IMAGE FROM THE ARRAY USING SITK TO RESAMPLE AND RESIZE + doseImage = sitk.GetImageFromArray(slicei) + #WE SET THE NEW SPACING + doseImage.SetSpacing(doseSpacing) + resampler = sitk.ResampleImageFilter() + resampler.SetOutputSpacing(ctSpacing) #set new spacing + #GET THE CT ARRAY SHAPE WITH NUMPY + resampler.SetSize(ctArray.shape[::-1]) # SimpleITK convention: [HEIGHT,WIDTH,Slices], numpy convention: [Slices,HEIGHT,WIDTH] + resampled_image = resampler.Execute(doseImage) #resample the dose slice + #WE GET AN ARRAY FROM THE IMAGE USING SITK + doseArrayResampled = sitk.GetArrayFromImage(resampled_image) + + ctImagePositionPatientMin = [float(each) for each in dsCTs[0].ImagePositionPatient] + ctImagePositionPatientMax = [float(each) for each in dsCTs[-1].ImagePositionPatient] + #re escale and shift the pixels position to have the equivalent dimension + dx, dy, dz = ((np.array(doseImagePositionPatient) - np.array(ctImagePositionPatientMax)) / np.array(ctSpacing)).astype(int) + + doseArrayResampled = shift(doseArrayResampled, (dy, dx)) #shift using the sITK format + resample_set.append(doseArrayResampled) + + doseImage2 = sitk.GetImageFromArray(np.array(resample_set)) #transform to image again + + doseImage2.SetSpacing(ctSpacing) #set spacing in 3D with the same slice thickness + resampler = sitk.ResampleImageFilter() + resampler.SetOutputSpacing(ctSpacing) + + resampler.SetSize(ctArray.shape[::-1]) + resampled_image2 = resampler.Execute(doseImage2) + doseArrayResampled2 = sitk.GetArrayFromImage(resampled_image2) + + return doseArrayResampled2 + + +#FUNCTION TO EXTRACT THE DOSIOMICS INFORMATION FROM A GIVEN ROI NAME +def get_dosiomics(method,imageName,maskName,ROIName,path_dosiomics): + + software_version = radiomics.__version__ + parameters = os.path.abspath(os.path.join('Params.yaml')) + + #params = os.path.join(dataDir, "examples", "exampleSettings", "Params.yaml") + extractor = featureextractor.RadiomicsFeatureExtractor(parameters) + featureClasses = getFeatureClasses() + #featureVector = extractor.execute(image,image) + + #TO DO: reshape the feature map + if method=='voxel': + featureVector = extractor.execute(imageName, maskName, voxelBased=True) + for key, val in six.iteritems(featureVector): + if isinstance(val, sitk.Image): # Feature map + sitk.WriteImage(val, path_radiomics+'/voxel_based/'+key + '.nrrd', True) #SAVE THE FEATURE MAP + print("Stored feature %s in %s at 'dosiomics/voxel_based/'" % (key, key + ".nrrd")) + + else: #Get DOSIOMICS SEGMENTATION BASED + featureVector = extractor.execute(imageName, maskName) + feature_dict = {'ROI Name': ROIName} + parameters_dict= {} + + features_names = [] + keys_features = list(extractor.enabledFeatures.keys()) + for i,featureName in enumerate(featureVector.keys()): + if featureName.split('_')[1] in keys_features: + feature_dict[featureName] = float(featureVector[featureName]) + try: + with open(path_dosiomics+'Seg_'+ROIName+"_dosiomics.json", "w") as outfile: #FEATURE JSON FILE SAVE IN THE RADIOMICS FOLDER PER PATIENT AND IMAGE STUDIED + json.dump(feature_dict, outfile,indent=4) + print('----------- JSON file with DOSIOMICS features were saved correctly ------------') + except: + print('----------- ERROR ERROR ERROR check files and path -------------------') + return + +def get_dosimetric_features(seg_roi,doseArray): + seg_2 = np.array(seg_roi,dtype=bool) + dose = doseArray[seg_2] + mean_dose, median_dose, max_dose, min_dose = np.mean(dose),np.median(dose),np.max(dose),np.min(dose) + return mean_dose, median_dose, max_dose, min_dose + +def get_radiomics_dosiomics(imageName,maskName,ROIname,path_radiomics,path_dosiomics): + get_radiomics(method,imageName,maskName,ROIname,path_radiomics) + get_dosiomics(method,imageName,maskName,ROIname,path_dosiomics) + return + +def get_only_radiomics(imageName,maskName,ROIname,path_radiomics,method): + get_radiomics(method,imageName,maskName,ROIname,path_radiomics) + return + +def get_only_dosiomics(imageName,maskName,ROIname,path_dosiomics,method): + get_dosiomics(method,imageName,maskName,ROIname,path_dosiomics) + return + +def create_ROI_folders(RS_file_path,folder_path_radiomics): + ROI_names = get_ROI_keys(RS_file_path) + for ROI in ROI_names: + new_folder = folder_path_radiomics+'/'+ROI+'_radiomics' + create_folder(new_folder) + + + + diff --git a/utils/sort_and_extract.py b/utils/sort_and_extract.py new file mode 100644 index 0000000..86f0038 --- /dev/null +++ b/utils/sort_and_extract.py @@ -0,0 +1,123 @@ +""" +Created on August 2025 +@author: Odette Rios-Ibacache + +""" + +import sys +sys.path.append('/rtdsm') +from time import process_time +import gc, os, csv, json +import pandas as pd +import gc + + +import sys +sys.path.append('../longiDICOM/code') + +from Registration.dicom_registration import get_file_lists +import pydicom as dcm +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt +import json +import sys +import os +import time + +sys.path.append('../utils') +import radiomics_utils +from radiomics_utils import * + +import mcode_utils +from mcode_utils import * +from mcode_utils import get_dicom_tag_value, get_img_study, get_pat_data_in_dcm, get_acq_tags, recon_parameters +#################################### +system = platform.system() + +path_patients = '../examples/GBM_burdenko_example/' + +def main(): + start = time.time() + if len(sys.argv[1:]) == 0: + print("WARNING") + print("Specify patient directory(ies) or write 'all' to sort all patients.") + gc.collect() + exit() + + elif len(sys.argv)>=3: + patient = sys.argv[1] + ROI_name = sys.argv[2] + + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + for path in patients_to_sort: + path_save = '../examples/output_example' + path_patient = path_patients+path + + if not os.path.isdir(path_save): + if system == "Linux": + os.system("sudo mkdir " + path_save) #add sudo + elif system == "Windows": + os.makedirs(path_save) + + new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save) + gc.collect() + #GET THE PATH OF THE IMAGES + paths_images_all = get_all_folder_images(path_patient) + + #GET THE SET OF THE IMAGES OF THE PATIENTS + for path in paths_images_all: + set_images = get_set_images(path) + if len(set_images)==0: + continue + else: + save_dicom_attributes_and_volume(path,new_path_save_images) + gc.collect() + + end = time.time() + + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + print('\n') + + end2 = time.time() + print("%%%%%%%%%%%%%%%%%%% Total time %%%%%%%%%%%%%%%%") + print(' '+str(end2-start)+" seconds ") + print('\n') + + else: + path_patient = path_patients+patient + path_save = '../examples/output_example' + + if not os.path.isdir(path_save): + if system == "Linux": + os.system("sudo mkdir " + path_save) #add sudo + elif system == "Windows": + os.makedirs(path_save) + + new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save) + + gc.collect() + paths_images_all = get_all_folder_images(path_patient) + + for path in paths_images_all: + set_images = get_set_images(path) + if len(set_images)==0: + continue + else: + save_dicom_attributes_and_volume(path,new_path_save_images) + gc.collect() + if len(set_images)!=0: + RS_file = search_RS_file(paths_images_all[0],set_images,set_images[0].StudyInstanceUID) + RS_file.sort(key = lambda x: (x.StructureSetDate)) + create_ROI_folders_and_radiomics_specific(RS_file[-1],'Parotid_R',folder_path_radiomics,set_images,new_path_save_images) + gc.collect() + + end = time.time() + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/utils/sort_mCODEfiles.py b/utils/sort_mCODEfiles.py new file mode 100644 index 0000000..ccecbb2 --- /dev/null +++ b/utils/sort_mCODEfiles.py @@ -0,0 +1,112 @@ +""" +Created on August 2025 +@author: Odette Rios-Ibacache + +""" + +import sys +sys.path.append('/rtdsm') +from time import process_time +import gc, os, csv, json +import pandas as pd + + +import sys +sys.path.append('../longiDICOM/code') + +from Registration.dicom_registration import get_file_lists +import pydicom as dcm +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt +import json +import sys +import os +import time + +sys.path.append('../utils') +import radiomics_utils +from radiomics_utils import * + +import mcode_utils +from mcode_utils import * +from mcode_utils import get_dicom_tag_value, get_img_study, get_pat_data_in_dcm, get_acq_tags, recon_parameters +#################################### +system = platform.system() + +path_patients = '../examples/GBM_burdenko_example/' + +def main(): + start = time.time() + if len(sys.argv[1:]) == 0: + print("WARNING") + print("Specify patient directory(ies) or write 'all' to sort all patients.") + gc.collect() + exit() + + for patient in sys.argv[1:]: + if patient.lower() == "all": + patients_to_sort = sorted([f for f in os.listdir(path_patients)]) + for path in patients_to_sort: + path_save = '../examples/output_example' + path_patient = path_patients+path + + if not os.path.isdir(path_save): + if system == "Linux": + os.system("sudo mkdir " + path_save) #add sudo + elif system == "Windows": + os.makedirs(path_save) + + new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save) + + #GET THE PATH OF THE IMAGES + paths_images_all = get_all_folder_images(path_patient) + + #GET THE SET OF THE IMAGES OF THE PATIENTS + for path in paths_images_all: + set_images = get_set_images(path) + if len(set_images)==0: + continue + else: + save_dicom_attributes_and_volume(path,new_path_save_images) + end = time.time() + + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + print('\n') + + end2 = time.time() + print("%%%%%%%%%%%%%%%%%%% Total time %%%%%%%%%%%%%%%%") + print(' '+str(end2-start)+" seconds ") + print('\n') + gc.collect() + + else: + path_patient = path_patients+patient + + path_save = '../examples/output_example' + if not os.path.isdir(path_save): + if system == "Linux": + os.system("sudo mkdir " + path_save) #add sudo + elif system == "Windows": + os.makedirs(path_save) + + new_path_save_images, folder_path_radiomics, folder_path_dosiomics, folder_path_dosimetric, folder_path = mcode_utils.create_main_paths_per_patient(path_patient,path_save) + paths_images_all = get_all_folder_images(path_patient) + + for path in paths_images_all: + set_images = get_set_images(path) + if len(set_images)==0: + continue + else: + save_dicom_attributes_and_volume(path,new_path_save_images) + + end = time.time() + + print("%%%%%%%%%%%%%%%%%%% Total time per patient %%%%%%%%%%%%%%") + print(' '+str(end-start)+" seconds ") + gc.collect() + + +if __name__ == "__main__": + main() \ No newline at end of file