planning:userguide:results_api_functions
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
planning:userguide:results_api_functions [2017/07/18 14:56] – created dpatenaude | planning:userguide:results_api_functions [2021/07/29 18:24] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Planning Results API Functions | + | ====== Planning Results API ====== |
Below is a list of provided Results API functions for the planning application. Each function must be called using a Thinknode meta request. | Below is a list of provided Results API functions for the planning application. Each function must be called using a Thinknode meta request. | ||
Line 6: | Line 6: | ||
For an example in calling a Planning Results API function, please refer to the // | For an example in calling a Planning Results API function, please refer to the // | ||
+ | |||
+ | ===== Results API Types ===== | ||
<code c++> | <code c++> | ||
+ | // PLAN RESULTS API | ||
+ | |||
+ | // Some general notes about the API... | ||
+ | // | ||
+ | // All API functions here are exposed as request generators. This is for | ||
+ | // multiple reasons... | ||
+ | // | ||
+ | // * It allows the implementation to return (possibly chained) ' | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // * It allows users to inspect the intermediate requests to see how result | ||
+ | // | ||
+ | // | ||
+ | // ' | ||
+ | // It includes only textual information and IDs. There' | ||
+ | // The real data is retrieved separately through other API calls. | ||
+ | // | ||
+ | // A ' | ||
+ | // user commentary and parameters that are automatically captured by the app. | ||
+ | // | ||
+ | // A report has no prescribed structure. It's only meant to be consumed | ||
+ | // visually by humans. The generating app version has full flexibility in what | ||
+ | // it chooses to include. Thus, apps that use this API should NOT analyze the | ||
+ | // contents of the report. If apps need information that's not directly | ||
+ | // available outside the report, then either this API is missing information | ||
+ | // or they' | ||
+ | // of the planning app (in which case they should be using that version' | ||
+ | // structures directly). | ||
+ | // | ||
+ | // There' | ||
+ | // the DVHs for structures even though you have enough info to compute them | ||
+ | // yourself). This is not just a matter of convenience but is a way of ensuring | ||
+ | // that important results are captured as they were originally computed. | ||
+ | |||
+ | api(struct) | ||
+ | struct ct_summary | ||
+ | { | ||
+ | double window; | ||
+ | double level; | ||
+ | vector3d slice_positions; | ||
+ | markup_document report; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct structure_summary | ||
+ | { | ||
+ | value internal_id; | ||
+ | // stringified version of the internal id | ||
+ | string id; | ||
+ | // display label of the structure | ||
+ | styled_text label; | ||
+ | rgb8 color; | ||
+ | bool visible; | ||
+ | double opacity; | ||
+ | structure_render_mode render_mode; | ||
+ | markup_document report; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct point_summary | ||
+ | { | ||
+ | value internal_id; | ||
+ | styled_text label; | ||
+ | rgb8 color; | ||
+ | markup_document report; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct aperture_summary | ||
+ | { | ||
+ | styled_text label; | ||
+ | markup_document report; | ||
+ | |||
+ | aperture_parameters parameters; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct degrader_summary | ||
+ | { | ||
+ | styled_text label; | ||
+ | markup_document report; | ||
+ | |||
+ | double thickness; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct beam_summary | ||
+ | { | ||
+ | styled_text label; | ||
+ | rgb8 color; | ||
+ | markup_document report; | ||
+ | |||
+ | styled_text isocenter; | ||
+ | styled_text geometric_target_label; | ||
+ | styled_text spot_target_label; | ||
+ | |||
+ | double couch_angle; | ||
+ | double gantry_angle; | ||
+ | |||
+ | double air_gap; | ||
+ | |||
+ | // optional snout name for this beam | ||
+ | optional< | ||
+ | |||
+ | // optional aperture for this beam | ||
+ | optional< | ||
+ | |||
+ | // list of degraders for this beam | ||
+ | std:: | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct course_summary | ||
+ | { | ||
+ | markup_document report; | ||
+ | styled_text label; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct intent_summary | ||
+ | { | ||
+ | // a report about what the plan was intended to accomplish | ||
+ | // (e.g., prescription, | ||
+ | markup_document report; | ||
+ | // Name of the patient external structure (from the disease site template) | ||
+ | string patient_structure_name; | ||
+ | // Name of the treatment_site | ||
+ | string treatment_site; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct patient_model_summary | ||
+ | { | ||
+ | markup_document report; | ||
+ | styled_text label; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct constraint_summary | ||
+ | { | ||
+ | string constraint_type; | ||
+ | styled_text structure_label; | ||
+ | double dose; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct fraction_group_summary | ||
+ | { | ||
+ | styled_text label; | ||
+ | rgb8 color; | ||
+ | markup_document report; | ||
+ | |||
+ | unsigned fraction_count; | ||
+ | // The scale factor to apply to the rx_statement for the fraction group. Set as follows: | ||
+ | // IMPT Fraction Group: 1.0 | ||
+ | // SFO Fraction Group: 1.0 / # of beamsets | ||
+ | // Advanced Fraction Group: 1.0 | ||
+ | double rx_scale_factor; | ||
+ | |||
+ | std:: | ||
+ | |||
+ | std:: | ||
+ | }; | ||
+ | |||
+ | |||
+ | api(struct) | ||
+ | struct prescription_summary | ||
+ | { | ||
+ | styled_text label; | ||
+ | rgb8 color; | ||
+ | markup_document report; | ||
+ | |||
+ | // the number of fractions this prescription is specified to implement | ||
+ | unsigned fraction_count; | ||
+ | |||
+ | // map of the index of the structure from the structure summary and it's Rx dose | ||
+ | std:: | ||
+ | |||
+ | std:: | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct spot_placement_summary | ||
+ | { | ||
+ | double distal_margin; | ||
+ | double lateral_margin; | ||
+ | double spot_spacing; | ||
+ | string spot_strategy; | ||
+ | double layer_spacing; | ||
+ | string layer_strategy; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct objective_summary | ||
+ | { | ||
+ | string objective_type; | ||
+ | styled_text structure_label; | ||
+ | optional< | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct solver_parameter_summary | ||
+ | { | ||
+ | bool intelligent_stopping_solver; | ||
+ | unsigned solver_iterations; | ||
+ | bool intelligent_stopping_optimizer; | ||
+ | unsigned optimizer_iterations; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct dicom_summary | ||
+ | { | ||
+ | string study_instance_uid; | ||
+ | string study_description; | ||
+ | string study_id; | ||
+ | string series_instance_uid; | ||
+ | string series_description; | ||
+ | string ref_structure_set_uid; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct rsp_image_summary | ||
+ | { | ||
+ | markup_document report; | ||
+ | string rsp_image_id; | ||
+ | }; | ||
+ | |||
+ | api(struct) | ||
+ | struct plan_summary | ||
+ | { | ||
+ | // A summary of the DICOM study/ | ||
+ | dicom_summary dcm_summary; | ||
+ | |||
+ | // the treatment plan name | ||
+ | styled_text label; | ||
+ | |||
+ | // the plan description | ||
+ | styled_text description; | ||
+ | |||
+ | // the patient information | ||
+ | // (e.g., name, mrn, demographics) | ||
+ | patient_info patient; | ||
+ | |||
+ | // the snapshot patient position | ||
+ | patient_position_type patient_position; | ||
+ | |||
+ | // info from the course level | ||
+ | course_summary course_info; | ||
+ | |||
+ | // info from the intent level | ||
+ | intent_summary intent_info; | ||
+ | |||
+ | // info from the patient model level | ||
+ | patient_model_summary patient_model_info; | ||
+ | |||
+ | // a summary about the CT image associated with the treatment plan | ||
+ | ct_summary ct_image_summary; | ||
+ | |||
+ | // a report about the high-level creation of the plan | ||
+ | // (e.g., calculation settings, optimization parameters, etc.) | ||
+ | markup_document creation_report; | ||
+ | |||
+ | // a summary about the RSP image associated with the treatment plan | ||
+ | rsp_image_summary rsp_image_info; | ||
+ | |||
+ | // a report about the calculation grid used in creating the treatment plan | ||
+ | markup_document calc_grid_report; | ||
+ | |||
+ | // a report about the results of the plan | ||
+ | // (e.g., dose statistics that were considered important) | ||
+ | markup_document results_report; | ||
+ | |||
+ | // the list of structures relevant to this treatment plan | ||
+ | std:: | ||
+ | |||
+ | // the list of points relevant to this treatment plan | ||
+ | std:: | ||
+ | |||
+ | // ID of the machine on which this plan is intended to be treated | ||
+ | string machine_id; | ||
+ | |||
+ | // ID of the treatment room on which this plan is intended to be treated | ||
+ | string treatment_room_id; | ||
+ | |||
+ | // the list of prescriptions intended to be delivered by this plan | ||
+ | std:: | ||
+ | |||
+ | // the spot placement parameters used at the plan level | ||
+ | spot_placement_summary spot_placement; | ||
+ | |||
+ | // the list of constraints to be used for calculating MCO in this plan | ||
+ | std:: | ||
+ | |||
+ | // the list of objectives to be used for calculating MCO in this plan | ||
+ | std:: | ||
+ | |||
+ | // the iteration counts used for MCO calculations in this plan | ||
+ | solver_parameter_summary solver_params; | ||
+ | }; | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Results API Functions ===== | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | // Generate the request for the site_info used for constructing the treatment plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_site_info_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the dicom rt_ion_plan for a treatment_plan | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_rt_ion_plan_request( | ||
+ | treatment_plan const& plan, | ||
+ | rt_approval const& approval, | ||
+ | rt_tolerance_table const& tol_table, | ||
+ | rt_patient_setup const& patient_setup, | ||
+ | std:: | ||
+ | unsigned fraction_cycle_length, | ||
+ | unsigned fractions_per_day, | ||
+ | string const& fraction_pattern); | ||
+ | |||
+ | // Generate the request for the summary info for a plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_plan_summary_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the CT image used for constructing a plan. | ||
+ | // Image is returned in IEC 61217 (DICOM) patient space coordinates. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_ct_image_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the RSP image used for constructing a plan. | ||
+ | // The spatial coordinate system is that of the CT image. | ||
+ | // TODO: This currently returns the merged EPF image because we don't actually | ||
+ | // construct the sliced one as an intermediate step, which is also incorrect. | ||
+ | // Once that's fixed, this should return the sliced EPF. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_rsp_image_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the machine used for constructing a plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_machine_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the geometry associated with a treatment plan | ||
+ | // structure. | ||
+ | // structure_index is the index of the structure in the plan summary' | ||
+ | // `structures` list. | ||
+ | // The spatial coordinate system of the structure is that of the CT image. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_structure_geometry_request( | ||
+ | treatment_plan const& plan, size_t structure_index); | ||
+ | |||
+ | // Generate the request for the geometry associated with a treatment plan | ||
+ | // point. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_point_geometry_request( | ||
+ | treatment_plan const& plan, size_t point_index); | ||
+ | |||
+ | // Generate the request for the list of voxels making up the calculation grid | ||
+ | // used for a plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_calc_grid_voxels_request( | ||
+ | treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the dose delivered by a treatment plan. | ||
+ | // The units of the dose image are Gy(RBE). | ||
+ | // The spatial coordinate system is that of the CT image. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_plan_dose_request(treatment_plan const& plan); | ||
+ | |||
+ | // Generate the request for the DVH for a structure within a treatment plan. | ||
+ | // The DVH is cumulative and includes the full plan dose. | ||
+ | // The image-space dimension of the DVH is dose and is in Gy(RBE). | ||
+ | // The value-space dimension of the DVH is volume and is fractional (not percent). | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_plan_dvh_request(treatment_plan const& plan, size_t structure_index); | ||
+ | |||
+ | // Generate the request for the dose delivered by a treatment plan for a | ||
+ | // particular prescription. | ||
+ | // The units of the dose image are Gy(RBE). | ||
+ | // The spatial coordinate system is that of the CT image. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_prescription_dose_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index); | ||
+ | |||
+ | // Generate the request for the dose delivered by a fraction group within a | ||
+ | // treatment plan. | ||
+ | // The fraction group is specified by the index of its prescription within the plan | ||
+ | // and the index of the fraction group within its prescription. | ||
+ | // The units of the dose image are Gy(RBE). | ||
+ | // The spatial coordinate system is that of the CT image. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_fraction_group_dose_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index); | ||
+ | |||
+ | // Generate the request for the dose delivered by a beam within a treatment | ||
+ | // plan. | ||
+ | // The beam is identified by the index of its prescription within the prescription, | ||
+ | // fraction group within that prescription, | ||
+ | // within its fraction group. | ||
+ | // The units of the dose image are Gy(RBE). | ||
+ | // The spatial coordinate system is that of the CT image. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_dose_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index); | ||
+ | |||
+ | // Generate the request for the geometry for a beam in a treatment plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_geometry_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index); | ||
+ | |||
+ | // Generate the request for the aperture used by a beam within a treatment | ||
+ | // plan. | ||
+ | // | ||
+ | // The generated request will yield an aperture as modeled by the dosimetry | ||
+ | // app. | ||
+ | // | ||
+ | // If the specified beam has no aperture, this is an error. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_aperture_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index); | ||
+ | |||
+ | // Generate the request for the aperture mesh for a beam within a treatment | ||
+ | // plan. | ||
+ | // | ||
+ | // The generated request will yield a 3D mesh that describes the shape that | ||
+ | // the planning app believes the aperture to be. The mesh is oriented in beam | ||
+ | // space with its downstream edge at the isocentric plane. | ||
+ | // | ||
+ | // If the specified beam has no aperture, this is an error. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_aperture_mesh_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index, | ||
+ | optional< | ||
+ | |||
+ | // Generate the request for a degrader used by a beam within a treatment plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_degrader_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index, | ||
+ | size_t degrader_index); | ||
+ | |||
+ | // Generate the request for the 3D mesh for a degrader used by a beam within a | ||
+ | // treatment plan. | ||
+ | // | ||
+ | // The generated request will yield a 3D mesh that describes the shape that | ||
+ | // the planning app believes the degrader to be. The mesh is oriented in beam | ||
+ | // space with its downstream edge at the isocentric plane. | ||
+ | // | ||
+ | /// TODO: Again, I'm not sure that this should really be a separate request. | ||
+ | /// | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_degrader_mesh_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index, | ||
+ | size_t degrader_index); | ||
+ | |||
+ | // Generate the request for the spot list for a beam within a treatment plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_spot_list_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index); | ||
+ | // Generate the request for the snout position for a beam within a treatment plan. | ||
+ | api(fun) | ||
+ | calculation_request | ||
+ | generate_beam_snout_position_request( | ||
+ | treatment_plan const& plan, | ||
+ | size_t prescription_index, | ||
+ | size_t fraction_group_index, | ||
+ | size_t beam_index); | ||
</ | </ | ||
planning/userguide/results_api_functions.1500389786.txt.gz · Last modified: 2021/07/29 18:22 (external edit)