10 #include <svd/calibration/SVDHotStripsCalibrationsAlgorithm.h>
13 #include <svd/calibration/SVDHotStripsCalibrations.h>
16 #include <framework/logging/Logger.h>
23 SVDHotStripsCalibrationsAlgorithm::SVDHotStripsCalibrationsAlgorithm(
const std::string& str) :
37 double stripOccAfterAbsCut[768];
39 for (
int i = 0; i < 768; i++) { vecHS[i] = 0; stripOccAfterAbsCut[i] = 0;}
47 auto tree = getObjectPtr<TTree>(
"HTreeOccupancyCalib");
49 TH1F* hocc =
new TH1F(
"",
"", 768, 0, 768);
52 B2WARNING(
"No tree object.");
53 }
else if (!tree->GetEntries()) {
54 B2WARNING(
"No data in the tree.");
62 tree->SetBranchAddress(
"hist", &hocc);
63 tree->SetBranchAddress(
"layer", &layer);
64 tree->SetBranchAddress(
"ladder", &ladder);
65 tree->SetBranchAddress(
"sensor", &sensor);
66 tree->SetBranchAddress(
"view", &side);
69 for (
int i = 0; i < tree->GetEntries(); i++) {
72 if (!side && layer != 3) nstrips = 512;
74 for (
int iterStrip = 0; iterStrip < nstrips; iterStrip++) {
75 float occCal = hocc->GetBinContent(iterStrip + 1);
78 if (occCal > occThr) {
80 stripOccAfterAbsCut[iterStrip] = 0;
81 }
else stripOccAfterAbsCut[iterStrip] = occCal;
88 while (moreHS &&
theHSFinder(stripOccAfterAbsCut, vecHS, nstrips)) {
89 moreHS =
theHSFinder(stripOccAfterAbsCut, vecHS, nstrips);
92 for (
int l = 0; l < nstrips; l++) {
93 isHotStrip = (int) vecHS[l];
95 payload->set(layer, ladder, sensor,
bool(side), l, isHotStrip);
116 for (
int sector = 0; sector < N; sector++) {
119 double sensorOccAverage = 0;
122 sensorOccAverage = sensorOccAverage + stripOccAfterAbsCut[l];
123 if (stripOccAfterAbsCut[l] > 0) nafter++;
125 sensorOccAverage = sensorOccAverage / nafter;
127 B2DEBUG(1,
"Average occupancy: " << sensorOccAverage);
133 if (stripOccAfterAbsCut[l] > sensorOccAverage *
m_relOccPrec) {
136 stripOccAfterAbsCut[l] = 0;