PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
mr_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_MR_IOD_VALIDATOR_HPP
24#define PACS_SERVICES_VALIDATION_MR_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// MR-Specific DICOM Tags (not in core tag constants)
37// =============================================================================
38
39namespace mr_tags {
40
43inline constexpr core::dicom_tag scanning_sequence{0x0018, 0x0020};
44
47inline constexpr core::dicom_tag sequence_variant{0x0018, 0x0021};
48
51inline constexpr core::dicom_tag scan_options{0x0018, 0x0022};
52
55inline constexpr core::dicom_tag mr_acquisition_type{0x0018, 0x0023};
56
59inline constexpr core::dicom_tag repetition_time{0x0018, 0x0080};
60
63inline constexpr core::dicom_tag echo_time{0x0018, 0x0081};
64
67inline constexpr core::dicom_tag echo_train_length{0x0018, 0x0091};
68
71inline constexpr core::dicom_tag inversion_time{0x0018, 0x0082};
72
75inline constexpr core::dicom_tag magnetic_field_strength{0x0018, 0x0087};
76
79inline constexpr core::dicom_tag spacing_between_slices{0x0018, 0x0088};
80
82inline constexpr core::dicom_tag number_of_phase_encoding_steps{0x0018, 0x0089};
83
85inline constexpr core::dicom_tag percent_sampling{0x0018, 0x0093};
86
88inline constexpr core::dicom_tag percent_phase_fov{0x0018, 0x0094};
89
91inline constexpr core::dicom_tag pixel_bandwidth{0x0018, 0x0095};
92
95inline constexpr core::dicom_tag flip_angle{0x0018, 0x1314};
96
98inline constexpr core::dicom_tag sar{0x0018, 0x1316};
99
101inline constexpr core::dicom_tag slice_thickness{0x0018, 0x0050};
102
104inline constexpr core::dicom_tag image_position_patient{0x0020, 0x0032};
105
107inline constexpr core::dicom_tag image_orientation_patient{0x0020, 0x0037};
108
109} // namespace mr_tags
110
111// =============================================================================
112// MR Validation Options
113// =============================================================================
114
120 bool check_type1 = true;
121
123 bool check_type2 = true;
124
126 bool check_conditional = true;
127
130
133
135 bool strict_mode = false;
136};
137
138// =============================================================================
139// MR IOD Validator
140// =============================================================================
141
174public:
178 mr_iod_validator() = default;
179
184 explicit mr_iod_validator(const mr_validation_options& options);
185
191 [[nodiscard]] validation_result validate(
192 const core::dicom_dataset& dataset) const;
193
199 [[nodiscard]] bool quick_check(
200 const core::dicom_dataset& dataset) const;
201
205 [[nodiscard]] const mr_validation_options& options() const noexcept;
206
210 void set_options(const mr_validation_options& options);
211
212private:
213 // Module validation methods
215 const core::dicom_dataset& dataset,
216 std::vector<validation_finding>& findings) const;
217
219 const core::dicom_dataset& dataset,
220 std::vector<validation_finding>& findings) const;
221
223 const core::dicom_dataset& dataset,
224 std::vector<validation_finding>& findings) const;
225
227 const core::dicom_dataset& dataset,
228 std::vector<validation_finding>& findings) const;
229
231 const core::dicom_dataset& dataset,
232 std::vector<validation_finding>& findings) const;
233
235 const core::dicom_dataset& dataset,
236 std::vector<validation_finding>& findings) const;
237
239 const core::dicom_dataset& dataset,
240 std::vector<validation_finding>& findings) const;
241
243 const core::dicom_dataset& dataset,
244 std::vector<validation_finding>& findings) const;
245
246 // Attribute validation helpers
248 const core::dicom_dataset& dataset,
249 core::dicom_tag tag,
250 std::string_view name,
251 std::vector<validation_finding>& findings) const;
252
254 const core::dicom_dataset& dataset,
255 core::dicom_tag tag,
256 std::string_view name,
257 std::vector<validation_finding>& findings) const;
258
259 void check_modality(
260 const core::dicom_dataset& dataset,
261 std::vector<validation_finding>& findings) const;
262
264 const core::dicom_dataset& dataset,
265 std::vector<validation_finding>& findings) const;
266
268};
269
270// =============================================================================
271// Convenience Functions
272// =============================================================================
273
280 const core::dicom_dataset& dataset);
281
287[[nodiscard]] bool is_valid_mr_dataset(const core::dicom_dataset& dataset);
288
289} // namespace kcenon::pacs::services::validation
290
291#endif // PACS_SERVICES_VALIDATION_MR_IOD_VALIDATOR_HPP
void check_modality(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
mr_iod_validator()=default
Construct validator with default options.
void set_options(const mr_validation_options &options)
Set validation options.
void check_pixel_data_consistency(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
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required MR attributes.
void validate_patient_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_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_mr_image_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 MR IOD.
void validate_general_study_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 validate_frame_of_reference_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
const mr_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 echo_time
Echo Time (0018,0081) - Type 2 Time in ms between the middle of the excitation pulse and peak of echo...
constexpr core::dicom_tag slice_thickness
Slice Thickness (0018,0050) - Type 2.
constexpr core::dicom_tag mr_acquisition_type
MR Acquisition Type (0018,0023) - Type 2 Identifies the spatial data encoding scheme: 2D or 3D.
constexpr core::dicom_tag magnetic_field_strength
Magnetic Field Strength (0018,0087) - Type 2 Nominal field strength of MR magnet in Tesla.
constexpr core::dicom_tag percent_sampling
Percent Sampling (0018,0093) - Type 2.
constexpr core::dicom_tag echo_train_length
Echo Train Length (0018,0091) - Type 2 Number of echoes in a multi-echo acquisition.
constexpr core::dicom_tag repetition_time
Repetition Time (0018,0080) - Type 2C Time in ms between successive pulse sequences.
constexpr core::dicom_tag inversion_time
Inversion Time (0018,0082) - Type 2C Time in ms between the inversion and excitation pulses.
constexpr core::dicom_tag number_of_phase_encoding_steps
Number of Phase Encoding Steps (0018,0089) - Type 2.
constexpr core::dicom_tag flip_angle
Flip Angle (0018,1314) - Type 2 Steady state angle in degrees.
constexpr core::dicom_tag scan_options
Scan Options (0018,0022) - Type 2 Additional scan parameters: PER, RG, CG, PPG, FC,...
constexpr core::dicom_tag percent_phase_fov
Percent Phase Field of View (0018,0094) - Type 2.
constexpr core::dicom_tag image_position_patient
Image Position (Patient) (0020,0032)
constexpr core::dicom_tag pixel_bandwidth
Pixel Bandwidth (0018,0095) - Type 2.
constexpr core::dicom_tag sar
SAR (Specific Absorption Rate) (0018,1316) - Type 2.
constexpr core::dicom_tag spacing_between_slices
Spacing Between Slices (0018,0088) - Type 2 Distance between adjacent slices in mm.
constexpr core::dicom_tag sequence_variant
Sequence Variant (0018,0021) - Type 1 Variant of the scanning sequence: SK, MTC, SS,...
constexpr core::dicom_tag scanning_sequence
Scanning Sequence (0018,0020) - Type 1 Identifies the type of MR data acquisition sequence: SE,...
constexpr core::dicom_tag image_orientation_patient
Image Orientation (Patient) (0020,0037)
bool is_valid_mr_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid MR image.
validation_result validate_mr_iod(const core::dicom_dataset &dataset)
Validate an MR dataset with default options.
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 strict_mode
Strict mode - treat warnings as errors.
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_mr_params
Validate MR-specific acquisition parameters.
std::string_view name
Ultrasound Image IOD Validator.