CorrelationProcess.cc 4.66 KB
/*
 * 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 <stdlib.h>
#include <string>

#include <boost/lexical_cast.hpp>

#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 <typeinfo>

using namespace std;
using namespace boost;
using namespace log4cxx;

namespace AMDA {
    namespace Parameters {

        CorrelationProcess::CorrelationProcess(Parameter &parameter) : MultiParamProcess_CRTP(parameter) {
            _type = "";
        }

        CorrelationProcess::CorrelationProcess(const CorrelationProcess& pProcess, Parameter &parameter) : MultiParamProcess_CRTP(pProcess, parameter),
            _firstParamName(pProcess._firstParamName), _secondParamName(pProcess._secondParamName) {
            _type = "";
        }

        CorrelationProcess::~CorrelationProcess() {
        }

        void CorrelationProcess::parse() {
  	        ParameterCreatorFromExpression creator(_parameter.getParameterManager());
  	        ParameterSPtr lParameter = creator.getOneParameterFromExpression(_parameter,_expression, isUserProcess());
  	        _paramNameList[lParameter->getId()].first = lParameter;
	        _firstParamName = lParameter->getId();
  	        lParameter = creator.getOneParameterFromExpression(_parameter,_attributList[0], isUserProcess());
		    _paramNameList[lParameter->getId()].first = lParameter;
		    _secondParamName = lParameter->getId();
        }

        void CorrelationProcess::establishConnection() {
            parse();
  	        MultiParamProcess::establishConnection();
        }

        TimeStamp CorrelationProcess::init() {
            _windowtime = atof(_attributList[1].c_str());
            
            if(_type.empty() && _attributList.size() >=3)
                _type =  _attributList[2];

            TimeStamp timeStamp = MultiParamProcess::init();

            ParamData* lfirstParamInput = _paramNameList[_firstParamName].first->getParamData(this).get();

            ParamData* lSecondParamInput = _paramNameList[_secondParamName].first->getParamData(this).get();

            StatisticCorrelationCreator lCreator(*this, _timeIntervalList, *lfirstParamInput, *lSecondParamInput, _windowtime, _type);

        	_operation = lCreator.getOperation();	
	        _paramData = ParamDataSPtr(_operation->getParamOutput());
	        _paramData->setMinSampling(lfirstParamInput->getMinSampling());

	        return timeStamp;
        }
        
// 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(){        
        }
        
    }
    
    
}