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