]> Creatis software - creaImageIO.git/blob - src2/creaImageIOTreeDescriptor.cpp
Validation changed and added number of children to the database.
[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(0x1111,0x0011,   // Number of Series
54                               AttributeDescriptor::LABEL),1);
55       Add(AttributeDescriptor(0x0010,0x0010,   // Patient name
56                               AttributeDescriptor::LABEL),1);
57       Add(AttributeDescriptor(0x0010,0x0040),1); // Patient sex
58       Add(AttributeDescriptor(0x0010,0x0030),1); // Patient birthday
59       Add(AttributeDescriptor(0x0010,0x0020,   // Patient ID
60                               AttributeDescriptor::IDENTIFIER),1);
61  
62       // Study-series level
63       Add(LevelDescriptor("Series"));
64           Add(AttributeDescriptor(0x1111,0x0011,   // Number of Images
65                               AttributeDescriptor::LABEL),2);
66       Add(AttributeDescriptor(0x0008,0x0060,    // Modality
67                               AttributeDescriptor::LABEL),2);
68       Add(AttributeDescriptor(0x0008,0x1030),2); // Study Description
69       Add(AttributeDescriptor(0x0008,0x103E),2); // Description
70       Add(AttributeDescriptor(0x0008,0x0080),2); // Institution Name
71       Add(AttributeDescriptor(0x0008,0x0081),2); // Institution Adress
72           Add(AttributeDescriptor(0x0008,0x1010),2); // Station Name
73       Add(AttributeDescriptor(0x0008,0x1048),2); // Physician of Record
74       Add(AttributeDescriptor(0x0008,0x1050),2); // Performing Physician's Name
75       Add(AttributeDescriptor(0x0018,0x1030),2); // Protocol Name
76
77       Add(AttributeDescriptor(0x0020,0x0010),2); // Study ID
78       Add(AttributeDescriptor(0x0008,0x0020),2); // Study Date
79       Add(AttributeDescriptor(0x0008,0x0030),2); // Study Time
80       Add(AttributeDescriptor(0x0008,0x0050),2); // Study Accession Number
81       Add(AttributeDescriptor(0x0008,0x0005),2); // Specific character set
82       Add(AttributeDescriptor(0x0008,0x0021),2); // Series Date
83       Add(AttributeDescriptor(0x0008,0x0031),2); // Series time
84
85       Add(AttributeDescriptor(0x0020,0x000D   // Study Instance UID  
86                                                     ),2);//AttributeDescriptor::IDENTIFIER),2);
87       Add(AttributeDescriptor(0x0020,0x000E,   // Series Instance UID  
88                                                     AttributeDescriptor::IDENTIFIER),2);
89       // |
90       //                                                    AttributeDescriptor::LABEL),2);
91      
92
93       // Image level
94       Add(LevelDescriptor("Image"));
95
96       Add(AttributeDescriptor(0x0020,0x0013),3); // Image Number
97
98       Add(AttributeDescriptor(0x0028,0x0010),3); // Rows
99       Add(AttributeDescriptor(0x0028,0x0011),3); // Columns
100       Add(AttributeDescriptor(0x0028,0x0012),3); // Planes
101       Add(AttributeDescriptor(0x0028,0x0002),3); // Sample per pixels
102       Add(AttributeDescriptor(0x0028,0x0008),3); // Number of Frames 
103       Add(AttributeDescriptor(0x0028,0x0004),3); // Photometric Interpretation
104       Add(AttributeDescriptor(0x0028,0x0103),3); // Pixel Representation
105
106       Add(AttributeDescriptor(0x0020,0x0032),3); // Image Position Patient
107       Add(AttributeDescriptor(0x0020,0x0037),3); // Image Orientation Patient
108       Add(AttributeDescriptor(0x0020,0x1041),3); // Slice Location
109       Add(AttributeDescriptor(0x0028,0x0006),3); // Planar Configuration
110
111       Add(AttributeDescriptor(0x0028,0x0030),3); // Pixel Spacing
112       Add(AttributeDescriptor(0x0028,0x0100),3); // AlocatedBits
113       Add(AttributeDescriptor(0x0028,0x0101),3); // StoredBits
114
115       Add(AttributeDescriptor(0x0008,0x0008),3); // Image Type
116       Add(AttributeDescriptor(0x0008,0x0023),3); // Content Date
117       Add(AttributeDescriptor(0x0008,0x0033),3); // Content Time
118
119       Add(AttributeDescriptor(0x0020,0x4000),3); // Image Comments
120
121       Add(AttributeDescriptor(0x0004,0x1500,   // File Name
122                                                     AttributeDescriptor::LABEL),3);
123       Add(AttributeDescriptor(0x0028,0x1052),3); // Rescale Intercept
124       Add(AttributeDescriptor(0x0028,0x1053),3); // Rescale Slope
125
126       Add(AttributeDescriptor(0x0050,0x0004),3); // Calibration Image
127
128       Add(AttributeDescriptor(0x0020,0x0052   // Frame Reference UID
129                                                     ),3);
130       Add(AttributeDescriptor(0x0008,0x0016),3); // SOP Class UID
131       Add(AttributeDescriptor("FullFileName",  // Full file name
132                                                     "Full file name",
133                                                     AttributeDescriptor::IDENTIFIER),3); 
134                                                                   
135      
136     }
137     //==================================================================
138
139     //==================================================================
140     /// Adds a LevelDescriptor at the end of the list
141     void Descriptor::Add(const LevelDescriptor& d)
142     {
143       mLevelDescriptorList.push_back(d);
144     }
145     //==================================================================
146     
147     //==================================================================  
148     /// Adds an AttributeDescriptor to level l
149     void Descriptor::Add(const AttributeDescriptor& d, int l)
150     {
151       mLevelDescriptorList[l].Add(d);
152       // TO DO : update DicomTagToName and NameToDicomTag map
153     }
154     //==================================================================
155
156     //==================================================================
157     /// Clears the Descriptor
158     void Descriptor::Clear()
159     {
160       mLevelDescriptorList.clear();
161     }
162     //==================================================================
163
164     //==================================================================
165     /// Builds the key to value map of all the attributes of the tree
166     void Descriptor::BuildAttributeMap( std::map<std::string,std::string>& map ) const
167     {
168       map.clear();
169       LevelDescriptorListType::const_iterator l;
170       for (l = GetLevelDescriptorList().begin();
171            l!= GetLevelDescriptorList().end();
172            ++l)
173         {
174           LevelDescriptor::AttributeDescriptorListType::const_iterator a;
175           for (a = l->GetAttributeDescriptorList().begin();
176                a!= l->GetAttributeDescriptorList().end();
177                ++a)
178             {
179               map[a->GetKey()]="";
180             }
181         }
182     }
183  
184   }
185 }