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