Esempio n. 1
0
def translate_couch(pm, ss, examination, external, couch_thickness=5.55):
    #couch_thickness = 5.55
    ext_box = ss.RoiGeometries[external].GetBoundingBox()
    ext_center = SSF.roi_center_x(ss, external)
    if abs(ext_center) > 5:
        ext_center = 0
    couch_center_x = SSF.roi_center_x(ss, ROIS.couch.name)
    couch_box = ss.RoiGeometries[ROIS.couch.name].GetBoundingBox()
    y_translation = -(abs(couch_box[1].y - ext_box[1].y) - couch_thickness)
    x_translation = ext_center - couch_center_x
    transMat = {
        'M11': 1.0,
        'M12': 0.0,
        'M13': 0.0,
        'M14': x_translation,
        'M21': 0.0,
        'M22': 1.0,
        'M23': 0.0,
        'M24': y_translation,
        'M31': 0.0,
        'M32': 0.0,
        'M33': 1.0,
        'M34': 0.0,
        'M41': 0.0,
        'M42': 0.0,
        'M43': 0.0,
        'M44': 1.0
    }
    pm.RegionsOfInterest[ROIS.couch.name].TransformROI3D(
        Examination=examination, TransformationMatrix=transMat)
def create_cornea(pm, examination, ss, source_roi, box_roi, roi,
                  subtraction_roi):
    if SSF.has_named_roi_with_contours(ss, source_roi.name):
        center_x = SSF.roi_center_x(ss, source_roi.name)
        center_z = SSF.roi_center_z(ss, source_roi.name)
        source_roi_box = ss.RoiGeometries[source_roi.name].GetBoundingBox()
        y_min = source_roi_box[1].y
        if y_min > 0:
            y_min = -source_roi_box[1].y
        delete_roi(pm, box_roi.name)
        box = pm.CreateRoi(Name=box_roi.name,
                           Color=box_roi.color,
                           Type=box_roi.type)
        pm.RegionsOfInterest[box_roi.name].CreateBoxGeometry(
            Size={
                'x': 5,
                'y': 5,
                'z': 4
            },
            Examination=examination,
            Center={
                'x': center_x,
                'y': y_min + 2.5,
                'z': center_z
            })
        exclude_roi_from_export(pm, box_roi.name)
        if source_roi.name == ROIS.lens_l.name:
            wall_roi = ROIS.z_eye_l
        elif source_roi.name == ROIS.lens_r.name:
            wall_roi = ROIS.z_eye_r
        delete_roi(pm, wall_roi.name)
        create_wall_roi(pm, examination, ss, wall_roi)
        exclude_roi_from_export(pm, wall_roi.name)
        if not SSF.is_approved_roi_structure(ss, roi.name):
            if is_approved_roi_structure_in_one_of_all_structure_sets(
                    pm, roi.name):
                intersection = ROI.ROIAlgebra(roi.name + "1",
                                              roi.type,
                                              roi.color,
                                              sourcesA=[source_roi],
                                              sourcesB=[box_roi],
                                              operator='Intersection')
                # In the rare case that this ROI already exists, delete it (to avoid a crash):
                delete_roi(pm, intersection.name)
                create_algebra_roi(pm, examination, ss, intersection)
                GUIF.handle_creation_of_new_roi_because_of_approved_structure_set(
                    intersection.name)
            else:
                subtraction = ROI.ROIAlgebra(subtraction_roi.name,
                                             subtraction_roi.type,
                                             subtraction_roi.color,
                                             sourcesA=[wall_roi],
                                             sourcesB=[box_roi],
                                             operator='Subtraction')
                # In the rare case that this ROI already exists, delete it (to avoid a crash):
                delete_roi(pm, subtraction.name)
                create_algebra_roi(pm, examination, ss, subtraction)
    else:
        GUIF.handle_missing_roi_for_derived_rois(subtraction_roi.name,
                                                 source_roi.name)
 def isocenter_centered_test(self):
     t = TEST.Test(
         "Skal i utgangspunktet være mest mulig sentrert i pasientens aksial-snitt",
         '<= 12 cm', self.isocenter)
     photon_iso = None
     if self.beam_set.Modality == 'Photons':
         ss = self.ts_structure_set().structure_set
         for beam in self.beam_set.Beams:
             if not photon_iso:
                 photon_iso = beam.Isocenter.Position
                 # For photon plans, isosenter should be somewhat centered in the patient to avoid gantry collisions.
                 # Compare isocenter x and y coordinates to the center coordinates of the external ROI:
                 if SSF.has_named_roi_with_contours(ss, ROIS.external.name):
                     # Determine x and y coordinate:
                     patient_center_x = SSF.roi_center_x(
                         ss, ROIS.external.name)
                     patient_center_y = SSF.roi_center_y(
                         ss, ROIS.external.name)
                     # Reset large patient center x values (Why do we do this?!)
                     if abs(patient_center_x) > 3:
                         patient_center_x = 0
                     # Determine the distance between patient center and isocenter:
                     diff = round(
                         ((photon_iso.x - patient_center_x)**2 +
                          (photon_iso.y - patient_center_y)**2)**0.5, 1)
                     if diff > 12:
                         return t.fail(diff)
                     else:
                         return t.succeed()
Esempio n. 4
0
def create_bottom_part_x_cm(pm, examination, ss, source_roi, roi, distance):
    if SSF.has_named_roi_with_contours(ss, source_roi.name):
        center_x = SSF.roi_center_x(ss, source_roi.name)
        center_y = SSF.roi_center_y(ss, source_roi.name)
        center_z = SSF.roi_center_z(ss, source_roi.name)
        source_roi_box = ss.RoiGeometries[source_roi.name].GetBoundingBox()
        x_min = source_roi_box[0].x
        x_max = source_roi_box[1].x
        x = source_roi_box[1].x - source_roi_box[0].x
        y_min = source_roi_box[0].y
        y_max = source_roi_box[1].y
        y = source_roi_box[1].y - source_roi_box[0].y
        z_min = source_roi_box[0].z

        z = source_roi_box[1].z - source_roi_box[0].z
        z_cutoff = z_min + distance / 2
        delete_roi(pm, ROIS.box.name)
        box = pm.CreateRoi(Name=ROIS.box.name,
                           Color=ROIS.box.color,
                           Type=ROIS.box.type)
        pm.RegionsOfInterest[ROIS.box.name].CreateBoxGeometry(
            Size={
                'x': x,
                'y': y,
                'z': distance
            },
            Examination=examination,
            Center={
                'x': center_x,
                'y': center_y,
                'z': z_cutoff
            })
        if not SSF.is_approved_roi_structure(ss, roi.name):
            if is_approved_roi_structure_in_one_of_all_structure_sets(
                    pm, roi.name):
                intersection = ROI.ROIAlgebra(roi.name + "1",
                                              roi.type,
                                              roi.color,
                                              sourcesA=[source_roi],
                                              sourcesB=[ROIS.box],
                                              operator='Intersection')
                # In the rare case that this ROI already exists, delete it (to avoid a crash):
                delete_roi(pm, intersection.name)
                create_algebra_roi(pm, examination, ss, intersection)
                GUIF.handle_creation_of_new_roi_because_of_approved_structure_set(
                    intersection.name)
            else:
                intersection = ROI.ROIAlgebra(roi.name,
                                              roi.type,
                                              roi.color,
                                              sourcesA=[source_roi],
                                              sourcesB=[ROIS.box],
                                              operator='Intersection')
                # In the rare case that this ROI already exists, delete it (to avoid a crash):
                delete_roi(pm, intersection.name)
                create_algebra_roi(pm, examination, ss, intersection)
        delete_roi(pm, ROIS.box.name)
    else:
        GUIF.handle_missing_roi_for_derived_rois(roi.name, source_roi.name)
Esempio n. 5
0
def create_posterior_half_fast(pm, examination, ss, source_roi, roi):
    center_x = SSF.roi_center_x(ss, source_roi.name)
    center_y = SSF.roi_center_y(ss, source_roi.name)
    center_z = SSF.roi_center_z(ss, source_roi.name)
    source_roi_box = ss.RoiGeometries[source_roi.name].GetBoundingBox()
    x_min = source_roi_box[0].x
    x_max = source_roi_box[1].x
    x = source_roi_box[1].x - source_roi_box[0].x
    boxes = []
    boxes2 = []
    for [contour_index, contour] in enumerate(
            ss.RoiGeometries[source_roi.name].PrimaryShape.Contours):
        y_min = 9999
        y_max = -9999
        for coordinate in contour:
            if coordinate.y > y_max:
                y_max = coordinate.y
            elif coordinate.y < y_min:
                y_min = coordinate.y
        length = round((abs(y_max - y_min)), 1)
        center_y = y_max
        delete_roi(pm, ROIS.box.name + str(contour_index))
        box = pm.CreateRoi(Name=ROIS.box.name + str(contour_index),
                           Color=ROIS.box.color,
                           Type=ROIS.box.type)
        i = 0
        for i in range(0, contour_index):
            if i % 3 == 0:
                pm.RegionsOfInterest[ROIS.box.name +
                                     str(contour_index)].CreateBoxGeometry(
                                         Size={
                                             'x': x,
                                             'y': length,
                                             'z': 0.3
                                         },
                                         Examination=examination,
                                         Center={
                                             'x': center_x,
                                             'y': center_y,
                                             'z': coordinate.z
                                         })

        boxes.append(box)
        boxes2.append(
            ROI.ROI(ROIS.box.name + str(contour_index), ROIS.box.type,
                    ROIS.box.color))

    subtraction = ROI.ROIAlgebra(roi.name,
                                 roi.type,
                                 roi.color,
                                 sourcesA=[source_roi],
                                 sourcesB=boxes2,
                                 operator='Intersection')
    # In the rare case that this ROI already exists, delete it (to avoid a crash):
    delete_roi(pm, subtraction.name)
    create_algebra_roi(pm, examination, ss, subtraction)
    for i in range(0, len(boxes)):
        delete_roi(pm, boxes[i].Name)