Raw File
/*!
 * \file OxOriginalShmolliDicomReader.h
 * \author Konrad Werys
 * \date 2018/08/24
 */

#ifndef Tomato_OxOriginalShmolliDicomReader_H
#define Tomato_OxOriginalShmolliDicomReader_H

#include "CmakeConfigForTomato.h"
#ifdef USE_ITK

#include "itkReadFileListFilter.h"
#include "itkSortInvTimesImageFilter.h"
#include "itkExtractImageFilter.h"

#ifdef USE_VTK
#include "QuickView.h"
#endif //USE_VTK

namespace Ox {

    /**
     * \class OxOriginalShmolliDicomReader
     * includes factories and methods needed for calculation
     */
    template< typename MeasureType >
    class OriginalShmolliDicomReader {

    public:
        // typedefs primitive data types
        typedef MeasureType InputPixelType;
        typedef MeasureType OutputPixelType;

        // typedefs image data types
        typedef itk::Image<InputPixelType, 3> Image3dType;
        typedef itk::Image<OutputPixelType, 2> Image2dType;
        typedef itk::ReadFileListFilter<Image3dType> ReadFileListFilterType;
        typedef itk::SortInvTimesImageFilter<Image3dType, Image3dType> SortInvTimesImageFilterType;

        // member variables
        bool _visualise;
        InputPixelType *_invTimes;
        InputPixelType *_echoTimes;
        int _nSamples;
        typename Image3dType::Pointer _imageMag;
        typename Image3dType::Pointer _imagePha;
        typename Image2dType::Pointer _imageT1grey;
        typename Image2dType::Pointer _imageT1color;
        typename Image2dType::Pointer _imageR2;
        typename Image2dType::Pointer _imageA;
        typename Image2dType::Pointer _imageB;
        typename Image2dType::Pointer _imageT1star;
        typename Image2dType::Pointer _imageNShmolliSamplesUsed;
        typename Image2dType::Pointer _imageChiSqrt;
        typename Image2dType::Pointer _imageSnr;

        std::vector<std::string> _filesMag;
        std::vector<std::string> _filesPha;
        std::vector<std::string> _filesT1;
        std::vector<std::string> _filesFitparams;

        /**
         * readAndSort
         * @return success/failure
         */
        int readAndSort();

        /**
         * visualise
         * @return success/failure
         */
        int visualise();

        int copyFromImage(MeasureType* array, const typename Image3dType::Pointer image, const typename Image3dType::IndexType index);

        /**
         * constructor
         * @param inputFileNam
         */
        OriginalShmolliDicomReader(){
            _visualise = false;
            _invTimes = 0;
            _echoTimes = 0;
            _nSamples = 0;
            _imageMag = 0;
            _imagePha = 0;
            _imageT1grey = 0;
            _imageT1color = 0;
            _imageA = 0;
            _imageB = 0;
            _imageT1star = 0;
            _imageNShmolliSamplesUsed = 0;
            _imageChiSqrt = 0;
            _imageSnr = 0;
        };

        /**
         * \brief do not forget about the virtual destructor, see
         * https://stackoverflow.com/questions/461203/when-to-use-virtual-destructors
         */
        virtual ~OriginalShmolliDicomReader(){};
    };

} // namespace Ox

#include "OxOriginalShmolliDicomReader.hxx"

#endif

#endif //Tomato_OxOriginalShmolliDicomReader_H
back to top