ProcessStatisticFunctions.cc 4.09 KB
/*
 * ProcessStatisticFunctions.cc
 *
 *  Created on: Jun 21, 2018
 *      Author: benjamin
 */
#include <stdlib.h>
#include <string>

#include <boost/lexical_cast.hpp>

#include "DicError.hh"
#include "AMDA_exception.hh"

#include "Operation.hh"
#include "ParameterManager.hh"
#include "ProcessStatisticFunctions.hh"
#include "ParamMgr.hh"

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

namespace AMDA {
namespace Parameters {

ProcessStatisticFunctions::ProcessStatisticFunctions(Parameter &parameter, StatisticFunctionsCreator::StatisticFunctionsType type) : SingleParamProcess_CRTP(parameter), _type(type), _windowtime(0.) {
}

ProcessStatisticFunctions::ProcessStatisticFunctions(const ProcessStatisticFunctions& pProcess, Parameter &parameter)
    : SingleParamProcess_CRTP(pProcess,parameter), _type(pProcess._type) {
}

ProcessStatisticFunctions::~ProcessStatisticFunctions() {
}

TimeStamp ProcessStatisticFunctions::init() {
	//Get window time
	if (_attributList.size() != 1) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("ProcessStatisticFunctions required at least one attribute: Window Time")));
	}

	if (!isValid<double>(_attributList[0])) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("Window Time must be a double.")));
	}

	_windowtime = atof(_attributList[0].c_str());

	if (_windowtime <= 0) {
		BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("Window Time must be greater than 0.")));
	}

	TimeStamp time = _parameterInput->init( this, _timeIntervalList);

	_paramInput = _parameterInput->getParamData(this).get();

	StatisticFunctionsCreator lCreator(*this, _timeIntervalList, *_paramInput, _type, _windowtime);
	_operation = lCreator.getOperation();	
	_paramData = ParamDataSPtr(_operation->getParamOutput());
	int minSampling = static_cast<StatisticFunctions::AbstractFuncBase*>(_operation)->getSampling();
	_paramData->setMinSampling(static_cast<StatisticFunctions::AbstractFuncBase*>(_operation)->getSampling());
	int gapThreshold = minSampling / _paramInput->getMinSampling() * _parameterInput->getGapThreshold();
	if (gapThreshold < 1) {
		gapThreshold = 1;
	}
	_parameter.setGapThreshold(gapThreshold);
	return time;
}

ProcessMinFunc::ProcessMinFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_MIN) {
}

ProcessMinSmFunc::ProcessMinSmFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_MIN_SM) {
}

ProcessMaxFunc::ProcessMaxFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_MAX) {
}

ProcessMaxSmFunc::ProcessMaxSmFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_MAX_SM) {
}

ProcessVarFunc::ProcessVarFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_VAR) {
}

ProcessVarSmFunc::ProcessVarSmFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_VAR_SM) {
}

ProcessRmsFunc::ProcessRmsFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_RMS) {
}

ProcessRmsSmFunc::ProcessRmsSmFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_RMS_SM) {
}

ProcessSkewFunc::ProcessSkewFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_SKEW) {
}

ProcessSkewSmFunc::ProcessSkewSmFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_SKEW_SM) {
}

ProcessMedianFunc::ProcessMedianFunc(Parameter &parameter) : ProcessStatisticFunctions(parameter,StatisticFunctionsCreator::StatisticFunctionsType::SFT_MEDIAN) {
}

} /* namespace Parameters */
} /* namespace AMDA */