12 #include <background/modules/BeamBkgHitRateMonitor/ECLHitRateCounter.h>
14 #include <ecl/dbobjects/ECLCrystalCalib.h>
15 #include <framework/database/DBObjPtr.h>
16 #include <framework/geometry/B2Vector3.h>
28 namespace Background {
30 void ECLHitRateCounter::initialize(TTree* tree)
37 tree->Branch(
"ecl", &m_rates,
"averageDspBkgRate[16]/F:numEvents/I:validDspRate/O");
41 ECLWaveformNoise(
"ECLWaveformRMS");
42 m_ADCtoEnergy.resize(8736);
43 if (ECLElectronicsCalib)
for (
int i = 0; i < 8736; i++) m_ADCtoEnergy[i] = ECLElectronicsCalib->getCalibVector()[i];
44 if (ECLECalib)
for (
int i = 0; i < 8736; i++) m_ADCtoEnergy[i] *= ECLECalib->getCalibVector()[i];
45 m_waveformNoise.resize(8736);
46 if (ECLWaveformNoise)
for (
int i = 0; i < 8736; i++) m_waveformNoise[i] = ECLWaveformNoise->getCalibVector()[i];
49 void ECLHitRateCounter::clear()
54 void ECLHitRateCounter::accumulate(
unsigned timeStamp)
57 if (not m_dsps.isValid())
return;
63 if (m_dsps.getEntries() == 8736) {
66 auto& rates = m_buffer[timeStamp];
71 for (
auto& aECLDsp : m_dsps) {
73 int nadc = aECLDsp.getNADCPoints();
74 int cellID = aECLDsp.getCellId();
75 int segmentNumber = findECLSegment(cellID);
76 int crysID = cellID - 1;
77 std::vector<int> dspAv = aECLDsp.getDspA();
80 double dspMean = (std::accumulate(dspAv.begin(), dspAv.begin() + nadc, 0.0)) / nadc;
82 for (
int v = 0; v < nadc; v++) {
83 wpsum += pow(dspAv[v] - dspMean, 2);
85 double dspRMS = sqrt(wpsum / nadc);
86 double dspSigma = dspRMS * abs(m_ADCtoEnergy[crysID]);
89 double dspBkgRate = ((pow(dspSigma, 2)) - (pow(m_waveformNoise[crysID], 2))) / (2.53 * 1e-12);
95 rates.averageDspBkgRate[segmentNumber] += dspBkgRate;
100 rates.validDspRate =
true;
104 void ECLHitRateCounter::normalize(
unsigned timeStamp)
107 m_rates = m_buffer[timeStamp];
109 if (not m_rates.validDspRate)
return;
115 for (
int i = 0; i < 16; i++) {
116 m_rates.averageDspBkgRate[i] /= m_crystalsInSegment[i];
121 void ECLHitRateCounter::segmentECL()
124 for (
int cid = 1; cid < 8737; cid++) {
125 m_geometry->Mapping(cid);
126 const B2Vector3D position = m_geometry->GetCrystalPos(cid - 1);
127 const double phi = position.
Phi();
128 const double z = position.
Z();
131 if (phi > 0.7853 && phi < 2.356) {
132 m_segmentMap.insert(std::pair<int, int>(cid, 0));
133 m_crystalsInSegment[0] += 1;
134 }
else if (phi >= 2.356 || phi <= -2.356) {
135 m_segmentMap.insert(std::pair<int, int>(cid, 1));
136 m_crystalsInSegment[1] += 1;
137 }
else if (phi > -2.356 && phi < -0.7853) {
138 m_segmentMap.insert(std::pair<int, int>(cid, 2));
139 m_crystalsInSegment[2] += 1;
141 m_segmentMap.insert(std::pair<int, int>(cid, 3));
142 m_crystalsInSegment[3] += 1;
144 }
else if (cid > 1152 && cid < 7777) {
146 if (phi > 0.7853 && phi < 2.356) {
147 m_segmentMap.insert(std::pair<int, int>(cid, 4));
148 m_crystalsInSegment[4] += 1;
149 }
else if (phi >= 2.356 || phi <= -2.356) {
150 m_segmentMap.insert(std::pair<int, int>(cid, 5));
151 m_crystalsInSegment[5] += 1;
152 }
else if (phi > -2.356 && phi < -0.7853) {
153 m_segmentMap.insert(std::pair<int, int>(cid, 6));
154 m_crystalsInSegment[6] += 1;
156 m_segmentMap.insert(std::pair<int, int>(cid, 7));
157 m_crystalsInSegment[7] += 1;
160 if (phi > 0.7853 && phi < 2.356) {
161 m_segmentMap.insert(std::pair<int, int>(cid, 8));
162 m_crystalsInSegment[8] += 1;
163 }
else if (phi >= 2.356 || phi <= -2.356) {
164 m_segmentMap.insert(std::pair<int, int>(cid, 9));
165 m_crystalsInSegment[9] += 1;
166 }
else if (phi > -2.356 && phi < -0.7853) {
167 m_segmentMap.insert(std::pair<int, int>(cid, 10));
168 m_crystalsInSegment[10] += 1;
170 m_segmentMap.insert(std::pair<int, int>(cid, 11));
171 m_crystalsInSegment[11] += 1;
175 if (phi > 0.7853 && phi < 2.356) {
176 m_segmentMap.insert(std::pair<int, int>(cid, 12));
177 m_crystalsInSegment[12] += 1;
178 }
else if (phi >= 2.356 || phi <= -2.356) {
179 m_segmentMap.insert(std::pair<int, int>(cid, 13));
180 m_crystalsInSegment[13] += 1;
181 }
else if (phi > -2.356 && phi < -0.7853) {
182 m_segmentMap.insert(std::pair<int, int>(cid, 14));
183 m_crystalsInSegment[14] += 1;
185 m_segmentMap.insert(std::pair<int, int>(cid, 15));
186 m_crystalsInSegment[15] += 1;