10 #include <dqm/analysis/modules/DQMHistAnalysisKLM2.h>
13 #include <klm/dataobjects/KLMChannelIndex.h>
27 m_PlaneLine.SetLineColor(kMagenta);
28 m_PlaneLine.SetLineWidth(1);
29 m_PlaneLine.SetLineStyle(2);
30 m_PlaneText.SetTextAlign(22);
31 m_PlaneText.SetTextColor(kMagenta);
32 m_PlaneText.SetTextFont(42);
33 m_PlaneText.SetTextSize(0.02);
43 m_c_eff_bklm =
new TCanvas(
"KLMEfficiencyDQM/c_eff_bklm_plane");
44 m_c_eff_eklm =
new TCanvas(
"KLMEfficiencyDQM/c_eff_eklm_plane");
48 m_eff_bklm =
new TH1F(
"KLMEfficiencyDQM/eff_bklm_plane",
49 "Plane Efficiency in BKLM",
51 m_eff_bklm->GetXaxis()->SetTitle(
"Layer number");
55 m_eff_eklm =
new TH1F(
"KLMEfficiencyDQM/eff_eklm_plane",
56 "Plane Efficiency in EKLM",
58 m_eff_eklm->GetXaxis()->SetTitle(
"Plane number");
63 "Sector Efficiency in BKLM",
70 "Sector Efficiency in EKLM",
96 const std::string& histName, TH1* histogram)
99 const double histMinNDC = 0.1;
100 const double histMaxNDC = 0.9;
101 const double histRangeNDC = histMaxNDC - histMinNDC;
103 TCanvas* canvas =
findCanvas(
"KLMEfficiencyDQM/c_" + histName);
104 if (canvas == NULL) {
105 B2ERROR(
"KLMDQM2 histogram canvas KLMEfficiencyDQM/c_" << histName <<
" is not found.");
110 histogram->SetStats(
false);
112 if (histName.find(
"bklm") != std::string::npos) {
116 double xLineNDC = histMinNDC + (histRangeNDC * sector) / maximalSector;
117 double xTextNDC = histMinNDC + (histRangeNDC * (sector + 0.5)) / maximalSector;
118 double yTextNDC = histMinNDC + 0.98 * histRangeNDC;
120 m_PlaneLine.DrawLineNDC(xLineNDC, histMinNDC, xLineNDC, histMaxNDC);
126 name += std::to_string(sector % 8);
127 m_PlaneText.DrawTextNDC(xTextNDC, yTextNDC, name.c_str());
133 for (
int layerGlobal = 1; layerGlobal <= maximalLayer; ++layerGlobal) {
134 double xLineNDC = histMinNDC + (histRangeNDC * layerGlobal) / maximalLayer;
135 double xTextNDC = histMinNDC + (histRangeNDC * (layerGlobal - 0.5)) / maximalLayer;
136 double yTextNDC = histMinNDC + 0.98 * histRangeNDC;
137 if (layerGlobal < maximalLayer)
138 m_PlaneLine.DrawLineNDC(xLineNDC, histMinNDC, xLineNDC, histMaxNDC);
141 layerGlobal, §ion, &layer);
146 name += std::to_string(layer);
147 m_PlaneText.DrawTextNDC(xTextNDC, yTextNDC, name.c_str());
157 TH1* daqInclusion =
findHist(
"KLM/daq_inclusion");
158 if (not(daqInclusion == NULL)) {
159 int isKlmIncluded = daqInclusion->GetBinContent(daqInclusion->GetXaxis()->FindBin(
"Yes"));
160 if (isKlmIncluded == 0)
171 TH1F* all_ext_bklm = (TH1F*)
findHist(
"KLMEfficiencyDQM/all_ext_hitsBKLM");
172 TH1F* matched_hits_bklm = (TH1F*)
findHist(
"KLMEfficiencyDQM/matched_hitsBKLM");
174 TH1F* all_ext_eklm = (TH1F*)
findHist(
"KLMEfficiencyDQM/all_ext_hitsEKLM");
175 TH1F* matched_hits_eklm = (TH1F*)
findHist(
"KLMEfficiencyDQM/matched_hitsEKLM");
178 TH1F* all_ext_bklm_sector = (TH1F*)
findHist(
"KLMEfficiencyDQM/all_ext_hitsBKLMSector");
179 TH1F* matched_hits_bklm_sector = (TH1F*)
findHist(
"KLMEfficiencyDQM/matched_hitsBKLMSector");
181 TH1F* all_ext_eklm_sector = (TH1F*)
findHist(
"KLMEfficiencyDQM/all_ext_hitsEKLMSector");
182 TH1F* matched_hits_eklm_sector = (TH1F*)
findHist(
"KLMEfficiencyDQM/matched_hitsEKLMSector");
185 if ((all_ext_bklm ==
nullptr || matched_hits_bklm ==
nullptr) && (
m_IsPhysicsRun)) {
186 B2INFO(
"Histograms needed for BKLM plane efficiency computation are not found");
189 if ((all_ext_eklm ==
nullptr || matched_hits_eklm ==
nullptr) && (
m_IsPhysicsRun)) {
190 B2INFO(
"Histograms needed for EKLM plane efficiency computation are not found");
192 if ((all_ext_bklm_sector ==
nullptr || matched_hits_bklm_sector ==
nullptr) && (
m_IsPhysicsRun)) {
193 B2INFO(
"Histograms needed for BKLM sector efficiency computation are not found");
195 if ((all_ext_eklm_sector ==
nullptr || matched_hits_eklm_sector ==
nullptr) && (
m_IsPhysicsRun)) {
196 B2INFO(
"Histograms needed for EKLM sector efficiency computation are not found");
201 all_ext_bklm, 1, 1,
"B");
203 all_ext_eklm, 1, 1,
"B");
206 all_ext_bklm_sector, 1, 1,
"B");
208 all_ext_eklm_sector, 1, 1,
"B");
static constexpr int getMaximalLayerGlobalNumber()
Get maximal layer global number.
static constexpr int getMaximalSectorGlobalNumber()
Get maximal sector global number.
Analysis of KLM DQM histograms.
TLine m_PlaneLine
TLine for boundary in plane histograms.
~DQMHistAnalysisKLM2Module()
Destructor.
TH1 * m_eff_bklm_sector
Histogram for BKLM sector efficiency.
void processPlaneHistogram(const std::string &histName, TH1 *histogram)
Process histogram containing the number of hits in plane.
bool m_IsPhysicsRun
Run type flag for null runs.
void initialize() override
Initializer.
void event() override
This method is called for each event.
TH1 * m_eff_eklm
Histogram for EKLM plane efficiency.
TCanvas * m_c_eff_eklm_sector
Histogram for EKLM sector efficiency.
void endRun() override
This method is called if the current run ends.
const EKLMElementNumbers * m_EklmElementNumbers
EKLM element numbers.
TH1 * m_eff_eklm_sector
Histogram for EKLM sector efficiency.
void terminate() override
This method is called at the end of the event processing.
TCanvas * m_c_eff_bklm_sector
Histogram for BKLM sector efficiency.
TString m_RunTypeString
String with run type.
void beginRun() override
Called when entering a new run.
TH1 * m_eff_bklm
Histogram for BKLM plane efficiency.
TCanvas * m_c_eff_bklm
BKLM plane efficiency canvas.
TText m_PlaneText
TText for names in plane histograms.
TCanvas * m_c_eff_eklm
EKLM plane efficiency canvas.
TH1 * m_RunType
Histogram from DQMInfo with run type.
The base class for the histogram analysis module.
TCanvas * findCanvas(TString cname)
Find canvas by name.
static TH1 * findHist(const std::string &histname)
Find histogram.
static constexpr int getMaximalLayerGlobalNumber()
Get maximal detector layer global number.
static const EKLMElementNumbers & Instance()
Instantiation.
void layerNumberToElementNumbers(int layerGlobal, int *section, int *layer) const
Get element numbers by detector layer global number.
static constexpr int getMaximalPlaneGlobalNumber()
Get maximal plane global number.
@ c_BackwardSection
Backward.
static constexpr int getMaximalSectorGlobalNumberKLMOrder()
Get maximal sector global number with KLM ordering (section, sector).
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.