38 for (
Int_t i = 0; i <
n; i++) {
95 Warning(
"Fill",
"Sum of weights is zero - ignore current data point");
102 fM2 += w * rr * rr / (tW *
fW);
115 Printf(
" OBJ: TStatistic\t %s \t Mean = %.5g +- %.4g \t RMS = %.5g \t Count = %lld \t Min = %.5g \t Max = %.5g",
138 std::vector<TStatistic*> statPtrs;
139 if (this->
fN != 0LL) statPtrs.push_back(
this);
142 if ((statPtr =
dynamic_cast<TStatistic *
>(o)) && statPtr->
fN != 0LL) {
143 statPtrs.push_back(statPtr);
148 const auto nStatsPtrs = statPtrs.size();
151 if (nStatsPtrs == 0)
return 0;
155 auto firstStatPtr = statPtrs[0];
156 auto N = firstStatPtr->fN;
157 auto M = firstStatPtr->fM;
158 auto M2 = firstStatPtr->fM2;
159 auto W = firstStatPtr->fW;
160 auto W2 = firstStatPtr->fW2;
161 auto Min = firstStatPtr->fMin;
162 auto Max = firstStatPtr->fMax;
163 for (
auto i = 1U; i < nStatsPtrs; ++i) {
164 auto c = statPtrs[i];
165 double temp = (
c->fW) / (W)*M -
c->fM;
166 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)