1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
/*!
 * \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"

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
        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();

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

        /**
         * constructor
         * @param inputFileNam
         */
        OriginalShmolliDicomReader(){
            _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(){
            delete [] _invTimes;
        };
    };

} // namespace Ox

#include "OxOriginalShmolliDicomReader.hxx"

#endif

#endif //Tomato_OxOriginalShmolliDicomReader_H