PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
rt_iod_validator.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
20#ifndef PACS_SERVICES_VALIDATION_RT_IOD_VALIDATOR_HPP
21#define PACS_SERVICES_VALIDATION_RT_IOD_VALIDATOR_HPP
22
25#include "kcenon/pacs/services/validation/us_iod_validator.h" // For shared validation types
26
27#include <optional>
28#include <string>
29#include <vector>
30
32
33// =============================================================================
34// RT Validation Options
35// =============================================================================
36
42 bool check_type1 = true;
43
45 bool check_type2 = true;
46
48 bool check_conditional = true;
49
51 bool validate_rt_plan = true;
52
54 bool validate_rt_dose = true;
55
58
61
64
66 bool allow_retired = true;
67
69 bool strict_mode = false;
70};
71
72// =============================================================================
73// RT Plan IOD Validator
74// =============================================================================
75
101public:
103 explicit rt_plan_iod_validator(const rt_validation_options& options);
104
105 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
106 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
107
108 [[nodiscard]] const rt_validation_options& options() const noexcept;
109 void set_options(const rt_validation_options& options);
110
111private:
113 const core::dicom_dataset& dataset,
114 std::vector<validation_finding>& findings) const;
115
117 const core::dicom_dataset& dataset,
118 std::vector<validation_finding>& findings) const;
119
121 const core::dicom_dataset& dataset,
122 std::vector<validation_finding>& findings) const;
123
125 const core::dicom_dataset& dataset,
126 std::vector<validation_finding>& findings) const;
127
129 const core::dicom_dataset& dataset,
130 std::vector<validation_finding>& findings) const;
131
133 const core::dicom_dataset& dataset,
134 std::vector<validation_finding>& findings) const;
135
137 const core::dicom_dataset& dataset,
138 std::vector<validation_finding>& findings) const;
139
141 const core::dicom_dataset& dataset,
142 std::vector<validation_finding>& findings) const;
143
145 const core::dicom_dataset& dataset,
146 core::dicom_tag tag,
147 std::string_view name,
148 std::vector<validation_finding>& findings) const;
149
151 const core::dicom_dataset& dataset,
152 core::dicom_tag tag,
153 std::string_view name,
154 std::vector<validation_finding>& findings) const;
155
157};
158
159// =============================================================================
160// RT Dose IOD Validator
161// =============================================================================
162
186public:
188 explicit rt_dose_iod_validator(const rt_validation_options& options);
189
190 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
191 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
192
193 [[nodiscard]] const rt_validation_options& options() const noexcept;
194 void set_options(const rt_validation_options& options);
195
196private:
198 const core::dicom_dataset& dataset,
199 std::vector<validation_finding>& findings) const;
200
202 const core::dicom_dataset& dataset,
203 std::vector<validation_finding>& findings) const;
204
206 const core::dicom_dataset& dataset,
207 std::vector<validation_finding>& findings) const;
208
210 const core::dicom_dataset& dataset,
211 std::vector<validation_finding>& findings) const;
212
213 void validate_rt_dose_module(
214 const core::dicom_dataset& dataset,
215 std::vector<validation_finding>& findings) const;
216
217 void validate_image_pixel_module(
218 const core::dicom_dataset& dataset,
219 std::vector<validation_finding>& findings) const;
220
222 const core::dicom_dataset& dataset,
223 std::vector<validation_finding>& findings) const;
224
226 const core::dicom_dataset& dataset,
227 core::dicom_tag tag,
228 std::string_view name,
229 std::vector<validation_finding>& findings) const;
230
232 const core::dicom_dataset& dataset,
233 core::dicom_tag tag,
234 std::string_view name,
235 std::vector<validation_finding>& findings) const;
236
237 void check_dose_data_consistency(
238 const core::dicom_dataset& dataset,
239 std::vector<validation_finding>& findings) const;
240
242};
243
244// =============================================================================
245// RT Structure Set IOD Validator
246// =============================================================================
247
268public:
271
272 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
273 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
274
275 [[nodiscard]] const rt_validation_options& options() const noexcept;
276 void set_options(const rt_validation_options& options);
277
278private:
280 const core::dicom_dataset& dataset,
281 std::vector<validation_finding>& findings) const;
282
284 const core::dicom_dataset& dataset,
285 std::vector<validation_finding>& findings) const;
286
288 const core::dicom_dataset& dataset,
289 std::vector<validation_finding>& findings) const;
290
291 void validate_structure_set_module(
292 const core::dicom_dataset& dataset,
293 std::vector<validation_finding>& findings) const;
294
295 void validate_roi_contour_module(
296 const core::dicom_dataset& dataset,
297 std::vector<validation_finding>& findings) const;
298
299 void validate_rt_roi_observations_module(
300 const core::dicom_dataset& dataset,
301 std::vector<validation_finding>& findings) const;
302
304 const core::dicom_dataset& dataset,
305 std::vector<validation_finding>& findings) const;
306
308 const core::dicom_dataset& dataset,
309 core::dicom_tag tag,
310 std::string_view name,
311 std::vector<validation_finding>& findings) const;
312
314 const core::dicom_dataset& dataset,
315 core::dicom_tag tag,
316 std::string_view name,
317 std::vector<validation_finding>& findings) const;
318
319 void check_roi_consistency(
320 const core::dicom_dataset& dataset,
321 std::vector<validation_finding>& findings) const;
322
324};
325
326// =============================================================================
327// Unified RT IOD Validator
328// =============================================================================
329
337public:
338 rt_iod_validator() = default;
339 explicit rt_iod_validator(const rt_validation_options& options);
340
346 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
347
353 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
354
355 [[nodiscard]] const rt_validation_options& options() const noexcept;
356 void set_options(const rt_validation_options& options);
357
358private:
360};
361
362// =============================================================================
363// Convenience Functions
364// =============================================================================
365
369[[nodiscard]] validation_result validate_rt_plan_iod(const core::dicom_dataset& dataset);
370
374[[nodiscard]] validation_result validate_rt_dose_iod(const core::dicom_dataset& dataset);
375
379[[nodiscard]] validation_result validate_rt_structure_set_iod(const core::dicom_dataset& dataset);
380
384[[nodiscard]] validation_result validate_rt_iod(const core::dicom_dataset& dataset);
385
389[[nodiscard]] bool is_valid_rt_plan_dataset(const core::dicom_dataset& dataset);
390
394[[nodiscard]] bool is_valid_rt_dose_dataset(const core::dicom_dataset& dataset);
395
399[[nodiscard]] bool is_valid_rt_structure_set_dataset(const core::dicom_dataset& dataset);
400
404[[nodiscard]] bool is_valid_rt_dataset(const core::dicom_dataset& dataset);
405
406} // namespace kcenon::pacs::services::validation
407
408#endif // PACS_SERVICES_VALIDATION_RT_IOD_VALIDATOR_HPP
void validate_rt_general_plan_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_type2_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
void validate_sop_common_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_general_study_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_patient_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_type1_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
void validate_frame_of_reference_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
const rt_validation_options & options() const noexcept
void validate_rt_fraction_scheme_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_rt_beams_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate(const core::dicom_dataset &dataset) const
bool quick_check(const core::dicom_dataset &dataset) const
void validate_rt_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const rt_validation_options &options)
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
validation_result validate_rt_iod(const core::dicom_dataset &dataset)
Validate any RT dataset (auto-detects type) with default options.
bool is_valid_rt_dose_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid RT Dose.
bool is_valid_rt_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid RT object (any type)
validation_result validate_rt_plan_iod(const core::dicom_dataset &dataset)
Validate an RT Plan dataset with default options.
bool is_valid_rt_structure_set_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid RT Structure Set.
bool is_valid_rt_plan_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid RT Plan.
validation_result validate_rt_structure_set_iod(const core::dicom_dataset &dataset)
Validate an RT Structure Set dataset with default options.
validation_result validate_rt_dose_iod(const core::dicom_dataset &dataset)
Validate an RT Dose dataset with default options.
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_rt_plan
Validate RT Plan specific attributes (beams, fractions)
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool validate_pixel_data
Validate pixel data consistency (for RT Dose and RT Image)
bool check_type1
Check Type 1 (required) attributes.
bool validate_references
Validate referenced objects (plans, images)
bool strict_mode
Strict mode - treat warnings as errors.
bool validate_rt_structure_set
Validate RT Structure Set specific attributes (ROIs, contours)
bool validate_rt_dose
Validate RT Dose specific attributes (dose grid, units)
std::string_view name
Ultrasound Image IOD Validator.