36 for (
Int_t i = 0; i <
n; i++) {
93 Warning(
"Fill",
"Sum of weights is zero - ignore current data point");
100 fM2 += w * rr * rr / (tW *
fW);
113 Printf(
" OBJ: TStatistic\t %s \t Mean = %.5g +- %.4g \t RMS = %.5g \t Count = %lld \t Min = %.5g \t Max = %.5g",
136 std::vector<TStatistic*> statPtrs;
137 if (this->
fN != 0LL) statPtrs.push_back(
this);
140 if ((statPtr =
dynamic_cast<TStatistic *
>(o)) && statPtr->
fN != 0LL) {
141 statPtrs.push_back(statPtr);
146 const auto nStatsPtrs = statPtrs.size();
149 if (nStatsPtrs == 0)
return 0;
153 auto firstStatPtr = statPtrs[0];
154 auto N = firstStatPtr->fN;
155 auto M = firstStatPtr->fM;
156 auto M2 = firstStatPtr->fM2;
157 auto W = firstStatPtr->fW;
158 auto W2 = firstStatPtr->fW2;
159 auto Min = firstStatPtr->fMin;
160 auto Max = firstStatPtr->fMax;
161 for (
auto i = 1U; i < nStatsPtrs; ++i) {
162 auto c = statPtrs[i];
163 double temp = (
c->fW) / (W)*M -
c->fM;
164 M2 +=
c->fM2 + W / (
c->fW * (
c->fW + W)) * temp * temp;
#define templateClassImp(name)
void Printf(const char *fmt,...)
Collection abstract base class.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
static void IndentLevel()
Functions used by ls() to indent an object hierarchy.
Statistical variable, defined by its mean and variance (RMS).
TString fName
Name given to the TStatistic object.
~TStatistic()
TStatistic destructor.
Double_t GetMeanErr() const
Double_t fW2
Sum of squared weights.
Double_t fW
Sum of weights.
TStatistic(const char *name="")
void Fill(Double_t val, Double_t w=1.)
Increment the entries in the object by one value-weight pair.
Double_t fMin
Minimum value in the Tstatistic object.
void Print(Option_t *="") const
Print the content of the object.
Double_t fMax
Maximum value in the TStatistic object.
Double_t fM
Sum of elements (i.e. sum of (val * weight) pairs.
Double_t fM2
Second order momentum.
Int_t Merge(TCollection *in)
Merge implementation of TStatistic.
Long64_t fN
Number of fills.
const char * Data() const
void CallRecursiveRemoveIfNeeded(TObject &obj)
call RecursiveRemove for obj if gROOT is valid and obj.TestBit(kMustCleanup) is true.
Short_t Max(Short_t a, Short_t b)
Short_t Min(Short_t a, Short_t b)