#ifndef _utl_NumericalErrorPropagation_h_ #define _utl_NumericalErrorPropagation_h_ // $Id: NumericalErrorPropagation.h 16567 2010-05-21 15:32:24Z dembinski $ #include namespace utl { class CorrelationMatrix; class FCNCalculator { public: virtual ~FCNCalculator() { } virtual std::vector operator()(const std::vector& p) const = 0; }; // symmetrical error struct Parameter { Parameter() : value(0), error(0) {} Parameter(const double v, const double e) : value(v), error(e) {} Parameter(const Parameter& o) { value = o.value; error = o.error; } double value; double error; }; class NumericalErrorPropagation { public: NumericalErrorPropagation(const FCNCalculator& calc, const std::vector& params, const CorrelationMatrix& corr); ~NumericalErrorPropagation(); const std::vector& GetFunctionResult() const { return fResult; } const std::vector& GetPropagatedErrors() const { return fPropagatedErrors; } const CorrelationMatrix& GetPropagatedCorrelations() const { return *fPropagatedCorrelation; } private: NumericalErrorPropagation(); NumericalErrorPropagation(const NumericalErrorPropagation& that); NumericalErrorPropagation& operator=(const NumericalErrorPropagation& that); void Propagate(); const FCNCalculator& fFcn; const std::vector fParameter; const CorrelationMatrix& fCorrelation; std::vector fResult; std::vector fPropagatedErrors; CorrelationMatrix* fPropagatedCorrelation; }; } #endif