source: trunk/src/Averager.cc @ 137

Last change on this file since 137 was 137, checked in by Peter, 17 years ago

added constructor taking vector

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.4 KB
Line 
1// $Id: Averager.cc 137 2004-08-19 09:36:44Z peter $
2
3#include "Averager.h"
4
5#include <sys/types.h>
6#include <ostream>
7#include "vector.h"
8
9
10namespace theplu {
11namespace cpptools{
12 
13
14  Averager::Averager(void)
15    : n_(0), x_(0), xx_(0)
16  {
17  }
18
19  Averager::Averager(const double x)
20    : n_(1), x_(x), xx_(x*x)
21  {
22  }
23
24  Averager::Averager(const double x,const double xx,const long n)
25    : n_(n), x_(x), xx_(xx)
26  {
27  }
28
29  Averager::Averager(const gslapi::vector& vec)
30    :n_(vec.size()), x_(vec.sum()), xx_(vec*vec)
31  {
32  }
33
34  Averager::Averager(const Averager& a)
35    : n_(a.n_), x_(a.x_), xx_(a.xx_)
36  {
37  }
38
39  const Averager& Averager::operator+=(const Averager& a)
40  {
41    n_+=a.n_;
42    x_+=a.x_;
43    xx_+=a.xx_;
44    return *this;
45  }
46
47  const Averager& Averager::operator*=(const Averager& N)
48  {
49    long    Rn=10;
50    double  NM=N.mean();
51    double  M=mean();
52    double  x=M*NM;
53    double  var=(variance()*NM*NM+N.variance()*M*M);
54
55    *this=Averager(Rn*x ,var*Rn*(Rn-1)+x*x*Rn, Rn);
56    return *this;
57  }
58
59  const Averager& Averager::operator/=(const Averager& N)
60  {
61    long    Rn=10;
62    double  NM=N.mean();
63   
64    if(NM) {
65      double x=mean()/NM;
66      double var=(variance()+N.variance()*x*x)/(NM*NM);
67      *this=Averager(Rn*x ,var*Rn*(Rn-1)+x*x*Rn, Rn);
68    }
69    else
70      reset();
71   
72    return *this;
73  }
74 
75  Averager operator*(double d,const Averager& a) {
76    Averager tmp=a;
77    return tmp*=d;
78  }
79
80  std::ostream& theplu::cpptools::operator<<(std::ostream& o, const Averager& a) 
81  {
82    return o << a.mean() << ' ' << a.standard_error();
83  }
84
85}} // of namespace cpptools and namespace theplu
Note: See TracBrowser for help on using the repository browser.