PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
ct_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
22#ifndef PACS_SERVICES_VALIDATION_CT_IOD_VALIDATOR_HPP
23#define PACS_SERVICES_VALIDATION_CT_IOD_VALIDATOR_HPP
24
27#include "kcenon/pacs/services/validation/us_iod_validator.h" // Reuse validation types
28
29#include <string>
30#include <vector>
31
33
34// =============================================================================
35// CT-Specific DICOM Tags (not in core tag constants)
36// =============================================================================
37
38namespace ct_tags {
39
41inline constexpr core::dicom_tag kvp{0x0018, 0x0060};
42
44inline constexpr core::dicom_tag slice_thickness{0x0018, 0x0050};
45
47inline constexpr core::dicom_tag gantry_detector_tilt{0x0018, 0x1120};
48
50inline constexpr core::dicom_tag table_height{0x0018, 0x1130};
51
53inline constexpr core::dicom_tag rotation_direction{0x0018, 0x1140};
54
56inline constexpr core::dicom_tag exposure_time{0x0018, 0x1150};
57
59inline constexpr core::dicom_tag xray_tube_current{0x0018, 0x1151};
60
62inline constexpr core::dicom_tag exposure{0x0018, 0x1152};
63
65inline constexpr core::dicom_tag filter_type{0x0018, 0x1160};
66
68inline constexpr core::dicom_tag generator_power{0x0018, 0x1170};
69
71inline constexpr core::dicom_tag focal_spots{0x0018, 0x1190};
72
74inline constexpr core::dicom_tag convolution_kernel{0x0018, 0x1210};
75
77inline constexpr core::dicom_tag reconstruction_diameter{0x0018, 0x1100};
78
80inline constexpr core::dicom_tag data_collection_diameter{0x0018, 0x0090};
81
83inline constexpr core::dicom_tag patient_position{0x0018, 0x5100};
84
86inline constexpr core::dicom_tag image_position_patient{0x0020, 0x0032};
87
89inline constexpr core::dicom_tag image_orientation_patient{0x0020, 0x0037};
90
92inline constexpr core::dicom_tag slice_location{0x0020, 0x1041};
93
94} // namespace ct_tags
95
96// =============================================================================
97// CT Validation Options
98// =============================================================================
99
105 bool check_type1 = true;
106
108 bool check_type2 = true;
109
111 bool check_conditional = true;
112
115
118
120 bool strict_mode = false;
121};
122
123// =============================================================================
124// CT IOD Validator
125// =============================================================================
126
159public:
163 ct_iod_validator() = default;
164
169 explicit ct_iod_validator(const ct_validation_options& options);
170
176 [[nodiscard]] validation_result validate(
177 const core::dicom_dataset& dataset) const;
178
184 [[nodiscard]] bool quick_check(
185 const core::dicom_dataset& dataset) const;
186
190 [[nodiscard]] const ct_validation_options& options() const noexcept;
191
195 void set_options(const ct_validation_options& options);
196
197private:
198 // Module validation methods
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
224 const core::dicom_dataset& dataset,
225 std::vector<validation_finding>& findings) const;
226
228 const core::dicom_dataset& dataset,
229 std::vector<validation_finding>& findings) const;
230
231 // Attribute validation helpers
233 const core::dicom_dataset& dataset,
234 core::dicom_tag tag,
235 std::string_view name,
236 std::vector<validation_finding>& findings) const;
237
239 const core::dicom_dataset& dataset,
240 core::dicom_tag tag,
241 std::string_view name,
242 std::vector<validation_finding>& findings) const;
243
244 void check_modality(
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};
254
255// =============================================================================
256// Convenience Functions
257// =============================================================================
258
265 const core::dicom_dataset& dataset);
266
272[[nodiscard]] bool is_valid_ct_dataset(const core::dicom_dataset& dataset);
273
274} // namespace kcenon::pacs::services::validation
275
276#endif // PACS_SERVICES_VALIDATION_CT_IOD_VALIDATOR_HPP
void validate_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
const ct_validation_options & options() const noexcept
Get the validation options.
void validate_ct_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
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against CT IOD.
void validate_patient_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
ct_iod_validator()=default
Construct validator with default options.
void check_modality(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void set_options(const ct_validation_options &options)
Set validation options.
void validate_general_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_frame_of_reference_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 check_type1_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required CT attributes.
void validate_sop_common_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
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
constexpr core::dicom_tag exposure_time
Exposure Time (0018,1150) - Duration of X-Ray exposure in ms.
constexpr core::dicom_tag data_collection_diameter
Data Collection Diameter (0018,0090) - in mm.
constexpr core::dicom_tag gantry_detector_tilt
Gantry/Detector Tilt (0018,1120) - Gantry tilt in degrees.
constexpr core::dicom_tag rotation_direction
Rotation Direction (0018,1140) - Direction of rotation (CW/CC)
constexpr core::dicom_tag exposure
Exposure (0018,1152) - in mAs (milliampere seconds)
constexpr core::dicom_tag filter_type
Filter Type (0018,1160) - Type of filter inserted into X-Ray beam.
constexpr core::dicom_tag patient_position
Patient Position (0018,5100)
constexpr core::dicom_tag reconstruction_diameter
Reconstruction Diameter (0018,1100) - Diameter of reconstruction in mm.
constexpr core::dicom_tag table_height
Table Height (0018,1130) - Table height in mm.
constexpr core::dicom_tag focal_spots
Focal Spots (0018,1190) - Size of the focal spot in mm.
constexpr core::dicom_tag slice_location
Slice Location (0020,1041)
constexpr core::dicom_tag xray_tube_current
X-Ray Tube Current (0018,1151) - in mA.
constexpr core::dicom_tag image_position_patient
Image Position (Patient) (0020,0032)
constexpr core::dicom_tag convolution_kernel
Convolution Kernel (0018,1210) - Reconstruction algorithm.
constexpr core::dicom_tag slice_thickness
Slice Thickness (0018,0050) - Nominal slice thickness in mm.
constexpr core::dicom_tag kvp
KVP (0018,0060) - Peak kilo voltage output of the X-Ray generator.
constexpr core::dicom_tag generator_power
Generator Power (0018,1170) - Power in kW applied to generator.
constexpr core::dicom_tag image_orientation_patient
Image Orientation (Patient) (0020,0037)
validation_result validate_ct_iod(const core::dicom_dataset &dataset)
Validate a CT dataset with default options.
bool is_valid_ct_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid CT image.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool check_type1
Check Type 1 (required) attributes.
bool validate_pixel_data
Validate pixel data consistency (rows, columns, bits)
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_ct_params
Validate CT-specific acquisition parameters.
bool strict_mode
Strict mode - treat warnings as errors.
std::string_view name
Ultrasound Image IOD Validator.