00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkDICOMSeriesFileNames_h
00018 #define __itkDICOMSeriesFileNames_h
00019
00020 #ifdef _MSC_VER
00021 #pragma warning ( disable : 4786 )
00022 #endif
00023
00024 #include "itkObject.h"
00025 #include "itkObjectFactory.h"
00026 #include "itkExceptionObject.h"
00027 #include <vector>
00028
00029 #include "DICOMParser.h"
00030 #include "DICOMAppHelper.h"
00031
00032 namespace itk
00033 {
00034
00048 class ITK_EXPORT DICOMSeriesFileNames : public Object
00049 {
00050 public:
00052 typedef DICOMSeriesFileNames Self;
00053 typedef Object Superclass;
00054 typedef SmartPointer<Self> Pointer;
00055
00057 itkNewMacro(Self);
00058
00060 itkTypeMacro(DICOMSeriesFileNames, Object);
00061
00062
00063
00073 void SetDirectory(const std::string& dir)
00074 {
00075 if (m_Directory != dir)
00076 {
00077 m_Directory = dir;
00078 this->Modified();
00080
00081
00082 m_SeriesUIDs.clear();
00083 m_FileNames.clear();
00084 m_AppHelper.Clear();
00085 }
00086
00087
00088
00089
00090
00091
00092 m_DirectorySetTime.Modified();
00093 }
00094
00096 itkGetStringMacro(Directory);
00097
00100 itkSetMacro(Ascending, bool);
00101 itkGetMacro(Ascending, bool);
00102 itkBooleanMacro(Ascending);
00104
00108 const std::vector<std::string> &GetSeriesUIDs(bool recursive = false);
00109
00112 const std::vector<std::string> &GetSeriesDescriptions(){return m_SeriesDescriptions;}
00113 const std::vector<std::string> &GetSeriesBodyParts(){return m_BodyParts;}
00114 const std::vector<std::string> &GetSeriesScanOptions(){return m_ScanOptions;}
00116
00120 const std::vector<std::string> &GetFileNames (bool recursive = false);
00121
00126 const std::vector<std::string> &GetFileNames (const std::string& seriesUID,
00127 bool recursive = false);
00128
00133 typedef enum {SortByImageNumber, SortBySliceLocation, SortByImagePositionPatient} FileNameSortingOrderType;
00134 itkSetEnumMacro(FileNameSortingOrder, FileNameSortingOrderType);
00135 itkGetEnumMacro(FileNameSortingOrder, FileNameSortingOrderType);
00136 void SetFileNameSortingOrderToSortByImageNumber()
00137 { this->SetFileNameSortingOrder(SortByImageNumber); }
00138 void SetFileNameSortingOrderToSortBySliceLocation()
00139 { this->SetFileNameSortingOrder(SortBySliceLocation); }
00140 void SetFileNameSortingOrderToSortByImagePositionPatient()
00141 { this->SetFileNameSortingOrder(SortByImagePositionPatient); }
00143
00147 std::string GetFileName(const std::string& instanceUID);
00148
00149
00150 protected:
00151 DICOMSeriesFileNames();
00152 ~DICOMSeriesFileNames() {};
00153 void PrintSelf(std::ostream& os, Indent indent) const;
00154
00155 private:
00156 DICOMSeriesFileNames(const Self&);
00157 void operator=(const Self&);
00158
00159 int CanReadFile(const char* fname);
00160 void RecurseDirectory( std::string directory, std::vector<std::string> &filenames);
00161
00162 itkdicomparser::DICOMParser m_Parser;
00163 itkdicomparser::DICOMAppHelper m_AppHelper;
00164
00165 bool m_Ascending;
00166 std::string m_Directory;
00167 std::vector<std::string> m_FileNames;
00168 std::vector<std::string> m_SeriesUIDs;
00169 std::vector<std::string> m_SeriesDescriptions;
00170 std::vector<std::string> m_BodyParts;
00171 std::vector<std::string> m_ScanOptions;
00172
00173 FileNameSortingOrderType m_FileNameSortingOrder;
00174
00175 TimeStamp m_DirectorySetTime;
00176 TimeStamp m_DirectoryScanTime;
00177 };
00178
00179 }
00180
00181 #endif // __itkDICOMSeriesFileNames_h
00182