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