9 #include <beast/claw/modules/ClawStudyModule.h>
10 #include <beast/claw/dataobjects/ClawSimHit.h>
11 #include <beast/claw/dataobjects/ClawHit.h>
12 #include <generators/SAD/dataobjects/SADMetaHit.h>
13 #include <framework/datastore/StoreArray.h>
14 #include <framework/gearbox/GearDir.h>
15 #include <framework/gearbox/Const.h>
16 #include <framework/logging/Logger.h>
45 setDescription(
"Study module for Claws (BEAST)");
47 addParam(
"Ethres", m_Ethres,
"Energy threshold in MeV", 0.0);
50 ClawStudyModule::~ClawStudyModule()
55 void ClawStudyModule::defineHisto()
57 for (
int i = 0; i < 8; i++) {
58 h_claws_Evtof1[i] =
new TH2F(TString::Format(
"claws_Evtof1_%d", i),
"Energy deposited [MeV] vs TOF [ns] - all", 5000, 0., 1000.,
60 h_claws_Evtof2[i] =
new TH2F(TString::Format(
"claws_Evtof2_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only photons", 5000, 0.,
61 1000., 1000, 0., 10.);
62 h_claws_Evtof3[i] =
new TH2F(TString::Format(
"claws_Evtof3_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only e+/e-", 5000, 0.,
63 1000., 1000, 0., 10.);
64 h_claws_Evtof4[i] =
new TH2F(TString::Format(
"claws_Evtof4_%d", i),
"Energy deposited [MeV] vs TOF [ns] - only e+/e-", 5000, 0.,
65 1000., 1000, 0., 10.);
66 h_claws_edep[i] =
new TH1F(TString::Format(
"claws_edep_%d", i),
"Energy deposited [MeV]", 5000, 0., 10.);
67 h_Wclaws_edep[i] =
new TH1F(TString::Format(
"Wclaws_edep_%d", i),
"Energy deposited [MeV]", 5000, 0., 10.);
70 h_claws_hitrate1 =
new TH1F(
"claws_hitrate1",
"Hit distributions", 8, 0., 8.);
71 h_claws_hitrate2 =
new TH1F(
"claws_hitrate2",
"Hit distributions", 8, 0., 8.);
72 h_claws_hitrate1W =
new TH1F(
"claws_hitrate1W",
"Hit distributions", 8, 0., 8.);
73 h_claws_hitrate2W =
new TH1F(
"claws_hitrate2W",
"Hit distributions", 8, 0., 8.);
75 h_claws_hitrate1->Sumw2();
76 h_claws_hitrate1W->Sumw2();
77 h_claws_hitrate2->Sumw2();
78 h_claws_hitrate2W->Sumw2();
80 h_claws_rs_hitrate1 =
new TH2F(
"claws_rs_hitrate1",
"Hit distributions vs rs", 8, 0., 8., 12, 0., 12.);
81 h_claws_rs_hitrate2 =
new TH2F(
"claws_rs_hitrate2",
"Hit distributions vs rs", 8, 0., 8., 12, 0., 12.);
82 h_claws_rs_hitrate1W =
new TH2F(
"claws_rs_hitrate1W",
"Hit distributions vs rs", 8, 0., 8., 12, 0., 12.);
83 h_claws_rs_hitrate2W =
new TH2F(
"claws_rs_hitrate2W",
"Hit distributions vs rs", 8, 0., 8., 12, 0., 12.);
85 h_claws_rs_hitrate1->Sumw2();
86 h_claws_rs_hitrate1W->Sumw2();
87 h_claws_rs_hitrate2->Sumw2();
88 h_claws_rs_hitrate2W->Sumw2();
90 for (
int i = 0; i < 8; i++) {
91 h_claws_rate1[i] =
new TH1F(TString::Format(
"claws_rate1_%d", i),
"PE distributions", 5000, 0., 5000.);
92 h_claws_rate2[i] =
new TH1F(TString::Format(
"claws_rate2_%d", i),
"PE distributions", 5000, 0., 5000.);
93 h_claws_rate1W[i] =
new TH1F(TString::Format(
"claws_rate1W_%d", i),
"PE distributions", 5000, 0., 5000.);
94 h_claws_rate2W[i] =
new TH1F(TString::Format(
"claws_rate2W_%d", i),
"PE distributions", 5000, 0., 5000.);
95 h_claws_pe1[i] =
new TH2F(TString::Format(
"claws_pe1_%d", i),
"PE distributions", 5000, 0., 5000., 1000, 0., 1000.);
96 h_claws_pe2[i] =
new TH2F(TString::Format(
"claws_pe2_%d", i),
"PE distributions", 5000, 0., 5000., 1000, 0., 1000.);
97 h_claws_pe1W[i] =
new TH2F(TString::Format(
"claws_pe1W_%d", i),
"PE distributions", 5000, 0., 5000., 1000, 0., 1000.);
98 h_claws_pe2W[i] =
new TH2F(TString::Format(
"claws_pe2W_%d", i),
"PE distributions", 5000, 0., 5000., 1000, 0., 1000.);
100 h_claws_rs_rate1[i] =
new TH2F(TString::Format(
"claws_rs_rate1_%d", i),
"PE distributions", 5000, 0., 5000., 12, 0., 12.);
101 h_claws_rs_rate2[i] =
new TH2F(TString::Format(
"claws_rs_rate2_%d", i),
"PE distributions", 5000, 0., 5000., 12, 0., 12.);
102 h_claws_rs_rate1W[i] =
new TH2F(TString::Format(
"claws_rs_rate1W_%d", i),
"PE distributions", 5000, 0., 5000., 12, 0., 12.);
103 h_claws_rs_rate2W[i] =
new TH2F(TString::Format(
"claws_rs_rate2W_%d", i),
"PE distributions", 5000, 0., 5000., 12, 0., 12.);
105 h_claws_rate1[i]->Sumw2();
106 h_claws_rate2[i]->Sumw2();
107 h_claws_rate1W[i]->Sumw2();
108 h_claws_rate2W[i]->Sumw2();
109 h_claws_rs_rate1[i]->Sumw2();
110 h_claws_rs_rate2[i]->Sumw2();
111 h_claws_rs_rate1W[i]->Sumw2();
112 h_claws_rs_rate2W[i]->Sumw2();
113 h_claws_pe1[i]->Sumw2();
114 h_claws_pe2[i]->Sumw2();
115 h_claws_pe1W[i]->Sumw2();
116 h_claws_pe2W[i]->Sumw2();
121 void ClawStudyModule::initialize()
123 B2INFO(
"ClawStudyModule: Initialize");
131 void ClawStudyModule::beginRun()
135 void ClawStudyModule::event()
143 int ring_section = -1;
144 for (
const auto& MetaHit : MetaHits) {
145 rate = MetaHit.getrate();
146 ring_section = MetaHit.getring_section() - 1;
153 for (
int i = 0; i < (int) SimHits.
getEntries(); i++) {
162 h_claws_Evtof1[detNB]->Fill(tof, Edep);
163 if (pdg == Const::photon.getPDGCode()) h_claws_Evtof2[detNB]->Fill(tof, Edep);
164 else if (fabs(pdg) == Const::electron.getPDGCode()) h_claws_Evtof3[detNB]->Fill(tof, Edep);
165 else h_claws_Evtof4[detNB]->Fill(tof, Edep);
166 if (Edep > m_Ethres) {
167 h_claws_edep[detNB]->Fill(Edep);
168 h_Wclaws_edep[detNB]->Fill(Edep, rate);
173 for (
const auto&
Hit : Hits) {
174 const int detNb =
Hit.getdetNb();
176 const int timebin =
Hit.gettime();
177 const float edep =
Hit.getedep();
178 const float pe =
Hit.getPE();
179 h_claws_hitrate1->Fill(detNb);
180 h_claws_hitrate1W->Fill(detNb, rate);
181 h_claws_rate1[detNb]->Fill(pe);
182 h_claws_rate1W[detNb]->Fill(pe, rate);
183 h_claws_rs_rate1[detNb]->Fill(pe, ring_section);
184 h_claws_rs_rate1W[detNb]->Fill(pe, ring_section, rate);
185 h_claws_rs_hitrate1->Fill(detNb, ring_section);
186 h_claws_rs_hitrate1W->Fill(detNb, ring_section, rate);
187 h_claws_pe1[detNb]->Fill(timebin, pe);
188 h_claws_pe1W[detNb]->Fill(timebin, pe, rate);
189 if (edep > m_Ethres) {
190 h_claws_hitrate2->Fill(detNb);
191 h_claws_hitrate2W->Fill(detNb, rate);
192 h_claws_rate2[detNb]->Fill(pe);
193 h_claws_rate2W[detNb]->Fill(pe, rate);
194 h_claws_rs_rate2[detNb]->Fill(pe, ring_section);
195 h_claws_rs_rate2W[detNb]->Fill(pe, ring_section, rate);
196 h_claws_rs_hitrate2->Fill(detNb, ring_section);
197 h_claws_rs_hitrate2W->Fill(detNb, ring_section, rate);
198 h_claws_pe2[detNb]->Fill(timebin, pe);
199 h_claws_pe2W[detNb]->Fill(timebin, pe, rate);
207 void ClawStudyModule::getXMLData()
209 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"CLAW\"]/Content/");
210 m_Ethres = content.getDouble(
"Ethres");
216 void ClawStudyModule::endRun()
223 void ClawStudyModule::terminate()
ClassClawSimHit - Geant4 simulated hit for the Claw 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.
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...
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
Study module for Claws (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.