/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: CorrelationProcess.cc * Author: hacene * * Created on September 27, 2021, 10:02 AM */ #include #include #include #include "DicError.hh" #include "AMDA_exception.hh" #include "Operation.hh" #include "ParameterManager.hh" #include "ParamMgr.hh" #include "ParameterCreatorFromExpression.hh" #include "CorrelationProcess.hh" #include "StatisticCorrelationCreator.hh" #include "CorrelationFunctions.hh" #include using namespace std; using namespace boost; using namespace log4cxx; namespace AMDA { namespace Parameters { CorrelationProcess::CorrelationProcess(Parameter ¶meter) : SingleParamProcess_CRTP(parameter) { _type = ""; } CorrelationProcess::CorrelationProcess(const CorrelationProcess& pProcess, Parameter ¶meter) : SingleParamProcess_CRTP(pProcess, parameter) { _type = ""; } CorrelationProcess::~CorrelationProcess() { if (_secondInputParam != nullptr) _secondInputParam->closeConnection(this); } void CorrelationProcess::establishConnection() { if (_attributList.size() < 2) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("CorrelationProcess::parse require 3 attributes'"))); } //Imf parameter ParameterCreatorFromExpression creator(_parameter.getParameterManager()); std::string secondParamExpression; if(_attributList[0][0] == '$' || _attributList[0][0] == '#') secondParamExpression=_attributList[0]; else secondParamExpression = "$" + _attributList[0]; _secondInputParam = creator.getOneParameterFromExpression(_parameter,secondParamExpression ,true); if (_secondInputParam == nullptr) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("CorrelationProcess::parse cannot retrieve imf param"))); } _secondInputParam->openConnection(this); SingleParamProcess::establishConnection(); } TimeStamp CorrelationProcess::init() { _windowtime = atof(_attributList[1].c_str()); if(_type.empty() && _attributList.size() >=3) _type = _attributList[2]; TimeStamp time = _parameterInput->init(this, _timeIntervalList); _paramInput = _parameterInput->getParamData(this).get(); _secondInputParam->init(this, _timeIntervalList); ParamData* lSecondParamInput = _secondInputParam->getParamData(this).get(); StatisticCorrelationCreator lCreator(*this, _timeIntervalList, *_paramInput, *lSecondParamInput, _secondInputParam, _windowtime, _type); _operation = lCreator.getOperation(); _paramData = ParamDataSPtr(_operation->getParamOutput()); _paramData->setMinSampling(_paramInput->getMinSampling()); return time; } // Covariance CovarianceProcess::CovarianceProcess(Parameter& parameter):CorrelationProcess(parameter){ CorrelationProcess::_type = "covariance"; } CovarianceProcess::CovarianceProcess(const CorrelationProcess& pProcess, Parameter& parameter):CorrelationProcess(pProcess, parameter){ CorrelationProcess::_type = "covariance"; } CovarianceProcess::~CovarianceProcess(){ } // Pearson PearsonProcess::PearsonProcess(Parameter& parameter):CorrelationProcess(parameter){ CorrelationProcess::_type = "pearson"; } PearsonProcess::PearsonProcess(const CorrelationProcess& pProcess, Parameter& parameter):CorrelationProcess(pProcess, parameter){ CorrelationProcess::_type = "pearson"; } PearsonProcess::~PearsonProcess(){ } // Kendall KendallProcess::KendallProcess(Parameter& parameter):CorrelationProcess(parameter){ CorrelationProcess::_type = "kendall"; } KendallProcess::KendallProcess(const CorrelationProcess& pProcess, Parameter& parameter):CorrelationProcess(pProcess, parameter){ CorrelationProcess::_type = "kendall"; } KendallProcess::~KendallProcess(){ } // Spearman SpearmanProcess::SpearmanProcess(Parameter& parameter):CorrelationProcess(parameter){ CorrelationProcess::_type = "spearman"; } SpearmanProcess::SpearmanProcess(const CorrelationProcess& pProcess, Parameter& parameter):CorrelationProcess(pProcess, parameter){ CorrelationProcess::_type = "spearman"; } SpearmanProcess::~SpearmanProcess(){ } } }