12 #include <background/modules/BeamBkgHitRateMonitor/SVDHitRateCounter.h>
15 #include <framework/logging/Logger.h>
16 #include <hlt/softwaretrigger/core/FinalTriggerDecisionCalculator.h>
25 namespace Background {
27 void SVDHitRateCounter::initialize(TTree* tree)
30 m_digits.isOptional(m_svdShaperDigitsName);
31 m_clusters.isOptional();
33 B2DEBUG(10,
"SVDHitRateCounter: initialize()");
35 tree->Branch(
"svd", &m_rates,
36 "layerAverageRates[4]/F:layerLadderAverageRates[4][16]/F:layerSensorAverageRates[4][5]:averageRate/F:l3LadderSensorAverageRates[7][2]/F:numEvents/I:valid/O");
37 tree->Branch(
"svd_highE", &m_rates_highE,
38 "layerAverageRates[4]/F:layerLadderAverageRates[4][16]/F:layerSensorAverageRates[4][5]:averageRate/F:l3LadderSensorAverageRates[7][2]/F:numEvents/I:valid/O");
39 tree->Branch(
"svd_lowE", &m_rates_lowE,
40 "layerAverageRates[4]/F:layerLadderAverageRates[4][16]/F:layerSensorAverageRates[4][5]:averageRate/F:l3LadderSensorAverageRates[7][2]/F:numEvents/I:valid/O");
44 for (
int layer = 0; layer < m_nLayers; layer++) {
45 for (
int ladder = 0; ladder < m_nLadders[layer]; ladder++) {
46 for (
int sensor = 0; sensor < m_nSensors[layer]; sensor++) {
47 VxdID sensorID(layer + 3, ladder + 1, sensor + 1);
48 for (
bool isU : {
true,
false}) {
49 int nStrips = nStripsOnLayerSide(layer, isU);
50 for (
int strip = 0; strip < nStrips; strip++) {
51 if (!m_HotStripsCalib.isHot(sensorID, isU, strip) && !m_FADCMaskedStrips.isMasked(sensorID, isU, strip)) {
53 m_layerActiveStrips[layer] ++;
54 m_layerLadderActiveStrips[layer][ladder] ++;
55 m_layerSensorActiveStrips[layer][sensor] ++;
63 for (
int ladder = 0; ladder < m_nLadders[layer]; ladder++) {
64 for (
int sensor = 0; sensor < m_nSensors[layer]; sensor++) {
65 VxdID sensorID(layer + 3, ladder + 1, sensor + 1);
66 for (
bool isU : {
true,
false}) {
67 int nStrips = nStripsOnLayerSide(layer, isU);
68 for (
int strip = 0; strip < nStrips; strip++) {
69 if (!m_HotStripsCalib.isHot(sensorID, isU, strip) && !m_FADCMaskedStrips.isMasked(sensorID, isU, strip)) {
70 m_l3LadderSensorActiveStrips[ladder][sensor] ++;
79 void SVDHitRateCounter::clear()
84 void SVDHitRateCounter::accumulate(
unsigned timeStamp)
86 B2DEBUG(10,
"SVDHitRateCounter: accumulate()");
89 if (m_resultStoreObjectPointer.isValid()) {
90 const bool eventAccepted = SoftwareTrigger::FinalTriggerDecisionCalculator::getFinalTriggerDecision(*m_resultStoreObjectPointer);
91 if (!eventAccepted)
return;
95 if (m_digits.isValid()) {
98 auto& rates = m_buffer[timeStamp];
104 for (
const auto& digit : m_digits) {
106 VxdID sensorID = digit.getSensorID();
110 rates.layerAverageRates[layer] ++;
111 rates.layerLadderAverageRates[layer][ladder] ++;
112 rates.layerSensorAverageRates[layer][sensor] ++;
113 rates.averageRate ++;
115 rates.l3LadderSensorAverageRates[ladder][sensor] ++;
123 if (m_clusters.isValid()) {
126 auto& rates_highE = m_buffer_highE[timeStamp];
127 auto& rates_lowE = m_buffer_lowE[timeStamp];
130 rates_highE.numEvents++;
131 rates_lowE.numEvents++;
134 for (
const auto& cluster : m_clusters) {
135 VxdID sensorID = cluster.getSensorID();
139 if (cluster.getCharge() > m_thrCharge) {
140 rates_highE.layerAverageRates[layer] ++;
141 rates_highE.layerLadderAverageRates[layer][ladder] ++;
142 rates_highE.layerSensorAverageRates[layer][sensor] ++;
143 rates_highE.averageRate ++;
145 rates_highE.l3LadderSensorAverageRates[ladder][sensor] ++;
147 rates_lowE.layerAverageRates[layer] ++;
148 rates_lowE.layerLadderAverageRates[layer][ladder] ++;
149 rates_lowE.layerSensorAverageRates[layer][sensor] ++;
150 rates_lowE.averageRate ++;
152 rates_lowE.l3LadderSensorAverageRates[ladder][sensor] ++;
157 rates_highE.valid =
true;
158 rates_lowE.valid =
true;
163 void SVDHitRateCounter::normalize(
unsigned timeStamp)
165 B2DEBUG(10,
"SVDHitRateCounter: normalize()");
167 m_rates = m_buffer[timeStamp];
168 m_rates_highE = m_buffer_highE[timeStamp];
169 m_rates_lowE = m_buffer_lowE[timeStamp];
171 SVDHitRateCounter::normalize_rates(m_rates);
172 SVDHitRateCounter::normalize_rates(m_rates_highE);
173 SVDHitRateCounter::normalize_rates(m_rates_lowE);
178 if (not rates.
valid)
return;
185 for (
int layer = 0; layer < m_nLayers; layer++) {
187 for (
int ladder = 0; ladder < m_nLadders[layer]; ladder++) {
190 for (
int sensor = 0; sensor < m_nSensors[layer]; sensor++) {
195 for (
int ladder = 0; ladder < m_nLadders[layer]; ladder++) {
196 for (
int sensor = 0; sensor < m_nSensors[layer]; sensor++) {