PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
heightmap_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_HEIGHTMAP_SEG_IOD_VALIDATOR_HPP
22#define PACS_SERVICES_VALIDATION_HEIGHTMAP_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// Heightmap Segmentation-Specific DICOM Tags
35// =============================================================================
36
37namespace heightmap_seg_tags {
38
40inline constexpr core::dicom_tag modality{0x0008, 0x0060};
41
43inline constexpr core::dicom_tag segmentation_type{0x0062, 0x0001};
44
46inline constexpr core::dicom_tag segment_sequence{0x0062, 0x0002};
47
49inline constexpr core::dicom_tag segment_number{0x0062, 0x0004};
50
52inline constexpr core::dicom_tag segment_label{0x0062, 0x0005};
53
55inline constexpr core::dicom_tag segment_algorithm_type{0x0062, 0x0008};
56
59
62
64inline constexpr core::dicom_tag number_of_frames{0x0028, 0x0008};
65
67inline constexpr core::dicom_tag shared_functional_groups_sequence{0x5200, 0x9229};
68
71
73inline constexpr core::dicom_tag dimension_organization_sequence{0x0020, 0x9221};
74
76inline constexpr core::dicom_tag dimension_index_sequence{0x0020, 0x9222};
77
79inline constexpr core::dicom_tag referenced_series_sequence{0x0008, 0x1115};
80
82inline constexpr core::dicom_tag manufacturer{0x0008, 0x0070};
83inline constexpr core::dicom_tag manufacturer_model_name{0x0008, 0x1090};
84inline constexpr core::dicom_tag device_serial_number{0x0018, 0x1000};
85inline constexpr core::dicom_tag software_versions{0x0018, 0x1020};
86
88inline constexpr core::dicom_tag image_laterality{0x0020, 0x0062};
89
91inline constexpr core::dicom_tag anatomic_region_sequence{0x0008, 0x2218};
92
93} // namespace heightmap_seg_tags
94
95// =============================================================================
96// Heightmap Segmentation Validation Options
97// =============================================================================
98
104 bool check_type1 = true;
105
107 bool check_type2 = true;
108
110 bool check_conditional = true;
111
114
117
120
123
126
128 bool strict_mode = false;
129};
130
131// =============================================================================
132// Heightmap Segmentation IOD Validator
133// =============================================================================
134
173public:
178
184 const heightmap_seg_validation_options& options);
185
192 [[nodiscard]] validation_result validate(
193 const core::dicom_dataset& dataset) const;
194
203 [[nodiscard]] validation_result
204 validate_segments(const core::dicom_dataset& dataset) const;
205
214 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
215
219 [[nodiscard]] const heightmap_seg_validation_options& options() const noexcept;
220
225
226private:
227 // Module validation methods
229 const core::dicom_dataset& dataset,
230 std::vector<validation_finding>& findings) const;
231
233 const core::dicom_dataset& dataset,
234 std::vector<validation_finding>& findings) const;
235
237 const core::dicom_dataset& dataset,
238 std::vector<validation_finding>& findings) const;
239
241 const core::dicom_dataset& dataset,
242 std::vector<validation_finding>& findings) const;
243
245 const core::dicom_dataset& dataset,
246 std::vector<validation_finding>& findings) const;
247
249 const core::dicom_dataset& dataset,
250 std::vector<validation_finding>& findings) const;
251
253 const core::dicom_dataset& dataset,
254 std::vector<validation_finding>& findings) const;
255
257 const core::dicom_dataset& dataset,
258 std::vector<validation_finding>& findings) const;
259
261 const core::dicom_dataset& dataset,
262 std::vector<validation_finding>& findings) const;
263
265 const core::dicom_dataset& dataset,
266 std::vector<validation_finding>& findings) const;
267
269 const core::dicom_dataset& dataset,
270 std::vector<validation_finding>& findings) const;
271
273 const core::dicom_dataset& dataset,
274 std::vector<validation_finding>& findings) const;
275
277 const core::dicom_dataset& dataset,
278 std::vector<validation_finding>& findings) const;
279
281 const core::dicom_dataset& dataset,
282 std::vector<validation_finding>& findings) const;
283
284 // Attribute validation helpers
286 const core::dicom_dataset& dataset,
287 core::dicom_tag tag,
288 std::string_view name,
289 std::vector<validation_finding>& findings) const;
290
292 const core::dicom_dataset& dataset,
293 core::dicom_tag tag,
294 std::string_view name,
295 std::vector<validation_finding>& findings) const;
296
297 void check_modality(
298 const core::dicom_dataset& dataset,
299 std::vector<validation_finding>& findings) const;
300
302 const core::dicom_dataset& dataset,
303 std::vector<validation_finding>& findings) const;
304
306 const core::dicom_dataset& dataset,
307 std::vector<validation_finding>& findings) const;
308
310 const core::dicom_dataset& segment_item,
311 size_t segment_index,
312 std::vector<validation_finding>& findings) const;
313
315};
316
317// =============================================================================
318// Convenience Functions
319// =============================================================================
320
328 const core::dicom_dataset& dataset);
329
336[[nodiscard]] bool is_valid_heightmap_seg_dataset(
337 const core::dicom_dataset& dataset);
338
345[[nodiscard]] bool is_heightmap_segmentation(
346 const core::dicom_dataset& dataset);
347
348} // namespace kcenon::pacs::services::validation
349
350#endif // PACS_SERVICES_VALIDATION_HEIGHTMAP_SEG_IOD_VALIDATOR_HPP
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against Heightmap Segmentation IOD.
void check_segmentation_type(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 validate_enhanced_general_equipment_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
validation_result validate_segments(const core::dicom_dataset &dataset) const
Validate segment sequence completeness.
void validate_multiframe_functional_groups_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_sop_common_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
const heightmap_seg_validation_options & options() const noexcept
Get the validation options.
void validate_heightmap_segmentation_image_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
heightmap_seg_iod_validator()=default
Construct validator with default options.
void validate_single_segment(const core::dicom_dataset &segment_item, size_t segment_index, std::vector< validation_finding > &findings) const
void validate_heightmap_segmentation_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const heightmap_seg_validation_options &options)
Set validation options.
void validate_common_instance_reference_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_general_image_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_modality(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_general_series_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_image_pixel_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
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 segment_label
Segment Label (0062,0005)
constexpr core::dicom_tag segment_sequence
Segment Sequence (0062,0002)
constexpr core::dicom_tag image_laterality
Image Laterality (0020,0062) - required for ophthalmic context.
constexpr core::dicom_tag dimension_organization_sequence
Dimension Organization Sequence (0020,9221)
constexpr core::dicom_tag shared_functional_groups_sequence
Shared Functional Groups Sequence (5200,9229)
constexpr core::dicom_tag number_of_frames
Number of Frames (0028,0008)
constexpr core::dicom_tag segmented_property_category_code_sequence
Segmented Property Category Code Sequence (0062,0003)
constexpr core::dicom_tag segment_number
Segment Number (0062,0004)
constexpr core::dicom_tag segmented_property_type_code_sequence
Segmented Property Type Code Sequence (0062,000F)
constexpr core::dicom_tag manufacturer
Enhanced General Equipment Module tags.
constexpr core::dicom_tag dimension_index_sequence
Dimension Index Sequence (0020,9222)
constexpr core::dicom_tag anatomic_region_sequence
Anatomic Region Sequence (0008,2218)
constexpr core::dicom_tag modality
Heightmap Segmentation Series Module - Modality (0008,0060) must be "SEG".
constexpr core::dicom_tag referenced_series_sequence
Referenced Series Sequence (0008,1115) - Common Instance Reference Module.
constexpr core::dicom_tag per_frame_functional_groups_sequence
Per-Frame Functional Groups Sequence (5200,9230)
validation_result validate_heightmap_seg_iod(const core::dicom_dataset &dataset)
Validate a Heightmap Segmentation dataset with default options.
bool is_heightmap_segmentation(const core::dicom_dataset &dataset)
Check if dataset is a heightmap segmentation.
bool is_valid_heightmap_seg_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid Heightmap Segmentation object.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool validate_heightmap_instance
Validate heightmap-specific instance attributes.
bool check_type2
Check Type 2 (required, can be empty) attributes.
std::string_view name
Ultrasound Image IOD Validator.