9 #include <beast/microtpc/modules/TPCStudyModule.h>
10 #include <beast/microtpc/dataobjects/MicrotpcSimHit.h>
11 #include <framework/datastore/StoreArray.h>
12 #include <framework/logging/Logger.h>
13 #include <framework/gearbox/GearDir.h>
14 #include <framework/gearbox/Const.h>
15 #include <boost/foreach.hpp>
26 int co_ctr[4] = {0, 0, 0, 0};
27 int coe_ctr[4] = {0, 0, 0, 0};
28 int h1_ctr[4] = {0, 0, 0, 0};
29 int n_ctr[4] = {0, 0, 0, 0};
30 int he4_ctr[4] = {0, 0, 0, 0};
31 int o16_ctr[4] = {0, 0, 0, 0};
32 int c12_ctr[4] = {0, 0, 0, 0};
33 int ctr_ele[4] = {0, 0, 0, 0};
34 int ctr_pos[4] = {0, 0, 0, 0};
35 int ctr_pro[4] = {0, 0, 0, 0};
36 int ctr_neu[4] = {0, 0, 0, 0};
37 int ctr_good_neu[4] = {0, 0, 0, 0};
38 int ctr_bad_neu[4] = {0, 0, 0, 0};
39 int ctr_bak[4] = {0, 0, 0, 0};
44 using namespace microtpc;
75 for (
int i = 0; i < 11; i ++) {
76 h_tpc_kin[i] =
new TH1F(TString::Format(
"tpc_kin_%d", i),
"", 1000, 0., 100.);
77 h_tpc_xy[i] =
new TH2F(TString::Format(
"tpc_xy_%d", i),
"", 300, -3., 3., 300, -3., 3.);
84 B2INFO(
"TPCStudyModule: Initialize");
107 int old_trkID[4] = { -1, -1, -1, -1};
108 int old_trkID_h1[4] = { -1, -1, -1, -1};
109 int old_trkID_he4[4] = { -1, -1, -1, -1};
110 int old_trkID_c12[4] = { -1, -1, -1, -1};
111 int old_trkID_o16[4] = { -1, -1, -1, -1};
112 bool aneu[4] = {
false,
false,
false,
false};
113 bool apro[4] = {
false,
false,
false,
false};
114 bool atrk[4] = {
false,
false,
false,
false};
115 bool aele[4] = {
false,
false,
false,
false};
116 bool apos[4] = {
false,
false,
false,
false};
118 vector <double> RecoilE;
120 int NbofPart[4] = {0, 0, 0, 0};
122 cout <<
"Look at evt " << ctr << endl;
130 double xpos = position.X() / 100. -
TPCCenter[detNb].X();
131 double ypos = position.Y() / 100. -
TPCCenter[detNb].Y();
132 double zpos = position.Z() / 100. -
TPCCenter[detNb].Z() +
m_z_DG / 2.;
137 if (pdg == 1000020040)
h_tpc_xy[8]->Fill(xpos, ypos);
142 old_trkID[detNb] = trkID;
143 Pdg[detNb].push_back(pdg);
147 if (pdg == 1000020040) {
153 old_trkID_he4[detNb] = trkID;
166 if (pdg == 1000060120) {
172 old_trkID_c12[detNb] = trkID;
185 if (pdg == 1000080160) {
191 old_trkID_o16[detNb] = trkID;
211 old_trkID_h1[detNb] = trkID;
242 for (
int i = 0; i < 4; i ++) {
243 if (apro[i] && atrk[i] && aneu[i]) co_ctr[i]++;
244 if (apro[i] && atrk[i] && aneu[i] && aele[i]) coe_ctr[i]++;
245 if (apro[i] && atrk[i]) {
246 for (
int j = 0; j < (int) RecoilE.size(); j ++) {
251 if (apro[i] && aneu[i]) ctr_bak[i] ++;
252 if (atrk[i] && aneu[i]) {
253 for (
int j = 0; j < (int) RecoilE.size(); j ++) {
257 if (NbofPart[i] == 1) ctr_good_neu[i] ++;
258 if (NbofPart[i] > 1) ctr_bad_neu[i] ++;
260 if (atrk[i] && aele[i]) {
261 for (
int j = 0; j < (int) RecoilE.size(); j ++) {
266 if (atrk[i] && apos[i]) {
267 for (
int j = 0; j < (int) RecoilE.size(); j ++) {
274 for (
int i = 0; i < 4; i ++) {
275 if (NbofPart[i] > 0) {
276 cout <<
"det # " << i <<
" number of particle " << NbofPart[i] << endl;
277 for (
int j = 0; j < (int) Pdg[i].size(); j ++) {
278 cout <<
" pdg " << Pdg[i][j] << endl;
288 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"MICROTPC\"]/Content/");
291 BOOST_FOREACH(
const GearDir & activeParams, content.getNodes(
"Active")) {
302 m_z_DG = content.getDouble(
"z_DG");
304 B2INFO(
"TpcDigitizer: Aquired tpc locations and gas parameters");
305 B2INFO(
" from MICROTPC.xml. There are " <<
nTPC <<
" TPCs implemented");
315 cout <<
" Total nb of evts " << ctr << endl;
316 for (
int i = 0; i < 4; i ++) {
317 cout <<
"n " << n_ctr[i] <<
" n-recoil-p " << co_ctr[i] <<
" n-recoil " << ctr_neu[i] <<
" p-n " << ctr_bak[i] <<
" p-He4 " <<
318 ctr_pro[i] <<
" H1 " << h1_ctr[i] <<
" He4 " << he4_ctr[i] <<
" C12 " << c12_ctr[i] <<
" O16 " << o16_ctr[i] <<
" good n-recoil " <<
319 ctr_good_neu[i] <<
" bad n-recoil " << ctr_bad_neu[i];
320 cout <<
" w/ e- " << ctr_ele[i] <<
" w/ e+ " << ctr_pos[i] <<
" n-p-recoil-e- " << coe_ctr[i] << endl;
static const ParticleType neutron
neutron particle
static const ChargedStable proton
proton particle
static const ChargedStable electron
electron particle
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...
ClassMicrotpcSimHit - Geant4 simulated hit for the Microtpc detector.
float getEnergyDep() const
Return the energy deposition in electrons.
TVector3 gettkPos() const
Return the track position.
int gettkID() const
Return track ID.
float gettkKEnergy() const
Return the kinetic energy of the track.
float getdetNb() const
Return the TPC number.
TVector3 gettkMomDir() const
Return the track momentum direction.
int gettkPDG() const
Return the PDG number of the track.
void setDescription(const std::string &description)
Sets the description of the module.
Accessor to arrays stored in the data store.
double getLength(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard length unit.
double m_ChipRowY
Chip row y dimension.
virtual void initialize() override
Initialize the Module.
virtual void event() override
Event processor.
int nTPC
number of detectors.
virtual void endRun() override
End-of-run action.
double m_ChipColumnX
Chip column x dimension.
virtual void getXMLData()
reads data from MICROTPC.xml: tube location, drift data filename, sigma of impulse response function
virtual ~TPCStudyModule()
Destructor.
virtual void terminate() override
Termination action.
virtual void beginRun() override
Called when entering a new run.
int m_ChipRowNb
Chip row number.
TH1F * h_tpc_kin[100]
Event counter.
TH2F * h_tpc_xy[100]
Track XY.
int m_ChipColumnNb
Chip column number.
virtual void defineHisto() override
Defines the histograms.
std::vector< TVector3 > TPCCenter
TPC coordinate.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.