IGSTK
igstkDICOMImageReader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Image Guided Surgery Software Toolkit
4  Module: $RCSfile: igstkDICOMImageReader.h,v $
5  Language: C++
6  Date: $Date: 2009-06-15 19:54:58 $
7  Version: $Revision: 1.18 $
8 
9  Copyright (c) ISC Insight Software Consortium. All rights reserved.
10  See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 #ifndef __igstkDICOMImageReader_h
18 #define __igstkDICOMImageReader_h
19 
20 #include "igstkImageReader.h"
21 
22 #include "igstkEvents.h"
23 
24 #include "itkImageSeriesReader.h"
25 #include "itkEventObject.h"
26 #include "itkGDCMImageIO.h"
27 #include "itkGDCMSeriesFileNames.h"
28 
29 
30 namespace igstk
31 {
32 
33 #define igstkUnsafeGetMacro(name,type) \
34 virtual const type & Get##name () const \
35 { \
36  igstkLogMacro( CRITICAL, \
37  "igstk::DICOMImageReader::Get" #name " unsafe method called...\n"); \
38  return this->m_##name; \
39 }
40 
41 
42 igstkEventMacro( DICOMModalityEvent, StringEvent);
43 igstkEventMacro( DICOMPatientNameEvent, StringEvent);
44 igstkEventMacro( DICOMImageReaderEvent, StringEvent);
45 
46 // Invalid request error event
47 igstkEventMacro( DICOMImageReaderErrorEvent, IGSTKErrorWithStringEvent );
48 igstkEventMacro( DICOMInvalidRequestErrorEvent,
49  DICOMImageReaderErrorEvent );
50 
51 // Events to handle errors with the ImageDirectory name
52 igstkEventMacro(DICOMImageDirectoryEmptyErrorEvent,
53  DICOMImageReaderErrorEvent );
54 igstkEventMacro(DICOMImageDirectoryDoesNotExistErrorEvent,
55  DICOMImageReaderErrorEvent );
56 igstkEventMacro(DICOMImageDirectoryIsNotDirectoryErrorEvent,
57  DICOMImageReaderErrorEvent );
58 igstkEventMacro(DICOMImageDirectoryDoesNotHaveEnoughFilesErrorEvent,
59  DICOMImageReaderErrorEvent );
60 
61 // Image series filename generation error event
62 igstkEventMacro(DICOMImageSeriesFileNamesGeneratingErrorEvent,
63  DICOMImageReaderErrorEvent );
64 
65 //Image reading error
66 igstkEventMacro(DICOMImageReadingErrorEvent,
67  DICOMImageReaderErrorEvent );
68 
69 
84 template <class TImageSpatialObject>
85 class DICOMImageReader : public ImageReader< TImageSpatialObject >
86 {
87 
88 public:
89 
93 
94 public:
95 
98  typedef std::string DirectoryNameType;
99 
101  void RequestSetDirectory( const DirectoryNameType & directory );
102 
103  void RequestSetProgressCallback(itk::Command *progressCallback)
104  {
105  m_ImageSeriesReader->AddObserver(itk::ProgressEvent(),progressCallback);
106  }
107 
108  void RequestSetAbortCallback(itk::Command *abortCallback)
109  {
110  m_ImageSeriesReader->AddObserver(itk::AbortEvent(),abortCallback);
111  }
112 
114  void RequestReadImage();
115 
118 
121 
123  typedef std::string DICOMInformationType;
124 
129  bool FileSuccessfullyRead() const { return m_FileSuccessfullyRead; }
130 
138 
146 
154 
156  void RequestGetImage();
157 
159  igstkLoadedTemplatedObjectEventMacro( ImageModifiedEvent, IGSTKEvent,
160  TImageSpatialObject);
161 
164 
165 protected:
166 
167  DICOMImageReader( void );
168  ~DICOMImageReader( void );
169 
171  itk::GDCMSeriesFileNames::Pointer m_FileNames;
172  itk::GDCMImageIO::Pointer m_ImageIO;
173 
174  typedef typename Superclass::ImageType ImageType;
175 
176  typedef itk::ImageSeriesReader< ImageType > ImageSeriesReaderType;
177  typedef itk::ImageFileReader< ImageType > ImageReaderType;
178 
180  typename ImageSeriesReaderType::Pointer m_ImageSeriesReader;
181  typename ImageReaderType::Pointer m_ImageFileReader;
182 
184  void PrintSelf( std::ostream& os, itk::Indent indent ) const;
185 
188  virtual const ImageType * GetITKImage() const;
189 
190 private:
191 
194  DICOMImageReader(const Self&); //purposely not implemented
195  void operator=(const Self&); //purposely not implemented
196 
197 
198  DirectoryNameType m_ImageDirectoryName;
199  DirectoryNameType m_ImageDirectoryNameToBeSet;
200 
202  igstkDeclareStateMacro( Idle );
203  igstkDeclareStateMacro( ImageDirectoryNameRead );
204  igstkDeclareStateMacro( AttemptingToReadImage );
205  igstkDeclareStateMacro( ImageSeriesFileNamesGenerated );
206  igstkDeclareStateMacro( ImageRead );
207 
209  igstkDeclareInputMacro( ReadImage );
210  igstkDeclareInputMacro( ImageDirectoryNameValid );
211  igstkDeclareInputMacro( ImageReadingSuccess );
212  igstkDeclareInputMacro( ImageSeriesFileNamesGeneratingSuccess );
213  igstkDeclareInputMacro( ResetReader );
214  igstkDeclareInputMacro( GetImage );
215 
217  igstkDeclareInputMacro( ImageReadingError );
218  igstkDeclareInputMacro( ImageDirectoryNameIsEmpty );
219  igstkDeclareInputMacro( ImageDirectoryNameDoesNotExist );
220  igstkDeclareInputMacro( ImageDirectoryNameIsNotDirectory );
221  igstkDeclareInputMacro( ImageDirectoryNameDoesNotHaveEnoughFiles );
222  igstkDeclareInputMacro( ImageSeriesFileNamesGeneratingError );
223 
229  virtual bool CheckModalityType( DICOMInformationType modality );
230 
232  igstkDeclareInputMacro( GetModalityInformation );
233  igstkDeclareInputMacro( GetPatientNameInformation );
234 
236  void SetDirectoryNameProcessing();
237 
240  void ReadDirectoryFileNamesProcessing();
241 
243  void AttemptReadImageProcessing();
244 
247  void ReportInvalidRequestProcessing();
248 
250  void ReportImageDirectoryEmptyErrorProcessing();
251 
253  void ReportImageDirectoryDoesNotExistErrorProcessing();
254 
257  void ReportImageDirectoryDoesNotHaveEnoughFilesErrorProcessing();
258 
261  void ReportImageSeriesFileNamesGeneratingErrorProcessing();
262 
265  void ReportImageSeriesFileNamesGeneratingSuccessProcessing();
266 
268  void ReportImageReadingErrorProcessing();
269 
271  void ReportImageReadingSuccessProcessing();
272 
274  void ReportImageProcessing();
275 
277  void ResetReaderProcessing();
278 
281  void ReportImageDirectoryIsNotDirectoryErrorProcessing();
282 
285  void GetModalityInformationProcessing();
286 
289  void GetPatientNameInformationProcessing();
290 
292  bool m_FileSuccessfullyRead;
293 
295  DICOMInformationType m_PatientID;
296  DICOMInformationType m_PatientName;
297  DICOMInformationType m_Modality;
298  DICOMInformationType m_GantryTilt;
299 
301  std::string m_ImageReadingErrorInformation;
302 };
303 
304 } // end namespace igstk
305 
306 #ifndef IGSTK_MANUAL_INSTANTIATION
307 #include "igstkDICOMImageReader.txx"
308 #endif
309 
310 #endif // __igstkDICOMImageReader_h
ImageSeriesReaderType::Pointer m_ImageSeriesReader
Internal itkImageSeriesReader.
void RequestGetImage()
Request to get the output image as an event.
Base class for all the IGSTK classes.
Definition: igstkObject.h:40
void RequestGetModalityInformation()
This function should be used to request modality info.
bool FileSuccessfullyRead() const
Precondition that should be invoked and verified before attempting to use the values of the methods G...
itk::ImageSeriesReader< ImageType > ImageSeriesReaderType
igstkEventMacro(AuroraTrackerToolEvent, StringEvent)
void PrintSelf(std::ostream &os, itk::Indent indent) const
Print the object information in a stream.
itk::GDCMSeriesFileNames::Pointer m_FileNames
Helper classes for the image series reader.
Superclass::ImageType ImageType
igstkLoadedTemplatedObjectEventMacro(ImageModifiedEvent, IGSTKEvent, TImageSpatialObject)
Event type.
virtual const ImageType * GetITKImage() const
This method MUST be protected n order to prevent unsafe access to the ITK image level.
This class reads DICOM files.
void RequestSetProgressCallback(itk::Command *progressCallback)
igstkUnsafeGetMacro(PatientName, DICOMInformationType)
Unsafe Get Macro for having access to the Patient Name.
void RequestSetAbortCallback(itk::Command *abortCallback)
void RequestReadImage()
This method request image read.
itk::GDCMImageIO::Pointer m_ImageIO
void RequestGetPatientNameInformation()
This function will be used to request patient name info.
#define igstkLoggerMacro()
Macro that defines all the standard elements related to the Logger.
Definition: igstkMacros.h:143
itk::ImageFileReader< ImageType > ImageReaderType
#define igstkStandardTemplatedAbstractClassTraitsMacro(classname, superclassname)
Convenience macro for the traits of an abstract templated class.
Definition: igstkMacros.h:280
This class is a base class for all image reader classes.
ImageReaderType::Pointer m_ImageFileReader
std::string DICOMInformationType
Type used for returning string values from the DICOM header.