/************************************************************************
 *
 * Copyright (C) 2023 IRCAD France
 *
 * This file is part of Sight.
 *
 * Sight is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Sight is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Sight. If not, see <https://www.gnu.org/licenses/>.
 *
 ***********************************************************************/

// This file was automatically generated by the '/libs/core/data/dicom/class_generator.py' script. DO NOT EDIT !
// Used arguments: 'Namespace(verbose=False, source_url='http://dicom.nema.org/medical/dicom/current/source/docbook',
// sop_list=None, mandatory_tags=[Tag(group='7FE0', element='0010'), Tag(group='0062', element='0002'),
// Tag(group='0066', element='0002'), Tag(group='0066', element='0011'), Tag(group='0070', element='031C')])'

#include "data/dicom/sop.hpp"

#include <core/exceptionmacros.hpp>

#include <unordered_map>

// cspell: ignore Wundefined afterloader angio autorefraction autosequence boli bscan cadsr ciexy ctdi ctdivol decf
// cspell: ignore deidentification dermoscopic diconde dicos dvhroi exif fiducials fluence fnumber frameof gpsdop hicpp
// cspell: ignore hpgl imager inms inua inus iods isop ivol ivus keratoconus keratometer keratometric kerma lensometry
// cspell: ignore lookat meterset metersets mrfov multiway nmpet nmtomo nolintbegin nolintend octb octz oecf olink
// cspell: ignore postamble powerline prcs presaturation radiofluoroscopic relaxivity reprojection rgblut rtdvh rtroi
// cspell: ignore sddn sdhn sdvn softcopy soundpath stereometric stowrs tlhc tomo tomosynthesis tomotherapeutic toric
// cspell: ignore tractography xaxrf

// NOLINTBEGIN

namespace sight::data::dicom::sop
{

//------------------------------------------------------------------------------

template<Keyword keyword>
inline static const Sop<keyword>& get()
{
    static constexpr Sop<keyword> instance;
    return instance;
}

//------------------------------------------------------------------------------

template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ComputedRadiographyImageStorage>::s_keyword =
    Keyword::ComputedRadiographyImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComputedRadiographyImageStorage>::s_name =
    "Computed Radiography Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComputedRadiographyImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComputedRadiographyImageStorage>::s_iod = "Computed Radiography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalXRayImageStorageForPresentation>::s_keyword =
    Keyword::DigitalXRayImageStorageForPresentation;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForPresentation>::s_name =
    "Digital X-Ray Image Storage - For Presentation";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForPresentation>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForPresentation>::s_iod = "Digital X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalXRayImageStorageForProcessing>::s_keyword =
    Keyword::DigitalXRayImageStorageForProcessing;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForProcessing>::s_name =
    "Digital X-Ray Image Storage - For Processing";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForProcessing>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalXRayImageStorageForProcessing>::s_iod = "Digital X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalMammographyXRayImageStorageForPresentation>::s_keyword =
    Keyword::DigitalMammographyXRayImageStorageForPresentation;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForPresentation>::s_name =
    "Digital Mammography X-Ray Image Storage - For Presentation";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForPresentation>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForPresentation>::s_iod =
    "Digital Mammography X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalMammographyXRayImageStorageForProcessing>::s_keyword =
    Keyword::DigitalMammographyXRayImageStorageForProcessing;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForProcessing>::s_name =
    "Digital Mammography X-Ray Image Storage - For Processing";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForProcessing>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.2.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalMammographyXRayImageStorageForProcessing>::s_iod =
    "Digital Mammography X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalIntraOralXRayImageStorageForPresentation>::s_keyword =
    Keyword::DigitalIntraOralXRayImageStorageForPresentation;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForPresentation>::s_name =
    "Digital Intra-Oral X-Ray Image Storage - For Presentation";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForPresentation>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForPresentation>::s_iod =
    "Digital Intra-Oral X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DigitalIntraOralXRayImageStorageForProcessing>::s_keyword =
    Keyword::DigitalIntraOralXRayImageStorageForProcessing;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForProcessing>::s_name =
    "Digital Intra-Oral X-Ray Image Storage - For Processing";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForProcessing>::s_uid =
    "1.2.840.10008.5.1.4.1.1.1.3.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DigitalIntraOralXRayImageStorageForProcessing>::s_iod =
    "Digital Intra-Oral X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EncapsulatedPDFStorage>::s_keyword = Keyword::EncapsulatedPDFStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedPDFStorage>::s_name = "Encapsulated PDF Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedPDFStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.104.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedPDFStorage>::s_iod = "Encapsulated PDF IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EncapsulatedCDAStorage>::s_keyword = Keyword::EncapsulatedCDAStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedCDAStorage>::s_name = "Encapsulated CDA Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedCDAStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.104.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedCDAStorage>::s_iod = "Encapsulated CDA IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EncapsulatedSTLStorage>::s_keyword = Keyword::EncapsulatedSTLStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedSTLStorage>::s_name = "Encapsulated STL Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedSTLStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.104.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedSTLStorage>::s_iod = "Encapsulated STL IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EncapsulatedOBJStorage>::s_keyword = Keyword::EncapsulatedOBJStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedOBJStorage>::s_name = "Encapsulated OBJ Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedOBJStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.104.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedOBJStorage>::s_iod = "Encapsulated OBJ IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EncapsulatedMTLStorage>::s_keyword = Keyword::EncapsulatedMTLStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedMTLStorage>::s_name = "Encapsulated MTL Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedMTLStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.104.5";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EncapsulatedMTLStorage>::s_iod = "Encapsulated MTL IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::XRayAngiographicImageStorage>::s_keyword = Keyword::XRayAngiographicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayAngiographicImageStorage>::s_name = "X-Ray Angiographic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayAngiographicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.12.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayAngiographicImageStorage>::s_iod = "X-Ray Angiographic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedXAImageStorage>::s_keyword = Keyword::EnhancedXAImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXAImageStorage>::s_name = "Enhanced XA Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXAImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.12.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXAImageStorage>::s_iod = "Enhanced XA Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::XRayRadiofluoroscopicImageStorage>::s_keyword =
    Keyword::XRayRadiofluoroscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiofluoroscopicImageStorage>::s_name =
    "X-Ray Radiofluoroscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiofluoroscopicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.12.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiofluoroscopicImageStorage>::s_iod =
    "X-Ray Radiofluoroscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedXRFImageStorage>::s_keyword = Keyword::EnhancedXRFImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRFImageStorage>::s_name = "Enhanced XRF Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRFImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.12.2.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRFImageStorage>::s_iod = "Enhanced XRF Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::PositronEmissionTomographyImageStorage>::s_keyword =
    Keyword::PositronEmissionTomographyImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PositronEmissionTomographyImageStorage>::s_name =
    "Positron Emission Tomography Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PositronEmissionTomographyImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.128";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PositronEmissionTomographyImageStorage>::s_iod =
    "Positron Emission Tomography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::LegacyConvertedEnhancedPETImageStorage>::s_keyword =
    Keyword::LegacyConvertedEnhancedPETImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedPETImageStorage>::s_name =
    "Legacy Converted Enhanced PET Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedPETImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.128.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedPETImageStorage>::s_iod =
    "Legacy Converted Enhanced PET Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::XRay3DAngiographicImageStorage>::s_keyword =
    Keyword::XRay3DAngiographicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DAngiographicImageStorage>::s_name =
    "X-Ray 3D Angiographic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DAngiographicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.13.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DAngiographicImageStorage>::s_iod = "X-Ray 3D Angiographic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::XRay3DCraniofacialImageStorage>::s_keyword =
    Keyword::XRay3DCraniofacialImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DCraniofacialImageStorage>::s_name =
    "X-Ray 3D Craniofacial Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DCraniofacialImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.13.1.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRay3DCraniofacialImageStorage>::s_iod = "X-Ray 3D Craniofacial Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::BreastTomosynthesisImageStorage>::s_keyword =
    Keyword::BreastTomosynthesisImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastTomosynthesisImageStorage>::s_name =
    "Breast Tomosynthesis Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastTomosynthesisImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.13.1.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastTomosynthesisImageStorage>::s_iod = "Breast Tomosynthesis Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::BreastProjectionXRayImageStorageForPresentation>::s_keyword =
    Keyword::BreastProjectionXRayImageStorageForPresentation;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForPresentation>::s_name =
    "Breast Projection X-Ray Image Storage - For Presentation";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForPresentation>::s_uid =
    "1.2.840.10008.5.1.4.1.1.13.1.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForPresentation>::s_iod =
    "Breast Projection X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::BreastProjectionXRayImageStorageForProcessing>::s_keyword =
    Keyword::BreastProjectionXRayImageStorageForProcessing;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForProcessing>::s_name =
    "Breast Projection X-Ray Image Storage - For Processing";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForProcessing>::s_uid =
    "1.2.840.10008.5.1.4.1.1.13.1.5";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BreastProjectionXRayImageStorageForProcessing>::s_iod =
    "Breast Projection X-Ray Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedPETImageStorage>::s_keyword = Keyword::EnhancedPETImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedPETImageStorage>::s_name = "Enhanced PET Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedPETImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.130";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedPETImageStorage>::s_iod = "Enhanced PET Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::BasicStructuredDisplayStorage>::s_keyword = Keyword::BasicStructuredDisplayStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicStructuredDisplayStorage>::s_name =
    "Basic Structured Display Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicStructuredDisplayStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.131";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicStructuredDisplayStorage>::s_iod = "Basic Structured Display IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>::s_keyword =
    Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>::s_name
    =
        "Intravascular Optical Coherence Tomography Image Storage - For Presentation";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>::s_uid
    =
        "1.2.840.10008.5.1.4.1.1.14.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>::s_iod
    =
        "Intravascular Optical Coherence Tomography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>::s_keyword =
    Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>::s_name =
    "Intravascular Optical Coherence Tomography Image Storage - For Processing";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>::s_uid =
    "1.2.840.10008.5.1.4.1.1.14.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>::s_iod =
    "Intravascular Optical Coherence Tomography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::CTImageStorage>::s_keyword = Keyword::CTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CTImageStorage>::s_name = "CT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CTImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CTImageStorage>::s_iod = "CT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedCTImageStorage>::s_keyword = Keyword::EnhancedCTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedCTImageStorage>::s_name = "Enhanced CT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedCTImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.2.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedCTImageStorage>::s_iod = "Enhanced CT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::LegacyConvertedEnhancedCTImageStorage>::s_keyword =
    Keyword::LegacyConvertedEnhancedCTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedCTImageStorage>::s_name =
    "Legacy Converted Enhanced CT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedCTImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.2.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedCTImageStorage>::s_iod =
    "Legacy Converted Enhanced CT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::NuclearMedicineImageStorage>::s_keyword = Keyword::NuclearMedicineImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::NuclearMedicineImageStorage>::s_name = "Nuclear Medicine Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::NuclearMedicineImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.20";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::NuclearMedicineImageStorage>::s_iod = "Nuclear Medicine Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::UltrasoundMultiFrameImageStorage>::s_keyword =
    Keyword::UltrasoundMultiFrameImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundMultiFrameImageStorage>::s_name =
    "Ultrasound Multi-frame Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundMultiFrameImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.3.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundMultiFrameImageStorage>::s_iod =
    "Ultrasound Multi-frame Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ParametricMapStorage>::s_keyword = Keyword::ParametricMapStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ParametricMapStorage>::s_name = "Parametric Map Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ParametricMapStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.30";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ParametricMapStorage>::s_iod = "Parametric Map IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MRImageStorage>::s_keyword = Keyword::MRImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MRImageStorage>::s_name = "MR Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MRImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MRImageStorage>::s_iod = "MR Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedMRImageStorage>::s_keyword = Keyword::EnhancedMRImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRImageStorage>::s_name = "Enhanced MR Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.4.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRImageStorage>::s_iod = "Enhanced MR Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedMRColorImageStorage>::s_keyword = Keyword::EnhancedMRColorImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRColorImageStorage>::s_name = "Enhanced MR Color Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRColorImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.4.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedMRColorImageStorage>::s_iod = "Enhanced MR Color Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::LegacyConvertedEnhancedMRImageStorage>::s_keyword =
    Keyword::LegacyConvertedEnhancedMRImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedMRImageStorage>::s_name =
    "Legacy Converted Enhanced MR Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedMRImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.4.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::LegacyConvertedEnhancedMRImageStorage>::s_iod =
    "Legacy Converted Enhanced MR Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::RTImageStorage>::s_keyword = Keyword::RTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTImageStorage>::s_name = "RT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.481.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTImageStorage>::s_iod = "RT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::RTDoseStorage>::s_keyword = Keyword::RTDoseStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTDoseStorage>::s_name = "RT Dose Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTDoseStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.481.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RTDoseStorage>::s_iod = "RT Dose IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedRTImageStorage>::s_keyword = Keyword::EnhancedRTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedRTImageStorage>::s_name = "Enhanced RT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedRTImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.481.23";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedRTImageStorage>::s_iod = "Enhanced RT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedContinuousRTImageStorage>::s_keyword =
    Keyword::EnhancedContinuousRTImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedContinuousRTImageStorage>::s_name =
    "Enhanced Continuous RT Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedContinuousRTImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.481.24";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedContinuousRTImageStorage>::s_iod =
    "Enhanced Continuous RT Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::UltrasoundImageStorage>::s_keyword = Keyword::UltrasoundImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundImageStorage>::s_name = "Ultrasound Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.6.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::UltrasoundImageStorage>::s_iod = "Ultrasound Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedUSVolumeStorage>::s_keyword = Keyword::EnhancedUSVolumeStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedUSVolumeStorage>::s_name = "Enhanced US Volume Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedUSVolumeStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.6.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedUSVolumeStorage>::s_iod = "Enhanced US Volume IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::PhotoacousticImageStorage>::s_keyword = Keyword::PhotoacousticImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PhotoacousticImageStorage>::s_name = "Photoacoustic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PhotoacousticImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.6.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PhotoacousticImageStorage>::s_iod = "Photoacoustic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SpatialFiducialsStorage>::s_keyword = Keyword::SpatialFiducialsStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpatialFiducialsStorage>::s_name = "Spatial Fiducials Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpatialFiducialsStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.66.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpatialFiducialsStorage>::s_iod = "Spatial Fiducials IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SegmentationStorage>::s_keyword = Keyword::SegmentationStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SegmentationStorage>::s_name = "Segmentation Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SegmentationStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.66.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SegmentationStorage>::s_iod = "Segmentation IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SurfaceSegmentationStorage>::s_keyword = Keyword::SurfaceSegmentationStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceSegmentationStorage>::s_name = "Surface Segmentation Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceSegmentationStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.66.5";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceSegmentationStorage>::s_iod = "Surface Segmentation IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SurfaceScanMeshStorage>::s_keyword = Keyword::SurfaceScanMeshStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanMeshStorage>::s_name = "Surface Scan Mesh Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanMeshStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.68.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanMeshStorage>::s_iod = "Surface Scan Mesh IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SurfaceScanPointCloudStorage>::s_keyword = Keyword::SurfaceScanPointCloudStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanPointCloudStorage>::s_name = "Surface Scan Point Cloud Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanPointCloudStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.68.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SurfaceScanPointCloudStorage>::s_iod = "Surface Scan Point Cloud IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SecondaryCaptureImageStorage>::s_keyword = Keyword::SecondaryCaptureImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SecondaryCaptureImageStorage>::s_name = "Secondary Capture Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SecondaryCaptureImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.7";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SecondaryCaptureImageStorage>::s_iod = "Secondary Capture Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>::s_keyword =
    Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>::s_name =
    "Multi-frame Single Bit Secondary Capture Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.7.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>::s_iod =
    "Multi-frame Single Bit Secondary Capture Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>::s_keyword =
    Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>::s_name =
    "Multi-frame Grayscale Byte Secondary Capture Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.7.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>::s_iod =
    "Multi-frame Grayscale Byte Secondary Capture Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>::s_keyword =
    Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>::s_name =
    "Multi-frame Grayscale Word Secondary Capture Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.7.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>::s_iod =
    "Multi-frame Grayscale Word Secondary Capture Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>::s_keyword =
    Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>::s_name =
    "Multi-frame True Color Secondary Capture Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.7.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>::s_iod =
    "Multi-frame True Color Secondary Capture Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VLEndoscopicImageStorage>::s_keyword = Keyword::VLEndoscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLEndoscopicImageStorage>::s_name = "VL Endoscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLEndoscopicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLEndoscopicImageStorage>::s_iod = "VL Endoscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VideoEndoscopicImageStorage>::s_keyword = Keyword::VideoEndoscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoEndoscopicImageStorage>::s_name = "Video Endoscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoEndoscopicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.1.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoEndoscopicImageStorage>::s_iod = "Video Endoscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VLMicroscopicImageStorage>::s_keyword = Keyword::VLMicroscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLMicroscopicImageStorage>::s_name = "VL Microscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLMicroscopicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLMicroscopicImageStorage>::s_iod = "VL Microscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VideoMicroscopicImageStorage>::s_keyword = Keyword::VideoMicroscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoMicroscopicImageStorage>::s_name = "Video Microscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoMicroscopicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.2.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoMicroscopicImageStorage>::s_iod = "Video Microscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VLSlideCoordinatesMicroscopicImageStorage>::s_keyword =
    Keyword::VLSlideCoordinatesMicroscopicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLSlideCoordinatesMicroscopicImageStorage>::s_name =
    "VL Slide-Coordinates Microscopic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLSlideCoordinatesMicroscopicImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.3";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLSlideCoordinatesMicroscopicImageStorage>::s_iod =
    "VL Slide-Coordinates Microscopic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VLPhotographicImageStorage>::s_keyword = Keyword::VLPhotographicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLPhotographicImageStorage>::s_name = "VL Photographic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLPhotographicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLPhotographicImageStorage>::s_iod = "VL Photographic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VideoPhotographicImageStorage>::s_keyword = Keyword::VideoPhotographicImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoPhotographicImageStorage>::s_name =
    "Video Photographic Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoPhotographicImageStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.77.1.4.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VideoPhotographicImageStorage>::s_iod = "Video Photographic Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicPhotography8BitImageStorage>::s_keyword =
    Keyword::OphthalmicPhotography8BitImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography8BitImageStorage>::s_name =
    "Ophthalmic Photography 8 Bit Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography8BitImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography8BitImageStorage>::s_iod =
    "Ophthalmic Photography 8 Bit Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicPhotography16BitImageStorage>::s_keyword =
    Keyword::OphthalmicPhotography16BitImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography16BitImageStorage>::s_name =
    "Ophthalmic Photography 16 Bit Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography16BitImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.2";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicPhotography16BitImageStorage>::s_iod =
    "Ophthalmic Photography 16 Bit Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicTomographyImageStorage>::s_keyword =
    Keyword::OphthalmicTomographyImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicTomographyImageStorage>::s_name =
    "Ophthalmic Tomography Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicTomographyImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.4";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicTomographyImageStorage>::s_iod =
    "Ophthalmic Tomography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>::s_keyword =
    Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>::s_name
    =
        "Wide field Ophthalmic Photography Stereographic Projection Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.5";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>::s_iod =
    "Wide field Ophthalmic Photography Stereographic Projection Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>::s_keyword =
    Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>::s_name =
    "Wide field Ophthalmic Photography 3D Coordinates Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.6";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>::s_iod =
    "Wide field Ophthalmic Photography 3D Coordinates Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>::s_keyword =
    Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>::s_name =
    "Ophthalmic Optical Coherence Tomography En Face Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.7";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>::s_iod =
    "Ophthalmic Optical Coherence Tomography En Face Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>::s_keyword =
    Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>::s_name =
    "Ophthalmic Optical Coherence Tomography B-scan Volume Analysis Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.5.8";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>::s_iod =
    "Ophthalmic Optical Coherence Tomography B-scan Volume Analysis IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::VLWholeSlideMicroscopyImageStorage>::s_keyword =
    Keyword::VLWholeSlideMicroscopyImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLWholeSlideMicroscopyImageStorage>::s_name =
    "VL Whole Slide Microscopy Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLWholeSlideMicroscopyImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.6";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::VLWholeSlideMicroscopyImageStorage>::s_iod =
    "VL Whole Slide Microscopy Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::DermoscopicPhotographyImageStorage>::s_keyword =
    Keyword::DermoscopicPhotographyImageStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DermoscopicPhotographyImageStorage>::s_name =
    "Dermoscopic Photography Image Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DermoscopicPhotographyImageStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.77.1.7";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::DermoscopicPhotographyImageStorage>::s_iod =
    "Dermoscopic Photography Image IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SpectaclePrescriptionReportStorage>::s_keyword =
    Keyword::SpectaclePrescriptionReportStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpectaclePrescriptionReportStorage>::s_name =
    "Spectacle Prescription Report Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpectaclePrescriptionReportStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.78.6";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SpectaclePrescriptionReportStorage>::s_iod =
    "Spectacle Prescription Report IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MacularGridThicknessAndVolumeReportStorage>::s_keyword =
    Keyword::MacularGridThicknessAndVolumeReportStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MacularGridThicknessAndVolumeReportStorage>::s_name =
    "Macular Grid Thickness and Volume Report Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MacularGridThicknessAndVolumeReportStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.79.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MacularGridThicknessAndVolumeReportStorage>::s_iod =
    "Macular Grid Thickness and Volume Report IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::OphthalmicThicknessMapStorage>::s_keyword = Keyword::OphthalmicThicknessMapStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicThicknessMapStorage>::s_name =
    "Ophthalmic Thickness Map Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicThicknessMapStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.81.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::OphthalmicThicknessMapStorage>::s_iod = "Ophthalmic Thickness Map IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::CornealTopographyMapStorage>::s_keyword = Keyword::CornealTopographyMapStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CornealTopographyMapStorage>::s_name = "Corneal Topography Map Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CornealTopographyMapStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.82.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::CornealTopographyMapStorage>::s_iod = "Corneal Topography Map IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::BasicTextSRStorage>::s_keyword = Keyword::BasicTextSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicTextSRStorage>::s_name = "Basic Text SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicTextSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.11";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::BasicTextSRStorage>::s_iod = "Basic Text SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedSRStorage>::s_keyword = Keyword::EnhancedSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedSRStorage>::s_name = "Enhanced SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.22";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedSRStorage>::s_iod = "Enhanced SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ComprehensiveSRStorage>::s_keyword = Keyword::ComprehensiveSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComprehensiveSRStorage>::s_name = "Comprehensive SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComprehensiveSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.33";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ComprehensiveSRStorage>::s_iod = "Comprehensive SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::Comprehensive3DSRStorage>::s_keyword = Keyword::Comprehensive3DSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::Comprehensive3DSRStorage>::s_name = "Comprehensive 3D SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::Comprehensive3DSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.34";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::Comprehensive3DSRStorage>::s_iod = "Comprehensive 3D SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ExtensibleSRStorage>::s_keyword = Keyword::ExtensibleSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ExtensibleSRStorage>::s_name = "Extensible SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ExtensibleSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.35";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ExtensibleSRStorage>::s_iod = "Extensible SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ProcedureLogStorage>::s_keyword = Keyword::ProcedureLogStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ProcedureLogStorage>::s_name = "Procedure Log Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ProcedureLogStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.40";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ProcedureLogStorage>::s_iod = "Procedure Log IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::MammographyCADSRStorage>::s_keyword = Keyword::MammographyCADSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MammographyCADSRStorage>::s_name = "Mammography CAD SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MammographyCADSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.50";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::MammographyCADSRStorage>::s_iod = "Mammography CAD SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::KeyObjectSelectionDocumentStorage>::s_keyword =
    Keyword::KeyObjectSelectionDocumentStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::KeyObjectSelectionDocumentStorage>::s_name =
    "Key Object Selection Document Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::KeyObjectSelectionDocumentStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.88.59";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::KeyObjectSelectionDocumentStorage>::s_iod =
    "Key Object Selection Document IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ChestCADSRStorage>::s_keyword = Keyword::ChestCADSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ChestCADSRStorage>::s_name = "Chest CAD SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ChestCADSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.65";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ChestCADSRStorage>::s_iod = "Chest CAD SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::XRayRadiationDoseSRStorage>::s_keyword = Keyword::XRayRadiationDoseSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiationDoseSRStorage>::s_name = "X-Ray Radiation Dose SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiationDoseSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.67";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::XRayRadiationDoseSRStorage>::s_iod = "X-Ray Radiation Dose SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>::s_keyword =
    Keyword::RadiopharmaceuticalRadiationDoseSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>::s_name =
    "Radiopharmaceutical Radiation Dose SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.88.68";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>::s_iod =
    "Radiopharmaceutical Radiation Dose SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ColonCADSRStorage>::s_keyword = Keyword::ColonCADSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ColonCADSRStorage>::s_name = "Colon CAD SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ColonCADSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.69";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ColonCADSRStorage>::s_iod = "Colon CAD SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::ImplantationPlanSRStorage>::s_keyword = Keyword::ImplantationPlanSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ImplantationPlanSRStorage>::s_name = "Implantation Plan SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ImplantationPlanSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.70";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::ImplantationPlanSRStorage>::s_iod = "Implantation Plan SR Document IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::AcquisitionContextSRStorage>::s_keyword = Keyword::AcquisitionContextSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::AcquisitionContextSRStorage>::s_name = "Acquisition Context SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::AcquisitionContextSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.71";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::AcquisitionContextSRStorage>::s_iod = "Acquisition Context SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::SimplifiedAdultEchoSRStorage>::s_keyword = Keyword::SimplifiedAdultEchoSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SimplifiedAdultEchoSRStorage>::s_name = "Simplified Adult Echo SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SimplifiedAdultEchoSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.72";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::SimplifiedAdultEchoSRStorage>::s_iod = "Simplified Adult Echo SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::PatientRadiationDoseSRStorage>::s_keyword = Keyword::PatientRadiationDoseSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PatientRadiationDoseSRStorage>::s_name =
    "Patient Radiation Dose SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PatientRadiationDoseSRStorage>::s_uid = "1.2.840.10008.5.1.4.1.1.88.73";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PatientRadiationDoseSRStorage>::s_iod = "Patient Radiation Dose SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::PlannedImagingAgentAdministrationSRStorage>::s_keyword =
    Keyword::PlannedImagingAgentAdministrationSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PlannedImagingAgentAdministrationSRStorage>::s_name =
    "Planned Imaging Agent Administration SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PlannedImagingAgentAdministrationSRStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.88.74";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PlannedImagingAgentAdministrationSRStorage>::s_iod =
    "Planned Imaging Agent Administration SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::PerformedImagingAgentAdministrationSRStorage>::s_keyword =
    Keyword::PerformedImagingAgentAdministrationSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PerformedImagingAgentAdministrationSRStorage>::s_name =
    "Performed Imaging Agent Administration SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PerformedImagingAgentAdministrationSRStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.88.75";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::PerformedImagingAgentAdministrationSRStorage>::s_iod =
    "Performed Imaging Agent Administration SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::EnhancedXRayRadiationDoseSRStorage>::s_keyword =
    Keyword::EnhancedXRayRadiationDoseSRStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRayRadiationDoseSRStorage>::s_name =
    "Enhanced X-Ray Radiation Dose SR Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRayRadiationDoseSRStorage>::s_uid =
    "1.2.840.10008.5.1.4.1.1.88.76";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::EnhancedXRayRadiationDoseSRStorage>::s_iod =
    "Enhanced X-Ray Radiation Dose SR IOD";
template<>
SIGHT_DATA_API const Keyword Sop<Keyword::GenericImplantTemplateStorage>::s_keyword = Keyword::GenericImplantTemplateStorage;
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::GenericImplantTemplateStorage>::s_name =
    "Generic Implant Template Storage";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::GenericImplantTemplateStorage>::s_uid = "1.2.840.10008.5.1.4.43.1";
template<>
SIGHT_DATA_API const std::string_view Sop<Keyword::GenericImplantTemplateStorage>::s_iod = "Generic Implant Template IOD";

//------------------------------------------------------------------------------

const ISop& get(Keyword keyword)
{
    switch(keyword)
    {
        case Keyword::ComputedRadiographyImageStorage:
            return get<Keyword::ComputedRadiographyImageStorage>();

        case Keyword::DigitalXRayImageStorageForPresentation:
            return get<Keyword::DigitalXRayImageStorageForPresentation>();

        case Keyword::DigitalXRayImageStorageForProcessing:
            return get<Keyword::DigitalXRayImageStorageForProcessing>();

        case Keyword::DigitalMammographyXRayImageStorageForPresentation:
            return get<Keyword::DigitalMammographyXRayImageStorageForPresentation>();

        case Keyword::DigitalMammographyXRayImageStorageForProcessing:
            return get<Keyword::DigitalMammographyXRayImageStorageForProcessing>();

        case Keyword::DigitalIntraOralXRayImageStorageForPresentation:
            return get<Keyword::DigitalIntraOralXRayImageStorageForPresentation>();

        case Keyword::DigitalIntraOralXRayImageStorageForProcessing:
            return get<Keyword::DigitalIntraOralXRayImageStorageForProcessing>();

        case Keyword::EncapsulatedPDFStorage:
            return get<Keyword::EncapsulatedPDFStorage>();

        case Keyword::EncapsulatedCDAStorage:
            return get<Keyword::EncapsulatedCDAStorage>();

        case Keyword::EncapsulatedSTLStorage:
            return get<Keyword::EncapsulatedSTLStorage>();

        case Keyword::EncapsulatedOBJStorage:
            return get<Keyword::EncapsulatedOBJStorage>();

        case Keyword::EncapsulatedMTLStorage:
            return get<Keyword::EncapsulatedMTLStorage>();

        case Keyword::XRayAngiographicImageStorage:
            return get<Keyword::XRayAngiographicImageStorage>();

        case Keyword::EnhancedXAImageStorage:
            return get<Keyword::EnhancedXAImageStorage>();

        case Keyword::XRayRadiofluoroscopicImageStorage:
            return get<Keyword::XRayRadiofluoroscopicImageStorage>();

        case Keyword::EnhancedXRFImageStorage:
            return get<Keyword::EnhancedXRFImageStorage>();

        case Keyword::PositronEmissionTomographyImageStorage:
            return get<Keyword::PositronEmissionTomographyImageStorage>();

        case Keyword::LegacyConvertedEnhancedPETImageStorage:
            return get<Keyword::LegacyConvertedEnhancedPETImageStorage>();

        case Keyword::XRay3DAngiographicImageStorage:
            return get<Keyword::XRay3DAngiographicImageStorage>();

        case Keyword::XRay3DCraniofacialImageStorage:
            return get<Keyword::XRay3DCraniofacialImageStorage>();

        case Keyword::BreastTomosynthesisImageStorage:
            return get<Keyword::BreastTomosynthesisImageStorage>();

        case Keyword::BreastProjectionXRayImageStorageForPresentation:
            return get<Keyword::BreastProjectionXRayImageStorageForPresentation>();

        case Keyword::BreastProjectionXRayImageStorageForProcessing:
            return get<Keyword::BreastProjectionXRayImageStorageForProcessing>();

        case Keyword::EnhancedPETImageStorage:
            return get<Keyword::EnhancedPETImageStorage>();

        case Keyword::BasicStructuredDisplayStorage:
            return get<Keyword::BasicStructuredDisplayStorage>();

        case Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation:
            return get<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>();

        case Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing:
            return get<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>();

        case Keyword::CTImageStorage:
            return get<Keyword::CTImageStorage>();

        case Keyword::EnhancedCTImageStorage:
            return get<Keyword::EnhancedCTImageStorage>();

        case Keyword::LegacyConvertedEnhancedCTImageStorage:
            return get<Keyword::LegacyConvertedEnhancedCTImageStorage>();

        case Keyword::NuclearMedicineImageStorage:
            return get<Keyword::NuclearMedicineImageStorage>();

        case Keyword::UltrasoundMultiFrameImageStorage:
            return get<Keyword::UltrasoundMultiFrameImageStorage>();

        case Keyword::ParametricMapStorage:
            return get<Keyword::ParametricMapStorage>();

        case Keyword::MRImageStorage:
            return get<Keyword::MRImageStorage>();

        case Keyword::EnhancedMRImageStorage:
            return get<Keyword::EnhancedMRImageStorage>();

        case Keyword::EnhancedMRColorImageStorage:
            return get<Keyword::EnhancedMRColorImageStorage>();

        case Keyword::LegacyConvertedEnhancedMRImageStorage:
            return get<Keyword::LegacyConvertedEnhancedMRImageStorage>();

        case Keyword::RTImageStorage:
            return get<Keyword::RTImageStorage>();

        case Keyword::RTDoseStorage:
            return get<Keyword::RTDoseStorage>();

        case Keyword::EnhancedRTImageStorage:
            return get<Keyword::EnhancedRTImageStorage>();

        case Keyword::EnhancedContinuousRTImageStorage:
            return get<Keyword::EnhancedContinuousRTImageStorage>();

        case Keyword::UltrasoundImageStorage:
            return get<Keyword::UltrasoundImageStorage>();

        case Keyword::EnhancedUSVolumeStorage:
            return get<Keyword::EnhancedUSVolumeStorage>();

        case Keyword::PhotoacousticImageStorage:
            return get<Keyword::PhotoacousticImageStorage>();

        case Keyword::SpatialFiducialsStorage:
            return get<Keyword::SpatialFiducialsStorage>();

        case Keyword::SegmentationStorage:
            return get<Keyword::SegmentationStorage>();

        case Keyword::SurfaceSegmentationStorage:
            return get<Keyword::SurfaceSegmentationStorage>();

        case Keyword::SurfaceScanMeshStorage:
            return get<Keyword::SurfaceScanMeshStorage>();

        case Keyword::SurfaceScanPointCloudStorage:
            return get<Keyword::SurfaceScanPointCloudStorage>();

        case Keyword::SecondaryCaptureImageStorage:
            return get<Keyword::SecondaryCaptureImageStorage>();

        case Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage:
            return get<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>();

        case Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage:
            return get<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>();

        case Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage:
            return get<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>();

        case Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage:
            return get<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>();

        case Keyword::VLEndoscopicImageStorage:
            return get<Keyword::VLEndoscopicImageStorage>();

        case Keyword::VideoEndoscopicImageStorage:
            return get<Keyword::VideoEndoscopicImageStorage>();

        case Keyword::VLMicroscopicImageStorage:
            return get<Keyword::VLMicroscopicImageStorage>();

        case Keyword::VideoMicroscopicImageStorage:
            return get<Keyword::VideoMicroscopicImageStorage>();

        case Keyword::VLSlideCoordinatesMicroscopicImageStorage:
            return get<Keyword::VLSlideCoordinatesMicroscopicImageStorage>();

        case Keyword::VLPhotographicImageStorage:
            return get<Keyword::VLPhotographicImageStorage>();

        case Keyword::VideoPhotographicImageStorage:
            return get<Keyword::VideoPhotographicImageStorage>();

        case Keyword::OphthalmicPhotography8BitImageStorage:
            return get<Keyword::OphthalmicPhotography8BitImageStorage>();

        case Keyword::OphthalmicPhotography16BitImageStorage:
            return get<Keyword::OphthalmicPhotography16BitImageStorage>();

        case Keyword::OphthalmicTomographyImageStorage:
            return get<Keyword::OphthalmicTomographyImageStorage>();

        case Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage:
            return get<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>();

        case Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage:
            return get<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>();

        case Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage:
            return get<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>();

        case Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage:
            return get<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>();

        case Keyword::VLWholeSlideMicroscopyImageStorage:
            return get<Keyword::VLWholeSlideMicroscopyImageStorage>();

        case Keyword::DermoscopicPhotographyImageStorage:
            return get<Keyword::DermoscopicPhotographyImageStorage>();

        case Keyword::SpectaclePrescriptionReportStorage:
            return get<Keyword::SpectaclePrescriptionReportStorage>();

        case Keyword::MacularGridThicknessAndVolumeReportStorage:
            return get<Keyword::MacularGridThicknessAndVolumeReportStorage>();

        case Keyword::OphthalmicThicknessMapStorage:
            return get<Keyword::OphthalmicThicknessMapStorage>();

        case Keyword::CornealTopographyMapStorage:
            return get<Keyword::CornealTopographyMapStorage>();

        case Keyword::BasicTextSRStorage:
            return get<Keyword::BasicTextSRStorage>();

        case Keyword::EnhancedSRStorage:
            return get<Keyword::EnhancedSRStorage>();

        case Keyword::ComprehensiveSRStorage:
            return get<Keyword::ComprehensiveSRStorage>();

        case Keyword::Comprehensive3DSRStorage:
            return get<Keyword::Comprehensive3DSRStorage>();

        case Keyword::ExtensibleSRStorage:
            return get<Keyword::ExtensibleSRStorage>();

        case Keyword::ProcedureLogStorage:
            return get<Keyword::ProcedureLogStorage>();

        case Keyword::MammographyCADSRStorage:
            return get<Keyword::MammographyCADSRStorage>();

        case Keyword::KeyObjectSelectionDocumentStorage:
            return get<Keyword::KeyObjectSelectionDocumentStorage>();

        case Keyword::ChestCADSRStorage:
            return get<Keyword::ChestCADSRStorage>();

        case Keyword::XRayRadiationDoseSRStorage:
            return get<Keyword::XRayRadiationDoseSRStorage>();

        case Keyword::RadiopharmaceuticalRadiationDoseSRStorage:
            return get<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>();

        case Keyword::ColonCADSRStorage:
            return get<Keyword::ColonCADSRStorage>();

        case Keyword::ImplantationPlanSRStorage:
            return get<Keyword::ImplantationPlanSRStorage>();

        case Keyword::AcquisitionContextSRStorage:
            return get<Keyword::AcquisitionContextSRStorage>();

        case Keyword::SimplifiedAdultEchoSRStorage:
            return get<Keyword::SimplifiedAdultEchoSRStorage>();

        case Keyword::PatientRadiationDoseSRStorage:
            return get<Keyword::PatientRadiationDoseSRStorage>();

        case Keyword::PlannedImagingAgentAdministrationSRStorage:
            return get<Keyword::PlannedImagingAgentAdministrationSRStorage>();

        case Keyword::PerformedImagingAgentAdministrationSRStorage:
            return get<Keyword::PerformedImagingAgentAdministrationSRStorage>();

        case Keyword::EnhancedXRayRadiationDoseSRStorage:
            return get<Keyword::EnhancedXRayRadiationDoseSRStorage>();

        case Keyword::GenericImplantTemplateStorage:
            return get<Keyword::GenericImplantTemplateStorage>();

        default:
            SIGHT_THROW("Unknown Sop Keyword: '" << std::uint8_t(keyword) << "'.");
    }
}

//------------------------------------------------------------------------------

const ISop& get(const std::string_view& uid)
{
    static const std::unordered_map<std::string_view, const ISop&> SOP_MAP {
        {Sop<Keyword::ComputedRadiographyImageStorage>::s_uid, get<Keyword::ComputedRadiographyImageStorage>()},
        {Sop<Keyword::DigitalXRayImageStorageForPresentation>::s_uid,
         get<Keyword::DigitalXRayImageStorageForPresentation>()
        },
        {Sop<Keyword::DigitalXRayImageStorageForProcessing>::s_uid, get<Keyword::DigitalXRayImageStorageForProcessing>()
        },
        {Sop<Keyword::DigitalMammographyXRayImageStorageForPresentation>::s_uid,
         get<Keyword::DigitalMammographyXRayImageStorageForPresentation>()
        },
        {Sop<Keyword::DigitalMammographyXRayImageStorageForProcessing>::s_uid,
         get<Keyword::DigitalMammographyXRayImageStorageForProcessing>()
        },
        {Sop<Keyword::DigitalIntraOralXRayImageStorageForPresentation>::s_uid,
         get<Keyword::DigitalIntraOralXRayImageStorageForPresentation>()
        },
        {Sop<Keyword::DigitalIntraOralXRayImageStorageForProcessing>::s_uid,
         get<Keyword::DigitalIntraOralXRayImageStorageForProcessing>()
        },
        {Sop<Keyword::EncapsulatedPDFStorage>::s_uid, get<Keyword::EncapsulatedPDFStorage>()},
        {Sop<Keyword::EncapsulatedCDAStorage>::s_uid, get<Keyword::EncapsulatedCDAStorage>()},
        {Sop<Keyword::EncapsulatedSTLStorage>::s_uid, get<Keyword::EncapsulatedSTLStorage>()},
        {Sop<Keyword::EncapsulatedOBJStorage>::s_uid, get<Keyword::EncapsulatedOBJStorage>()},
        {Sop<Keyword::EncapsulatedMTLStorage>::s_uid, get<Keyword::EncapsulatedMTLStorage>()},
        {Sop<Keyword::XRayAngiographicImageStorage>::s_uid, get<Keyword::XRayAngiographicImageStorage>()},
        {Sop<Keyword::EnhancedXAImageStorage>::s_uid, get<Keyword::EnhancedXAImageStorage>()},
        {Sop<Keyword::XRayRadiofluoroscopicImageStorage>::s_uid, get<Keyword::XRayRadiofluoroscopicImageStorage>()},
        {Sop<Keyword::EnhancedXRFImageStorage>::s_uid, get<Keyword::EnhancedXRFImageStorage>()},
        {Sop<Keyword::PositronEmissionTomographyImageStorage>::s_uid,
         get<Keyword::PositronEmissionTomographyImageStorage>()
        },
        {Sop<Keyword::LegacyConvertedEnhancedPETImageStorage>::s_uid,
         get<Keyword::LegacyConvertedEnhancedPETImageStorage>()
        },
        {Sop<Keyword::XRay3DAngiographicImageStorage>::s_uid, get<Keyword::XRay3DAngiographicImageStorage>()},
        {Sop<Keyword::XRay3DCraniofacialImageStorage>::s_uid, get<Keyword::XRay3DCraniofacialImageStorage>()},
        {Sop<Keyword::BreastTomosynthesisImageStorage>::s_uid, get<Keyword::BreastTomosynthesisImageStorage>()},
        {Sop<Keyword::BreastProjectionXRayImageStorageForPresentation>::s_uid,
         get<Keyword::BreastProjectionXRayImageStorageForPresentation>()
        },
        {Sop<Keyword::BreastProjectionXRayImageStorageForProcessing>::s_uid,
         get<Keyword::BreastProjectionXRayImageStorageForProcessing>()
        },
        {Sop<Keyword::EnhancedPETImageStorage>::s_uid, get<Keyword::EnhancedPETImageStorage>()},
        {Sop<Keyword::BasicStructuredDisplayStorage>::s_uid, get<Keyword::BasicStructuredDisplayStorage>()},
        {Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>::s_uid,
         get<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForPresentation>()
        },
        {Sop<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>::s_uid,
         get<Keyword::IntravascularOpticalCoherenceTomographyImageStorageForProcessing>()
        },
        {Sop<Keyword::CTImageStorage>::s_uid, get<Keyword::CTImageStorage>()},
        {Sop<Keyword::EnhancedCTImageStorage>::s_uid, get<Keyword::EnhancedCTImageStorage>()},
        {Sop<Keyword::LegacyConvertedEnhancedCTImageStorage>::s_uid,
         get<Keyword::LegacyConvertedEnhancedCTImageStorage>()
        },
        {Sop<Keyword::NuclearMedicineImageStorage>::s_uid, get<Keyword::NuclearMedicineImageStorage>()},
        {Sop<Keyword::UltrasoundMultiFrameImageStorage>::s_uid, get<Keyword::UltrasoundMultiFrameImageStorage>()},
        {Sop<Keyword::ParametricMapStorage>::s_uid, get<Keyword::ParametricMapStorage>()},
        {Sop<Keyword::MRImageStorage>::s_uid, get<Keyword::MRImageStorage>()},
        {Sop<Keyword::EnhancedMRImageStorage>::s_uid, get<Keyword::EnhancedMRImageStorage>()},
        {Sop<Keyword::EnhancedMRColorImageStorage>::s_uid, get<Keyword::EnhancedMRColorImageStorage>()},
        {Sop<Keyword::LegacyConvertedEnhancedMRImageStorage>::s_uid,
         get<Keyword::LegacyConvertedEnhancedMRImageStorage>()
        },
        {Sop<Keyword::RTImageStorage>::s_uid, get<Keyword::RTImageStorage>()},
        {Sop<Keyword::RTDoseStorage>::s_uid, get<Keyword::RTDoseStorage>()},
        {Sop<Keyword::EnhancedRTImageStorage>::s_uid, get<Keyword::EnhancedRTImageStorage>()},
        {Sop<Keyword::EnhancedContinuousRTImageStorage>::s_uid, get<Keyword::EnhancedContinuousRTImageStorage>()},
        {Sop<Keyword::UltrasoundImageStorage>::s_uid, get<Keyword::UltrasoundImageStorage>()},
        {Sop<Keyword::EnhancedUSVolumeStorage>::s_uid, get<Keyword::EnhancedUSVolumeStorage>()},
        {Sop<Keyword::PhotoacousticImageStorage>::s_uid, get<Keyword::PhotoacousticImageStorage>()},
        {Sop<Keyword::SpatialFiducialsStorage>::s_uid, get<Keyword::SpatialFiducialsStorage>()},
        {Sop<Keyword::SegmentationStorage>::s_uid, get<Keyword::SegmentationStorage>()},
        {Sop<Keyword::SurfaceSegmentationStorage>::s_uid, get<Keyword::SurfaceSegmentationStorage>()},
        {Sop<Keyword::SurfaceScanMeshStorage>::s_uid, get<Keyword::SurfaceScanMeshStorage>()},
        {Sop<Keyword::SurfaceScanPointCloudStorage>::s_uid, get<Keyword::SurfaceScanPointCloudStorage>()},
        {Sop<Keyword::SecondaryCaptureImageStorage>::s_uid, get<Keyword::SecondaryCaptureImageStorage>()},
        {Sop<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>::s_uid,
         get<Keyword::MultiFrameSingleBitSecondaryCaptureImageStorage>()
        },
        {Sop<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>::s_uid,
         get<Keyword::MultiFrameGrayscaleByteSecondaryCaptureImageStorage>()
        },
        {Sop<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>::s_uid,
         get<Keyword::MultiFrameGrayscaleWordSecondaryCaptureImageStorage>()
        },
        {Sop<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>::s_uid,
         get<Keyword::MultiFrameTrueColorSecondaryCaptureImageStorage>()
        },
        {Sop<Keyword::VLEndoscopicImageStorage>::s_uid, get<Keyword::VLEndoscopicImageStorage>()},
        {Sop<Keyword::VideoEndoscopicImageStorage>::s_uid, get<Keyword::VideoEndoscopicImageStorage>()},
        {Sop<Keyword::VLMicroscopicImageStorage>::s_uid, get<Keyword::VLMicroscopicImageStorage>()},
        {Sop<Keyword::VideoMicroscopicImageStorage>::s_uid, get<Keyword::VideoMicroscopicImageStorage>()},
        {Sop<Keyword::VLSlideCoordinatesMicroscopicImageStorage>::s_uid,
         get<Keyword::VLSlideCoordinatesMicroscopicImageStorage>()
        },
        {Sop<Keyword::VLPhotographicImageStorage>::s_uid, get<Keyword::VLPhotographicImageStorage>()},
        {Sop<Keyword::VideoPhotographicImageStorage>::s_uid, get<Keyword::VideoPhotographicImageStorage>()},
        {Sop<Keyword::OphthalmicPhotography8BitImageStorage>::s_uid,
         get<Keyword::OphthalmicPhotography8BitImageStorage>()
        },
        {Sop<Keyword::OphthalmicPhotography16BitImageStorage>::s_uid,
         get<Keyword::OphthalmicPhotography16BitImageStorage>()
        },
        {Sop<Keyword::OphthalmicTomographyImageStorage>::s_uid, get<Keyword::OphthalmicTomographyImageStorage>()},
        {Sop<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>::s_uid,
         get<Keyword::WideFieldOphthalmicPhotographyStereographicProjectionImageStorage>()
        },
        {Sop<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>::s_uid,
         get<Keyword::WideFieldOphthalmicPhotography3DCoordinatesImageStorage>()
        },
        {Sop<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>::s_uid,
         get<Keyword::OphthalmicOpticalCoherenceTomographyEnFaceImageStorage>()
        },
        {Sop<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>::s_uid,
         get<Keyword::OphthalmicOpticalCoherenceTomographyBscanVolumeAnalysisStorage>()
        },
        {Sop<Keyword::VLWholeSlideMicroscopyImageStorage>::s_uid, get<Keyword::VLWholeSlideMicroscopyImageStorage>()},
        {Sop<Keyword::DermoscopicPhotographyImageStorage>::s_uid, get<Keyword::DermoscopicPhotographyImageStorage>()},
        {Sop<Keyword::SpectaclePrescriptionReportStorage>::s_uid, get<Keyword::SpectaclePrescriptionReportStorage>()},
        {Sop<Keyword::MacularGridThicknessAndVolumeReportStorage>::s_uid,
         get<Keyword::MacularGridThicknessAndVolumeReportStorage>()
        },
        {Sop<Keyword::OphthalmicThicknessMapStorage>::s_uid, get<Keyword::OphthalmicThicknessMapStorage>()},
        {Sop<Keyword::CornealTopographyMapStorage>::s_uid, get<Keyword::CornealTopographyMapStorage>()},
        {Sop<Keyword::BasicTextSRStorage>::s_uid, get<Keyword::BasicTextSRStorage>()},
        {Sop<Keyword::EnhancedSRStorage>::s_uid, get<Keyword::EnhancedSRStorage>()},
        {Sop<Keyword::ComprehensiveSRStorage>::s_uid, get<Keyword::ComprehensiveSRStorage>()},
        {Sop<Keyword::Comprehensive3DSRStorage>::s_uid, get<Keyword::Comprehensive3DSRStorage>()},
        {Sop<Keyword::ExtensibleSRStorage>::s_uid, get<Keyword::ExtensibleSRStorage>()},
        {Sop<Keyword::ProcedureLogStorage>::s_uid, get<Keyword::ProcedureLogStorage>()},
        {Sop<Keyword::MammographyCADSRStorage>::s_uid, get<Keyword::MammographyCADSRStorage>()},
        {Sop<Keyword::KeyObjectSelectionDocumentStorage>::s_uid, get<Keyword::KeyObjectSelectionDocumentStorage>()},
        {Sop<Keyword::ChestCADSRStorage>::s_uid, get<Keyword::ChestCADSRStorage>()},
        {Sop<Keyword::XRayRadiationDoseSRStorage>::s_uid, get<Keyword::XRayRadiationDoseSRStorage>()},
        {Sop<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>::s_uid,
         get<Keyword::RadiopharmaceuticalRadiationDoseSRStorage>()
        },
        {Sop<Keyword::ColonCADSRStorage>::s_uid, get<Keyword::ColonCADSRStorage>()},
        {Sop<Keyword::ImplantationPlanSRStorage>::s_uid, get<Keyword::ImplantationPlanSRStorage>()},
        {Sop<Keyword::AcquisitionContextSRStorage>::s_uid, get<Keyword::AcquisitionContextSRStorage>()},
        {Sop<Keyword::SimplifiedAdultEchoSRStorage>::s_uid, get<Keyword::SimplifiedAdultEchoSRStorage>()},
        {Sop<Keyword::PatientRadiationDoseSRStorage>::s_uid, get<Keyword::PatientRadiationDoseSRStorage>()},
        {Sop<Keyword::PlannedImagingAgentAdministrationSRStorage>::s_uid,
         get<Keyword::PlannedImagingAgentAdministrationSRStorage>()
        },
        {Sop<Keyword::PerformedImagingAgentAdministrationSRStorage>::s_uid,
         get<Keyword::PerformedImagingAgentAdministrationSRStorage>()
        },
        {Sop<Keyword::EnhancedXRayRadiationDoseSRStorage>::s_uid, get<Keyword::EnhancedXRayRadiationDoseSRStorage>()},
        {Sop<Keyword::GenericImplantTemplateStorage>::s_uid, get<Keyword::GenericImplantTemplateStorage>()},
    };

    return SOP_MAP.at(uid);
}

//------------------------------------------------------------------------------

const Keyword& keyword(const std::string_view& uid) noexcept
{
    try
    {
        return get(uid).m_keyword;
    }
    catch(...)
    {
        static const auto invalid = Keyword::INVALID;
        return invalid;
    }
}

//------------------------------------------------------------------------------

} // namespace sight::data::dicom::sop

// NOLINTEND
