]> Creatis software - gdcm.git/blob - src/gdcmHeaderHelper.h
7a0b01cca12153e519dadfc8e7ce3996214ead0e
[gdcm.git] / src / gdcmHeaderHelper.h
1 // gdcmHeaderHelper.h
2 //-----------------------------------------------------------------------------
3 #ifndef GDCMHEADERHELPER_H
4 #define GDCMHEADERHELPER_H
5
6 #include "gdcmHeader.h"
7
8 //-----------------------------------------------------------------------------
9 // Dicom Part 3.3 Compliant
10 enum ModalityType {
11    Unknow,
12    AU,       // Voice Audio
13    AS,       // Angioscopy
14    BI,       // Biomagnetic Imaging
15    CF,       // Cinefluorography
16    CP,       // Culposcopy
17    CR,       // Computed Radiography
18    CS,       // Cystoscopy
19    CT,       // Computed Tomography
20    DD,       // Duplex Dopler
21    DF,       // Digital Fluoroscopy
22    DG,       // Diaphanography
23    DM,       // Digital Microscopy
24    DS,       // Digital Substraction Angiography
25    DX,       // Digital Radiography
26    ECG,      // Echocardiography
27    EPS,      // Basic Cardiac EP
28    ES,       // Endoscopy
29    FA,       // Fluorescein Angiography
30    FS,       // Fundoscopy
31    HC,       // Hard Copy
32    HD,       // Hemodynamic
33    LP,       // Laparoscopy
34    LS,       // Laser Surface Scan
35    MA,       // Magnetic Resonance Angiography
36    MR,       // Magnetic Resonance
37    NM,       // Nuclear Medicine
38    OT,       // Other
39    PT,       // Positron Emission Tomography
40    RF,       // Radio Fluoroscopy
41    RG,       // Radiographic Imaging
42    RTDOSE,   // Radiotherapy Dose
43    RTIMAGE,  // Radiotherapy Image
44    RTPLAN,   // Radiotherapy Plan
45    RTSTRUCT, // Radiotherapy Structure Set
46    SM,       // Microscopic Imaging
47    ST,       // Single-photon Emission Computed Tomography
48    TG,       // Thermography
49    US,       // Ultrasound
50    VF,       // Videofluorography
51    XA,       // X-Ray Angiography
52    XC        // Photographic Imaging
53 };
54       
55 //-----------------------------------------------------------------------------
56 /*
57  * This class is meant to *interpret* data given from gdcmHeader
58  * That is to say :
59  *  - it will help other dev to link against there lib
60  *  - return value instead of string
61  *  - will be able to search for data at some other place
62  *  - return *default value* which is not a gdcmHeader goal
63  *  - ...
64  */
65 class GDCM_EXPORT gdcmHeaderHelper : public gdcmHeader {
66 public:
67    gdcmHeaderHelper();
68    gdcmHeaderHelper(const char *filename, 
69               bool  exception_on_error = false, 
70               bool  enable_sequences   = false,
71               bool  ignore_shadow      = false);
72
73    int GetPixelSize();
74    std::string GetPixelType();
75    
76    float GetXSpacing();
77    float GetYSpacing();
78    float GetZSpacing();
79    
80    // Usefull for rescaling graylevel:
81    float GetRescaleIntercept();
82    float GetRescaleSlope();
83
84    int GetNumberOfScalarComponents();
85    int GetNumberOfScalarComponentsRaw();
86
87    std::string GetStudyUID();
88    std::string GetSeriesUID();
89    std::string GetClassUID();
90    std::string GetInstanceUID();
91    
92    /**
93     * change GetXImagePosition -> GetXOrigin in order not to confuse reader
94     * -# GetXOrigin can return default value (=0) if it was not ImagePosition
95     * -# Image Position is different in dicomV3 <> ACR NEMA -> better use generic
96     * name
97    */
98    float GetXOrigin();
99    float GetYOrigin();
100    float GetZOrigin();
101    
102    int GetImageNumber();
103    ModalityType GetModality();
104    
105    void GetImageOrientationPatient( float* iop );
106 };
107
108 //-----------------------------------------------------------------------------
109 /**
110 This class should be used for a stack of 2D dicom images.
111 For a multiframe dicom image better use directly gdcmHeaderHelper
112 */
113 class GDCM_EXPORT gdcmSerieHeaderHelper {
114 public:
115     gdcmSerieHeaderHelper() {};
116     ~gdcmSerieHeaderHelper();
117
118    void AddFileName(std::string filename); //should return bool or throw error ?
119    void AddGdcmFile(gdcmHeaderHelper *file);
120    void SetDirectory(std::string dir);
121    void OrderGdcmFileList();
122    
123    inline gdcmHeaderHelper *GetGdcmHeader()
124    {
125       //Assume all element in the list have the same global infos
126       return CoherentGdcmFileList.front();
127    }
128    
129    std::list<gdcmHeaderHelper*>& GetGdcmFileList();
130
131 private:
132    bool ImagePositionPatientOrdering();
133    bool ImageNumberOrdering();
134    bool FileNameOrdering();
135    
136    std::list<gdcmHeaderHelper*> CoherentGdcmFileList;
137 };
138
139 //-----------------------------------------------------------------------------
140 #endif