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>
37using namespace microtpc;
68 for (
int i = 0 ; i < 6 ; i++) {
69 h_tpc_rate[i] =
new TH1F(TString::Format(
"h_tpc_rate_%d", i),
"detector #", 8, 0., 8.);
72 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.);
73 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.);
77 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.);
78 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.);
82 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.);
83 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.);
88 for (
int i = 0 ; i < 12 ; i++) {
89 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.);
90 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,
92 h_mctpc_tvp[i] =
new TH2F(TString::Format(
"h_mctpc_tvp_%d", i),
"theta v phi", 180, 0., 180., 360, -180., 180.);
93 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.);
94 h_mctpc_zr[i] =
new TH2F(TString::Format(
"h_mctpc_zr_%d", i),
"r v z", 200, -400., 400., 200, 0., 400.);
101 for (
int i = 0 ; i < 8 ; i++) {
102 for (
int j = 0; j < 12; j++) {
103 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.);
104 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.);
105 h_Wevtrl1[i][j] =
new TH2F(TString::Format(
"h_Wevtrl1_%d_%d", i, j),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000,
107 h_Wevtrl2[i][j] =
new TH2F(TString::Format(
"h_Wevtrl2_%d_%d", i, j),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000,
112 for (
int i = 0 ; i < 8 ; i++) {
113 h_z[i] =
new TH1F(TString::Format(
"h_z_%d", i),
"Charged density per cm^2", 2000, 0.0, 20.0);
115 h_zr[i] =
new TH2F(TString::Format(
"h_zr_%d", i),
"Charged density vs z vs r", 100, 0, 20, 100, 0., 5.);
117 h_xy[i] =
new TH2F(TString::Format(
"h_xy_%d", i),
"Charged density vs y vs x", 100, -5., 5., 100, -5., 5.);
119 h_zx[i] =
new TH2F(TString::Format(
"h_zx_%d", i),
"Charged density vs x vs r", 100, 0, 20, 100, -5., 5.);
121 h_zy[i] =
new TH2F(TString::Format(
"h_zy_%d", i),
"Charged density vs y vs r", 100, 0, 20, 100, -5., 5.);
123 h_evtrl[i] =
new TH2F(TString::Format(
"h_evtrl_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
125 h_evtrlb[i] =
new TH2F(TString::Format(
"h_evtrlb_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
127 h_evtrlc[i] =
new TH2F(TString::Format(
"h_evtrlc_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
129 h_evtrld[i] =
new TH2F(TString::Format(
"h_evtrld_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 10000, 200, 0.,
132 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.,
134 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.,
136 h_evtrl_Hex[i] =
new TH2F(TString::Format(
"h_evtrl_Hex_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
138 h_evtrl_He[i] =
new TH2F(TString::Format(
"h_evtrl_He_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200,
140 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.,
142 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.,
144 h_evtrl_He_pure[i] =
new TH2F(TString::Format(
"h_evtrl_He_pure_%d", i),
"Deposited energy [keV] v. track length [cm]", 2000, 0.,
148 h_tevtrl[i] =
new TH2F(TString::Format(
"h_tevtrl_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000, 200, 0.,
150 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,
153 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,
156 h_tevtrl_Hex[i] =
new TH2F(TString::Format(
"h_tevtrl_Hex_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000,
159 h_tevtrl_He[i] =
new TH2F(TString::Format(
"h_tevtrl_He_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000, 0., 2000,
162 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,
165 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,
168 h_tevtrl_He_pure[i] =
new TH2F(TString::Format(
"h_tevtrl_He_pure_%d", i),
"t: Deposited energy [keV] v. track length [cm]", 2000,
172 h_tvp[i] =
new TH2F(TString::Format(
"h_tvp_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
173 h_wtvpb[i] =
new TH2F(TString::Format(
"h_wtvpb_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
174 h_wtvpc[i] =
new TH2F(TString::Format(
"h_wtvpc_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
175 h_wtvpd[i] =
new TH2F(TString::Format(
"h_wtvpd_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
177 h_tvpb[i] =
new TH2F(TString::Format(
"h_tvpb_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
178 h_tvpc[i] =
new TH2F(TString::Format(
"h_tvpc_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
179 h_tvpd[i] =
new TH2F(TString::Format(
"h_tvpd_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
180 h_ttvp[i] =
new TH2F(TString::Format(
"h_ttvp_%d", i),
"t: Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
181 h_wtvp[i] =
new TH2F(TString::Format(
"h_wtvp_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180., 180.);
182 h_tvp_x[i] =
new TH2F(TString::Format(
"h_tvp_x_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
183 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.);
184 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.);
185 h_tvp_p[i] =
new TH2F(TString::Format(
"h_tvp_p_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
186 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.);
187 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.);
188 h_tvp_He[i] =
new TH2F(TString::Format(
"h_tvp_He_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
189 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.);
190 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.);
191 h_tvp_Hex[i] =
new TH2F(TString::Format(
"h_tvp_Hex_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
192 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.);
193 h_wtvp_Hex[i] =
new TH2F(TString::Format(
"h_wtvp_Hex_%d", i),
"Phi [deg] v. theta [deg] - weighted", 180, 0., 180, 360, -180.,
195 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.);
196 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.,
198 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,
200 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,
203 h_tvp_C[i] =
new TH2F(TString::Format(
"h_tvp_C_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
204 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.);
205 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.);
206 h_tvp_O[i] =
new TH2F(TString::Format(
"h_tvp_O_%d", i),
"Phi [deg] v. theta [deg]", 180, 0., 180, 360, -180., 180.);
207 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.);
208 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.);
238 B2INFO(
"MicrotpcStudyModule: Initialize");
263 int ring_section = 0;
264 const int section_ordering[12] = {1, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
265 for (
const auto& sadMetaHit : sadMetaHits) {
266 rate = sadMetaHit.getrate();
267 double ss = sadMetaHit.getss() / 100.;
268 if (ss < 0) ss += 3000.;
269 int section = (int)(ss / 250.);
270 if (section >= 0 && section < 12) ring_section = section_ordering[section];
289 for (
int i = 0; i < 8; i++) {
304 auto phiArray =
new vector<double>[8]();
305 auto thetaArray =
new vector<double>[8]();
306 auto pidArray =
new vector<int>[8]();
308 auto esumArray =
new vector<double>[8]();
309 auto trlArray =
new vector<double>[8]();
311 ROOT::Math::XYZVector EndPoint;
313 for (
int i = 0; i < nSimHits; i++) {
316 ROOT::Math::XYZVector position = aHit->
gettkPos();
317 double xpos = position.X() / 100. -
TPCCenter[detNb].X();
318 double ypos = position.Y() / 100. -
TPCCenter[detNb].Y();
319 double zpos = position.Z() / 100. -
TPCCenter[detNb].Z() +
m_z_DG / 2.;
320 if (0. < zpos && zpos <
m_z_DG) {
323 if (PDGid == 1000080160)
ORec[detNb] =
true;
324 if (PDGid == 1000060120)
CRec[detNb] =
true;
325 if (PDGid == 1000020040)
HeRec[detNb] =
true;
331 double ioni = (edep - niel) * 1e3;
333 double r =
sqrt(xpos * xpos + ypos * ypos);
334 h_z[detNb]->Fill(zpos, ioni);
335 h_zr[detNb]->Fill(zpos, r, ioni);
336 h_zx[detNb]->Fill(zpos, xpos, ioni);
337 h_xy[detNb]->Fill(xpos, ypos, ioni);
338 h_zy[detNb]->Fill(zpos, ypos, ioni);
339 ROOT::Math::XYZVector direction = aHit->
gettkMomDir();
340 double theta = direction.Theta() * TMath::RadToDeg();
341 double phi = direction.Phi() * TMath::RadToDeg();
345 (0. < zpos && zpos <
m_z_DG)) {
353 if (esum[detNb] > 0) {
354 esumArray[detNb].push_back(esum[detNb]);
355 ROOT::Math::XYZVector BeginPoint;
356 BeginPoint.SetXYZ(xpos, ypos, zpos);
357 double trl0 = BeginPoint.Dot(direction.Unit());
358 double trl1 = EndPoint.Dot(direction.Unit());
359 trlArray[detNb].push_back(fabs(trl0 - trl1));
395 thetaArray[detNb].push_back(theta);
396 phiArray[detNb].push_back(phi);
397 pidArray[detNb].push_back(PDGid);
405 EndPoint.SetXYZ(xpos, ypos, zpos);
454 for (
const auto& mcpart : mcparts) {
455 const double energy = mcpart.getEnergy();
456 const double mass = mcpart.getMass();
457 double kin = energy - mass;
458 const double PDG = mcpart.getPDG();
459 const ROOT::Math::XYZVector vtx = mcpart.getProductionVertex();
460 const ROOT::Math::XYZVector mom = mcpart.getMomentum();
461 double theta = mom.Theta() * TMath::RadToDeg();
462 double phi = mom.Phi() * TMath::RadToDeg();
464 double r =
sqrt(vtx.X() * vtx.X() + vtx.Y() * vtx.Y());
465 int partID[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
466 if (trID == mcpart.getTrackID())
continue;
467 else trID = mcpart.getTrackID();
470 for (
const auto& sHit : SimHits) {
471 if (sHit.gettkID() == trID) {
472 detNb = sHit.getdetNb();
473 kin = sHit.gettkKEnergy() / 1000;
479 double trlen = abs(2. / TMath::Sin(mom.Theta()));
480 if (trlen > 10) trlen = 10.;
483 double recoil = gRandom->Uniform(fract) * kin * 1e3;
484 double weight =
m_intProb[irecoil]->Eval(kin * 1e3) * trlen;
485 if (weight < 0) weight = 0;
499 else if (PDG == 1000080160) partID[5] = 1;
500 else if (PDG == 1000060120) partID[6] = 1;
501 else if (PDG == 1000020040) partID[7] = 1;
522 for (
int i = 0; i < 9; i++) {
523 if (partID[i] == 1) {
537 for (
const auto& aTrack : Tracks) {
538 const int detNb = aTrack.getdetNb();
539 const float phi = aTrack.getphi();
540 const float theta = aTrack.gettheta();
541 const float trl = aTrack.gettrl();
542 const float tesum = aTrack.getesum();
543 const int pixnb = aTrack.getpixnb();
546 for (
int j = 0; j < 16; j++) {
548 side[j] = aTrack.getside()[j];
550 Bool_t EdgeCuts =
false;
551 if (side[0] == 0 && side[1] == 0 && side[2] == 0 && side[3] == 0) EdgeCuts =
true;
552 Bool_t Asource =
false;
553 if (side[4] == 2 && side[5] == 2) Asource =
true;
560 for (
int j = 0; j < 6; j++) partID[j + 1] = aTrack.getpartID()[j];
578 h_evtrl[detNb]->Fill(tesum, trl);
579 h_tvp[detNb]->Fill(theta, phi);
580 h_wtvp[detNb]->Fill(theta, phi, tesum);
581 h_Wtvp1[detNb][0]->Fill(theta, phi, rate);
582 h_Wevtrl1[detNb][0]->Fill(tesum, trl, rate);
583 h_Wtvp2[detNb][0]->Fill(theta, phi, rate * tesum);
585 if (EdgeCuts && pixnb > 10. && tesum > 10.) {
587 h_tvpb[detNb]->Fill(theta, phi);
588 h_wtvpb[detNb]->Fill(theta, phi, tesum);
589 h_Wtvp1[detNb][1]->Fill(theta, phi, rate);
590 h_Wevtrl1[detNb][1]->Fill(tesum, trl, rate);
591 h_Wtvp2[detNb][1]->Fill(theta, phi, rate * tesum);
594 for (
int j = 0; j < 7; j++) {
595 if (j == 3 && !EdgeCuts && (partID[1] == 1 || partID[2] == 1 || partID[4] == 1 || partID[5] == 1 || partID[6] == 1)) partID[j] = 0;
596 if ((j == 4 || j == 5) && !Asource) partID[j] = 0;
597 if (partID[j] == 1) {
598 h_Wtvp1[detNb][2 + j]->Fill(theta, phi, rate);
599 h_Wevtrl1[detNb][2 + j]->Fill(tesum, trl, rate);
600 h_Wtvp2[detNb][2 + j]->Fill(theta, phi, rate * tesum);
603 h_tvpc[detNb]->Fill(theta, phi);
604 h_wtvpc[detNb]->Fill(theta, phi, tesum);
608 h_tvpd[detNb]->Fill(theta, phi);
609 h_wtvpd[detNb]->Fill(theta, phi, tesum);
613 h_tvp_x[detNb]->Fill(theta, phi);
614 h_wtvp_x[detNb]->Fill(theta, phi, tesum);
618 h_tvp_p[detNb]->Fill(theta, phi);
619 h_wtvp_p[detNb]->Fill(theta, phi, tesum);
623 h_tvp_x[detNb]->Fill(theta, phi);
624 h_wtvp_x[detNb]->Fill(theta, phi, tesum);
629 h_wtvp_He[detNb]->Fill(theta, phi, tesum);
644 delete [] thetaArray;
654 GearDir content =
GearDir(
"/Detector/DetectorComponent[@name=\"MICROTPC\"]/Content/");
657 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.
ROOT::Math::XYZVector gettkPos() const
Return the track position.
float getdetNb() const
Return the TPC number.
float getEnergyNiel() const
Return the non-ionization energy in electrons.
ROOT::Math::XYZVector 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.
MicrotpcStudyModule()
Constructor: Sets the description, the properties and the parameters of the module.
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.
std::vector< ROOT::Math::XYZVector > TPCCenter
TPC coordinate.
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.
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.