9 #include <beast/qcsmonitor/modules/QcsmonitorStudyModule.h>
10 #include <beast/qcsmonitor/dataobjects/QcsmonitorSimHit.h>
11 #include <beast/qcsmonitor/dataobjects/QcsmonitorHit.h>
12 #include <generators/SAD/dataobjects/SADMetaHit.h>
13 #include <framework/datastore/StoreArray.h>
14 #include <framework/gearbox/GearDir.h>
15 #include <framework/logging/Logger.h>
16 #include <framework/gearbox/Const.h>
31 using namespace qcsmonitor;
45 setDescription(
"Study module for Qcsmonitors (BEAST)");
47 addParam(
"Ethres", m_Ethres,
"Energy threshold in MeV", 0.0);
50 QcsmonitorStudyModule::~QcsmonitorStudyModule()
55 void QcsmonitorStudyModule::defineHisto()
57 for (
int i = 0; i < 40; i++) {
58 h_qcss_Evtof1[i] =
new TH2F(TString::Format(
"qcss_Evtof1_%d", i),
"Energy deposited [MeV] vs TOF [ns] - all", 500, 0., 1000.,
60 h_qcss_Evtof2[i] =
new TH2F(TString::Format(
"qcss_Evtof2_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only photons", 500, 0.,
62 h_qcss_Evtof3[i] =
new TH2F(TString::Format(
"qcss_Evtof3_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only e+/e-", 500, 0.,
64 h_qcss_Evtof4[i] =
new TH2F(TString::Format(
"qcss_Evtof4_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only e+/e-", 500, 0.,
66 h_qcss_edep[i] =
new TH1F(TString::Format(
"qcss_edep_%d", i),
"Energy deposited [MeV]", 5000, 0., 10.);
67 h_Wqcss_edep[i] =
new TH1F(TString::Format(
"Wqcss_edep_%d", i),
"Energy deposited [MeV]", 5000, 0., 10.);
70 h_qcss_hitrate0 =
new TH1F(
"qcss_hitrate0",
"Hit distributions", 100, 0., 100.);
71 h_qcss_hitrate1 =
new TH1F(
"qcss_hitrate1",
"Hit distributions", 100, 0., 100.);
72 h_qcss_hitrate2 =
new TH1F(
"qcss_hitrate2",
"Hit distributions", 100, 0., 100.);
73 h_qcss_hitrate1W =
new TH1F(
"qcss_hitrate1W",
"Hit distributions", 100, 0., 100.);
74 h_qcss_hitrate2W =
new TH1F(
"qcss_hitrate2W",
"Hit distributions", 100, 0., 100.);
76 h_qcss_hitrate0->Sumw2();
77 h_qcss_hitrate1->Sumw2();
78 h_qcss_hitrate1W->Sumw2();
79 h_qcss_hitrate2->Sumw2();
80 h_qcss_hitrate2W->Sumw2();
82 h_qcss_rs_hitrate1 =
new TH2F(
"qcss_rs_hitrate1",
"Hit distributions vs rs", 100, 0., 100., 12, 0., 12.);
83 h_qcss_rs_hitrate2 =
new TH2F(
"qcss_rs_hitrate2",
"Hit distributions vs rs", 100, 0., 100., 12, 0., 12.);
84 h_qcss_rs_hitrate1W =
new TH2F(
"qcss_rs_hitrate1W",
"Hit distributions vs rs", 100, 0., 100., 12, 0., 12.);
85 h_qcss_rs_hitrate2W =
new TH2F(
"qcss_rs_hitrate2W",
"Hit distributions vs rs", 100, 0., 100., 12, 0., 12.);
87 h_qcss_rs_hitrate1->Sumw2();
88 h_qcss_rs_hitrate1W->Sumw2();
89 h_qcss_rs_hitrate2->Sumw2();
90 h_qcss_rs_hitrate2W->Sumw2();
92 for (
int i = 0; i < 40; i++) {
93 h_qcss_rate1[i] =
new TH1F(TString::Format(
"qcss_rate1_%d", i),
"PE distributions", 500, 0., 500.);
94 h_qcss_rate2[i] =
new TH1F(TString::Format(
"qcss_rate2_%d", i),
"PE distributions", 500, 0., 500.);
95 h_qcss_rate1W[i] =
new TH1F(TString::Format(
"qcss_rate1W_%d", i),
"PE distributions", 500, 0., 500.);
96 h_qcss_rate2W[i] =
new TH1F(TString::Format(
"qcss_rate2W_%d", i),
"PE distributions", 500, 0., 500.);
97 h_qcss_pe1[i] =
new TH2F(TString::Format(
"qcss_pe1_%d", i),
"PE distributions", 500, 0., 500., 100, 0., 1000.);
98 h_qcss_pe2[i] =
new TH2F(TString::Format(
"qcss_pe2_%d", i),
"PE distributions", 500, 0., 500., 100, 0., 1000.);
99 h_qcss_pe1W[i] =
new TH2F(TString::Format(
"qcss_pe1W_%d", i),
"PE distributions", 500, 0., 500., 100, 0., 1000.);
100 h_qcss_pe2W[i] =
new TH2F(TString::Format(
"qcss_pe2W_%d", i),
"PE distributions", 500, 0., 500., 100, 0., 1000.);
102 h_qcss_rs_rate1[i] =
new TH2F(TString::Format(
"qcss_rs_rate1_%d", i),
"PE distributions", 500, 0., 500., 12, 0., 12.);
103 h_qcss_rs_rate2[i] =
new TH2F(TString::Format(
"qcss_rs_rate2_%d", i),
"PE distributions", 500, 0., 500., 12, 0., 12.);
104 h_qcss_rs_rate1W[i] =
new TH2F(TString::Format(
"qcss_rs_rate1W_%d", i),
"PE distributions", 500, 0., 500., 12, 0., 12.);
105 h_qcss_rs_rate2W[i] =
new TH2F(TString::Format(
"qcss_rs_rate2W_%d", i),
"PE distributions", 500, 0., 500., 12, 0., 12.);
107 h_qcss_rate1[i]->Sumw2();
108 h_qcss_rate2[i]->Sumw2();
109 h_qcss_rate1W[i]->Sumw2();
110 h_qcss_rate2W[i]->Sumw2();
111 h_qcss_rs_rate1[i]->Sumw2();
112 h_qcss_rs_rate2[i]->Sumw2();
113 h_qcss_rs_rate1W[i]->Sumw2();
114 h_qcss_rs_rate2W[i]->Sumw2();
115 h_qcss_pe1[i]->Sumw2();
116 h_qcss_pe2[i]->Sumw2();
117 h_qcss_pe1W[i]->Sumw2();
118 h_qcss_pe2W[i]->Sumw2();
123 void QcsmonitorStudyModule::initialize()
125 B2INFO(
"QcsmonitorStudyModule: Initialize");
133 void QcsmonitorStudyModule::beginRun()
137 void QcsmonitorStudyModule::event()
145 int ring_section = -1;
146 for (
const auto& MetaHit : MetaHits) {
147 rate = MetaHit.getrate();
148 ring_section = MetaHit.getring_section() - 1;
155 for (
int i = 0; i < nSimHits; i++) {
164 h_qcss_hitrate0->Fill(detNB);
165 h_qcss_Evtof1[detNB]->Fill(tof, Edep);
166 if (pdg == Const::photon.getPDGCode()) h_qcss_Evtof2[detNB]->Fill(tof, Edep);
167 else if (fabs(pdg) == Const::electron.getPDGCode()) h_qcss_Evtof3[detNB]->Fill(tof, Edep);
168 else h_qcss_Evtof4[detNB]->Fill(tof, Edep);
169 if (Edep > m_Ethres) {
170 h_qcss_edep[detNB]->Fill(Edep);
171 h_Wqcss_edep[detNB]->Fill(Edep, rate);
176 for (
const auto&
Hit : Hits) {
177 const int detNb =
Hit.getdetNb();
179 const int timebin =
Hit.gettime();
180 const float edep =
Hit.getedep();
181 const float pe =
Hit.getPE();
182 h_qcss_hitrate1->Fill(detNb);
183 h_qcss_hitrate1W->Fill(detNb, rate);
184 h_qcss_rate1[detNb]->Fill(pe);
185 h_qcss_rate1W[detNb]->Fill(pe, rate);
186 h_qcss_rs_rate1[detNb]->Fill(pe, ring_section);
187 h_qcss_rs_rate1W[detNb]->Fill(pe, ring_section, rate);
188 h_qcss_rs_hitrate1->Fill(detNb, ring_section);
189 h_qcss_rs_hitrate1W->Fill(detNb, ring_section, rate);
190 h_qcss_pe1[detNb]->Fill(timebin, pe);
191 h_qcss_pe1W[detNb]->Fill(timebin, pe, rate);
192 if (edep > m_Ethres) {
193 h_qcss_hitrate2->Fill(detNb);
194 h_qcss_hitrate2W->Fill(detNb, rate);
195 h_qcss_rate2[detNb]->Fill(pe);
196 h_qcss_rate2W[detNb]->Fill(pe, rate);
197 h_qcss_rs_rate2[detNb]->Fill(pe, ring_section);
198 h_qcss_rs_rate2W[detNb]->Fill(pe, ring_section, rate);
199 h_qcss_rs_hitrate2->Fill(detNb, ring_section);
200 h_qcss_rs_hitrate2W->Fill(detNb, ring_section, rate);
201 h_qcss_pe2[detNb]->Fill(timebin, pe);
202 h_qcss_pe2W[detNb]->Fill(timebin, pe, rate);
210 void QcsmonitorStudyModule::getXMLData()
212 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"QCSMONITOR\"]/Content/");
213 m_Ethres = content.getDouble(
"Ethres");
215 B2INFO(
"QcsmonitorStudy");
219 void QcsmonitorStudyModule::endRun()
226 void QcsmonitorStudyModule::terminate()
GearDir is the basic class used for accessing the parameter store.
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
ClassQcsmonitorSimHit - Geant4 simulated hit for the Qcsmonitor crystal in beast.
int getPDGCode() const
Get Particle PDG (can be one of secondaries)
int getCellId() const
Get Cell ID.
double getFlightTime() const
Get Flight time from IP.
double getEnergyDep() const
Get Deposit energy.
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
Study module for Qcsmonitor (BEAST)
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.
Structure to hold some of the calpulse data.