Ejemplo n.º 1
0
def update_ptv_data(tv, study_instance_uid):
    """
    :param tv: treatment volume formatted as a "sets of points" object specified in tools.roi_geometry
    :type tv: dict
    :param study_instance_uid: study_instance_uid in SQL database
    :type study_instance_uid: str
    """
    ptv_cross_section = roi_geom.cross_section(tv)
    ptv_spread = roi_geom.spread(tv)

    condition = "study_instance_uid = '%s' and roi_type like 'PTV%%'" % study_instance_uid
    with DVH_SQL() as cnx:
        max_dose = cnx.get_max_value('dvhs', 'max_dose', condition=condition)
        min_dose = cnx.get_min_value('dvhs', 'min_dose', condition=condition)

        ptv_data = {'ptv_cross_section_max': ptv_cross_section['max'],
                    'ptv_cross_section_median': ptv_cross_section['median'],
                    'ptv_max_dose': max_dose,
                    'ptv_min_dose': min_dose,
                    'ptv_spread_x': ptv_spread[0],
                    'ptv_spread_y': ptv_spread[1],
                    'ptv_spread_z': ptv_spread[2],
                    'ptv_surface_area': roi_geom.surface_area(tv, coord_type='sets_of_points'),
                    'ptv_volume': roi_geom.volume(tv)}

        for key, value in ptv_data.items():
            cnx.update('Plans', key, value, "study_instance_uid = '%s'" % study_instance_uid)
Ejemplo n.º 2
0
def spread(study_instance_uid, roi_name):
    """
    Recalculate the spread of an roi based on data in the SQL DB.
    """

    coordinates_string = query('dvhs', 'roi_coord_string',
                               "study_instance_uid = '%s' and roi_name = '%s'" % (study_instance_uid, roi_name))

    roi = roi_form.get_planes_from_string(coordinates_string[0][0])
    data = roi_geom.spread(roi)

    data = [str(round(v/10., 3)) for v in data]

    for i, column in enumerate(['spread_x', 'spread_y', 'spread_z']):
        update_dvhs_table(study_instance_uid, roi_name, column, data[i])