CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTTauDQMLitePathPlotter.cc
Go to the documentation of this file.
2 
3 HLTTauDQMLitePathPlotter::HLTTauDQMLitePathPlotter( const edm::ParameterSet& ps, int etbins, int etabins, int phibins, double maxpt, bool ref, double dr, std::string dqmBaseFolder ) {
4  //Initialize Plotter
5  name_ = "HLTTauDQMLitePathPlotter";
6 
7  //Process PSet
8  try {
9  triggerEvent_ = ps.getUntrackedParameter<edm::InputTag>("TriggerEventObject");
12  filters_ = ps.getUntrackedParameter<std::vector<edm::ParameterSet> >("Filters");
13  refTauPt_ = ps.getUntrackedParameter<double>("refTauPt",20);
14  refLeptonPt_ = ps.getUntrackedParameter<double>("refLeptonPt",15);
15  doRefAnalysis_ = ref;
16  dqmBaseFolder_ = dqmBaseFolder;
17  matchDeltaR_ = dr;
18  maxEt_ = maxpt;
19  binsEt_ = etbins;
20  binsEta_ = etabins;
21  binsPhi_ = phibins;
22  validity_ = true;
23  } catch ( cms::Exception &e ) {
24  edm::LogInfo("HLTTauDQMLitePathPlotter::HLTTauDQMLitePathPlotter") << e.what() << std::endl;
25  validity_ = false;
26  return;
27  }
28 
29  for ( std::vector<edm::ParameterSet>::const_iterator iter = filters_.begin(); iter != filters_.end(); ++iter ) {
31  if (tmp.isValid()) filterObjs_.push_back(tmp);
32  }
33 
34  if (store_) {
35  //Create the histograms
38 
39  accepted_events = store_->book1D("PathTriggerBits","Accepted Events per Path;;entries",filterObjs_.size(),0,filterObjs_.size());
40 
41  for ( size_t k = 0; k < filterObjs_.size(); ++k ) {
42  accepted_events->setBinLabel(k+1,filterObjs_[k].getAlias(),1);
43  if ( filterObjs_[k].getNTriggeredTaus() >= 2 || (filterObjs_[k].getNTriggeredTaus() >= 1 && filterObjs_[k].getNTriggeredLeptons() >= 1) ) {
44  mass_distribution.insert(std::make_pair(filterObjs_[k].getAlias(), store_->book1D(("mass_"+filterObjs_[k].getAlias()).c_str(),("Mass Distribution for "+filterObjs_[k].getAlias()).c_str(),100,0,500)));
45  }
46  }
47 
48  if (doRefAnalysis_) {
49  accepted_events_matched = store_->book1D("MatchedPathTriggerBits","Accepted+Matched Events per Path;;entries",filterObjs_.size(),0,filterObjs_.size());
50  accepted_events_matched->getTH1F()->Sumw2();
51 
52  for ( size_t k = 0; k < filterObjs_.size(); ++k ) {
54  }
55  ref_events = store_->book1D("RefEvents","Reference Events per Path",filterObjs_.size(),0,filterObjs_.size());
56  ref_events->getTH1F()->Sumw2();
57 
58  for ( size_t k = 0; k < filterObjs_.size(); ++k ) {
59  ref_events->setBinLabel(k+1,filterObjs_[k].getAlias(),1);
60  }
61  }
62 
63  tauEt = store_->book1D("TrigTauEt","#tau E_{t}",binsEt_,0,maxEt_);
64  tauEta = store_->book1D("TrigTauEta","#tau #eta",binsEta_,-2.5,2.5);
65  tauPhi = store_->book1D("TrigTauPhi","#tau #phi",binsPhi_,-3.2,3.2);
66 
67  if (doRefAnalysis_) {
68  store_->setCurrentFolder(triggerTag()+"/EfficiencyHelpers");
70 
71  tauEtEffNum = store_->book1D("TrigTauEtEffNum","#tau E_{T} Efficiency",binsEt_,0,maxEt_);
72  tauEtEffNum->getTH1F()->Sumw2();
73 
74  tauEtEffDenom = store_->book1D("TrigTauEtEffDenom","#tau E_{T} Denominator",binsEt_,0,maxEt_);
75  tauEtEffDenom->getTH1F()->Sumw2();
76 
77  tauEtaEffNum = store_->book1D("TrigTauEtaEffNum","#tau #eta Efficiency",binsEta_,-2.5,2.5);
78  tauEtaEffNum->getTH1F()->Sumw2();
79 
80  tauEtaEffDenom = store_->book1D("TrigTauEtaEffDenom","#tau #eta Denominator",binsEta_,-2.5,2.5);
81  tauEtaEffDenom->getTH1F()->Sumw2();
82 
83  tauPhiEffNum = store_->book1D("TrigTauPhiEffNum","#tau #phi Efficiency",binsPhi_,-3.2,3.2);
84  tauPhiEffNum->getTH1F()->Sumw2();
85 
86  tauPhiEffDenom = store_->book1D("TrigTauPhiEffDenom","#tau #phi Denominator",binsPhi_,-3.2,3.2);
87  tauPhiEffDenom->getTH1F()->Sumw2();
88  }
89  }
90 }
91 
93 }
94 
95 //
96 // member functions
97 //
98 
99 void HLTTauDQMLitePathPlotter::analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup, const std::map<int,LVColl>& refC ) {
100  std::vector<bool> isGoodReferenceEvent;
101 
102  LV highestRefTau(0.,0.,0.,0.0001);
103  LVColl triggeredTaus, refTaus, refElectrons, refMuons;
104 
105  std::map<int,LVColl>::const_iterator iref;
106 
107  //Tau reference
108  iref = refC.find(15);
109  if ( iref != refC.end() ) {
110  for ( LVColl::const_iterator lvi = iref->second.begin(); lvi != iref->second.end(); ++lvi ) {
111  if ( lvi->Et() > highestRefTau.pt() ) {
112  highestRefTau = *lvi;
113  }
114  }
115  }
116 
117  //Fill ref collection for the filters
118  if (doRefAnalysis_) {
119  unsigned int highPtTaus = 0;
120  unsigned int highPtElectrons = 0;
121  unsigned int highPtMuons = 0;
122 
123  std::map<int,LVColl>::const_iterator iref;
124 
125  //Tau reference
126  iref = refC.find(15);
127  if ( iref != refC.end() ) {
128  for ( LVColl::const_iterator lvi = iref->second.begin(); lvi != iref->second.end(); ++lvi ) {
129  if ( lvi->Et() > refTauPt_ ) {
130  highPtTaus++;
131  }
132  refTaus.push_back(*lvi);
133  }
134  }
135  //Electron reference
136  iref = refC.find(11);
137  if ( iref != refC.end() ) {
138  for ( LVColl::const_iterator lvi = iref->second.begin(); lvi != iref->second.end(); ++lvi ) {
139  if ( lvi->Et() > refLeptonPt_ ) {
140  highPtElectrons++;
141  }
142  refElectrons.push_back(*lvi);
143  }
144  }
145  //Muon reference
146  iref = refC.find(13);
147  if ( iref != refC.end() ) {
148  for ( LVColl::const_iterator lvi = iref->second.begin(); lvi != iref->second.end(); ++lvi ) {
149  if ( lvi->Et() > refLeptonPt_ ) {
150  highPtMuons++;
151  }
152  refMuons.push_back(*lvi);
153  }
154  }
155 
156  for ( size_t i = 0; i < filterObjs_.size(); ++i ) {
157  bool tau_ok = true;
158  bool leptons_ok = true;
159 
160  if ( highPtTaus < filterObjs_[i].getNTriggeredTaus() ) tau_ok = false;
161  if ( filterObjs_[i].leptonId() == 11 && highPtElectrons < filterObjs_[i].getNTriggeredLeptons() ) leptons_ok = false;
162  if ( filterObjs_[i].leptonId() == 13 && highPtMuons < filterObjs_[i].getNTriggeredLeptons() ) leptons_ok = false;
163 
164  if ( tau_ok && leptons_ok ) {
165  ref_events->Fill(i+0.5);
166  isGoodReferenceEvent.push_back(true);
167  } else {
168  isGoodReferenceEvent.push_back(false);
169  }
170  }
171  }
172 
173  //Get the TriggerEvent
175  bool gotTEV = iEvent.getByLabel(triggerEvent_,trigEv) && trigEv.isValid();
176 
177  if ( gotTEV ) {
178  //Loop through the filters
179  for ( size_t i = 0; i < filterObjs_.size(); ++i ) {
180  std::map<std::string, MonitorElement*>::iterator thisMassDist = mass_distribution.find(filterObjs_[i].getAlias());
181  size_t ID = trigEv->filterIndex(filterObjs_[i].getFilterName());
182  if ( ID != trigEv->sizeFilters() ) {
183  LVColl leptons = getFilterCollection(ID,filterObjs_[i].getLeptonType(),*trigEv);
184  LVColl taus = getFilterCollection(ID,filterObjs_[i].getTauType(),*trigEv);
185 
186  //If this is the single tau trigger copy the collection for the turn on
187  if ( filterObjs_[i].getNTriggeredTaus() == 1 && filterObjs_[i].getNTriggeredLeptons() == 0 ) {
188  triggeredTaus = taus;
189  }
190 
191  //Fired
192  if ( leptons.size() >= filterObjs_[i].getNTriggeredLeptons() && taus.size() >= filterObjs_[i].getNTriggeredTaus() ) {
193  accepted_events->Fill(i+0.5);
194 
195  //Now do the matching only though if we have a good reference event
196  if ( doRefAnalysis_ ) {
197  if ( isGoodReferenceEvent.at(i) ) {
198  size_t nT = 0;
199  for ( size_t j = 0; j < taus.size(); ++j ) {
200  if (match(taus[j],refTaus,matchDeltaR_).first) nT++;
201  }
202  size_t nL = 0;
203  for ( size_t j = 0; j < leptons.size(); ++j ) {
204  if (match(leptons[j],refElectrons,matchDeltaR_).first) nL++;
205  if (match(leptons[j],refMuons,matchDeltaR_).first) nL++;
206  }
207  if ( nT >= filterObjs_[i].getNTriggeredTaus() && nL >= filterObjs_[i].getNTriggeredLeptons() ) {
209  if ( filterObjs_[i].getNTriggeredTaus() >= 2 && refTaus.size() >= 2 ) {
210  if (thisMassDist != mass_distribution.end()) thisMassDist->second->Fill( (refTaus[0]+refTaus[1]).M() );
211  } else if ( filterObjs_[i].getNTriggeredTaus() >= 1 && filterObjs_[i].getNTriggeredLeptons() >= 1 ) {
212  if ( filterObjs_[i].leptonId() == 11 && refElectrons.size() >= 1 ) {
213  if (thisMassDist != mass_distribution.end()) thisMassDist->second->Fill( (refTaus[0]+refElectrons[0]).M() );
214  }
215  if ( filterObjs_[i].leptonId() == 13 && refMuons.size() >= 1 ) {
216  if (thisMassDist != mass_distribution.end()) thisMassDist->second->Fill( (refTaus[0]+refMuons[0]).M() );
217  }
218  }
219  }
220  }
221  } else {
222  if ( filterObjs_[i].getNTriggeredTaus() >= 2 ) {
223  if (thisMassDist != mass_distribution.end()) thisMassDist->second->Fill( (taus[0]+taus[1]).M() );
224  } else if ( filterObjs_[i].getNTriggeredTaus() >= 1 && filterObjs_[i].getNTriggeredLeptons() >= 1 ) {
225  if (thisMassDist != mass_distribution.end()) thisMassDist->second->Fill( (taus[0]+leptons[0]).M() );
226  }
227  }
228  }
229  }
230  }
231 
232  //Do the object thing for the highest tau!
233  if ( triggeredTaus.size() > 0 ) {
234  LV highestTriggeredTau(0.,0.,0.,0.0001);
235  for ( unsigned int i = 0; i < triggeredTaus.size(); ++i ) {
236  if ( triggeredTaus[i].pt() > highestTriggeredTau.pt() ) {
237  highestTriggeredTau = triggeredTaus[i];
238  }
239  }
240 
241  tauEt->Fill(highestTriggeredTau.pt());
242  tauEta->Fill(highestTriggeredTau.eta());
243  tauPhi->Fill(highestTriggeredTau.phi());
244 
245  if ( doRefAnalysis_ && highestRefTau.pt() > 5.0 ) {
246  tauEtEffDenom->Fill(highestRefTau.pt());
247  tauEtaEffDenom->Fill(highestRefTau.eta());
248  tauPhiEffDenom->Fill(highestRefTau.phi());
249 
250  if ( ROOT::Math::VectorUtil::DeltaR(highestRefTau,highestTriggeredTau) < matchDeltaR_ ) {
251  tauEtEffNum->Fill(highestRefTau.pt());
252  tauEtaEffNum->Fill(highestRefTau.eta());
253  tauPhiEffNum->Fill(highestRefTau.phi());
254  }
255  }
256  }
257  }
258 }
259 
261  trigger::TriggerObjectCollection triggerObjects;
262  triggerObjects = trigEv.getObjects();
263 
264  LVColl out;
265  for ( unsigned int i = 0; i < triggerObjects.size(); ++i ) {
266  if ( abs(triggerObjects[i].id()) == id ) {
267  LV a(triggerObjects[i].px(),triggerObjects[i].py(),triggerObjects[i].pz(),triggerObjects[i].energy());
268  out.push_back(a);
269  }
270  }
271  return out;
272 }
273 
275  //Create output collection
276  LVColl out;
277  //Get all the final trigger objects
278  const trigger::TriggerObjectCollection& TOC(trigEv.getObjects());
279 
280  //Filter index
281  if ( index != trigEv.sizeFilters() ) {
282  const trigger::Keys& KEYS = trigEv.filterKeys(index);
283  for ( size_t i = 0; i < KEYS.size(); ++i ) {
284  const trigger::TriggerObject& TO(TOC[KEYS[i]]);
285  LV a(TO.px(),TO.py(),TO.pz(),sqrt(TO.px()*TO.px()+TO.py()*TO.py()+TO.pz()*TO.pz()));
286  out.push_back(a);
287  }
288  }
289  return out;
290 }
virtual char const * what() const
Definition: Exception.cc:141
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:27
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:137
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:722
uint32_t ID
Definition: Definitions.h:26
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:113
edm::InputTag triggerEvent_
InputTag of TriggerEventWithRefs to analyze.
HLTTauDQMLitePathPlotter(const edm::ParameterSet &, int, int, int, double, bool, double, std::string)
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)
#define abs(x)
Definition: mlp_lapack.h:159
std::vector< edm::ParameterSet > filters_
LVColl getObjectCollection(int, const trigger::TriggerEvent &)
void Fill(long long x)
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:24
math::XYZTLorentzVectorD LV
int iEvent
Definition: GenABIO.cc:243
void removeContents(void)
erase all monitoring elements in current directory (not including subfolders);
Definition: DQMStore.cc:2569
std::vector< HLTTauDQMPlotter::FilterObject > filterObjs_
void analyze(const edm::Event &, const edm::EventSetup &, const std::map< int, LVColl > &)
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:100
std::vector< LV > LVColl
T sqrt(T t)
Definition: SSEVec.h:48
std::string triggerTagAlias_
int j
Definition: DBlmapReader.cc:9
std::map< std::string, MonitorElement * > mass_distribution
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
MonitorElement * accepted_events_matched
int k[5][pyjets_maxn]
tuple out
Definition: dbtoconf.py:99
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:83
std::string triggerTag()
std::vector< size_type > Keys
TH1F * getTH1F(void) const
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
double a
Definition: hdecay.h:121
std::pair< bool, LV > match(const LV &, const LVColl &, double)
LVColl getFilterCollection(size_t, int, const trigger::TriggerEvent &)
std::string triggerTag_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:434
std::string dqmBaseFolder_