PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
label_map_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
21#ifndef PACS_SERVICES_VALIDATION_LABEL_MAP_SEG_IOD_VALIDATOR_HPP
22#define PACS_SERVICES_VALIDATION_LABEL_MAP_SEG_IOD_VALIDATOR_HPP
23
26#include "kcenon/pacs/services/validation/us_iod_validator.h" // For validation_result types
27
28#include <string>
29#include <vector>
30
32
33// =============================================================================
34// Label Map Segmentation-Specific DICOM Tags
35// =============================================================================
36
37namespace label_map_seg_tags {
38
40inline constexpr core::dicom_tag segmentation_type{0x0062, 0x0001};
41
43inline constexpr core::dicom_tag segment_sequence{0x0062, 0x0002};
44
46inline constexpr core::dicom_tag segment_number{0x0062, 0x0004};
47
49inline constexpr core::dicom_tag segment_label{0x0062, 0x0005};
50
52inline constexpr core::dicom_tag segment_algorithm_type{0x0062, 0x0008};
53
56 0x0062, 0x0003};
57
60 0x0062, 0x000F};
61
63inline constexpr core::dicom_tag number_of_frames{0x0028, 0x0008};
64
67 0x5200, 0x9229};
68
71 0x5200, 0x9230};
72
75 0x0020, 0x9221};
76
78inline constexpr core::dicom_tag dimension_index_sequence{0x0020, 0x9222};
79
81inline constexpr core::dicom_tag referenced_series_sequence{0x0008, 0x1115};
82
84inline constexpr core::dicom_tag manufacturer{0x0008, 0x0070};
85inline constexpr core::dicom_tag manufacturer_model_name{0x0008, 0x1090};
86inline constexpr core::dicom_tag device_serial_number{0x0018, 0x1000};
87inline constexpr core::dicom_tag software_versions{0x0018, 0x1020};
88
89} // namespace label_map_seg_tags
90
91// =============================================================================
92// Label Map Segmentation Validation Options
93// =============================================================================
94
100 bool check_type1 = true;
101
103 bool check_type2 = true;
104
106 bool check_conditional = true;
107
110
113
116
119
122
124 bool strict_mode = false;
125};
126
127// =============================================================================
128// Label Map Segmentation IOD Validator
129// =============================================================================
130
175public:
180
186 const label_map_seg_validation_options& options);
187
194 [[nodiscard]] validation_result validate(
195 const core::dicom_dataset& dataset) const;
196
203 [[nodiscard]] validation_result
204 validate_segments(const core::dicom_dataset& dataset) const;
205
212 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
213
217 [[nodiscard]] const label_map_seg_validation_options&
218 options() const noexcept;
219
224
225private:
227 const core::dicom_dataset& dataset,
228 std::vector<validation_finding>& findings) const;
229
231 const core::dicom_dataset& dataset,
232 std::vector<validation_finding>& findings) const;
233
235 const core::dicom_dataset& dataset,
236 std::vector<validation_finding>& findings) const;
237
239 const core::dicom_dataset& dataset,
240 std::vector<validation_finding>& findings) const;
241
243 const core::dicom_dataset& dataset,
244 std::vector<validation_finding>& findings) const;
245
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& dataset,
260 std::vector<validation_finding>& findings) const;
261
263 const core::dicom_dataset& dataset,
264 std::vector<validation_finding>& findings) const;
265
267 const core::dicom_dataset& dataset,
268 std::vector<validation_finding>& findings) const;
269
271 const core::dicom_dataset& dataset,
272 std::vector<validation_finding>& findings) const;
273
275 const core::dicom_dataset& dataset,
276 std::vector<validation_finding>& findings) const;
277
279 const core::dicom_dataset& dataset,
280 std::vector<validation_finding>& findings) const;
281
282 // Attribute validation helpers
284 const core::dicom_dataset& dataset,
285 core::dicom_tag tag,
286 std::string_view name,
287 std::vector<validation_finding>& findings) const;
288
290 const core::dicom_dataset& dataset,
291 core::dicom_tag tag,
292 std::string_view name,
293 std::vector<validation_finding>& findings) const;
294
295 void check_modality(
296 const core::dicom_dataset& dataset,
297 std::vector<validation_finding>& findings) const;
298
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& segment_item,
309 size_t segment_index,
310 std::vector<validation_finding>& findings) const;
311
313};
314
315// =============================================================================
316// Convenience Functions
317// =============================================================================
318
326 const core::dicom_dataset& dataset);
327
334[[nodiscard]] bool is_valid_label_map_seg_dataset(
335 const core::dicom_dataset& dataset);
336
343[[nodiscard]] bool is_label_map_segmentation(
344 const core::dicom_dataset& dataset);
345
346} // namespace kcenon::pacs::services::validation
347
348#endif // PACS_SERVICES_VALIDATION_LABEL_MAP_SEG_IOD_VALIDATOR_HPP
void validate_label_map_segmentation_image_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_segments(const core::dicom_dataset &dataset) const
Validate segment sequence completeness.
void validate_general_equipment_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
label_map_seg_iod_validator()=default
Construct validator with default options.
void validate_image_pixel_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
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required attributes.
void validate_label_map_segmentation_series_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
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against Label Map Segmentation IOD.
void validate_sop_common_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_general_image_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
const label_map_seg_validation_options & options() const noexcept
Get the validation options.
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_common_instance_reference_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_pixel_data_consistency(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
void check_type2_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
void set_options(const label_map_seg_validation_options &options)
Set validation options.
void validate_general_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_enhanced_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_modality(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
segment_algorithm_type
Segment algorithm type (0062,0008)
segmentation_type
Segmentation type (0062,0001)
Definition seg_storage.h:79
constexpr core::dicom_tag manufacturer
Enhanced General Equipment Module tags.
constexpr core::dicom_tag shared_functional_groups_sequence
Shared Functional Groups Sequence (5200,9229)
constexpr core::dicom_tag segmented_property_category_code_sequence
Segmented Property Category Code Sequence (0062,0003)
constexpr core::dicom_tag segmented_property_type_code_sequence
Segmented Property Type Code Sequence (0062,000F)
constexpr core::dicom_tag number_of_frames
Number of Frames (0028,0008)
constexpr core::dicom_tag segment_sequence
Segment Sequence (0062,0002)
constexpr core::dicom_tag referenced_series_sequence
Referenced Series Sequence (0008,1115)
constexpr core::dicom_tag per_frame_functional_groups_sequence
Per-Frame Functional Groups Sequence (5200,9230)
constexpr core::dicom_tag segment_number
Segment Number (0062,0004)
constexpr core::dicom_tag dimension_index_sequence
Dimension Index Sequence (0020,9222)
constexpr core::dicom_tag segment_label
Segment Label (0062,0005)
constexpr core::dicom_tag dimension_organization_sequence
Dimension Organization Sequence (0020,9221)
bool is_valid_label_map_seg_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid Label Map Segmentation object.
validation_result validate_label_map_seg_iod(const core::dicom_dataset &dataset)
Validate a Label Map Segmentation dataset with default options.
bool is_label_map_segmentation(const core::dicom_dataset &dataset)
Check if dataset is a label map segmentation.
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_label_map_instance
Validate label map-specific instance attributes.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
std::string_view name
Ultrasound Image IOD Validator.