1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#ifndef L1TdeGCT_H
#define L1TdeGCT_H
/*\class L1TdeGCT
*\description GCT data|emulation comparison DQM interface
produces expert level DQM monitorable elements
*\author N.Leonardo
*\date 08.09
*/
// system, common includes
#include <memory>
#include <string>
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
// dqm includes
#include "DQMServices/Core/interface/DQMStore.h"
// l1 dataformats, d|e record includes
#include "L1Trigger/HardwareValidation/interface/DEtrait.h"
#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
class L1TdeGCT : public DQMEDAnalyzer {
public:
explicit L1TdeGCT(const edm::ParameterSet&);
~L1TdeGCT() override;
protected:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override;
void analyze(const edm::Event&, const edm::EventSetup&) override;
private:
// input d|e record
edm::EDGetTokenT<L1DataEmulRecord> DEsource_;
bool hasRecord_;
// debug verbose level
int verbose_;
int verbose() { return verbose_; }
// root output file name
std::string histFile_;
// dqm histogram folder
std::string histFolder_;
bool m_stage1_layer2_;
// dqm common
bool monitorDaemon_;
// (em) iso, no-iso, (jets) cen, for, tau & energy sums.
static const int nGctColl_ = dedefs::GCThfbit - dedefs::GCTisolaem + 1;
static const int nStage1Layer2Coll_ = dedefs::GCTisotaujets - dedefs::GCTisolaem + 1;
// counters
int colCount[nGctColl_];
int nWithCol[nGctColl_];
int colCount_stage1Layer2[nStage1Layer2Coll_];
int nWithCol_stage1Layer2[nStage1Layer2Coll_];
// Ranges and labels
const int phiNBins = 18;
const double phiMinim = -0.5;
const double phiMaxim = 17.5;
const int etaNBins = 22;
const double etaMinim = -0.5;
const double etaMaxim = 21.5;
static const int nerr = 5;
const int nbit = 32;
std::string cLabel[nGctColl_] = {
"IsoEM", "NoisoEM", "CenJet", "ForJet", "TauJet", "HT", "MET", "ET", "MHT", "HFSums", "HFCnts"};
std::string sLabel[nStage1Layer2Coll_] = {
"IsoEM", "NoisoEM", "CenJet", "ForJet", "TauJet", "HT", "MET", "ET", "MHT", "Stage1HFSums", "HFCnts", "IsoTauJet"};
std::string errLabel[nerr] = {"Agree", "Loc. Agree", "L.Disagree", "Data only", "Emul only"};
// MEs
MonitorElement* sysrates;
MonitorElement* sysncand[2];
MonitorElement* errortype[nGctColl_];
// location
MonitorElement* etaphi[nGctColl_];
MonitorElement* eta[nGctColl_];
MonitorElement* phi[nGctColl_];
MonitorElement* rnk[nGctColl_];
MonitorElement* etaData[nGctColl_];
MonitorElement* phiData[nGctColl_];
MonitorElement* rnkData[nGctColl_];
MonitorElement* errortype_stage1layer2[nStage1Layer2Coll_];
// location
MonitorElement* etaphi_stage1layer2[nStage1Layer2Coll_];
MonitorElement* eta_stage1layer2[nStage1Layer2Coll_];
MonitorElement* phi_stage1layer2[nStage1Layer2Coll_];
MonitorElement* rnk_stage1layer2[nStage1Layer2Coll_];
MonitorElement* etaData_stage1layer2[nStage1Layer2Coll_];
MonitorElement* phiData_stage1layer2[nStage1Layer2Coll_];
MonitorElement* rnkData_stage1layer2[nStage1Layer2Coll_];
// trigger data word
MonitorElement* dword[nGctColl_];
MonitorElement* eword[nGctColl_];
MonitorElement* deword[nGctColl_];
MonitorElement* masked[nGctColl_];
MonitorElement* dword_stage1layer2[nStage1Layer2Coll_];
MonitorElement* eword_stage1layer2[nStage1Layer2Coll_];
MonitorElement* deword_stage1layer2[nStage1Layer2Coll_];
MonitorElement* masked_stage1layer2[nStage1Layer2Coll_];
public:
};
#endif
|