12 #include <klm/calibration/KLMChannelStatusAlgorithm.h>
15 #include <framework/logging/Logger.h>
30 m_HitMapChannel = results.m_HitMapChannel;
31 m_HitMapModule = results.m_HitMapModule;
32 m_HitMapSector = results.m_HitMapSector;
33 m_HitMapModuleNoHot = results.m_HitMapModuleNoHot;
34 m_HitMapSectorNoHot = results.m_HitMapSectorNoHot;
35 m_ModuleActiveChannelMap = results.m_ModuleActiveChannelMap;
36 m_TotalHitNumber = results.m_TotalHitNumber;
37 m_HitNumberBKLM = results.m_HitNumberBKLM;
38 m_HitNumberEKLM = results.m_HitNumberEKLM;
39 m_HitNumberBKLMNoHot = results.m_HitNumberBKLMNoHot;
40 m_HitNumberEKLMNoHot = results.m_HitNumberEKLMNoHot;
45 if (m_ModuleStatus !=
nullptr)
46 delete m_ModuleStatus;
47 if (m_ChannelStatus !=
nullptr)
48 delete m_ChannelStatus;
63 uint16_t channel, module, sector;
64 unsigned int hits, moduleHits, maxHits;
70 std::shared_ptr<TTree> calibrationData;
71 calibrationData = getObjectPtr<TTree>(
"calibration_data");
72 calibrationData->SetBranchAddress(
"channel", &channel);
73 calibrationData->SetBranchAddress(
"hits", &hits);
74 int n = calibrationData->GetEntries();
79 for (
int i = 0; i < n; ++i) {
80 calibrationData->GetEntry(i);
101 channel = klmChannel.getKLMChannelNumber();
115 channel = klmChannel.getKLMChannelNumber();
116 module = klmChannel.getKLMModuleNumber();
117 sector = klmChannel.getKLMSectorNumber();
129 module = klmModule.getKLMModuleNumber();
135 if (moduleHits == 0) {
136 for (; klmChannel != klmNextModule; ++klmChannel) {
143 unsigned int activeChannels = 0;
144 for (; klmChannel != klmNextModule; ++klmChannel) {
153 klmChannel = klmModule;
156 for (; klmChannel != klmNextModule; ++klmChannel) {
162 if (hits > maxHits) {
163 klmChannelMaxHits = klmChannel;
170 moduleHits, activeChannels))
172 moduleHits -= maxHits;
184 channel = klmChannel.getKLMChannelNumber();
187 module = klmChannel.getKLMModuleNumber();
188 sector = klmChannel.getKLMSectorNumber();
200 int activeSectorsBKLM = 0;
201 int activeSectorsEKLM = 0;
203 sector = klmSector.getKLMSectorNumber();
212 double averageHitsActiveSector = 0;
213 if (activeSectorsBKLM > 0) {
218 bklmSector != klmSectors.
endBKLM(); ++bklmSector) {
219 sector = bklmSector.getKLMSectorNumber();
222 if (activeSectorsEKLM > 0) {
227 eklmSector != klmSectors.
endEKLM(); ++eklmSector) {
228 sector = eklmSector.getKLMSectorNumber();
237 bool notEnoughData =
false;
239 module = klmModule.getKLMModuleNumber();
247 unsigned int activeChannels = 0;
248 for (; klmChannel != klmNextModule; ++klmChannel) {
256 double averageHits = double(moduleHits) / activeChannels;
258 if (!notEnoughData) {
259 B2INFO(
"KLM module " << klmModule.getKLMModuleNumber() <<
260 " (subdetector " << klmModule.getSubdetector() <<
261 ", section " << klmModule.getSection() <<
262 ", sector " << klmModule.getSector() <<
263 ", layer " << klmModule.getLayer() <<
264 "): " << moduleHits <<
" hits, average: " << averageHits <<
".");
266 notEnoughData =
true;
269 klmChannel = klmModule;
271 for (; klmChannel != klmNextModule; ++klmChannel)
281 uint16_t sector,
double averageHitsActiveSector)
286 double r = log(hits / averageHitsActiveSector) / log(10.);
288 B2WARNING(
"Number of hits in sector " << sector <<
" (" << hits <<
289 ") strongly deviates from the average (" <<
290 averageHitsActiveSector <<
291 "), the 10-based logarithm of the ratio is " << r <<
".");
308 uint16_t channel,
unsigned int moduleHits,
int activeChannels)
311 if (activeChannels == 1) {
318 double r = hits / (double(moduleHits - hits) / (activeChannels - 1));