11 #include <beast/he3tube/modules/He3tubeStudyModule.h>
12 #include <beast/he3tube/dataobjects/He3tubeSimHit.h>
13 #include <beast/he3tube/dataobjects/He3tubeHit.h>
14 #include <beast/he3tube/dataobjects/HE3G4TrackInfo.h>
15 #include <generators/SAD/dataobjects/SADMetaHit.h>
16 #include <framework/datastore/StoreArray.h>
17 #include <framework/logging/Logger.h>
36 using namespace he3tube;
50 setDescription(
"Study module for He3tubes (BEAST)");
53 addParam(
"sampleTime", m_sampletime,
"Length of sample, in us", 10000);
57 He3tubeStudyModule::~He3tubeStudyModule()
62 void He3tubeStudyModule::defineHisto()
64 for (
int i = 0 ; i < 9 ; i++) {
65 h_mche3_kinetic[i] =
new TH1F(TString::Format(
"h_mche3_kinetic_%d", i),
"MC kin. energy [GeV]", 1000, 0., 10.);
66 h_mche3_kinetic_zoom[i] =
new TH1F(TString::Format(
"h_mche3_kinetic_zoom_%d", i),
"MC kin. energy [MeV]", 1000, 0., 10.);
67 h_mche3_tvp[i] =
new TH2F(TString::Format(
"h_mche3_tvp_%d", i),
"theta v phi", 180, 0., 180., 360, -180., 180.);
68 h_mche3_tvpW[i] =
new TH2F(TString::Format(
"h_mche3_tvpW_%d", i),
"theta v phi weighted by kin", 180, 0., 180., 360, -180., 180.);
69 h_mche3_zr[i] =
new TH2F(TString::Format(
"h_mche3_zr_%d", i),
"r v z", 200, -400., 400., 200, 0., 400.);
70 h_mche3_kinetic[i]->Sumw2();
71 h_mche3_kinetic_zoom[i]->Sumw2();
72 h_mche3_tvp[i]->Sumw2();
73 h_mche3_tvpW[i]->Sumw2();
74 h_mche3_zr[i]->Sumw2();
77 h_NeutronHits =
new TH1F(
"NeutronHits",
"Neutron Hits;Tube ", 4, -0.5, 3.5);
78 h_NeutronHitsWeighted =
new TH1F(
"NeutronHitsWeighted",
"Neutron Hits;Tube ", 4, -0.5, 3.5);
79 h_DefNeutronHits =
new TH1F(
"DefNeutronHits",
"Definite Neutron Hits;Tube ", 4, -0.5, 3.5);
80 h_DefNeutronHitsWeighted =
new TH1F(
"DefNeutronHitsWeighted",
"Definite Neutron Hits;Tube ", 4, -0.5, 3.5);
81 h_NeutronRate =
new TH1F(
"NeutronRate",
"Neutron Hits per second;Tube; Rate (Hz)", 4, -0.5, 3.5);
82 h_DefNeutronRate =
new TH1F(
"DefNeutronRate",
"Neutron Hits per second;Tube; Rate (Hz)", 4, -0.5, 3.5);
84 h_NeutronHitsVrs =
new TH2F(
"NeutronHitsVrs",
"Neutron Hits;Tube ", 4, -0.5, 3.5, 12, 0., 12.);
85 h_NeutronHitsWeightedVrs =
new TH2F(
"NeutronHitsWeightedVrs",
"Neutron Hits;Tube ", 4, -0.5, 3.5, 12, 0., 12.);
86 h_DefNeutronHitsVrs =
new TH2F(
"DefNeutronHitsVrs",
"Definite Neutron Hits;Tube ", 4, -0.5, 3.5, 12, 0., 12.);
87 h_DefNeutronHitsWeightedVrs =
new TH2F(
"DefNeutronHitsWeightedVrs",
"Definite Neutron Hits;Tube ", 4, -0.5, 3.5, 12, 0., 12.);
88 h_NeutronRateVrs =
new TH2F(
"NeutronRateVrs",
"Neutron Hits per second;Tube; Rate (Hz)", 4, -0.5, 3.5, 12, 0., 12.);
89 h_DefNeutronRateVrs =
new TH2F(
"DefNeutronRateVrs",
"Neutron Hits per second;Tube; Rate (Hz)", 4, -0.5, 3.5, 12, 0., 12.);
91 h_Edep1H3H =
new TH1F(
"Edep1H3H" ,
"Energy deposited by Proton and Tritium; MeV", 100, 0.7, 0.8);
92 h_Edep1H3H_detNB =
new TH1F(
"Edep1H3H_tube",
"Energy deposited by Proton and Tritium in each tube;Tube Num; MeV", 4, -0.5, 3.5);
93 h_Edep1H =
new TH1F(
"Edep1H" ,
"Energy deposited by Protons;MeV", 100, 0, 0.7);
94 h_Edep3H =
new TH1F(
"Edep3H" ,
"Energy deposited by Tritiums;MeV", 100, 0, 0.4);
95 h_TotEdep =
new TH1F(
"TotEdep" ,
"Total energy deposited;MeV", 100, 0, 1.5);
96 h_DetN_Edep =
new TH1F(
"DetN_Edep" ,
"Energy deposited vs detector number;Tube Num;MeV", 4, -0.5, 3.5);
98 h_PulseHeights_NotNeutron =
new TH1F(
"PulseHeights_NotNeutron",
"Pulse height of waveforms from non-neutron events", 100, 0, 18000);
99 h_PulseHeights_Neutron =
new TH1F(
"PulseHeights_Neutron" ,
"Pulse height of waveforms from neutron events", 100, 0, 18000);
100 h_PulseHeights_DefNeutron =
new TH1F(
"PulseHeights_DefNeutron" ,
"Pulse height of waveforms from definite neutron events", 100,
102 h_PulseHeights_All =
new TH1F(
"PulseHeights_All" ,
"Pulse height of waveforms from all events", 100, 0, 18000);
104 h_DefNeutronHits->Sumw2();
105 h_DefNeutronRate->Sumw2();
106 h_DefNeutronHitsWeighted->Sumw2();
107 h_NeutronHits->Sumw2();
108 h_NeutronRate->Sumw2();
109 h_NeutronHitsWeighted->Sumw2();
111 h_DefNeutronHitsVrs->Sumw2();
112 h_DefNeutronRateVrs->Sumw2();
113 h_DefNeutronHitsWeightedVrs->Sumw2();
114 h_NeutronHitsVrs->Sumw2();
115 h_NeutronRateVrs->Sumw2();
116 h_NeutronHitsWeightedVrs->Sumw2();
121 void He3tubeStudyModule::initialize()
123 B2INFO(
"He3tubeStudyModule: Initialize");
128 rateCorrection = m_sampletime / 1e6;
131 void He3tubeStudyModule::beginRun()
135 void He3tubeStudyModule::event()
146 int ring_section = -1;
147 for (
const auto& MetaHit : MetaHits) {
148 rate = MetaHit.getrate();
149 ring_section = MetaHit.getring_section() - 1;
152 for (
const auto& mcpart : mcparts) {
153 const double energy = mcpart.getEnergy();
154 const double mass = mcpart.getMass();
155 double kin = energy - mass;
156 const double PDG = mcpart.getPDG();
157 const TVector3 vtx = mcpart.getProductionVertex();
158 const TVector3 mom = mcpart.getMomentum();
159 double theta = mom.Theta() * TMath::RadToDeg();
160 double phi = mom.Phi() * TMath::RadToDeg();
162 double r = sqrt(vtx.X() * vtx.X() + vtx.Y() * vtx.Y());
int partID[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
164 if (PDG == 11) partID[0] = 1;
165 else if (PDG == -11) partID[1] = 1;
166 else if (PDG == 22) partID[2] = 1;
167 else if (PDG == 2112) partID[3] = 1;
168 else if (PDG == 2212) partID[4] = 1;
169 else if (PDG == 1000080160) partID[5] = 1;
170 else if (PDG == 1000060120) partID[6] = 1;
171 else if (PDG == 1000020040) partID[7] = 1;
173 for (
int i = 0; i < 9; i++) {
174 if (partID[i] == 1) {
175 h_mche3_kinetic[i]->Fill(kin);
176 h_mche3_kinetic_zoom[i]->Fill(kin * 1e3);
177 h_mche3_tvp[i]->Fill(theta, phi);
178 h_mche3_tvpW[i]->Fill(theta, phi, kin);
179 h_mche3_zr[i]->Fill(z, r);
186 double edepSum_1H = 0;
187 double edepSum_3H = 0;
188 double totedepSum = 0;
189 double totedepDet[4] = {0};
191 bool ContainsP[4] = {
false};
192 bool Contains3H[4] = {
false};
194 for (
int i = 0; i < simHits.
getEntries(); i++) {
201 B2WARNING(
"Hit registered in undefined tube, ignoring");
207 h_DetN_Edep->AddBinContent(detNB + 1, edep);
208 totedepSum = totedepSum + edep;
209 totedepDet[detNB] = totedepDet[detNB] + edep;
213 ContainsP[detNB] =
true;
215 h_Edep1H3H_detNB->AddBinContent(detNB + 1, edep);
216 edepSum_1H = edepSum_1H + edep;
217 edepSum = edepSum + edep;
221 if (PID == 1000010030) {
222 Contains3H[detNB] =
true;
224 h_Edep1H3H_detNB->AddBinContent(detNB + 1, edep);
225 edepSum_3H = edepSum_3H + edep;
226 edepSum = edepSum + edep;
232 if (totedepSum != 0) h_TotEdep->Fill(totedepSum);
233 if (edepSum != 0) h_Edep1H3H->Fill(edepSum);
234 if (edepSum_1H != 0) h_Edep1H->Fill(edepSum_1H);
235 if (edepSum_3H != 0) h_Edep3H->Fill(edepSum_3H);
238 int neutronStatus = 0;
246 h_DefNeutronHits->Fill(aHit->
getdetNb());
247 h_DefNeutronHitsWeighted->Fill(aHit->
getdetNb(), rate);
248 h_DefNeutronRate->Fill(aHit->
getdetNb(), 1 / rateCorrection);
249 h_DefNeutronHitsVrs->Fill(aHit->
getdetNb(), ring_section);
250 h_DefNeutronHitsWeightedVrs->Fill(aHit->
getdetNb(), ring_section, rate);
251 h_DefNeutronRateVrs->Fill(aHit->
getdetNb(), ring_section, 1 / rateCorrection);
252 h_PulseHeights_DefNeutron->Fill(aHit->
getPeakV());
258 if (neutronStatus == 0) neutronStatus = 2;
260 h_PulseHeights_Neutron->Fill(aHit->
getPeakV());
261 h_NeutronHits->Fill(aHit->
getdetNb());
262 h_NeutronRate->Fill(aHit->
getdetNb(), 1 / rateCorrection);
263 h_NeutronHitsWeighted->Fill(aHit->
getdetNb(), rate);
264 h_NeutronHitsVrs->Fill(aHit->
getdetNb(), ring_section);
265 h_NeutronRateVrs->Fill(aHit->
getdetNb(), ring_section, 1 / rateCorrection);
266 h_NeutronHitsWeightedVrs->Fill(aHit->
getdetNb(), ring_section, rate);
269 h_PulseHeights_NotNeutron->Fill(aHit->
getPeakV());
271 h_PulseHeights_All->Fill(aHit->
getPeakV());
275 if (neutronStatus == 1) B2DEBUG(80,
"He3tubeStudyModule: Definite Neutron in tube #" << tubeNum);
276 else if (neutronStatus == 2) B2DEBUG(80,
"He3tubeStudyModule: Possible Neutron in tube #" << tubeNum);
278 for (
int i = 0; i < 4; i++) {
279 if (ContainsP[i]) nPhits++;
280 if (Contains3H[i]) n3Hhits++;
289 void He3tubeStudyModule::endRun()
292 B2RESULT(
"He3tubeStudyModule: # of neutrons: " << nNeutronHits);
293 B2RESULT(
" # of definite neutrons " << nDefiniteNeutron);
294 B2RESULT(
" # of 3H hits: " << n3Hhits);
295 B2RESULT(
" # of H hits: " << nPhits);
301 void He3tubeStudyModule::terminate()