CMS 3D CMS Logo

L1Comparator.cc
Go to the documentation of this file.
3 
4 using namespace dedefs;
5 
7 
8  verbose_ = iConfig.getUntrackedParameter<int>("VerboseFlag",0);
9  m_stage1_layer2_ = iConfig.getParameter<bool>("stage1_layer2_");
10 
11  if(verbose())
12  std::cout << "\nL1COMPARATOR constructor...\n" << std::flush;
13 
14  std::vector<unsigned int> dosys(0,DEnsys);
15  dosys =
16  iConfig.getUntrackedParameter<std::vector<unsigned int> >("COMPARE_COLLS", dosys);
17 
18  if((int)dosys.size()!=DEnsys)
19  edm::LogError("L1Comparator")
20  << "wrong selection of systems to be compared\n"
21  << "\t the size of the mask COMPARE_COLLS (" << dosys.size()
22  << ") is not " << DEnsys << std::endl;
23  assert((int)dosys.size()==DEnsys);
24 
25  for(int isys=0; isys<DEnsys; isys++)
26  if( dosys[isys]!=0 && dosys[isys]!=1 )
27  throw cms::Exception("Invalid configuration")
28  << "L1Comparator: comparison flag for system " << isys
29  << " is non boolean: " << dosys[isys] << ". Exiting.\n";
30 
31  for(int i=0; i<DEnsys; i++)
32  m_doSys[i] = dosys[i];
33 
34  if(verbose()) {
35  std::cout << "[L1Comparator] do sys? ";
36  for(int i=0; i<DEnsys; i++)
37  std::cout << m_doSys[i] << " ";
38  std::cout << std::endl;
39 
40  std::cout << "[L1Comparator] list of systems to process: ";
41  for(int i=0; i<DEnsys; i++)
42  if(m_doSys[i])
43  std::cout << SystLabel[i] << " ";
44  std::cout << std::endl;
45  }
46 
48  assert(ETP==0); assert(HTP==1); assert(RCT== 2); assert(GCT== 3);
49  assert(DTP==4); assert(DTF==5); assert(CTP== 6); assert(CTF== 7);
50  assert(RPC==8); assert(LTC==9); assert(GMT==10); assert(GLT==11);
51 
52 
54  m_dumpMode = iConfig.getUntrackedParameter<int>("DumpMode",0);
55  m_dumpFileName = iConfig.getUntrackedParameter<std::string>("DumpFile","");
56  if(m_dumpMode) {
57  m_dumpFile.open(m_dumpFileName.c_str(), std::ios::out);
58  if(!m_dumpFile.good())
59  edm::LogInfo("L1ComparatorDumpFileOpenError")
60  << " L1Comparator::L1Comparator() : "
61  << " couldn't open dump file " << m_dumpFileName.c_str() << std::endl;
62  }
63 
64  m_match = true;
65  dumpEvent_ = true;
66  nevt_=-1;
67 
68  for(int i=0; i<DEnsys; i++) {
69  for(int j=0; j<2; j++)
70  DEncand[i][j] = 0;
71  DEmatchEvt[i] = true;
72  }
73 
74  m_dedigis.clear();
76  produces<L1DataEmulRecord>().setBranchAlias("L1DataEmulRecord");
77 
78  // -- RCT [regional calorimeter trigger]
79  if(m_doSys[RCT]) {
80  edm::InputTag tag0 = iConfig.getParameter<edm::InputTag>("RCTsourceData");
81  edm::InputTag tag1 = iConfig.getParameter<edm::InputTag>("RCTsourceEmul");
82 
83  tokenCaloEm_[0] = consumes<L1CaloEmCollection>(tag0);
84  tokenCaloEm_[1] = consumes<L1CaloEmCollection>(tag1);
85  tokenCaloRegion_[0] = consumes<L1CaloRegionCollection>(tag0);
86  tokenCaloRegion_[1] = consumes<L1CaloRegionCollection>(tag1);
87  }
88 
89  // -- GCT [global calorimeter trigger]
90  if(m_doSys[GCT]) {
91  edm::InputTag tags[2];
92  tags[0] = iConfig.getParameter<edm::InputTag>("GCTsourceData");
93  tags[1] = iConfig.getParameter<edm::InputTag>("GCTsourceEmul");
94 
95  if(m_stage1_layer2_ == false) {
96 
97  for (int i = 0; i < 2 ; ++i) {
98  edm::InputTag const& tag = tags[i];
99  std::string const label = tag.label();
100  tokenGctEmCand_isoEm_[i] = consumes<L1GctEmCandCollection>(edm::InputTag(label, "isoEm"));
101  tokenGctEmCand_nonIsoEm_[i] = consumes<L1GctEmCandCollection>(edm::InputTag(label, "nonIsoEm"));
102  tokenGctJetCand_cenJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "cenJets"));
103  tokenGctJetCand_forJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "forJets"));
104  tokenGctJetCand_tauJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "tauJets"));
105  tokenGctEtTotal_[i] = consumes<L1GctEtTotalCollection>(tag);
106  tokenGctEtHad_[i] = consumes<L1GctEtHadCollection>(tag);
107  tokenGctEtMiss_[i] = consumes<L1GctEtMissCollection>(tag);
108  tokenGctHFRingEtSums_[i] = consumes<L1GctHFRingEtSumsCollection>(tag);
109  tokenGctHFBitCounts_[i] = consumes<L1GctHFBitCountsCollection>(tag);
110  tokenGctHtMiss_[i] = consumes<L1GctHtMissCollection>(tag);
111  tokenGctJetCounts_[i] = consumes<L1GctJetCountsCollection>(tag);
112  }
113  }
114  if(m_stage1_layer2_ == true) {
115  for (int i = 0; i < 2 ; ++i) {
116  edm::InputTag const& tag = tags[i];
117  std::string const label = tag.label();
118  tokenGctEmCand_isoEm_[i] = consumes<L1GctEmCandCollection>(edm::InputTag(label, "isoEm"));
119  tokenGctEmCand_nonIsoEm_[i] = consumes<L1GctEmCandCollection>(edm::InputTag(label, "nonIsoEm"));
120  tokenGctJetCand_cenJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "cenJets"));
121  tokenGctJetCand_forJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "forJets"));
122  tokenGctJetCand_tauJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "tauJets"));
123  tokenGctJetCand_isoTauJets_[i] = consumes<L1GctJetCandCollection>(edm::InputTag(label, "isoTauJets"));
124  tokenGctEtTotal_[i] = consumes<L1GctEtTotalCollection>(tag);
125  tokenGctEtHad_[i] = consumes<L1GctEtHadCollection>(tag);
126  tokenGctEtMiss_[i] = consumes<L1GctEtMissCollection>(tag);
127  tokenGctHFRingEtSums_[i] = consumes<L1GctHFRingEtSumsCollection>(tag);
128  tokenGctHFBitCounts_[i] = consumes<L1GctHFBitCountsCollection>(tag);
129  tokenGctHtMiss_[i] = consumes<L1GctHtMissCollection>(tag);
130  tokenGctJetCounts_[i] = consumes<L1GctJetCountsCollection>(tag);
131  }
132  }
133  }
134 
135 
136  // -- DTP [drift tube trigger primitive]
137  if(m_doSys[DTP]) {
138  edm::InputTag tag0 = iConfig.getParameter<edm::InputTag>("DTPsourceData");
139  edm::InputTag tag1 = iConfig.getParameter<edm::InputTag>("DTPsourceEmul");
140 
141  tokenMuDTChambPh_[0] = consumes<L1MuDTChambPhContainer>(tag0);
142  tokenMuDTChambPh_[1] = consumes<L1MuDTChambPhContainer>(tag1);
143  tokenMuDTChambTh_[0] = consumes<L1MuDTChambThContainer>(tag0);
144  tokenMuDTChambTh_[1] = consumes<L1MuDTChambThContainer>(tag1);
145  }
146 
147  // -- DTF [drift tube track finder]
148  if(m_doSys[DTF]) {
149  edm::InputTag tag0 = iConfig.getParameter<edm::InputTag>("DTFsourceData");
150  edm::InputTag tag1 = iConfig.getParameter<edm::InputTag>("DTFsourceEmul");
151 
152  tokenMuDTTrack_[0] = consumes<L1MuDTTrackContainer>(edm::InputTag(tag0.label(),"DATA"));
153  tokenMuDTTrack_[1] = consumes<L1MuDTTrackContainer>(edm::InputTag(tag1.label(),"DTTF"));
154  }
155 
156  // -- RPC [resistive plate chambers regional trigger]
157  if(m_doSys[RPC]) {
158  edm::InputTag tag0 = iConfig.getParameter<edm::InputTag>("RPCsourceData");
159  edm::InputTag tag1 = iConfig.getParameter<edm::InputTag>("RPCsourceEmul");
160 
161  tokenMuRegionalCandRPCb_[0] = consumes<L1MuRegionalCandCollection>(edm::InputTag(tag0.label(),"RPCb"));
162  tokenMuRegionalCandRPCb_[1] = consumes<L1MuRegionalCandCollection>(edm::InputTag(tag1.label(),"RPCb"));
163  tokenMuRegionalCandRPCf_[0] = consumes<L1MuRegionalCandCollection>(edm::InputTag(tag0.label(),"RPCf"));
164  tokenMuRegionalCandRPCf_[1] = consumes<L1MuRegionalCandCollection>(edm::InputTag(tag1.label(),"RPCf"));
165  }
166 
167  // -- LTC [local trigger controller]
168  if(m_doSys[LTC]) {
169  // FIXME
170  // There should be a real input tag here, but there was none in the original code.
171  edm::InputTag dummyTag;
172  tokenLTCDigi_[0] = consumes<LTCDigiCollection>(dummyTag);
173  tokenLTCDigi_[1] = consumes<LTCDigiCollection>(dummyTag);
174  }
175 
176  // -- GMT [global muon trigger]
177  if(m_doSys[GMT]) {
178  edm::InputTag tag0 = iConfig.getParameter<edm::InputTag>("GMTsourceData");
179  edm::InputTag tag1 = iConfig.getParameter<edm::InputTag>("GMTsourceEmul");
180 
181  tokenMuGMTCand_[0] = consumes<L1MuGMTCandCollection>(tag0);
182  tokenMuGMTCand_[1] = consumes<L1MuGMTCandCollection>(tag1);
183  tokenMuReadoutCand_[0] = consumes<L1MuGMTReadoutCollection>(tag0);
184  tokenMuReadoutCand_[1] = consumes<L1MuGMTReadoutCollection>(tag1);
185  }
186 
187  if(verbose())
188  std::cout << "\nL1Comparator constructor...done.\n" << std::flush;
189 }
190 
191 
193 
195 
196 void L1Comparator::beginRun(edm::Run const& iRun, const edm::EventSetup& iSetup) {
197 
198  if(verbose())
199  std::cout << "\nL1COMPARATOR beginRun...\n" << std::flush;
200 
201 
202  // disable subsystem if not included in current run configuration
203  try
204  {
206  iSetup.get< L1TriggerKeyRcd >().get( pKey ) ;
207 
208  m_doSys[RCT] &= (!(pKey->subsystemKey( L1TriggerKey::kRCT) .empty()));
209  m_doSys[GCT] &= (!(pKey->subsystemKey( L1TriggerKey::kGCT) .empty()));
210  m_doSys[DTF] &= (!(pKey->subsystemKey( L1TriggerKey::kDTTF) .empty()));
211  m_doSys[CTF] &= (!(pKey->subsystemKey( L1TriggerKey::kCSCTF).empty()));
212  m_doSys[RPC] &= (!(pKey->subsystemKey( L1TriggerKey::kRPC) .empty()));
213  m_doSys[GMT] &= (!(pKey->subsystemKey( L1TriggerKey::kGMT) .empty()));
214  m_doSys[GLT] &= (!(pKey->subsystemKey( L1TriggerKey::kGT) .empty()));
215 
216  if(verbose()) {
217  if ( pKey->subsystemKey( L1TriggerKey::kRCT ).empty() )
218  std::cout << "RCT key is empty. Sub-systems is disabled ("<<m_doSys[RCT]<<")\n";
219  if ( pKey->subsystemKey( L1TriggerKey::kGCT ).empty() )
220  std::cout << "GCT key is empty. Sub-systems is disabled ("<<m_doSys[GCT]<<")\n";
221  if ( pKey->subsystemKey( L1TriggerKey::kDTTF ).empty() )
222  std::cout << "DTTF key is empty. Sub-systems is disabled ("<<m_doSys[DTF]<<")\n";
223  if ( pKey->subsystemKey( L1TriggerKey::kCSCTF).empty() )
224  std::cout << "CSCTF key is empty. Sub-systems is disabled ("<<m_doSys[CTF]<<")\n";
225  if ( pKey->subsystemKey( L1TriggerKey::kRPC ).empty() )
226  std::cout << "RPC key is empty. Sub-systems is disabled ("<<m_doSys[RPC]<<")\n";
227  if ( pKey->subsystemKey( L1TriggerKey::kGMT ).empty() )
228  std::cout << "GMT key is empty. Sub-systems is disabled ("<<m_doSys[GMT]<<")\n";
229  if ( pKey->subsystemKey( L1TriggerKey::kGT ).empty() )
230  std::cout << "GT key is empty. Sub-systems is disabled ("<<m_doSys[GLT]<<")\n";
231  std::cout << "TSC key = " << pKey->tscKey() << std::endl;
232  }
233 
234  //access subsystem key if needed, eg:
235  //std::cout << "RCT key:" << pKey->subsystemKey( L1TriggerKey::kRCT ) << std::endl;
236  }
237  catch( cms::Exception& ex )
238  {
239  edm::LogWarning("L1Comparator")
240  << "No L1TriggerKey found."
241  << std::endl;
242  }
243 
244  if(verbose())
245  std::cout << "L1COMPARATOR beginRun... done\n" << std::flush;
246 
247 }
248 
250  if(m_dumpMode)
251  m_dumpFile << "\n\n-------\n"
252  << "Global data|emulator agreement: "
253  << m_match << std::endl;
254  m_dumpFile.close();
255 }
256 
257 void
259 
260  nevt_++;
261  evtNum_ = iEvent.id().event();
262  runNum_ = iEvent.id().run();
263 
264  if(verbose())
265  std::cout << "\nL1COMPARATOR entry:" << nevt_ << " | evt:" << evtNum_
266  << " | run:" << runNum_ << "\n" << std::flush;
267 
268  //flag whether event id has already been written to dumpFile
269  dumpEvent_ = true;
270 
271  //reset event holder quantities
272  for(int i=0; i<DEnsys; i++) {
273  for(int j=0; j<2; j++)
274  DEncand[i][j] = 0;
275  DEmatchEvt[i] = true;
276  }
277  m_dedigis.clear();
278 
279 
281 
282  // -- RCT [regional calorimeter trigger]
287  if(m_doSys[RCT]) {
288  iEvent.getByToken(tokenCaloEm_[0], rct_em_data);
289  iEvent.getByToken(tokenCaloEm_[1], rct_em_emul);
290  iEvent.getByToken(tokenCaloRegion_[0], rct_rgn_data);
291  iEvent.getByToken(tokenCaloRegion_[1], rct_rgn_emul);
292  }
293 
294  // -- GCT [global calorimeter trigger]
295  edm::Handle<L1GctEmCandCollection> gct_isolaem_data;
296  edm::Handle<L1GctEmCandCollection> gct_isolaem_emul;
297  edm::Handle<L1GctEmCandCollection> gct_noisoem_data;
298  edm::Handle<L1GctEmCandCollection> gct_noisoem_emul;
299  edm::Handle<L1GctJetCandCollection> gct_cenjets_data;
300  edm::Handle<L1GctJetCandCollection> gct_cenjets_emul;
301  edm::Handle<L1GctJetCandCollection> gct_forjets_data;
302  edm::Handle<L1GctJetCandCollection> gct_forjets_emul;
303  edm::Handle<L1GctJetCandCollection> gct_taujets_data;
304  edm::Handle<L1GctJetCandCollection> gct_taujets_emul;
305  edm::Handle<L1GctJetCandCollection> gct_isotaujets_data;
306  edm::Handle<L1GctJetCandCollection> gct_isotaujets_emul;
307 
310  edm::Handle<L1GctEtMissCollection> gct_etmiss_data;
311  edm::Handle<L1GctEtMissCollection> gct_etmiss_emul;
312  edm::Handle<L1GctEtTotalCollection> gct_ettota_data;
313  edm::Handle<L1GctEtTotalCollection> gct_ettota_emul;
314  edm::Handle<L1GctHtMissCollection> gct_htmiss_data;
315  edm::Handle<L1GctHtMissCollection> gct_htmiss_emul;
322 
323  if(m_doSys[GCT]) {
324  if(m_stage1_layer2_ == false){
325  iEvent.getByToken(tokenGctEmCand_isoEm_[0],gct_isolaem_data);
326  iEvent.getByToken(tokenGctEmCand_isoEm_[1],gct_isolaem_emul);
327  iEvent.getByToken(tokenGctEmCand_nonIsoEm_[0],gct_noisoem_data);
328  iEvent.getByToken(tokenGctEmCand_nonIsoEm_[1],gct_noisoem_emul);
329  iEvent.getByToken(tokenGctJetCand_cenJets_[0],gct_cenjets_data);
330  iEvent.getByToken(tokenGctJetCand_cenJets_[1],gct_cenjets_emul);
331  iEvent.getByToken(tokenGctJetCand_forJets_[0],gct_forjets_data);
332  iEvent.getByToken(tokenGctJetCand_forJets_[1],gct_forjets_emul);
333  iEvent.getByToken(tokenGctJetCand_tauJets_[0],gct_taujets_data);
334  iEvent.getByToken(tokenGctJetCand_tauJets_[1],gct_taujets_emul);
335  iEvent.getByToken(tokenGctEtHad_[0],gct_ht_data);
336  iEvent.getByToken(tokenGctEtHad_[1],gct_ht_emul);
337  iEvent.getByToken(tokenGctEtMiss_[0],gct_etmiss_data);
338  iEvent.getByToken(tokenGctEtMiss_[1],gct_etmiss_emul);
339  iEvent.getByToken(tokenGctEtTotal_[0],gct_ettota_data);
340  iEvent.getByToken(tokenGctEtTotal_[1],gct_ettota_emul);
341  iEvent.getByToken(tokenGctHtMiss_[0],gct_htmiss_data);
342  iEvent.getByToken(tokenGctHtMiss_[1],gct_htmiss_emul);
343  iEvent.getByToken(tokenGctHFRingEtSums_[0],gct_hfring_data);
344  iEvent.getByToken(tokenGctHFRingEtSums_[1],gct_hfring_emul);
345  iEvent.getByToken(tokenGctHFBitCounts_[0],gct_hfbcnt_data);
346  iEvent.getByToken(tokenGctHFBitCounts_[1],gct_hfbcnt_emul);
347  iEvent.getByToken(tokenGctJetCounts_[0],gct_jetcnt_data);
348  iEvent.getByToken(tokenGctJetCounts_[1],gct_jetcnt_emul);
349  }
350  if(m_stage1_layer2_ == true){
351  iEvent.getByToken(tokenGctEmCand_isoEm_[0],gct_isolaem_data);
352  iEvent.getByToken(tokenGctEmCand_isoEm_[1],gct_isolaem_emul);
353  iEvent.getByToken(tokenGctEmCand_nonIsoEm_[0],gct_noisoem_data);
354  iEvent.getByToken(tokenGctEmCand_nonIsoEm_[1],gct_noisoem_emul);
355  iEvent.getByToken(tokenGctJetCand_cenJets_[0],gct_cenjets_data);
356  iEvent.getByToken(tokenGctJetCand_cenJets_[1],gct_cenjets_emul);
357  iEvent.getByToken(tokenGctJetCand_forJets_[0],gct_forjets_data);
358  iEvent.getByToken(tokenGctJetCand_forJets_[1],gct_forjets_emul);
359  iEvent.getByToken(tokenGctJetCand_tauJets_[0],gct_taujets_data);
360  iEvent.getByToken(tokenGctJetCand_tauJets_[1],gct_taujets_emul);
361  iEvent.getByToken(tokenGctJetCand_isoTauJets_[0],gct_isotaujets_data);
362  iEvent.getByToken(tokenGctJetCand_isoTauJets_[1],gct_isotaujets_emul);
363  iEvent.getByToken(tokenGctEtHad_[0],gct_ht_data);
364  iEvent.getByToken(tokenGctEtHad_[1],gct_ht_emul);
365  iEvent.getByToken(tokenGctEtMiss_[0],gct_etmiss_data);
366  iEvent.getByToken(tokenGctEtMiss_[1],gct_etmiss_emul);
367  iEvent.getByToken(tokenGctEtTotal_[0],gct_ettota_data);
368  iEvent.getByToken(tokenGctEtTotal_[1],gct_ettota_emul);
369  iEvent.getByToken(tokenGctHtMiss_[0],gct_htmiss_data);
370  iEvent.getByToken(tokenGctHtMiss_[1],gct_htmiss_emul);
371  iEvent.getByToken(tokenGctHFRingEtSums_[0],gct_hfring_data);
372  iEvent.getByToken(tokenGctHFRingEtSums_[1],gct_hfring_emul);
373  iEvent.getByToken(tokenGctHFBitCounts_[0],gct_hfbcnt_data);
374  iEvent.getByToken(tokenGctHFBitCounts_[1],gct_hfbcnt_emul);
375  iEvent.getByToken(tokenGctJetCounts_[0],gct_jetcnt_data);
376  iEvent.getByToken(tokenGctJetCounts_[1],gct_jetcnt_emul);
377  }
378  }
379 
380  // -- DTP [drift tube trigger primitive]
385  if(m_doSys[DTP]) {
386  iEvent.getByToken(tokenMuDTChambPh_[0],dtp_ph_data_);
387  iEvent.getByToken(tokenMuDTChambPh_[1],dtp_ph_emul_);
388  iEvent.getByToken(tokenMuDTChambTh_[0],dtp_th_data_);
389  iEvent.getByToken(tokenMuDTChambTh_[1],dtp_th_emul_);
390  }
391  L1MuDTChambPhDigiCollection const* dtp_ph_data = 0;
392  L1MuDTChambPhDigiCollection const* dtp_ph_emul = 0;
393  L1MuDTChambThDigiCollection const* dtp_th_data = 0;
394  L1MuDTChambThDigiCollection const* dtp_th_emul = 0;
395 
396  if(dtp_ph_data_.isValid()) dtp_ph_data = dtp_ph_data_->getContainer();
397  if(dtp_ph_emul_.isValid()) dtp_ph_emul = dtp_ph_emul_->getContainer();
398  if(dtp_th_data_.isValid()) dtp_th_data = dtp_th_data_->getContainer();
399  if(dtp_th_emul_.isValid()) dtp_th_emul = dtp_th_emul_->getContainer();
400 
401  // -- DTF [drift tube track finder]
402  edm::Handle<L1MuDTTrackContainer> dtf_trk_data_;
403  edm::Handle<L1MuDTTrackContainer> dtf_trk_emul_;
404  L1MuRegionalCandCollection const* dtf_trk_data = 0;
405  L1MuRegionalCandCollection const* dtf_trk_emul = 0;
406  if(m_doSys[DTF]) {
407  iEvent.getByToken(tokenMuDTTrack_[0],dtf_trk_data_);
408  iEvent.getByToken(tokenMuDTTrack_[1],dtf_trk_emul_);
409  }
410  //extract the regional cands
411  typedef std::vector<L1MuDTTrackCand> L1MuDTTrackCandCollection;
412  L1MuRegionalCandCollection dtf_trk_data_v, dtf_trk_emul_v;
413  dtf_trk_data_v.clear(); dtf_trk_emul_v.clear();
414  if(dtf_trk_data_.isValid()) {
415  L1MuDTTrackCandCollection const *dttc = dtf_trk_data_->getContainer();
416  for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
417  it!=dttc->end(); it++)
418  dtf_trk_data_v.push_back(L1MuRegionalCand(*it));
419  }
420  if(dtf_trk_emul_.isValid()) {
421  L1MuDTTrackCandCollection const *dttc = dtf_trk_emul_->getContainer();
422  for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
423  it!=dttc->end(); it++)
424  dtf_trk_emul_v.push_back(L1MuRegionalCand(*it));
425  }
426  dtf_trk_data =&dtf_trk_data_v;
427  dtf_trk_emul =&dtf_trk_emul_v;
428 
429 
430  // -- RPC [resistive plate chambers regional trigger]
435  if(m_doSys[RPC]) {
436  iEvent.getByToken(tokenMuRegionalCandRPCb_[0],rpc_cen_data);
437  iEvent.getByToken(tokenMuRegionalCandRPCb_[1],rpc_cen_emul);
438  iEvent.getByToken(tokenMuRegionalCandRPCf_[0],rpc_for_data);
439  iEvent.getByToken(tokenMuRegionalCandRPCf_[1],rpc_for_emul);
440  }
441 
442  // -- LTC [local trigger controller]
445  if(m_doSys[LTC]) {
446  iEvent.getByToken(tokenLTCDigi_[0],ltc_data);
447  iEvent.getByToken(tokenLTCDigi_[1],ltc_emul);
448  }
449 
450  // -- GMT [global muon trigger]
457  //tbd: may compare extended candidates
458  L1MuGMTCandCollection const *gmt_can_data(new L1MuGMTCandCollection);
459  L1MuGMTCandCollection const *gmt_can_emul(new L1MuGMTCandCollection);
460  if(m_doSys[GMT]) {
461  iEvent.getByToken(tokenMuGMTCand_[0], gmt_data);
462  iEvent.getByToken(tokenMuGMTCand_[1], gmt_emul);
463  iEvent.getByToken(tokenMuReadoutCand_[0], gmt_rdt_data_);
464  iEvent.getByToken(tokenMuReadoutCand_[1], gmt_rdt_emul_);
465  }
466  L1MuGMTCandCollection gmt_can_data_vec, gmt_can_emul_vec;
467  L1MuRegionalCandCollection gmt_rdt_data_vec, gmt_rdt_emul_vec;
468  gmt_can_data_vec.clear(); gmt_can_emul_vec.clear();
469  gmt_rdt_data_vec.clear(); gmt_rdt_emul_vec.clear();
470  if( gmt_rdt_data_.isValid() && gmt_rdt_emul_.isValid() ) {
471  typedef std::vector<L1MuGMTReadoutRecord>::const_iterator GmtRrIt;
472  //get record vector for data
473  std::vector<L1MuGMTReadoutRecord> gmt_rdt_data_bx = gmt_rdt_data_->getRecords();
474  for(GmtRrIt igmtrr=gmt_rdt_data_bx.begin(); igmtrr!=gmt_rdt_data_bx.end(); igmtrr++) {
475  //get gmt cands
476  typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
477  std::vector<L1MuGMTExtendedCand> gmc;
478  gmc = igmtrr->getGMTCands();
479  for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
480  L1MuGMTCand cand(iter1->getDataWord(),iter1->bx());
481  cand.setPhiValue(iter1->phiValue());
482  cand.setEtaValue(iter1->etaValue());
483  cand.setPtValue (iter1->ptValue ());
484  gmt_can_data_vec.push_back(cand);
485  }
486  //get reg cands
487  typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
489  rmc.clear();
490  rmc = igmtrr->getDTBXCands();
491  gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
492  rmc.clear();
493  rmc = igmtrr->getCSCCands();
494  gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
495  rmc.clear();
496  rmc = igmtrr->getBrlRPCCands();
497  gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
498  rmc.clear();
499  rmc = igmtrr->getFwdRPCCands();
500  gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
501  }
502  //get record vector for emul
503  std::vector<L1MuGMTReadoutRecord> gmt_rdt_emul_bx = gmt_rdt_emul_->getRecords();
504  for(GmtRrIt igmtrr=gmt_rdt_emul_bx.begin(); igmtrr!=gmt_rdt_emul_bx.end(); igmtrr++) {
505  //get gmt cands
506  typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
507  std::vector<L1MuGMTExtendedCand> gmc;
508  gmc = igmtrr->getGMTCands();
509  for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
510  gmt_can_emul_vec.push_back(L1MuGMTCand(iter1->getDataWord(),iter1->bx()));
511  }
512  //get reg cands
513  typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
515  rmc.clear();
516  rmc = igmtrr->getDTBXCands();
517  gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
518  rmc.clear();
519  rmc = igmtrr->getCSCCands();
520  gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
521  rmc.clear();
522  rmc = igmtrr->getBrlRPCCands();
523  gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
524  rmc.clear();
525  rmc = igmtrr->getFwdRPCCands();
526  gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
527  }
528  }
529  gmt_rdt_data = &gmt_rdt_data_vec;
530  gmt_rdt_emul = &gmt_rdt_emul_vec;
531  gmt_can_data = &gmt_can_data_vec;
532  gmt_can_emul = &gmt_can_emul_vec;
533 
535 
536  //check collections validity
537  bool isValidDE[DEnsys][2];// = {false};
538  for(int i=0; i<DEnsys; i++) for(int j=0; j<2; j++) isValidDE[i][j]=false;
539 
540  isValidDE[RCT][0] = rct_em_data .isValid(); isValidDE[RCT][1] = rct_em_emul .isValid();
541  isValidDE[RCT][0]&= rct_rgn_data .isValid(); isValidDE[RCT][1] = rct_rgn_emul .isValid();
542 
543  if(m_stage1_layer2_ == false){
544  isValidDE[GCT][0] = gct_isolaem_data .isValid(); isValidDE[GCT][1] =gct_isolaem_emul .isValid();
545  isValidDE[GCT][0]&= gct_noisoem_data .isValid(); isValidDE[GCT][1]&=gct_noisoem_emul .isValid();
546  isValidDE[GCT][0]&= gct_cenjets_data .isValid(); isValidDE[GCT][1]&=gct_cenjets_emul .isValid();
547  isValidDE[GCT][0]&= gct_forjets_data .isValid(); isValidDE[GCT][1]&=gct_forjets_emul .isValid();
548  isValidDE[GCT][0]&= gct_taujets_data .isValid(); isValidDE[GCT][1]&=gct_taujets_emul .isValid();
549  isValidDE[GCT][0]&= gct_etmiss_data .isValid(); isValidDE[GCT][1]&= gct_etmiss_emul .isValid();
550  isValidDE[GCT][0]&= gct_ettota_data .isValid(); isValidDE[GCT][1]&= gct_ettota_emul .isValid();
551  isValidDE[GCT][0]&= gct_htmiss_data .isValid(); isValidDE[GCT][1]&= gct_htmiss_emul .isValid();
552  isValidDE[GCT][0]&= gct_hfring_data .isValid(); isValidDE[GCT][1]&= gct_hfring_emul .isValid();
553  isValidDE[GCT][0]&= gct_hfbcnt_data .isValid(); isValidDE[GCT][1]&= gct_hfbcnt_emul .isValid();
554  //isValidDE[GCT][0]&= gct_jetcnt_data .isValid(); isValidDE[GCT][1]&= gct_jetcnt_emul .isValid(); #temporary
555  }
556  if(m_stage1_layer2_ == true){
557  isValidDE[GCT][0] = gct_isolaem_data .isValid();
558  isValidDE[GCT][1] = gct_isolaem_emul .isValid();
559  isValidDE[GCT][0]&= gct_noisoem_data .isValid();
560  isValidDE[GCT][1]&= gct_noisoem_emul .isValid();
561  isValidDE[GCT][0]&= gct_cenjets_data .isValid();
562  isValidDE[GCT][1]&= gct_cenjets_emul .isValid();
563  isValidDE[GCT][0]&= gct_forjets_data .isValid();
564  isValidDE[GCT][1]&= gct_forjets_emul .isValid();
565  isValidDE[GCT][0]&= gct_taujets_data .isValid();
566  isValidDE[GCT][1]&= gct_taujets_emul .isValid();
567  isValidDE[GCT][0]&= gct_isotaujets_data .isValid();
568  isValidDE[GCT][1]&= gct_isotaujets_emul .isValid();
569  isValidDE[GCT][0]&= gct_etmiss_data .isValid();
570  isValidDE[GCT][1]&= gct_etmiss_emul .isValid();
571  isValidDE[GCT][0]&= gct_ettota_data .isValid();
572  isValidDE[GCT][1]&= gct_ettota_emul .isValid();
573  isValidDE[GCT][0]&= gct_htmiss_data .isValid();
574  isValidDE[GCT][1]&= gct_htmiss_emul .isValid();
575  isValidDE[GCT][0]&= gct_hfring_data .isValid();
576  isValidDE[GCT][1]&= gct_hfring_emul .isValid();
577  isValidDE[GCT][0]&= gct_hfbcnt_data .isValid();
578  isValidDE[GCT][1]&= gct_hfbcnt_emul .isValid();
579  }
580  isValidDE[DTP][0] = dtp_ph_data_.isValid(); isValidDE[DTP][1] = dtp_ph_emul_.isValid();
581  isValidDE[DTP][0]&= dtp_th_data_.isValid(); isValidDE[DTP][1]&= dtp_th_emul_.isValid();
582 
583  isValidDE[DTF][0] = dtf_trk_data_.isValid(); isValidDE[DTF][1] = dtf_trk_emul_.isValid();
584 
585  isValidDE[RPC][0] = rpc_cen_data .isValid(); isValidDE[RPC][1] = rpc_cen_emul .isValid();
586  isValidDE[RPC][0]&= rpc_for_data .isValid(); isValidDE[RPC][1]&= rpc_for_emul .isValid();
587 
588  isValidDE[LTC][0] = ltc_data .isValid(); isValidDE[LTC][1] = ltc_emul .isValid();
589 
590  isValidDE[GMT][0] = gmt_data .isValid(); isValidDE[GMT][1] = gmt_emul .isValid();
591 //isValidDE[GMT][0]&= gmt_rdt_data_.isValid(); isValidDE[GMT][1]&= gmt_rdt_emul_.isValid();
592 
593 
594  bool isValid[DEnsys];
595  for(int i=0; i<DEnsys; i++) {
596  isValid[i]=true;
597  for(int j=0; j<2; j++) {
598  isValid[i] &= isValidDE[i][j];
599  }
600  }
601 
602  if(verbose()) {
603  std::cout << "L1Comparator sys isValid? (evt:" << nevt_ << ") ";
604  std::cout << "\n\t&: ";
605  for(int i=0; i<DEnsys; i++)
606  std::cout << isValid[i] << " ";
607  std::cout << "\n\td: ";
608  for(int i=0; i<DEnsys; i++)
609  std::cout << isValidDE[i][0] << " ";
610  std::cout << "\n\te: ";
611  for(int i=0; i<DEnsys; i++)
612  std::cout << isValidDE[i][1] << " ";
613  std::cout << std::endl;
614  }
615 
616  //reset flags...
617  //for(int i=0; i<DEnsys; i++) isValid[i]=true;
618 
619  if(verbose())
620  std::cout << "L1Comparator start processing the collections.\n" << std::flush;
621 
623  if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloEmCollection> ( rct_em_data, rct_em_emul, RCT,RCTem);
624  if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloRegionCollection> ( rct_rgn_data, rct_rgn_emul, RCT,RCTrgn);
625 
626  if(m_stage1_layer2_==false){
627  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_isolaem_data, gct_isolaem_emul, GCT,GCTisolaem);
628  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_noisoem_data, gct_noisoem_emul, GCT,GCTnoisoem);
629  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_cenjets_data, gct_cenjets_emul, GCT,GCTcenjets);
630  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_forjets_data, gct_forjets_emul, GCT,GCTforjets);
631  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_taujets_data, gct_taujets_emul, GCT,GCTtaujets);
632  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtHadCollection> ( gct_ht_data, gct_ht_emul, GCT,GCTethad);
633  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtMissCollection> ( gct_etmiss_data, gct_etmiss_emul, GCT,GCTetmiss);
634  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtTotalCollection> ( gct_ettota_data , gct_ettota_emul, GCT,GCTettot);
635  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHtMissCollection> ( gct_htmiss_data, gct_htmiss_emul, GCT,GCThtmiss);
636  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFRingEtSumsCollection> ( gct_hfring_data, gct_hfring_emul, GCT,GCThfring);
637  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFBitCountsCollection> ( gct_hfbcnt_data, gct_hfbcnt_emul, GCT,GCThfbit);
638  //if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCountsCollection> ( gct_jetcnt_data, gct_jetcnt_emul, GCT,GCTjetcnt);#missing in emulator
639  }
640  if(m_stage1_layer2_==true){
641  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_isolaem_data, gct_isolaem_emul, GCT,GCTisolaem);
642  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_noisoem_data, gct_noisoem_emul, GCT,GCTnoisoem);
643  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_cenjets_data, gct_cenjets_emul, GCT,GCTcenjets);
644  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_forjets_data, gct_forjets_emul, GCT,GCTforjets);
645  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_taujets_data, gct_taujets_emul, GCT,GCTtaujets);
646  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_isotaujets_data,gct_isotaujets_emul, GCT, GCTisotaujets);
647  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtHadCollection> ( gct_ht_data, gct_ht_emul, GCT,GCTethad);
648  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtMissCollection> ( gct_etmiss_data, gct_etmiss_emul, GCT,GCTetmiss);
649  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtTotalCollection> ( gct_ettota_data , gct_ettota_emul, GCT,GCTettot);
650  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHtMissCollection> ( gct_htmiss_data, gct_htmiss_emul, GCT,GCThtmiss);
651  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFRingEtSumsCollection> ( gct_hfring_data, gct_hfring_emul, GCT,GCThfring);
652  if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFBitCountsCollection> ( gct_hfbcnt_data, gct_hfbcnt_emul, GCT,GCThfbit);
653  //if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCountsCollection> ( gct_jetcnt_data, gct_jetcnt_emul, GCT,GCTjetcnt);#missing in emulator
654  }
655 
656  if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambPhDigiCollection> ( dtp_ph_data, dtp_ph_emul, DTP,DTtpPh);
657  if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambThDigiCollection> ( dtp_th_data, dtp_th_emul, DTP,DTtpTh);
658 
659  if(m_doSys[DTF]&&isValid[DTF]) process<L1MuRegionalCandCollection> ( dtf_trk_data, dtf_trk_emul, DTF,DTtftrk);
660 
661  if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_cen_data, rpc_cen_emul, RPC,RPCcen);
662  if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_for_data, rpc_for_emul, RPC,RPCfor);
663 
664  if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_data, gmt_emul, GMT,GMTmain);
665  if(m_doSys[GMT]&&isValid[GMT]) process<L1MuRegionalCandCollection> ( gmt_rdt_data, gmt_rdt_emul, GMT,GMTrdt);
666  if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_can_data, gmt_can_emul, GMT,GMTcnd);
667 
668  // >>---- GLT ---- <<
669  GltDEDigi gltdigimon;
670 
671 
672  if(verbose())
673  std::cout << "L1Comparator done processing all collections.\n" << std::flush;
674 
675  if(verbose()) {
676  std::cout << "[L1Comparator] sys match? << evt." << nevt_ << ": ";
677  for(int i=0; i<DEnsys; i++)
678  std::cout << DEmatchEvt[i] << " ";
679  std::cout << std::endl;
680  }
681 
682 
683  // >>---- Event match? ---- <<
684 
685  bool evt_match = true;
686  for(int i=0; i<DEnsys; i++)
687  evt_match &= DEmatchEvt[i];
688 
689 
690  /* char ok[10];
691  if(evt_match) sprintf(ok,"GOOD :]");
692  else sprintf(ok,"BAD !!!");
693  char dumptofile[1000];
694  sprintf(dumptofile,"\n -> event data and emulator match... %s\n", ok);
695  m_dumpFile<<dumptofile;
696  */
697 
698  // >>---- Global match? ---- <<
699  m_match &= evt_match;
700  m_dumpFile << std::flush;
701 
702  //if collection is empty, add empty digi
703  if(m_dedigis.size()==0) {
704  if(verbose())
705  std::cout << "\n [L1Comparator] adding empty collection to DErecord\n";
706  m_dedigis.push_back(L1DataEmulDigi());
707  }
708 
709  // >>---- d|e record ---- <<
710  std::unique_ptr<L1DataEmulRecord> record
711  (new L1DataEmulRecord(evt_match,m_doSys,DEmatchEvt,DEncand,m_dedigis, gltdigimon));
712  if(verbose()) {
713  std::cout << "\n [L1Comparator] printing DErecord"
714  << "(entry:"<< nevt_
715  << "|evt:" << evtNum_
716  << "|run:" << runNum_
717  << "):\n" << std::flush;
718  std::cout << *record
719  << "\n" << std::flush;
720  }
721 
722  iEvent.put(std::move(record));
723 
724  if(verbose())
725  std::cout << "L1comparator::analize() end. " << nevt_ << std::endl;
726 
727 }
728 
729 
730 template <class T>
731 void L1Comparator::process(T const* data, T const* emul, const int sys, const int cid) {
732 
733  if(verbose())
734  std::cout << "L1Comparator::process -ing system:" << sys
735  << " (" << SystLabel[sys] << "), data type " << cid
736  << "...\n" << std::flush;
737  if(verbose())
738  std::cout << "L1Comparator::process debug "
739  << " (size " << data->size() << "," <<emul->size() << ")"
740  << ".\n" << std::flush;
741 
743  bool prt = false;
744  if(!m_dumpMode)
745  prt = false;
746  else if(m_dumpMode==-1)
747  prt=true;
748  else if(m_dumpMode>0) {
749  DEcompare<T> tmp(data,emul);
750  if(tmp.get_ncand(0)==0 && tmp.get_ncand(1)==0)
751  prt=false;
752  else
753  prt = !tmp.do_compare(m_dumpFile,0);
754  }
755 
756  //declare de compare object
757  DEcompare<T> cmp(data,emul);
758 
759  int ndata = cmp.get_ncand(0);
760  int nemul = cmp.get_ncand(1);
761 
762  if(verbose())
763  std::cout << "L1Comparator::process "
764  << " system:" << SystLabel[sys] << "(id " << sys << ")"
765  << " type:" << cmp.GetName(0) << "(" << cmp.de_type() << ")"
766  << " ndata:" << ndata
767  << " nemul:" << nemul
768  << " (size " << data->size() << "," <<emul->size() << ")"
769  << ".\n" << std::flush;
770 
771  if(ndata==0&&nemul==0) {
772  if(verbose())
773  std::cout << "L1Comparator::process "
774  << "empty collections -- exiting!\n" << std::flush;
775  return;
776  }
777 
778  m_dumpFile << std::setiosflags(std::ios::showpoint | std::ios::fixed
779  | std::ios::right | std::ios::adjustfield);
780  std::cout << std::setiosflags(std::ios::showpoint | std::ios::fixed
781  | std::ios::right | std::ios::adjustfield);
782 
783  if(dumpEvent_ && prt ) {
784  m_dumpFile << "\nEntry: " << nevt_
785  << " (event:" << evtNum_
786  << " | run:" << runNum_
787  << ")\n" << std::flush;
788  dumpEvent_=false;
789  }
790 
791  if(prt)
792  m_dumpFile << "\n sys:" << SystLabel[sys]
793  << " (" << sys << "), type:" << cid //cmp.GetName()
794  << " ...\n";
795 
796  if(verbose())
797  std::cout << "L1Comparator::process print:\n" << std::flush
798  << cmp.print()
799  << std::flush;
800 
802  DEmatchEvt[sys] &= cmp.do_compare(m_dumpFile,m_dumpMode);
803 
805  L1DEDigiCollection dg = cmp.getDEDigis();
806 
807  if(verbose())
808  for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
809  std::cout << *it << "\n";
810 
812  for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
813  it->setSid(sys);
815  for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
816  it->setCid(cid);
817 
819  m_dedigis.insert(m_dedigis.end(), dg.begin(), dg.end());
820  for(int i=0; i<2; i++)
821  DEncand[sys][i] += cmp.get_ncand(i);
822 
823  if(verbose())
824  std::cout << "L1Comparator::process "
825  << " system:" << SystLabel[sys]
826  << " type:" << cmp.GetName(0)
827  << " ndata:" << DEncand[sys][0]
828  << " nemul:" << DEncand[sys][1]
829  << " (size " << data->size() << "," <<emul->size() << ")"
830  << " ndigis:" << dg.size()
831  << " agree? " << DEmatchEvt[sys]
832  << std::endl;
833 
834  if(verbose())
835  std::cout << "L1Comparator::process -ing system:"
836  << sys << " (" << SystLabel[sys] << ")...done.\n"
837  << std::flush;
838 }
839 
840 template <class myCol>
842  bool match = true;
843  typedef typename myCol::size_type col_sz;
844  typedef typename myCol::iterator col_it;
845  col_sz ndata = data->size();
846  col_sz nemul = emul->size();
847  if(ndata!=nemul) {
848  match &= false;
849  m_dumpFile << " #cand mismatch!"
850  << "\tdata: " << ndata
851  << "\temul: " << nemul
852  << std::endl;
853  }
854  col_it itd = data -> begin();
855  col_it itm = emul -> begin();
856  for (col_sz i=0; i<ndata; i++) {
857  match &= dumpCandidate(*itd++,*itm++, m_dumpFile);
858  }
859  return match;
860 }
861 
862 template <class T>
863 bool L1Comparator::dumpCandidate( const T& dt, const T& em, std::ostream& s) {
864  if(dt==em)
865  return true;
866  s<<dt<<std::endl;
867  s<<em<<std::endl<<std::endl;
868  return false;
869 }
RunNumber_t run() const
Definition: EventID.h:39
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
The_Container const * getContainer() const
T getUntrackedParameter(std::string const &, T const &) const
float dt
Definition: AMPTWrapper.h:126
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
const int DEnsys
Definition: DEtrait.h:38
bool verbose
JetCorrectorParameters::Record record
Definition: classes.h:7
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
L1Comparator(const edm::ParameterSet &)
Definition: L1Comparator.cc:6
virtual void beginJob(void) override
std::string print(col_cit it) const
Definition: DEcompare.h:74
int get_ncand(typeT) const
Definition: DEcompare.h:121
std::vector< L1DataEmulDigi > L1DEDigiCollection
Definition: DEtrait.h:80
uint16_t size_type
virtual void produce(edm::Event &, const edm::EventSetup &) override
L1DEDigiCollection getDEDigis() const
Definition: DEcompare.h:79
int iEvent
Definition: GenABIO.cc:230
int de_type() const
Definition: DEcompare.h:76
std::string GetName(int i=0) const
Definition: DEcompare.h:73
bool isValid() const
Definition: HandleBase.h:74
std::vector< L1MuDTChambThDigi > L1MuDTChambThDigiCollection
Definition: DEtrait.h:72
std::vector< L1MuRegionalCand > L1MuRegionalCandCollection
virtual void beginRun(edm::Run const &, const edm::EventSetup &) override final
bool do_compare(std::ofstream &, int dump=0)
Definition: DEcompare.h:106
std::vector< L1MuDTChambPhDigi > L1MuDTChambPhDigiCollection
Definition: DEtrait.h:71
const T & get() const
Definition: EventSetup.h:56
Phi_Container const * getContainer() const
const std::string & tscKey() const
Definition: L1TriggerKey.h:87
std::string const & label() const
Definition: InputTag.h:36
const std::string SystLabel[DEnsys]
Definition: DEtrait.h:45
virtual void endJob() override
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
edm::EventID id() const
Definition: EventBase.h:58
bool dumpCandidate(const T &dt, const T &em, std::ostream &s)
#define begin
Definition: vmac.h:30
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
Definition: DEtrait.h:36
std::vector< L1MuGMTReadoutRecord > const & getRecords() const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
bool CompareCollections(edm::Handle< T > data, edm::Handle< T > emul)
const std::string & subsystemKey(L1Subsystems subsystem) const
Definition: L1TriggerKey.h:90
long double T
TrackContainer const * getContainer() const
def move(src, dest)
Definition: eostools.py:510
std::vector< L1MuGMTCand > L1MuGMTCandCollection
Definition: DEtrait.h:78
void process(T const *, T const *, const int, const int)
Definition: Run.h:42