PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
parametric_map_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
23#ifndef PACS_SERVICES_VALIDATION_PARAMETRIC_MAP_IOD_VALIDATOR_HPP
24#define PACS_SERVICES_VALIDATION_PARAMETRIC_MAP_IOD_VALIDATOR_HPP
25
28#include "kcenon/pacs/services/validation/us_iod_validator.h" // Reuse validation types
29
30#include <string>
31#include <vector>
32
34
35// =============================================================================
36// Parametric Map-Specific DICOM Tags for Validation
37// =============================================================================
38
39namespace pmap_iod_tags {
40
42inline constexpr core::dicom_tag real_world_value_mapping_sequence{0x0040, 0x9096};
43
45inline constexpr core::dicom_tag real_world_value_intercept{0x0040, 0x9224};
46
48inline constexpr core::dicom_tag real_world_value_slope{0x0040, 0x9225};
49
51inline constexpr core::dicom_tag measurement_units_code_sequence{0x0040, 0x08EA};
52
54inline constexpr core::dicom_tag content_label{0x0070, 0x0080};
55
57inline constexpr core::dicom_tag content_description{0x0070, 0x0081};
58
60inline constexpr core::dicom_tag content_creator_name{0x0070, 0x0084};
61
63inline constexpr core::dicom_tag number_of_frames{0x0028, 0x0008};
64
66inline constexpr core::dicom_tag shared_functional_groups_sequence{0x5200, 0x9229};
67
70
72inline constexpr core::dicom_tag dimension_organization_sequence{0x0020, 0x9221};
73
75inline constexpr core::dicom_tag dimension_index_sequence{0x0020, 0x9222};
76
78inline constexpr core::dicom_tag referenced_series_sequence{0x0008, 0x1115};
79
81inline constexpr core::dicom_tag manufacturer{0x0008, 0x0070};
82
84inline constexpr core::dicom_tag manufacturer_model_name{0x0008, 0x1090};
85
87inline constexpr core::dicom_tag device_serial_number{0x0018, 0x1000};
88
90inline constexpr core::dicom_tag software_versions{0x0018, 0x1020};
91
93inline constexpr core::dicom_tag float_pixel_data{0x7FE0, 0x0008};
94
96inline constexpr core::dicom_tag double_float_pixel_data{0x7FE0, 0x0009};
97
98} // namespace pmap_iod_tags
99
100// =============================================================================
101// Parametric Map Validation Options
102// =============================================================================
103
109 bool check_type1 = true;
110
112 bool check_type2 = true;
113
115 bool check_conditional = true;
116
119
121 bool validate_rwvm = true;
122
125
128
130 bool strict_mode = false;
131};
132
133// =============================================================================
134// Parametric Map IOD Validator
135// =============================================================================
136
172public:
177
183
189 [[nodiscard]] validation_result validate(
190 const core::dicom_dataset& dataset) const;
191
197 [[nodiscard]] bool quick_check(
198 const core::dicom_dataset& dataset) const;
199
203 [[nodiscard]] const pmap_validation_options& options() const noexcept;
204
208 void set_options(const pmap_validation_options& options);
209
210private:
211 // Module validation methods
213 const core::dicom_dataset& dataset,
214 std::vector<validation_finding>& findings) const;
215
217 const core::dicom_dataset& dataset,
218 std::vector<validation_finding>& findings) const;
219
221 const core::dicom_dataset& dataset,
222 std::vector<validation_finding>& findings) const;
223
225 const core::dicom_dataset& dataset,
226 std::vector<validation_finding>& findings) const;
227
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
256 // Attribute validation helpers
258 const core::dicom_dataset& dataset,
259 core::dicom_tag tag,
260 std::string_view name,
261 std::vector<validation_finding>& findings) const;
262
264 const core::dicom_dataset& dataset,
265 core::dicom_tag tag,
266 std::string_view name,
267 std::vector<validation_finding>& findings) const;
268
269 void check_modality(
270 const core::dicom_dataset& dataset,
271 std::vector<validation_finding>& findings) const;
272
274 const core::dicom_dataset& dataset,
275 std::vector<validation_finding>& findings) const;
276
278};
279
280// =============================================================================
281// Convenience Functions
282// =============================================================================
283
290 const core::dicom_dataset& dataset);
291
297[[nodiscard]] bool is_valid_parametric_map_dataset(
298 const core::dicom_dataset& dataset);
299
300} // namespace kcenon::pacs::services::validation
301
302#endif // PACS_SERVICES_VALIDATION_PARAMETRIC_MAP_IOD_VALIDATOR_HPP
void validate_patient_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const pmap_validation_options &options)
Set validation options.
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_general_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
parametric_map_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 check_pixel_data_consistency(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_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_enhanced_general_equipment_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
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against Parametric Map IOD.
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required parametric map attributes.
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_common_instance_reference_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_parametric_map_image_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
const pmap_validation_options & options() const noexcept
Get the validation options.
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)
constexpr core::dicom_tag referenced_series_sequence
Referenced Series Sequence (0008,1115)
constexpr core::dicom_tag dimension_index_sequence
Dimension Index Sequence (0020,9222)
constexpr core::dicom_tag double_float_pixel_data
Double Float Pixel Data (7FE0,0009)
constexpr core::dicom_tag content_creator_name
Content Creator's Name (0070,0084) — Type 2.
constexpr core::dicom_tag manufacturer_model_name
Manufacturer's Model Name (0008,1090)
constexpr core::dicom_tag measurement_units_code_sequence
Measurement Units Code Sequence (0040,08EA)
constexpr core::dicom_tag device_serial_number
Device Serial Number (0018,1000)
constexpr core::dicom_tag software_versions
Software Versions (0018,1020)
constexpr core::dicom_tag real_world_value_intercept
Real World Value Intercept (0040,9224)
constexpr core::dicom_tag number_of_frames
Number of Frames (0028,0008)
constexpr core::dicom_tag per_frame_functional_groups_sequence
Per-Frame Functional Groups Sequence (5200,9230)
constexpr core::dicom_tag shared_functional_groups_sequence
Shared Functional Groups Sequence (5200,9229)
constexpr core::dicom_tag content_description
Content Description (0070,0081) — Type 2.
constexpr core::dicom_tag manufacturer
Manufacturer (0008,0070)
constexpr core::dicom_tag real_world_value_mapping_sequence
Real World Value Mapping Sequence (0040,9096)
constexpr core::dicom_tag real_world_value_slope
Real World Value Slope (0040,9225)
constexpr core::dicom_tag content_label
Content Label (0070,0080) — Type 1.
constexpr core::dicom_tag float_pixel_data
Float Pixel Data (7FE0,0008)
constexpr core::dicom_tag dimension_organization_sequence
Dimension Organization Sequence (0020,9221)
bool is_valid_parametric_map_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid Parametric Map object.
validation_result validate_parametric_map_iod(const core::dicom_dataset &dataset)
Validate a Parametric Map dataset with default options.
bool validate_rwvm
Validate Real World Value Mapping Sequence.
bool validate_pixel_data
Validate pixel data consistency (bits, photometric, float constraints)
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool check_type2
Check Type 2 (required, can be empty) attributes.
std::string_view name
Ultrasound Image IOD Validator.