9 #include <beast/dosi/modules/DosiStudyModule.h>
10 #include <beast/dosi/dataobjects/DosiSimHit.h>
11 #include <beast/dosi/dataobjects/DosiHit.h>
13 #include <mdst/dataobjects/MCParticle.h>
14 #include <framework/datastore/StoreArray.h>
15 #include <framework/datastore/RelationIndex.h>
16 #include <framework/logging/Logger.h>
17 #include <framework/gearbox/Const.h>
29 #include <generators/SAD/dataobjects/SADMetaHit.h>
47 setDescription(
"Study module for Dosis (BEAST)");
50 DosiStudyModule::~DosiStudyModule()
55 void DosiStudyModule::defineHisto()
57 for (
int i = 0; i < 5; i++) {
75 h_dosi_edep0[i] =
new TH1F(TString::Format(
"dosi_edep0_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
76 h_dosi_edep1[i] =
new TH1F(TString::Format(
"dosi_edep1_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
77 h_dosi_edep2[i] =
new TH1F(TString::Format(
"dosi_edep2_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
78 h_dosi_edep3[i] =
new TH1F(TString::Format(
"dosi_edep3_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
79 h_dosi_edep4[i] =
new TH1F(TString::Format(
"dosi_edep4_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
80 h_dosi_edep5[i] =
new TH1F(TString::Format(
"dosi_edep5_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
81 h_dosi_edep6[i] =
new TH1F(TString::Format(
"dosi_edep6_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
82 h_dosi_edep7[i] =
new TH1F(TString::Format(
"dosi_edep7_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
83 h_dosi_edep8[i] =
new TH1F(TString::Format(
"dosi_edep8_%d", i),
"Energy deposited [MeV]", 50000, 0., 400.);
85 h_dosi_edep0[i]->Sumw2();
86 h_dosi_edep1[i]->Sumw2();
87 h_dosi_edep2[i]->Sumw2();
88 h_dosi_edep3[i]->Sumw2();
89 h_dosi_edep4[i]->Sumw2();
90 h_dosi_edep5[i]->Sumw2();
91 h_dosi_edep6[i]->Sumw2();
92 h_dosi_edep7[i]->Sumw2();
93 h_dosi_edep8[i]->Sumw2();
95 h_dosi_rs_edep0[i] =
new TH2F(TString::Format(
"dosi_rs_edep0_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
96 h_dosi_rs_edep1[i] =
new TH2F(TString::Format(
"dosi_rs_edep1_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
97 h_dosi_rs_edep2[i] =
new TH2F(TString::Format(
"dosi_rs_edep2_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
98 h_dosi_rs_edep3[i] =
new TH2F(TString::Format(
"dosi_rs_edep3_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
99 h_dosi_rs_edep4[i] =
new TH2F(TString::Format(
"dosi_rs_edep4_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
100 h_dosi_rs_edep5[i] =
new TH2F(TString::Format(
"dosi_rs_edep5_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
101 h_dosi_rs_edep6[i] =
new TH2F(TString::Format(
"dosi_rs_edep6_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
102 h_dosi_rs_edep7[i] =
new TH2F(TString::Format(
"dosi_rs_edep7_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
103 h_dosi_rs_edep8[i] =
new TH2F(TString::Format(
"dosi_rs_edep8_%d", i),
"Energy deposited [MeV]", 50000, 0., 400., 12, 0., 12.);
105 h_dosi_rs_edep0[i]->Sumw2();
106 h_dosi_rs_edep1[i]->Sumw2();
107 h_dosi_rs_edep2[i]->Sumw2();
108 h_dosi_rs_edep3[i]->Sumw2();
109 h_dosi_rs_edep4[i]->Sumw2();
110 h_dosi_rs_edep5[i]->Sumw2();
111 h_dosi_rs_edep6[i]->Sumw2();
112 h_dosi_rs_edep7[i]->Sumw2();
113 h_dosi_rs_edep8[i]->Sumw2();
119 void DosiStudyModule::initialize()
121 B2INFO(
"DosiStudyModule: Initialize");
133 void DosiStudyModule::beginRun()
137 void DosiStudyModule::event()
148 int ring_section = -1;
149 int section_ordering[12] = {1, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
150 for (
const auto& MetaHit : MetaHits) {
152 double sad_ssraw = MetaHit.getssraw();
154 if (sad_ssraw >= 0) ssraw = sad_ssraw / 100.;
155 else ssraw = 3000. + sad_ssraw / 100.;
157 ring_section = section_ordering[(int)((ssraw) / 250.)] - 1;
164 for (
const auto& SimHit : SimHits) {
165 const int detNB = SimHit.getCellId();
166 const double Edep = SimHit.getEnergyDep() * 1e3;
167 h_dosi_edep0[detNB]->Fill(Edep);
168 h_dosi_rs_edep0[detNB]->Fill(Edep, ring_section);
171 const float Mass = particle->getMass();
172 const float Energy = particle->getEnergy();
173 const float Kinetic = (Energy - Mass) * 1e3;
174 const int pdg = particle->getPDG();
175 h_dosi_edep1[detNB]->Fill(Edep);
176 if (0.005 <= Kinetic && Kinetic <= 10.0)
177 h_dosi_edep2[detNB]->Fill(Edep);
178 if (0.005 <= Kinetic && Kinetic <= 10.0 && (fabs(pdg) == Const::electron.getPDGCode()))
179 h_dosi_edep3[detNB]->Fill(Edep);
180 if (0.1 <= Kinetic && Kinetic <= 10.0 && (fabs(pdg) == Const::electron.getPDGCode()))
181 h_dosi_edep4[detNB]->Fill(Edep);
182 if (0.001 <= Kinetic && Kinetic <= 0.050)
183 h_dosi_edep5[detNB]->Fill(Edep);
184 if (pdg == Const::neutron.getPDGCode())
185 h_dosi_edep6[detNB]->Fill(Edep);
186 if (pdg == Const::neutron.getPDGCode() && (0.001 <= Kinetic && Kinetic <= 10.0))
187 h_dosi_edep7[detNB]->Fill(Edep);
190 h_dosi_rs_edep1[detNB]->Fill(Edep, ring_section);
191 if (0.005 <= Kinetic && Kinetic <= 10.0)
192 h_dosi_rs_edep2[detNB]->Fill(Edep, ring_section);
193 if (0.005 <= Kinetic && Kinetic <= 10.0 && (fabs(pdg) == Const::electron.getPDGCode()))
194 h_dosi_rs_edep3[detNB]->Fill(Edep, ring_section);
195 if (0.1 <= Kinetic && Kinetic <= 10.0 && (fabs(pdg) == Const::electron.getPDGCode()))
196 h_dosi_rs_edep4[detNB]->Fill(Edep, ring_section);
197 if (0.001 <= Kinetic && Kinetic <= 0.050)
198 h_dosi_rs_edep5[detNB]->Fill(Edep, ring_section);
199 if (pdg == Const::neutron.getPDGCode())
200 h_dosi_rs_edep6[detNB]->Fill(Edep, ring_section);
201 if (pdg == Const::neutron.getPDGCode() && (0.001 <= Kinetic && Kinetic <= 10.0))
202 h_dosi_rs_edep7[detNB]->Fill(Edep, ring_section);
217 void DosiStudyModule::endRun()
223 void DosiStudyModule::terminate()
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
A Class to store the Monte Carlo particle information.
Class to store a single element of a relation.
Provides access to fast ( O(log n) ) bi-directional lookups on a specified relation.
range_to getElementsTo(const TO *to) const
Return a range of all elements pointing to the given object.
Study module for Dosis (BEAST)
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.
Element type for the index.