/*! * \file Tomato.h * \author Konrad Werys * \date 2018/08/14 */ #ifndef Tomato_Tomato_H #define Tomato_Tomato_H #include "CmakeConfigForTomato.h" #ifdef USE_ITK #include "TomatoOptions.h" #include "TomatoColormap.h" #include "itkReadFileListFilter.h" #include "itkReadDirectoryFilter.h" #include "itkSortInvTimesImageFilter.h" #include "itkCalculatorT1ImageFilter.h" #include "itkColorbar2DImageFilter.h" #include "itkNShmolliSamplesUsedTo123ImageFilter.h" #include "itkTimeProbe.h" // for exporting #include "gdcmUIDGenerator.h" #include "itkGDCMImageIO.h" #include "itkGDCMSeriesFileNames.h" #include "itkMultiplyImageFilter.h" #include "itkImageFileWriter.h" #include "itkFileTools.h" #include "itkAdaptImageFilter.h" #ifdef USE_VTK #include "QuickView.h" #endif //USE_VTK namespace Ox { /** * \class Tomato * includes factories and methods needed for calculation */ template< typename MeasureType > class Tomato { public: // typedefs primitive data types typedef MeasureType InputPixelType; typedef int16_t OutputPixelType; // int does not work with some dicom viewers, be sure to use short (int16) // typedefs image data types typedef itk::Image ImageType3D; typedef itk::Image ImageType2D; typedef itk::Image OutputImageType; typedef itk::ReadFileListFilter ReadFileListFilterType; typedef itk::ReadDirectoryFilter ReadDirectoryFilterType; typedef itk::SortInvTimesImageFilter SortInvTimesImageFilterType; typedef itk::CalculatorT1ImageFilter CalculatorT1ImageFilterType; typedef itk::MetaDataDictionary DictionaryType; // member variables TomatoOptions *_opts; InputPixelType *_invTimes; InputPixelType *_echoTimes; int _nSamples; typename ImageType3D::Pointer _imageMag; typename ImageType3D::Pointer _imagePha; typename CalculatorT1ImageFilterType::Pointer _imageCalculatorItk; //SortInvTimesImageFilterType::Pointer _sorterMag; //SortInvTimesImageFilterType::Pointer _sorterPha; DictionaryType _dictionaryInput; /** * readAndSort * @return success/failure */ int readAndSort(); /** * calculate * @return success/failure */ int calculate(); /** * visualise * @return success/failure */ int visualise(); /** * method so long and ugly, that I put it in a separate file * @return success/failure */ int exportToDicom(); /** * constructor * @param inputFileName */ Tomato(std::string inputFileName); /** * \brief do not forget about the virtual destructor, see * https://stackoverflow.com/questions/461203/when-to-use-virtual-destructors */ virtual ~Tomato(); private: /** * We do not want the default constructor, so let's make it private. * I cant delete it to be compatible with c++98 */ Tomato(){}; /** * readAndSortInputFileList * @return success/failure */ int readAndSortInputFileList(); /** * readAndSortInputDirs * @return success/failure */ int readAndSortInputDirs(); }; } // namespace Ox #include "Tomato.hxx" #include "Tomato_export.hxx" #endif #endif //Tomato_Tomato_H