Raw File
OxCalculator.hxx
/*!
 * \file OxCalculator.hxx
 * \author Konrad Werys
 * \date 2018/08/09
 */

#ifndef Tomato_OXCALCULATORT1_HXX
#define Tomato_OXCALCULATORT1_HXX

#include "OxCalculator.h"

namespace Ox {

    /* ****************** */
    /* ***  GETTERS   *** */
    /* ****************** */

    template<typename MeasureType>
    std::map<std::string, MeasureType>
    Calculator<MeasureType>
    ::getResults() const {
        return _Results;
    }

    template< typename MeasureType >
    Model<MeasureType>*
    Calculator<MeasureType>
    ::getModel() const {
        if (!_Model) {
            throw std::runtime_error("Calculator: _Model equals 0. Set _Model");
        };
        return _Model;
    }

    template< typename MeasureType >
    Fitter<MeasureType> *
    Calculator<MeasureType>
    ::getFitter() const {
        if (!_Fitter) {
            throw std::runtime_error("Calculator: _Fitter equals 0. Set _Fitter");
        };
        return _Fitter;
    }

    template< typename MeasureType >
    StartPointCalculator<MeasureType> *
    Calculator<MeasureType>
    ::getStartPointCalculator() const {
        return _StartPointCalculator;
    }

    template< typename MeasureType >
    SignCalculator<MeasureType> *
    Calculator<MeasureType>
    ::getSignCalculator() const {
        return _SignCalculator;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getInvTimes() const {
        return _InvTimes;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getEchoTimes() const {
        return _EchoTimes;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getRepTimes() const {
        return _RepTimes;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getRelAcqTimes() const {
        return _RelAcqTimes;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getSigMag() const {
        if (!_SigMag) {
            throw std::runtime_error("Calculator: _SigMag equals 0. Set _SigMag" );
        };
        return _SigMag;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getSigPha() const {
        return _SigPha;
    }

    template< typename MeasureType >
    const MeasureType *
    Calculator<MeasureType>
    ::getNoise() const {
        return _Noise;
    }

    template< typename MeasureType >
    MeasureType *
    Calculator<MeasureType>
    ::getSignal() const {
        return _Signal;
    }

    template< typename MeasureType >
    MeasureType *
    Calculator<MeasureType>
    ::getSigns() const {
        return _Signs;
    }

    template< typename MeasureType >
    MeasureType *
    Calculator<MeasureType>
    ::getStartPoint()  {
        return _StartPoint;
    }


    template< typename MeasureType >
    MeasureType
    Calculator<MeasureType>
    ::getMeanCutOff() const {
        return _MeanCutOff;
    }

    template< typename MeasureType >
    int
    Calculator<MeasureType>
    ::getNSamples() const {
        if (!_nSamples) {
            throw std::runtime_error("Calculator: _nSamples equals 0. Set _nSamples");
        };
        return _nSamples;
    }

    template< typename MeasureType >
    int
    Calculator<MeasureType>
    ::getNDims() const {
        if (!_nDims) {
            throw std::runtime_error("Calculator: _nDims equals 0. Set _nDims");
        };
        return _nDims;
    }

    /* ****************** */
    /* ***  SETTERS   *** */
    /* ****************** */

    // setters for the 'has a' classes
    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setModel(Model<MeasureType> *_Model) {
        setNDims(_Model->getNDims());
        Calculator::_Model = _Model;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setFitter(Fitter<MeasureType> *_Fitter) {
        Calculator::_Fitter = _Fitter;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setSignCalculator(SignCalculator<MeasureType> *_SignCalculator) {
        Calculator::_SignCalculator = _SignCalculator;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setStartPointCalculator(StartPointCalculator<MeasureType> *_StartPointCalculator) {
        Calculator::_StartPointCalculator = _StartPointCalculator;
    }

    // setters for the data
    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setInvTimes(const MeasureType *_InvTimes) {
        Calculator::_InvTimes = _InvTimes;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setEchoTimes(const MeasureType *_EchoTimes) {
        Calculator::_EchoTimes = _EchoTimes;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setSigMag(const MeasureType *_SigMag) {
        Calculator::_SigMag = _SigMag;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setSigPha(const MeasureType *_SigPha) {
        Calculator::_SigPha = _SigPha;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setNoise(const MeasureType *_Noise) {
        Calculator::_Noise = _Noise;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setMeanCutOff(MeasureType _MeanCutOff) {
        Calculator::_MeanCutOff = _MeanCutOff;
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setNSamples(int nSamples) {

        delete [] _Signal; _Signal = 0;
        delete [] _Signs; _Signs = 0;

        Calculator::_nSamples = nSamples;

        _Signal = new MeasureType[nSamples];
        _Signs = new MeasureType[nSamples];

        for (int i = 0; i < nSamples; ++i){
            _Signal[i] = 0;
            _Signs[i] = 1;
        }
    }

    /**
     * _StartPoint is allocated here!!!
     * @param _nDims
     */
    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::setNDims(int nDims){

        delete [] _StartPoint; _StartPoint = 0;

        Calculator::_nDims = nDims;

        _StartPoint = new MeasureType[nDims];

        for (int i = 0; i < nDims; ++i){
            _StartPoint[i] = 0;
        }
    }

    template< typename MeasureType >
    void
    Calculator<MeasureType>
    ::disp(){
        int nSamples = this->getNSamples();
        std::cout << "\nYou called disp() on a Calculator object " << this
                  << " with nSamples: " << nSamples
                  << " nDims: " << _nDims;
        KWUtil::printArray(_InvTimes != 0, nSamples, _InvTimes,       (char*)"\nInvTimes:    ");
        KWUtil::printArray(_EchoTimes != 0, nSamples, _EchoTimes,     (char*)"\nEchoTimes:   ");
        KWUtil::printArray(_RepTimes != 0, nSamples, _RepTimes,       (char*)"\nRepTimes:    ");
        KWUtil::printArray(_RelAcqTimes != 0, nSamples, _RelAcqTimes, (char*)"\nRelAcqTimes: ");
        KWUtil::printArray(_SigMag != 0, nSamples, _SigMag,           (char*)"\nSigMag:      ");
        KWUtil::printArray(_SigPha != 0, nSamples, _SigPha,           (char*)"\nSigPha:      ");
        KWUtil::printArray(_Noise != 0, nSamples, _Noise,             (char*)"\nNoise:       ");
        KWUtil::printArray(_Signal != 0, nSamples, _Signal,           (char*)"\nSignal:      ");
        KWUtil::printArray(_Signs != 0, nSamples, _Signs,             (char*)"\nSigns:       ");
        KWUtil::printArray(_StartPoint != 0, _nDims, _StartPoint,     (char*)"\nStart point: ");
        std::cout << std::endl;
        if(_Model) {
            std::cout << "This Calculator contains the following Model object: ";
            _Model->disp();
        }

        if(_Fitter) {
            std::cout << "This Calculator contains the following Fitter object: ";
            _Fitter->disp();
        }

        if(_SignCalculator) {
            std::cout << "This Calculator contains the following SignCalculator object: ";
            _SignCalculator->disp();
        };

        if(_StartPointCalculator) {
            std::cout << "This Calculator contains the following StartPointCalculator object: ";
            _StartPointCalculator->disp();
        };
    }

} //namespace Ox

#endif //Tomato_OXCALCULATORT1_H
back to top