14 #include "TGraphAsymmErrors.h" 64 TProfile * efficHist =
new TProfile(name.c_str(), title.c_str(),denum->GetXaxis()->GetNbins(), denum->GetXaxis()->GetXmin(),denum->GetXaxis()->GetXmax());
66 for (
int i=1;
i <= denum->GetNbinsX();
i++) {
68 double nNum = num->GetBinContent(
i);
69 double nDenum = denum->GetBinContent(
i);
70 if ( nDenum == 0 || nNum ==0 ) {
73 if ( nNum > nDenum ) {
77 std::cout<<
"Alert! specific bin's num is bigger than denum"<<std::endl;
79 const double effVal = nNum/nDenum;
80 efficHist->SetBinContent(
i, effVal);
81 efficHist->SetBinEntries(
i,1);
82 efficHist->SetBinError(
i,0);
83 const double errLo = TEfficiency::ClopperPearson((
int)nDenum,(
int)nNum,0.683,
false);
84 const double errUp = TEfficiency::ClopperPearson((
int)nDenum,(
int)nNum,0.683,
true);
85 const double errVal = (effVal - errLo > errUp - effVal) ? effVal - errLo : errUp - effVal;
86 efficHist->SetBinError(
i,
sqrt(effVal * effVal + errVal * errVal));
94 if( ig.
get(dbe_label.Data()) !=
nullptr && sh_hist !=
nullptr && track_hist !=
nullptr ) {
95 TH1F*
hist = (TH1F*)ig.
get( dbe_label.Data() )->getTH1F()->Clone();
97 TProfile* profile_sh =
ComputeEff( hist, sh_hist );
98 profile_sh->SetName( (profile->GetName()+
std::string(
"_sh")).c_str());
99 TString x_axis_title = TString(hist->GetXaxis()->GetTitle());
100 TString
title = TString::Format(
"Eff. for a SimTrack to have an associated GEM RecHits in %s;%s;Eff.",suffix.Data(),x_axis_title.Data());
101 TString title2 = TString::Format(
"Eff. for a SimTrack to have an associated GEM RecHits in %s with a matched SimHit;%s;Eff.",suffix.Data(),x_axis_title.Data() );
102 profile->SetTitle( title.Data());
103 profile_sh->SetTitle( title2.Data() );
105 ibooker.
bookProfile( profile_sh->GetName(),profile_sh);
108 std::cout<<
"Can not found histogram of "<<dbe_label<<std::endl;
109 if ( track_hist ==
nullptr)
std::cout<<
"track not found"<<std::endl;
110 if ( sh_hist ==
nullptr)
std::cout<<
"sh_hist not found"<<std::endl;
129 for(
unsigned int i = 0 ;
i <
s_suffix.size() ;
i++) {
132 if ( ig.
get(eta_label.Data()) !=
nullptr ) {
133 gem_trk_eta[
i] = (TH1F*)ig.
get(eta_label.Data())->getTH1F()->Clone();
134 gem_trk_eta[
i]->Sumw2();
136 else std::cout<<
"Can not found track_eta"<<std::endl;
137 for (
unsigned int k=0 ;
k <
c_suffix.size() ;
k++) {
139 if ( ig.
get(phi_label.Data()) !=
nullptr ) {
140 gem_trk_phi[
i][
k] = (TH1F*)ig.
get(phi_label.Data())->getTH1F()->Clone();
141 gem_trk_phi[
i][
k]->Sumw2();
143 else std::cout<<
"Can not found track_phi"<<std::endl;
146 if ( ig.
get(eta_label.Data()) !=
nullptr && ig.
get(phi_label.Data()) !=
nullptr ) {
147 for(
unsigned int j = 0; j <
l_suffix.size() ; j++) {
150 if( ig.
get(eta_label.Data()) !=
nullptr ) {
151 sh_eta[
i][j] = (TH1F*)ig.
get(eta_label.Data())->getTH1F()->Clone();
152 sh_eta[
i][j]->Sumw2();
154 else std::cout<<
"Can not found eta histogram : "<<eta_label<<std::endl;
155 ProcessBooking( ibooker, ig,
"rh_eta", suffix, gem_trk_eta[i], sh_eta[i][j]);
156 for (
unsigned int k= 0 ;
k <
c_suffix.size() ;
k++) {
159 if( ig.
get(phi_label.Data()) !=
nullptr ) {
160 sh_phi[
i][j][
k] = (TH1F*)ig.
get(phi_label.Data())->getTH1F()->Clone();
161 sh_phi[
i][j][
k]->Sumw2();
163 else {
std::cout<<
"Can not found phi plots : "<<phi_label<<std::endl;
continue; }
164 ProcessBooking( ibooker, ig,
"rh_phi",suffix, gem_trk_phi[i][k], sh_phi[i][j][k]);
168 else std::cout<<
"Can not find eta or phi of all track"<<std::endl;
T getUntrackedParameter(std::string const &, T const &) const
static const std::array< std::string, 4 > l_suffix
MonitorElement * bookProfile(Args &&...args)
MonitorElement * get(const std::string &path)
#define DEFINE_FWK_MODULE(type)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
static const std::array< std::string, 2 > s_suffix
TProfile * ComputeEff(TH1F *num, TH1F *denum)
MuonGEMRecHitsHarvestor(const edm::ParameterSet &)
constructor
void setCurrentFolder(const std::string &fullpath)
void ProcessBooking(DQMStore::IBooker &, DQMStore::IGetter &, const char *label, TString suffix, TH1F *track_hist, TH1F *sh_hist)
~MuonGEMRecHitsHarvestor() override
destructor
static const std::array< std::string, 3 > c_suffix