#include "hparticlerunningmean.h"
#include "TMath.h"
#include "TRandom.h"
#include <iostream>
using namespace std;
ClassImp(HParticleRunningMeanI)
Float_t HParticleRunningMeanI::calcMean(Int_t val)
{
if(val < fmin) {
fvalid = kFALSE;
return fmean;
}
if(val <= fmax || fn < fminEvts) {
fmax = Int_t(max(fmean +fscaleFacSigma*fsigma + 0.5F,fmaxMin));
fvalid = kTRUE;
fSum += val - fnPoints[findex];
fSum2 += val*val - fnPoints[findex]*fnPoints[findex];
fnPoints[findex] = val;
if(++findex >= fnMax) findex = 0;
fmean = Float_t(fSum)/Float_t(fn);
fsigma = sqrt(float(fSum2)/float(fn) - fmean*fmean);
if(fn < fnMax) ++fn;
} else {
fvalid = kFALSE;
}
return fmean;
};
Int_t HParticleRunningMeanI::initParam(const Int_t maxEvents, const Int_t minEvents,
const Float_t scaleFacSigma, const Float_t initMean, const Float_t initSigma, const Int_t min)
{
fnMax = maxEvents;
if(fnPoints != NULL) delete[] fnPoints;
fnPoints = new Int_t[fnMax];
reset(kFALSE);
if(minEvents <= fnMax) fminEvts = minEvents;
else fminEvts = fnMax;
fscaleFacSigma = scaleFacSigma;
fmin = max(min,0);
fmaxMin = (fmin + 1.0F) + fscaleFacSigma + 0.5F;
fvalid = kFALSE;
fmax = fmaxMin;
initialMean = initMean;
initialSigma = initSigma;
setInitialMean(initialMean, initialSigma) ;
return fnMax;
};
Int_t HParticleRunningMeanI::setInitialMean( const Float_t initMean, const Float_t initSigma)
{
if(initMean==-999999 || initSigma==-999999) return 0;
initialMean = initMean;
initialSigma = initSigma;
Float_t initialWidth = initSigma*sqrt(12.0F);
if(initialWidth < 1.0F) initialWidth = 1.0F;
for (findex = 0; findex < fminEvts; ++findex) {
fnPoints[findex] = Int_t(initMean + (gRandom->Uniform()-0.5F)*initialWidth + 0.5F);
fSum += fnPoints[findex];
fSum2 += fnPoints[findex]*fnPoints[findex];
};
fn = fminEvts;
fmean = Float_t(fSum)/Float_t(fn);
fsigma= sqrt(Float_t(fSum2)/Float_t(fn) - fmean*fmean);
fmax = Int_t (max(fmean + fscaleFacSigma * initSigma + 0.5F,fmaxMin));
return fn;
};
void HParticleRunningMeanI::reset(Bool_t full)
{
for (Int_t i = 0; i < fnMax; ++i) fnPoints[i] = 0;
fSum = 0;
fSum2 = 0;
fn = 1;
findex = 0;
fmean = 0.0F;
fsigma = 0.0F;
if(full)setInitialMean(initialMean,initialSigma) ;
};
Bool_t HParticleRunningMeanI::isValid(void)
{
return (fn >= fminEvts) && fvalid;
};
hparticlerunningmean.cc:1 hparticlerunningmean.cc:2 hparticlerunningmean.cc:3 hparticlerunningmean.cc:4 hparticlerunningmean.cc:5 hparticlerunningmean.cc:6 hparticlerunningmean.cc:7 hparticlerunningmean.cc:8 hparticlerunningmean.cc:9 hparticlerunningmean.cc:10 hparticlerunningmean.cc:11 hparticlerunningmean.cc:12 hparticlerunningmean.cc:13 hparticlerunningmean.cc:14 hparticlerunningmean.cc:15 hparticlerunningmean.cc:16 hparticlerunningmean.cc:17 hparticlerunningmean.cc:18 hparticlerunningmean.cc:19 hparticlerunningmean.cc:20 hparticlerunningmean.cc:21 hparticlerunningmean.cc:22 hparticlerunningmean.cc:23 hparticlerunningmean.cc:24 hparticlerunningmean.cc:25 hparticlerunningmean.cc:26 hparticlerunningmean.cc:27 hparticlerunningmean.cc:28 hparticlerunningmean.cc:29 hparticlerunningmean.cc:30 hparticlerunningmean.cc:31 hparticlerunningmean.cc:32 hparticlerunningmean.cc:33 hparticlerunningmean.cc:34 hparticlerunningmean.cc:35 hparticlerunningmean.cc:36 hparticlerunningmean.cc:37 hparticlerunningmean.cc:38 hparticlerunningmean.cc:39 hparticlerunningmean.cc:40 hparticlerunningmean.cc:41 hparticlerunningmean.cc:42 hparticlerunningmean.cc:43 hparticlerunningmean.cc:44 hparticlerunningmean.cc:45 hparticlerunningmean.cc:46 hparticlerunningmean.cc:47 hparticlerunningmean.cc:48 hparticlerunningmean.cc:49 hparticlerunningmean.cc:50 hparticlerunningmean.cc:51 hparticlerunningmean.cc:52 hparticlerunningmean.cc:53 hparticlerunningmean.cc:54 hparticlerunningmean.cc:55 hparticlerunningmean.cc:56 hparticlerunningmean.cc:57 hparticlerunningmean.cc:58 hparticlerunningmean.cc:59 hparticlerunningmean.cc:60 hparticlerunningmean.cc:61 hparticlerunningmean.cc:62 hparticlerunningmean.cc:63 hparticlerunningmean.cc:64 hparticlerunningmean.cc:65 hparticlerunningmean.cc:66 hparticlerunningmean.cc:67 hparticlerunningmean.cc:68 hparticlerunningmean.cc:69 hparticlerunningmean.cc:70 hparticlerunningmean.cc:71 hparticlerunningmean.cc:72 hparticlerunningmean.cc:73 hparticlerunningmean.cc:74 hparticlerunningmean.cc:75 hparticlerunningmean.cc:76 hparticlerunningmean.cc:77 hparticlerunningmean.cc:78 hparticlerunningmean.cc:79 hparticlerunningmean.cc:80 hparticlerunningmean.cc:81 hparticlerunningmean.cc:82 hparticlerunningmean.cc:83 hparticlerunningmean.cc:84 hparticlerunningmean.cc:85 hparticlerunningmean.cc:86 hparticlerunningmean.cc:87 hparticlerunningmean.cc:88 hparticlerunningmean.cc:89 hparticlerunningmean.cc:90 hparticlerunningmean.cc:91 hparticlerunningmean.cc:92 hparticlerunningmean.cc:93 hparticlerunningmean.cc:94 hparticlerunningmean.cc:95 hparticlerunningmean.cc:96 hparticlerunningmean.cc:97 hparticlerunningmean.cc:98 hparticlerunningmean.cc:99 hparticlerunningmean.cc:100 hparticlerunningmean.cc:101 hparticlerunningmean.cc:102 hparticlerunningmean.cc:103 hparticlerunningmean.cc:104 hparticlerunningmean.cc:105 hparticlerunningmean.cc:106 hparticlerunningmean.cc:107 hparticlerunningmean.cc:108 hparticlerunningmean.cc:109 hparticlerunningmean.cc:110 hparticlerunningmean.cc:111 hparticlerunningmean.cc:112 hparticlerunningmean.cc:113 hparticlerunningmean.cc:114 hparticlerunningmean.cc:115 hparticlerunningmean.cc:116