In [1]:
import dicom as dc
import sys
from glob import glob
from matplotlib.mlab import PCA
sys.path.append('./')
import util.data as data

dicom_paths = glob('dicom_files_lib/Prostate_IMRT81/*')
dicom_paths.sort()

ptv_names = []
ptv_idxs = []
blad_names = []
blad_idxs = []
rect_names = []
rect_idxs = []

#list of arrays = [[x_hist],[y_hist],[z_hist]]
ptv_data = []
ptv_centroids = []
blad_data = []
rect_data = []

patient_idx = 0

for patient_path in dicom_paths:
    print "Processing {} of {}".format(patient_idx,len(dicom_paths))
    
    #structure file path
    dicom_structures_path = glob(patient_path+"/RS.*")[0]
    #image file path
    dicom_image_path_list = glob(patient_path+"/CT*")

    
    #list ROIs
    ds = dc.read_file(dicom_structures_path)
    contour_list = [ (x.ROIName,x.ROINumber) for x in ds.StructureSetROISequence]
    
    #find PTV
    ptv_selected = []
    for name, idx in contour_list:
        if '8100' in name:
            ptv_selected.append((name,idx))
        elif 'ptv' in name.lower():
            ptv_selected.append((name,idx))

    #second PTV filter
    if len(ptv_selected) == 1:
        ptv_final = ptv_selected
    else:
        ptv_final = []
        for name, idx in ptv_selected:
            if ('7560' in name or '8100' in name) and 'ptv' in name.lower():
                 ptv_final.append((name,idx))
        if len(ptv_final) == 0:
            ptv_final.append(ptv_selected[0])
        elif len(ptv_final) > 1:
            ptv_final = [ptv_final[0]]
    print " ptv = {}".format(ptv_final[0])    
    ptv_names.append(ptv_final[0][0])
    ptv_idxs.append(ptv_final[0][1])
    #get and save ptv data
    ptv_data = data.ContourImage()
    ptv_data.import_raw_data(dicom_structures_path, dicom_image_path_list, roi_ref_num=ptv_idxs[-1])
    ptv_data.process_data()
    #quickly compute centroid
    V_pca = PCA(ptv_data.surface_points)
    ptv_centroids.append(V_pca.mu)
    temp_geo = data.GeometryFeatures()
    temp_geo.calc_contour_projection_histograms(ptv_data,ptv_centroids[-1])
    temp_geo.write('OUTPUT/geo_ptv_{}.json'.format(patient_idx))

    
    #find bladder
    blad_selected = []
    for name, idx in contour_list:
        if 'blad' in name.lower() and not ('+' in name or 'opt' in name.lower()):
            blad_selected.append((name,idx))
    print " bladder={}".format(blad_selected[0])
    blad_names.append(blad_selected[0][0])
    blad_idxs.append(blad_selected[0][1])
    #get and save bladder data
    temp_data = data.ContourImage()
    temp_data.import_raw_data(dicom_structures_path, dicom_image_path_list, roi_ref_num=blad_idxs[-1])
    temp_data.process_data()
    temp_geo = data.GeometryFeatures()
    temp_geo.calc_contour_projection_histograms(temp_data,ptv_centroids[-1])
    temp_geo.write('OUTPUT/geo_blad_{}.json'.format(patient_idx))
    
    #find rectum
    rect_selected = []
    for name, idx in contour_list:
        if 'rect' in name.lower() and not ('+' in name or 'opt' in name.lower() or 'margin' in name.lower()):
            rect_selected.append((name,idx))
    print " rectum={}".format(rect_selected[0])
    rect_names.append(rect_selected[0][0])
    rect_idxs.append(rect_selected[0][1])
    #get and save rectum data
    temp_data = data.ContourImage()
    temp_data.import_raw_data(dicom_structures_path, dicom_image_path_list, roi_ref_num=rect_idxs[-1])
    temp_data.process_data()
    temp_geo = data.GeometryFeatures()
    temp_geo.calc_contour_projection_histograms(temp_data,ptv_centroids[-1])
    temp_geo.write('OUTPUT/geo_rect_{}.json'.format(patient_idx))
    
    patient_idx += 1


Processing 0 of 100
 ptv = ('PTV 8100', '6')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '3')
voxel volume = 2.38418334961
Processing 1 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 2 of 100
 ptv = ('ptv', '3')
voxel volume = 2.38418334961
 bladder=('bladder', '9')
voxel volume = 2.38418334961
 rectum=('rectum', '8')
voxel volume = 2.38418334961
Processing 3 of 100
 ptv = ('PTV 8100', '9')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 4 of 100
 ptv = ('PTV 8100', '9')
voxel volume = 4.0292723999
 bladder=('Bladder', '4')
voxel volume = 4.0292723999
 rectum=('Rectum', '6')
voxel volume = 4.0292723999
Processing 5 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 6 of 100
 ptv = ('ptv', '3')
voxel volume = 2.38418334961
 bladder=('bladder', '8')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 7 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 8 of 100
 ptv = ('PTV8100', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 9 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 10 of 100
 ptv = ('PTV 7800', '11')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 11 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 12 of 100
 ptv = ('PTV', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 13 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '2')
voxel volume = 2.38418334961
 rectum=('rectum', '7')
voxel volume = 2.38418334961
Processing 14 of 100
 ptv = ('PTV8100', '14')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 15 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 16 of 100
 ptv = ('ptv8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 17 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 18 of 100
 ptv = ('PTV8100', '15')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 19 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 20 of 100
 ptv = ('PTV8100', '3')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 21 of 100
 ptv = ('PTV 8100', '14')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 22 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('bladder-ptv', '12')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 23 of 100
 ptv = ('PTV', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 24 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '8')
voxel volume = 2.38418334961
 rectum=('rectum', '9')
voxel volume = 2.38418334961
Processing 25 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 26 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 27 of 100
 ptv = ('PTV 8100', '3')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 28 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 29 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '6')
voxel volume = 2.38418334961
 rectum=('Rectum', '7')
voxel volume = 2.38418334961
Processing 30 of 100
 ptv = ('ptv8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 31 of 100
 ptv = ('ptv8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 32 of 100
 ptv = ('ptv', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '5')
voxel volume = 4.0292723999
 rectum=('Rectum', '6')
voxel volume = 4.0292723999
Processing 33 of 100
 ptv = ('ptv8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 34 of 100
 ptv = ('PTV 81', '6')
voxel volume = 1.89701189209
 bladder=('Bladder', '7')
voxel volume = 1.89701189209
 rectum=('Rectum', '8')
voxel volume = 1.89701189209
Processing 35 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 36 of 100
 ptv = ('PTV 81', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '5')
voxel volume = 4.0292723999
 rectum=('Rectum', '6')
voxel volume = 4.0292723999
Processing 37 of 100
 ptv = ('ptv8100', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '7')
voxel volume = 4.0292723999
 rectum=('Rectum', '8')
voxel volume = 4.0292723999
Processing 38 of 100
 ptv = ('ptv', '4')
voxel volume = 3.43322753906
 bladder=('bladder', '7')
voxel volume = 3.43322753906
 rectum=('rectum', '8')
voxel volume = 3.43322753906
Processing 39 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '7')
voxel volume = 2.38418334961
 rectum=('rectum', '8')
voxel volume = 2.38418334961
Processing 40 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 41 of 100
 ptv = ('PTV 8100', '8')
voxel volume = 2.38418334961
 bladder=('bladder', '6')
voxel volume = 2.38418334961
 rectum=('rectum', '5')
voxel volume = 2.38418334961
Processing 42 of 100
 ptv = ('PTV8100', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('rectum', '5')
voxel volume = 2.38418334961
Processing 43 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 44 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 45 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 46 of 100
 ptv = ('PTV8100', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 47 of 100
 ptv = ('PTV 8100', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 48 of 100
 ptv = ('PTV8100', '2')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 49 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 50 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 51 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 52 of 100
 ptv = ('PTV8100', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 53 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 54 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '8')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 55 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 56 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '8')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 57 of 100
 ptv = ('PTV 8100', '10')
voxel volume = 2.38418334961
 bladder=('bladder', '7')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 58 of 100
 ptv = ('PTV 8100', '7')
voxel volume = 2.66877109802
 bladder=('Bladder', '8')
voxel volume = 2.66877109802
 rectum=('Rectum', '9')
voxel volume = 2.66877109802
Processing 59 of 100
 ptv = ('PTV8100', '3')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 60 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '8')
voxel volume = 2.38418334961
 rectum=('Rectum', '9')
voxel volume = 2.38418334961
Processing 61 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 62 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 63 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 64 of 100
 ptv = ('PTV8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 65 of 100
 ptv = ('PTV8100 C1', '13')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 66 of 100
 ptv = ('Prostate PTV', '11')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 67 of 100
 ptv = ('ptv', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '5')
voxel volume = 4.0292723999
 rectum=('Rectum', '6')
voxel volume = 4.0292723999
Processing 68 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 69 of 100
 ptv = ('PTV1', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 70 of 100
 ptv = ('PTV 8100', '18')
voxel volume = 2.38418334961
 bladder=('Bladder', '3')
voxel volume = 2.38418334961
 rectum=('Rectum', '4')
voxel volume = 2.38418334961
Processing 71 of 100
 ptv = ('PTV7740', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 72 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 73 of 100
 ptv = ('ptv', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '5')
voxel volume = 4.0292723999
 rectum=('Rectum', '6')
voxel volume = 4.0292723999
Processing 74 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 75 of 100
 ptv = ('PTV7740', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '7')
voxel volume = 2.38418334961
Processing 76 of 100
 ptv = ('PTV8100_new', '13')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 77 of 100
 ptv = ('PTV7740', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 78 of 100
 ptv = ('ptv', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '7')
voxel volume = 4.0292723999
 rectum=('Rectum_ch', '14')
voxel volume = 4.0292723999
Processing 79 of 100
 ptv = ('ptv', '4')
voxel volume = 4.0292723999
 bladder=('Bladder', '7')
voxel volume = 4.0292723999
 rectum=('Rectum', '8')
voxel volume = 4.0292723999
Processing 80 of 100
 ptv = ('PTV 8100', '2')
voxel volume = 3.43322753906
 bladder=('Bladder', '4')
voxel volume = 3.43322753906
 rectum=('Rectum', '5')
voxel volume = 3.43322753906
Processing 81 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 82 of 100
 ptv = ('PTV 7740', '13')
voxel volume = 4.0292723999
 bladder=('Bladder', '7')
voxel volume = 4.0292723999
 rectum=('Rectum', '8')
voxel volume = 4.0292723999
Processing 83 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 84 of 100
 ptv = ('PTV 7740', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 85 of 100
 ptv = ('PTV 7560', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 86 of 100
 ptv = ('PTV 7560', '10')
voxel volume = 2.38418334961
 bladder=('Bladder', '4')
voxel volume = 2.38418334961
 rectum=('Rectum', '5')
voxel volume = 2.38418334961
Processing 87 of 100
 ptv = ('PTV7560', '12')
voxel volume = 2.38418334961
 bladder=('bladder', '9')
voxel volume = 2.38418334961
 rectum=('rectum', '10')
voxel volume = 2.38418334961
Processing 88 of 100
 ptv = ('PTV', '8')
voxel volume = 2.38418334961
 bladder=('bladder', '3')
voxel volume = 2.38418334961
 rectum=('Rectum', '4')
voxel volume = 2.38418334961
Processing 89 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 90 of 100
 ptv = ('PTV C1', '6')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 91 of 100
 ptv = ('PTV=7740', '3')
voxel volume = 2.38418334961
 bladder=('bladder', '7')
voxel volume = 2.38418334961
 rectum=('rectum', '8')
voxel volume = 2.38418334961
Processing 92 of 100
 ptv = ('PTV1', '6')
voxel volume = 2.38418334961
 bladder=('bladder', '7')
voxel volume = 2.38418334961
 rectum=('rectum', '8')
voxel volume = 2.38418334961
Processing 93 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '5')
voxel volume = 2.38418334961
 rectum=('Rectum', '6')
voxel volume = 2.38418334961
Processing 94 of 100
 ptv = ('PTV 8100', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '8')
voxel volume = 2.38418334961
 rectum=('Rectum', '7')
voxel volume = 2.38418334961
Processing 95 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 96 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 97 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961
Processing 98 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('Bladder', '7')
voxel volume = 2.38418334961
 rectum=('Rectum', '8')
voxel volume = 2.38418334961
Processing 99 of 100
 ptv = ('ptv', '4')
voxel volume = 2.38418334961
 bladder=('bladder', '5')
voxel volume = 2.38418334961
 rectum=('rectum', '6')
voxel volume = 2.38418334961

In [10]:
#save log
log_data = data.Features()
log_data.feats['ptv_centroids'] = [v.tolist() for v in ptv_centroids]
log_data.feats['ptv_labels'] = ptv_names
log_data.feats['ptv_idxs'] = ptv_idxs
log_data.feats['blad_labels'] = blad_names
log_data.feats['blad_idxs'] = blad_idxs
log_data.feats['rect_labels'] = rect_names
log_data.feats['rect_idxs'] = rect_idxs
log_data.feats['dicom_paths'] = dicom_paths
log_data.write('OUTPUT/LOG.json')

In [11]:
#read log
log_data = data.Features()
log_data.read('OUTPUT/LOG.json')


Out[11]:
<util.data.Features instance at 0x65e6368>

In [20]:
#generate dose features

#ptv dose
patient_idx = 0
for patient_path in log_data.feats['dicom_paths']:
    print "Processing {} of {}".format(patient_idx,len(log_data.feats['dicom_paths']))
    dicom_dose_path = glob(patient_path+"/RD.*")[0]

    for roi in ['ptv','blad','rect']:
        #ptv
        temp_dose = data.DoseFeatures()
        temp_dose.calculate(dicom_dose_path,log_data.feats['{}_idxs'.format(roi)][patient_idx],200,[0.0,90],30)
        temp_dose.write('OUTPUT/dose_{}_{}.json'.format(roi,patient_idx))
    
    patient_idx +=1


Processing 0 of 100
Processing 1 of 100
Processing 2 of 100
Processing 3 of 100
Processing 4 of 100
Processing 5 of 100
Processing 6 of 100
Processing 7 of 100
Processing 8 of 100
Processing 9 of 100
Processing 10 of 100
Processing 11 of 100
Processing 12 of 100
Processing 13 of 100
Processing 14 of 100
Processing 15 of 100
Processing 16 of 100
Processing 17 of 100
Processing 18 of 100
Processing 19 of 100
Processing 20 of 100
Processing 21 of 100
Processing 22 of 100
Processing 23 of 100
Processing 24 of 100
Processing 25 of 100
Processing 26 of 100
Processing 27 of 100
Processing 28 of 100
Processing 29 of 100
Processing 30 of 100
Processing 31 of 100
Processing 32 of 100
Processing 33 of 100
Processing 34 of 100
Processing 35 of 100
Processing 36 of 100
Processing 37 of 100
Processing 38 of 100
Processing 39 of 100
Processing 40 of 100
Processing 41 of 100
Processing 42 of 100
Processing 43 of 100
Processing 44 of 100
Processing 45 of 100
Processing 46 of 100
Processing 47 of 100
Processing 48 of 100
Processing 49 of 100
Processing 50 of 100
Processing 51 of 100
Processing 52 of 100
Processing 53 of 100
Processing 54 of 100
Processing 55 of 100
Processing 56 of 100
Processing 57 of 100
Processing 58 of 100
Processing 59 of 100
Processing 60 of 100
Processing 61 of 100
Processing 62 of 100
Processing 63 of 100
Processing 64 of 100
Processing 65 of 100
Processing 66 of 100
Processing 67 of 100
Processing 68 of 100
Processing 69 of 100
Processing 70 of 100
Processing 71 of 100
Processing 72 of 100
Processing 73 of 100
Processing 74 of 100
Processing 75 of 100
Processing 76 of 100
Processing 77 of 100
Processing 78 of 100
Processing 79 of 100
Processing 80 of 100
Processing 81 of 100
Processing 82 of 100
Processing 83 of 100
Processing 84 of 100
Processing 85 of 100
Processing 86 of 100
Processing 87 of 100
Processing 88 of 100
Processing 89 of 100
Processing 90 of 100
Processing 91 of 100
Processing 92 of 100
Processing 93 of 100
Processing 94 of 100
Processing 95 of 100
Processing 96 of 100
Processing 97 of 100
Processing 98 of 100
Processing 99 of 100

In [ ]: