forked from cms-sw/cmssw
/
DQClient.cc
136 lines (125 loc) · 4.01 KB
/
DQClient.cc
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
#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) :
DQModule(ps),_taskname(taskname), _maxProcessedLS(0)
{
// - 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;
}
/* virtual */ 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.get<HcalDbRecord>().get(dbs);
_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>())
{
edm::ESHandle<RunInfo> ri;
runInfoRec->get(ri);
std::vector<int> vfeds=ri->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);
}
/* virtual */ void DQClient::beginLuminosityBlock(DQMStore::IBooker&,
DQMStore::IGetter&, edm::LuminosityBlock const& lb,
edm::EventSetup const& es)
{
// get the Channel Quality masks
_xQuality.reset();
edm::ESHandle<HcalChannelQuality> hcq;
es.get<HcalChannelQualityRcd>().get("withTopo", hcq);
const HcalChannelQuality *cq = hcq.product();
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);
}
}
}
/* virtual */ void DQClient::endLuminosityBlock(DQMStore::IBooker&,
DQMStore::IGetter&, edm::LuminosityBlock const& lb,
edm::EventSetup const&)
{
_currentLS=lb.luminosityBlock();
_totalLS++;
if (_maxProcessedLS<_currentLS)
_maxProcessedLS=_currentLS;
}
/* virtual */ std::vector<flag::Flag> DQClient::endJob(DQMStore::IBooker&,
DQMStore::IGetter&)
{
return std::vector<flag::Flag>();
}
}