#include <DQM/L1TMonitor/interface/L1TGT.h>
Definition at line 39 of file L1TGT.h.
enum L1TGT::activeDAQ [private] |
enum L1TGT::activeEVM [private] |
L1TGT::L1TGT | ( | const edm::ParameterSet & | ps | ) |
Definition at line 20 of file L1TGT.cc.
References GenMuonPlsPt100GeV_cfg::cout, dbe, lat::endl(), edm::ParameterSet::getUntrackedParameter(), NULL, outputFile_, DQMStore::setCurrentFolder(), DQMStore::setVerbose(), and verbose_.
00021 : gtSource_( ps.getParameter< InputTag >("gtSource") ), 00022 gtEvmSource_( ps.getParameter< InputTag >("gtEvmSource") ) 00023 { 00024 00025 // verbosity switch 00026 verbose_ = ps.getUntrackedParameter<bool>("verbose", false); 00027 00028 if(verbose_) cout << "L1TGT: constructor...." << endl; 00029 00030 dbe = NULL; 00031 if ( ps.getUntrackedParameter<bool>("DQMStore", false) ) 00032 { 00033 dbe = Service<DQMStore>().operator->(); 00034 dbe->setVerbose(0); 00035 } 00036 00037 outputFile_ = ps.getUntrackedParameter<string>("outputFile", ""); 00038 if ( outputFile_.size() != 0 ) { 00039 cout << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl; 00040 } 00041 00042 bool disable = ps.getUntrackedParameter<bool>("disableROOToutput", false); 00043 if(disable){ 00044 outputFile_=""; 00045 } 00046 00047 00048 if ( dbe !=NULL ) { 00049 dbe->setCurrentFolder("L1T/L1TGT"); 00050 } 00051 00052 00053 }
void L1TGT::analyze | ( | const edm::Event & | e, | |
const edm::EventSetup & | c | |||
) | [protected, virtual] |
get Global Trigger algo and technical triger bit statistics
Implements edm::EDAnalyzer.
Definition at line 179 of file L1TGT.cc.
References L1GtfeWord::activeBoards(), algo_bits, algo_bits_corr, algo_bits_lumi, L1GtfeWord::bxNr(), L1GtPsbWord::bxNr(), L1GtFdlWord::bxNr(), L1TcsWord::bxNr(), GenMuonPlsPt100GeV_cfg::cout, dbx_module, lat::endl(), event_lumi, event_number, event_type, L1TcsWord::eventNr(), evnum_trignum_lumi, FDL, MonitorElement::Fill(), edm::Event::getByLabel(), GMT, gtEvmSource_, gtfe_bx, gtSource_, i, isActive(), edm::Handle< T >::isValid(), j, edm::InputTag::label(), L1GtPsbWord::localBxNr(), L1GtFdlWord::localBxNr(), edm::Event::luminosityBlock(), nev_, orbit_lumi, L1TcsWord::orbitNr(), L1TcsWord::partTrigNr(), PSB9, L1GtfeWord::setupVersion(), setupversion_lumi, TCS, trigger_lumi, trigger_number, L1TcsWord::triggerType(), tt_bits, tt_bits_corr, tt_bits_lumi, and verbose_.
00180 { 00181 nev_++; 00182 if(verbose_) cout << "L1TGT: analyze...." << endl; 00183 00184 // open main GT (DAQ) readout record - exit if failed 00185 Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecord; 00186 e.getByLabel(gtSource_,gtReadoutRecord); 00187 00188 if (!gtReadoutRecord.isValid()) { 00189 edm::LogInfo("DataNotFound") << "can't find L1GlobalTriggerReadoutRecord with label " 00190 << gtSource_.label() ; 00191 return; 00192 } 00193 00194 // initialize bx's to invalid value 00195 int gtfeBx = -1; 00196 int tcsBx = -1; 00197 int gtfeEvmBx = -1; 00198 int fdlBx[2] = { -1, -1}; 00199 int psbBx[2][7] = { 00200 {-1, -1, -1, -1, -1, -1, -1}, 00201 {-1, -1, -1, -1, -1, -1, -1}}; 00202 int gmtBx = -1; 00203 00204 // get info from GTFE DAQ record 00205 L1GtfeWord gtfeWord = gtReadoutRecord->gtfeWord(); 00206 gtfeBx = gtfeWord.bxNr(); 00207 gtfe_bx->Fill(gtfeBx); 00208 setupversion_lumi->Fill(e.luminosityBlock(),gtfeWord.setupVersion()); 00209 int gtfeActiveBoards = gtfeWord.activeBoards(); 00210 00211 00212 // open EVM readout record if available 00213 Handle<L1GlobalTriggerEvmReadoutRecord> gtEvmReadoutRecord; 00214 e.getByLabel(gtEvmSource_,gtEvmReadoutRecord); 00215 00216 if (!gtEvmReadoutRecord.isValid()) { 00217 edm::LogInfo("DataNotFound") << "can't find L1GlobalTriggerEvmReadoutRecord with label " 00218 << gtSource_.label() ; 00219 } else { 00220 // get all info from the EVM record if available 00221 00222 L1GtfeWord gtfeEvmWord = gtEvmReadoutRecord->gtfeWord(); 00223 gtfeEvmBx = gtfeEvmWord.bxNr(); 00224 int gtfeEvmActiveBoards = gtfeEvmWord.activeBoards(); 00225 00226 if( isActive(gtfeEvmActiveBoards,TCS) ) { // if TCS present in the record 00227 00228 L1TcsWord tcsWord = gtEvmReadoutRecord->tcsWord(); 00229 tcsBx = tcsWord.bxNr(); 00230 00231 event_type->Fill(tcsWord.triggerType()); 00232 orbit_lumi->Fill(e.luminosityBlock(),tcsWord.orbitNr()); 00233 00234 trigger_number->Fill(tcsWord.partTrigNr()); 00235 event_number->Fill(tcsWord.eventNr()); 00236 00237 trigger_lumi->Fill(e.luminosityBlock(),tcsWord.partTrigNr()); 00238 event_lumi->Fill(e.luminosityBlock(),tcsWord.eventNr()); 00239 evnum_trignum_lumi->Fill(e.luminosityBlock(),double(tcsWord.eventNr())/double(tcsWord.partTrigNr())); 00240 } 00241 } 00242 00243 // look for GMT readout collection from the same source if GMT active 00244 if( isActive(gtfeActiveBoards,GMT) ) { 00245 edm::Handle<L1MuGMTReadoutCollection> gmtReadoutCollection; 00246 e.getByLabel(gtSource_,gmtReadoutCollection); 00247 00248 if (gmtReadoutCollection.isValid()) { 00249 gmtBx = gmtReadoutCollection->getRecord().getBxNr(); 00250 } 00251 } 00252 00253 // get info from FDL if active (including decision word) 00254 if( isActive(gtfeActiveBoards,FDL) ) { 00255 L1GtFdlWord fdlWord = gtReadoutRecord->gtFdlWord(); 00256 fdlBx[0] = fdlWord.bxNr(); 00257 fdlBx[1] = fdlWord.localBxNr(); 00258 00260 DecisionWord gtDecisionWord = gtReadoutRecord->decisionWord(); 00261 TechnicalTriggerWord gtTTWord = gtReadoutRecord->technicalTriggerWord(); 00262 00263 int dbitNumber = 0; 00264 DecisionWord::const_iterator GTdbitItr; 00265 algo_bits->Fill(-1.); // fill underflow to normalize 00266 for(GTdbitItr = gtDecisionWord.begin(); GTdbitItr != gtDecisionWord.end(); GTdbitItr++) { 00267 if (*GTdbitItr) { 00268 algo_bits->Fill(dbitNumber); 00269 algo_bits_lumi->Fill(e.luminosityBlock(),dbitNumber); 00270 int dbitNumber1 = 0; 00271 DecisionWord::const_iterator GTdbitItr1; 00272 for(GTdbitItr1 = gtDecisionWord.begin(); GTdbitItr1 != gtDecisionWord.end(); GTdbitItr1++) { 00273 if (*GTdbitItr1) algo_bits_corr->Fill(dbitNumber,dbitNumber1); 00274 dbitNumber1++; 00275 } 00276 int tbitNumber1 = 0; 00277 TechnicalTriggerWord::const_iterator GTtbitItr1; 00278 for(GTtbitItr1 = gtTTWord.begin(); GTtbitItr1 != gtTTWord.end(); GTtbitItr1++) { 00279 if (*GTtbitItr1) tt_bits_corr->Fill(dbitNumber,tbitNumber1); 00280 tbitNumber1++; 00281 } 00282 } 00283 dbitNumber++; 00284 } 00285 00286 int tbitNumber = 0; 00287 TechnicalTriggerWord::const_iterator GTtbitItr; 00288 tt_bits->Fill(-1.); // fill underflow to normalize 00289 for(GTtbitItr = gtTTWord.begin(); GTtbitItr != gtTTWord.end(); GTtbitItr++) { 00290 if (*GTtbitItr) { 00291 tt_bits->Fill(tbitNumber); 00292 tt_bits_lumi->Fill(e.luminosityBlock(),tbitNumber); 00293 int tbitNumber1 = 0; 00294 TechnicalTriggerWord::const_iterator GTtbitItr1; 00295 for(GTtbitItr1 = gtTTWord.begin(); GTtbitItr1 != gtTTWord.end(); GTtbitItr1++) { 00296 if (*GTtbitItr1) tt_bits_corr->Fill(tbitNumber,tbitNumber1); 00297 tbitNumber1++; 00298 } 00299 } 00300 tbitNumber++; 00301 } 00302 } 00303 00304 // get info from active PSB's 00305 int ibit = PSB9; // first psb 00306 // for now hardcode psb id's - TODO - get them from Vasile's board maps... 00307 int psbID[7] = { 0xbb09, 0xbb0d, 0xbb0e, 0xbb0f, 0xbb13, 0xbb14, 0xbb15 }; 00308 for(int i=0; i<7; i++) { 00309 if( isActive(gtfeActiveBoards,ibit) ) { 00310 L1GtPsbWord psbWord = gtReadoutRecord->gtPsbWord(psbID[i]); 00311 psbBx[0][i] = psbWord.bxNr(); 00312 psbBx[1][i] = psbWord.localBxNr(); 00313 } 00314 ibit++; 00315 } 00316 00317 //fill the dbx histo 00318 if(gtfeEvmBx>-1) dbx_module->Fill(0.,gtfeEvmBx-gtfeBx); 00319 if(tcsBx>-1) dbx_module->Fill(1., tcsBx-gtfeBx); 00320 for(int i=0; i<2; i++) { 00321 if(fdlBx[i]>-1) dbx_module->Fill(2.+i, fdlBx[i]-gtfeBx); 00322 } 00323 for(int j=0; j<7; j++) { 00324 for(int i=0; i<2; i++) { 00325 if(psbBx[i][j]>-1) dbx_module->Fill(4.+i+2*j, psbBx[i][j]-gtfeBx); 00326 } 00327 } 00328 if(gmtBx>-1) dbx_module->Fill(18., gmtBx-gtfeBx); 00329 }
void L1TGT::beginJob | ( | const edm::EventSetup & | c | ) | [protected, virtual] |
Reimplemented from edm::EDAnalyzer.
Definition at line 59 of file L1TGT.cc.
References algo_bits, algo_bits_corr, algo_bits_lumi, algo_tt_bits_corr, DQMStore::book1D(), DQMStore::book2D(), DQMStore::bookProfile(), dbe, dbx_module, event_lumi, event_number, event_type, evnum_trignum_lumi, gtfe_bx, nev_, orbit_lumi, DQMStore::rmdir(), MonitorElement::setAxisTitle(), MonitorElement::setBinLabel(), DQMStore::setCurrentFolder(), setupversion_lumi, trigger_lumi, trigger_number, tt_bits, tt_bits_corr, and tt_bits_lumi.
00060 { 00061 00062 nev_ = 0; 00063 00064 // get hold of back-end interface 00065 DQMStore* dbe = 0; 00066 dbe = Service<DQMStore>().operator->(); 00067 00068 if ( dbe ) { 00069 dbe->setCurrentFolder("L1T/L1TGT"); 00070 dbe->rmdir("L1T/L1TGT"); 00071 } 00072 00073 00074 if ( dbe ) { 00075 dbe->setCurrentFolder("L1T/L1TGT"); 00076 00077 algo_bits = dbe->book1D("algo_bits", "GT algo bits", 128, -0.5, 127.5 ); 00078 algo_bits->setAxisTitle("algorithm bits",1); 00079 algo_bits_corr = dbe->book2D("algo_bits_corr","GT algo bit correlation", 00080 128, -0.5, 127.5, 128, -0.5, 127.5 ); 00081 algo_bits_corr->setAxisTitle("algorithm bits",1); 00082 algo_bits_corr->setAxisTitle("algorithm bits",2); 00083 00084 tt_bits = dbe->book1D("tt_bits", "GT technical trigger bits", 64, -0.5, 63.5 ); 00085 tt_bits->setAxisTitle("technical trigger bits",1); 00086 tt_bits_corr = dbe->book2D("tt_bits_corr","GT tech. trig. bit correlation", 00087 64, -0.5, 63.5, 64, -0.5, 63.5 ); 00088 tt_bits_corr->setAxisTitle("technical trigger bits",1); 00089 tt_bits_corr->setAxisTitle("technical trigger bits",2); 00090 00091 algo_tt_bits_corr = dbe->book2D("algo_tt_bits_corr","GT algo tech. trig. bit correlation", 00092 128, -0.5, 127.5, 64, -0.5, 63.5 ); 00093 algo_tt_bits_corr->setAxisTitle("algorithm bits",1); 00094 algo_tt_bits_corr->setAxisTitle("technical trigger bits",2); 00095 00096 algo_bits_lumi = dbe->book2D("algo_bits_lumi", "GT algo bit rate per lumi segment", 00097 250, 0., 250., 128, -0.5, 127.5); 00098 algo_bits_lumi->setAxisTitle("luminosity segment",1); 00099 algo_bits_lumi->setAxisTitle("algorithm bits",2); 00100 tt_bits_lumi = dbe->book2D("tt_bits_lumi", "GT tech. trig. bit rate per lumi segment", 00101 250, 0., 250., 64, -0.5, 63.5); 00102 tt_bits_lumi->setAxisTitle("luminosity segment",1); 00103 tt_bits_lumi->setAxisTitle("technical trigger bits",2); 00104 00105 event_type = dbe->book1D("event_type","GT event type", 10, -0.5, 9.5); 00106 event_type->setAxisTitle("event type",1); 00107 event_type->setBinLabel(2,"Physics",1); 00108 event_type->setBinLabel(3,"Calibration",1); 00109 event_type->setBinLabel(4,"Random",1); 00110 event_type->setBinLabel(6,"Traced",1); 00111 event_type->setBinLabel(7,"Test",1); 00112 event_type->setBinLabel(8,"Error",1); 00113 00114 event_number = dbe->book1D("event_number", "GT Event number (from last resync)", 100, 0., 50000.); 00115 event_number->setAxisTitle("event number",1); 00116 event_lumi = dbe->bookProfile("event_lumi","GT Event number (from last resync) vs lumi section", 00117 250, 0., 250., 100, -0.1, 1.e15, "s"); 00118 event_lumi->setAxisTitle("luminosity segment",1); 00119 event_lumi->setAxisTitle("event number",2); 00120 trigger_number = dbe->book1D("trigger_number", "GT Trigger number (from start run)", 100, 0., 50000.); 00121 trigger_number->setAxisTitle("trigger number",1); 00122 trigger_lumi = dbe->bookProfile("trigger_lumi","GT Trigger number (from start run) vs lumi section", 00123 250, 0., 250., 100, -0.1, 1.e15, "s"); 00124 trigger_lumi->setAxisTitle("luminosity segment",1); 00125 trigger_lumi->setAxisTitle("trigger number",2); 00126 00127 evnum_trignum_lumi = dbe->bookProfile("evnum_trignum_lumi","GT Event/Trigger number ratio vs lumi section", 00128 250, 0., 250., 100, -0.1, 2., "s"); 00129 evnum_trignum_lumi->setAxisTitle("luminosity segment",1); 00130 evnum_trignum_lumi->setAxisTitle("event/trigger number ratio",2); 00131 orbit_lumi = dbe->bookProfile("orbit_lumi","GT orbit number vs lumi section", 00132 250, 0., 250., 100, -0.1, 1.e15, "s"); 00133 orbit_lumi->setAxisTitle("luminosity segment",1); 00134 orbit_lumi->setAxisTitle("orbit number",2); 00135 setupversion_lumi = dbe->bookProfile("setupversion_lumi","GT setup version vs lumi section", 00136 250, 0., 250., 100, -0.1, 1.e10, "i"); 00137 setupversion_lumi->setAxisTitle("luminosity segment",1); 00138 setupversion_lumi->setAxisTitle("prescale stup version",2); 00139 00140 gtfe_bx = dbe->book1D("gtfe_bx","GTFE Bx number",3600, 0., 3600.); 00141 gtfe_bx->setAxisTitle("GTFE BX number",1); 00142 dbx_module = dbe->bookProfile("dbx_module", "delta Bx of GT modules wrt. GTFE", 00143 20,0.,20.,100,-4000.,4000.,"i"); 00144 dbx_module->setAxisTitle("GT crate module",1); 00145 dbx_module->setAxisTitle("Module Bx - GTFE Bx",2); 00146 dbx_module->setBinLabel(1,"GTFEevm",1); 00147 dbx_module->setBinLabel(2,"TCS",1); 00148 dbx_module->setBinLabel(3,"FDL",1); 00149 dbx_module->setBinLabel(4,"FDLloc",1); 00150 dbx_module->setBinLabel(5,"PSB9",1); 00151 dbx_module->setBinLabel(6,"PSB9loc",1); 00152 dbx_module->setBinLabel(7,"PSB13",1); 00153 dbx_module->setBinLabel(8,"PSB13loc",1); 00154 dbx_module->setBinLabel(9,"PSB14",1); 00155 dbx_module->setBinLabel(10,"PSB14loc",1); 00156 dbx_module->setBinLabel(11,"PSB15",1); 00157 dbx_module->setBinLabel(12,"PSB15loc",1); 00158 dbx_module->setBinLabel(13,"PSB19",1); 00159 dbx_module->setBinLabel(14,"PSB19loc",1); 00160 dbx_module->setBinLabel(15,"PSB20",1); 00161 dbx_module->setBinLabel(16,"PSB20loc",1); 00162 dbx_module->setBinLabel(17,"PSB21",1); 00163 dbx_module->setBinLabel(18,"PSB21loc",1); 00164 dbx_module->setBinLabel(19,"GMT",1); 00165 } 00166 }
Reimplemented from edm::EDAnalyzer.
Definition at line 169 of file L1TGT.cc.
References GenMuonPlsPt100GeV_cfg::cout, dbe, lat::endl(), nev_, outputFile_, DQMStore::save(), and verbose_.
00170 { 00171 if(verbose_) cout << "L1TGT: end job...." << endl; 00172 LogInfo("EndJob") << "analyzed " << nev_ << " events"; 00173 00174 if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_); 00175 00176 return; 00177 }
MonitorElement* L1TGT::algo_bits [private] |
MonitorElement* L1TGT::algo_bits_corr [private] |
MonitorElement* L1TGT::algo_bits_lumi [private] |
MonitorElement* L1TGT::algo_tt_bits_corr [private] |
DQMStore* L1TGT::dbe [private] |
MonitorElement* L1TGT::dbx_module [private] |
MonitorElement* L1TGT::event_lumi [private] |
MonitorElement* L1TGT::event_number [private] |
MonitorElement* L1TGT::event_type [private] |
MonitorElement* L1TGT::evnum_trignum_lumi [private] |
edm::InputTag L1TGT::gtEvmSource_ [private] |
MonitorElement* L1TGT::gtfe_bx [private] |
edm::InputTag L1TGT::gtSource_ [private] |
ofstream L1TGT::logFile_ [private] |
bool L1TGT::monitorDaemon_ [private] |
int L1TGT::nev_ [private] |
MonitorElement* L1TGT::orbit_lumi [private] |
std::string L1TGT::outputFile_ [private] |
MonitorElement* L1TGT::setupversion_lumi [private] |
MonitorElement* L1TGT::trigger_lumi [private] |
MonitorElement* L1TGT::trigger_number [private] |
MonitorElement* L1TGT::tt_bits [private] |
MonitorElement* L1TGT::tt_bits_corr [private] |
MonitorElement* L1TGT::tt_bits_lumi [private] |
bool L1TGT::verbose_ [private] |