CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1TCompare.cc
Go to the documentation of this file.
1 /*
2  * \file L1TCompare.cc
3  * \author P. Wittich
4  * \brief Compare different parts of the trigger chain (e.g., RCT-GCT )
5  *
6  *
7  * organized message logger
8  *
9  * Revision 1.12 2008/03/14 20:35:46 berryhil
10  *
11  *
12  * stripped out obsolete parameter settings
13  *
14  * rpc tpg restored with correct dn access and dbe handling
15  *
16  * Revision 1.11 2008/03/12 17:24:24 berryhil
17  *
18  *
19  * eliminated log files, truncated HCALTPGXana histo output
20  *
21  * Revision 1.10 2008/03/01 00:40:00 lat
22  * DQM core migration.
23  *
24  * Revision 1.9 2008/01/22 18:56:01 muzaffar
25  * include cleanup. Only for cc/cpp files
26  *
27  * Revision 1.8 2007/12/21 20:04:50 wsun
28  * Migrated L1EtMissParticle -> L1EtMissParticleCollection.
29  *
30  * Revision 1.7 2007/12/21 17:41:20 berryhil
31  *
32  *
33  * try/catch removal
34  *
35  * Revision 1.6 2007/11/19 15:08:22 lorenzo
36  * changed top folder name
37  *
38  * Revision 1.5 2007/09/27 22:58:15 ratnik
39  * QA campaign: fixes to compensate includes cleanup in DataFormats/L1Trigger
40  *
41  * Revision 1.4 2007/07/19 18:05:06 berryhil
42  *
43  *
44  * L1CaloRegionDetId dataformat migration for L1TCompare
45  *
46  * Revision 1.3 2007/06/13 11:33:39 wittich
47  * add axis titles
48  *
49  * Revision 1.2 2007/06/08 08:37:43 wittich
50  * Add ECAL TP - RCT comparisons. Lingering problems with
51  * mismatches right now - still needs work.
52  *
53  * Revision 1.1 2007/06/06 14:55:51 wittich
54  * compare within trigger subsystems
55  *
56  */
57 
59 
60 // stl
61 #include <algorithm>
62 
63 using namespace l1extra;
64 using namespace edm;
65 
66 const unsigned int PHIBINS = 18;
67 const float PHIMIN = -0.5;
68 const float PHIMAX = 17.5;
69 
70 // Ranks 6, 10 and 12 bits
71 const unsigned int R6BINS = 64;
72 const float R6MIN = -0.5;
73 const float R6MAX = 63.5;
74 
75 // For GCT this should be 15 bins, -14.5 to 14.5
76 //
77 const unsigned int ETABINS = 22;
78 const float ETAMIN = -0.5;
79 const float ETAMAX = 21.5;
80 
81 // TPG
82 const unsigned int TPPHIBINS = 72;
83 const float TPPHIMIN = 0.5;
84 const float TPPHIMAX = 72.5;
85 
86 const unsigned int TPETABINS = 65;
87 const float TPETAMIN = -32.5;
88 const float TPETAMAX = 32.5;
89 
90 
92  rctSourceEm_token_( consumes<L1CaloEmCollection>(ps.getParameter< InputTag >("rctSource") ))
93  ,rctSourceRctEmRgn_token_( consumes<L1CaloRegionCollection>(ps.getParameter< InputTag >("rctSource") ))
94  ,rctSource_( ps.getParameter< InputTag >("rctSource") )
95  ,gctSource_( ps.getParameter< InputTag >("gctSource") )
96  ,ecalTpgSource_(ps.getParameter<edm::InputTag>("ecalTpgSource"))
97  ,ecalTpgSource_token_(consumes<EcalTrigPrimDigiCollection>(ps.getParameter<edm::InputTag>("ecalTpgSource")))
98 
99 {
100 
101  // verbosity switch
102  verbose_ = ps.getUntrackedParameter < bool > ("verbose", false);
103 
104  if (verbose())
105  std::cout << "L1TCompare: constructor...." << std::endl;
106 
107  outputFile_ =
108  ps.getUntrackedParameter < std::string > ("outputFile", "");
109  if (outputFile_.size() != 0) {
110  std::
111  cout << "L1T Monitoring histograms will be saved to " <<
112  outputFile_.c_str() << std::endl;
113  }
114 
115  bool disable =
116  ps.getUntrackedParameter < bool > ("disableROOToutput", false);
117  if (disable) {
118  outputFile_ = "";
119  }
120 
121  //set Token(-s)
122  edm::InputTag gctCenJetsTag_(gctSource_.label(),"cenJets");
123  edm::InputTag gctIsoEmCandsTag_(gctSource_.label(), "isoEm");
124  edm::InputTag gctNonIsoEmCandsTag_(gctSource_.label(), "nonIsoEm");
125 
126  gctCenJetsToken_ = consumes<L1GctJetCandCollection>(gctCenJetsTag_);
127  gctIsoEmCandsToken_ = consumes<L1GctEmCandCollection>(gctIsoEmCandsTag_);
128  gctNonIsoEmCandsToken_ = consumes<L1GctEmCandCollection>(gctNonIsoEmCandsTag_);
129 }
130 
132 {
133 }
134 
136  //
137 }
138 
139 void L1TCompare::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup)
140 {
141  nev_ = 0;
142 
143  ibooker.setCurrentFolder("L1T/Compare");
144 
145  // -------------------------------------------
146  // RCT-GCT
147  // -------------------------------------------
148  // Isolated
149  rctGctLeadingIsoEmRank_ = ibooker.book2D("rctGctLeadingIsoEmRank",
150  "RCT-GCT: rank", R6BINS, R6MIN, R6MAX,
151  R6BINS, R6MIN, R6MAX);
154  rctGctLeadingIsoEmEta_ = ibooker.book2D("rctGctLeadingIsoEmEta",
155  "RCT-GCT: #eta", ETABINS, ETAMIN, ETAMAX,
156  ETABINS, ETAMIN, ETAMAX);
159 
160  rctGctLeadingIsoEmPhi_ = ibooker.book2D("rctGctLeadingIsoEmPhi",
161  "RCT-GCT: #phi", PHIBINS, PHIMIN, PHIMAX,
162  PHIBINS, PHIMIN, PHIMAX);
165  // non-Isolated
166  rctGctLeadingNonIsoEmRank_ = ibooker.book2D("rctGctLeadingNonIsoEmRank",
167  "RCT-GCT: rank", R6BINS, R6MIN, R6MAX,
168  R6BINS, R6MIN, R6MAX);
171 
172  rctGctLeadingNonIsoEmEta_ = ibooker.book2D("rctGctLeadingNonIsoEmEta",
173  "RCT-GCT: #eta", ETABINS, ETAMIN, ETAMAX,
174  ETABINS, ETAMIN, ETAMAX);
177 
178  rctGctLeadingNonIsoEmPhi_ = ibooker.book2D("rctGctLeadingNonIsoEmPhi",
179  "RCT-GCT: #phi", PHIBINS, PHIMIN, PHIMAX,
180  PHIBINS, PHIMIN, PHIMAX);
183  // -------------------------------------------
184  // ECAL TPG - RCT
185  // -------------------------------------------
186  ecalTpgRctLeadingEmRank_ = ibooker.book2D("ecalTpgRctLeadingEmRank",
187  "ECAL TPG-RCT: rank",
188  R6BINS, R6MIN, R6MAX,
189  R6BINS, R6MIN, R6MAX);
192 
193  ecalTpgRctLeadingEmEta_ = ibooker.book2D("ecalTpgRctLeadingEmEta",
194  "ECAL TPG-RCT: #eta",
195  15, -0.5, 14.5,
199  ecalTpgRctLeadingEmEta2_ = ibooker.book2D("ecalTpgRctLeadingEmEta2",
200  "ECAL TPG-RCT: #eta (2)",
201  13, -6.5, 6.5,
205  ecalTpgRctLeadingEmPhi_ = ibooker.book2D("ecalTpgRctLeadingEmPhi",
206  "ECAL TPG-RCT: #phi",
211  //}
212 }
213 
214 void L1TCompare::analyze(const Event & e, const EventSetup & c)
215 {
216  ++nev_;
217  if (verbose()) {
218  std::cout << "L1TCompare: analyze...." << std::endl;
219  }
220 
221  // L1E
227  // edm::Handle < L1EtMissParticle > l1eEtMiss;
229  // RCT
230  edm::Handle < L1CaloEmCollection > em; // collection of L1CaloEmCands
232 
233  // GCT
236  edm::Handle <L1GctEmCandCollection> gctNonIsoEmCands;
237 
238 
240 
241  if (!em.isValid()) {
242  edm::LogInfo("DataNotFound") << "can't find L1CaloEmCollection with label "
243  << rctSource_.label() ;
244  return;
245  }
246 
247 
249 
250  if (!rctEmRgn.isValid()) {
251  edm::LogInfo("DataNotFound") << "can't find "
252  << "L1CaloRegionCollection with label "
253  << rctSource_.label() ;
254  return;
255  }
256 
257  e.getByToken(gctCenJetsToken_, gctCenJets);
258  e.getByToken(gctIsoEmCandsToken_, gctIsoEmCands);
259  e.getByToken(gctNonIsoEmCandsToken_, gctNonIsoEmCands);
260 
261  if (!gctCenJets.isValid()) {
262  std::cerr << "L1TGCT: could not find one of the classes?" << std::endl;
263  return;
264  }
265  if (!gctIsoEmCands.isValid()) {
266  std::cerr << "L1TGCT: could not find one of the classes?" << std::endl;
267  return;
268  }
269  if (!gctNonIsoEmCands.isValid()) {
270  std::cerr << "L1TGCT: could not find one of the classes?" << std::endl;
271  return;
272  }
273 
274 
275  // GCT
276  if ( verbose() ) {
277  for ( L1GctEmCandCollection::const_iterator iem = gctIsoEmCands->begin();
278  iem != gctIsoEmCands->end(); ++iem) {
279  if ( !iem->empty() )
280  std::cout << "GCT EM: " << iem->rank()
281  << ", "
282  << iem->etaIndex() << "("
283  //<< int(iem->etaIndex()&0x3)*((iem->etaIndex()&0x4)?1:-1)
284  << "), "
285  << iem->phiIndex()
286  << std::endl;
287  }
288  }
289  // rct phi: 0-17
290  // rct eta: 0-21
291 
292 
293  // Fill the RCT histograms
294 
295  // Regions
296  RctObjectCollection rcj, rcj_iso, rcj_non_iso;
297  for (L1CaloEmCollection::const_iterator iem = em->begin();
298  iem != em->end(); ++iem) {
299  // L1CaloRegionDetId id(false, iem->rctCrate(), iem->rctCard(),
300  // iem->rctRegion());
301  L1CaloRegionDetId id(iem->rctCrate(), iem->rctCard(),
302  iem->rctRegion());
303 
304  // RctObject h(id.gctEta(), id.gctPhi(), iem->rank());
305  RctObject h(id.rctEta(), id.rctPhi(), iem->rank());
306  if ( !iem->isolated() )
307  rcj_non_iso.push_back(h);
308  else
309  rcj_iso.push_back(h);
310  rcj.push_back(h);
311  }
312  // not so smart but ...
313  std::sort(rcj.begin(), rcj.end(), RctObjectComp());
314  std::sort(rcj_non_iso.begin(), rcj_non_iso.end(), RctObjectComp());
315  std::sort(rcj_iso.begin(), rcj_iso.end(), RctObjectComp());
316  if ( verbose() ) {
317  for (RctObjectCollection::reverse_iterator ij = rcj_iso.rbegin();
318  ij != rcj_iso.rend() && ij != rcj_iso.rbegin()+8; ++ij) {
319  std::cout << "RCT cj: "
320  << ij->rank_ << ", " << ij->eta_ << ", " << ij->phi_
321  << std::endl;
322  }
323  }
324  L1GctEmCandCollection::const_iterator lead_em = gctIsoEmCands->begin();
325  if ( !lead_em->empty() ) { // equivalent to rank == 0
326  rctGctLeadingIsoEmEta_->Fill(lead_em->etaIndex(), rcj_iso.rbegin()->eta_);
327  rctGctLeadingIsoEmPhi_->Fill(lead_em->phiIndex(), rcj_iso.rbegin()->phi_);
328  rctGctLeadingIsoEmRank_->Fill(lead_em->rank(), rcj_iso.rbegin()->rank_);
329  }
330 
331  // non-isolated
332  if ( verbose() ) {
333  for ( L1GctEmCandCollection::const_iterator iem
334  = gctNonIsoEmCands->begin(); iem != gctNonIsoEmCands->end();
335  ++iem) {
336  if ( ! iem->empty() )
337  std::cout << "GCT EM non: " << iem->rank()
338  << ", "
339  << iem->etaIndex() //<< "("
340  //<< int(iem->etaIndex()&0x3)*((iem->etaIndex()&0x4)?1:-1)
341  //<< ")"
342  << ", "
343  << iem->phiIndex()
344  << std::endl;
345  }
346  }
347  if ( verbose() ) {
348  for (RctObjectCollection::reverse_iterator ij = rcj_non_iso.rbegin();
349  ij != rcj_non_iso.rend() && ij != rcj_non_iso.rbegin()+8; ++ij) {
350  std::cout << "RCT cj non: "
351  << ij->rank_ << ", " << ij->eta_ << ", " << ij->phi_
352  << std::endl;
353  }
354  }
355  lead_em = gctNonIsoEmCands->begin();
356  if ( !lead_em->empty() ) { // equivalent to rank != 0
357  rctGctLeadingNonIsoEmEta_->Fill(lead_em->etaIndex(),
358  rcj_non_iso.rbegin()->eta_);
359  rctGctLeadingNonIsoEmPhi_->Fill(lead_em->phiIndex(),
360  rcj_non_iso.rbegin()->phi_);
361  rctGctLeadingNonIsoEmRank_->Fill(lead_em->rank(),
362  rcj_non_iso.rbegin()->rank_);
363  }
364 
365  // ECAL TPG's to RCT EM
368 
369  if (!eTP.isValid()) {
370  edm::LogInfo("DataNotFound")
371  << "can't find EcalTrigPrimCollection with label "
372  << ecalTpgSource_.label() ;
373  return;
374  }
375  RctObjectCollection ecalobs;
376  for (EcalTrigPrimDigiCollection::const_iterator ieTP = eTP->begin();
377  ieTP != eTP->end(); ieTP++) {
378  ecalobs.push_back(RctObject(ieTP->id().ieta(),
379  ieTP->id().iphi(),
380  ieTP->compressedEt()));
381  }
382  std::sort(ecalobs.begin(), ecalobs.end(), RctObjectComp());
383  if ( verbose() ) {
384  for (RctObjectCollection::reverse_iterator ij = ecalobs.rbegin();
385  ij != ecalobs.rend() && ij != ecalobs.rbegin()+8; ++ij) {
386  std::cout << "ECAL cj : "
387  << ij->rank_ << ", " << ij->eta_ << ", " << ij->phi_
388  << std::endl;
389  }
390  }
391  // abritrary cut
392  if ( rcj.rbegin()->rank_ > 4 ) {
393  ecalTpgRctLeadingEmEta_->Fill(rcj.rbegin()->eta_,
394  ecalobs.rbegin()->eta_);
395  int e2 = (rcj.rbegin()->eta_&0x7UL)* ((rcj.rbegin()->eta_&0x8UL)?1:-1);
396  ecalTpgRctLeadingEmEta2_->Fill(e2, ecalobs.rbegin()->eta_);
397  ecalTpgRctLeadingEmPhi_->Fill(rcj.rbegin()->phi_, ecalobs.rbegin()->phi_);
398  ecalTpgRctLeadingEmRank_->Fill(rcj.rbegin()->rank_,
399  ecalobs.rbegin()->rank_);
400  }
401  if ( verbose() ) {
402  int seta = rcj.rbegin()->eta_;
403  seta = (seta&0x7UL)*(seta&0x8?-1:1);
404  std::cout << "ZZ: "
405  << rcj.rbegin()->eta_ << " "
406  << rcj.rbegin()->phi_ << " "
407  << rcj.rbegin()->rank_ << " "
408  << (++rcj.rbegin())->rank_<< " "
409  << ecalobs.rbegin()->eta_ << " "
410  << ecalobs.rbegin()->phi_ << " "
411  << ecalobs.rbegin()->rank_ << " "
412  << (++ecalobs.rbegin())->rank_<< " "
413  << seta << " "
414  << std::endl;
415  }
416 
417 
418 
419 }
const unsigned int R6BINS
Definition: L1TCompare.cc:71
edm::EDGetTokenT< L1GctEmCandCollection > gctNonIsoEmCandsToken_
Definition: L1TCompare.h:124
T getUntrackedParameter(std::string const &, T const &) const
#define PHIMAX
edm::EDGetTokenT< L1CaloRegionCollection > rctSourceRctEmRgn_token_
Definition: L1TCompare.h:115
std::vector< L1CaloEmCand > L1CaloEmCollection
MonitorElement * rctGctLeadingIsoEmRank_
Definition: L1TCompare.h:93
bool verbose() const
Definition: L1TCompare.h:110
const float TPETAMIN
Definition: L1TCompare.cc:87
L1TCompare(const edm::ParameterSet &ps)
Definition: L1TCompare.cc:91
MonitorElement * rctGctLeadingIsoEmEta_
Definition: L1TCompare.h:91
edm::InputTag rctSource_
Definition: L1TCompare.h:116
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
MonitorElement * ecalTpgRctLeadingEmEta2_
Definition: L1TCompare.h:101
std::vector< EcalTriggerPrimitiveDigi >::const_iterator const_iterator
const unsigned int TPPHIBINS
Definition: L1TCompare.cc:82
edm::InputTag gctSource_
Definition: L1TCompare.h:117
void Fill(long long x)
MonitorElement * ecalTpgRctLeadingEmRank_
Definition: L1TCompare.h:103
#define ETAMAX
const float TPETAMAX
Definition: L1TCompare.cc:88
virtual void dqmBeginRun(edm::Run const &, edm::EventSetup const &)
Definition: L1TCompare.cc:135
const unsigned int TPETABINS
Definition: L1TCompare.cc:86
bool verbose_
Definition: L1TCompare.h:109
MonitorElement * rctGctLeadingNonIsoEmEta_
Definition: L1TCompare.h:95
#define ETAMIN
const float R6MAX
Definition: L1TCompare.cc:73
virtual ~L1TCompare()
Definition: L1TCompare.cc:131
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
void analyze(const edm::Event &e, const edm::EventSetup &c)
Definition: L1TCompare.cc:214
bool isValid() const
Definition: HandleBase.h:75
#define PHIMIN
edm::EDGetTokenT< L1GctJetCandCollection > gctCenJetsToken_
Definition: L1TCompare.h:122
edm::EDGetTokenT< L1CaloEmCollection > rctSourceEm_token_
Definition: L1TCompare.h:114
const float TPPHIMIN
Definition: L1TCompare.cc:83
const float R6MIN
Definition: L1TCompare.cc:72
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
const float TPPHIMAX
Definition: L1TCompare.cc:84
MonitorElement * rctGctLeadingIsoEmPhi_
Definition: L1TCompare.h:92
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
#define ETABINS
std::vector< L1TCompare::RctObject > RctObjectCollection
Definition: L1TCompare.h:136
MonitorElement * ecalTpgRctLeadingEmEta_
Definition: L1TCompare.h:100
edm::InputTag ecalTpgSource_
Definition: L1TCompare.h:118
MonitorElement * rctGctLeadingNonIsoEmPhi_
Definition: L1TCompare.h:96
std::string const & label() const
Definition: InputTag.h:43
edm::EDGetTokenT< L1GctEmCandCollection > gctIsoEmCandsToken_
Definition: L1TCompare.h:123
virtual void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm::EventSetup const &) override
Definition: L1TCompare.cc:139
std::string outputFile_
Definition: L1TCompare.h:108
#define PHIBINS
edm::EDGetTokenT< EcalTrigPrimDigiCollection > ecalTpgSource_token_
Definition: L1TCompare.h:119
MonitorElement * rctGctLeadingNonIsoEmRank_
Definition: L1TCompare.h:97
tuple cout
Definition: gather_cfg.py:121
std::vector< L1CaloRegion > L1CaloRegionCollection
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: Run.h:41
MonitorElement * ecalTpgRctLeadingEmPhi_
Definition: L1TCompare.h:102