]> Creatis software - creaImageIO.git/blob - src2/creaImageIOTreeDescriptor.cpp
*** empty log message ***
[creaImageIO.git] / src2 / creaImageIOTreeDescriptor.cpp
1 #include <creaImageIOTreeDescriptor.h>
2
3
4 namespace creaImageIO
5 {
6
7   namespace tree
8   {
9
10     //==================================================================
11     /// The attribute is hidden (not visible to user)
12     const unsigned int AttributeDescriptor::PRIVATE = 1;
13     /// The attribute enters in unique identifier constitution 
14     const unsigned int AttributeDescriptor::IDENTIFIER = 2;
15     const unsigned int AttributeDescriptor::LABEL = 4;
16     //==================================================================
17
18     //==================================================================
19     Descriptor::Descriptor()
20     {
21       CreateLevel0Descriptor();
22     }
23     //==================================================================
24
25    //==================================================================
26     Descriptor::~Descriptor()
27     {
28     }
29     //==================================================================
30
31     //==================================================================
32     void Descriptor::CreateLevel0Descriptor()
33     {
34       Add(LevelDescriptor("Root"));
35     }
36     //==================================================================
37     
38     //==================================================================
39     /// Creates the default descriptor
40     void Descriptor::CreateDefault()
41     {
42       // clears the existing one
43       Clear();
44       
45       // Creates the level 0 descriptor 
46       CreateLevel0Descriptor();
47       // Creates the attribute "Name"
48       Add(AttributeDescriptor("Name","Name",
49                               AttributeDescriptor::LABEL),0);
50       
51       // Patient level
52       Add(LevelDescriptor("Patient"));
53       Add(AttributeDescriptor(0x0010,0x0010,   // Patient name
54                               AttributeDescriptor::LABEL),1);
55       Add(AttributeDescriptor(0x0010,0x0040),1); // Patient sex
56       Add(AttributeDescriptor(0x0010,0x0030),1); // Patient birthday
57       Add(AttributeDescriptor(0x0010,0x0020,   // Patient ID
58                               AttributeDescriptor::IDENTIFIER),1);
59  
60       // Study-series level
61       Add(LevelDescriptor("Series"));
62       Add(AttributeDescriptor(0x0008,0x0060,    // Modality
63                               AttributeDescriptor::LABEL),2);
64       Add(AttributeDescriptor(0x0008,0x1030),2); // Study Description
65       Add(AttributeDescriptor(0x0008,0x103E),2); // Description
66       Add(AttributeDescriptor(0x0008,0x0080),2); // Institution Name
67       Add(AttributeDescriptor(0x0008,0x0081),2); // Institution Adress
68       Add(AttributeDescriptor(0x0008,0x1010),2); // Station Name
69       Add(AttributeDescriptor(0x0008,0x1048),2); // Physician of Record
70       Add(AttributeDescriptor(0x0008,0x1050),2); // Performing Physician's Name
71       Add(AttributeDescriptor(0x0018,0x1030),2); // Protocol Name
72
73       Add(AttributeDescriptor(0x0020,0x0010),2); // Study ID
74       Add(AttributeDescriptor(0x0008,0x0020),2); // Study Date
75       Add(AttributeDescriptor(0x0008,0x0030),2); // Study Time
76       Add(AttributeDescriptor(0x0008,0x0050),2); // Study Accession Number
77       Add(AttributeDescriptor(0x0008,0x0005),2); // Specific character set
78       Add(AttributeDescriptor(0x0008,0x0021),2); // Series Date
79       Add(AttributeDescriptor(0x0008,0x0031),2); // Series time
80
81       Add(AttributeDescriptor(0x0020,0x000D   // Study Instance UID  
82                                                     ),2);//AttributeDescriptor::IDENTIFIER),2);
83       Add(AttributeDescriptor(0x0020,0x000E,   // Series Instance UID  
84                                                     AttributeDescriptor::IDENTIFIER),2);
85       // |
86       //                                                    AttributeDescriptor::LABEL),2);
87      
88
89       // Image level
90       Add(LevelDescriptor("Image"));
91
92       Add(AttributeDescriptor(0x0020,0x0013),3); // Image Number
93
94       Add(AttributeDescriptor(0x0028,0x0010),3); // Rows
95       Add(AttributeDescriptor(0x0028,0x0011),3); // Columns
96       Add(AttributeDescriptor(0x0028,0x0012),3); // Planes
97       Add(AttributeDescriptor(0x0028,0x0002),3); // Sample per pixels
98       Add(AttributeDescriptor(0x0028,0x0008),3); // Number of Frames 
99       Add(AttributeDescriptor(0x0028,0x0004),3); // Photometric Interpretation
100       Add(AttributeDescriptor(0x0028,0x0103),3); // Pixel Representation
101
102       Add(AttributeDescriptor(0x0020,0x0032),3); // Image Position Patient
103       Add(AttributeDescriptor(0x0020,0x0037),3); // Image Orientation Patient
104       Add(AttributeDescriptor(0x0020,0x1041),3); // Slice Location
105       Add(AttributeDescriptor(0x0028,0x0006),3); // Planar Configuration
106
107       Add(AttributeDescriptor(0x0028,0x0030),3); // Pixel Spacing
108       Add(AttributeDescriptor(0x0028,0x0100),3); // AlocatedBits
109       Add(AttributeDescriptor(0x0028,0x0101),3); // StoredBits
110
111       Add(AttributeDescriptor(0x0008,0x0008),3); // Image Type
112       Add(AttributeDescriptor(0x0008,0x0023),3); // Content Date
113       Add(AttributeDescriptor(0x0008,0x0033),3); // Content Time
114
115       Add(AttributeDescriptor(0x0020,0x4000),3); // Image Comments
116
117       Add(AttributeDescriptor(0x0004,0x1500,   // File Name
118                                                     AttributeDescriptor::LABEL),3);
119       Add(AttributeDescriptor(0x0028,0x1052),3); // Rescale Intercept
120       Add(AttributeDescriptor(0x0028,0x1053),3); // Rescale Slope
121
122       Add(AttributeDescriptor(0x0050,0x0004),3); // Calibration Image
123
124       Add(AttributeDescriptor(0x0020,0x0052   // Frame Reference UID
125                                                     ),3);
126       Add(AttributeDescriptor(0x0008,0x0016),3); // SOP Class UID
127       Add(AttributeDescriptor("FullFileName",  // Full file name
128                                                     "Full file name",
129                                                     AttributeDescriptor::IDENTIFIER),3); 
130                                                                   
131      
132     }
133     //==================================================================
134
135     //==================================================================
136     /// Adds a LevelDescriptor at the end of the list
137     void Descriptor::Add(const LevelDescriptor& d)
138     {
139       mLevelDescriptorList.push_back(d);
140     }
141     //==================================================================
142     
143     //==================================================================  
144     /// Adds an AttributeDescriptor to level l
145     void Descriptor::Add(const AttributeDescriptor& d, int l)
146     {
147       mLevelDescriptorList[l].Add(d);
148       // TO DO : update DicomTagToName and NameToDicomTag map
149     }
150     //==================================================================
151
152     //==================================================================
153     /// Clears the Descriptor
154     void Descriptor::Clear()
155     {
156       mLevelDescriptorList.clear();
157     }
158     //==================================================================
159
160     //==================================================================
161     /// Builds the key to value map of all the attributes of the tree
162     void Descriptor::BuildAttributeMap( std::map<std::string,std::string>& map ) const
163     {
164       map.clear();
165       LevelDescriptorListType::const_iterator l;
166       for (l = GetLevelDescriptorList().begin();
167            l!= GetLevelDescriptorList().end();
168            ++l)
169         {
170           LevelDescriptor::AttributeDescriptorListType::const_iterator a;
171           for (a = l->GetAttributeDescriptorList().begin();
172                a!= l->GetAttributeDescriptorList().end();
173                ++a)
174             {
175               map[a->GetKey()]="";
176             }
177         }
178     }
179     //==================================================================
180  
181   }
182 }