ITK  4.4.0
Insight Segmentation and Registration Toolkit
itkSiemensVisionImageIO.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
33 #ifndef __itkSiemensVisionImageIO_h
34 #define __itkSiemensVisionImageIO_h
35 
36 
37 #include "itkIPLCommonImageIO.h"
38 
39 namespace itk
40 {
49 class ITK_EXPORT SiemensVisionImageIO:public IPLCommonImageIO
50 {
51 public:
56 
58  itkNewMacro(Self);
59 
61  itkTypeMacro(SiemensVisionImageIO, Superclass);
62 
63  /*-------- This part of the interfaces deals with reading data. ----- */
64 
71  virtual bool CanReadFile(const char *FileNameToRead);
72 
73  /* * Set the spacing and dimension information for the set filename. */
74  // Implemented in superclass
75  // virtual void ReadImageInformation();
76 
77  /* * Get the type of the pixel. */
78  // Implemented in superclass
79  // virtual const std::type_info& GetPixelType() const;
80 
81  /* * Reads the data from disk into the memory buffer provided. */
82  // Implemented in superclass
83  // virtual void Read(void* buffer);
84 
85  /* * Compute the size (in bytes) of the components of a pixel. For
86  * example, and RGB pixel of unsigned char would have a
87  * component size of 1 byte. */
88  // Implemented in superclass
89  // virtual unsigned int GetComponentSize() const;
90 
91  /*-------- This part of the interfaces deals with writing data. ----- */
92 
93  /* * Determine if the file can be written with this ImageIO implementation.
94  * \param FileNameToWrite The name of the file to test for writing.
95  * \author Hans J. Johnson
96  * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
97  * \return Returns true if this ImageIO can write the file specified.
98  */
99  // Implemented in superclass
100  // virtual bool CanWriteFile(const char * FileNameToWrite);
101 
102  /* * Set the spacing and dimension information for the set filename. */
103  // Implemented in superclass
104  // virtual void WriteImageInformation();
105 
106  /* * Writes the data to disk from the memory buffer provided. Make sure
107  * that the IORegions has been set properly. */
108  // Implemented in superclass
109  // virtual void Write(const void* buffer);
110 
111 protected:
114  // Implemented in superclass
115  // void PrintSelf(std::ostream& os, Indent indent) const;
116  virtual GEImageHeader * ReadHeader(const char *FileNameToRead);
117 
118 private:
119  typedef enum {
120  HDR_STUDY_YEAR = 0, // Study date year, u_int
121  HDR_STUDY_YEAR_LEN = 4,
122  HDR_STUDY_MONTH = 4, // Study date month, u_int
123  HDR_STUDY_MONTH_LEN = 4,
124  HDR_STUDY_DAY = 8, // Study date day, u_int
125  HDR_STUDY_DAY_LEN = 4,
126  HDR_ACQ_YEAR = 12, // Acquisition date year, u_int
127  HDR_ACQ_YEAR_LEN = 4,
128  HDR_ACQ_MONTH = 16, // Acquisition date month, u_int
129  HDR_ACQ_MONTH_LEN = 4,
130  HDR_ACQ_DAY = 20, // Acquisition date day, u_int
131  HDR_ACQ_DAY_LEN = 4,
132  HDR_IMAGE_YEAR = 24, // Image date year, u_int
133  HDR_IMAGE_YEAR_LEN = 4,
134  HDR_IMAGE_MONTH = 28, // Image date month, u_int
135  HDR_IMAGE_MONTH_LEN = 4,
136  HDR_IMAGE_DAY = 32, // Image date day, u_int
137  HDR_IMAGE_DAY_LEN = 4,
138  HDR_STUDY_HOUR = 36, // Study time hour, u_int
139  HDR_STUDY_HOUR_LEN = 4,
140  HDR_STUDY_MIN = 40, // Study time minute, u_int
141  HDR_STUDY_MIN_LEN = 4,
142  HDR_STUDY_SEC = 44, // Study time second, u_int
143  HDR_STUDY_SEC_LEN = 4,
144  HDR_ACQ_HOUR = 52, // Acquisition time second, u_int
145  HDR_ACQ_HOUR_LEN = 4,
146  HDR_ACQ_MIN = 56, // Acquisition time second, u_int
147  HDR_ACQ_MIN_LEN = 4,
148  HDR_ACQ_SEC = 60, // Acquisition time second, u_int
149  HDR_ACQ_SEC_LEN = 4,
150  HDR_IMAGE_HOUR = 68, // Image Creation time second, u_int
151  HDR_IMAGE_HOUR_LEN = 4,
152  HDR_IMAGE_MIN = 72, // Image Creation time second, u_int
153  HDR_IMAGE_MIN_LEN = 4,
154  HDR_IMAGE_SEC = 76, // Image Creation time second, u_int
155  HDR_IMAGE_SEC_LEN = 4,
156  HDR_MANUFAC = 96, // Scanner Manufacturer, char
157  HDR_MANUFAC_LEN = 7,
158  HDR_INSTUTE_NAME = 105, // Institution Name, char
159  HDR_INSTUTE_NAME_LEN = 25,
160  HDR_ANNOTATION = 186, // Annotation, char
161  HDR_ANNOTATION_LEN = 32,
162  HDR_MODEL_NAME = 281, // Scanner Model Name, char
163  HDR_MODEL_NAME_LEN = 12,
164  HDR_LMOVE_YEAR = 412, // Date of Last Image Move - year, u_int
165  HDR_LMOVE_YEAR_LEN = 4,
166  HDR_LMOVE_MONTH = 416, // Date of Last Image Move - month, u_int
167  HDR_LMOVE_MONTH_LEN = 4,
168  HDR_LMOVE_DAY = 420, // Date of Last Image Move - day, u_int
169  HDR_LMOVE_DAY_LEN = 4,
170  HDR_LMOVE_HOUR = 424, // Date of Last Image Move - hour, u_int
171  HDR_LMOVE_HOUR_LEN = 4,
172  HDR_LMOVE_MIN = 428, // Date of Last Image Move - minute, u_int
173  HDR_LMOVE_MIN_LEN = 4,
174  HDR_LMOVE_SEC = 432, // Date of Last Image Move - second, u_int
175  HDR_LMOVE_SEC_LEN = 4,
176  HDR_PAT_NAME = 768, // Patient Name, char
177  HDR_PAT_NAME_LEN = 25,
178  HDR_PAT_ID = 795, // Patient ID Number, char
179  HDR_PAT_ID_LEN = 12,
180  HDR_DOB_YEAR = 808, // Date of Birth year, u_int
181  HDR_DOB_YEAR_LEN = 4,
182  HDR_DOB_MONTH = 812, // Date of Birth month, u_int
183  HDR_DOB_MONTH_LEN = 4,
184  HDR_DOB_DAY = 816, // Date of Birth day, u_int
185  HDR_DOB_DAY_LEN = 4,
186  HDR_PAT_AGE = 851, // Patient Age, char
187  HDR_PAT_AGE_LEN = 3,
188  HDR_AGE_UNIT = 854, // Patient Age Unit, char
189  HDR_AGE_UNIT_LEN = 1,
190  HDR_REG_YEAR = 1052, // Registration Date year, u_int
191  HDR_REG_YEAR_LEN = 4,
192  HDR_REG_MONTH = 1056, // Registration Date month, u_int
193  HDR_REG_MONTH_LEN = 4,
194  HDR_REG_DAY = 1060, // Registration Date day, u_int
195  HDR_REG_DAY_LEN = 4,
196  HDR_REG_HOUR = 1064, // Registration Time hour, u_int
197  HDR_REG_HOUR_LEN = 4,
198  HDR_REG_MIN = 1068, // Registration Time minute, u_int
199  HDR_REG_MIN_LEN = 4,
200  HDR_REG_SEC = 1072, // Registration Time second, u_int
201  HDR_REG_SEC_LEN = 4,
202  HDR_SLICE_THCK = 1544, // Slice thickness, double
203  HDR_SLICE_THCK_LEN = 8,
204  HDR_TR = 1560, // TR, double
205  HDR_TR_LEN = 8,
206  HDR_TE = 1568, // TE, double
207  HDR_TE_LEN = 8,
208  HDR_FREQ = 1592, // Center Frequency, double
209  HDR_FREQ_LEN = 8,
210  HDR_STATION = 1639, // Station Name, char
211  HDR_STATION_LEN = 5,
212  HDR_CAL_YEAR = 1712, // Calibration Date - year, u_int
213  HDR_CAL_YEAR_LEN = 4,
214  HDR_CAL_MONTH = 1716, // Calibration Date - month, u_int
215  HDR_CAL_MONTH_LEN = 4,
216  HDR_CAL_DAY = 1720, // Calibration Date - day, u_int
217  HDR_CAL_DAY_LEN = 4,
218  HDR_CAL_HOUR = 1724, // Calibration Time - hour, u_int
219  HDR_CAL_HOUR_LEN = 4,
220  HDR_CAL_MIN = 1728, // Calibration Time - minute, u_int
221  HDR_CAL_MIN_LEN = 4,
222  HDR_CAL_SEC = 1732, // Calibration Time - second, u_int
223  HDR_CAL_SEC_LEN = 4,
224  HDR_COIL = 1767, // Receive Coil, char
225  HDR_COIL_LEN = 16,
226  HDR_IMAGE_NUC = 1828, // Imaged Nucleus, char
227  HDR_IMAGE_NUC_LEN = 4,
228  HDR_FLIP_ANGLE = 2112, // Flip Angle, double
229  HDR_FLIP_ANGLE_LEN = 8,
230  HDR_FIELD = 2560, // Field Strength, double
231  HDR_FIELD_LEN = 8,
232  HDR_DISPLAY_SIZE = 2864, // Displayed Matrix Size, u_int
233  HDR_DISPLAY_SIZE_LEN = 4,
234  HDR_SEQPROG_NAME = 2944, // Pulse Sequence Program Name, cha
235  HDR_SEQPROG_NAME_LEN = 65,
236  HDR_WKC_NAME = 3009, // Pulse Sequence Name, char
237  HDR_WKC_NAME_LEN = 65,
238  HDR_AUTHOR = 3074, // Pulse Sequence Author, char
239  HDR_AUTHOR_LEN = 9,
240  HDR_SEQUENCE_TYPE = 3083, // Pulse Sequence Type, char
241  HDR_SEQUENCE_TYPE_LEN = 8,
242  HDR_FOV_ROW = 3744, // Row FOV, double
243  HDR_FOV_ROW_LEN = 8,
244  HDR_FOV_COLUMN = 3752, // Column FOV, double
245  HDR_FOV_COLUMN_LEN = 8,
246  HDR_CENTER_X = 3768, // X Center Point, double
247  HDR_CENTER_X_LEN = 8,
248  HDR_CENTER_Y = 3776, // Y Center Point, double
249  HDR_CENTER_Y_LEN = 8,
250  HDR_CENTER_Z = 3784, // Z Center Point, double
251  HDR_CENTER_Z_LEN = 8,
252  HDR_NORMV_X = 3792, // Nornal Vector X, double
253  HDR_NORMV_X_LEN = 8,
254  HDR_NORMV_Y = 3800, // Nornal Vector Y, double
255  HDR_NORMV_Y_LEN = 8,
256  HDR_NORMV_Z = 3808, // Nornal Vector Z, double
257  HDR_NORMV_Z_LEN = 8,
258  HDR_DIST_ISO = 3816, // Distance from Isocenter, double
259  HDR_DIST_ISO_LEN = 8,
260  HDR_ROWV_X = 3832, // Row vector X, double
261  HDR_ROWV_X_LEN = 8,
262  HDR_ROWV_Y = 3840, // Row vector Y, double
263  HDR_ROWV_Y_LEN = 8,
264  HDR_ROWV_Z = 3848, // Row vector Z, double
265  HDR_ROWV_Z_LEN = 8,
266  HDR_COLMNV_X = 3856, // Column vector X, double
267  HDR_COLMNV_X_LEN = 8,
268  HDR_COLMNV_Y = 3864, // Column vector Y, double
269  HDR_COLMNV_Y_LEN = 8,
270  HDR_COLMNV_Z = 3872, // Column vector Z, double
271  HDR_COLMNV_Z_LEN = 8,
272  HDR_ORNT_SET1X = 3880, // Orientation Set 1 - X, char
273  HDR_ORNT_SET1X_LEN = 3,
274  HDR_ORNT_SET1Y = 3884, // Orientation Set 1 - Y, char
275  HDR_ORNT_SET1Y_LEN = 3,
276  HDR_ORNT_SET1Z = 3888, // Orientation Set 1 - Z, char
277  HDR_ORNT_SET1Z_LEN = 3,
278  HDR_ORNT_SET2X = 3892, // Orientation Set 2 - X, char
279  HDR_ORNT_SET2X_LEN = 3,
280  HDR_ORNT_SET2Y = 3896, // Orientation Set 2 - Y, char
281  HDR_ORNT_SET2Y_LEN = 3,
282  HDR_ORNT_SET2Z = 3900, // Orientation Set 2 - Z, char
283  HDR_ORNT_SET2Z_LEN = 3,
284  HDR_PROTOCOL_NAME = 2944, // Pulse Sequence Name, char
285  HDR_PROTOCOL_NAME_LEN = 64,
286  HDR_PIXELSIZE_ROW = 5000, // Row Pixel Size, double
287  HDR_PIXELSIZE_ROW_LEN = 8,
288  HDR_PIXELSIZE_CLMN = 5008, // Column Pixel Size, double
289  HDR_PIXELSIZE_CLMN_LEN = 8,
290  TEXT_PAT_ID = 5504, // Text Patient ID, char
291  TEXT_PAT_ID_LEN = 12,
292  TEXT_PAT_SEX = 5517, // Text Patient Sex, char
293  TEXT_PAT_SEX_LEN = 1,
294  TEXT_PAT_AGE = 5518, // Text Patient Age, char
295  TEXT_PAT_AGE_LEN = 3,
296  TEXT_AGE_UNIT = 5521, // Text Patient Age Unit (Y=year), char
297  TEXT_AGE_UNIT_LEN = 1,
298  TEXT_PAT_POS = 5529, // Text Patient Position, char
299  TEXT_PAT_POS_LEN = 7,
300  TEXT_IMG_FLAG = 5541, // Text Image Flag (IMAGE=image), char
301  TEXT_IMG_FLAG_LEN = 5,
302  TEXT_IMG_NUMBER = 5546, // Text Image Number, char
303  TEXT_IMG_NUMBER_LEN = 4,
304  TEXT_IMG_DAY = 5559, // Text Date - Day, char
305  TEXT_IMG_DAY_LEN = 2,
306  TEXT_IMG_MONTH = 5562, // Text Date - Month, char
307  TEXT_IMG_MONTH_LEN = 3,
308  TEXT_IMG_YEAR = 5566, // Text Date - Year, char
309  TEXT_IMG_YEAR_LEN = 4,
310  TEXT_IMG_HOUR = 5571, // Text Time - hour, char
311  TEXT_IMG_HOUR_LEN = 2,
312  TEXT_IMG_MIN = 5574, // Text Time - minute, char
313  TEXT_IMG_MIN_LEN = 2,
314  TEXT_ACQ_FLAG = 5577, // Text Acq. Time Flag (TA=time of acq), char
315  TEXT_ACQ_FLAG_LEN = 2,
316  TEXT_ACQ_MIN = 5583, // Text Acq Time - minute, char
317  TEXT_ACQ_MIN_LEN = 2,
318  TEXT_ACQ_SEC = 5586, // Text Acq Time - second, char
319  TEXT_ACQ_SEC_LEN = 2,
320  TEXT_ANNOTATION = 5601, // Text Annotation, char
321  TEXT_ANNOTATION_LEN = 32,
322  TEXT_ORGANIZATION = 5655, // Text Organization, char
323  TEXT_ORGANIZATION_LEN = 25,
324  TEXT_STATION = 5682, // Text Station Name, char
325  TEXT_STATION_LEN = 5,
326  TEXT_ACQ_MTRX_PHASE = 5695, // Acq. Matrix Phase Axis, char
327  TEXT_ACQ_MTRX_PHASE_LEN = 3,
328  TEXT_ACQ_PHASE_DIR = 5698, // Acq. phase direction (h=hor, v=vert), char
329  TEXT_ACQ_PHASE_DIR_LEN = 1,
330  TEXT_ACQ_MTRX_FREQ = 5700, // Acq. matrix Freq Axis, char
331  TEXT_ACQ_MTRX_FREQ_LEN = 3,
332  TEXT_ACQ_MTRX_FREQO = 5703, // Acq freq (o=o " "=blank), char
333  TEXT_ACQ_MTRX_FREQO_LEN = 1,
334  TEXT_ACQ_MTRX_FREQS = 5704, // Acq freq (s=s " "=blank), char
335  TEXT_ACQ_MTRX_FREQS_LEN = 1,
336  TEXT_SEQUENCE = 5706, // Sequence Type, char
337  TEXT_SEQUENCE_LEN = 8,
338  TEXT_FLIP_ANGLE = 5714, // Flip Angle, char
339  TEXT_FLIP_ANGLE_LEN = 3,
340  TEXT_SCAN_FLAG = 5718, // Scan flag ("SCAN"), char */
341  TEXT_SCAN_FLAG_LEN = 4,
342  TEXT_SCANA_NUM = 5723, // Scan Number A, char
343  TEXT_SCANA_NUM_LEN = 3,
344  TEXT_SCANB_NUM = 5726, // Scan Number B, char
345  TEXT_SCANB_NUM_LEN = 3,
346  TEXT_TR_FLAG = 5730, // TR flag ("TR"), char
347  TEXT_TR_FLAG_LEN = 2,
348  TEXT_TR = 5734, // TR, char
349  TEXT_TR_LEN = 7,
350  TEXT_TE_FLAG = 5742, // TE flag ("TE"), char
351  TEXT_TE_FLAG_LEN = 2,
352  TEXT_TE = 5746, // TE, char
353  TEXT_TE_LEN = 5,
354  TEXT_ECHO_NUM = 5752, // Echo number, char
355  TEXT_ECHO_NUM_LEN = 1,
356  TEXT_THCK_FLAG = 5790, // SLice thickness flag ("SL"), char
357  TEXT_THCK_FLAG_LEN = 2,
358  TEXT_SLICE_THCK = 5794, // Slice thickness
359  TEXT_SLICE_THCK_LEN = 7,
360  TEXT_POS_FLAG = 5802, // Slice position flag ("SP"), char
361  TEXT_POS_FLAG_LEN = 2,
362  TEXT_SLICE_POS = 5806, // Slice position, char
363  TEXT_SLICE_POS_LEN = 7,
364  TEXT_ANGLE_FLAG1 = 5814, // Angle flag 1 ("Sag","Cor",or,"Tra"), char
365  TEXT_ANGLE_FLAG1_LEN = 3,
366  TEXT_ANGLE_FLAG2 = 5817, // Angle flag 2 ("<", or ">"), char
367  TEXT_ANGLE_FLAG2_LEN = 1,
368  TEXT_ANGLE_FLAG3 = 5818, // Angle flag 3 ("Sag","Cor",or,"Tra"), char
369  TEXT_ANGLE_FLAG3_LEN = 3,
370  TEXT_ANGLE = 5821, // Angle, char
371  TEXT_ANGLE_LEN = 4,
372  TEXT_FOV_FLAG = 5838, // FOV flag ("FOV"), char
373  TEXT_FOV_FLAG_LEN = 3,
374  TEXT_FOVH = 5842, // Horizontal FOV, char
375  TEXT_FOVH_LEN = 3,
376  TEXT_FOVV = 5846, // Vertical FOV, char
377  TEXT_FOVV_LEN = 3,
378  TEXT_TABLEPOS_FLAG = 5874, // Table Position flag ("TP"), char
379  TEXT_TABLEPOS_FLAG_LEN = 2,
380  TEXT_TABLE_POS = 5878, // Table position
381  TEXT_TABLE_POS_LEN = 7,
382  TEXT_STUDY_FLAG = 5938, // Study flag ("STUDY"), char
383  TEXT_STUDY_FLAG_LEN = 5,
384  TEXT_STUDY_NUM = 5943, // Study number, char
385  TEXT_STUDY_NUM_LEN = 2,
386  TEXT_DOB_DAY = 5956, // Date of Birth - day, char
387  TEXT_DOB_DAY_LEN = 2,
388  TEXT_DOB_MONTH = 5959, // Date of Birth - month, char
389  TEXT_DOB_MONTH_LEN = 3,
390  TEXT_DOB_YEAR = 5963, // Date of Birth - year, char
391  TEXT_DOB_YEAR_LEN = 4,
392  TEXT_STUDY_FLAG2 = 5992, // Study flag 2 ("STU"), char
393  TEXT_STUDY_FLAG2_LEN = 3,
394  TEXT_IMAGE_FLAG2 = 5996, // Image flag 2 ("IMA"), char
395  TEXT_IMAGE_FLAG2_LEN = 3,
396  TEXT_STUDY_NUM2 = 5999, // Study number 2, char
397  TEXT_STUDY_NUM2_LEN = 2,
398  TEXT_IMAGE_NUM2 = 6002, // Image number 2, char
399  TEXT_IMAGE_NUM2_LEN = 2,
400  TEXT_IMAGE_NUM3 = 6013, // Image number 3, char
401  TEXT_IMAGE_NUM3_LEN = 5,
402  TEXT_MODEL_NAME = 6031, // Model Name, char
403  TEXT_MODEL_NAME_LEN = 15,
404  TEXT_PAT_NAME = 6058, // Patient Name, char
405  TEXT_PAT_NAME_LEN = 25,
406  TEXT_START_HOUR = 6085, // Scan start time - hour, char
407  TEXT_START_HOUR_LEN = 2,
408  TEXT_START_MIN = 6088, // Scan start time - minute, char
409  TEXT_START_MIN_LEN = 2,
410  TEXT_START_SEC = 6091, // Scan start time - second, char
411  TEXT_START_SEC_LEN = 2,
412  HDR_TOTAL_LENGTH = 6144 // Total length of Siemens Header
413  } SiemensVisionHeaderInfo;
414  SiemensVisionImageIO(const Self &); //purposely not implemented
415  void operator=(const Self &); //purposely not implemented
416 };
417 } // end namespace itk
418 
419 #endif // __itkSiemensVisionImageIO_h
420