/*! \page mod_dcmect dcmect: a library for working with Enhanced CT objects \tableofcontents \section dcmect_introduction Introduction This module contains classes to deal with DICOM Enhanced CT objects. It is able to create, load and save them. Several checks (as possible) make sure that only valid Enhanced CT objects are written. This module makes heavy use of the \ref mod_dcmiod "dcmiod" module for managing common IOD attribute as well as the \ref mod_dcmfg "dcmfg" module to manage the functional groups required forEnhanced CT objects. The main class of this module is: \li \b EctEnhancedCT \section dcmect_howto_use_dcmect How to use dcmect The \ref mod_dcmect "dcmect" module offers a main class, \b EctEnhancedCT, that should be used as a starting point to load or create Enhanced CT objects. The \b EctEnhancedCT class manages its data in a similar way as the related Enhanced CT IOD is organized in the standard. It holds a list of modules (see \ref dcmect_supported_modules) and a set of functional group macros (see \ref dcmect_supported_functional_group_macros) that together make up the Enhanced CT object. \subsection dcmect_creation Creation In order to create a new Enhanced CT object from scratch, a factory method EctEnhancedCT::create() must be used (regular constructor is protected)). create() asks for some required information that is needed in any case to create valid Enhanced CT objects. Afterwards, the various attributes in the supported modules can be set. There is a get() method for each Module that returns a reference, e.g. EctEnhancedCT::getIODPatientModule() to retrieve the Patient Module in order to set the attribute Patient's Name (IODPatientModule::setPatientName()) An exception are the attributes of the Enhanced CT Image Module which can be set directly using set() methods on the \b EctEnhancedCT class, e.g. EctEnhancedCT::setISOCenterPosition(). Functional Groups are added in two ways: -# EctEnhancedCT::addForAllFrames() adds a Functional Group as "shared", i.e. as being valid for all frames that will be part of this Enhanced CT object -# EctEnhancedCT::Frames::addFrame() adds a new frame with pixel data and also takes a set of functional groups that should be added as "per-frame". After constructing the Enhanced CT object it can be written to a \b DcmItem or to a DICOM file (EctEnhancedCT::writeDataset() versus EctEnhancedCT::saveFile()). \subsection dcmect_reading Reading An existing Enhanced CT object can be read using the static methods EctEnhancedCT::loadFile() (load from DICOM file) or EctEnhancedCT::loadDataset() (reading from an existing \b DcmItem object in memory). For compression see section \ref dcmect_compression "on compression". \subsection dcmect_saving Saving An existing Enhanced CT object can be written using the methods EctEnhancedCT::saveFile() (save to DICOM file) or EctEnhancedCT::writeDataset() (writing to an existing \b DcmItem object in memory). By default, EctEnhancedCT writes uncompressed files in transfer syntax Little Endian Explicit. For compression section \ref dcmect_compression "on compression". \subsection dcmect_modification Modification An existing \b EctEnhancedCT object can be modified in memory using the methods described above. Note that modification must be done careful and might lead to inconsistent objects. That's why it is not the recommended to modify existing objects with the \ref mod_dcmect "dcmect" module. \subsection dcmect_code_example Code Example The dcmect/tests directory contains a file called t_roundtrip.cc which contains code that creates, writes and reads a Enhanced CT object so it is a quite complete demo case that shows how to use \ref mod_dcmect "dcmect" module. \subsection dcmect_compression Compression The EctEnhancedCT works on uncompressed pixel data. Therefore it first tries to decompress a file that is encoded using a compressed ("encapsulated") transfer syntax. DCMTK supports various compressed transfer syntaxes, however, the related codecs that perform compression or decompression must be registered first by the application that wants to use them. EctEnhancedCT does not automatically register those codecs but leaves this to the user of the module. Once the codecs are registered, EctEnhancedCT will make use of them when trying to decompress the compressed dataset. See for example the \ref mod_dcmjpeg "dcmjpeg module" to see how registering (and later deregistering) codecs work. When sving, EctEnhancedCT::saveFile() writes the file in Little Endian Explicit transfer syntax. By setting its parameter \em writeXfer to a compressed transfer syntax, \ref mod_dcmect "dcmect" tries to compress the file before writing. As when reading a dataset or file, this only works if the user registered the related decompression codecs first. \section dcmect_supported_modules Supported Modules The following modules of the Enhanced CT IOD are supported: \li Patient Module \li Patient Study Module \li General Study Module \li General Series Module \li Enhanced CT Series Module \li Frame of Reference Module \li Synchronization Module \li General Equipment Module \li Enhanced General Equipment Module \li Image Pixel Module \li Multi-frame Functional Groups Module \li Multi-frame Dimension Module \li Acquisition Context Module \li Enhanced CT Module \li SOP Common Module \li Common Instance Reference Module The following modules are \e not (yet) supported: \li Enhanced Contrast/Bolus Module \li Cardiac Synchronization Module \li Respiratory Synchronization Module \li Supplemental Palette Color Lookup Table Module \li Device Module \li Specimen Module \li Enhanced Multi-energy CT Acquisition Module \li ICC Profile Module \li Frame Extraction Module There might be further unsupported optional modules that have been added to the DICOM Standard after the last update of this documentation. \section dcmect_supported_functional_group_macros Supported Functional Group Macros The following functional group macros are supported: \li Pixel Measures \li Frame Content \li Plane Position (Patient) \li Plane Orientation (Patient) \li Derivation Image \li Frame Anatomy \li Frame VOI LUT \li Real World Value Mapping \li Irradiation Event Identification \li CT Image Frame Type \li CT Acquisition Type \li CT Acquisition Details \li CT Table Dynamics \li CT Position \li CT Geometry \li CT Reconstruction \li CT Exposure \li CT X-Ray Details \li CT Pixel Value Transformation \li CT Additional X-Ray Source \li Temporal Position The following functional group macros are \e not (yet) support: \li Referenced Image \li Cardiac Synchronization \li Contrast/Bolus Usage \li Respiratory Synchronization \li Multi-energy CT Processing \li Multi-energy CT Characteristics There might be further unsupported optional functional group macros that have been added to the DICOM Standard after the last update of this documentation. */