14 #include "TGraphAsymmErrors.h" 52 dbe_path_ =
std::string(
"MuonGEMHitsV/GEMHitsTask/");
62 if ( num==
nullptr || denum==
nullptr) {
std::cout<<
"num or denum are missing"<<std::endl; }
65 TProfile * efficHist =
new TProfile(name.c_str(), title.c_str(),num->GetXaxis()->GetNbins(), num->GetXaxis()->GetXmin(),num->GetXaxis()->GetXmax());
66 if ( num->GetNbinsX() != denum->GetNbinsX()) {
std::cout<<
"Wrong Xbin. Please, check histogram's name"<<std::endl;
return nullptr; }
67 for (
int i=1;
i <= num->GetNbinsX();
i++) {
68 const double nNum = num->GetBinContent(
i);
69 const double nDenum = denum->GetBinContent(
i);
70 if ( nDenum == 0 || nNum > nDenum )
continue;
71 if ( nNum == 0 )
continue;
72 const double effVal = nNum/nDenum;
73 const double errLo = TEfficiency::ClopperPearson((
int)nDenum,(
int)nNum,0.683,
false);
74 const double errUp = TEfficiency::ClopperPearson((
int)nDenum,(
int)nNum,0.683,
true);
75 const double errVal = (effVal - errLo > errUp - effVal) ? effVal - errLo : errUp - effVal;
76 efficHist->SetBinContent(
i, effVal);
77 efficHist->SetBinEntries(
i, 1);
78 efficHist->SetBinError(
i,
sqrt(effVal * effVal + errVal * errVal));
84 TString dbe_label = TString(dbe_path_)+label_suffix;
86 if( ig.
get(dbe_label.Data()) !=
nullptr && track_hist !=
nullptr ) {
87 TH1F*
hist = (TH1F*)ig.
get( dbe_label.Data() )->getTH1F()->Clone();
88 TProfile*
profile = ComputeEff( hist, track_hist);
89 TString x_axis_title = TString(hist->GetXaxis()->GetTitle());
90 TString
title = TString::Format(
"Eff. for a SimTrack to have an associated GEM Strip in %s;%s;Eff.",label_suffix.c_str(),x_axis_title.Data());
91 profile->SetTitle( title.Data());
93 if ( sh_hist!=
nullptr) {
94 TProfile* profile_sh = ComputeEff( hist, sh_hist );
95 profile_sh->SetName( (profile->GetName()+
std::string(
"_sh")).c_str());
96 TString title2 = TString::Format(
"Eff. for a SimTrack to have an associated GEM Strip in %s with a matched SimHit;%s;Eff.",label_suffix.c_str(),x_axis_title.Data() );
97 profile_sh->SetTitle( title2.Data() );
98 ibooker.
bookProfile( profile_sh->GetName(),profile_sh);
109 TH1F* track_phi[3][3];
111 for (
unsigned int i = 0;
i < 3;
i++) {
112 track_eta[
i]=
nullptr;
113 for (
unsigned int j=0; j < 3; j++) {
114 track_phi[
i][j]=
nullptr;
118 for (
unsigned int i = 0;
i <
s_suffix.size();
i++) {
120 string track_eta_name = dbe_path_+
"track_eta"+
suffix;
121 if ( ig.
get(track_eta_name) !=
nullptr) track_eta[
i] = (TH1F*)ig.
get(track_eta_name)->
getTH1F()->Clone();
122 for (
unsigned int j = 0; j <
l_suffix.size(); j++) {
124 ProcessBooking( ibooker, ig,
"sh_eta"+suffix,track_eta[
i]);
127 for (
unsigned int i = 0;
i <
s_suffix.size();
i++) {
128 for (
unsigned int j = 0 ; j <
c_suffix.size(); j++) {
130 string track_phi_name = dbe_path_+
"track_phi"+
suffix;
131 if ( ig.
get(track_phi_name) !=
nullptr) track_phi[
i][j] = (TH1F*)ig.
get(track_phi_name)->
getTH1F()->Clone();
132 for (
unsigned int k = 0;
k <
l_suffix.size();
k++) {
134 ProcessBooking( ibooker, ig,
"sh_phi"+suffix,track_phi[
i][j]);
T getUntrackedParameter(std::string const &, T const &) const
static const std::array< std::string, 4 > l_suffix
MuonGEMHitsHarvestor(const edm::ParameterSet &)
constructor
MonitorElement * bookProfile(Args &&...args)
#define DEFINE_FWK_MODULE(type)
void setCurrentFolder(std::string const &fullpath)
static const std::array< std::string, 2 > s_suffix
TProfile * ComputeEff(TH1F *num, TH1F *denum)
~MuonGEMHitsHarvestor() override
destructor
MonitorElement * get(std::string const &path)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
void ProcessBooking(DQMStore::IBooker &, DQMStore::IGetter &, std::string label_suffix, TH1F *track_hist, TH1F *sh_hist=0)
static const std::array< std::string, 3 > c_suffix