Tomato.h
/*!
* \file Tomato.h
* \author Konrad Werys
* \date 2018/08/14
*/
#ifndef Tomato_Tomato_H
#define Tomato_Tomato_H
#include "CmakeConfigForTomato.h"
#include "tomatolib_export.h"
#ifdef USE_ITK
#include "TomatoOptions.h"
#include "TomatoColormap.h"
#include "itkReadFileListFilter.h"
#include "itkSortInvTimesImageFilter.h"
#include "itkCalculatorT1ImageFilter.h"
#include "itkColorbar2DImageFilter.h"
#include "itkNShmolliSamplesUsedTo123ImageFilter.h"
#include "itkTimeProbe.h"
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<InputPixelType, 3> ImageType3D;
typedef itk::Image<InputPixelType, 2> ImageType2D;
typedef itk::Image<OutputPixelType, 2> OutputImageType;
typedef itk::ReadFileListFilter<ImageType3D> ReadFileListFilterType;
typedef itk::SortInvTimesImageFilter<ImageType3D, ImageType3D> SortInvTimesImageFilterType;
typedef itk::CalculatorT1ImageFilter<ImageType3D, ImageType2D> CalculatorT1ImageFilterType;
typedef itk::MetaDataDictionary DictionaryType;
// member variables
TomatoOptions<InputPixelType> *_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();
/**
* calls exportT1ToDicom or exportT2ToDicom
* @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(){};
/**
* method so long and ugly, that I put it in a separate file
* @return success/failure
*/
int exportT1ToDicom();
/**
* method so long and ugly, that I put it in a separate file
* @return success/failure
*/
int exportT2ToDicom();
};
} // namespace Ox
#ifndef TOMATOLIB_COMPILED
#include "Tomato.hxx"
#include "Tomato_exportT1.hxx"
#include "Tomato_exportT2.hxx"
#endif // TOMATOLIB_COMPILED
#endif // USE_ITK
#endif // Tomato_Tomato_H