25 "1.2.840.10008.1.2.1",
29 "1.2.840.10008.1.2.4.201",
31 "1.2.840.10008.1.2.4.70",
53 if (value ==
"MONOCHROME1") {
61 return value ==
"MONOCHROME1" || value ==
"MONOCHROME2";
71constexpr std::array<xa_sop_class_info, 5> xa_sop_classes = {{
75 "Standard X-Ray Angiographic images (single/multi-frame)",
82 "Enhanced XA Image Storage",
83 "Enhanced X-Ray Angiographic IOD with extended attributes",
91 "X-Ray Radiofluoroscopic images for fluoroscopy procedures",
98 "X-Ray 3D Angiographic Image Storage",
99 "3D rotational angiography reconstructions",
106 "X-Ray 3D Craniofacial Image Storage",
107 "3D craniofacial imaging (cone beam CT)",
117 std::vector<std::string> result;
118 result.reserve(include_3d ? 5 : 3);
120 for (
const auto& info : xa_sop_classes) {
121 if (!info.is_3d || include_3d) {
122 result.emplace_back(info.uid);
129const xa_sop_class_info*
131 auto it = std::find_if(
132 xa_sop_classes.begin(),
133 xa_sop_classes.end(),
134 [
uid](
const auto& info) { return info.uid == uid; }
137 if (it != xa_sop_classes.end()) {
149 return info !=
nullptr && info->supports_multiframe;
154 return info !=
nullptr && info->is_enhanced;
159 return info !=
nullptr && info->is_3d;
std::vector< std::string > get_xa_transfer_syntaxes()
Get recommended transfer syntaxes for XA images.
xa_photometric_interpretation
Supported photometric interpretations for XA/XRF images.
@ monochrome2
Minimum pixel = black.
@ monochrome1
Minimum pixel = white (traditional X-ray view)
constexpr std::string_view enhanced_xa_image_storage_uid
Enhanced XA Image Storage SOP Class UID (enhanced IOD)
bool is_xa_multiframe_sop_class(std::string_view uid) noexcept
Check if a SOP Class UID is a multi-frame XA Storage SOP Class.
std::vector< std::string > get_xa_storage_sop_classes(bool include_3d=true)
Get all XA/XRF Storage SOP Class UIDs.
bool is_enhanced_xa_sop_class(std::string_view uid) noexcept
Check if a SOP Class UID is an enhanced XA SOP Class.
constexpr std::string_view xrf_image_storage_uid
XRF Image Storage SOP Class UID (X-Ray Radiofluoroscopic)
bool is_valid_xa_photometric(std::string_view value) noexcept
Check if photometric interpretation is valid for XA.
constexpr std::string_view xray_3d_craniofacial_image_storage_uid
X-Ray 3D Craniofacial Image Storage SOP Class UID.
constexpr std::string_view xray_3d_angiographic_image_storage_uid
X-Ray 3D Angiographic Image Storage SOP Class UID (3D rotational)
const xa_sop_class_info * get_xa_sop_class_info(std::string_view uid) noexcept
Get information about a specific XA SOP Class.
bool is_xa_storage_sop_class(std::string_view uid) noexcept
Check if a SOP Class UID is an XA/XRF Storage SOP Class.
constexpr std::string_view xa_image_storage_uid
XA Image Storage SOP Class UID (single/multi-frame)
xa_positioner_motion
Positioner motion type.
@ stationary
No movement during acquisition.
@ dynamic
Positioner moves during acquisition (e.g., rotational)
xa_photometric_interpretation parse_xa_photometric_interpretation(std::string_view value) noexcept
Parse DICOM photometric interpretation string for XA.
bool is_xa_3d_sop_class(std::string_view uid) noexcept
Check if a SOP Class UID is a 3D XA SOP Class.
std::string_view to_string(dx_photometric_interpretation interp) noexcept
Convert photometric interpretation enum to DICOM string.
bool is_valid() const noexcept
Check if calibration data is valid for measurements.
double magnification_factor() const noexcept
Calculate magnification factor.
double imager_pixel_spacing[2]
Pixel spacing at detector (mm)
double isocenter_pixel_spacing() const noexcept
Calculate pixel spacing at isocenter.
double distance_source_to_patient
SOD in mm.
double distance_source_to_detector
SID in mm.
bool is_valid() const noexcept
Check if angles are within valid range.
double primary_angle
LAO/RAO angle in degrees.
double secondary_angle
Cranial/Caudal angle in degrees.
X-Ray Angiographic (XA) Image Storage SOP Classes.