9 #include <beast/microtpc/modules/MicrotpcStudyModule.h>
10 #include <beast/microtpc/dataobjects/MicrotpcSimHit.h>
11 #include <beast/microtpc/dataobjects/TPCG4TrackInfo.h>
12 #include <beast/microtpc/dataobjects/MicrotpcHit.h>
13 #include <beast/microtpc/dataobjects/MicrotpcRecoTrack.h>
14 #include <generators/SAD/dataobjects/SADMetaHit.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <framework/logging/Logger.h>
17 #include <framework/gearbox/GearDir.h>
18 #include <framework/gearbox/Const.h>
20 #include <boost/foreach.hpp>
38 using namespace microtpc;
69 for (
int i = 0 ; i < 6 ; i++) {
70 h_tpc_rate[i] =
new TH1F(TString::Format(
"h_tpc_rate_%d", i),
"detector #", 8, 0., 8.);
73 h_mctpc_recoil[0] =
new TH3F(
"h_mctpc_recoil_He",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
74 h_mctpc_recoilW[0] =
new TH3F(
"h_mctpc_recoil_w_He",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
78 h_mctpc_recoil[1] =
new TH3F(
"h_mctpc_recoil_O",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
79 h_mctpc_recoilW[1] =
new TH3F(
"h_mctpc_recoil_w_O",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
83 h_mctpc_recoil[2] =
new TH3F(
"h_mctpc_recoil_C",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
84 h_mctpc_recoilW[2] =
new TH3F(
"h_mctpc_recoil_w_C",
"Neutron recoil energy [MeV]", 13, -0.5, 12.5, 8, -0.5, 7.5, 1000, 0., 10.);
89 for (
int i = 0 ; i < 12 ; i++) {
90 h_mctpc_kinetic[i] =
new TH2F(TString::Format(
"h_mctpc_kinetic_%d", i),
"Neutron kin. energy [GeV]", 8, -0.5, 7.5, 1000, 0., 10.);
91 h_mctpc_kinetic_zoom[i] =
new TH2F(TString::Format(
"h_mctpc_kinetic_zoom_%d", i),
"Neutron kin. energy [MeV]", 8, -0.5, 7.5, 1000,
93 h_mctpc_tvp[i] =
new TH2F(TString::Format(
"h_mctpc_tvp_%d", i),
"theta v phi", 180, 0., 180., 360, -180., 180.);
94 h_mctpc_tvpW[i] =
new TH2F(TString::Format(
"h_mctpc_tvpW_%d", i),
"theta v phi weighted by kin", 180, 0., 180., 360, -180., 180.);
95 h_mctpc_zr[i] =
new TH2F(TString::Format(
"h_mctpc_zr_%d", i),
"r v z", 200, -400., 400., 200, 0., 400.);
102 for (
int i = 0 ; i < 8 ; i++) {
103 for (
int j = 0; j < 12; j++) {
104 h_Wtvp1[i][j] =
new TH2F(TString::Format(
"h_Wtvp1_%d_%d", i, j),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
105 h_Wtvp2[i][j] =
new TH2F(TString::Format(
"h_Wtvp2_%d_%d", i, j),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
106 h_Wevtrl1[i][j] =
new TH2F(TString::Format(
"h_Wevtrl1_%d_%d", i, j),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000,
108 h_Wevtrl2[i][j] =
new TH2F(TString::Format(
"h_Wevtrl2_%d_%d", i, j),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000,
113 for (
int i = 0 ; i < 8 ; i++) {
114 h_z[i] =
new TH1F(TString::Format(
"h_z_%d", i),
"Charged density per cm^2", 2000, 0.0, 20.0);
116 h_zr[i] =
new TH2F(TString::Format(
"h_zr_%d", i),
"Charged density vs z vs r", 100, 0, 20, 100, 0., 5.);
118 h_xy[i] =
new TH2F(TString::Format(
"h_xy_%d", i),
"Charged density vs y vs x", 100, -5., 5., 100, -5., 5.);
120 h_zx[i] =
new TH2F(TString::Format(
"h_zx_%d", i),
"Charged density vs x vs r", 100, 0, 20, 100, -5., 5.);
122 h_zy[i] =
new TH2F(TString::Format(
"h_zy_%d", i),
"Charged density vs y vs r", 100, 0, 20, 100, -5., 5.);
124 h_evtrl[i] =
new TH2F(TString::Format(
"h_evtrl_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
126 h_evtrlb[i] =
new TH2F(TString::Format(
"h_evtrlb_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
128 h_evtrlc[i] =
new TH2F(TString::Format(
"h_evtrlc_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
130 h_evtrld[i] =
new TH2F(TString::Format(
"h_evtrld_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
133 h_evtrl_p[i] =
new TH2F(TString::Format(
"h_evtrl_p_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
135 h_evtrl_x[i] =
new TH2F(TString::Format(
"h_evtrl_x_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
137 h_evtrl_Hex[i] =
new TH2F(TString::Format(
"h_evtrl_Hex_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
139 h_evtrl_He[i] =
new TH2F(TString::Format(
"h_evtrl_He_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
141 h_evtrl_C[i] =
new TH2F(TString::Format(
"h_evtrl_C_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
143 h_evtrl_O[i] =
new TH2F(TString::Format(
"h_evtrl_O_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
145 h_evtrl_He_pure[i] =
new TH2F(TString::Format(
"h_evtrl_He_pure_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0.,
149 h_tevtrl[i] =
new TH2F(TString::Format(
"h_tevtrl_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
151 h_tevtrl_p[i] =
new TH2F(TString::Format(
"h_tevtrl_p_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
154 h_tevtrl_x[i] =
new TH2F(TString::Format(
"h_tevtrl_x_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
157 h_tevtrl_Hex[i] =
new TH2F(TString::Format(
"h_tevtrl_Hex_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000,
160 h_tevtrl_He[i] =
new TH2F(TString::Format(
"h_tevtrl_He_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000,
163 h_tevtrl_C[i] =
new TH2F(TString::Format(
"h_tevtrl_C_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
166 h_tevtrl_O[i] =
new TH2F(TString::Format(
"h_tevtrl_O_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
169 h_tevtrl_He_pure[i] =
new TH2F(TString::Format(
"h_tevtrl_He_pure_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000,
173 h_tvp[i] =
new TH2F(TString::Format(
"h_tvp_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
174 h_wtvpb[i] =
new TH2F(TString::Format(
"h_wtvpb_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
175 h_wtvpc[i] =
new TH2F(TString::Format(
"h_wtvpc_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
176 h_wtvpd[i] =
new TH2F(TString::Format(
"h_wtvpd_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
178 h_tvpb[i] =
new TH2F(TString::Format(
"h_tvpb_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
179 h_tvpc[i] =
new TH2F(TString::Format(
"h_tvpc_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
180 h_tvpd[i] =
new TH2F(TString::Format(
"h_tvpd_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
181 h_ttvp[i] =
new TH2F(TString::Format(
"h_ttvp_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
182 h_wtvp[i] =
new TH2F(TString::Format(
"h_wtvp_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
183 h_tvp_x[i] =
new TH2F(TString::Format(
"h_tvp_x_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
184 h_ttvp_x[i] =
new TH2F(TString::Format(
"h_ttvp_x_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
185 h_wtvp_x[i] =
new TH2F(TString::Format(
"h_wtvp_x_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
186 h_tvp_p[i] =
new TH2F(TString::Format(
"h_tvp_p_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
187 h_ttvp_p[i] =
new TH2F(TString::Format(
"h_ttvp_p_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
188 h_wtvp_p[i] =
new TH2F(TString::Format(
"h_wtvp_p_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
189 h_tvp_He[i] =
new TH2F(TString::Format(
"h_tvp_He_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
190 h_ttvp_He[i] =
new TH2F(TString::Format(
"h_ttvp_He_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
191 h_wtvp_He[i] =
new TH2F(TString::Format(
"h_wtvp_He_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
192 h_tvp_Hex[i] =
new TH2F(TString::Format(
"h_tvp_Hex_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
193 h_ttvp_Hex[i] =
new TH2F(TString::Format(
"h_ttvp_Hex_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
194 h_wtvp_Hex[i] =
new TH2F(TString::Format(
"h_wtvp_Hex_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180.,
196 h_tvp_He_pure[i] =
new TH2F(TString::Format(
"h_tvp_He_pure_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
197 h_ttvp_He_pure[i] =
new TH2F(TString::Format(
"h_ttvp_He_pure_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180.,
199 h_wtvp_He_pure[i] =
new TH2F(TString::Format(
"h_wtvp_He_pure_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360,
201 h_twtvp_He_pure[i] =
new TH2F(TString::Format(
"h_twtvp_He_pure_%d", i),
"t: Phi [deg] v. theta [deg] - weighted", 180, 0., 180,
204 h_tvp_C[i] =
new TH2F(TString::Format(
"h_tvp_C_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
205 h_ttvp_C[i] =
new TH2F(TString::Format(
"h_ttvp_C_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
206 h_wtvp_C[i] =
new TH2F(TString::Format(
"h_wtvp_C_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
207 h_tvp_O[i] =
new TH2F(TString::Format(
"h_tvp_O_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
208 h_ttvp_O[i] =
new TH2F(TString::Format(
"h_ttvp_O_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
209 h_wtvp_O[i] =
new TH2F(TString::Format(
"h_wtvp_O_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
239 B2INFO(
"MicrotpcStudyModule: Initialize");
264 int ring_section = 0;
265 const int section_ordering[12] = {1, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
266 for (
const auto& sadMetaHit : sadMetaHits) {
267 rate = sadMetaHit.getrate();
268 double ss = sadMetaHit.getss() / 100.;
269 if (ss < 0) ss += 3000.;
270 int section = (int)(ss / 250.);
271 if (section >= 0 && section < 12) ring_section = section_ordering[section];
290 for (
int i = 0; i < 8; i++) {
305 auto phiArray =
new vector<double>[8]();
306 auto thetaArray =
new vector<double>[8]();
307 auto pidArray =
new vector<int>[8]();
309 auto esumArray =
new vector<double>[8]();
310 auto trlArray =
new vector<double>[8]();
314 for (
int i = 0; i < nSimHits; i++) {
317 TVector3 position = aHit->
gettkPos();
318 double xpos = position.X() / 100. -
TPCCenter[detNb].X();
319 double ypos = position.Y() / 100. -
TPCCenter[detNb].Y();
320 double zpos = position.Z() / 100. -
TPCCenter[detNb].Z() +
m_z_DG / 2.;
321 if (0. < zpos && zpos <
m_z_DG) {
324 if (PDGid == 1000080160)
ORec[detNb] =
true;
325 if (PDGid == 1000060120)
CRec[detNb] =
true;
326 if (PDGid == 1000020040)
HeRec[detNb] =
true;
332 double ioni = (edep - niel) * 1e3;
334 double r =
sqrt(xpos * xpos + ypos * ypos);
335 h_z[detNb]->Fill(zpos, ioni);
336 h_zr[detNb]->Fill(zpos, r, ioni);
337 h_zx[detNb]->Fill(zpos, xpos, ioni);
338 h_xy[detNb]->Fill(xpos, ypos, ioni);
339 h_zy[detNb]->Fill(zpos, ypos, ioni);
341 double theta = direction.Theta() * TMath::RadToDeg();
342 double phi = direction.Phi() * TMath::RadToDeg();
346 (0. < zpos && zpos <
m_z_DG)) {
354 if (esum[detNb] > 0) {
355 esumArray[detNb].push_back(esum[detNb]);
357 BeginPoint.SetXYZ(xpos, ypos, zpos);
358 double trl0 = BeginPoint * direction.Unit();
359 double trl1 = EndPoint * direction.Unit();
360 trlArray[detNb].push_back(fabs(trl0 - trl1));
396 thetaArray[detNb].push_back(theta);
397 phiArray[detNb].push_back(phi);
398 pidArray[detNb].push_back(PDGid);
406 EndPoint.SetXYZ(xpos, ypos, zpos);
455 for (
const auto& mcpart : mcparts) {
456 const double energy = mcpart.getEnergy();
457 const double mass = mcpart.getMass();
458 double kin = energy - mass;
459 const double PDG = mcpart.getPDG();
460 const TVector3 vtx = mcpart.getProductionVertex();
461 const TVector3 mom = mcpart.getMomentum();
462 double theta = mom.Theta() * TMath::RadToDeg();
463 double phi = mom.Phi() * TMath::RadToDeg();
465 double r =
sqrt(vtx.X() * vtx.X() + vtx.Y() * vtx.Y());
466 int partID[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
467 if (trID == mcpart.getTrackID())
continue;
468 else trID = mcpart.getTrackID();
471 for (
const auto& sHit : SimHits) {
472 if (sHit.gettkID() == trID) {
473 detNb = sHit.getdetNb();
474 kin = sHit.gettkKEnergy() / 1000;
480 double trlen = abs(2. / TMath::Sin(mom.Theta()));
481 if (trlen > 10) trlen = 10.;
484 double recoil = gRandom->Uniform(fract) * kin * 1e3;
485 double weight =
m_intProb[irecoil]->Eval(kin * 1e3) * trlen;
486 if (weight < 0) weight = 0;
500 else if (PDG == 1000080160) partID[5] = 1;
501 else if (PDG == 1000060120) partID[6] = 1;
502 else if (PDG == 1000020040) partID[7] = 1;
523 for (
int i = 0; i < 9; i++) {
524 if (partID[i] == 1) {
538 for (
const auto& aTrack : Tracks) {
539 const int detNb = aTrack.getdetNb();
540 const float phi = aTrack.getphi();
541 const float theta = aTrack.gettheta();
542 const float trl = aTrack.gettrl();
543 const float tesum = aTrack.getesum();
544 const int pixnb = aTrack.getpixnb();
547 for (
int j = 0; j < 16; j++) {
549 side[j] = aTrack.getside()[j];
551 Bool_t EdgeCuts =
false;
552 if (side[0] == 0 && side[1] == 0 && side[2] == 0 && side[3] == 0) EdgeCuts =
true;
553 Bool_t Asource =
false;
554 if (side[4] == 2 && side[5] == 2) Asource =
true;
561 for (
int j = 0; j < 6; j++) partID[j + 1] = aTrack.getpartID()[j];
579 h_evtrl[detNb]->Fill(tesum, trl);
580 h_tvp[detNb]->Fill(theta, phi);
581 h_wtvp[detNb]->Fill(theta, phi, tesum);
582 h_Wtvp1[detNb][0]->Fill(theta, phi, rate);
583 h_Wevtrl1[detNb][0]->Fill(tesum, trl, rate);
584 h_Wtvp2[detNb][0]->Fill(theta, phi, rate * tesum);
586 if (EdgeCuts && pixnb > 10. && tesum > 10.) {
588 h_tvpb[detNb]->Fill(theta, phi);
589 h_wtvpb[detNb]->Fill(theta, phi, tesum);
590 h_Wtvp1[detNb][1]->Fill(theta, phi, rate);
591 h_Wevtrl1[detNb][1]->Fill(tesum, trl, rate);
592 h_Wtvp2[detNb][1]->Fill(theta, phi, rate * tesum);
595 for (
int j = 0; j < 7; j++) {
596 if (j == 3 && !EdgeCuts && (partID[1] == 1 || partID[2] == 1 || partID[4] == 1 || partID[5] == 1 || partID[6] == 1)) partID[j] = 0;
597 if ((j == 4 || j == 5) && !Asource) partID[j] = 0;
598 if (partID[j] == 1) {
599 h_Wtvp1[detNb][2 + j]->Fill(theta, phi, rate);
600 h_Wevtrl1[detNb][2 + j]->Fill(tesum, trl, rate);
601 h_Wtvp2[detNb][2 + j]->Fill(theta, phi, rate * tesum);
604 h_tvpc[detNb]->Fill(theta, phi);
605 h_wtvpc[detNb]->Fill(theta, phi, tesum);
609 h_tvpd[detNb]->Fill(theta, phi);
610 h_wtvpd[detNb]->Fill(theta, phi, tesum);
614 h_tvp_x[detNb]->Fill(theta, phi);
615 h_wtvp_x[detNb]->Fill(theta, phi, tesum);
619 h_tvp_p[detNb]->Fill(theta, phi);
620 h_wtvp_p[detNb]->Fill(theta, phi, tesum);
624 h_tvp_x[detNb]->Fill(theta, phi);
625 h_wtvp_x[detNb]->Fill(theta, phi, tesum);
630 h_wtvp_He[detNb]->Fill(theta, phi, tesum);
645 delete [] thetaArray;
655 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"MICROTPC\"]/Content/");
658 BOOST_FOREACH(
const GearDir & activeParams, content.getNodes(
"Active")) {
669 m_z_DG = content.getDouble(
"z_DG");
671 GearDir content2 =
GearDir(
"/Detector/DetectorComponent[@name=\"MICROTPC\"]/Content/RecoilProbability");
673 m_maxEnFrac.push_back(recoil.getDouble(
"Fraction"));
674 istringstream probstream;
676 probstream.str(recoil.getString(
"Probability"));
677 TGraph* gr =
new TGraph();
679 while (probstream >> e >> prob) {
680 gr->SetPoint(i, e, prob);
686 B2INFO(
"TpcDigitizer: Aquired tpc locations and gas parameters");
687 B2INFO(
" from MICROTPC.xml. There are " <<
nTPC <<
" TPCs implemented");
int getPDGCode() const
PDG code.
static const ParticleType neutron
neutron particle
static const ChargedStable proton
proton particle
static const ParticleType photon
photon 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.
float getdetNb() const
Return the TPC number.
float getEnergyNiel() const
Return the non-ionization energy in electrons.
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.
int getEntries() const
Get the number of objects in the array.
double getLength(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard length unit.
std::vector< GearDir > getNodes(const std::string &path="") const
Get vector of GearDirs which point to all the nodes the given path evaluates to.
TH2F * h_tevtrl_He_pure[8]
Track length v.
TH2F * h_wtvp_He[8]
Phi v.
TH2F * h_Wtvp2[8][12]
Phi v.
double m_ChipRowY
Chip row y dimension.
TH2F * h_evtrl_x[8]
Track length v.
TH2F * h_tevtrl_C[8]
Track length v.
TH2F * h_evtrld[8]
Track length v.
TH2F * h_ttvp_Hex[8]
Phi v.
TH2F * h_evtrl_He[8]
Track length v.
TH2F * h_wtvp_Hex[8]
Phi v.
Bool_t HeRec[8]
He boolean per TPC.
virtual void initialize() override
Initialize the Module.
std::vector< double > m_maxEnFrac
vector of maximal energy fraction transfered to recoil
TH2F * h_tevtrl_p[8]
Track length v.
virtual void event() override
Event processor.
TH2F * h_evtrl_He_pure[8]
Track length v.
std::vector< TGraph * > m_intProb
vector of interaction probability vs E graphs for all recoils
int nTPC
number of detectors.
Bool_t CRec[8]
C boolean per TPC.
TH2F * h_tevtrl_He[8]
Track length v.
TH1F * h_z[8]
Charged density vs z vs section.
virtual void endRun() override
End-of-run action.
double m_ChipColumnX
Chip column x dimension.
Bool_t ORec[8]
O boolean per TPC.
virtual void getXMLData()
reads data from MICROTPC.xml: tube location, drift data filename, sigma of impulse response function
TH2F * h_Wevtrl1[8][12]
e v l
TH2F * h_tevtrl_x[8]
Track length v.
virtual void terminate() override
Termination action.
Bool_t xRec[8]
X-ray boolean per TPC.
TH2F * h_tevtrl_O[8]
Track length v.
TH2F * h_mctpc_tvpW[20]
theta v phi dis
TH2F * h_twtvp_He_pure[8]
Phi v.
TH2F * h_evtrl_C[8]
Track length v.
TH2F * h_tvp_Hex[8]
Phi v.
TH2F * h_evtrlb[8]
Track length v.
TH2F * h_evtrl_p[8]
Track length v.
TH3F * h_mctpc_recoil[3]
recoil energy
virtual void beginRun() override
Called when entering a new run.
TH2F * h_ttvp_He_pure[8]
Phi v.
virtual ~MicrotpcStudyModule()
Destructor.
TH2F * h_evtrl[8]
Track length v.
TH2F * h_mctpc_tvp[20]
theta v phi dis
int m_ChipRowNb
Chip row number.
TH2F * h_zy[8]
Charged density vs y vs r.
TH2F * h_Wtvp1[8][12]
Phi v.
Bool_t pRec[8]
p boolean per TPC
TH2F * h_wtvp_He_pure[8]
Phi v.
TH2F * h_tevtrl_Hex[8]
Track length v.
TH2F * h_zx[8]
Charged density vs x vs r.
TH1F * h_tpc_rate[20]
Event counter.
TH2F * h_tvp_He_pure[8]
Phi v.
TH2F * h_zr[8]
Charged density vs z vs r.
int pid_old[8]
A boolean per TPC.
int m_ChipColumnNb
Chip column number.
TH2F * h_mctpc_zr[20]
r v z
TH2F * h_Wevtrl2[8][12]
e v l
TH3F * h_mctpc_recoilW[3]
weighted recoil energy
TH2F * h_mctpc_kinetic_zoom[20]
Neutron kin energy dis.
TH2F * h_tevtrl[8]
Track length v.
TH2F * h_evtrl_O[8]
Track length v.
TH2F * h_evtrlc[8]
Track length v.
TH2F * h_mctpc_kinetic[20]
Neutron kin energy dis.
TH2F * h_xy[8]
Charged density vs x vs y.
TH2F * h_ttvp_He[8]
Phi v.
TH2F * h_evtrl_Hex[8]
Track length v.
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.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.