/* * RmsFunc.hh * * Created on: Jun 23, 2018 * Author: benjamin */ #ifndef RMSFUNC_HH_ #define RMSFUNC_HH_ #include "AbstractFunc.hh" #include "Toolbox.hh" namespace AMDA { namespace Parameters { namespace StatisticFunctions { template <typename InputElemType, typename OutputElemType> OutputElemType computeRms(std::list<std::pair<double,InputElemType>>& mem, OutputElemType& nanVal) { OutputElemType result = nanVal; if (mem.empty()) { return result; } result << ElemNull(); int n = 0; for (auto val : mem) { if (isNAN(val.second)) continue; result = result+StatisticFunctions::square(val.second); ++n; } if (n == 0) { result << NotANumber(); return result; } result = 1./n*result; result = StatisticFunctions::root_square(result); return result; } /** * @class RmsFunc * @brief * @details This class implements AbstractFunc. */ template <typename InputElemType, typename OutputElemType> class RmsFunc : public ClassicAbstractFunc<InputElemType,OutputElemType> { public: /** * @brief Constructor. */ RmsFunc(Process& pProcess, TimeIntervalListSPtr pTimeIntervalList, ParamDataSpec<InputElemType>& paramInput, double windowtime) : ClassicAbstractFunc<InputElemType,OutputElemType>(pProcess, pTimeIntervalList, paramInput, windowtime) { } virtual ~RmsFunc() { } OutputElemType compute() { return computeRms(ClassicAbstractFunc<InputElemType,OutputElemType>::_mem, ClassicAbstractFunc<InputElemType,OutputElemType>::_nanVal); } }; /** * @class RmsFuncSm * @brief * @details This class implements AbstractFunc. */ template <typename InputElemType, typename OutputElemType> class RmsSmFunc : public SmAbstractFunc<InputElemType,OutputElemType> { public: /** * @brief Constructor. */ RmsSmFunc(Process& pProcess, TimeIntervalListSPtr pTimeIntervalList, ParamDataSpec<InputElemType>& paramInput, double windowtime) : SmAbstractFunc<InputElemType,OutputElemType>(pProcess, pTimeIntervalList, paramInput, windowtime) { } virtual ~RmsSmFunc() { } OutputElemType compute() { return computeRms(SmAbstractFunc<InputElemType,OutputElemType>::_mem, SmAbstractFunc<InputElemType,OutputElemType>::_nanVal); } }; } /* namespace StatisticFunctions */ } /* namespace Parameters */ } /* namespace AMDA */ #endif /* RMSFUNC_HH_ */