00001 #include "L1Trigger/HardwareValidation/interface/L1Comparator.h"
00002 #include "FWCore/Framework/interface/ESHandle.h"
00003
00004 using namespace dedefs;
00005
00006 L1Comparator::L1Comparator(const edm::ParameterSet& iConfig) {
00007
00008 verbose_ = iConfig.getUntrackedParameter<int>("VerboseFlag",0);
00009
00010 if(verbose())
00011 std::cout << "\nL1COMPARATOR constructor...\n" << std::flush;
00012
00013 std::vector<unsigned int> dosys(0,DEnsys);
00014 dosys =
00015 iConfig.getUntrackedParameter<std::vector<unsigned int> >("COMPARE_COLLS", dosys);
00016
00017 if((int)dosys.size()!=DEnsys)
00018 edm::LogError("L1Comparator")
00019 << "wrong selection of systems to be compared\n"
00020 << "\t the size of the mask COMPARE_COLLS (" << dosys.size()
00021 << ") is not " << DEnsys << std::endl;
00022 assert((int)dosys.size()==DEnsys);
00023
00024 for(int isys=0; isys<DEnsys; isys++)
00025 if( dosys[isys]!=0 && dosys[isys]!=1 )
00026 throw cms::Exception("Invalid configuration")
00027 << "L1Comparator: comparison flag for system " << isys
00028 << " is non boolean: " << dosys[isys] << ". Exiting.\n";
00029
00030 for(int i=0; i<DEnsys; i++)
00031 m_doSys[i] = dosys[i];
00032
00033 if(verbose()) {
00034 std::cout << "[L1Comparator] do sys? ";
00035 for(int i=0; i<DEnsys; i++)
00036 std::cout << m_doSys[i] << " ";
00037 std::cout << std::endl;
00038
00039 std::cout << "[L1Comparator] list of systems to process: ";
00040 for(int i=0; i<DEnsys; i++)
00041 if(m_doSys[i])
00042 std::cout << SystLabel[i] << " ";
00043 std::cout << std::endl;
00044 }
00045
00047 assert(ETP==0); assert(HTP==1); assert(RCT== 2); assert(GCT== 3);
00048 assert(DTP==4); assert(DTF==5); assert(CTP== 6); assert(CTF== 7);
00049 assert(RPC==8); assert(LTC==9); assert(GMT==10); assert(GLT==11);
00050
00051 if(verbose())
00052 std::cout << "[L1Comparator] debug print collection labels\n";
00053
00054 m_DEsource[RCT][0] = iConfig.getParameter<edm::InputTag>("RCTsourceData");
00055 m_DEsource[RCT][1] = iConfig.getParameter<edm::InputTag>("RCTsourceEmul");
00056
00057 m_DEsource[GCT][0] = iConfig.getParameter<edm::InputTag>("GCTsourceData");
00058 m_DEsource[GCT][1] = iConfig.getParameter<edm::InputTag>("GCTsourceEmul");
00059
00060 m_DEsource[DTP][0] = iConfig.getParameter<edm::InputTag>("DTPsourceData");
00061 m_DEsource[DTP][1] = iConfig.getParameter<edm::InputTag>("DTPsourceEmul");
00062
00063 m_DEsource[DTF][0] = iConfig.getParameter<edm::InputTag>("DTFsourceData");
00064 m_DEsource[DTF][1] = iConfig.getParameter<edm::InputTag>("DTFsourceEmul");
00065
00066 m_DEsource[RPC][0] = iConfig.getParameter<edm::InputTag>("RPCsourceData");
00067 m_DEsource[RPC][1] = iConfig.getParameter<edm::InputTag>("RPCsourceEmul");
00068
00069 m_DEsource[GMT][0] = iConfig.getParameter<edm::InputTag>("GMTsourceData");
00070 m_DEsource[GMT][1] = iConfig.getParameter<edm::InputTag>("GMTsourceEmul");
00071
00072 for(int sys=0; sys<DEnsys; sys++) {
00073 std::string data_label = SystLabel[sys] + "sourceData";
00074 std::string emul_label = SystLabel[sys] + "sourceEmul";
00075
00076
00077
00078
00079
00080
00081
00082
00083 if(m_doSys[sys] && verbose()) {
00084 std::cout << " sys:" << sys << " label:" << SystLabel[sys]
00085 << "\n\tdt:" << data_label << " : " <<m_DEsource[sys][0]
00086 << "\n\tem:" << emul_label << " : " <<m_DEsource[sys][1]
00087 << std::endl;
00088 if(sys==CTF) {
00089 std::cout << "\tdt:" << data_label << " : " <<m_DEsource[sys][2]
00090 << "\n\tem:" << emul_label << " : " <<m_DEsource[sys][3]
00091 << std::endl;
00092 }
00093 }
00094 }
00095
00096
00098 m_dumpMode = iConfig.getUntrackedParameter<int>("DumpMode",0);
00099 m_dumpFileName = iConfig.getUntrackedParameter<std::string>("DumpFile","");
00100 if(m_dumpMode) {
00101 m_dumpFile.open(m_dumpFileName.c_str(), std::ios::out);
00102 if(!m_dumpFile.good())
00103 edm::LogInfo("L1ComparatorDumpFileOpenError")
00104 << " L1Comparator::L1Comparator() : "
00105 << " couldn't open dump file " << m_dumpFileName.c_str() << std::endl;
00106 }
00107
00108 m_match = true;
00109 dumpEvent_ = true;
00110 nevt_=-1;
00111
00112 for(int i=0; i<DEnsys; i++) {
00113 for(int j=0; j<2; j++)
00114 DEncand[i][j] = 0;
00115 DEmatchEvt[i] = true;
00116 }
00117
00118 m_dedigis.clear();
00120 produces<L1DataEmulRecord>().setBranchAlias("L1DataEmulRecord");
00121
00122 if(verbose())
00123 std::cout << "\nL1Comparator constructor...done.\n" << std::flush;
00124 }
00125
00126
00127 L1Comparator::~L1Comparator(){}
00128
00129 void L1Comparator::beginJob(void) {}
00130
00131 void L1Comparator::beginRun(edm::Run const& iRun, const edm::EventSetup& iSetup) {
00132
00133 if(verbose())
00134 std::cout << "\nL1COMPARATOR beginRun...\n" << std::flush;
00135
00136
00137
00138 try
00139 {
00140 edm::ESHandle< L1TriggerKey > pKey ;
00141 iSetup.get< L1TriggerKeyRcd >().get( pKey ) ;
00142
00143 m_doSys[RCT] &= (!(pKey->subsystemKey( L1TriggerKey::kRCT) .empty()));
00144 m_doSys[GCT] &= (!(pKey->subsystemKey( L1TriggerKey::kGCT) .empty()));
00145 m_doSys[DTF] &= (!(pKey->subsystemKey( L1TriggerKey::kDTTF) .empty()));
00146 m_doSys[CTF] &= (!(pKey->subsystemKey( L1TriggerKey::kCSCTF).empty()));
00147 m_doSys[RPC] &= (!(pKey->subsystemKey( L1TriggerKey::kRPC) .empty()));
00148 m_doSys[GMT] &= (!(pKey->subsystemKey( L1TriggerKey::kGMT) .empty()));
00149 m_doSys[GLT] &= (!(pKey->subsystemKey( L1TriggerKey::kGT) .empty()));
00150
00151 if(verbose()) {
00152 if ( pKey->subsystemKey( L1TriggerKey::kRCT ).empty() )
00153 std::cout << "RCT key is empty. Sub-systems is disabled ("<<m_doSys[RCT]<<")\n";
00154 if ( pKey->subsystemKey( L1TriggerKey::kGCT ).empty() )
00155 std::cout << "GCT key is empty. Sub-systems is disabled ("<<m_doSys[GCT]<<")\n";
00156 if ( pKey->subsystemKey( L1TriggerKey::kDTTF ).empty() )
00157 std::cout << "DTTF key is empty. Sub-systems is disabled ("<<m_doSys[DTF]<<")\n";
00158 if ( pKey->subsystemKey( L1TriggerKey::kCSCTF).empty() )
00159 std::cout << "CSCTF key is empty. Sub-systems is disabled ("<<m_doSys[CTF]<<")\n";
00160 if ( pKey->subsystemKey( L1TriggerKey::kRPC ).empty() )
00161 std::cout << "RPC key is empty. Sub-systems is disabled ("<<m_doSys[RPC]<<")\n";
00162 if ( pKey->subsystemKey( L1TriggerKey::kGMT ).empty() )
00163 std::cout << "GMT key is empty. Sub-systems is disabled ("<<m_doSys[GMT]<<")\n";
00164 if ( pKey->subsystemKey( L1TriggerKey::kGT ).empty() )
00165 std::cout << "GT key is empty. Sub-systems is disabled ("<<m_doSys[GLT]<<")\n";
00166 std::cout << "TSC key = " << pKey->tscKey() << std::endl;
00167 }
00168
00169
00170
00171 }
00172 catch( cms::Exception& ex )
00173 {
00174 edm::LogWarning("L1Comparator")
00175 << "No L1TriggerKey found."
00176 << std::endl;
00177 }
00178
00179 if(verbose())
00180 std::cout << "L1COMPARATOR beginRun... done\n" << std::flush;
00181
00182 }
00183
00184 void L1Comparator::endJob() {
00185 if(m_dumpMode)
00186 m_dumpFile << "\n\n-------\n"
00187 << "Global data|emulator agreement: "
00188 << m_match << std::endl;
00189 m_dumpFile.close();
00190 }
00191
00192 void
00193 L1Comparator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
00194
00195 nevt_++;
00196 evtNum_ = iEvent.id().event();
00197 runNum_ = iEvent.id().run();
00198
00199 if(verbose())
00200 std::cout << "\nL1COMPARATOR entry:" << nevt_ << " | evt:" << evtNum_
00201 << " | run:" << runNum_ << "\n" << std::flush;
00202
00203
00204 dumpEvent_ = true;
00205
00206
00207 for(int i=0; i<DEnsys; i++) {
00208 for(int j=0; j<2; j++)
00209 DEncand[i][j] = 0;
00210 DEmatchEvt[i] = true;
00211 }
00212 m_dedigis.clear();
00213
00214
00216
00217
00218 edm::Handle<L1CaloEmCollection> rct_em_data;
00219 edm::Handle<L1CaloEmCollection> rct_em_emul;
00220 edm::Handle<L1CaloRegionCollection> rct_rgn_data;
00221 edm::Handle<L1CaloRegionCollection> rct_rgn_emul;
00222 if(m_doSys[RCT]) {
00223 iEvent.getByLabel(m_DEsource[RCT][0], rct_em_data);
00224 iEvent.getByLabel(m_DEsource[RCT][1], rct_em_emul);
00225 iEvent.getByLabel(m_DEsource[RCT][0], rct_rgn_data);
00226 iEvent.getByLabel(m_DEsource[RCT][1], rct_rgn_emul);
00227 }
00228
00229
00230 edm::Handle<L1GctEmCandCollection> gct_isolaem_data;
00231 edm::Handle<L1GctEmCandCollection> gct_isolaem_emul;
00232 edm::Handle<L1GctEmCandCollection> gct_noisoem_data;
00233 edm::Handle<L1GctEmCandCollection> gct_noisoem_emul;
00234 edm::Handle<L1GctJetCandCollection> gct_cenjets_data;
00235 edm::Handle<L1GctJetCandCollection> gct_cenjets_emul;
00236 edm::Handle<L1GctJetCandCollection> gct_forjets_data;
00237 edm::Handle<L1GctJetCandCollection> gct_forjets_emul;
00238 edm::Handle<L1GctJetCandCollection> gct_taujets_data;
00239 edm::Handle<L1GctJetCandCollection> gct_taujets_emul;
00240
00241 edm::Handle<L1GctEtHadCollection> gct_ht_data;
00242 edm::Handle<L1GctEtHadCollection> gct_ht_emul;
00243 edm::Handle<L1GctEtMissCollection> gct_etmiss_data;
00244 edm::Handle<L1GctEtMissCollection> gct_etmiss_emul;
00245 edm::Handle<L1GctEtTotalCollection> gct_ettota_data;
00246 edm::Handle<L1GctEtTotalCollection> gct_ettota_emul;
00247 edm::Handle<L1GctHtMissCollection> gct_htmiss_data;
00248 edm::Handle<L1GctHtMissCollection> gct_htmiss_emul;
00249 edm::Handle<L1GctHFRingEtSumsCollection>gct_hfring_data;
00250 edm::Handle<L1GctHFRingEtSumsCollection>gct_hfring_emul;
00251 edm::Handle<L1GctHFBitCountsCollection> gct_hfbcnt_data;
00252 edm::Handle<L1GctHFBitCountsCollection> gct_hfbcnt_emul;
00253 edm::Handle<L1GctJetCountsCollection> gct_jetcnt_data;
00254 edm::Handle<L1GctJetCountsCollection> gct_jetcnt_emul;
00255
00256 if(m_doSys[GCT]) {
00257 iEvent.getByLabel(m_DEsource[GCT][0].label(),"isoEm", gct_isolaem_data);
00258 iEvent.getByLabel(m_DEsource[GCT][1].label(),"isoEm", gct_isolaem_emul);
00259 iEvent.getByLabel(m_DEsource[GCT][0].label(),"nonIsoEm",gct_noisoem_data);
00260 iEvent.getByLabel(m_DEsource[GCT][1].label(),"nonIsoEm",gct_noisoem_emul);
00261 iEvent.getByLabel(m_DEsource[GCT][0].label(),"cenJets", gct_cenjets_data);
00262 iEvent.getByLabel(m_DEsource[GCT][1].label(),"cenJets", gct_cenjets_emul);
00263 iEvent.getByLabel(m_DEsource[GCT][0].label(),"forJets", gct_forjets_data);
00264 iEvent.getByLabel(m_DEsource[GCT][1].label(),"forJets", gct_forjets_emul);
00265 iEvent.getByLabel(m_DEsource[GCT][0].label(),"tauJets", gct_taujets_data);
00266 iEvent.getByLabel(m_DEsource[GCT][1].label(),"tauJets", gct_taujets_emul);
00267
00268 iEvent.getByLabel(m_DEsource[GCT][0],gct_ht_data);
00269 iEvent.getByLabel(m_DEsource[GCT][1],gct_ht_emul);
00270 iEvent.getByLabel(m_DEsource[GCT][0],gct_etmiss_data);
00271 iEvent.getByLabel(m_DEsource[GCT][1],gct_etmiss_emul);
00272 iEvent.getByLabel(m_DEsource[GCT][0],gct_ettota_data);
00273 iEvent.getByLabel(m_DEsource[GCT][1],gct_ettota_emul);
00274 iEvent.getByLabel(m_DEsource[GCT][0],gct_htmiss_data);
00275 iEvent.getByLabel(m_DEsource[GCT][1],gct_htmiss_emul);
00276 iEvent.getByLabel(m_DEsource[GCT][0],gct_hfring_data);
00277 iEvent.getByLabel(m_DEsource[GCT][1],gct_hfring_emul);
00278 iEvent.getByLabel(m_DEsource[GCT][0],gct_hfbcnt_data);
00279 iEvent.getByLabel(m_DEsource[GCT][1],gct_hfbcnt_emul);
00280 iEvent.getByLabel(m_DEsource[GCT][0],gct_jetcnt_data);
00281 iEvent.getByLabel(m_DEsource[GCT][1],gct_jetcnt_emul);
00282 }
00283
00284
00285 edm::Handle<L1MuDTChambPhContainer> dtp_ph_data_;
00286 edm::Handle<L1MuDTChambPhContainer> dtp_ph_emul_;
00287 edm::Handle<L1MuDTChambThContainer> dtp_th_data_;
00288 edm::Handle<L1MuDTChambThContainer> dtp_th_emul_;
00289 if(m_doSys[DTP]) {
00290 iEvent.getByLabel(m_DEsource[DTP][0],dtp_ph_data_);
00291 iEvent.getByLabel(m_DEsource[DTP][1],dtp_ph_emul_);
00292 iEvent.getByLabel(m_DEsource[DTP][0],dtp_th_data_);
00293 iEvent.getByLabel(m_DEsource[DTP][1],dtp_th_emul_);
00294 }
00295 L1MuDTChambPhDigiCollection const* dtp_ph_data = 0;
00296 L1MuDTChambPhDigiCollection const* dtp_ph_emul = 0;
00297 L1MuDTChambThDigiCollection const* dtp_th_data = 0;
00298 L1MuDTChambThDigiCollection const* dtp_th_emul = 0;
00299
00300 if(dtp_ph_data_.isValid()) dtp_ph_data = dtp_ph_data_->getContainer();
00301 if(dtp_ph_emul_.isValid()) dtp_ph_emul = dtp_ph_emul_->getContainer();
00302 if(dtp_th_data_.isValid()) dtp_th_data = dtp_th_data_->getContainer();
00303 if(dtp_th_emul_.isValid()) dtp_th_emul = dtp_th_emul_->getContainer();
00304
00305
00306 edm::Handle<L1MuDTTrackContainer> dtf_trk_data_;
00307 edm::Handle<L1MuDTTrackContainer> dtf_trk_emul_;
00308 L1MuRegionalCandCollection const* dtf_trk_data = 0;
00309 L1MuRegionalCandCollection const* dtf_trk_emul = 0;
00310 if(m_doSys[DTF]) {
00311 iEvent.getByLabel(m_DEsource[DTF][0].label(),"DATA",dtf_trk_data_);
00312 iEvent.getByLabel(m_DEsource[DTF][1].label(),"DTTF",dtf_trk_emul_);
00313 }
00314
00315 typedef std::vector<L1MuDTTrackCand> L1MuDTTrackCandCollection;
00316 L1MuRegionalCandCollection dtf_trk_data_v, dtf_trk_emul_v;
00317 dtf_trk_data_v.clear(); dtf_trk_emul_v.clear();
00318 if(dtf_trk_data_.isValid()) {
00319 L1MuDTTrackCandCollection *dttc = dtf_trk_data_->getContainer();
00320 for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
00321 it!=dttc->end(); it++)
00322 dtf_trk_data_v.push_back(L1MuRegionalCand(*it));
00323 }
00324 if(dtf_trk_emul_.isValid()) {
00325 L1MuDTTrackCandCollection *dttc = dtf_trk_emul_->getContainer();
00326 for(L1MuDTTrackCandCollection::const_iterator it=dttc->begin();
00327 it!=dttc->end(); it++)
00328 dtf_trk_emul_v.push_back(L1MuRegionalCand(*it));
00329 }
00330 dtf_trk_data =&dtf_trk_data_v;
00331 dtf_trk_emul =&dtf_trk_emul_v;
00332
00333
00334
00335 edm::Handle<L1MuRegionalCandCollection> rpc_cen_data;
00336 edm::Handle<L1MuRegionalCandCollection> rpc_cen_emul;
00337 edm::Handle<L1MuRegionalCandCollection> rpc_for_data;
00338 edm::Handle<L1MuRegionalCandCollection> rpc_for_emul;
00339 if(m_doSys[RPC]) {
00340 iEvent.getByLabel(m_DEsource[RPC][0].label(),"RPCb",rpc_cen_data);
00341 iEvent.getByLabel(m_DEsource[RPC][1].label(),"RPCb",rpc_cen_emul);
00342 iEvent.getByLabel(m_DEsource[RPC][0].label(),"RPCf",rpc_for_data);
00343 iEvent.getByLabel(m_DEsource[RPC][1].label(),"RPCf",rpc_for_emul);
00344 }
00345
00346
00347 edm::Handle<LTCDigiCollection> ltc_data;
00348 edm::Handle<LTCDigiCollection> ltc_emul;
00349 if(m_doSys[LTC]) {
00350 iEvent.getByLabel(m_DEsource[LTC][0],ltc_data);
00351 iEvent.getByLabel(m_DEsource[LTC][1],ltc_emul);
00352 }
00353
00354
00355 edm::Handle<L1MuGMTCandCollection> gmt_data;
00356 edm::Handle<L1MuGMTCandCollection> gmt_emul;
00357 edm::Handle<L1MuGMTReadoutCollection> gmt_rdt_data_;
00358 edm::Handle<L1MuGMTReadoutCollection> gmt_rdt_emul_;
00359 L1MuRegionalCandCollection const* gmt_rdt_data(new L1MuRegionalCandCollection);
00360 L1MuRegionalCandCollection const* gmt_rdt_emul(new L1MuRegionalCandCollection);
00361
00362 L1MuGMTCandCollection const *gmt_can_data(new L1MuGMTCandCollection);
00363 L1MuGMTCandCollection const *gmt_can_emul(new L1MuGMTCandCollection);
00364 if(m_doSys[GMT]) {
00365 iEvent.getByLabel(m_DEsource[GMT][0], gmt_data);
00366 iEvent.getByLabel(m_DEsource[GMT][1], gmt_emul);
00367 iEvent.getByLabel(m_DEsource[GMT][0], gmt_rdt_data_);
00368 iEvent.getByLabel(m_DEsource[GMT][1], gmt_rdt_emul_);
00369 }
00370 L1MuGMTCandCollection gmt_can_data_vec, gmt_can_emul_vec;
00371 L1MuRegionalCandCollection gmt_rdt_data_vec, gmt_rdt_emul_vec;
00372 gmt_can_data_vec.clear(); gmt_can_emul_vec.clear();
00373 gmt_rdt_data_vec.clear(); gmt_rdt_emul_vec.clear();
00374 if( gmt_rdt_data_.isValid() && gmt_rdt_emul_.isValid() ) {
00375 typedef std::vector<L1MuGMTReadoutRecord>::const_iterator GmtRrIt;
00376
00377 std::vector<L1MuGMTReadoutRecord> gmt_rdt_data_bx = gmt_rdt_data_->getRecords();
00378 for(GmtRrIt igmtrr=gmt_rdt_data_bx.begin(); igmtrr!=gmt_rdt_data_bx.end(); igmtrr++) {
00379
00380 typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
00381 std::vector<L1MuGMTExtendedCand> gmc;
00382 gmc = igmtrr->getGMTCands();
00383 for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
00384 L1MuGMTCand cand(iter1->getDataWord(),iter1->bx());
00385 cand.setPhiValue(iter1->phiValue());
00386 cand.setEtaValue(iter1->etaValue());
00387 cand.setPtValue (iter1->ptValue ());
00388 gmt_can_data_vec.push_back(cand);
00389 }
00390
00391 typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
00392 L1MuRegionalCandCollection rmc;
00393 rmc.clear();
00394 rmc = igmtrr->getDTBXCands();
00395 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00396 rmc.clear();
00397 rmc = igmtrr->getCSCCands();
00398 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00399 rmc.clear();
00400 rmc = igmtrr->getBrlRPCCands();
00401 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00402 rmc.clear();
00403 rmc = igmtrr->getFwdRPCCands();
00404 gmt_rdt_data_vec.insert(gmt_rdt_data_vec.end(),rmc.begin(),rmc.end());
00405 }
00406
00407 std::vector<L1MuGMTReadoutRecord> gmt_rdt_emul_bx = gmt_rdt_emul_->getRecords();
00408 for(GmtRrIt igmtrr=gmt_rdt_emul_bx.begin(); igmtrr!=gmt_rdt_emul_bx.end(); igmtrr++) {
00409
00410 typedef std::vector<L1MuGMTExtendedCand>::const_iterator GmtECIt;
00411 std::vector<L1MuGMTExtendedCand> gmc;
00412 gmc = igmtrr->getGMTCands();
00413 for(GmtECIt iter1=gmc.begin(); iter1!=gmc.end(); iter1++) {
00414 gmt_can_emul_vec.push_back(L1MuGMTCand(iter1->getDataWord(),iter1->bx()));
00415 }
00416
00417 typedef L1MuRegionalCandCollection::const_iterator GmtRCIt;
00418 L1MuRegionalCandCollection rmc;
00419 rmc.clear();
00420 rmc = igmtrr->getDTBXCands();
00421 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00422 rmc.clear();
00423 rmc = igmtrr->getCSCCands();
00424 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00425 rmc.clear();
00426 rmc = igmtrr->getBrlRPCCands();
00427 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00428 rmc.clear();
00429 rmc = igmtrr->getFwdRPCCands();
00430 gmt_rdt_emul_vec.insert(gmt_rdt_emul_vec.end(),rmc.begin(),rmc.end());
00431 }
00432 }
00433 gmt_rdt_data = &gmt_rdt_data_vec;
00434 gmt_rdt_emul = &gmt_rdt_emul_vec;
00435 gmt_can_data = &gmt_can_data_vec;
00436 gmt_can_emul = &gmt_can_emul_vec;
00437
00439
00440
00441 bool isValidDE[DEnsys][2];
00442 for(int i=0; i<DEnsys; i++) for(int j=0; j<2; j++) isValidDE[i][j]=false;
00443
00444 isValidDE[RCT][0] = rct_em_data .isValid(); isValidDE[RCT][1] = rct_em_emul .isValid();
00445 isValidDE[RCT][0]&= rct_rgn_data .isValid(); isValidDE[RCT][1] = rct_rgn_emul .isValid();
00446
00447 isValidDE[GCT][0] = gct_isolaem_data .isValid(); isValidDE[GCT][1] =gct_isolaem_emul .isValid();
00448 isValidDE[GCT][0]&= gct_noisoem_data .isValid(); isValidDE[GCT][1]&=gct_noisoem_emul .isValid();
00449 isValidDE[GCT][0]&= gct_cenjets_data .isValid(); isValidDE[GCT][1]&=gct_cenjets_emul .isValid();
00450 isValidDE[GCT][0]&= gct_forjets_data .isValid(); isValidDE[GCT][1]&=gct_forjets_emul .isValid();
00451 isValidDE[GCT][0]&= gct_taujets_data .isValid(); isValidDE[GCT][1]&=gct_taujets_emul .isValid();
00452 isValidDE[GCT][0]&= gct_etmiss_data .isValid(); isValidDE[GCT][1]&= gct_etmiss_emul .isValid();
00453 isValidDE[GCT][0]&= gct_ettota_data .isValid(); isValidDE[GCT][1]&= gct_ettota_emul .isValid();
00454 isValidDE[GCT][0]&= gct_htmiss_data .isValid(); isValidDE[GCT][1]&= gct_htmiss_emul .isValid();
00455 isValidDE[GCT][0]&= gct_hfring_data .isValid(); isValidDE[GCT][1]&= gct_hfring_emul .isValid();
00456 isValidDE[GCT][0]&= gct_hfbcnt_data .isValid(); isValidDE[GCT][1]&= gct_hfbcnt_emul .isValid();
00457
00458
00459 isValidDE[DTP][0] = dtp_ph_data_.isValid(); isValidDE[DTP][1] = dtp_ph_emul_.isValid();
00460 isValidDE[DTP][0]&= dtp_th_data_.isValid(); isValidDE[DTP][1]&= dtp_th_emul_.isValid();
00461
00462 isValidDE[DTF][0] = dtf_trk_data_.isValid(); isValidDE[DTF][1] = dtf_trk_emul_.isValid();
00463
00464 isValidDE[RPC][0] = rpc_cen_data .isValid(); isValidDE[RPC][1] = rpc_cen_emul .isValid();
00465 isValidDE[RPC][0]&= rpc_for_data .isValid(); isValidDE[RPC][1]&= rpc_for_emul .isValid();
00466
00467 isValidDE[LTC][0] = ltc_data .isValid(); isValidDE[LTC][1] = ltc_emul .isValid();
00468
00469 isValidDE[GMT][0] = gmt_data .isValid(); isValidDE[GMT][1] = gmt_emul .isValid();
00470
00471
00472
00473 bool isValid[DEnsys];
00474 for(int i=0; i<DEnsys; i++) {
00475 isValid[i]=true;
00476 for(int j=0; j<2; j++) {
00477 isValid[i] &= isValidDE[i][j];
00478 }
00479 }
00480
00481 if(verbose()) {
00482 std::cout << "L1Comparator sys isValid? (evt:" << nevt_ << ") ";
00483 std::cout << "\n\t&: ";
00484 for(int i=0; i<DEnsys; i++)
00485 std::cout << isValid[i] << " ";
00486 std::cout << "\n\td: ";
00487 for(int i=0; i<DEnsys; i++)
00488 std::cout << isValidDE[i][0] << " ";
00489 std::cout << "\n\te: ";
00490 for(int i=0; i<DEnsys; i++)
00491 std::cout << isValidDE[i][1] << " ";
00492 std::cout << std::endl;
00493 }
00494
00495
00496
00497
00498 if(verbose())
00499 std::cout << "L1Comparator start processing the collections.\n" << std::flush;
00500
00502 if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloEmCollection> ( rct_em_data, rct_em_emul, RCT,RCTem);
00503 if(m_doSys[RCT]&&isValid[RCT]) process<L1CaloRegionCollection> ( rct_rgn_data, rct_rgn_emul, RCT,RCTrgn);
00504
00505 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_isolaem_data, gct_isolaem_emul, GCT,GCTisolaem);
00506 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEmCandCollection> (gct_noisoem_data, gct_noisoem_emul, GCT,GCTnoisoem);
00507 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_cenjets_data, gct_cenjets_emul, GCT,GCTcenjets);
00508 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_forjets_data, gct_forjets_emul, GCT,GCTforjets);
00509 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctJetCandCollection> (gct_taujets_data, gct_taujets_emul, GCT,GCTtaujets);
00510 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtHadCollection> ( gct_ht_data, gct_ht_emul, GCT,GCTethad);
00511 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtMissCollection> ( gct_etmiss_data, gct_etmiss_emul, GCT,GCTetmiss);
00512 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctEtTotalCollection> ( gct_ettota_data , gct_ettota_emul, GCT,GCTettot);
00513 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHtMissCollection> ( gct_htmiss_data, gct_htmiss_emul, GCT,GCThtmiss);
00514 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFRingEtSumsCollection> ( gct_hfring_data, gct_hfring_emul, GCT,GCThfring);
00515 if(m_doSys[GCT]&&isValid[GCT]) process<L1GctHFBitCountsCollection> ( gct_hfbcnt_data, gct_hfbcnt_emul, GCT,GCThfbit);
00516
00517
00518 if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambPhDigiCollection> ( dtp_ph_data, dtp_ph_emul, DTP,DTtpPh);
00519 if(m_doSys[DTP]&&isValid[DTP]) process<L1MuDTChambThDigiCollection> ( dtp_th_data, dtp_th_emul, DTP,DTtpTh);
00520
00521 if(m_doSys[DTF]&&isValid[DTF]) process<L1MuRegionalCandCollection> ( dtf_trk_data, dtf_trk_emul, DTF,DTtftrk);
00522
00523 if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_cen_data, rpc_cen_emul, RPC,RPCcen);
00524 if(m_doSys[RPC]&&isValid[RPC]) process<L1MuRegionalCandCollection> ( rpc_for_data, rpc_for_emul, RPC,RPCfor);
00525
00526 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_data, gmt_emul, GMT,GMTmain);
00527 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuRegionalCandCollection> ( gmt_rdt_data, gmt_rdt_emul, GMT,GMTrdt);
00528 if(m_doSys[GMT]&&isValid[GMT]) process<L1MuGMTCandCollection> ( gmt_can_data, gmt_can_emul, GMT,GMTcnd);
00529
00530
00531 GltDEDigi gltdigimon;
00532
00533
00534 if(verbose())
00535 std::cout << "L1Comparator done processing all collections.\n" << std::flush;
00536
00537 if(verbose()) {
00538 std::cout << "[L1Comparator] sys match? << evt." << nevt_ << ": ";
00539 for(int i=0; i<DEnsys; i++)
00540 std::cout << DEmatchEvt[i] << " ";
00541 std::cout << std::endl;
00542 }
00543
00544
00545
00546
00547 bool evt_match = true;
00548 for(int i=0; i<DEnsys; i++)
00549 evt_match &= DEmatchEvt[i];
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561 m_match &= evt_match;
00562 m_dumpFile << std::flush;
00563
00564
00565 if(m_dedigis.size()==0) {
00566 if(verbose())
00567 std::cout << "\n [L1Comparator] adding empty collection to DErecord\n";
00568 m_dedigis.push_back(L1DataEmulDigi());
00569 }
00570
00571
00572 std::auto_ptr<L1DataEmulRecord> record
00573 (new L1DataEmulRecord(evt_match,m_doSys,DEmatchEvt,DEncand,m_dedigis, gltdigimon));
00574 if(verbose()) {
00575 std::cout << "\n [L1Comparator] printing DErecord"
00576 << "(entry:"<< nevt_
00577 << "|evt:" << evtNum_
00578 << "|run:" << runNum_
00579 << "):\n" << std::flush;
00580 std::cout << *record
00581 << "\n" << std::flush;
00582 }
00583
00584 iEvent.put(record);
00585
00586 if(verbose())
00587 std::cout << "L1comparator::analize() end. " << nevt_ << std::endl;
00588
00589 }
00590
00591
00592 template <class T>
00593 void L1Comparator::process(T const* data, T const* emul, const int sys, const int cid) {
00594
00595 if(verbose())
00596 std::cout << "L1Comparator::process -ing system:" << sys
00597 << " (" << SystLabel[sys] << "), data type " << cid
00598 << "...\n" << std::flush;
00599 if(verbose())
00600 std::cout << "L1Comparator::process debug "
00601 << " (size " << data->size() << "," <<emul->size() << ")"
00602 << ".\n" << std::flush;
00603
00605 bool prt = false;
00606 if(!m_dumpMode)
00607 prt = false;
00608 else if(m_dumpMode==-1)
00609 prt=true;
00610 else if(m_dumpMode>0) {
00611 DEcompare<T> tmp(data,emul);
00612 if(tmp.get_ncand(0)==0 && tmp.get_ncand(1)==0)
00613 prt=false;
00614 else
00615 prt = !tmp.do_compare(m_dumpFile,0);
00616 }
00617
00618
00619 DEcompare<T> cmp(data,emul);
00620
00621 int ndata = cmp.get_ncand(0);
00622 int nemul = cmp.get_ncand(1);
00623
00624 if(verbose())
00625 std::cout << "L1Comparator::process "
00626 << " system:" << SystLabel[sys] << "(id " << sys << ")"
00627 << " type:" << cmp.GetName(0) << "(" << cmp.de_type() << ")"
00628 << " ndata:" << ndata
00629 << " nemul:" << nemul
00630 << " (size " << data->size() << "," <<emul->size() << ")"
00631 << ".\n" << std::flush;
00632
00633 if(ndata==0&&nemul==0) {
00634 if(verbose())
00635 std::cout << "L1Comparator::process "
00636 << "empty collections -- exiting!\n" << std::flush;
00637 return;
00638 }
00639
00640 m_dumpFile << std::setiosflags(std::ios::showpoint | std::ios::fixed
00641 | std::ios::right | std::ios::adjustfield);
00642 std::cout << std::setiosflags(std::ios::showpoint | std::ios::fixed
00643 | std::ios::right | std::ios::adjustfield);
00644
00645 if(dumpEvent_ && prt ) {
00646 m_dumpFile << "\nEntry: " << nevt_
00647 << " (event:" << evtNum_
00648 << " | run:" << runNum_
00649 << ")\n" << std::flush;
00650 dumpEvent_=false;
00651 }
00652
00653 if(prt)
00654 m_dumpFile << "\n sys:" << SystLabel[sys]
00655 << " (" << sys << "), type:" << cid
00656 << " ...\n";
00657
00658 if(verbose())
00659 std::cout << "L1Comparator::process print:\n" << std::flush
00660 << cmp.print()
00661 << std::flush;
00662
00664 DEmatchEvt[sys] &= cmp.do_compare(m_dumpFile,m_dumpMode);
00665
00667 L1DEDigiCollection dg = cmp.getDEDigis();
00668
00669 if(verbose())
00670 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00671 std::cout << *it << "\n";
00672
00674 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00675 it->setSid(sys);
00677 for(L1DEDigiCollection::iterator it=dg.begin(); it!=dg.end();it++)
00678 it->setCid(cid);
00679
00681 m_dedigis.insert(m_dedigis.end(), dg.begin(), dg.end());
00682 for(int i=0; i<2; i++)
00683 DEncand[sys][i] += cmp.get_ncand(i);
00684
00685 if(verbose())
00686 std::cout << "L1Comparator::process "
00687 << " system:" << SystLabel[sys]
00688 << " type:" << cmp.GetName(0)
00689 << " ndata:" << DEncand[sys][0]
00690 << " nemul:" << DEncand[sys][1]
00691 << " (size " << data->size() << "," <<emul->size() << ")"
00692 << " ndigis:" << dg.size()
00693 << " agree? " << DEmatchEvt[sys]
00694 << std::endl;
00695
00696 if(verbose())
00697 std::cout << "L1Comparator::process -ing system:"
00698 << sys << " (" << SystLabel[sys] << ")...done.\n"
00699 << std::flush;
00700 }
00701
00702 template <class myCol>
00703 bool L1Comparator::CompareCollections( edm::Handle<myCol> data, edm::Handle<myCol> emul) {
00704 bool match = true;
00705 typedef typename myCol::size_type col_sz;
00706 typedef typename myCol::iterator col_it;
00707 col_sz ndata = data->size();
00708 col_sz nemul = emul->size();
00709 if(ndata!=nemul) {
00710 match &= false;
00711 m_dumpFile << " #cand mismatch!"
00712 << "\tdata: " << ndata
00713 << "\temul: " << nemul
00714 << std::endl;
00715 }
00716 col_it itd = data -> begin();
00717 col_it itm = emul -> begin();
00718 for (col_sz i=0; i<ndata; i++) {
00719 match &= dumpCandidate(*itd++,*itm++, m_dumpFile);
00720 }
00721 return match;
00722 }
00723
00724 template <class T>
00725 bool L1Comparator::dumpCandidate( const T& dt, const T& em, std::ostream& s) {
00726 if(dt==em)
00727 return true;
00728 s<<dt<<std::endl;
00729 s<<em<<std::endl<<std::endl;
00730 return false;
00731 }