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