]> Creatis software - creaImageIO.git/blob - src/creaImageIODicomDatabaseStructure.cpp
7fdbc7ab9ec618e67e02881bdbe363c823347e43
[creaImageIO.git] / src / creaImageIODicomDatabaseStructure.cpp
1 #include <creaImageIODicomDatabaseStructure.h>
2
3 namespace creaImageIO
4 {
5
6   const int table_size = 5;
7   const char* const table[]
8   = {
9     "DATABASE",
10     "PATIENT" ,
11     "STUDY",
12     "SERIES",
13     "IMAGE"
14   };
15
16
17   // PATIENT
18   const int mandatory_patient_fields_size = 1;
19   const Field::Description mandatory_patient_fields[] 
20   = 
21     { 
22       Field::Description("ID",0,0,"Database ID",1)
23         // Flag is set to 1 to mean that it is a database use only field
24         // not visible by user
25     };
26   const int default_patient_fields_size = 4;
27   const Field::Description default_patient_fields[] 
28   = 
29     { 
30       Field::Description("A0010_0010",0x0010,0x0010,"Name",0),
31       Field::Description("A0010_0020",0x0010,0x0020,"Patient ID",0),
32       Field::Description("A0010_0040",0x0010,0x0040,"Sex",0),
33       Field::Description("A0010_0030",0x0010,0x0030,"Birthday",0)
34     };
35   
36   const int patient_query_fields_size = 4;
37
38   // STUDY
39   const int mandatory_study_fields_size = 2;
40   const Field::Description mandatory_study_fields[] 
41   = 
42     { 
43       Field::Description("ID",0,0,"Database ID",1),
44       Field::Description("PARENT_ID",0,0,"Parent database ID",1)
45     };
46
47   const int default_study_fields_size = 7;
48   const Field::Description default_study_fields[] 
49   = 
50     { 
51       Field::Description("A0020_0010",0x0020,0x0010,"Study ID",0),
52       Field::Description("A0008_0020",0x0008,0x0020,"Study Date",0),    
53       Field::Description("A0008_0030",0x0008,0x0030,"Study Time",0),
54       Field::Description("A0020_000D",0x0020,0x000D,"Study Instance UID",0),
55       Field::Description("A0008_0050",0x0008,0x0050,"Study Accession Number",0),
56       
57       Field::Description("A0008_1030",0x0008,0x1030,"Study Description",0),
58       Field::Description("A0008_0005",0x0008,0x0005,"Specific Character Set",0)
59     };
60   const int study_query_fields_size = 4;
61  
62   // SERIES
63   const int mandatory_series_fields_size = 2;
64   const Field::Description mandatory_series_fields[] 
65   = 
66     { 
67       Field::Description("ID",0,0,"Database ID",1),
68       Field::Description("PARENT_ID",0,0,"Parent database ID",1)
69     };
70
71   const int default_series_fields_size = 11;
72   const Field::Description default_series_fields[] 
73   = 
74     { 
75       Field::Description("A0008_0021",0x0008,0x0021,"Series Date",0),
76       Field::Description("A0008_0031",0x0008,0x0031,"Series Time",0),
77       Field::Description("A0008_0060",0x0008,0x0060,"Modality",0),
78       Field::Description("A0020_000E",0x0020,0x000E,"Series Instance UID",0),
79       Field::Description("A0008_103E",0x0008,0x103E,"Description",0),
80       Field::Description("A0008_0080",0x0008,0x0080,"Institution Name",0),
81       Field::Description("A0008_0081",0x0008,0x0081,"Institution Adress",0),
82       Field::Description("A0008_1010",0x0008,0x1010,"Station Name",0),
83       Field::Description("A0008_1048",0x0008,0x1048,"Physician of Record",0),
84       Field::Description("A0008_1050",0x0008,0x1050,"Performing Physician s Name",0),
85       Field::Description("A0018_1030",0x0018,0x1030,"Protocol Name",0)
86     };
87
88   const int series_query_fields_size = 4;
89  
90   
91
92   // IMAGE
93   const int mandatory_image_fields_size = 2;
94   const Field::Description mandatory_image_fields[] 
95   = 
96     { 
97       Field::Description("ID",0,0,"Database ID",1),
98       Field::Description("PARENT_ID",0,0,"Parent database ID",1)
99     };
100   const int default_image_fields_size = 27;
101   const Field::Description default_image_fields[] 
102   = 
103     { 
104       Field::Description("A0004_1500",0x0004,0x1500,"File name",0),
105       Field::Description("FullFileName",0,0,"Full file name",0),      
106       Field::Description("A0008_0008",0x0008,0x0008,"Image Type",0),
107       Field::Description("A0008_0023",0x0008,0x0023,"Content Date",0),
108       Field::Description("A0008_0033",0x0008,0x0033,"Content Time",0),
109       Field::Description("A0020_0013",0x0020,0x0013,"Image Number",0),
110       Field::Description("A0020_0032",0x0020,0x0032,"Image Position Patient",0),
111       Field::Description("A0020_0037",0x0020,0x0037,"Image Orientation Patient",0),
112       Field::Description("A0020_0052",0x0020,0x0052,"Frame Reference UID",0),
113       Field::Description("A0020_1041",0x0020,0x1041,"Slice Location",0),
114       Field::Description("A0020_4000",0x0020,0x4000,"Image Comments",0),
115       Field::Description("A0028_0002",0x0028,0x0002,"Sample per pixels",0),
116       Field::Description("A0028_0004",0x0028,0x0004,"Photometric Interpretation",0),
117       Field::Description("A0028_0006",0x0028,0x0006,"Planar Configuration",0),
118       Field::Description("A0028_0008",0x0028,0x0008,"Number of Frames",0),
119       Field::Description("A0028_0010",0x0028,0x0010,"Rows",0),
120       Field::Description("A0028_0011",0x0028,0x0011,"Columns",0),
121       Field::Description("A0028_0030",0x0028,0x0030,"Pixel Spacing",0),
122       Field::Description("A0028_0100",0x0028,0x0100,"AlocatedBits",0),
123       Field::Description("A0028_0101",0x0028,0x0101,"StoredBits",0),
124       Field::Description("A0028_0103",0x0028,0x0103,"Pixel Representation",0),
125       Field::Description("A0028_1052",0x0028,0x1052,"Rescale Intercept",0),
126       Field::Description("A0028_1053",0x0028,0x1053,"Rescale Slope",0),
127       Field::Description("A0050_0004",0x0050,0x0004,"Calibration Image",0),
128       Field::Description("A0008_0016",0x0008,0x0016,"SOP Class UID",0),
129       Field::Description("OWNER",    0,     0,     "Owner",0),
130       Field::Description("REGISTRATION",0,  0,     "Registration",0)
131     };
132
133   const int image_query_fields_size = 1;
134
135   // Indexation
136   const int mandatory_fields_size[5] = 
137     {
138       0,
139       mandatory_patient_fields_size,
140       mandatory_study_fields_size,
141       mandatory_series_fields_size,
142       mandatory_image_fields_size
143     };
144   const Field::Description* mandatory_fields[5] =
145     {
146       0,
147       mandatory_patient_fields,
148       mandatory_study_fields,
149       mandatory_series_fields,
150       mandatory_image_fields
151     };
152   const int default_fields_size[5] = 
153     {
154       0,
155       default_patient_fields_size,
156       default_study_fields_size,
157       default_series_fields_size,
158       default_image_fields_size
159     };
160   const Field::Description* default_fields[5] =
161     {
162       0,
163       default_patient_fields,
164       default_study_fields,
165       default_series_fields,
166       default_image_fields
167     };
168   const int query_fields_size[5] = 
169     {
170       0,
171       patient_query_fields_size,
172       study_query_fields_size,
173       series_query_fields_size,
174       image_query_fields_size
175     };
176
177
178   int DicomDatabaseStructure::TableBegin() { return DicomNode::Patient; }
179   int DicomDatabaseStructure::TableEnd() { return DicomNode::Image+1; }
180
181
182   const char* DicomDatabaseStructure::Table(int i) { return table[i]; }
183     
184   int DicomDatabaseStructure::NbMandatoryFields(DicomNode::Type c)
185   {
186     return mandatory_fields_size[c];
187   }
188   const Field::Description& DicomDatabaseStructure::MandatoryField(DicomNode::Type c, 
189                                                           int i)
190   {
191     return mandatory_fields[c][i];
192   }
193
194   int DicomDatabaseStructure::NbDefaultFields(DicomNode::Type c)
195   {
196     return default_fields_size[c];
197   }
198
199   const Field::Description& DicomDatabaseStructure::DefaultField(DicomNode::Type c,
200                                                         int i)
201   {
202     return default_fields[c][i];
203   }
204
205   int DicomDatabaseStructure::NbQueryFields(DicomNode::Type c)
206   {
207     return query_fields_size[c];
208   }
209
210   const Field::Description& DicomDatabaseStructure::QueryField(DicomNode::Type c,
211                                                       int i)
212   {
213     return default_fields[c][i];    
214   }
215
216 } // namespace creaImageIO