/* * StatisticCorrelationCreator.hh * * Created on: Mar 26, 2019 * Author: AKKA IS */ #ifndef STATISTICCORRELATIONCREATOR_HH_ #define STATISTICCORRELATIONCREATOR_HH_ #include "Operation.hh" #include "ParameterManager.hh" #include "ParamMgr.hh" #include "ParamData.hh" #include "VisitorOfParamData.hh" #include "AMDA_exception.hh" #include "CorrelationFunctions.hh" namespace AMDA { namespace Parameters { /** * @class SumIntoTableIndexesCreator * @brief Creator of the Operation SumIntoTableIndexes parameterized with ParamData input type. * @details Implement the interface VisitorOfParamData. */ class StatisticCorrelationCreator : public VisitorOfParamData { public: /** * @brief Constructor. */ StatisticCorrelationCreator(Process& pProcess, TimeIntervalListSPtr pTimeIntervalList, ParamData& paramInput, ParamData& secondParamData, double windowtime, std::string type_) : _process(pProcess), _timeIntervalList(pTimeIntervalList), _paramData(paramInput), _secondParamData(secondParamData), _windowtime(windowtime), _type(type_) { _paramData.accept(*this); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireShort *) */ void visit(ParamDataScalaireShort *) { createOperation<short>(); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireFloat *) */ void visit(ParamDataScalaireFloat *) { createOperation<float>(); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireDouble *) */ void visit(ParamDataScalaireDouble *) { createOperation<double>(); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireLongDouble *) */ void visit(ParamDataScalaireLongDouble *) { createOperation<long double>(); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireInt *) */ void visit(ParamDataScalaireInt *) { createOperation<int>(); } /** * @overload VisitorOfParamData::visit(ParamDataLogicalData *) */ void visit(ParamDataLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DShort *) */ void visit(ParamDataTab1DShort *) { createOperation1D<short>(); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DFloat *) */ void visit(ParamDataTab1DFloat *) { createOperation1D<float>(); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DDouble *) */ void visit(ParamDataTab1DDouble *) { createOperation1D<double>(); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DLongDouble *) */ void visit(ParamDataTab1DLongDouble *) { createOperation1D<long double>(); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DInt *) */ void visit(ParamDataTab1DInt *) { createOperation1D<int>(); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DLogicalData *) */ void visit(ParamDataTab1DLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DShort *) */ void visit(ParamDataTab2DShort *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DFloat *) */ void visit(ParamDataTab2DFloat *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DDouble *) */ void visit(ParamDataTab2DDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DLongDouble *) */ void visit(ParamDataTab2DLongDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DInt *) */ void visit(ParamDataTab2DInt *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DLogicalData *) */ void visit(ParamDataTab2DLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported")); } /** * @brief get the Tsyganenko96 parameterized operation. */ Operation * getOperation() const { return _operation; } private: template <typename Type> void createOperation() { _operation = new StatisticFunctions::Correlation<Type, double>(_process, _timeIntervalList, dynamic_cast<ParamDataSpec<Type>&> (_paramData), dynamic_cast<ParamDataSpec<Type>&> (_secondParamData), _windowtime, _type); } template <typename Type> void createOperation1D() { _operation = new StatisticFunctions::Correlation<std::vector<Type>, std::vector<double>>(_process, _timeIntervalList, dynamic_cast<ParamDataSpec<std::vector<Type>>&> (_paramData), dynamic_cast<ParamDataSpec<std::vector<Type>>&> (_secondParamData), _windowtime, _type); } Process &_process; TimeIntervalListSPtr _timeIntervalList; ParamData &_paramData; ParamData &_secondParamData; double _windowtime; std::string _type; Operation *_operation; }; } /* namespace Parameters */ } /* namespace AMDA */ #endif /* FRAMEINTOTABLEINDEXESCREATOR_HH_ */