PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
ophthalmic_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
24#ifndef PACS_SERVICES_VALIDATION_OPHTHALMIC_IOD_VALIDATOR_HPP
25#define PACS_SERVICES_VALIDATION_OPHTHALMIC_IOD_VALIDATOR_HPP
26
29#include "kcenon/pacs/services/validation/us_iod_validator.h" // Reuse validation types
30
31#include <string>
32#include <vector>
33
35
36// =============================================================================
37// Ophthalmic-Specific DICOM Tags for Validation
38// =============================================================================
39
40namespace ophthalmic_iod_tags {
41
43inline constexpr core::dicom_tag image_laterality{0x0020, 0x0062};
44
46inline constexpr core::dicom_tag anatomic_region_sequence{0x0008, 0x2218};
47
50 0x0015};
51
53inline constexpr core::dicom_tag pupil_dilated{0x0022, 0x000D};
54
56inline constexpr core::dicom_tag axial_length_of_eye{0x0022, 0x0030};
57
59inline constexpr core::dicom_tag horizontal_field_of_view{0x0022, 0x000C};
60
62inline constexpr core::dicom_tag detector_type{0x0018, 0x7004};
63
65inline constexpr core::dicom_tag number_of_frames{0x0028, 0x0008};
66
68inline constexpr core::dicom_tag acquisition_context_sequence{0x0040, 0x0555};
69
70} // namespace ophthalmic_iod_tags
71
72// =============================================================================
73// Ophthalmic Validation Options
74// =============================================================================
75
81 bool check_type1 = true;
82
84 bool check_type2 = true;
85
87 bool check_conditional = true;
88
91
94
97
99 bool strict_mode = false;
100};
101
102// =============================================================================
103// Ophthalmic IOD Validator
104// =============================================================================
105
139public:
144
150 const ophthalmic_validation_options& options);
151
157 [[nodiscard]] validation_result validate(
158 const core::dicom_dataset& dataset) const;
159
165 [[nodiscard]] bool quick_check(
166 const core::dicom_dataset& dataset) const;
167
171 [[nodiscard]] const ophthalmic_validation_options& options() const noexcept;
172
176 void set_options(const ophthalmic_validation_options& options);
177
178private:
179 // Module validation methods
181 const core::dicom_dataset& dataset,
182 std::vector<validation_finding>& findings) const;
183
185 const core::dicom_dataset& dataset,
186 std::vector<validation_finding>& findings) const;
187
189 const core::dicom_dataset& dataset,
190 std::vector<validation_finding>& findings) const;
191
193 const core::dicom_dataset& dataset,
194 std::vector<validation_finding>& findings) const;
195
197 const core::dicom_dataset& dataset,
198 std::vector<validation_finding>& findings) const;
199
201 const core::dicom_dataset& dataset,
202 std::vector<validation_finding>& findings) const;
203
205 const core::dicom_dataset& dataset,
206 std::vector<validation_finding>& findings) const;
207
209 const core::dicom_dataset& dataset,
210 std::vector<validation_finding>& findings) const;
211
212 // Attribute validation helpers
214 const core::dicom_dataset& dataset,
215 core::dicom_tag tag,
216 std::string_view name,
217 std::vector<validation_finding>& findings) const;
218
220 const core::dicom_dataset& dataset,
221 core::dicom_tag tag,
222 std::string_view name,
223 std::vector<validation_finding>& findings) const;
224
225 void check_modality(
226 const core::dicom_dataset& dataset,
227 std::vector<validation_finding>& findings) const;
228
229 void check_laterality(
230 const core::dicom_dataset& dataset,
231 std::vector<validation_finding>& findings) const;
232
234 const core::dicom_dataset& dataset,
235 std::vector<validation_finding>& findings) const;
236
238};
239
240// =============================================================================
241// Convenience Functions
242// =============================================================================
243
250 const core::dicom_dataset& dataset);
251
257[[nodiscard]] bool is_valid_ophthalmic_dataset(
258 const core::dicom_dataset& dataset);
259
260} // namespace kcenon::pacs::services::validation
261
262#endif // PACS_SERVICES_VALIDATION_OPHTHALMIC_IOD_VALIDATOR_HPP
void validate_acquisition_context_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_ophthalmic_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 validate_image_pixel_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
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required ophthalmic attributes.
void set_options(const ophthalmic_validation_options &options)
Set validation options.
void check_pixel_data_consistency(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 ophthalmic_validation_options & options() const noexcept
Get the validation options.
void validate_multiframe_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_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
void check_laterality(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 Ophthalmic IOD.
void validate_general_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
ophthalmic_iod_validator()=default
Construct validator with default options.
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
constexpr core::dicom_tag axial_length_of_eye
Axial Length of the Eye (0022,0030)
constexpr core::dicom_tag detector_type
Detector Type (0018,7004)
constexpr core::dicom_tag anatomic_region_sequence
Anatomic Region Sequence (0008,2218)
constexpr core::dicom_tag image_laterality
Image Laterality (0020,0062) — R, L, or B.
constexpr core::dicom_tag number_of_frames
Number of Frames (0028,0008)
constexpr core::dicom_tag pupil_dilated
Pupil Dilated (0022,000D)
constexpr core::dicom_tag acquisition_device_type_code_sequence
Acquisition Device Type Code Sequence (0022,0015)
constexpr core::dicom_tag acquisition_context_sequence
Acquisition Context Sequence (0040,0555)
constexpr core::dicom_tag horizontal_field_of_view
Horizontal Field of View (0022,000C)
validation_result validate_ophthalmic_iod(const core::dicom_dataset &dataset)
Validate an ophthalmic dataset with default options.
bool is_valid_ophthalmic_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid ophthalmic image.
bool validate_ophthalmic_params
Validate ophthalmic-specific image parameters.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool validate_pixel_data
Validate pixel data consistency (rows, columns, bits)
bool check_type2
Check Type 2 (required, can be empty) attributes.
std::string_view name
Ultrasound Image IOD Validator.