00001 #include "L1Trigger/HardwareValidation/interface/L1Comparator.h"
00002
00003 using namespace dedefs;
00004
00005 L1Comparator::L1Comparator(const edm::ParameterSet& iConfig) {
00006
00007 verbose_ = iConfig.getUntrackedParameter<int>("VerboseFlag",0);
00008
00009 if(verbose())
00010 std::cout << "\nL1COMPARATOR constructor...\n" << std::flush;
00011
00012 std::vector<unsigned int> dosys(0,DEnsys);
00013 dosys =
00014 iConfig.getUntrackedParameter<std::vector<unsigned int> >("COMPARE_COLLS", dosys);
00015
00016 if((int)dosys.size()!=DEnsys)
00017 edm::LogError("L1Comparator")
00018 << "wrong selection of systems to be compared\n"
00019 << "\t the size of the mask COMPARE_COLLS (" << dosys.size()
00020 << ") is not " << DEnsys << std::endl;
00021 assert((int)dosys.size()==DEnsys);
00022
00023 for(int isys=0; isys<DEnsys; isys++)
00024 if( dosys[isys]!=0 && dosys[isys]!=1 )
00025 throw cms::Exception("Invalid configuration")
00026 << "L1Comparator: comparison flag for system " << isys
00027 << " is non boolean: " << dosys[isys] << ". Exiting.\n";
00028
00029 for(int i=0; i<DEnsys; i++)
00030 m_doSys[i] = dosys[i];
00031
00032 if(verbose()) {
00033 std::cout << "[L1Comparator] do sys? ";
00034 for(int i=0; i<DEnsys; i++)
00035 std::cout << m_doSys[i] << " ";
00036 std::cout << std::endl;
00037
00038 std::cout << "[L1Comparator] list of systems to process: ";
00039 for(int i=0; i<DEnsys; i++)
00040 if(m_doSys[i])
00041 std::cout << SystLabel[i] << " ";
00042 std::cout << std::endl;
00043 }
00044
00046 assert(ETP==0); assert(HTP==1); assert(RCT== 2); assert(GCT== 3);
00047 assert(DTP==4); assert(DTF==5); assert(CTP== 6); assert(CTF== 7);
00048 assert(RPC==8); assert(LTC==9); assert(GMT==10); assert(GLT==11);
00049
00050 if(verbose())
00051 std::cout << "[L1Comparator] debug print collection labels\n";
00052
00053 m_DEsource[ETP][0] = iConfig.getParameter<edm::InputTag>("ETPsourceData");
00054 m_DEsource[ETP][1] = iConfig.getParameter<edm::InputTag>("ETPsourceEmul");
00055 m_DEsource[HTP][0] = iConfig.getParameter<edm::InputTag>("HTPsourceData");
00056 m_DEsource[HTP][1] = iConfig.getParameter<edm::InputTag>("HTPsourceEmul");
00057 m_DEsource[RCT][0] = iConfig.getParameter<edm::InputTag>("RCTsourceData");
00058 m_DEsource[RCT][1] = iConfig.getParameter<edm::InputTag>("RCTsourceEmul");
00059 m_DEsource[GCT][0] = iConfig.getParameter<edm::InputTag>("GCTsourceData");
00060 m_DEsource[GCT][1] = iConfig.getParameter<edm::InputTag>("GCTsourceEmul");
00061 m_DEsource[DTP][0] = iConfig.getParameter<edm::InputTag>("DTPsourceData");
00062 m_DEsource[DTP][1] = iConfig.getParameter<edm::InputTag>("DTPsourceEmul");
00063 m_DEsource[DTF][0] = iConfig.getParameter<edm::InputTag>("DTFsourceData");
00064 m_DEsource[DTF][1] = iConfig.getParameter<edm::InputTag>("DTFsourceEmul");
00065 m_DEsource[CTP][0] = iConfig.getParameter<edm::InputTag>("CTPsourceData");
00066 m_DEsource[CTP][1] = iConfig.getParameter<edm::InputTag>("CTPsourceEmul");
00067 m_DEsource[CTF][0] = iConfig.getParameter<edm::InputTag>("CTFsourceData");
00068 m_DEsource[CTF][1] = iConfig.getParameter<edm::InputTag>("CTFsourceEmul");
00069 m_DEsource[CTF][2] = iConfig.getParameter<edm::InputTag>("CTTsourceData");
00070 m_DEsource[CTF][3] = iConfig.getParameter<edm::InputTag>("CTTsourceEmul");
00071 m_DEsource[RPC][0] = iConfig.getParameter<edm::InputTag>("RPCsourceData");
00072 m_DEsource[RPC][1] = iConfig.getParameter<edm::InputTag>("RPCsourceEmul");
00073 m_DEsource[LTC][0] = iConfig.getParameter<edm::InputTag>("LTCsourceData");
00074 m_DEsource[LTC][1] = iConfig.getParameter<edm::InputTag>("LTCsourceEmul");
00075 m_DEsource[GMT][0] = iConfig.getParameter<edm::InputTag>("GMTsourceData");
00076 m_DEsource[GMT][1] = iConfig.getParameter<edm::InputTag>("GMTsourceEmul");
00077 m_DEsource[GLT][0] = iConfig.getParameter<edm::InputTag>("GLTsourceData");
00078 m_DEsource[GLT][1] = iConfig.getParameter<edm::InputTag>("GLTsourceEmul");
00079
00080 for(int sys=0; sys<DEnsys; sys++) {
00081 std::string data_label = SystLabel[sys] + "sourceData";
00082 std::string emul_label = SystLabel[sys] + "sourceEmul";
00083
00084
00085
00086
00087
00088
00089
00090
00091 if(m_doSys[sys] && verbose()) {
00092 std::cout << " sys:" << sys << " label:" << SystLabel[sys]
00093 << "\n\tdt:" << data_label << " : " <<m_DEsource[sys][0]
00094 << "\n\tem:" << emul_label << " : " <<m_DEsource[sys][1]
00095 << std::endl;
00096 if(sys==CTF) {
00097 std::cout << "\tdt:" << data_label << " : " <<m_DEsource[sys][2]
00098 << "\n\tem:" << emul_label << " : " <<m_DEsource[sys][3]
00099 << std::endl;
00100 }
00101 }
00102 }
00103
00104
00105 m_fedId = iConfig.getUntrackedParameter<int>("FEDid", 0);
00106 m_FEDsource[0] =
00107 iConfig.getUntrackedParameter<edm::InputTag>("FEDsourceData",edm::InputTag());
00108 m_FEDsource[1] =
00109 iConfig.getUntrackedParameter<edm::InputTag>("FEDsourceEmul",edm::InputTag());
00110
00111
00113 m_dumpMode = iConfig.getUntrackedParameter<int>("DumpMode",0);
00114 m_dumpFileName = iConfig.getUntrackedParameter<std::string>("DumpFile","");
00115 if(m_dumpMode) {
00116 m_dumpFile.open(m_dumpFileName.c_str(), std::ios::out);
00117 if(!m_dumpFile.good())
00118 edm::LogInfo("L1ComparatorDumpFileOpenError")
00119 << " L1Comparator::L1Comparator() : "
00120 << " couldn't open dump file " << m_dumpFileName.c_str() << std::endl;
00121 }
00122
00123 m_match = true;
00124 dumpEvent_ = true;
00125 nevt_=-1;
00126
00127 for(int i=0; i<DEnsys; i++) {
00128 for(int j=0; j<2; j++)
00129 DEncand[i][j] = 0;
00130 DEmatchEvt[i] = true;
00131 }
00132
00133 m_dedigis.clear();
00135 produces<L1DataEmulRecord>().setBranchAlias("L1DataEmulRecord");
00136
00137 if(verbose())
00138 std::cout << "\nL1Comparator constructor...done.\n" << std::flush;
00139 }
00140
00141
00142 L1Comparator::~L1Comparator(){}
00143
00144 void L1Comparator::beginJob(const edm::EventSetup&) {}
00145
00146 void L1Comparator::endJob() {
00147 if(m_dumpMode)
00148 m_dumpFile << "\n\n-------\n"
00149 << "Global data|emulator agreement: "
00150 << m_match << std::endl;
00151 m_dumpFile.close();
00152 }
00153
00154
00155 void
00156 L1Comparator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
00157
00158 nevt_++;
00159 evtNum_ = iEvent.id().event();
00160 runNum_ = iEvent.id().run();
00161
00162 if(verbose())
00163 std::cout << "\nL1COMPARATOR entry:" << nevt_ << " | evt:" << evtNum_
00164 << " | run:" << runNum_ << "\n" << std::flush;
00165
00166
00167 dumpEvent_ = true;
00168
00169
00170 for(int i=0; i<DEnsys; i++) {
00171 for(int j=0; j<2; j++)
00172 DEncand[i][j] = 0;
00173 DEmatchEvt[i] = true;
00174 }
00175 m_dedigis.clear();
00176
00177
00179
00180
00181 edm::Handle<EcalTrigPrimDigiCollection> ecal_tp_data;
00182 edm::Handle<EcalTrigPrimDigiCollection> ecal_tp_emul;
00183 if(m_doSys[ETP]) {
00184 iEvent.getByLabel(m_DEsource[ETP][0], ecal_tp_data);
00185 iEvent.getByLabel(m_DEsource[ETP][1], ecal_tp_emul);
00186 }
00187
00188
00189 edm::Handle<HcalTrigPrimDigiCollection> hcal_tp_data;
00190 edm::Handle<HcalTrigPrimDigiCollection> hcal_tp_emul;
00191 if(m_doSys[HTP]) {
00192 iEvent.getByLabel(m_DEsource[HTP][0], hcal_tp_data);
00193 iEvent.getByLabel(m_DEsource[HTP][1], hcal_tp_emul);
00194 }
00195
00196
00197 edm::Handle<L1CaloEmCollection> rct_em_data;
00198 edm::Handle<L1CaloEmCollection> rct_em_emul;
00199 edm::Handle<L1CaloRegionCollection> rct_rgn_data;
00200 edm::Handle<L1CaloRegionCollection> rct_rgn_emul;
00201 if(m_doSys[RCT]) {
00202 iEvent.getByLabel(m_DEsource[RCT][0], rct_em_data);
00203 iEvent.getByLabel(m_DEsource[RCT][1], rct_em_emul);
00204 iEvent.getByLabel(m_DEsource[RCT][0], rct_rgn_data);
00205 iEvent.getByLabel(m_DEsource[RCT][1], rct_rgn_emul);
00206 }
00207
00208
00209 edm::Handle<L1GctEmCandCollection> gct_isolaem_data;
00210 edm::Handle<L1GctEmCandCollection> gct_isolaem_emul;
00211 edm::Handle<L1GctEmCandCollection> gct_noisoem_data;
00212 edm::Handle<L1GctEmCandCollection> gct_noisoem_emul;
00213 edm::Handle<L1GctJetCandCollection> gct_cenjets_data;
00214 edm::Handle<L1GctJetCandCollection> gct_cenjets_emul;
00215 edm::Handle<L1GctJetCandCollection> gct_forjets_data;
00216 edm::Handle<L1GctJetCandCollection> gct_forjets_emul;
00217 edm::Handle<L1GctJetCandCollection> gct_taujets_data;
00218 edm::Handle<L1GctJetCandCollection> gct_taujets_emul;
00219 if(m_doSys[GCT]) {
00220 iEvent.getByLabel(m_DEsource[GCT][0].label(),"isoEm", gct_isolaem_data);
00221 iEvent.getByLabel(m_DEsource[GCT][1].label(),"isoEm", gct_isolaem_emul);
00222 iEvent.getByLabel(m_DEsource[GCT][0].label(),"nonIsoEm",gct_noisoem_data);
00223 iEvent.getByLabel(m_DEsource[GCT][1].label(),"nonIsoEm",gct_noisoem_emul);
00224 iEvent.getByLabel(m_DEsource[GCT][0].label(),"cenJets", gct_cenjets_data);
00225 iEvent.getByLabel(m_DEsource[GCT][1].label(),"cenJets", gct_cenjets_emul);
00226 iEvent.getByLabel(m_DEsource[GCT][0].label(),"forJets", gct_forjets_data);
00227 iEvent.getByLabel(m_DEsource[GCT][1].label(),"forJets", gct_forjets_emul);
00228 iEvent.getByLabel(m_DEsource[GCT][0].label(),"tauJets", gct_taujets_data);
00229 iEvent.getByLabel(m_DEsource[GCT][1].label(),"tauJets", gct_taujets_emul);
00230 }
00231
00232
00233 edm::Handle<L1MuDTChambPhContainer> dtp_ph_data_;
00234 edm::Handle<L1MuDTChambPhContainer> dtp_ph_emul_;
00235 edm::Handle<L1MuDTChambThContainer> dtp_th_data_;
00236 edm::Handle<L1MuDTChambThContainer> dtp_th_emul_;
00237 if(m_doSys[DTP]) {
00238 iEvent.getByLabel(m_DEsource[DTP][0],dtp_ph_data_);
00239 iEvent.getByLabel(m_DEsource[DTP][1],dtp_ph_emul_);
00240 iEvent.getByLabel(m_DEsource[DTP][0],dtp_th_data_);
00241 iEvent.getByLabel(m_DEsource[DTP][1],dtp_th_emul_);
00242 }
00243 L1MuDTChambPhDigiCollection const* dtp_ph_data = 0;
00244 L1MuDTChambPhDigiCollection const* dtp_ph_emul = 0;
00245 L1MuDTChambThDigiCollection const* dtp_th_data = 0;
00246 L1MuDTChambThDigiCollection const* dtp_th_emul = 0;
00247
00248 if(dtp_ph_data_.isValid()) dtp_ph_data = dtp_ph_data_->getContainer();
00249 if(dtp_ph_emul_.isValid()) dtp_ph_emul = dtp_ph_emul_->getContainer();
00250 if(dtp_th_data_.isValid()) dtp_th_data = dtp_th_data_->getContainer();
00251 if(dtp_th_emul_.isValid()) dtp_th_emul = dtp_th_emul_->getContainer();
00252
00253
00254 edm::Handle<L1MuRegionalCandCollection> dtf_data;
00255 edm::Handle<L1MuRegionalCandCollection> dtf_emul;
00256 edm::Handle<L1MuDTTrackContainer> dtf_trk_data_;
00257 edm::Handle<L1MuDTTrackContainer> dtf_trk_emul_;
00258 L1MuRegionalCandCollection const* dtf_trk_data = 0;
00259 L1MuRegionalCandCollection const* dtf_trk_emul = 0;
00260 if(m_doSys[DTF]) {
00261 iEvent.getByLabel(m_DEsource[DTF][0].label(),"DT",dtf_data);
00262 iEvent.getByLabel(m_DEsource[DTF][1].label(),"DT",dtf_emul);
00263 iEvent.getByLabel(m_DEsource[DTF][0].label(),"DTTF",dtf_trk_data_);
00264 iEvent.getByLabel(m_DEsource[DTF][1].label(),"DTTF",dtf_trk_emul_);
00265 }
00266
00267 typedef std::vector<L1MuDTTrackCand> L1MuDTTrackCandCollection;
00268 L1MuRegionalCandCollection dtf_trk_data_v, dtf_trk_emul_v;
00269 dtf_trk_data_v.clear(); dtf_trk_emul_v.clear();
00270 if(dtf_trk_data_.isValid()) {
00271 L1MuDTTrackCandCollection *dttc = dtf_trk_data_->getContainer();
00272 for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
00273 it!=dttc->end(); it++)
00274 dtf_trk_data_v.push_back(L1MuRegionalCand(*it));
00275 }
00276 if(dtf_trk_emul_.isValid()) {
00277 L1MuDTTrackCandCollection *dttc = dtf_trk_emul_->getContainer();
00278 for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
00279 it!=dttc->end(); it++)
00280 dtf_trk_emul_v.push_back(L1MuRegionalCand(*it));
00281 }
00282 dtf_trk_data =&dtf_trk_data_v;
00283 dtf_trk_emul =&dtf_trk_emul_v;
00284
00285
00286 edm::Handle<CSCALCTDigiCollection> ctp_ano_data_;
00287 edm::Handle<CSCALCTDigiCollection> ctp_ano_emul_;
00288 edm::Handle<CSCCLCTDigiCollection> ctp_cat_data_;
00289 edm::Handle<CSCCLCTDigiCollection> ctp_cat_emul_;
00290 edm::Handle<CSCCorrelatedLCTDigiCollection> ctp_lct_data_;
00291 edm::Handle<CSCCorrelatedLCTDigiCollection> ctp_lct_emul_;
00292 CSCALCTDigiCollection_ const* ctp_ano_data = 0;
00293 CSCALCTDigiCollection_ const* ctp_ano_emul = 0;
00294 CSCCLCTDigiCollection_ const* ctp_cat_data = 0;
00295 CSCCLCTDigiCollection_ const* ctp_cat_emul = 0;
00296 CSCCorrelatedLCTDigiCollection_ const* ctp_lct_data = 0;
00297 CSCCorrelatedLCTDigiCollection_ const* ctp_lct_emul = 0;
00298 if(m_doSys[CTP]) {
00299 if(m_DEsource[CTP][0].label().find("tf")!=std::string::npos) {
00300
00301 iEvent.getByLabel("muonCSCDigis", "MuonCSCALCTDigi" ,ctp_ano_data_);
00302 iEvent.getByLabel("muonCSCDigis", "MuonCSCCLCTDigi" ,ctp_cat_data_);
00303 iEvent.getByLabel(m_DEsource[CTP][0] ,ctp_lct_data_);
00304 } else {
00305 iEvent.getByLabel(m_DEsource[CTP][0].label(),"MuonCSCALCTDigi",ctp_ano_data_);
00306 iEvent.getByLabel(m_DEsource[CTP][0].label(),"MuonCSCCLCTDigi",ctp_cat_data_);
00307 iEvent.getByLabel(m_DEsource[CTP][0].label(),"MuonCSCCorrelatedLCTDigi",ctp_lct_data_);
00308 }
00309 iEvent.getByLabel(m_DEsource[CTP][1] ,ctp_ano_emul_);
00310 iEvent.getByLabel(m_DEsource[CTP][1] ,ctp_cat_emul_);
00311 iEvent.getByLabel(m_DEsource[CTP][1] ,ctp_lct_emul_);
00312 }
00313
00315
00316 CSCALCTDigiCollection_ ctp_ano_data_v, ctp_ano_emul_v;
00317 ctp_ano_data_v.clear(); ctp_ano_emul_v.clear();
00318 if(ctp_ano_data_.isValid() && ctp_ano_emul_.isValid()) {
00319
00320 int fifo_pretrig = 10;
00321 int fpga_latency = 6;
00322 int l1a_window_width = 7;
00323
00324 int rawhit_tbin_offset =
00325 (fifo_pretrig - fpga_latency) + (l1a_window_width-1)/2;
00326
00327
00328 int register_delay = 2;
00329 typedef CSCALCTDigiCollection::DigiRangeIterator mapIt;
00330 typedef CSCALCTDigiCollection::const_iterator vecIt;
00331 for (mapIt mit = ctp_ano_data_->begin(); mit != ctp_ano_data_->end(); mit++)
00332 for (vecIt vit = ctp_ano_data_->get((*mit).first).first;
00333 vit != ctp_ano_data_->get((*mit).first).second; vit++)
00334 ctp_ano_data_v.push_back(*vit);
00335 for (mapIt mit = ctp_ano_emul_->begin(); mit != ctp_ano_emul_->end(); mit++)
00336 for (vecIt vit = ctp_ano_emul_->get((*mit).first).first;
00337 vit != ctp_ano_emul_->get((*mit).first).second; vit++) {
00338 int emul_bx_corr =
00339 (*vit).getBX() - rawhit_tbin_offset + register_delay;
00340 CSCALCTDigi alct((*vit).isValid(), (*vit).getQuality(),
00341 (*vit).getAccelerator(), (*vit).getCollisionB(),
00342 (*vit).getKeyWG(), emul_bx_corr,
00343 (*vit).getTrknmb());
00344 ctp_ano_emul_v.push_back(alct);
00345 }
00346 }
00347 ctp_ano_data =&ctp_ano_data_v;
00348 ctp_ano_emul =&ctp_ano_emul_v;
00349
00350 CSCCLCTDigiCollection_ ctp_cat_data_v, ctp_cat_emul_v;
00351 ctp_cat_data_v.clear(); ctp_cat_emul_v.clear();
00352 if(ctp_cat_data_.isValid() && ctp_cat_emul_.isValid()) {
00353 int tbin_cathode_offset = 7, emul_bx_corr;
00354 typedef CSCCLCTDigiCollection::DigiRangeIterator mapIt;
00355 typedef CSCCLCTDigiCollection::const_iterator vecIt;
00356 for (mapIt mit = ctp_cat_data_->begin(); mit != ctp_cat_data_->end(); mit++)
00357 for (vecIt vit = ctp_cat_data_->get((*mit).first).first;
00358 vit != ctp_cat_data_->get((*mit).first).second; vit++)
00359 ctp_cat_data_v.push_back(*vit);
00360 for (mapIt mit = ctp_cat_emul_->begin(); mit != ctp_cat_emul_->end(); mit++) {
00361 const CSCDetId& detid = (*mit).first;
00362
00363
00364 int full_cathode_bx = -999;
00365 const CSCCLCTDigiCollection::Range& crange = ctp_cat_data_->get(detid);
00366 for (vecIt digiIt = crange.first; digiIt != crange.second; digiIt++) {
00367 if ((*digiIt).isValid()) {
00368 full_cathode_bx = (*digiIt).getFullBX();
00369 break;
00370 }
00371 }
00372
00373 for (vecIt vit = ctp_cat_emul_->get(detid).first;
00374 vit != ctp_cat_emul_->get(detid).second; vit++) {
00375 int emul_bx = (*vit).getBX();
00376 if (full_cathode_bx != -999)
00377 emul_bx_corr =
00378 (full_cathode_bx + emul_bx - tbin_cathode_offset) & 0x03;
00379 else
00380 emul_bx_corr = emul_bx & 0x03;
00381 CSCCLCTDigi clct((*vit).isValid(), (*vit).getQuality(),
00382 (*vit).getPattern(), (*vit).getStripType(),
00383 (*vit).getBend(), (*vit).getStrip(),
00384 (*vit).getCFEB(), emul_bx_corr,
00385 (*vit).getTrknmb());
00386 ctp_cat_emul_v.push_back(clct);
00387 }
00388 }
00389 }
00390 ctp_cat_data =&ctp_cat_data_v;
00391 ctp_cat_emul =&ctp_cat_emul_v;
00392
00393 CSCCorrelatedLCTDigiCollection_ ctp_lct_data_v, ctp_lct_emul_v;
00394 ctp_lct_data_v.clear(); ctp_lct_emul_v.clear();
00395 if(ctp_lct_data_.isValid() && ctp_lct_emul_.isValid()) {
00396 int tbin_anode_offset = 5, emul_bx_corr;
00397 typedef CSCCorrelatedLCTDigiCollection::DigiRangeIterator mapIt;
00398 typedef CSCCorrelatedLCTDigiCollection::const_iterator vecIt;
00399
00400 for (mapIt mit = ctp_lct_data_->begin(); mit != ctp_lct_data_->end(); mit++)
00401
00402
00403
00404
00405 for (vecIt vit = ctp_lct_data_->get((*mit).first).first;
00406 vit != ctp_lct_data_->get((*mit).first).second; vit++)
00407 ctp_lct_data_v.push_back(*vit);
00408 for (mapIt mit = ctp_lct_emul_->begin(); mit != ctp_lct_emul_->end(); mit++) {
00409 const CSCDetId& detid = (*mit).first;
00410
00411
00412 int full_anode_bx = -999;
00413 if(ctp_ano_data_.isValid()) {
00414 const CSCALCTDigiCollection::Range& arange = ctp_ano_data_->get(detid);
00415 for (CSCALCTDigiCollection::const_iterator digiIt = arange.first;
00416 digiIt != arange.second; digiIt++) {
00417 if ((*digiIt).isValid()) {
00418 full_anode_bx = (*digiIt).getFullBX();
00419 break;
00420 }
00421 }
00422 }
00423
00424 for (vecIt vit = ctp_lct_emul_->get(detid).first;
00425 vit != ctp_lct_emul_->get(detid).second; vit++) {
00426 int emul_bx = (*vit).getBX();
00427 if (full_anode_bx != -999) {
00428 emul_bx_corr = (full_anode_bx + emul_bx - tbin_anode_offset) & 0x01;
00429 }
00430 else {
00431 emul_bx_corr = emul_bx & 0x01;
00432 }
00433
00434
00435
00436 if (m_DEsource[CTP][1].instance() == "MPCSORTED") emul_bx_corr += 5;
00437
00438 CSCCorrelatedLCTDigi lct((*vit).getTrknmb(), (*vit).isValid(),
00439 (*vit).getQuality(), (*vit).getKeyWG(),
00440 (*vit).getStrip(), (*vit).getPattern(),
00441 (*vit).getBend(), emul_bx_corr,
00442 (*vit).getMPCLink(), (*vit).getBX0(),
00443 (*vit).getSyncErr(), (*vit).getCSCID());
00444 ctp_lct_emul_v.push_back(lct);
00445 }
00446 }
00447 }
00448 ctp_lct_data =&ctp_lct_data_v;
00449 ctp_lct_emul =&ctp_lct_emul_v;
00450
00451
00452
00453 edm::Handle<L1MuRegionalCandCollection> ctf_data, ctf_emul;
00454 edm::Handle<L1CSCTrackCollection> ctf_trk_data_, ctf_trk_emul_;
00455 CSCCorrelatedLCTDigiCollection_ const* ctf_trk_data(new CSCCorrelatedLCTDigiCollection_);
00456 CSCCorrelatedLCTDigiCollection_ const* ctf_trk_emul(new CSCCorrelatedLCTDigiCollection_);
00457 L1MuRegionalCandCollection const* ctf_trc_data(new L1MuRegionalCandCollection);
00458 L1MuRegionalCandCollection const* ctf_trc_emul(new L1MuRegionalCandCollection);
00459 edm::Handle<L1CSCStatusDigiCollection> ctf_sta_data_;
00460 edm::Handle<L1CSCStatusDigiCollection> ctf_sta_emul_;
00461 L1CSCSPStatusDigiCollection_ const* ctf_sta_data(new L1CSCSPStatusDigiCollection_);
00462 L1CSCSPStatusDigiCollection_ const* ctf_sta_emul(new L1CSCSPStatusDigiCollection_);
00463 if(m_doSys[CTF]) {
00464 iEvent.getByLabel(m_DEsource[CTF][2],ctf_trk_data_);
00465 iEvent.getByLabel(m_DEsource[CTF][3],ctf_trk_emul_);
00466
00467 iEvent.getByLabel(m_DEsource[CTF][0],ctf_data);
00468 iEvent.getByLabel(m_DEsource[CTF][1],ctf_emul);
00469
00470 iEvent.getByLabel(m_DEsource[CTF][0].label(),"MuonL1CSCStatusDigiCollection",ctf_sta_data_);
00471 iEvent.getByLabel(m_DEsource[CTF][1].label(),"MuonL1CSCStatusDigiCollection",ctf_sta_emul_);
00472 }
00473 if(ctf_sta_data_.isValid())
00474 ctf_sta_data = &(ctf_sta_data_->second);
00475 if(ctf_sta_emul_.isValid())
00476 ctf_sta_emul = &(ctf_sta_emul_->second);
00477 if(ctf_trk_data_.isValid() && ctf_trk_emul_.isValid()) {
00478 typedef CSCCorrelatedLCTDigiCollection::DigiRangeIterator mapIt;
00479 typedef CSCCorrelatedLCTDigiCollection::const_iterator vecIt;
00480 CSCCorrelatedLCTDigiCollection_ ctf_trk_data_v, ctf_trk_emul_v;
00481 L1MuRegionalCandCollection ctf_trc_data_v, ctf_trc_emul_v;
00482 typedef L1CSCTrackCollection::const_iterator ctcIt;
00483
00484 for(ctcIt tcit=ctf_trk_data_->begin(); tcit!=ctf_trk_data_->end(); tcit++) {
00485
00486
00487
00488
00489 ctf_trc_data_v.push_back(L1MuRegionalCand(tcit->first.getDataWord(), tcit->first.bx()));
00490 CSCCorrelatedLCTDigiCollection ldc = tcit->second;
00491
00492
00493 for (mapIt mit = ldc.begin(); mit != ldc.end(); mit++)
00494
00495
00496
00497
00498 for (vecIt vit = ldc.get((*mit).first).first;
00499 vit != ldc.get((*mit).first).second; vit++)
00500 ctf_trk_data_v.push_back(*vit);
00501 }
00502 ctf_trk_data = &ctf_trk_data_v;
00503 ctf_trc_data = &ctf_trc_data_v;
00504
00505 for(ctcIt tcit=ctf_trk_emul_->begin();tcit!=ctf_trk_emul_->end(); tcit++) {
00506 ctf_trc_emul_v.push_back(L1MuRegionalCand(tcit->first.getDataWord(), tcit->first.bx()));
00507 CSCCorrelatedLCTDigiCollection ldc = tcit->second;
00508 for (mapIt mit = ldc.begin(); mit != ldc.end(); mit++)
00509 for (vecIt vit = ldc.get((*mit).first).first;
00510 vit != ldc.get((*mit).first).second; vit++)
00511 ctf_trk_emul_v.push_back(*vit);
00512 }
00513 ctf_trk_emul = &ctf_trk_emul_v;
00514 ctf_trc_emul = &ctf_trc_emul_v;
00515 }
00516
00517
00518 edm::Handle<L1MuRegionalCandCollection> rpc_cen_data;
00519 edm::Handle<L1MuRegionalCandCollection> rpc_cen_emul;
00520 edm::Handle<L1MuRegionalCandCollection> rpc_for_data;
00521 edm::Handle<L1MuRegionalCandCollection> rpc_for_emul;
00522 if(m_doSys[RPC]) {
00523 iEvent.getByLabel(m_DEsource[RPC][0].label(),"RPCb",rpc_cen_data);
00524 iEvent.getByLabel(m_DEsource[RPC][1].label(),"RPCb",rpc_cen_emul);
00525 iEvent.getByLabel(m_DEsource[RPC][0].label(),"RPCf",rpc_for_data);
00526 iEvent.getByLabel(m_DEsource[RPC][1].label(),"RPCf",rpc_for_emul);
00527 }
00528
00529
00530 edm::Handle<LTCDigiCollection> ltc_data;
00531 edm::Handle<LTCDigiCollection> ltc_emul;
00532 if(m_doSys[LTC]) {
00533 iEvent.getByLabel(m_DEsource[LTC][0],ltc_data);
00534 iEvent.getByLabel(m_DEsource[LTC][1],ltc_emul);
00535 }
00536
00537
00538 edm::Handle<L1MuGMTCandCollection> gmt_data;
00539 edm::Handle<L1MuGMTCandCollection> gmt_emul;
00540 edm::Handle<L1MuGMTReadoutCollection> gmt_rdt_data_;
00541 edm::Handle<L1MuGMTReadoutCollection> gmt_rdt_emul_;
00542 L1MuRegionalCandCollection const* gmt_rdt_data(new L1MuRegionalCandCollection);
00543 L1MuRegionalCandCollection const* gmt_rdt_emul(new L1MuRegionalCandCollection);
00544
00545 L1MuGMTCandCollection const *gmt_can_data(new L1MuGMTCandCollection);
00546 L1MuGMTCandCollection const *gmt_can_emul(new L1MuGMTCandCollection);
00547 if(m_doSys[GMT]) {
00548 iEvent.getByLabel(m_DEsource[GMT][0], gmt_data);
00549 iEvent.getByLabel(m_DEsource[GMT][1], gmt_emul);
00550 iEvent.getByLabel(m_DEsource[GMT][0], gmt_rdt_data_);
00551 iEvent.getByLabel(m_DEsource[GMT][1], gmt_rdt_emul_);
00552 }
00553 L1MuGMTCandCollection gmt_can_data_vec, gmt_can_emul_vec;
00554 L1MuRegionalCandCollection gmt_rdt_data_vec, gmt_rdt_emul_vec;
00555 gmt_can_data_vec.clear(); gmt_can_emul_vec.clear();
00556 gmt_rdt_data_vec.clear(); gmt_rdt_emul_vec.clear();
00557 if( gmt_rdt_data_.isValid() && gmt_rdt_emul_.isValid() ) {
00558 typedef std::vector<L1MuGMTReadoutRecord>::const_iterator GmtRrIt;
00559
00560 std::vector<L1MuGMTReadoutRecord> gmt_rdt_data_bx = gmt_rdt_data_->getRecords();
00561 for(GmtRrIt igmtrr=gmt_rdt_data_bx.begin(); igmtrr!=gmt_rdt_data_bx.end(); igmtrr++) {
00562
00563 typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
00564 std::vector<L1MuGMTExtendedCand> gmc;
00565 gmc = igmtrr->getGMTCands();
00566 for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
00567 L1MuGMTCand cand(iter1->getDataWord(),iter1->bx());
00568 cand.setPhiValue(iter1->phiValue());
00569 cand.setEtaValue(iter1->etaValue());
00570 cand.setPtValue (iter1->ptValue ());
00571 gmt_can_data_vec.push_back(cand);
00572 }
00573
00574 typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
00575 L1MuRegionalCandCollection rmc;
00576 rmc.clear();
00577 rmc = igmtrr->getDTBXCands();
00578 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00579 rmc.clear();
00580 rmc = igmtrr->getCSCCands();
00581 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00582 rmc.clear();
00583 rmc = igmtrr->getBrlRPCCands();
00584 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00585 rmc.clear();
00586 rmc = igmtrr->getFwdRPCCands();
00587 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00588 }
00589
00590 std::vector<L1MuGMTReadoutRecord> gmt_rdt_emul_bx = gmt_rdt_emul_->getRecords();
00591 for(GmtRrIt igmtrr=gmt_rdt_emul_bx.begin(); igmtrr!=gmt_rdt_emul_bx.end(); igmtrr++) {
00592
00593 typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
00594 std::vector<L1MuGMTExtendedCand> gmc;
00595 gmc = igmtrr->getGMTCands();
00596 for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
00597 gmt_can_emul_vec.push_back(L1MuGMTCand(iter1->getDataWord(),iter1->bx()));
00598 }
00599
00600 typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
00601 L1MuRegionalCandCollection rmc;
00602 rmc.clear();
00603 rmc = igmtrr->getDTBXCands();
00604 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00605 rmc.clear();
00606 rmc = igmtrr->getCSCCands();
00607 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00608 rmc.clear();
00609 rmc = igmtrr->getBrlRPCCands();
00610 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00611 rmc.clear();
00612 rmc = igmtrr->getFwdRPCCands();
00613 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00614 }
00615 }
00616 gmt_rdt_data = &gmt_rdt_data_vec;
00617 gmt_rdt_emul = &gmt_rdt_emul_vec;
00618 gmt_can_data = &gmt_can_data_vec;
00619 gmt_can_emul = &gmt_can_emul_vec;
00620
00621
00622 edm::Handle<L1GlobalTriggerReadoutRecord> glt_rdt_data;
00623 edm::Handle<L1GlobalTriggerReadoutRecord> glt_rdt_emul;
00624 edm::Handle<L1GlobalTriggerEvmReadoutRecord> glt_evm_data;
00625 edm::Handle<L1GlobalTriggerEvmReadoutRecord> glt_evm_emul;
00626 edm::Handle<L1GlobalTriggerObjectMapRecord> glt_obj_data;
00627 edm::Handle<L1GlobalTriggerObjectMapRecord> glt_obj_emul;
00628 if(m_doSys[GLT]) {
00629 iEvent.getByLabel(m_DEsource[GLT][0], glt_rdt_data);
00630 iEvent.getByLabel(m_DEsource[GLT][1], glt_rdt_emul);
00631 iEvent.getByLabel(m_DEsource[GLT][0], glt_evm_data);
00632 iEvent.getByLabel(m_DEsource[GLT][1], glt_evm_emul);
00633 iEvent.getByLabel(m_DEsource[GLT][0], glt_obj_data);
00634 iEvent.getByLabel(m_DEsource[GLT][1], glt_obj_emul);
00635 }
00636
00638
00639
00640 bool isValidDE[DEnsys][2];
00641 for(int i=0; i<DEnsys; i++) for(int j=0; j<2; j++) isValidDE[i][j]=false;
00642
00643 isValidDE[ETP][0] = ecal_tp_data .isValid(); isValidDE[ETP][1] = ecal_tp_emul .isValid();
00644 isValidDE[HTP][0] = hcal_tp_data .isValid(); isValidDE[HTP][1] = hcal_tp_emul .isValid();
00645 isValidDE[RCT][0] = rct_em_data .isValid(); isValidDE[RCT][1] = rct_em_emul .isValid();
00646 isValidDE[RCT][0]&= rct_rgn_data .isValid(); isValidDE[RCT][1] = rct_rgn_emul .isValid();
00647 isValidDE[GCT][0] = gct_isolaem_data .isValid(); isValidDE[GCT][1] =gct_isolaem_emul .isValid();
00648 isValidDE[GCT][0]&= gct_noisoem_data .isValid(); isValidDE[GCT][1]&=gct_noisoem_emul .isValid();
00649 isValidDE[GCT][0]&= gct_cenjets_data .isValid(); isValidDE[GCT][1]&=gct_cenjets_emul .isValid();
00650 isValidDE[GCT][0]&= gct_forjets_data .isValid(); isValidDE[GCT][1]&=gct_forjets_emul .isValid();
00651 isValidDE[GCT][0]&= gct_taujets_data .isValid(); isValidDE[GCT][1]&=gct_taujets_emul .isValid();
00652 isValidDE[DTP][0] = dtp_ph_data_.isValid(); isValidDE[DTP][1] = dtp_ph_emul_.isValid();
00653 isValidDE[DTP][0]&= dtp_th_data_.isValid(); isValidDE[DTP][1]&= dtp_th_emul_.isValid();
00654 isValidDE[DTF][0] = dtf_data .isValid(); isValidDE[DTF][1] = dtf_emul .isValid();
00655
00656 isValidDE[CTP][0] = ctp_lct_data_.isValid(); isValidDE[CTP][1] = ctp_lct_emul_.isValid();
00657 if (m_DEsource[CTP][0].label().find("tf") == std::string::npos) {
00658 isValidDE[CTP][0]&= ctp_ano_data_.isValid(); isValidDE[CTP][1]&= ctp_ano_emul_.isValid();
00659 isValidDE[CTP][0]&= ctp_cat_data_.isValid(); isValidDE[CTP][1]&= ctp_cat_emul_.isValid();
00660 }
00661 isValidDE[CTF][0] = ctf_data .isValid(); isValidDE[CTF][1] = ctf_emul .isValid();
00662
00663
00664 isValidDE[RPC][0] = rpc_cen_data .isValid(); isValidDE[RPC][1] = rpc_cen_emul .isValid();
00665 isValidDE[RPC][0]&= rpc_for_data .isValid(); isValidDE[RPC][1]&= rpc_for_emul .isValid();
00666 isValidDE[LTC][0] = ltc_data .isValid(); isValidDE[LTC][1] = ltc_emul .isValid();
00667 isValidDE[GMT][0] = gmt_data .isValid(); isValidDE[GMT][1] = gmt_emul .isValid();
00668
00669 isValidDE[GLT][0] = glt_rdt_data .isValid(); isValidDE[GLT][1] = glt_rdt_emul .isValid();
00670
00671
00672
00673 bool isValid[DEnsys];
00674 for(int i=0; i<DEnsys; i++) {
00675 isValid[i]=true;
00676 for(int j=0; j<2; j++) {
00677 isValid[i] &= isValidDE[i][j];
00678 }
00679 }
00680
00681 if(verbose()) {
00682 std::cout << "L1Comparator sys isValid? (evt:" << nevt_ << ") ";
00683 std::cout << "\n\t&: ";
00684 for(int i=0; i<DEnsys; i++)
00685 std::cout << isValid[i] << " ";
00686 std::cout << "\n\td: ";
00687 for(int i=0; i<DEnsys; i++)
00688 std::cout << isValidDE[i][0] << " ";
00689 std::cout << "\n\te: ";
00690 for(int i=0; i<DEnsys; i++)
00691 std::cout << isValidDE[i][1] << " ";
00692 std::cout << std::endl;
00693 }
00694
00695
00696
00697
00698 if(verbose())
00699 std::cout << "L1Comparator start processing the collections.\n" << std::flush;
00700
00702 if(m_doSys[ETP]&&isValid[ETP]) process<EcalTrigPrimDigiCollection> ( ecal_tp_data, ecal_tp_emul, ETP,ECALtp);
00703 if(m_doSys[HTP]&&isValid[HTP]) process<HcalTrigPrimDigiCollection> ( hcal_tp_data, hcal_tp_emul, HTP,HCALtp);
00704 if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloEmCollection> ( rct_em_data, rct_em_emul, RCT,RCTem);
00705 if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloRegionCollection> ( rct_rgn_data, rct_rgn_emul, RCT,RCTrgn);
00706 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_isolaem_data, gct_isolaem_emul, GCT,GCTisolaem);
00707 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_noisoem_data, gct_noisoem_emul, GCT,GCTnoisoem);
00708 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_cenjets_data, gct_cenjets_emul, GCT,GCTcenjets);
00709 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_forjets_data, gct_forjets_emul, GCT,GCTforjets);
00710 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_taujets_data, gct_taujets_emul, GCT,GCTtaujets);
00711 if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambPhDigiCollection> ( dtp_ph_data, dtp_ph_emul, DTP,DTtpPh);
00712 if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambThDigiCollection> ( dtp_th_data, dtp_th_emul, DTP,DTtpTh);
00713 if(m_doSys[DTF]&&isValid[DTF]) process<L1MuRegionalCandCollection> ( dtf_data, dtf_emul, DTF,DTtf);
00714 if(m_doSys[DTF]&&isValid[DTF]) process<L1MuRegionalCandCollection> ( dtf_trk_data, dtf_trk_emul, DTF,DTtftrk);
00715 if(m_DEsource[CTP][0].label().find("tf") == std::string::npos) {
00716 if(m_doSys[CTP]&&isValid[CTP]) process<CSCALCTDigiCollection_> ( ctp_ano_data, ctp_ano_emul, CTP,CSCtpa);
00717 if(m_doSys[CTP]&&isValid[CTP]) process<CSCCLCTDigiCollection_> ( ctp_cat_data, ctp_cat_emul, CTP,CSCtpc);
00718 }
00719 if(m_doSys[CTP]&&isValid[CTP]) process<CSCCorrelatedLCTDigiCollection_>( ctp_lct_data, ctp_lct_emul, CTP,CSCtpl);
00720 if(m_doSys[CTF]&&isValid[CTF]) process<L1MuRegionalCandCollection> ( ctf_data, ctf_emul, CTF,CSCtf);
00721 if(m_doSys[CTF]&&isValid[CTF]) process<CSCCorrelatedLCTDigiCollection_>( ctf_trk_data, ctf_trk_emul, CTF,CSCtftrk);
00722 if(m_doSys[CTF]&&isValid[CTF]) process<L1MuRegionalCandCollection> ( ctf_trc_data, ctf_trc_emul, CTF,CSCtftrc);
00723 if(m_doSys[CTF]&&isValid[CTF]) process<L1CSCSPStatusDigiCollection_> ( ctf_sta_data, ctf_sta_emul, CTF,CSCtfsta);
00724 if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_cen_data, rpc_cen_emul, RPC,RPCcen);
00725 if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_for_data, rpc_for_emul, RPC,RPCfor);
00726 if(m_doSys[LTC]&&isValid[LTC]) process<LTCDigiCollection> ( ltc_data, ltc_emul, LTC,LTCi);
00727 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_data, gmt_emul, GMT,GMTmain);
00728 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuRegionalCandCollection> ( gmt_rdt_data, gmt_rdt_emul, GMT,GMTrdt);
00729 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_can_data, gmt_can_emul, GMT,GMTcnd);
00730
00731
00732 GltDEDigi gltdigimon;
00733
00734 if(m_doSys[GLT] && isValid[GLT] ) {
00735
00737 bool prt = false;
00738 if(!m_dumpMode)
00739 prt = false;
00740 else if(m_dumpMode==-1)
00741 prt=true;
00742
00743 if(dumpEvent_ && prt) {
00744 m_dumpFile << "\nEntry: " << nevt_
00745 << " (event:" << evtNum_
00746 << " | run:" << runNum_
00747 << ")\n" << std::flush;
00748 dumpEvent_=false;
00749 }
00750
00751 m_dumpFile << "\n GT...\n";
00752
00753 if(glt_rdt_data.isValid() && glt_rdt_emul.isValid()) {
00754
00755
00756 bool globalDBit[2];
00757 std::vector<bool> gltDecBits[2], gltTchBits[2];
00758 globalDBit[0] = glt_rdt_data->decision();
00759 globalDBit[1] = glt_rdt_emul->decision();
00760 gltDecBits[0] = glt_rdt_data->decisionWord();
00761 gltDecBits[1] = glt_rdt_emul->decisionWord();
00762
00763
00764 gltTchBits[0] = glt_rdt_data->technicalTriggerWord();
00765 gltTchBits[1] = glt_rdt_emul->technicalTriggerWord();
00766 gltdigimon.set(globalDBit, gltDecBits, gltTchBits);
00767
00768 DEncand[GLT][0]=1; DEncand[GLT][1]=1;
00769 DEmatchEvt[GLT] = compareCollections(glt_rdt_data, glt_rdt_emul);
00770 }
00771
00772 if(glt_evm_data.isValid() && glt_evm_emul.isValid())
00773 DEmatchEvt[GLT] &= compareCollections(glt_evm_data, glt_evm_emul);
00774 if(glt_obj_data.isValid() && glt_obj_emul.isValid())
00775 DEmatchEvt[GLT] &= compareCollections(glt_obj_data, glt_obj_emul);
00776
00777 char ok[10];
00778 char dumptofile[1000];
00779 if(DEmatchEvt[GLT]) sprintf(ok,"successful");
00780 else sprintf(ok,"failed");
00781 sprintf(dumptofile," ...GT data and emulator comparison: %s\n", ok);
00782 m_dumpFile<<dumptofile;
00783 }
00784
00785 if(verbose())
00786 std::cout << "L1Comparator done processing all collections.\n" << std::flush;
00787
00788 if(verbose()) {
00789 std::cout << "[L1Comparator] sys match? << evt." << nevt_ << ": ";
00790 for(int i=0; i<DEnsys; i++)
00791 std::cout << DEmatchEvt[i] << " ";
00792 std::cout << std::endl;
00793 }
00794
00795
00796
00797
00798 bool evt_match = true;
00799 for(int i=0; i<DEnsys; i++)
00800 evt_match &= DEmatchEvt[i];
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812 m_match &= evt_match;
00813 m_dumpFile << std::flush;
00814
00815
00816 if(m_dedigis.size()==0) {
00817 if(verbose())
00818 std::cout << "\n [L1Comparator] adding empty collection to DErecord\n";
00819 m_dedigis.push_back(L1DataEmulDigi());
00820 }
00821
00822
00823 std::auto_ptr<L1DataEmulRecord> record
00824 (new L1DataEmulRecord(evt_match,m_doSys,DEmatchEvt,DEncand,m_dedigis, gltdigimon));
00825 if(verbose()) {
00826 std::cout << "\n [L1Comparator] printing DErecord"
00827 << "(entry:"<< nevt_
00828 << "|evt:" << evtNum_
00829 << "|run:" << runNum_
00830 << "):\n" << std::flush;
00831 std::cout << *record
00832 << "\n" << std::flush;
00833 }
00834
00835 iEvent.put(record);
00836
00838 bool dorawdata = false;
00839 if(dorawdata) {
00840 edm::Handle<FEDRawDataCollection> raw_fedcoll_data;
00841 edm::Handle<FEDRawDataCollection> raw_fedcoll_emul;
00842 iEvent.getByLabel(m_FEDsource[0], raw_fedcoll_data);
00843 iEvent.getByLabel(m_FEDsource[1], raw_fedcoll_emul);
00844 bool rawval=true;
00845 rawval &= raw_fedcoll_data.isValid();
00846 rawval &= raw_fedcoll_emul.isValid();
00847 if(rawval)
00848 compareFedRawCollections(raw_fedcoll_data,raw_fedcoll_emul, m_fedId);
00849 }
00850
00851 if(verbose())
00852 std::cout << "L1comparator::analize() end. " << nevt_ << std::endl;
00853
00854 }
00855
00856
00857 template <class T>
00858 void L1Comparator::process(T const* data, T const* emul, const int sys, const int cid) {
00859
00860 if(verbose())
00861 std::cout << "L1Comparator::process -ing system:" << sys
00862 << " (" << SystLabel[sys] << "), data type " << cid
00863 << "...\n" << std::flush;
00864 if(verbose())
00865 std::cout << "L1Comparator::process debug "
00866 << " (size " << data->size() << "," <<emul->size() << ")"
00867 << ".\n" << std::flush;
00868
00870 bool prt = false;
00871 if(!m_dumpMode)
00872 prt = false;
00873 else if(m_dumpMode==-1)
00874 prt=true;
00875 else if(m_dumpMode>0) {
00876 DEcompare<T> tmp(data,emul);
00877 if(tmp.get_ncand(0)==0 && tmp.get_ncand(1)==0)
00878 prt=false;
00879 else
00880 prt = !tmp.do_compare(m_dumpFile,0);
00881 }
00882
00883
00884 DEcompare<T> cmp(data,emul);
00885
00886 int ndata = cmp.get_ncand(0);
00887 int nemul = cmp.get_ncand(1);
00888
00889 if(verbose())
00890 std::cout << "L1Comparator::process "
00891 << " system:" << SystLabel[sys] << "(id " << sys << ")"
00892 << " type:" << cmp.GetName(0) << "(" << cmp.de_type() << ")"
00893 << " ndata:" << ndata
00894 << " nemul:" << nemul
00895 << " (size " << data->size() << "," <<emul->size() << ")"
00896 << ".\n" << std::flush;
00897
00898 if(ndata==0&&nemul==0) {
00899 if(verbose())
00900 std::cout << "L1Comparator::process "
00901 << "empty collections -- exiting!\n" << std::flush;
00902 return;
00903 }
00904
00905 m_dumpFile << std::setiosflags(std::ios::showpoint | std::ios::fixed
00906 | std::ios::right | std::ios::adjustfield);
00907 std::cout << std::setiosflags(std::ios::showpoint | std::ios::fixed
00908 | std::ios::right | std::ios::adjustfield);
00909
00910 if(dumpEvent_ && prt ) {
00911 m_dumpFile << "\nEntry: " << nevt_
00912 << " (event:" << evtNum_
00913 << " | run:" << runNum_
00914 << ")\n" << std::flush;
00915 dumpEvent_=false;
00916 }
00917
00918 if(prt)
00919 m_dumpFile << "\n sys:" << SystLabel[sys]
00920 << " (" << sys << "), type:" << cid
00921 << " ...\n";
00922
00923 if(verbose())
00924 std::cout << "L1Comparator::process print:\n" << std::flush
00925 << cmp.print()
00926 << std::flush;
00927
00929 DEmatchEvt[sys] &= cmp.do_compare(m_dumpFile,m_dumpMode);
00930
00932 L1DEDigiCollection dg = cmp.getDEDigis();
00933
00934 if(verbose())
00935 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00936 std::cout << *it << "\n";
00937
00939 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00940 it->setSid(sys);
00942 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00943 it->setCid(cid);
00944
00946 m_dedigis.insert(m_dedigis.end(), dg.begin(), dg.end());
00947 for(int i=0; i<2; i++)
00948 DEncand[sys][i] += cmp.get_ncand(i);
00949
00950 if(verbose())
00951 std::cout << "L1Comparator::process "
00952 << " system:" << SystLabel[sys]
00953 << " type:" << cmp.GetName(0)
00954 << " ndata:" << DEncand[sys][0]
00955 << " nemul:" << DEncand[sys][1]
00956 << " (size " << data->size() << "," <<emul->size() << ")"
00957 << " ndigis:" << dg.size()
00958 << " agree? " << DEmatchEvt[sys]
00959 << std::endl;
00960
00961 if(verbose())
00962 std::cout << "L1Comparator::process -ing system:"
00963 << sys << " (" << SystLabel[sys] << ")...done.\n"
00964 << std::flush;
00965 }
00966
00967
00968
00969 bool
00970 L1Comparator::compareCollections(edm::Handle<L1GlobalTriggerReadoutRecord> data,
00971 edm::Handle<L1GlobalTriggerReadoutRecord> emul) {
00972
00973 m_dumpFile << "\n L1GlobalTriggerReadoutRecord candidates...\n";
00974
00975 bool thematch = true;
00976
00977 thematch &= (*data==*emul);
00978
00979 bool match = thematch;
00980
00981 if(m_dumpMode==0 && match)
00982 return match;
00983
00984
00985
00986
00987
00988 std::auto_ptr<L1GlobalTriggerReadoutRecord>
00989 data_( new L1GlobalTriggerReadoutRecord(*(data.product())));
00990 std::auto_ptr<L1GlobalTriggerReadoutRecord>
00991 emul_( new L1GlobalTriggerReadoutRecord(*(emul.product())));
00992
00993 match = true;
00994 m_dumpFile << "\tmatch stage: ";
00995 match &= (data->gtfeWord() == emul->gtfeWord() );
00996 m_dumpFile << " gtfeWord:" << match;
00997 match &= (data->gtFdlWord() == emul->gtFdlWord() );
00998 m_dumpFile << " gtFdlWord:" << match;
00999 match &= (data->muCollectionRefProd() == emul->muCollectionRefProd());
01000 m_dumpFile << " muCollectionRefProd:" << match << "\n";
01001 boost::uint16_t dt_psb_bid=0, em_psb_bid=0;
01002 size_t npsbw = (data_->gtPsbVector().size()>emul_->gtPsbVector().size())?
01003 emul_->gtPsbVector().size():data_->gtPsbVector().size();
01004 for(int idx=0; idx<(int)npsbw; idx++) {
01005 if(data_->gtPsbVector().at(idx) != emul_->gtPsbVector().at(idx) ) {
01006
01007 dt_psb_bid = data_->gtPsbVector().at(idx).boardId();
01008 em_psb_bid = emul_->gtPsbVector().at(idx).boardId();
01009 break;
01010 }
01011 }
01012 match &= (data->gtPsbWord(dt_psb_bid) == emul->gtPsbWord(em_psb_bid) );
01013
01014
01015
01016
01017
01018
01019
01020 m_dumpFile << " gtPsbWord("<<dt_psb_bid<<","<<em_psb_bid<<"):" << match << "\n";
01021
01023
01024
01025 m_dumpFile << "\n\tGlobal decision: "
01026 << data->decision() << " (data) "
01027 << emul->decision() << " (emul) "
01028 << std::endl;
01029
01030
01031 m_dumpFile << "\n\tDecisionWord (bits: 63:0, 127:64)";
01032 int nbitword = 64;
01033 std::vector<bool> data_gtword = data->decisionWord();
01034 std::vector<bool> emul_gtword = emul->decisionWord();
01035 m_dumpFile << "\n\tdata: ";
01036 for(int i=0; i<nbitword; i++) {
01037 if (i%16==0) m_dumpFile << " ";
01038 m_dumpFile << (data_gtword.at(nbitword-1-i) ? '1' : '0');
01039 }
01040 m_dumpFile << "\n\t ";
01041 for(int i=0; i<nbitword; i++) {
01042 if (i%16==0) m_dumpFile << " ";
01043 m_dumpFile << (data_gtword.at(nbitword*2-1-i) ? '1' : '0');
01044 }
01045 m_dumpFile << "\n\temul: ";
01046 for(int i=0; i<nbitword; i++) {
01047 if (i%16==0) m_dumpFile << " ";
01048 m_dumpFile << (emul_gtword.at(nbitword-1-i) ? '1' : '0');
01049 }
01050 m_dumpFile << "\n\t ";
01051 for(int i=0; i<nbitword; i++) {
01052 if (i%16==0) m_dumpFile << " ";
01053 m_dumpFile << (emul_gtword.at(nbitword*2-1-i) ? '1' : '0');
01054 }
01055 m_dumpFile << std::endl;
01056
01057 m_dumpFile << "\n\tDecisionWordExtended (bits: 0:63)";
01058 std::vector<bool> data_decwext = data->gtFdlWord().gtDecisionWordExtended();
01059 std::vector<bool> emul_decwext = emul->gtFdlWord().gtDecisionWordExtended();
01060 m_dumpFile << "\n\tdata: ";
01061 for(int i=0; i<nbitword; i++) {
01062 if (i%16==0) m_dumpFile << " ";
01063 m_dumpFile << (data_decwext.at(nbitword-1-i) ? '1' : '0');
01064 }
01065 m_dumpFile << "\n\temul: ";
01066 for(int i=0; i<nbitword; i++) {
01067 if (i%16==0) m_dumpFile << " ";
01068 m_dumpFile << (emul_decwext.at(nbitword-1-i) ? '1' : '0');
01069 }
01070 m_dumpFile << std::endl;
01071
01072 m_dumpFile << "\n\tTechnical triggers (bits: 0:63)";
01073 std::vector<bool> data_fdlttw = data->gtFdlWord().gtTechnicalTriggerWord();
01074 std::vector<bool> emul_fdlttw = emul->gtFdlWord().gtTechnicalTriggerWord();
01075 assert((int)data_fdlttw.size()==nbitword);
01076 m_dumpFile << "\n\tdata: ";
01077 for(int i=0; i<nbitword; i++) {
01078 if (i%16==0) m_dumpFile << " ";
01079 m_dumpFile << (data_fdlttw.at(nbitword-1-i) ? '1' : '0');
01080 }
01081 m_dumpFile << "\n\temul: ";
01082 for(int i=0; i<nbitword; i++) {
01083 if (i%16==0) m_dumpFile << " ";
01084 m_dumpFile << (emul_fdlttw.at(nbitword-1-i) ? '1' : '0');
01085 }
01086 m_dumpFile << std::endl;
01087
01088 m_dumpFile << "\n\tL1GtFdlWord";
01089 m_dumpFile << "\n\tdata: "
01090 << " BoardId:" << data->gtFdlWord().boardId()
01091 << " BxInEvent:" << data->gtFdlWord().bxInEvent()
01092 << " BxNr:" << data->gtFdlWord().bxNr()
01093 << " EventNr:" << data->gtFdlWord().eventNr()
01094 << " NoAlgo:" << data->gtFdlWord().noAlgo()
01095 << " FinalOR:" << data->gtFdlWord().finalOR()
01096 << " LocalBxNr:" << data->gtFdlWord().localBxNr();
01097 m_dumpFile << "\n\temul: "
01098 << " BoardId:" << emul->gtFdlWord().boardId()
01099 << " BxInEvent:" << emul->gtFdlWord().bxInEvent()
01100 << " BxNr:" << emul->gtFdlWord().bxNr()
01101 << " EventNr:" << emul->gtFdlWord().eventNr()
01102 << " NoAlgo:" << emul->gtFdlWord().noAlgo()
01103 << " FinalOR:" << emul->gtFdlWord().finalOR()
01104 << " LocalBxNr:" << emul->gtFdlWord().localBxNr()
01105 << std::endl;
01106
01107 m_dumpFile << "\n\tL1GtfeWord";
01108 m_dumpFile << "\n\tdata: "
01109 << " BoardId:" << data->gtfeWord().boardId()
01110 << " RecordLength:" << data->gtfeWord().recordLength()
01111 << " BxNr:" << data->gtfeWord().bxNr()
01112 << " SetupVersion:" << data->gtfeWord().setupVersion()
01113 << " ActiveBoards:" << data->gtfeWord().activeBoards()
01114 << " TotalTriggerNr:" << data->gtfeWord().totalTriggerNr();
01115 m_dumpFile << "\n\temul: "
01116 << " BoardId:" << emul->gtfeWord().boardId()
01117 << " RecordLength:" << emul->gtfeWord().recordLength()
01118 << " BxNr:" << emul->gtfeWord().bxNr()
01119 << " SetupVersion:" << emul->gtfeWord().setupVersion()
01120 << " ActiveBoards:" << emul->gtfeWord().activeBoards()
01121 << " TotalTriggerNr:" << emul->gtfeWord().totalTriggerNr()
01122 << std::endl;
01123
01124
01125 m_dumpFile << "\n\tgtPsbWord";
01126 m_dumpFile << "\n\tdata: "
01127 << " Board Id:" << data->gtPsbWord(dt_psb_bid).boardId()
01128 << " BxInEvent:" << data->gtPsbWord(dt_psb_bid).bxInEvent()
01129 << " BxNr:" << data->gtPsbWord(dt_psb_bid).bxNr()
01130 << " LocalBxNr:" << data->gtPsbWord(dt_psb_bid).localBxNr()
01131 << " EventNr:" << data->gtPsbWord(dt_psb_bid).eventNr();
01132 m_dumpFile << "\n\temul: "
01133 << " Board Id:" << emul->gtPsbWord(em_psb_bid).boardId()
01134 << " BxInEvent:" << emul->gtPsbWord(em_psb_bid).bxInEvent()
01135 << " BxNr:" << emul->gtPsbWord(em_psb_bid).bxNr()
01136 << " LocalBxNr:" << emul->gtPsbWord(em_psb_bid).localBxNr()
01137 << " EventNr:" << emul->gtPsbWord(em_psb_bid).eventNr()
01138 << std::endl;
01139
01140
01141
01142
01143
01144 m_dumpFile << "\n\tA_Data_CH7:0";
01145 m_dumpFile << "\n\tdata: ";
01146 for (int i=0; i<8; ++i)
01147 m_dumpFile << data->gtPsbWord(dt_psb_bid).aData(7-i) << " ";
01148 m_dumpFile << "\n\temul: ";
01149 for (int i=0; i<8; ++i)
01150 m_dumpFile << emul->gtPsbWord(em_psb_bid).aData(7-i) << " ";
01151 m_dumpFile << std::endl;
01152
01153 m_dumpFile << "\n\tA_Data_CH7:0";
01154 m_dumpFile << "\n\tdata: ";
01155 for (int i=0; i<8; ++i)
01156 m_dumpFile << data->gtPsbWord(dt_psb_bid).bData(7-i) << " ";
01157 m_dumpFile << "\n\temul: ";
01158 for (int i=0; i<8; ++i)
01159 m_dumpFile << emul->gtPsbWord(em_psb_bid).bData(7-i) << " ";
01160 m_dumpFile << "\n" << std::endl;
01161
01162
01164
01166 if(false) {
01167 m_dumpFile << "---debug: print full gt record---";
01168 m_dumpFile << "\n\tdata: ";
01169 data->print(m_dumpFile);
01170 m_dumpFile << "\n\temul: ";
01171 emul->print(m_dumpFile);
01172 m_dumpFile << "\n";
01173 m_dumpFile << "---debug: print full gt record Done.---\n\n";
01174 }
01175
01176 char ok[10];
01177 if(match) sprintf(ok,"successful");
01178 else sprintf(ok,"failed");
01179 m_dumpFile << " ...L1GlobalTriggerReadoutRecord data and emulator comparison: "
01180 << ok << std::endl;
01181
01182 return thematch;
01183 }
01184
01185
01186 bool
01187 L1Comparator::compareCollections(edm::Handle<L1GlobalTriggerEvmReadoutRecord> data,
01188 edm::Handle<L1GlobalTriggerEvmReadoutRecord> emul) {
01189
01190 m_dumpFile << "\n L1GlobalTriggerEvmReadoutRecord candidates...\n";
01191
01192 bool match = true;
01193 match &= (*data==*emul);
01194
01195 if(m_dumpMode==0 && match)
01196 return match;
01197
01198
01199 m_dumpFile << "\n\tGlobal decision: "
01200 << data->decision() << " (data) "
01201 << emul->decision() << " (emul) "
01202 << std::endl;
01203
01204
01205 m_dumpFile << "\n\tDecisionWord (bits: 0:63, 127:64)";
01206 int nbitword = 64;
01207 std::vector<bool> data_gtword = data->decisionWord();
01208 std::vector<bool> emul_gtword = emul->decisionWord();
01209 m_dumpFile << "\n\tdata: ";
01210 for(int i=0; i<nbitword; i++) {
01211 if (i%16==0) m_dumpFile << " ";
01212 m_dumpFile << (data_gtword.at(nbitword-1-i) ? '1' : '0');
01213 }
01214 m_dumpFile << "\n\t ";
01215 for(int i=0; i<nbitword; i++) {
01216 if (i%16==0) m_dumpFile << " ";
01217 m_dumpFile << (data_gtword.at(nbitword*2-1-i) ? '1' : '0');
01218 }
01219 m_dumpFile << "\n\temul: ";
01220 for(int i=0; i<nbitword; i++) {
01221 if (i%16==0) m_dumpFile << " ";
01222 m_dumpFile << (emul_gtword.at(nbitword-1-i) ? '1' : '0');
01223 }
01224 m_dumpFile << "\n\t ";
01225 for(int i=0; i<nbitword; i++) {
01226 if (i%16==0) m_dumpFile << " ";
01227 m_dumpFile << (emul_gtword.at(nbitword*2-1-i) ? '1' : '0');
01228 }
01229 m_dumpFile << std::endl;
01230
01231 m_dumpFile << "\n\tDecisionWordExtended (bits: 0:63)";
01232 std::vector<bool> data_decwext = data->gtFdlWord().gtDecisionWordExtended();
01233 std::vector<bool> emul_decwext = emul->gtFdlWord().gtDecisionWordExtended();
01234 m_dumpFile << "\n\tdata: ";
01235 for(int i=0; i<nbitword; i++) {
01236 if (i%16==0) m_dumpFile << " ";
01237 m_dumpFile << (data_decwext.at(nbitword-1-i) ? '1' : '0');
01238 }
01239 m_dumpFile << "\n\temul: ";
01240 for(int i=0; i<nbitword; i++) {
01241 if (i%16==0) m_dumpFile << " ";
01242 m_dumpFile << (emul_decwext.at(nbitword-1-i) ? '1' : '0');
01243 }
01244 m_dumpFile << std::endl;
01245
01246 m_dumpFile << "\n\tTechnical triggers (bits: 0:63)";
01247 std::vector<bool> data_fdlttw = data->gtFdlWord().gtTechnicalTriggerWord();
01248 std::vector<bool> emul_fdlttw = emul->gtFdlWord().gtTechnicalTriggerWord();
01249 assert((int)data_fdlttw.size()==nbitword);
01250 m_dumpFile << "\n\tdata: ";
01251 for(int i=0; i<nbitword; i++) {
01252 if (i%16==0) m_dumpFile << " ";
01253 m_dumpFile << (data_fdlttw.at(nbitword-1-i) ? '1' : '0');
01254 }
01255 m_dumpFile << "\n\temul: ";
01256 for(int i=0; i<nbitword; i++) {
01257 if (i%16==0) m_dumpFile << " ";
01258 m_dumpFile << (emul_fdlttw.at(nbitword-1-i) ? '1' : '0');
01259 }
01260 m_dumpFile << std::endl;
01261
01262 m_dumpFile << "\n\tL1GtFdlWord";
01263 m_dumpFile << "\n\tdata: "
01264 << " BoardId:" << data->gtFdlWord().boardId()
01265 << " BxInEvent:" << data->gtFdlWord().bxInEvent()
01266 << " BxNr:" << data->gtFdlWord().bxNr()
01267 << " EventNr:" << data->gtFdlWord().eventNr()
01268 << " NoAlgo:" << data->gtFdlWord().noAlgo()
01269 << " FinalOR:" << data->gtFdlWord().finalOR()
01270 << " LocalBxNr:" << data->gtFdlWord().localBxNr();
01271 m_dumpFile << "\n\temul: "
01272 << " BoardId:" << emul->gtFdlWord().boardId()
01273 << " BxInEvent:" << emul->gtFdlWord().bxInEvent()
01274 << " BxNr:" << emul->gtFdlWord().bxNr()
01275 << " EventNr:" << emul->gtFdlWord().eventNr()
01276 << " NoAlgo:" << emul->gtFdlWord().noAlgo()
01277 << " FinalOR:" << emul->gtFdlWord().finalOR()
01278 << " LocalBxNr:" << emul->gtFdlWord().localBxNr()
01279 << std::endl;
01280
01281 m_dumpFile << "\n\tL1GtfeWord";
01282 m_dumpFile << "\n\tdata: "
01283 << " BoardId:" << data->gtfeWord().boardId()
01284 << " RecordLength:" << data->gtfeWord().recordLength()
01285 << " BxNr:" << data->gtfeWord().bxNr()
01286 << " SetupVersion:" << data->gtfeWord().setupVersion()
01287 << " ActiveBoards:" << data->gtfeWord().activeBoards()
01288 << " TotalTriggerNr:" << data->gtfeWord().totalTriggerNr();
01289 m_dumpFile << "\n\temul: "
01290 << " BoardId:" << emul->gtfeWord().boardId()
01291 << " RecordLength:" << emul->gtfeWord().recordLength()
01292 << " BxNr:" << emul->gtfeWord().bxNr()
01293 << " SetupVersion:" << emul->gtfeWord().setupVersion()
01294 << " ActiveBoards:" << emul->gtfeWord().activeBoards()
01295 << " TotalTriggerNr:" << emul->gtfeWord().totalTriggerNr()
01296 << std::endl;
01297
01298
01299 m_dumpFile << "\n\ttcsWord";
01300 m_dumpFile << "\n\tdata:"
01301 << " DaqNr:" << data->tcsWord().daqNr()
01302 << " TriggerType:" << data->tcsWord().triggerType()
01303 << " Status:" << data->tcsWord().status()
01304 << " BxNr:" << data->tcsWord().bxNr()
01305 << " PartTrigNr:" << data->tcsWord().partTrigNr()
01306 << " EventNr:" << data->tcsWord().eventNr() << "\n\t"
01307 << " AssignedPartitions:" << data->tcsWord().assignedPartitions()
01308 << " PartRunNr:" << data->tcsWord().partTrigNr()
01309 << " OrbitNr:" << data->tcsWord().orbitNr();
01310 m_dumpFile << "\n\temul:"
01311 << " DaqNr:" << emul->tcsWord().daqNr()
01312 << " TriggerType:" << emul->tcsWord().triggerType()
01313 << " Status:" << emul->tcsWord().status()
01314 << " BxNr:" << emul->tcsWord().bxNr()
01315 << " PartTrigNr:" << emul->tcsWord().partTrigNr()
01316 << " EventNr:" << emul->tcsWord().eventNr() << "\n\t"
01317 << " AssignedPartitions:" << emul->tcsWord().assignedPartitions()
01318 << " PartRunNr:" << emul->tcsWord().partTrigNr()
01319 << " OrbitNr:" << emul->tcsWord().orbitNr()
01320 << "\n" << std::endl;
01321
01322 char ok[10];
01323 if(match) sprintf(ok,"successful");
01324 else sprintf(ok,"failed");
01325 m_dumpFile << " ...L1GlobalTriggerEvmReadoutRecord data and emulator comparison: "
01326 << ok << std::endl;
01327
01328 return match;
01329 }
01330
01331
01332 bool
01333 L1Comparator::compareCollections(edm::Handle<L1GlobalTriggerObjectMapRecord> data,
01334 edm::Handle<L1GlobalTriggerObjectMapRecord> emul) {
01335
01336 m_dumpFile << "\n L1GlobalTriggerObjectMapRecord candidates...\n";
01337
01338 bool match = true;
01339
01340
01341 const std::vector<L1GlobalTriggerObjectMap>& data_ovec = data->gtObjectMap();
01342 const std::vector<L1GlobalTriggerObjectMap>& emul_ovec = emul->gtObjectMap();
01343
01344 for(std::vector<L1GtLogicParser::OperandToken>::size_type idx=0; idx<data_ovec.size(); idx++) {
01345 match &= ( data_ovec.at(idx).algoName() == emul_ovec.at(idx).algoName() );
01346 match &= ( data_ovec.at(idx).algoBitNumber() == emul_ovec.at(idx).algoBitNumber() );
01347 match &= ( data_ovec.at(idx).algoGtlResult() == emul_ovec.at(idx).algoGtlResult() );
01348 match &= ( data_ovec.at(idx).combinationVector() == emul_ovec.at(idx).combinationVector() );
01349 match &= ( data_ovec.at(idx).operandTokenVector().size()==emul_ovec.at(idx).operandTokenVector().size());
01350 if(match) {
01351 for(std::vector<L1GtLogicParser::OperandToken>::size_type i=0; i<data_ovec.at(idx).operandTokenVector().size(); i++) {
01352 match &= ( data_ovec.at(idx).operandTokenVector().at(i).tokenName ==
01353 emul_ovec.at(idx).operandTokenVector().at(i).tokenName );
01354 match &= ( data_ovec.at(idx).operandTokenVector().at(i).tokenNumber ==
01355 emul_ovec.at(idx).operandTokenVector().at(i).tokenNumber );
01356 match &= ( data_ovec.at(idx).operandTokenVector().at(i).tokenResult ==
01357 emul_ovec.at(idx).operandTokenVector().at(i).tokenResult );
01358 }
01359 }
01360 }
01361
01362 if(m_dumpMode==0 && match)
01363 return match;
01364
01365
01366 int idx = 0;
01367 m_dumpFile << "\n\tL1GlobalTriggerObjectMap";
01368 m_dumpFile << "\n\tdata: "
01369 << " algorithmName:" << data_ovec.at(idx).algoName()
01370 << " Bitnumber:" << data_ovec.at(idx).algoBitNumber()
01371 << " GTLresult:" << data_ovec.at(idx).algoGtlResult()
01372 << " combinationVectorSize:" << data_ovec.at(idx).combinationVector().size()
01373 << " operandTokenVector:" << data_ovec.at(idx).operandTokenVector().size();
01374 m_dumpFile << "\n\temul: "
01375 << " algorithmName:" << emul_ovec.at(idx).algoName()
01376 << " Bitnumber:" << emul_ovec.at(idx).algoBitNumber()
01377 << " GTLresult:" << emul_ovec.at(idx).algoGtlResult()
01378 << " combinationVectorSize:" << emul_ovec.at(idx).combinationVector().size()
01379 << " operandTokenVector:" << emul_ovec.at(idx).operandTokenVector().size()
01380 << "\n" << std::endl;
01381
01382 char ok[10];
01383 if(match) sprintf(ok,"successful");
01384 else sprintf(ok,"failed");
01385 m_dumpFile << " ...L1GlobalTriggerObjectMapRecord data and emulator comparison: "
01386 << ok << std::endl;
01387
01388 return match;
01389 }
01390
01391
01392 bool
01393 L1Comparator::compareFedRawCollections(edm::Handle<FEDRawDataCollection> data,
01394 edm::Handle<FEDRawDataCollection> emul, int fedId) {
01395 if(verbose())
01396 std::cout << "[L1Comparator] fedraw start processing :" << std::endl << std::flush;
01397 if(dumpEvent_) {
01398 m_dumpFile << "\nEvent: " << nevt_ << std::endl;
01399 dumpEvent_=false;
01400 }
01401 m_dumpFile << "\n FEDRawData candidates...\n";
01402 const FEDRawData& raw_fed_data = data->FEDData(fedId);
01403 const FEDRawData& raw_fed_emul = emul->FEDData(fedId);
01404 bool raw_match=true;
01405 for(int i=0; i!=(int)raw_fed_data.size();i++) {
01406 raw_match &= ( raw_fed_data.data()[i] == raw_fed_emul.data()[i] );
01407 }
01408 unsigned long dd = 0, de = 0;
01409 for(int i=0; i<(int)raw_fed_data.size()/4;i++) {
01410 dd=0; de=0;
01411 for(int j=0; j<4; j++)
01412 dd += ((raw_fed_data.data()[i*4+j]&0xff)<<(8*j));
01413 for(int j=0; j<4; j++)
01414 de += ((raw_fed_emul.data()[i*4+j]&0xff)<<(8*j));
01415 if(m_dumpMode==-1 || (m_dumpMode==1 && dd!=de) ) {
01416 m_dumpFile << "\n\tdata: " << std::setw(8) << std::setfill('0') << std::hex << dd;
01417 m_dumpFile << "\n\temul: " << std::setw(8) << std::setfill('0') << std::hex << de;
01418 }
01419 m_dumpFile << std::endl;
01420 }
01421 char ok[10];
01422 if(raw_match) sprintf(ok,"successful");
01423 else sprintf(ok,"failed");
01424 m_dumpFile << " ...FEDRawData data and emulator comparison: "
01425 << ok << std::endl;
01426 return raw_match;
01427 }
01428
01429 template <class myCol>
01430 bool L1Comparator::CompareCollections( edm::Handle<myCol> data, edm::Handle<myCol> emul) {
01431 bool match = true;
01432 typedef typename myCol::size_type col_sz;
01433 typedef typename myCol::iterator col_it;
01434 col_sz ndata = data->size();
01435 col_sz nemul = emul->size();
01436 if(ndata!=nemul) {
01437 match &= false;
01438 m_dumpFile << " #cand mismatch!"
01439 << "\tdata: " << ndata
01440 << "\temul: " << nemul
01441 << std::endl;
01442 }
01443 col_it itd = data -> begin();
01444 col_it itm = emul -> begin();
01445 for (col_sz i=0; i<ndata; i++) {
01446 match &= dumpCandidate(*itd++,*itm++, m_dumpFile);
01447 }
01448 return match;
01449 }
01450
01451 template <class T>
01452 bool L1Comparator::dumpCandidate( const T& dt, const T& em, std::ostream& s) {
01453 if(dt==em)
01454 return true;
01455 s<<dt<<std::endl;
01456 s<<em<<std::endl<<std::endl;
01457 return false;
01458 }