9#include <beast/analysis/modules/AnalysisPhase1StudyModule.h>
10#include <mdst/dataobjects/MCParticle.h>
11#include <generators/SAD/dataobjects/SADMetaHit.h>
12#include <framework/datastore/StoreArray.h>
13#include <framework/logging/Logger.h>
14#include <framework/gearbox/Const.h>
47AnalysisPhase1StudyModule::~AnalysisPhase1StudyModule()
54 h_count =
new TH1F(
"h_count",
"", 10, 0., 10.);
55 for (
int i = 0; i < 10; i++) {
56 h_prodvtx[i] =
new TH2F(TString::Format(
"h_prodvtx_%d", i),
"", 200, -400., 400., 200, 0., 400.);
57 h_decavtx[i] =
new TH2F(TString::Format(
"h_decavtx_%d", i),
"", 200, -400., 400., 200, 0., 400.);
58 h_kineticvz[i] =
new TH2F(TString::Format(
"h_kineticvz_%d", i),
"", 200, -400., 400., 1000, 0., 10.);
59 h_kineticvz1[i] =
new TH2F(TString::Format(
"h_kineticvz1_%d", i),
"", 200, -400., 400., 1000, 0., 10.);
60 h_kineticvz2[i] =
new TH2F(TString::Format(
"h_kineticvz2_%d", i),
"", 200, -400., 400., 1000, 0., 10.);
61 h_kineticvz_zoom[i] =
new TH2F(TString::Format(
"h_kineticvz_zoom_%d", i),
"", 200, -400., 400., 1000, 0., 0.01);
62 h_Wkineticvz[i] =
new TH2F(TString::Format(
"h_Wkineticvz_%d", i),
"", 200, -400., 400., 1000, 0., 10.);
63 h_Wkineticvz_zoom[i] =
new TH2F(TString::Format(
"h_Wkineticvz_zoom_%d", i),
"", 200, -400., 400., 1000, 0., 0.01);
64 h_phive[i] =
new TH2F(TString::Format(
"h_phive_%d", i),
"", 360, -180., 180., 1000, 0., 10.);
65 h_phivz[i] =
new TH2F(TString::Format(
"h_phivz_%d", i),
"", 200, -400., 400., 360, -180., 180.);
66 h_rve[i] =
new TH2F(TString::Format(
"h_rve_%d", i),
"", 200, 0., 200., 1000, 0., 10.);
67 h_thetavz[i] =
new TH2F(TString::Format(
"h_thetavz_%d", i),
"", 200, -400., 400., 180, 0., 180.);
78 h_g4_xy =
new TH2F(
"h_g4_xy",
"", 100, -5.99, 5.99, 100, -5.99, 5.99);
79 for (
int i = 0; i < 2; i++) {
80 h_sad_xy[i] =
new TH2F(TString::Format(
"h_sad_xy_%d", i),
"", 100, -5.99, 5.99, 100, -5.99, 5.99);
81 h_sad_sir[i] =
new TH1F(TString::Format(
"h_sad_sir_%d", i),
"", 100, -3.99, 3.99);
82 h_z[i] =
new TH1F(TString::Format(
"h_z_%d", i),
"", 100, -3.99, 3.99);
83 h_sad_sall[i] =
new TH1F(TString::Format(
"h_sad_sall_%d", i),
"", 100, -1499.99, 1499.99);
84 h_sad_sE[i] =
new TH2F(TString::Format(
"h_sad_sE_%d", i),
"", 100, -3.99, 3.99, 1000, 0., 10.);
85 h_sad_sraw[i] =
new TH1F(TString::Format(
"h_sad_sraw_%d", i),
"", 100, -1499.99, 1499.99);
86 h_sad_E[i] =
new TH1F(TString::Format(
"h_sad_E_%d", i),
"", 8000, 0, 7.99);
87 h_sad_s[i] =
new TH1F(TString::Format(
"h_sad_s_%d", i),
"", 400, -3.99, 3.99);
89 h_dpx =
new TH1F(
"h_dpx",
"", 1000, -1., 1.);
90 h_dpy =
new TH1F(
"h_dpy",
"", 1000, -1., 1.);
91 h_dE =
new TH1F(
"h_dE",
"", 1000, -1., 1.);
92 h_px =
new TH1F(
"h_px",
"", 10000, -10., 10.);
93 h_py =
new TH1F(
"h_py",
"", 10000, -10., 10.);
94 h_pz =
new TH1F(
"h_pz",
"", 10000, -10., 10.);
95 h_dx =
new TH1F(
"h_dx",
"", 10000, -400., 400.);
96 h_dy =
new TH1F(
"h_dy",
"", 10000, -400., 400.);
97 h_dz =
new TH1F(
"h_dz",
"", 10000, -400., 400.);
98 h_E =
new TH1F(
"h_E",
"", 8000, 0., 7.99);
99 h_P =
new TH1F(
"h_P",
"", 8000, 0., 7.99);
106 B2INFO(
"AnalysisPhase1StudyModule: Initialize");
129 for (
const auto& sadMetaHit : sadMetaHits) {
130 px = sadMetaHit.getpx();
131 py = sadMetaHit.getpy();
132 x = sadMetaHit.getx();
133 y = sadMetaHit.gety();
134 s = sadMetaHit.gets();
137 double sraw = sadMetaHit.getsraw();
138 E = sadMetaHit.getE();
139 rate = sadMetaHit.getrate();
146 if (-400. < s && s < 400.) {
158 for (
const auto& mcParticle : mcParticles) {
159 int PDG = mcParticle.getPDG();
161 float Mass = mcParticle.getMass();
162 float Energy = mcParticle.getEnergy();
163 float Kinetic = Energy - Mass;
165 prodvtx[0] = mcParticle.getProductionVertex().X();
166 prodvtx[1] = mcParticle.getProductionVertex().Y();
167 prodvtx[2] = mcParticle.getProductionVertex().Z();
168 float prodr =
sqrt(prodvtx[0] * prodvtx[0] + prodvtx[1] * prodvtx[1]);
170 decavtx[0] = mcParticle.getDecayVertex().X();
171 decavtx[1] = mcParticle.getDecayVertex().Y();
172 decavtx[2] = mcParticle.getDecayVertex().Z();
173 float decar =
sqrt(decavtx[0] * decavtx[0] + decavtx[1] * decavtx[1]);
175 mom[0] = mcParticle.getMomentum().X();
176 mom[1] = mcParticle.getMomentum().Y();
177 mom[2] = mcParticle.getMomentum().Z();
178 float theta = mcParticle.getMomentum().Theta() * TMath::RadToDeg();
179 float phi = mcParticle.getMomentum().Phi() * TMath::RadToDeg();
180 int partID[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
187 else if (PDG == 1000080160) partID[5] = 1;
188 else if (PDG == 1000060120) partID[6] = 1;
189 else if (PDG == 1000020040) partID[7] = 1;
191 for (
int i = 0; i < 8; i++) {
192 if (partID[i] == 1) {
201 h_phivz[i]->Fill(prodvtx[2], phi);
202 h_phive[i]->Fill(phi, Kinetic);
203 h_rve[i]->Fill(prodr, Kinetic);
221 h_phivz[8]->Fill(prodvtx[2], phi);
222 h_phive[8]->Fill(phi, Kinetic);
223 h_rve[8]->Fill(prodr, Kinetic);
239 h_phivz[9]->Fill(prodvtx[2], phi);
241 h_dx->Fill(x - prodvtx[0]);
242 h_dy->Fill(-y - prodvtx[1]);
243 h_dz->Fill(-s - prodvtx[2]);
245 h_z[0]->Fill(prodvtx[2] / 100.);
246 h_z[1]->Fill(prodvtx[2] / 100., rate);
248 h_dpx->Fill(px - mom[0]);
249 h_dpy->Fill(-py - mom[1]);
250 h_dE->Fill(
E - Energy);
252 h_g4_xy->Fill(prodvtx[0], prodvtx[1]);
258 h_P->Fill(
sqrt(mom[0] * mom[0] + mom[1] * mom[1] + mom[2] * mom[2]));
TH1F * h_sad_sir[2]
sad rate
TH2F * h_thetavz[10]
theta v z
virtual void initialize() override
Initialize the Module.
TH2F * h_phive[10]
phi v e
virtual void event() override
Event processor.
TH2F * h_kineticvz[10]
kin v z
virtual void endRun() override
End-of-run action.
virtual void terminate() override
Termination action.
TH2F * h_Wkineticvz_zoom[10]
kin v z
TH2F * h_Wkineticvz[10]
kin v z
TH2F * h_phivz[10]
phi v z
TH2F * h_sad_sE[2]
sad s v E
virtual void beginRun() override
Called when entering a new run.
TH2F * h_kineticvz_zoom[10]
kin v z
TH2F * h_prodvtx[10]
r v z
AnalysisPhase1StudyModule()
Constructor: Sets the description, the properties and the parameters of the module.
TH1F * h_sad_sall[2]
sad rate
TH1F * h_sad_sraw[2]
sad rate
TH2F * h_kineticvz2[10]
kin v z2
TH2F * h_decavtx[10]
r v z
TH2F * h_kineticvz1[10]
kin v z1
virtual void defineHisto() override
Defines the histograms.
static const ParticleType neutron
neutron particle
static const ChargedStable proton
proton particle
static const ParticleType photon
photon particle
static const ChargedStable electron
electron particle
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
void setDescription(const std::string &description)
Sets the description of the module.
Accessor to arrays stored in the data store.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.