]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/flow/AliFMDFlowStat.h
Remove some unused code
[u/mrichter/AliRoot.git] / FMD / flow / AliFMDFlowStat.h
CommitLineData
39eefe19 1// -*- mode: C++ -*-
97e94238 2/* Copyright (C) 2007 Christian Holm Christensen <cholm@nbi.dk>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public License
6 * as published by the Free Software Foundation; either version 2.1 of
7 * the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17 * USA
18 */
19#ifndef ALIFMDFLOWSTAT_H
20#define ALIFMDFLOWSTAT_H
4995b978 21// #include <cmath>
22#include <TMath.h>
39eefe19 23#include <TObject.h>
24
25//______________________________________________________
26/** @class AliFMDFlowStat flow/AliFMDFlowStat.h <flow/AliFMDFlowStat.h>
27 @brief Single variable statistics.
28 @ingroup u_utils
29
30 This class calculates the single variable statistics of a random
31 variable @f$ x@f$.
32
33 The average @f$\bar{x}@f$ after @f$n@f$ observations is calculated as
34 @f[
35 \bar{x}^{(n)} = \left\{\begin{array}{rl}
36 x^{(n)} & n = 1\\
37 \left(1-\frac1n\right)\bar{x}^{(n-1)} + \frac{x^{(n)}}{n} & n > 1
38 \end{array}\right.
39 @f]
40 and the square variance @f$s^2@f$ after @f$ n@f$ observations is
41 given by
42 @f[
43 {s^{2}}^{(n)} = \left\{\begin{array}{rl}
44 0 & n = 1\\
45 \left(1-\frac1n\right){s^{2}}^{(n-1)} +
46 \frac{\left(x^{(n)}-\bar{x}^{(n)}\right)^2}{n-1} & n > 1
47 \end{array}\right.
48 @f]
49*/
824e71c1 50class AliFMDFlowStat : public TObject
39eefe19 51{
52public:
53 /** Constructor */
54 AliFMDFlowStat() : fAverage(0), fSqVar(0), fN(0) {}
97e94238 55 /** Copy constructor
56 @param o Object to copy from. */
57 AliFMDFlowStat(const AliFMDFlowStat& o);
58 /** Assuignement operator
59 @param o Object to assign from.
60 @return Reference to this */
61 AliFMDFlowStat& operator=(const AliFMDFlowStat& o);
39eefe19 62 /** Destructor */
63 virtual ~AliFMDFlowStat() {}
64 /** Reset */
824e71c1 65 void Clear(Option_t* option="");
39eefe19 66 /** Add another data point */
67 void Add(Double_t x);
68 /** Get the average */
69 Double_t Average() const { return fAverage; }
70 /** Get the square variance */
71 Double_t SqVar() const { return fSqVar; }
72 /** Get the number of data points */
73 ULong_t N() const { return fN; }
97e94238 74 /** Given the two partial sample of the same stocastic variable, of
75 size @f$ n_1@f$ and @f$ n_2@f$, with averages @f$ m_1@f$ and
76 @f$ m2@f$, and square variances, @f$ s_1^2@f$ and @f$ s_2^2@f$,
77 calculate the full sample average and square variance:
78 @f[
79 m = \frac{n_1 m_1 + n_2 m_2}{n_1 + n_2}
80 @f]
81 and
82 @f[
83 s^2 = \frac{n_1 * s_1^2 + n_2 s_2^2}{n_1 + n_2}
84 + \frac{n_1 n_2 (m_1 - m_2)^2}{(n_1 + n_2)^2}
85 @f]
86 @param o Other statistics object to add
87 @return Reference to this */
88 AliFMDFlowStat& operator+=(const AliFMDFlowStat& o);
39eefe19 89protected:
90 /** Average */
97e94238 91 Double_t fAverage; // Running
39eefe19 92 /** Square variance */
97e94238 93 Double_t fSqVar; // Square variance
39eefe19 94 /** Number of data points */
97e94238 95 ULong_t fN; // Number of data points
39eefe19 96 /** Define for ROOT I/O */
97 ClassDef(AliFMDFlowStat,1);
98};
99
97e94238 100//__________________________________________________________________
101inline
102AliFMDFlowStat::AliFMDFlowStat(const AliFMDFlowStat& o)
103 : TObject(o),
104 fAverage(o.fAverage),
105 fSqVar(o.fSqVar),
106 fN(o.fN)
107{}
108//__________________________________________________________________
109inline AliFMDFlowStat&
110AliFMDFlowStat::operator=(const AliFMDFlowStat& o)
111{
112 fAverage = o.fAverage;
113 fSqVar = o.fSqVar;
114 fN = o.fN;
115 return *this;
116}
117//__________________________________________________________________
118inline AliFMDFlowStat&
119AliFMDFlowStat::operator+=(const AliFMDFlowStat& o)
120{
121 if (fN + o.fN <= 0) return *this;
122
123 Double_t m = (fN * o.fAverage + o.fN * o.fAverage)/(fN + o.fN);
124 Double_t s = ((fN * o.fSqVar + o.fN * o.fSqVar)/(fN + o.fN)
125 + (TMath::Power(fAverage - o.fAverage, 2) * fN * o.fN)
126 / TMath::Power(fN + o.fN, 2));
127 fAverage = m;
128 fSqVar = s;
129 fN = fN + o.fN;
130 return *this;
131}
824e71c1 132//__________________________________________________________________
133inline void
134AliFMDFlowStat::Clear(Option_t*)
135{
136 fAverage = fSqVar = 0;
137 fN = 0;
138}
139
39eefe19 140//__________________________________________________________________
141inline void
142AliFMDFlowStat::Add(Double_t x)
143{
4995b978 144 if (TMath::IsNaN(x) || !TMath::Finite(x)) return;
39eefe19 145 fN++;
146 if (fN == 1) {
147 fAverage = x;
148 fSqVar = 0;
149 return;
150 }
151 Double_t c = (1. - 1. / fN);
152 fAverage *= c;
153 fAverage += x / fN;
154 fSqVar *= c;
4995b978 155 fSqVar += TMath::Power(x - fAverage, 2) / (fN - 1);
39eefe19 156}
157
158
159#endif
160//
161// EOF
162//