]> Creatis software - gdcm.git/blob - gdcmDictEntry.h
780c7afd6b2f64977cc800df6124f4b53f176fbe
[gdcm.git] / gdcmDictEntry.h
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: gdcmDictEntry.h,v $
5   Language:  C++
6   Date:      $Date: 2005/07/11 14:40:40 $
7   Version:   $Revision: 1.35 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 #ifndef GDCMDICTENTRY_H
20 #define GDCMDICTENTRY_H
21
22 #include "gdcmBase.h"
23
24 namespace gdcm 
25 {
26
27 //-----------------------------------------------------------------------------
28 /**
29  * \brief
30  * the DictEntry in an element contained by the Dict.
31  * It contains :
32  *  - the key referenced by the DICOM norm or the constructor (for private keys)
33  *    i.e. the Group number
34  *         the Element number
35  *  - the VR (Value Representation)
36  *  - the VM (Value Multplicity)
37  *  - the corresponding name in english
38  */
39 class GDCM_EXPORT DictEntry : public Base
40 {
41 public:
42    DictEntry(uint16_t group, 
43              uint16_t elem,
44              TagName const &vr     = GDCM_UNKNOWN,
45              TagName const &vm     = GDCM_UNKNOWN,
46              TagName const &name   = GDCM_UNKNOWN);
47
48 // Print
49    void Print(std::ostream &os = std::cout, std::string const &indent = "");
50
51 // Content of DictEntry
52    void SetVR(TagName const &vr);
53    void SetVM(TagName const &vm);
54
55    /// \brief tells if the V(alue) R(epresentation) is known (?!)
56    /// @return 
57    bool IsVRUnknown() { return VR == GDCM_UNKNOWN; }
58
59    /// \brief tells if the V(alue) M(ultiplicity) is known (?!)
60    /// @return 
61    bool IsVMUnknown() { return VM == GDCM_UNKNOWN; }
62
63    /// \brief  Returns the Dicom Group Number of the current DictEntry
64    /// @return the Dicom Group Number
65    uint16_t GetGroup() { return Group; }
66   
67    /// \brief  Returns the Dicom Element Number of the current DictEntry
68    /// @return the Dicom Element Number
69    uint16_t GetElement() { return Element; }
70  
71    /// \brief  Returns the Dicom Value Representation of the current
72    ///         DictEntry
73    /// @return the Dicom Value Representation
74    const TagName &GetVR() const { return VR; }
75  
76    /// \brief   sets the key of the current DictEntry
77    /// @param k New key to be set.
78    void SetKey(TagKey const &k)  { Key = k; }
79  
80    /// \brief   returns the VM field of the current DictEntry
81    /// @return  The 'Value Multiplicity' field
82    const TagName &GetVM() const { return VM; } 
83
84    /// \brief  Returns the Dicom Name of the current DictEntry
85    ///         e.g. "Patient Name" for Dicom Tag (0x0010, 0x0010) 
86    /// @return the Dicom Name
87    const TagName &GetName() const { return Name; } 
88  
89    /// \brief  Gets the key of the current DictEntry
90    /// @return the key.
91    const TagKey &GetKey() const { return Key; }
92
93 // Key creation
94    static TagKey TranslateToKey(uint16_t group, uint16_t elem);
95
96 private:
97    /// \todo FIXME 
98    ///        where are the group and elem used except from building up
99    ///        a TagKey. If the answer is nowhere then there is no need
100    ///        to store the group and elem independently.
101    ///
102    ///        --> EVERYWHERE ! The alternate question would be :
103    ///                         What's TagKey used for ?
104    
105    /// DicomGroup number
106    uint16_t Group;   // e.g. 0x0010
107
108    /// DicomElement number
109    uint16_t Element; // e.g. 0x0103
110
111    /// \brief Value Representation i.e. some clue about the nature
112    ///        of the data represented e.g. 
113    ///        "FD" short for "Floating Point Double"(see \ref VR)
114    ///        "PN" short for "Person Name"       
115    TagName VR;
116
117    /*
118     *  .
119     *  Formerly 'Group name abbreviations'
120     *  Here is a small dictionary we encountered in "nature":
121     *  - CMD      Command        
122     *  - META     Meta Information 
123     *  - DIR      Directory
124     *  - ID       ???
125     *  - PAT      Patient
126     *  - ACQ      Acquisition
127     *  - REL      Related
128     *  - IMG      Image
129     *  - SDY      Study
130     *  - VIS      Visit 
131     *  - WAV      Waveform
132     *  - PRC      ???
133     *  - DEV      Device
134     *  - NMI      Nuclear Medicine
135     *  - MED      ???
136     *  - BFS      Basic Film Session
137     *  - BFB      Basic Film Box
138     *  - BIB      Basic Image Box
139     *  - BAB
140     *  - IOB
141     *  - PJ
142     *  - PRINTER
143     *  - RT       Radio Therapy
144     *  - DVH   
145     *  - SSET
146     *  - RES      Results
147     *  - CRV      Curve
148     *  - OLY      Overlays
149     *  - PXL      Pixels
150     *  - DL       Delimiters
151     *  .
152     *
153     *  Other usefull abreviations used for Radiographic view associated with
154     *  Patient Position (0018,5100):
155     *  -  AP = Anterior/Posterior 
156     *  -  PA = Posterior/Anterior 
157     *  -  LL = Left Lateral 
158     *  -  RL = Right Lateral 
159     *  - RLD = Right Lateral Decubitus 
160     *  - LLD = Left  Lateral Decubitus 
161     *  - RLO = Right Lateral Oblique 
162     *  - LLO = Left  Lateral Oblique  
163     *  .
164     */
165    /// \brief Value Multiplicity (e.g. "1", "1-n", "6")
166    TagName VM; 
167
168    /// e.g. "Patient's Name"                    
169    TagName Name;      
170
171    /// Redundant with (group, elem) but we add it for efficiency purpose.
172    TagKey  Key;
173 };
174 } // end namespace gdcm
175 //-----------------------------------------------------------------------------
176 #endif