Raw File
TomatoOnePixel.h
/*!
 * \file TomatoOnePixel.h
 * \author Konrad Werys
 * \date 2019/11/26
 */

#ifndef TOMATO_TOMATOONEPIXEL_H
#define TOMATO_TOMATOONEPIXEL_H

#include "TomatoOptions.h"

namespace Ox {
    template<typename MeasureType>
    std::map<std::string, MeasureType> calculateOnePixel(TomatoOptions<MeasureType> opts) {

        // alloc and init
        Calculator<MeasureType> *calculator = FactoryOfCalculators<MeasureType>::newByFactory(&opts);
        Model<MeasureType> *model = FactoryOfModels<MeasureType>::newByFactory(&opts);
        Fitter<MeasureType> *fitter = FactoryOfFitters<MeasureType>::newByFactory(&opts);
        SignCalculator<MeasureType> *signCalculator = FactoryOfSignCalculators<MeasureType>::newByFactory(&opts);
        StartPointCalculator<MeasureType> *startPointCalculator = FactoryOfStartPointCalculators<MeasureType>::newByFactory(&opts);

        if (opts.signal_magnitude.size() > 0) {
            calculator->setNSamples(opts.signal_magnitude.size());
            calculator->setSigMag(&(opts.signal_magnitude)[0]);
        } else {
            throw std::runtime_error("\nNo magnitude signal, I cannot calculate anything");
        }

        if (opts.signal_phase.size() > 0) {
            calculator->setSigMag(&(opts.signal_phase)[0]);
        }

        if (opts.noise.size() > 0) {
            calculator->setNoise(&(opts.noise)[0]);
        }

        if (opts.inversion_times.size() > 0) {
            calculator->setInvTimes(&(opts.inversion_times)[0]);
        }

        if (opts.echo_times.size() > 0) {
            calculator->setEchoTimes(&(opts.echo_times)[0]);
        }

        // configure calculator
        calculator->setModel(model);
        calculator->setFitter(fitter);
        calculator->setSignCalculator(signCalculator);
        calculator->setStartPointCalculator(startPointCalculator);

        calculator->calculate();

        std::map<std::string, MeasureType> results = calculator->getResults();

        std::cout << "Results: \n";
        for (typename std::map<std::string, MeasureType>::const_iterator it = results.begin(); it != results.end(); ++it) {
            std::cout << it->first << " " << it->second << "\n";
        }
        std::cout << std::endl;

        delete model;
        delete fitter;
        delete signCalculator;
        delete startPointCalculator;
        delete calculator;

        return results;
    }
} // namespace Ox

#endif //TOMATO_TOMATOONEPIXEL_H
back to top