PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
nm_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_NM_IOD_VALIDATOR_HPP
19#define PACS_SERVICES_VALIDATION_NM_IOD_VALIDATOR_HPP
20
23#include "kcenon/pacs/services/validation/us_iod_validator.h" // For shared validation types
24
25#include <optional>
26#include <string>
27#include <vector>
28
30
31// =============================================================================
32// NM 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
58 bool validate_isotope = true;
59
61 bool allow_retired = true;
62
64 bool strict_mode = false;
65};
66
67// =============================================================================
68// NM IOD Validator
69// =============================================================================
70
114public:
118 nm_iod_validator() = default;
119
124 explicit nm_iod_validator(const nm_validation_options& options);
125
132 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
133
142 [[nodiscard]] validation_result
143 validate_multiframe(const core::dicom_dataset& dataset) const;
144
153 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
154
158 [[nodiscard]] const nm_validation_options& options() const noexcept;
159
163 void set_options(const nm_validation_options& options);
164
165private:
166 // Module validation methods
168 const core::dicom_dataset& dataset,
169 std::vector<validation_finding>& findings) const;
170
172 const core::dicom_dataset& dataset,
173 std::vector<validation_finding>& findings) const;
174
176 const core::dicom_dataset& dataset,
177 std::vector<validation_finding>& findings) const;
178
180 const core::dicom_dataset& dataset,
181 std::vector<validation_finding>& findings) const;
182
184 const core::dicom_dataset& dataset,
185 std::vector<validation_finding>& findings) const;
186
188 const core::dicom_dataset& dataset,
189 std::vector<validation_finding>& findings) const;
190
192 const core::dicom_dataset& dataset,
193 std::vector<validation_finding>& findings) const;
194
196 const core::dicom_dataset& dataset,
197 std::vector<validation_finding>& findings) const;
198
200 const core::dicom_dataset& dataset,
201 std::vector<validation_finding>& findings) const;
202
204 const core::dicom_dataset& dataset,
205 std::vector<validation_finding>& findings) const;
206
208 const core::dicom_dataset& dataset,
209 std::vector<validation_finding>& findings) const;
210
212 const core::dicom_dataset& dataset,
213 std::vector<validation_finding>& findings) const;
214
215 // NM-specific validation
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
224 // Attribute validation helpers
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_modality(
238 const core::dicom_dataset& dataset,
239 std::vector<validation_finding>& findings) const;
240
242 const core::dicom_dataset& dataset,
243 std::vector<validation_finding>& findings) const;
244
246};
247
248// =============================================================================
249// Convenience Functions
250// =============================================================================
251
258[[nodiscard]] validation_result validate_nm_iod(const core::dicom_dataset& dataset);
259
266[[nodiscard]] bool is_valid_nm_dataset(const core::dicom_dataset& dataset);
267
268} // namespace kcenon::pacs::services::validation
269
270#endif // PACS_SERVICES_VALIDATION_NM_IOD_VALIDATOR_HPP
void validate_energy_window_info(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
validation_result validate_multiframe(const core::dicom_dataset &dataset) const
Validate a multi-frame NM dataset.
void check_pixel_data_consistency(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
nm_iod_validator()=default
Construct validator with default options.
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against NM IOD.
void validate_general_study_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const nm_validation_options &options)
Set validation options.
void validate_multiframe_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_nm_isotope_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_nm_tomo_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_nm_gated_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_nm_detector_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
const nm_validation_options & options() const noexcept
Get the validation options.
void validate_patient_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_nm_series_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_image_pixel_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
void validate_nm_image_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_radiopharmaceutical_info(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
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
bool is_valid_nm_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid NM image.
validation_result validate_nm_iod(const core::dicom_dataset &dataset)
Validate a NM dataset with default options.
bool validate_pixel_data
Validate pixel data consistency (rows, columns, bits)
bool validate_energy_windows
Validate energy window information.
bool validate_nm_specific
Validate NM-specific attributes (detector, collimator, etc.)
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool check_type1
Check Type 1 (required) attributes.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool strict_mode
Strict mode - treat warnings as errors.
std::string_view name
Ultrasound Image IOD Validator.