34 if(val <= fmax || fn < fminEvts) {
35 fmax = Int_t(max(fmean +fscaleFacSigma*fsigma + 0.5F,fmaxMin));
37 fSum += val - fnPoints[findex];
38 fSum2 += val*val - fnPoints[findex]*fnPoints[findex];
39 fnPoints[findex] = val;
40 if(++findex >= fnMax) findex = 0;
41 fmean = Float_t(fSum)/Float_t(fn);
42 fsigma = sqrt(
float(fSum2)/
float(fn) - fmean*fmean);
51 const Float_t scaleFacSigma,
const Float_t initMean,
const Float_t initSigma,
const Int_t min)
59 if(fnPoints != NULL)
delete[] fnPoints;
60 fnPoints =
new Int_t[fnMax];
62 if(minEvents <= fnMax) fminEvts = minEvents;
63 else fminEvts = fnMax;
64 fscaleFacSigma = scaleFacSigma;
66 fmaxMin = (fmin + 1.0F) + fscaleFacSigma + 0.5F;
69 initialMean = initMean;
70 initialSigma = initSigma;
71 setInitialMean(initialMean, initialSigma) ;
80 if(initMean==-999999 || initSigma==-999999)
return 0;
81 initialMean = initMean;
82 initialSigma = initSigma;
83 Float_t initialWidth = initSigma*sqrt(12.0F);
84 if(initialWidth < 1.0F) initialWidth = 1.0F;
85 for (findex = 0; findex < fminEvts; ++findex) {
86 fnPoints[findex] = Int_t(initMean + (gRandom->Uniform()-0.5F)*initialWidth + 0.5F);
87 fSum += fnPoints[findex];
88 fSum2 += fnPoints[findex]*fnPoints[findex];
91 fmean = Float_t(fSum)/Float_t(fn);
92 fsigma= sqrt(Float_t(fSum2)/Float_t(fn) - fmean*fmean);
93 fmax = Int_t (max(fmean + fscaleFacSigma * initSigma + 0.5F,fmaxMin));
101 for (Int_t i = 0; i < fnMax; ++i) fnPoints[i] = 0;
108 if(full)setInitialMean(initialMean,initialSigma) ;
115 return (fn >= fminEvts) && fvalid;
void reset(Bool_t full=kTRUE)
Int_t initParam(const Int_t Max=2000, const Int_t minEvents=100, const Float_t scaleFacSigma=sqrt(12.0F), const Float_t initMean=-999999, const Float_t initSigma=-999999, const Int_t min=1)
Int_t setInitialMean(const Float_t initialMean, const Float_t initialSigma)
ClassImp(HParticleRunningMeanI) Float_t HParticleRunningMeanI