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();
00079
00080
00081 m_SeriesUIDs.clear();
00082 m_FileNames.clear();
00083 m_AppHelper.Clear();
00084 }
00085
00086
00087
00088
00089
00090
00091 m_DirectorySetTime.Modified();
00092 }
00093
00095 itkGetStringMacro(Directory);
00096
00099 itkSetMacro(Ascending, bool);
00100 itkGetMacro(Ascending, bool);
00101 itkBooleanMacro(Ascending);
00102
00106 const std::vector<std::string> &GetSeriesUIDs(bool recursive = false);
00107
00110 const std::vector<std::string> &GetSeriesDescriptions(){return m_SeriesDescriptions;}
00111 const std::vector<std::string> &GetSeriesBodyParts(){return m_BodyParts;}
00112 const std::vector<std::string> &GetSeriesScanOptions(){return m_ScanOptions;}
00113
00117 const std::vector<std::string> &GetFileNames (bool recursive = false);
00118
00123 const std::vector<std::string> &GetFileNames (const std::string& seriesUID,
00124 bool recursive = false);
00125
00130 typedef enum {SortByImageNumber, SortBySliceLocation, SortByImagePositionPatient} FileNameSortingOrderType;
00131 itkSetMacro(FileNameSortingOrder, FileNameSortingOrderType);
00132 itkGetMacro(FileNameSortingOrder, FileNameSortingOrderType);
00133 void SetFileNameSortingOrderToSortByImageNumber()
00134 { this->SetFileNameSortingOrder(SortByImageNumber); }
00135 void SetFileNameSortingOrderToSortBySliceLocation()
00136 { this->SetFileNameSortingOrder(SortBySliceLocation); }
00137 void SetFileNameSortingOrderToSortByImagePositionPatient()
00138 { this->SetFileNameSortingOrder(SortByImagePositionPatient); }
00139
00143 std::string GetFileName(const std::string& instanceUID);
00144
00145
00146 protected:
00147 DICOMSeriesFileNames();
00148 ~DICOMSeriesFileNames() {};
00149 void PrintSelf(std::ostream& os, Indent indent) const;
00150
00151 private:
00152 DICOMSeriesFileNames(const Self&);
00153 void operator=(const Self&);
00154
00155 int CanReadFile(const char* fname);
00156 void RecurseDirectory( std::string directory, std::vector<std::string> &filenames);
00157
00158 itkdicomparser::DICOMParser m_Parser;
00159 itkdicomparser::DICOMAppHelper m_AppHelper;
00160
00161 bool m_Ascending;
00162 std::string m_Directory;
00163 std::vector<std::string> m_FileNames;
00164 std::vector<std::string> m_SeriesUIDs;
00165 std::vector<std::string> m_SeriesDescriptions;
00166 std::vector<std::string> m_BodyParts;
00167 std::vector<std::string> m_ScanOptions;
00168
00169 FileNameSortingOrderType m_FileNameSortingOrder;
00170
00171 TimeStamp m_DirectorySetTime;
00172 TimeStamp m_DirectoryScanTime;
00173 };
00174
00175 }
00176
00177 #endif // __itkDICOMSeriesFileNames_h