Raw File
OxCalculatorT2Truncation.h
/*!
 * \file OxCalculatorT2Truncation.h
 * \author Konrad Werys
 * \date 2019/11/25
 */

#ifndef Tomato_OXCalculatorT2Truncation_H
#define Tomato_OXCalculatorT2Truncation_H

#include "OxCalculator.h"
#include "tomatolib_export.h"

namespace Ox {

    /**
     * \class CalculatorT2Truncation
     * \brief
     * \details
     * @tparam MeasureType
     */
    template< typename MeasureType >
    class CalculatorT2Truncation : public Calculator<MeasureType> {
    public:

        /**
         * do all the checks and  prepare to do the calculation, for example calc signal/signs and _TRRaverageHB
         * @return success/failure
         */
        virtual int prepareToCalculate();

        /**
         * calling calculateMolli(int nSamples, const MeasureType* invTimes, MeasureType* signal, MeasureType* signs)
         * @return success/failure
         */
        virtual int calculate();

        /**
         * Calculate goodness of fit map
         * @param nSamples
         * @param invTimes
         * @param signal
         * @param parameters
         * @return
         */
        MeasureType calculateR2AbsFromModel(int nSamples, const MeasureType* time, const MeasureType* signal, const MeasureType* parameters);

        /**
         * /throw exception if _EchoTimes == 0
         * @return
         */
        const MeasureType * getEchoTimes() const;

        /**
         * constructor
         */
        CalculatorT2Truncation() : Calculator<MeasureType>(){
            _SignalAboveSnrLimit = 0;
            _EchoTimesOfSignalAboveSnrLimit = 0;
            _NSamplesAboveSnrLimit = 0;
            _NoiseLimit = 2.;
        }

        /**
         * destructor
         */
        virtual ~CalculatorT2Truncation(){
            delete [] _SignalAboveSnrLimit;
            delete [] _EchoTimesOfSignalAboveSnrLimit;
        }

        /**
         * cloning
         * @return
         */
        virtual Calculator<MeasureType> *newByCloning() { return new CalculatorT2Truncation<MeasureType>(*this); }

    private:
        MeasureType _NoiseLimit;
        MeasureType *_SignalAboveSnrLimit; // TODO: Static allocation
        MeasureType *_EchoTimesOfSignalAboveSnrLimit; // TODO: Static allocation
        size_t _NSamplesAboveSnrLimit;

    };

} //namespace Ox

#ifndef TOMATOLIB_COMPILED
#include "OxCalculatorT2Truncation.hxx"
#endif //TOMATOLIB_COMPILED

#endif //Tomato_OXCalculatorT2Truncation_H
back to top