PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
seg_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
18#ifndef PACS_SERVICES_VALIDATION_SEG_IOD_VALIDATOR_HPP
19#define PACS_SERVICES_VALIDATION_SEG_IOD_VALIDATOR_HPP
20
23#include "kcenon/pacs/services/validation/us_iod_validator.h" // For validation_result types
24
25#include <optional>
26#include <string>
27#include <vector>
28
30
31// =============================================================================
32// SEG Validation Options
33// =============================================================================
34
40 bool check_type1 = true;
41
43 bool check_type2 = true;
44
46 bool check_conditional = true;
47
50
53
56
59
62
65
67 bool strict_mode = false;
68};
69
70// =============================================================================
71// SEG IOD Validator
72// =============================================================================
73
113public:
117 seg_iod_validator() = default;
118
123 explicit seg_iod_validator(const seg_validation_options& options);
124
131 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
132
141 [[nodiscard]] validation_result
142 validate_segments(const core::dicom_dataset& dataset) const;
143
152 [[nodiscard]] validation_result
153 validate_references(const core::dicom_dataset& dataset) const;
154
163 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
164
168 [[nodiscard]] const seg_validation_options& options() const noexcept;
169
173 void set_options(const seg_validation_options& options);
174
175private:
176 // Module validation methods
178 const core::dicom_dataset& dataset,
179 std::vector<validation_finding>& findings) const;
180
182 const core::dicom_dataset& dataset,
183 std::vector<validation_finding>& findings) const;
184
186 const core::dicom_dataset& dataset,
187 std::vector<validation_finding>& findings) const;
188
190 const core::dicom_dataset& dataset,
191 std::vector<validation_finding>& findings) const;
192
194 const core::dicom_dataset& dataset,
195 std::vector<validation_finding>& findings) const;
196
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
214 const core::dicom_dataset& dataset,
215 std::vector<validation_finding>& findings) const;
216
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 std::vector<validation_finding>& findings) const;
228
230 const core::dicom_dataset& dataset,
231 std::vector<validation_finding>& findings) const;
232
233 // Attribute validation helpers
235 const core::dicom_dataset& dataset,
236 core::dicom_tag tag,
237 std::string_view name,
238 std::vector<validation_finding>& findings) const;
239
241 const core::dicom_dataset& dataset,
242 core::dicom_tag tag,
243 std::string_view name,
244 std::vector<validation_finding>& findings) const;
245
246 void check_modality(
247 const core::dicom_dataset& dataset,
248 std::vector<validation_finding>& findings) const;
249
251 const core::dicom_dataset& dataset,
252 std::vector<validation_finding>& findings) const;
253
255 const core::dicom_dataset& dataset,
256 std::vector<validation_finding>& findings) const;
257
259 const core::dicom_dataset& segment_item,
260 size_t segment_index,
261 std::vector<validation_finding>& findings) const;
262
264};
265
266// =============================================================================
267// Convenience Functions
268// =============================================================================
269
276[[nodiscard]] validation_result validate_seg_iod(const core::dicom_dataset& dataset);
277
284[[nodiscard]] bool is_valid_seg_dataset(const core::dicom_dataset& dataset);
285
292[[nodiscard]] bool is_binary_segmentation(const core::dicom_dataset& dataset);
293
300[[nodiscard]] bool is_fractional_segmentation(const core::dicom_dataset& dataset);
301
308[[nodiscard]] size_t get_segment_count(const core::dicom_dataset& dataset);
309
310} // namespace kcenon::pacs::services::validation
311
312#endif // PACS_SERVICES_VALIDATION_SEG_IOD_VALIDATOR_HPP
void validate_segmentation_series_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 check_segmentation_type(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_single_segment(const core::dicom_dataset &segment_item, size_t segment_index, std::vector< validation_finding > &findings) const
void validate_general_image_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_sop_common_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_references(const core::dicom_dataset &dataset) const
Validate referenced instances.
void validate_general_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
seg_iod_validator()=default
Construct validator with default options.
const seg_validation_options & options() const noexcept
Get the validation options.
void check_modality(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_common_instance_reference_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 validate_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_multiframe_functional_groups_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_segment_sequence(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against SEG IOD.
validation_result validate_segments(const core::dicom_dataset &dataset) const
Validate segment sequence completeness.
void validate_enhanced_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const seg_validation_options &options)
Set validation options.
void check_pixel_data_consistency(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_image_pixel_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_multiframe_dimension_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_segmentation_image_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required attributes.
void check_type1_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
bool is_fractional_segmentation(const core::dicom_dataset &dataset)
Check if dataset is fractional segmentation.
bool is_binary_segmentation(const core::dicom_dataset &dataset)
Check if dataset is binary segmentation.
validation_result validate_seg_iod(const core::dicom_dataset &dataset)
Validate a SEG dataset with default options.
size_t get_segment_count(const core::dicom_dataset &dataset)
Get segment count from dataset.
bool is_valid_seg_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid SEG object.
bool validate_segment_labels
Validate segment labels and descriptions.
bool validate_pixel_data
Validate pixel data matches segmentation type.
bool check_type1
Check Type 1 (required) attributes.
bool validate_segment_sequence
Validate Segment Sequence structure.
bool validate_anatomic_region
Validate anatomical region coding.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool validate_references
Validate referenced series/instances.
bool strict_mode
Strict mode - treat warnings as errors.
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_algorithm_info
Validate segment algorithm identification.
std::string_view name
Ultrasound Image IOD Validator.