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
|
#include "DQM/HcalCommon/interface/DQClient.h"
namespace hcaldqm {
using namespace constants;
DQClient::DQClient(std::string const &name,
std::string const &taskname,
edm::ParameterSet const &ps,
edm::ConsumesCollector &iC)
: DQModule(ps),
_taskname(taskname),
_totalLS(0),
_maxProcessedLS(0),
hcalDbServiceToken_(iC.esConsumes<HcalDbService, HcalDbRecord, edm::Transition::BeginRun>()),
runInfoToken_(iC.esConsumes<RunInfo, RunInfoRcd, edm::Transition::BeginRun>()),
hcalChannelQualityToken_(
iC.esConsumes<HcalChannelQuality, HcalChannelQualityRcd, edm::Transition::BeginLuminosityBlock>(
edm::ESInputTag("", "withTopo"))) {
// - SET THE TASK NAME YOU REFER TO
// - SET THE CLIENT'S NAME AS WELL - RUN SUMMARY PLOTS
// WILL BE GENERATED UNDER THAT FOLDER
_name = name;
}
void DQClient::beginRun(edm::Run const &r, edm::EventSetup const &es) {
// TEMPORARY
_vhashFEDs.clear();
_vcdaqEids.clear();
_vhashCrates.clear();
// get various FED lists
edm::ESHandle<HcalDbService> dbs = es.getHandle(hcalDbServiceToken_);
_emap = dbs->getHcalMapping();
if (_ptype != fOffline) { // hidefed2crate
_vFEDs = utilities::getFEDList(_emap);
for (std::vector<int>::const_iterator it = _vFEDs.begin(); it != _vFEDs.end(); ++it) {
//
// FIXME
// until there exists a map of FED2Crate and Crate2FED,
// all the unknown Crates will be mapped to 0...
//
if (*it == 0) {
_vhashFEDs.push_back(HcalElectronicsId(0, SLOT_uTCA_MIN, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
continue;
}
if (*it > FED_VME_MAX) {
std::pair<uint16_t, uint16_t> cspair = utilities::fed2crate(*it);
_vhashFEDs.push_back(
HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
} else
_vhashFEDs.push_back(HcalElectronicsId(FIBERCH_MIN, FIBER_VME_MIN, SPIGOT_MIN, (*it) - FED_VME_MIN).rawId());
}
// get FEDs registered @cDAQ
if (auto runInfoRec = es.tryToGet<RunInfoRcd>()) {
const RunInfo &runInfo = es.getData(runInfoToken_);
std::vector<int> vfeds = runInfo.m_fed_in;
for (std::vector<int>::const_iterator it = vfeds.begin(); it != vfeds.end(); ++it) {
if (*it >= constants::FED_VME_MIN && *it <= FED_VME_MAX)
_vcdaqEids.push_back(
HcalElectronicsId(constants::FIBERCH_MIN, constants::FIBER_VME_MIN, SPIGOT_MIN, (*it) - FED_VME_MIN)
.rawId());
else if (*it >= constants::FED_uTCA_MIN && *it <= FEDNumbering::MAXHCALuTCAFEDID) {
std::pair<uint16_t, uint16_t> cspair = utilities::fed2crate(*it);
_vcdaqEids.push_back(
HcalElectronicsId(cspair.first, cspair.second, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
}
}
}
} else {
_vCrates = utilities::getCrateList(_emap);
std::map<int, uint32_t> crateHashMap = utilities::getCrateHashMap(_emap);
for (auto &it_crate : _vCrates) {
_vhashCrates.push_back(crateHashMap[it_crate]);
}
}
// Initialize channel quality masks, but do not load (changed for 10_4_X,
// moving to LS granularity)
_xQuality.initialize(hashfunctions::fDChannel);
}
void DQClient::beginLuminosityBlock(DQMStore::IBooker &,
DQMStore::IGetter &,
edm::LuminosityBlock const &lb,
edm::EventSetup const &es) {
// get the Channel Quality masks
_xQuality.reset();
const HcalChannelQuality *cq = &es.getData(hcalChannelQualityToken_);
std::vector<DetId> detids = cq->getAllChannels();
for (std::vector<DetId>::const_iterator it = detids.begin(); it != detids.end(); ++it) {
if (HcalGenericDetId(*it).genericSubdet() == HcalGenericDetId::HcalGenUnknown)
continue;
if (HcalGenericDetId(*it).isHcalDetId()) {
HcalDetId did(*it);
uint32_t mask = (cq->getValues(did))->getValue();
if (mask != 0)
_xQuality.push(did, mask);
}
}
}
void DQClient::endLuminosityBlock(DQMStore::IBooker &,
DQMStore::IGetter &,
edm::LuminosityBlock const &lb,
edm::EventSetup const &) {
_currentLS = lb.luminosityBlock();
_totalLS++;
if (_maxProcessedLS < _currentLS)
_maxProcessedLS = _currentLS;
}
std::vector<flag::Flag> DQClient::endJob(DQMStore::IBooker &, DQMStore::IGetter &) {
return std::vector<flag::Flag>();
}
} // namespace hcaldqm
|