CMS 3D CMS Logo

EgHLTEleHLTFilterMon.cc
Go to the documentation of this file.
6 
8 
10 
11 using namespace egHLT;
12 
13 EleHLTFilterMon::EleHLTFilterMon(MonElemFuncs& monElemFuncs,const std::string& filterName,TrigCodes::TrigBitSet filterBit,const BinData& bins,const CutMasks& masks,bool doHEP):
14  filterName_(filterName),
15  filterBit_(filterBit),
16  doHEP_(doHEP)
17 {
18  bool doChargeSep = false;
19  bool monHLTFailedEle = false;
20  bool doFakeRate=false;
21  bool doTagAndProbe=false;
22  bool doN1andSingleEffs=false;
23  std::string histname="egamma";
24 
25  eleMonElems_.push_back(new MonElemContainer<OffEle>());
26  //---Morse-------
27  //eleMonElems_.push_back(new MonElemContainer<OffEle>("_cut"," cut, debug hists ",new EgHLTDQMVarCut<OffEle>(~0x0,&OffEle::cutCode)));
28  //-----------------
29  if(doChargeSep){
30  eleMonElems_.push_back(new MonElemContainer<OffEle>("_posCharge"," q=+1 ",new ChargeCut<OffEle>(1)));
31  eleMonElems_.push_back(new MonElemContainer<OffEle>("_negCharge"," q=-1 ",new ChargeCut<OffEle>(-1)));
32  }
33 
34  for(auto & eleMonElem : eleMonElems_){
35  if(doHEP_){
36  monElemFuncs.initStdEleHistsHEP(eleMonElem->monElems(),filterName,histname+"_passFilter"+eleMonElem->name(),bins);
37  }else{
38  monElemFuncs.initStdEleHists(eleMonElem->monElems(),filterName,filterName_+"_gsfEle_passFilter"+eleMonElem->name(),bins);
39  }
40  }
41  if(monHLTFailedEle){
43  if(doChargeSep) {
44  eleFailMonElems_.push_back(new MonElemContainer<OffEle>("_posCharge"," q=+1 ",new ChargeCut<OffEle>(1)));
45  eleFailMonElems_.push_back(new MonElemContainer<OffEle>("_negCharge"," q=-1 ",new ChargeCut<OffEle>(-1)));
46  }
47  }
48  for(size_t i=0;i<eleFailMonElems_.size();i++){
49  if(doHEP_){
50  monElemFuncs.initStdEleHistsHEP(eleMonElems_[i]->monElems(),filterName,histname+"_passFilter"+eleMonElems_[i]->name(),bins);
51  }else{
52  monElemFuncs.initStdEleHists(eleFailMonElems_[i]->monElems(),filterName,filterName_+"_gsfEle_failFilter"+eleMonElems_[i]->name(),bins);
53  }
54  }
55 
56  int effProbeCutCode = masks.probeEle;
57  int effTagCutCode = masks.stdEle;
58  int fakeRateProbeCut = masks.fakeEle;
59  eleEffHists_.push_back(new MonElemContainer<OffEle>());
60  if(doTagAndProbe) eleEffHists_.push_back(new MonElemContainer<OffEle>("_tagProbe"," Tag and Probe ",new EgTagProbeCut<OffEle>(effProbeCutCode,&OffEle::cutCode,effTagCutCode,&OffEle::cutCode)));
61  if(doFakeRate) eleEffHists_.push_back(new MonElemContainer<OffEle>("_fakeRate"," Fake Rate ",new EgJetTagProbeCut<OffEle>(fakeRateProbeCut,&OffEle::looseCutCode)));
62  if(doN1andSingleEffs){
63  for(auto & eleEffHist : eleEffHists_){
64  monElemFuncs.initStdEffHists(eleEffHist->cutMonElems(),filterName,
65  filterName_+"_gsfEle_effVsEt"+eleEffHist->name(),bins.et,&OffEle::et,masks);
66  monElemFuncs.initStdEffHists(eleEffHist->cutMonElems(),filterName,
67  filterName_+"_gsfEle_effVsEta"+eleEffHist->name(),bins.eta,&OffEle::eta,masks);
68  /* monElemFuncs.initStdEffHists(eleEffHists_[i]->cutMonElems(),filterName,
69  filterName_+"_gsfEle_effVsPhi"+eleEffHists_[i]->name(),bins.phi,&OffEle::phi,masks); */
70  // monElemFuncs.initStdEffHists(eleEffHists_[i]->cutMonElems(),filterName,
71  // filterName_+"_gsfEle_effVsCharge"+eleEffHists_[i]->name(),bins.charge,&OffEle::chargeF);
72  }
73  }
74  if(!doHEP_)
75  {
76  typedef MonElemManager<ParticlePair<OffEle>,float > DiEleMon;
77  diEleMassBothME_ = new DiEleMon(monElemFuncs.getIB(), filterName_+"_diEle_bothPassFilter_mass",
78  filterName_+"_diEle_bothPassFilter Mass;M_{ee} (GeV/c^{2})",
80  diEleMassOnlyOneME_ = new DiEleMon(monElemFuncs.getIB(), filterName_+"_diEle_onlyOnePass Filter_mass",
81  filterName_+"_diEle_onlyOnePassFilter Mass;M_{ee} (GeV/c^{2})",
83 
84  diEleMassBothHighME_ = new DiEleMon(monElemFuncs.getIB(), filterName_+"_diEle_bothPassFilter_massHigh",
85  filterName_+"_diEle_bothPassFilter Mass;M_{ee} (GeV/c^{2})",
87  diEleMassOnlyOneHighME_ = new DiEleMon(monElemFuncs.getIB(), filterName_+"_diEle_onlyOnePassFilter_massHigh",
88  filterName_+"_diEle_onlyOnePassFilter Mass;M_{ee} (GeV/c^{2})",
90  }
91 }
92 
94 {
95  for(auto & eleMonElem : eleMonElems_) delete eleMonElem;
96  for(auto & eleFailMonElem : eleFailMonElems_) delete eleFailMonElem;
97  for(auto & eleEffHist : eleEffHists_) delete eleEffHist;
98  if(!doHEP_)
99  {
100  delete diEleMassBothME_;
101  delete diEleMassOnlyOneME_;
102  delete diEleMassBothHighME_;
104  }
105 }
106 
107 void EleHLTFilterMon::fill(const OffEvt& evt,float weight)
108 {
109  for(size_t eleNr=0;eleNr<evt.eles().size();eleNr++){
110  const OffEle& ele = evt.eles()[eleNr];
111  if((ele.trigBits()&filterBit_)!=0){ //ele passes
112  for(auto & eleMonElem : eleMonElems_) eleMonElem->fill(ele,evt,weight);
113  for(auto & eleEffHist : eleEffHists_) eleEffHist->fill(ele,evt,weight);
114  }else { //ele didnt pass trigger
115  for(auto & eleFailMonElem : eleFailMonElems_) eleFailMonElem->fill(ele,evt,weight);
116  }
117  }//end loop over electrons
118 
119  if((evt.evtTrigBits()&filterBit_)!=0){
120  for(size_t ele1Nr=0;ele1Nr<evt.eles().size();ele1Nr++){
121  for(size_t ele2Nr=ele1Nr+1;ele2Nr<evt.eles().size();ele2Nr++){
122  const OffEle& ele1 = evt.eles()[ele1Nr];
123  const OffEle& ele2 = evt.eles()[ele2Nr];
124  if(!doHEP_)
125  {
126  if((ele1.trigBits()&ele2.trigBits()&filterBit_)==filterBit_) {
127  diEleMassBothME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
128  diEleMassBothHighME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
129  }else if((ele1.trigBits()&filterBit_)==filterBit_ ||
130  (ele2.trigBits()&filterBit_)==filterBit_){
131  diEleMassOnlyOneME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
132  diEleMassOnlyOneHighME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
133  }
134 
135  }
136  }//end inner ele loop
137  }//end outer ele loop
138  }//end check if filter is present
139 }
140 
141 
142 
143 
void initStdEleHists(std::vector< MonElemManagerBase< OffEle > * > &histVec, const std::string &filterName, const std::string &baseName, const BinData &bins)
const TrigCodes::TrigBitSet filterBit_
float eta() const
Definition: EgHLTOffEle.h:120
std::vector< MonElemContainer< OffEle > * > eleMonElems_
int looseCutCode() const
Definition: EgHLTOffEle.h:212
TrigCodes::TrigBitSet trigBits() const
Definition: EgHLTOffEle.h:219
Definition: weight.py:1
float et() const
Definition: EgHLTOffEle.h:117
MonElemManagerBase< ParticlePair< OffEle > > * diEleMassOnlyOneHighME_
TrigCodes::TrigBitSet evtTrigBits() const
Definition: EgHLTOffEvt.h:52
const std::string & filterName() const
void fill(const OffEvt &evt, float weight)
MonElemManagerBase< ParticlePair< OffEle > > * diEleMassBothHighME_
std::vector< MonElemContainer< OffEle > * > eleEffHists_
int cutCode() const
Definition: EgHLTOffEle.h:211
void initStdEleHistsHEP(std::vector< MonElemManagerBase< OffEle > * > &histVec, const std::string &filterName, const std::string &baseName, const BinData &bins)
std::vector< MonElemContainer< OffEle > * > eleFailMonElems_
MonElemManagerBase< ParticlePair< OffEle > > * diEleMassBothME_
EleHLTFilterMon(const EleHLTFilterMon &)
const std::vector< OffEle > & eles() const
Definition: EgHLTOffEvt.h:48
DQMStore::IBooker & getIB()
MonElemManagerBase< ParticlePair< OffEle > > * diEleMassOnlyOneME_
std::bitset< maxNrBits_ > TrigBitSet
void initStdEffHists(std::vector< MonElemWithCutBase< OffEle > * > &histVec, const std::string &filterName, const std::string &baseName, int nrBins, double xMin, double xMax, float(OffEle::*vsVarFunc)() const, const CutMasks &masks)