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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
#ifndef DigiTask_h
#define DigiTask_h
/**
* file: DigiTask.h
* Author: VK
* Description:
* HCAL DIGI Data Tier Processing.
*
* Online:
*
* Offline:
* - HF Q2/(Q1+Q2) is not included.
*/
#include "DQM/HcalCommon/interface/DQTask.h"
#include "DQM/HcalCommon/interface/Utilities.h"
#include "DQM/HcalCommon/interface/HashFilter.h"
#include "DQM/HcalCommon/interface/ElectronicsMap.h"
#include "DQM/HcalCommon/interface/Container1D.h"
#include "DQM/HcalCommon/interface/Container2D.h"
#include "DQM/HcalCommon/interface/ContainerProf1D.h"
#include "DQM/HcalCommon/interface/ContainerProf2D.h"
#include "DQM/HcalCommon/interface/ContainerSingle1D.h"
#include "DQM/HcalCommon/interface/ContainerSingle2D.h"
#include "DQM/HcalCommon/interface/ContainerSingleProf2D.h"
#include "DQM/HcalCommon/interface/ContainerXXX.h"
class DigiTask : public hcaldqm::DQTask {
public:
DigiTask(edm::ParameterSet const &);
~DigiTask() override {}
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
std::shared_ptr<hcaldqm::Cache> globalBeginLuminosityBlock(edm::LuminosityBlock const &,
edm::EventSetup const &) const override;
void globalEndLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override;
protected:
void _process(edm::Event const &, edm::EventSetup const &) override;
void _resetMonitors(hcaldqm::UpdateFreq) override;
edm::InputTag _tagQIE11;
edm::InputTag _tagHO;
edm::InputTag _tagQIE10;
edm::EDGetTokenT<QIE11DigiCollection> _tokQIE11;
edm::EDGetTokenT<HODigiCollection> _tokHO;
edm::EDGetTokenT<QIE10DigiCollection> _tokQIE10;
edm::ESGetToken<HcalDbService, HcalDbRecord> hcalDbServiceToken_;
double _cutSumQ_HBHE, _cutSumQ_HO, _cutSumQ_HF;
double _thresh_unihf;
// flag vector
std::vector<hcaldqm::flag::Flag> _vflags;
enum DigiFlag { fDigiSize = 0, fUni = 1, fNChsHF = 2, fUnknownIds = 3, fLED = 4, fCapId = 5, nDigiFlag = 6 };
// hashes/FED vectors
std::vector<uint32_t> _vhashFEDs;
std::map<HcalSubdetector, int> _refDigiSize;
// emap
hcaldqm::electronicsmap::ElectronicsMap _ehashmap; // online only
hcaldqm::electronicsmap::ElectronicsMap _dhashmap;
// Filters
hcaldqm::filter::HashFilter _filter_VME;
hcaldqm::filter::HashFilter _filter_uTCA;
hcaldqm::filter::HashFilter _filter_FEDHF;
hcaldqm::filter::HashFilter _filter_QIE1011;
hcaldqm::filter::HashFilter _filter_QIE8;
hcaldqm::filter::HashFilter _filter_TDC2bit;
hcaldqm::filter::HashFilter _filter_TDC6bit;
/* hcaldqm::Containers */
// ADC, fC - Charge - just filling - no summary!
hcaldqm::Container1D _cADC_SubdetPM;
hcaldqm::Container1D _cfC_SubdetPM;
hcaldqm::Container1D _cSumQ_SubdetPM;
hcaldqm::ContainerProf2D _cSumQ_depth;
hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM;
hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM; // online only!
// ADC, fC for HF (QIE10 has different ADC/fC)
hcaldqm::Container1D _cADC_SubdetPM_QIE1011;
hcaldqm::Container1D _cfC_SubdetPM_QIE1011;
hcaldqm::Container1D _cSumQ_SubdetPM_QIE1011;
hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM_QIE1011;
hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM_QIE1011; // online only!
// Shape - just filling - not summary!
hcaldqm::Container1D _cShapeCut_FED;
hcaldqm::Container2D _cADCvsTS_SubdetPM;
hcaldqm::Container2D _cADCvsTS_SubdetPM_QIE1011;
// Timing
// just filling - no summary!
hcaldqm::Container1D _cTimingCut_SubdetPM;
hcaldqm::Container1D _cTimingCutHTH_SubdetPM;
hcaldqm::ContainerProf2D _cTimingCut_FEDuTCA;
hcaldqm::ContainerProf2D _cTimingCut_ElectronicsuTCA;
hcaldqm::ContainerProf1D _cTimingCutvsLS_FED;
hcaldqm::ContainerProf1D _cTimingCutvsLS_SubdetPM;
hcaldqm::ContainerProf2D _cTimingCut_depth;
hcaldqm::ContainerProf1D _cTimingCutvsiphi_SubdetPM; // online only!
hcaldqm::ContainerProf1D _cTimingCutvsieta_Subdet; // online only!
// Only for Online mode! just filling - no summary!
hcaldqm::ContainerProf1D _cQ2Q12CutvsLS_FEDHF; // online only!
// Occupancy w/o a Cut - whatever is sitting in the Digi Collection
// used to determine Missing Digis => used for Summary!
hcaldqm::Container2D _cOccupancy_FEDuTCA;
hcaldqm::Container2D _cOccupancy_ElectronicsuTCA;
hcaldqm::Container2D _cOccupancy_Crate;
hcaldqm::Container2D _cOccupancy_CrateSlot;
hcaldqm::Container2D _cOccupancy_depth;
hcaldqm::Container1D _cOccupancyvsiphi_SubdetPM; // online only
hcaldqm::Container1D _cOccupancyvsieta_Subdet; // online only
// Occupancy w/ a Cut
// used to determine if occupancy is symmetric or not. =>
// used for Summary
hcaldqm::Container2D _cOccupancyCut_FEDuTCA;
hcaldqm::Container2D _cOccupancyCut_ElectronicsuTCA;
hcaldqm::Container2D _cOccupancyCut_depth;
hcaldqm::Container1D _cOccupancyCutvsiphi_SubdetPM; // online only
hcaldqm::Container1D _cOccupancyCutvsieta_Subdet; // online only
//hcaldqm::Container2D _cOccupancyCutvsSlotvsLS_HFPM; // online only
hcaldqm::Container2D _cOccupancyCutvsiphivsLS_SubdetPM; // online only
// Occupancy w/o and w/ a Cut vs BX and vs LS
hcaldqm::ContainerProf1D _cOccupancyvsLS_Subdet;
hcaldqm::ContainerProf1D _cOccupancyCutvsLS_Subdet; // online only
hcaldqm::ContainerProf1D _cOccupancyCutvsBX_Subdet; // online only
// #Time Samples for a digi. Used for Summary generation
hcaldqm::Container1D _cDigiSize_Crate;
hcaldqm::Container1D _cDigiSize_FED;
hcaldqm::ContainerProf1D _cDigiSizevsLS_FED; // online only
hcaldqm::ContainerXXX<uint32_t> _xDigiSize; // online only
hcaldqm::ContainerXXX<uint32_t> _xUniHF, _xUni; // online only
hcaldqm::ContainerXXX<uint32_t> _xNChs; // online only
hcaldqm::ContainerXXX<uint32_t> _xNChsNominal; // online only
hcaldqm::ContainerXXX<uint32_t> _xBadCapid; // online only
// QIE10 TDC histograms
hcaldqm::Container2D _cLETDCvsADC_2bit_SubdetPM;
hcaldqm::Container2D _cLETDCvsADC_6bit_SubdetPM;
hcaldqm::Container2D _cLETDCvsTS_2bit_SubdetPM;
hcaldqm::Container2D _cLETDCvsTS_6bit_SubdetPM;
hcaldqm::Container1D _cLETDCTime_SubdetPM;
hcaldqm::ContainerProf2D _cLETDCTime_depth;
hcaldqm::Container2D _cLETDCTimevsADC_SubdetPM;
// Bad TDC histograms
hcaldqm::Container1D _cBadTDCValues_SubdetPM;
hcaldqm::Container1D _cBadTDCvsBX_SubdetPM;
hcaldqm::Container1D _cBadTDCvsLS_SubdetPM;
hcaldqm::Container2D _cBadTDCCount_depth;
hcaldqm::Container1D _cBadTDCValues;
hcaldqm::Container1D _cBadTDCvsBX;
hcaldqm::Container1D _cBadTDCvsLS;
// (Capid - BX) % 4
hcaldqm::Container1D _cCapidMinusBXmod4_SubdetPM;
hcaldqm::ContainerSingle2D _cCapidMinusBXmod4_CrateSlotuTCA[4]; // CrateSlot 2D histograms for each (capid-BX)%4
hcaldqm::ContainerSingle2D _cCapid_BadvsFEDvsLS;
hcaldqm::ContainerSingle2D
_cCapid_BadvsFEDvsLSmod10; // Same as _cCapid_BadvsFEDvsLS, but only for last 50 LSes (for sound alarm turning off when problem goes away)
// #events counters
MonitorElement *meNumEvents1LS; // to transfer the #events to harvesting
MonitorElement *meUnknownIds1LS;
bool _unknownIdsPresent;
hcaldqm::Container2D _cSummaryvsLS_FED; // online only
hcaldqm::ContainerSingle2D _cSummaryvsLS; // online only
bool _qie10InConditions; // Flag to protect against QIE10 digis not in conditions in 2016.
std::map<HcalSubdetector, short> _capidmbx; // Expected (capid - BX) % 4 for each subdet
// LED monitoring stuff
double _thresh_led;
std::map<HcalSubdetector, std::vector<HcalDetId> > _ledCalibrationChannels;
hcaldqm::Container1D _LED_CUCountvsLS_Subdet; // Misfire count vs LS
hcaldqm::Container1D _LED_CUCountvsLSmod60_Subdet; // Misfire count vs LS
hcaldqm::Container2D _LED_ADCvsBX_Subdet; // Pin diode amplitude vs BX
};
#endif
|