86 const bool interpolate_flag =
true;
89 double entries = s->GetEffectiveEntries();
98 s->GetXaxis()->SetRange(1,s->GetNbinsX());
100 double mean = s->GetMean();
101 double meane = s->GetMeanError();
106 double upperfrac = 0;
107 double lowerfrac = 0;
112 constexpr int it_max=20;
113 constexpr int it_max_report=20;
115 for ( ; it<it_max ; it++ ) {
120 imax = s->GetXaxis()->FindBin(
mean);
130 s->GetXaxis()->SetRange(lowerbin, upperbin);
132 double m = s->GetMean();
133 double me = s->GetMeanError();
137 std::fabs(
mean-m)<me*1e-5 ||
138 std::fabs(
mean-m)<meane*1e-5 ) {
146 if ( it>=it_max_report ) {
148 std::cerr << s->GetName() <<
"\tMax iterations " << it <<
" reached" << std::endl;
158 if ( interpolate_flag ) {
160 s->GetXaxis()->SetRange(lowerbin-1, upperbin+1);
162 double m = s->GetMean();
165 s->GetXaxis()->SetRange(1,s->GetNbinsX());
167 if ( upperfrac==lowerfrac )
return 0;
169 double inter_mean =
mean + (
frac-lowerfrac)*(m-
mean)/(upperfrac-lowerfrac);
174 s->GetXaxis()->SetRange(1,s->GetNbinsX());
199 const bool interpolate_flag =
true;
201 if ( s==0 ) { std::cerr <<
"rmsFrac() histogram s = " << s << std::endl;
return 0; }
202 if ( s->GetXaxis()==0) { std::cerr <<
"rmsFrac() histogram s->GetXaxis() not definied for histogram " << s->GetName() << std::endl;
return 0; }
207 double entries = s->GetEffectiveEntries();
214 s->GetXaxis()->SetRange(1,s->GetNbinsX());
218 int imax = s->GetXaxis()->FindBin(m);
226 double upperfrac = 0;
227 double lowerfrac = 0;
238 std::vector<double> stats;
242 if ( interpolate_flag ) {
246 s->GetXaxis()->SetRange(lowerbin, upperbin);
247 rlower = s->GetRMS();
252 s->GetXaxis()->SetRange(lowerbin-1, upperbin+1);
253 rupper = s->GetRMS();
258 if ( upperfrac!=lowerfrac ) {
259 rms = rlower + (
frac-lowerfrac)*(rupper-rlower)/(upperfrac-lowerfrac);
260 erms = erlower + (
frac-lowerfrac)*(erupper-erlower)/(upperfrac-lowerfrac);
268 s->GetXaxis()->SetRange(lowerbin, upperbin);
274 s->GetXaxis()->SetRange(1,s->GetNbinsX());
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
void getRange(TH1D *s, int imax, double frac, int &lowerbin, int &upperbin, double &lowerfrac, double &upperfrac)