PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
wsi_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_WSI_IOD_VALIDATOR_HPP
24#define PACS_SERVICES_VALIDATION_WSI_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// WSI-Specific DICOM Tags for Validation
37// =============================================================================
38
39namespace wsi_iod_tags {
40
42inline constexpr core::dicom_tag total_pixel_matrix_columns{0x0048, 0x0006};
43
45inline constexpr core::dicom_tag total_pixel_matrix_rows{0x0048, 0x0007};
46
48inline constexpr core::dicom_tag total_pixel_matrix_focal_planes{0x0048, 0x0008};
49
51inline constexpr core::dicom_tag image_orientation_slide{0x0048, 0x0102};
52
54inline constexpr core::dicom_tag dimension_organization_type{0x0020, 0x9311};
55
57inline constexpr core::dicom_tag number_of_frames{0x0028, 0x0008};
58
60inline constexpr core::dicom_tag imaged_volume_width{0x0048, 0x0001};
61
63inline constexpr core::dicom_tag imaged_volume_height{0x0048, 0x0002};
64
66inline constexpr core::dicom_tag optical_path_identifier{0x0048, 0x0105};
67
69inline constexpr core::dicom_tag optical_path_description{0x0048, 0x0106};
70
72inline constexpr core::dicom_tag specimen_identifier{0x0040, 0x0551};
73
75inline constexpr core::dicom_tag container_identifier{0x0040, 0x0512};
76
77} // namespace wsi_iod_tags
78
79// =============================================================================
80// WSI Validation Options
81// =============================================================================
82
88 bool check_type1 = true;
89
91 bool check_type2 = true;
92
94 bool check_conditional = true;
95
98
101
104
106 bool strict_mode = false;
107};
108
109// =============================================================================
110// WSI IOD Validator
111// =============================================================================
112
147public:
151 wsi_iod_validator() = default;
152
157 explicit wsi_iod_validator(const wsi_validation_options& options);
158
164 [[nodiscard]] validation_result validate(
165 const core::dicom_dataset& dataset) const;
166
172 [[nodiscard]] bool quick_check(
173 const core::dicom_dataset& dataset) const;
174
178 [[nodiscard]] const wsi_validation_options& options() const noexcept;
179
183 void set_options(const wsi_validation_options& options);
184
185private:
186 // Module validation methods
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
216 const core::dicom_dataset& dataset,
217 std::vector<validation_finding>& findings) const;
218
220 const core::dicom_dataset& dataset,
221 std::vector<validation_finding>& findings) const;
222
223 // Attribute validation helpers
225 const core::dicom_dataset& dataset,
226 core::dicom_tag tag,
227 std::string_view name,
228 std::vector<validation_finding>& findings) const;
229
231 const core::dicom_dataset& dataset,
232 core::dicom_tag tag,
233 std::string_view name,
234 std::vector<validation_finding>& findings) const;
235
236 void check_modality(
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};
246
247// =============================================================================
248// Convenience Functions
249// =============================================================================
250
257 const core::dicom_dataset& dataset);
258
264[[nodiscard]] bool is_valid_wsi_dataset(const core::dicom_dataset& dataset);
265
266} // namespace kcenon::pacs::services::validation
267
268#endif // PACS_SERVICES_VALIDATION_WSI_IOD_VALIDATOR_HPP
void validate_general_series_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_sop_common_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_optical_path_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_specimen_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
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required WSI attributes.
wsi_iod_validator()=default
Construct validator with default options.
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_modality(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const wsi_validation_options &options)
Set validation options.
void validate_wsi_image_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
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against WSI IOD.
void validate_general_study_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
const wsi_validation_options & options() const noexcept
Get the validation options.
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
constexpr core::dicom_tag imaged_volume_width
Imaged Volume Width (0048,0001) — physical width in mm.
constexpr core::dicom_tag total_pixel_matrix_columns
Total Pixel Matrix Columns (0048,0006)
constexpr core::dicom_tag image_orientation_slide
Image Orientation (Slide) (0048,0102)
constexpr core::dicom_tag optical_path_description
Optical Path Description (0048,0106)
constexpr core::dicom_tag number_of_frames
Number of Frames (0028,0008)
constexpr core::dicom_tag total_pixel_matrix_focal_planes
Total Pixel Matrix Focal Planes (0048,0008)
constexpr core::dicom_tag dimension_organization_type
Dimension Organization Type (0020,9311)
constexpr core::dicom_tag total_pixel_matrix_rows
Total Pixel Matrix Rows (0048,0007)
constexpr core::dicom_tag container_identifier
Container Identifier (0040,0512)
constexpr core::dicom_tag optical_path_identifier
Optical Path Identifier (0048,0105)
constexpr core::dicom_tag specimen_identifier
Specimen Identifier (0040,0551)
constexpr core::dicom_tag imaged_volume_height
Imaged Volume Height (0048,0002) — physical height in mm.
bool is_valid_wsi_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid WSI image.
validation_result validate_wsi_iod(const core::dicom_dataset &dataset)
Validate a WSI dataset with default options.
bool strict_mode
Strict mode - treat warnings as errors.
bool validate_pixel_data
Validate pixel data consistency (rows, columns, bits)
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 validate_optical_path
Validate optical path information.
bool validate_wsi_params
Validate WSI-specific image parameters.
std::string_view name
Ultrasound Image IOD Validator.