CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Attributes
HLTBTagHarvestingAnalyzer Class Reference

#include <HLTBTagHarvestingAnalyzer.h>

Inheritance diagram for HLTBTagHarvestingAnalyzer:
DQMEDHarvester edm::one::EDAnalyzer< edm::one::WatchRuns, edm::one::WatchLuminosityBlocks, edm::one::SharedResources > edm::one::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

TH1F calculateEfficiency1D (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, TH1 &num, TH1 &den, std::string name)
 
virtual void dqmEndJob (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
 
bool GetNumDenumerators (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string num, std::string den, TH1 *&ptrnum, TH1 *&ptrden, int type)
 
 HLTBTagHarvestingAnalyzer (const edm::ParameterSet &)
 
void mistagrate (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, TH1F *num, TH1F *den, std::string effName)
 
 ~HLTBTagHarvestingAnalyzer ()
 
- Public Member Functions inherited from DQMEDHarvester
virtual void analyze (edm::Event const &, edm::EventSetup const &) final
 
virtual void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
virtual void beginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDHarvester (void)
 
virtual void dqmEndLuminosityBlock (DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void endJob () final
 
virtual void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
virtual void endRun (edm::Run const &, edm::EventSetup const &)
 
- Public Member Functions inherited from edm::one::EDAnalyzer< edm::one::WatchRuns, edm::one::WatchLuminosityBlocks, edm::one::SharedResources >
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Types

typedef unsigned int flavour_t
 
typedef std::vector< flavour_tflavours_t
 

Private Attributes

std::map< std::string,
MonitorElement * > 
H1_
 
std::vector< std::string > hltPathNames_
 
std::vector< std::string > m_histoName
 
std::vector< flavours_tm_mcFlavours
 
std::vector< std::string > m_mcLabels
 
bool m_mcMatching
 
double m_minTag
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Code used to produce DQM validation plots for b-tag at HLT. This class read the plots producted by HLTBTagPerformanceAnalyzer and make plots of: b-tag efficiency vs discr, b-tag efficiency vs jet pt, b-tag efficiency vs mistag rate

Definition at line 27 of file HLTBTagHarvestingAnalyzer.h.

Member Typedef Documentation

typedef unsigned int HLTBTagHarvestingAnalyzer::flavour_t
private

Definition at line 40 of file HLTBTagHarvestingAnalyzer.h.

typedef std::vector<flavour_t> HLTBTagHarvestingAnalyzer::flavours_t
private

Definition at line 41 of file HLTBTagHarvestingAnalyzer.h.

Constructor & Destructor Documentation

HLTBTagHarvestingAnalyzer::HLTBTagHarvestingAnalyzer ( const edm::ParameterSet iConfig)
explicit

Definition at line 3 of file HLTBTagHarvestingAnalyzer.cc.

References edm::ParameterSet::getParameter(), hltPathNames_, m_histoName, m_mcLabels, and m_minTag.

4 {
5  //getParameter
6  hltPathNames_ = iConfig.getParameter< std::vector<std::string> > ("HLTPathNames");
7  edm::ParameterSet mc = iConfig.getParameter<edm::ParameterSet>("mcFlavours");
8  m_mcLabels = mc.getParameterNamesForType<std::vector<unsigned int> >();
9  m_histoName = iConfig.getParameter<std::vector<std::string> >("histoName");
10  m_minTag = iConfig.getParameter<double>("minTag");
11 }
T getParameter(std::string const &) const
std::vector< std::string > m_mcLabels
std::vector< std::string > m_histoName
std::vector< std::string > hltPathNames_
HLTBTagHarvestingAnalyzer::~HLTBTagHarvestingAnalyzer ( )

Definition at line 13 of file HLTBTagHarvestingAnalyzer.cc.

14 {
15 }

Member Function Documentation

TH1F HLTBTagHarvestingAnalyzer::calculateEfficiency1D ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
TH1 &  num,
TH1 &  den,
std::string  name 
)

Definition at line 163 of file HLTBTagHarvestingAnalyzer.cc.

References DQMStore::IBooker::book1D(), ztail::d, alignCSCRings::e, i, gen::n, MonitorElement::setEfficiencyFlag(), and mathSSE::sqrt().

Referenced by dqmEndJob().

163  {
164  //calculate the efficiency as num/den ratio
165  TH1F eff;
166  if(num.GetXaxis()->GetXbins()->GetSize()==0){
167  eff = TH1F(effName.c_str(),effName.c_str(),num.GetXaxis()->GetNbins(),num.GetXaxis()->GetXmin(),num.GetXaxis()->GetXmax());
168  }else{
169  eff = TH1F(effName.c_str(),effName.c_str(),num.GetXaxis()->GetNbins(),num.GetXaxis()->GetXbins()->GetArray());
170  }
171  eff.SetTitle(effName.c_str());
172  eff.SetXTitle( num.GetXaxis()->GetTitle() );
173  eff.SetYTitle("Efficiency");
174  eff.SetOption("PE");
175  eff.SetLineColor(2);
176  eff.SetLineWidth(2);
177  eff.SetMarkerStyle(20);
178  eff.SetMarkerSize(0.8);
179  eff.GetYaxis()->SetRangeUser(-0.001,1.001);
180  for(int i=1;i<=num.GetNbinsX();i++){
181  double d, n,err;
182  d= den.GetBinContent(i);
183  n= num.GetBinContent(i);
184  double e;
185  if(d!=0){
186  e=n/d;
187  err = sqrt(e*(1-e)/d); //from binomial standard deviation
188  }
189  else{
190  e=0;
191  err=0;
192  }
193  eff.SetBinContent( i, e );
194  eff.SetBinError( i, err );
195  }
196 
197  MonitorElement *me;
198  me = ibooker.book1D(effName,&eff);
199  me->setEfficiencyFlag();
200 
201  return eff;
202 }
int i
Definition: DBlmapReader.cc:9
tuple d
Definition: ztail.py:151
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
void setEfficiencyFlag(void)
void HLTBTagHarvestingAnalyzer::dqmEndJob ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter 
)
virtual

for mc labels

save mistagrate vs b-eff plots

for triggers

Implements DQMEDHarvester.

Definition at line 19 of file HLTBTagHarvestingAnalyzer.cc.

References calculateEfficiency1D(), reco::flavour(), GetNumDenumerators(), hltPathNames_, i, diffTwoXMLs::label, edm::errors::LogicError, m_histoName, m_mcLabels, mistagrate(), NULL, pileupDistInMC::num, DQMStore::IBooker::setCurrentFolder(), and AlCaHLTBitMon_QueryRunRegistry::string.

20 {
21  using namespace edm;
23  std::string dqmFolder_hist;
24 
25  //for each hltPath and for each flavour, do the "b-tag efficiency vs jet pt" and "b-tag efficiency vs mistag rate" plots
26  for (unsigned int ind=0; ind<hltPathNames_.size();ind++)
27  {
28  dqmFolder_hist = Form("HLT/BTag/Discriminator/%s",hltPathNames_[ind].c_str());
29  std::string effDir = Form("HLT/BTag/Discriminator/%s/efficiency",hltPathNames_[ind].c_str());
30  ibooker.setCurrentFolder(effDir);
31  TH1 *den =NULL;
32  TH1 *num =NULL;
33  std::map<TString,TH1F> effics;
34  std::map<TString,bool> efficsOK;
35  for (unsigned int i = 0; i < m_mcLabels.size(); ++i)
36  {
37  bool isOK=false;
38  TString label= m_histoName.at(ind) + std::string("__"); //"JetTag__";
39  TString flavour= m_mcLabels[i].c_str();
40  label+=flavour;
41  isOK=GetNumDenumerators(ibooker,igetter,(TString(dqmFolder_hist)+"/"+label).Data(),(TString(dqmFolder_hist)+"/"+label).Data(),num,den,0);
42  if (isOK){
43 
44  //do the 'b-tag efficiency vs discr' plot
45  effics[flavour]=calculateEfficiency1D(ibooker,igetter,*num,*den,(label+"_efficiency_vs_disc").Data());
46  efficsOK[flavour]=isOK;
47  }
48  label= m_histoName.at(ind)+std::string("___");
49  label+=flavour+TString("_disc_pT");
50  isOK=GetNumDenumerators (ibooker,igetter,(TString(dqmFolder_hist)+"/"+label).Data(),(TString(dqmFolder_hist)+"/"+label).Data(),num,den,1);
51  if (isOK) {
52 
53  //do the 'b-tag efficiency vs pT' plot
54  TH1F eff=calculateEfficiency1D(ibooker,igetter,*num,*den,(label+"_efficiency_vs_pT").Data());
55  }
56  }
57 
59  if (efficsOK["b"] && efficsOK["c"]) mistagrate(ibooker,igetter,&effics["b"], &effics["c"], m_histoName.at(ind)+"_b_c_mistagrate" );
60  if (efficsOK["b"] && efficsOK["light"]) mistagrate(ibooker,igetter,&effics["b"], &effics["light"], m_histoName.at(ind)+"_b_light_mistagrate" );
61  if (efficsOK["b"] && efficsOK["g"]) mistagrate(ibooker,igetter,&effics["b"], &effics["g"], m_histoName.at(ind)+"_b_g_mistagrate" );
62  }
63 }
int i
Definition: DBlmapReader.cc:9
#define NULL
Definition: scimark2.h:8
TH1F calculateEfficiency1D(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, TH1 &num, TH1 &den, std::string name)
std::vector< std::string > m_mcLabels
std::vector< std::string > m_histoName
bool GetNumDenumerators(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string num, std::string den, TH1 *&ptrnum, TH1 *&ptrden, int type)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
std::vector< std::string > hltPathNames_
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
void mistagrate(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, TH1F *num, TH1F *den, std::string effName)
bool HLTBTagHarvestingAnalyzer::GetNumDenumerators ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
std::string  num,
std::string  den,
TH1 *&  ptrnum,
TH1 *&  ptrden,
int  type 
)

numerator preparing

denominator preparing

Definition at line 65 of file HLTBTagHarvestingAnalyzer.cc.

References DQMStore::IGetter::get(), j, edm::errors::LogicError, m_minTag, NULL, and cms::Exception::raise().

Referenced by dqmEndJob().

66 {
67  using namespace edm;
68 /*
69  possible types:
70  type =0 for eff_vs_discriminator
71  type =1 for eff_vs_pT ot eff_vs_Eta
72  */
73  MonitorElement *denME = NULL;
74  MonitorElement *numME = NULL;
75  denME = igetter.get(den);
76  numME = igetter.get(num);
78 
79  if ( denME == NULL || numME == NULL )
80  {
81  excp << "Plots not found:\n";
82  if(denME == NULL) excp << den << "\n";
83  if(numME == NULL) excp << num << "\n";
84  excp.raise();
85  }
86 
87  if (type==0) //efficiency_vs_discr: fill "ptrnum" with the cumulative function of the DQM plots contained in "num" and "ptrden" with a flat function
88  {
89  TH1* numH1 = numME->getTH1();
90  TH1* denH1 = denME->getTH1();
91  ptrden=(TH1*)denH1->Clone("denominator");
92  ptrnum=(TH1*)numH1->Clone("numerator");
93 
94  ptrnum->SetBinContent(1,numH1->Integral());
95  ptrden->SetBinContent(1,numH1->Integral());
96  for (int j=2;j<=numH1->GetNbinsX();j++) {
97  ptrnum->SetBinContent(j,numH1->Integral()-numH1->Integral(1,j-1));
98  ptrden->SetBinContent(j,numH1->Integral());
99  }
100  }
101 
102  if (type==1) //efficiency_vs_pT: fill "ptrden" with projection of the plots contained in "den" and fill "ptrnum" with projection of the plots contained in "num", having btag>m_minTag
103  {
104  TH2F* numH2 = numME->getTH2F();
105  TH2F* denH2 = denME->getTH2F();
106 
108  TCutG * cutg_num= new TCutG("cutg_num",4);
109  cutg_num->SetPoint(0,m_minTag,0);
110  cutg_num->SetPoint(1,m_minTag,9999);
111  cutg_num->SetPoint(2,1.1,9999);
112  cutg_num->SetPoint(3,1.1,0);
113  ptrnum = numH2->ProjectionY("numerator",0,-1,"[cutg_num]");
114 
116  TCutG * cutg_den= new TCutG("cutg_den",4);
117  cutg_den->SetPoint(0,-10.1,0);
118  cutg_den->SetPoint(1,-10.1,9999);
119  cutg_den->SetPoint(2,1.1,9999);
120  cutg_den->SetPoint(3,1.1,0);
121  ptrden = denH2->ProjectionY("denumerator",0,-1,"[cutg_den]");
122  delete cutg_num;
123  delete cutg_den;
124  }
125  return true;
126 }
type
Definition: HCALResponse.h:21
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:302
#define NULL
Definition: scimark2.h:8
int j
Definition: DBlmapReader.cc:9
void HLTBTagHarvestingAnalyzer::mistagrate ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
TH1F *  num,
TH1F *  den,
std::string  effName 
)

Definition at line 129 of file HLTBTagHarvestingAnalyzer.cc.

References DQMStore::IBooker::book1D(), i, and MonitorElement::setEfficiencyFlag().

Referenced by dqmEndJob().

129  {
130  //do the efficiency_vs_mistag_rate plot
131  TH1F* eff;
132  eff = new TH1F(effName.c_str(),effName.c_str(),100,0,1);
133  eff->SetTitle(effName.c_str());
134  eff->SetXTitle("b-effficiency");
135  eff->SetYTitle("mistag rate");
136  eff->SetOption("E");
137  eff->SetLineColor(2);
138  eff->SetLineWidth(2);
139  eff->SetMarkerStyle(20);
140  eff->SetMarkerSize(0.8);
141  eff->GetYaxis()->SetRangeUser(0.001,1.001);
142  eff->GetXaxis()->SetRangeUser(-0.001,1.001);
143  eff->SetStats(kFALSE);
144 
145  //for each bin in the discr -> find efficiency and mistagrate -> put them in a plot
146  for(int i=1;i<=num->GetNbinsX();i++){
147  double beff=num->GetBinContent(i);
148  double miseff=den->GetBinContent(i);
149  double miseffErr= den->GetBinError(i);
150  int binX = eff->GetXaxis()->FindBin(beff);
151  if (eff->GetBinContent(binX)!=0) continue;
152  eff->SetBinContent(binX,miseff);
153  eff->SetBinError(binX,miseffErr);
154  }
155  MonitorElement *me;
156  me = ibooker.book1D(effName.c_str(),eff);
157  me->setEfficiencyFlag();
158 
159  delete eff;
160  return;
161 }
int i
Definition: DBlmapReader.cc:9
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
void setEfficiencyFlag(void)

Member Data Documentation

std::map<std::string, MonitorElement *> HLTBTagHarvestingAnalyzer::H1_
private

Definition at line 49 of file HLTBTagHarvestingAnalyzer.h.

std::vector<std::string> HLTBTagHarvestingAnalyzer::hltPathNames_
private

Definition at line 39 of file HLTBTagHarvestingAnalyzer.h.

Referenced by dqmEndJob(), and HLTBTagHarvestingAnalyzer().

std::vector< std::string> HLTBTagHarvestingAnalyzer::m_histoName
private

Definition at line 46 of file HLTBTagHarvestingAnalyzer.h.

Referenced by dqmEndJob(), and HLTBTagHarvestingAnalyzer().

std::vector<flavours_t> HLTBTagHarvestingAnalyzer::m_mcFlavours
private

Definition at line 44 of file HLTBTagHarvestingAnalyzer.h.

std::vector<std::string> HLTBTagHarvestingAnalyzer::m_mcLabels
private

Definition at line 43 of file HLTBTagHarvestingAnalyzer.h.

Referenced by dqmEndJob(), and HLTBTagHarvestingAnalyzer().

bool HLTBTagHarvestingAnalyzer::m_mcMatching
private

Definition at line 45 of file HLTBTagHarvestingAnalyzer.h.

double HLTBTagHarvestingAnalyzer::m_minTag
private

Definition at line 42 of file HLTBTagHarvestingAnalyzer.h.

Referenced by GetNumDenumerators(), and HLTBTagHarvestingAnalyzer().