1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
5 * File: $Id: EvtValError.cpp,v 1.3 2009-03-16 15:39:28 robbep Exp $
6 * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
14 #include "EvtGenBase/EvtValError.hh"
18 EvtValError::EvtValError()
19 : _valKnown(0), _val(0.), _errKnown(0), _err(0.)
22 EvtValError::EvtValError(double val)
23 : _valKnown(1), _val(val), _errKnown(0), _err(0.)
26 EvtValError::EvtValError(double val, double err)
27 : _valKnown(1), _val(val), _errKnown(1), _err(err)
30 EvtValError::EvtValError(const EvtValError& other)
31 : _valKnown(other._valKnown), _val(other._val),
32 _errKnown(other._errKnown), _err(other._err)
35 EvtValError::~EvtValError()
38 double EvtValError::prec() const
40 assert(_valKnown && _errKnown);
41 return ( _val != 0) ? _err/_val : 0;
44 void EvtValError::operator=(const EvtValError& other)
46 _valKnown = other._valKnown;
48 _errKnown = other._errKnown;
52 void EvtValError::operator*=(const EvtValError& other)
54 assert(_valKnown && other._valKnown);
56 // Relative errors add in quadrature
57 if(_errKnown && other._errKnown)
58 _err = _val * other._val * sqrt(prec()*prec() + other.prec() * other.prec());
65 void EvtValError::operator/=(const EvtValError& other)
67 assert(_valKnown && other._valKnown && other._val != 0.);
69 // Relative errors add in quadrature
70 if(_errKnown && other._errKnown)
71 _err = _val/other._val * sqrt(prec()*prec() + other.prec() * other.prec());
79 void EvtValError::print(ostream& os) const
81 if(_valKnown) os << _val;
84 if(_errKnown) os << _err;
90 void EvtValError::operator+=(const EvtValError& other)
92 assert(_valKnown); assert(other._valKnown);
95 // add errors in quadrature
97 if(_errKnown && other._errKnown) {
99 _err = sqrt(_err*_err + other._err*other._err);
107 void EvtValError::operator*=(double c) {
111 if(_errKnown) _err*=c;
115 EvtValError operator*(const EvtValError& x1, const EvtValError& x2)
122 EvtValError operator/(const EvtValError& x1, const EvtValError& x2)
130 EvtValError operator+(const EvtValError& x1, const EvtValError& x2)
138 EvtValError operator*(const EvtValError& x,double c)
146 EvtValError operator*(double c,const EvtValError& x)
154 ostream& operator<<(ostream& os, const EvtValError& other)