3 #include "TEfficiency.h"
8 std::tuple<float, float> calcEfficiency(
float num,
float denom) {
10 return std::make_tuple(0.0
f, 0.0
f);
14 const float eff = num/denom;
15 const float errDown = TEfficiency::ClopperPearson(denom, num, cl,
false);
16 const float errUp = TEfficiency::ClopperPearson(denom, num, cl,
true);
19 return std::make_tuple(eff,
std::max(eff-errDown, errUp-eff));
37 edm::LogWarning(
"HLTTauDQMOfflineSource") <<
"HLTTauDQMSummaryPlotter::HLTTauDQMSummaryPlotter(): " << e.
what();
52 store_ = store.operator->();
54 if (
type_ ==
"Path" ) {
69 else if (
type_ ==
"L1" ) {
81 else if(
type_ ==
"PathSummary") {
91 store_ = store.operator->();
93 if (
type_ ==
"Path" ) {
108 else if (
type_ ==
"L1" ) {
128 else if(
type_ ==
"PathSummary") {
148 const TAxis *xaxis = effnum->
getTH1F()->GetXaxis();
165 if(effnum && effdenom && eff) {
166 const TH1F *num = effnum->
getTH1F();
167 const TH1F *denom = effdenom->
getTH1F();
169 for (
int i = 1;
i <= num->GetNbinsX(); ++
i) {
170 if(denom->GetBinContent(
i) < num->GetBinContent(
i)) {
171 edm::LogError(
"HLTTauDQMOffline") <<
"Encountered denominator < numerator with efficiency plot " << name <<
" in folder " << folder <<
", bin " <<
i <<
" numerator " << num->GetBinContent(
i) <<
" denominator " << denom->GetBinContent(
i);
174 std::tuple<float, float> effErr = calcEfficiency(num->GetBinContent(
i), denom->GetBinContent(
i));
176 const float err = std::get<1>(effErr);
177 prof->SetBinContent(
i, efficiency);
178 prof->SetBinEntries(
i, 1);
179 prof->SetBinError(
i,
std::sqrt(efficiency*efficiency + err*err));
193 if ( refH && evC && eff ) {
195 float nGenerated = evC->
getTH1F()->GetBinContent(bin);
199 int nbins = histo->GetNbinsX();
200 double integral = histo->GetBinContent(nbins+1);
201 if (nGenerated<=0.0) nGenerated=1.0;
202 for (
int i = nbins;
i >= 1;
i-- ) {
203 double thisBin = histo->GetBinContent(
i);
206 double integralError;
207 integralEff = (integral / nGenerated);
211 integralError = (
sqrt(integral) / nGenerated);
213 eff->
getTProfile()->SetBinError(
i,
sqrt(integralEff*integralEff+integralError*integralError));
230 const TAxis *xaxis = eff->
getTH1F()->GetXaxis();
247 if (eff && effRefPrevious) {
248 TProfile *previous = effRefPrevious->
getTProfile();
276 edm::LogError(
"HLTTauDQMOffline") <<
"Encountered denominator < numerator with efficiency plot EfficiencyRefPrevious in folder " << folder <<
", bin " <<
i <<
" numerator " << eff->
getBinContent(
i) <<
" denominator " << eff->
getBinContent(
i-1);
281 const float err = std::get<1>(effErr);
283 previous->SetBinContent(
i-1, efficiency);
284 previous->SetBinEntries(
i-1, 1);
285 previous->SetBinError(
i-1,
std::sqrt(efficiency*efficiency + err*err));
virtual char const * what() const
T getUntrackedParameter(std::string const &, T const &) const
void plotTriggerBitEfficiencyHistos(std::string folder, std::string histo)
std::string getAxisTitle(int axis=1) const
get x-, y- or z-axis title (axis=1, 2, 3 respectively)
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
const std::string & triggerTag() const
void bookTriggerBitEfficiencyHistos(std::string folder, std::string histo)
const T & max(const T &a, const T &b)
std::string getTitle(void) const
get MonitorElement title
~HLTTauDQMSummaryPlotter()
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. "my/long/dir/my_histo")
Integral< F, X >::type integral(const F &f)
void plotEfficiencyHisto(std::string folder, std::string name, std::string hist1, std::string hist2)
void setTitle(const std::string &title)
set (ie. change) histogram/profile title
bool dirExists(const std::string &path) const
true if directory exists
TH1F * getTH1F(void) const
HLTTauDQMSummaryPlotter(const edm::ParameterSet &ps, const std::string &dqmBaseFolder)
std::vector< std::vector< double > > tmp
void bookEfficiencyHisto(const std::string &folder, const std::string &name, const std::string &hist1, bool copyLabels=false)
double getBinContent(int binx) const
get content of bin (1-D)
TProfile * getTProfile(void) const
int getNbinsX(void) const
get # of bins in X-axis
void plotIntegratedEffHisto(std::string folder, std::string name, std::string refHisto, std::string evCount, int bin)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void setCurrentFolder(const std::string &fullpath)