13 #include "art_root_io/TFileService.h" 14 #include "canvas/Persistency/Common/FindManyP.h" 32 #include "TProfile2D.h" 135 const double X0 = 14;
167 tfs->make<TProfile>(
"fShowerProfileSimLong",
168 "longitudinal e- profile (true, simchannel);t;E (MeV)",
173 "fShowerProfileHitLong",
"longitudinal e- profile (true, hit);t;E (MeV)",
LBINS,
LMIN,
LMAX);
175 "fShowerProfileRecoLong",
"longitudinal e- profile (reco);t;Q",
LBINS,
LMIN,
LMAX);
178 "fShowerProfileSimLong2D",
179 "longitudinal e- profile (true, simchannel);t;electron energy (MeV);E (MeV)",
187 tfs->make<TProfile2D>(
"fShowerProfileHitLong2D",
188 "longitudinal e- profile (true, hit);t;electron energy (MeV);E (MeV)",
196 tfs->make<TProfile2D>(
"fShowerProfileRecoLong2D",
197 "longitudinal e- profile (reco);t;electron energy (MeV);Q",
206 tfs->make<TProfile>(
"fShowerProfileSimTrans",
207 "transverse e- profile (true, simchannel);dist (cm);E (MeV)",
212 tfs->make<TProfile>(
"fShowerProfileHitTrans",
213 "transverse e- profile (true, hit);dist (cm);E (MeV)",
218 "fShowerProfileRecoTrans",
"transverse e- profile (reco);dist (cm);Q",
TBINS,
TMIN,
TMAX);
221 "fShowerProfileSimTrans2D",
222 "transverse e- profile (true, simchannel);t;electron energy (MeV);E (MeV)",
230 tfs->make<TProfile2D>(
"fShowerProfileHitTrans2D",
231 "transverse e- profile (true, hit);t;electron energy (MeV);E (MeV)",
239 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D",
240 "transverse e- profile (reco);t;electron energy (MeV);Q",
249 "fShowerProfileSimTrans2D_1",
250 "transverse e- profile [0 <= t < 1] (true, simchannel);t;electron energy (MeV);E (MeV)",
258 "fShowerProfileHitTrans2D_1",
259 "transverse e- profile [0 <= t < 1] (true, hit);t;electron energy (MeV);E (MeV)",
267 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D_1",
268 "transverse e- profile [0 <= t < 1] (reco);t;electron energy (MeV);Q",
277 "fShowerProfileSimTrans2D_2",
278 "transverse e- profile [1 <= t < 2] (true, simchannel);t;electron energy (MeV);E (MeV)",
286 "fShowerProfileHitTrans2D_2",
287 "transverse e- profile [1 <= t < 2] (true, hit);t;electron energy (MeV);E (MeV)",
295 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D_2",
296 "transverse e- profile [1 <= t < 2] (reco);t;electron energy (MeV);Q",
305 "fShowerProfileSimTrans2D_3",
306 "transverse e- profile [2 <= t < 3] (true, simchannel);t;electron energy (MeV);E (MeV)",
314 "fShowerProfileHitTrans2D_3",
315 "transverse e- profile [2 <= t < 3] (true, hit);t;electron energy (MeV);E (MeV)",
323 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D_3",
324 "transverse e- profile [2 <= t < 3] (reco);t;electron energy (MeV);Q",
333 "fShowerProfileSimTrans2D_4",
334 "transverse e- profile [3 <= t < 4] (true, simchannel);t;electron energy (MeV);E (MeV)",
342 "fShowerProfileHitTrans2D_4",
343 "transverse e- profile [3 <= t < 4] (true, hit);t;electron energy (MeV);E (MeV)",
351 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D_4",
352 "transverse e- profile [3 <= t < 4] (reco);t;electron energy (MeV);Q",
361 "fShowerProfileSimTrans2D_5",
362 "transverse e- profile [4 <= t < 5] (true, simchannel);t;electron energy (MeV);E (MeV)",
370 "fShowerProfileHitTrans2D_5",
371 "transverse e- profile [4 <= t < 5] (true, hit);t;electron energy (MeV);E (MeV)",
379 tfs->make<TProfile2D>(
"fShowerProfileRecoTrans2D_5",
380 "transverse e- profile [4 <= t < 5] (reco);t;electron energy (MeV);Q",
389 "longitudinal e- profile;t;electron energy (MeV);Q",
400 "transverse e- profile;dist (cm);electron energy (MeV);Q",
411 tfs->make<TH3F>(
"fTransverse_1",
412 "transverse e- profile [0 <= t < 1];dist (cm);electron energy (MeV);Q",
423 tfs->make<TH3F>(
"fTransverse_2",
424 "transverse e- profile [1 <= t < 2];dist (cm);electron energy (MeV);Q",
435 tfs->make<TH3F>(
"fTransverse_3",
436 "transverse e- profile [2 <= t < 3];dist (cm);electron energy (MeV);Q",
447 tfs->make<TH3F>(
"fTransverse_4",
448 "transverse e- profile [3 <= t < 4];dist (cm);electron energy (MeV);Q",
459 tfs->make<TH3F>(
"fTransverse_5",
460 "transverse e- profile [4 <= t < 5];dist (cm);electron energy (MeV);Q",
473 "fLongitudinal_electron",
"longitudinal e- profile (reco);t;Q",
LBINS,
LMIN,
LMAX);
475 tfs->make<TProfile>(
"fTransverse1_electron",
476 "transverse e- profile [0 <= t < 1] (reco);dist (cm);Q",
481 tfs->make<TProfile>(
"fTransverse2_electron",
482 "transverse e- profile [1 <= t < 2] (reco);dist (cm);Q",
487 tfs->make<TProfile>(
"fTransverse3_electron",
488 "transverse e- profile [2 <= t < 3] (reco);dist (cm);Q",
493 tfs->make<TProfile>(
"fTransverse4_electron",
494 "transverse e- profile [3 <= t < 4] (reco);dist (cm);Q",
499 tfs->make<TProfile>(
"fTransverse5_electron",
500 "transverse e- profile [4 <= t < 5] (reco);dist (cm);Q",
507 "fLongitudinal_photon",
"longitudinal photon profile (reco);t;Q",
LBINS,
LMIN,
LMAX);
509 tfs->make<TProfile>(
"fTransverse1_photon",
510 "transverse photon profile [0 <= t < 1] (reco);dist (cm);Q",
515 tfs->make<TProfile>(
"fTransverse2_photon",
516 "transverse photon profile [1 <= t < 2] (reco);dist (cm);Q",
521 tfs->make<TProfile>(
"fTransverse3_photon",
522 "transverse photon profile [2 <= t < 3] (reco);dist (cm);Q",
527 tfs->make<TProfile>(
"fTransverse4_photon",
528 "transverse photon profile [3 <= t < 4] (reco);dist (cm);Q",
533 tfs->make<TProfile>(
"fTransverse5_photon",
534 "transverse photon profile [4 <= t < 5] (reco);dist (cm);Q",
541 "fLongitudinal_other",
"longitudinal other profile (reco);t;Q",
LBINS,
LMIN,
LMAX);
543 tfs->make<TProfile>(
"fTransverse1_other",
544 "transverse other profile [0 <= t < 1] (reco);dist (cm);Q",
549 tfs->make<TProfile>(
"fTransverse2_other",
550 "transverse other profile [1 <= t < 2] (reco);dist (cm);Q",
555 tfs->make<TProfile>(
"fTransverse3_other",
556 "transverse other profile [2 <= t < 3] (reco);dist (cm);Q",
561 tfs->make<TProfile>(
"fTransverse4_other",
562 "transverse other profile [3 <= t < 4] (reco);dist (cm);Q",
567 tfs->make<TProfile>(
"fTransverse5_other",
568 "transverse other profile [4 <= t < 5] (reco);dist (cm);Q",
582 std::vector<art::Ptr<recob::Hit>> hitlist;
586 std::vector<art::Ptr<sim::SimChannel>> simchanlist;
591 std::vector<art::Ptr<recob::Shower>> showerlist;
596 std::vector<art::Ptr<simb::MCTruth>> mclist;
602 if (
empty(mclist))
return;
605 auto const det_prop =
613 if (showerlist.size()) {
614 std::vector<art::Ptr<recob::Hit>> showerhits = shwfm.at(0);
618 showerlist[0]->ShowerStart(),
642 double shwVtxTime = detProp.
ConvertXToTicks(shwvtx[0], collectionPlane);
643 double shwVtxWire = geom->
WireCoordinate(shwvtx[1], shwvtx[2], collectionPlane);
645 double shwTwoTime = detProp.
ConvertXToTicks(shwvtx[0] + shwdir[0], collectionPlane);
647 geom->
WireCoordinate(shwvtx[1] + shwdir[1], shwvtx[2] + shwdir[2], collectionPlane);
652 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
653 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
654 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
655 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
656 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
658 for (
size_t i = 0; i < showerhits.size(); ++i) {
659 if (showerhits[i]->
WireID().Plane != collectionPlane.Plane)
continue;
665 double xvtx = shwVtxTime * tickToDist;
666 double yvtx = shwVtxWire * wirePitch;
668 double xtwo = shwTwoTime * tickToDist;
669 double ytwo = shwTwoWire * wirePitch;
671 double xtwoorth = (ytwo - yvtx) + xvtx;
672 double ytwoorth = -(xtwo - xvtx) + yvtx;
674 double xhit = showerhits[i]->PeakTime() * tickToDist;
675 double yhit = showerhits[i]->WireID().Wire * wirePitch;
677 double ldist =
std::abs((ytwoorth - yvtx) * xhit - (xtwoorth - xvtx) * yhit + xtwoorth * yvtx -
680 double tdist = ((ytwo - yvtx) * xhit - (xtwo - xvtx) * yhit + xtwo * yvtx - ytwo * xvtx) /
687 double t = ldist /
X0;
689 double Q = showerhits[i]->Integral() *
693 ttemp->Fill(tdist, Q);
696 ttemp_1->Fill(tdist, Q);
698 ttemp_2->Fill(tdist, Q);
700 ttemp_3->Fill(tdist, Q);
702 ttemp_4->Fill(tdist, Q);
704 ttemp_5->Fill(tdist, Q);
708 for (
int i = 0; i <
LBINS; ++i) {
709 if (ltemp->GetBinContent(i + 1) == 0)
continue;
712 fLongitudinal->Fill(ltemp->GetBinCenter(i + 1), elep, ltemp->GetBinContent(i + 1));
715 for (
int i = 0; i <
TBINS; ++i) {
716 if (ttemp->GetBinContent(i + 1) == 0)
continue;
719 fTransverse->Fill(ttemp->GetBinCenter(i + 1), elep, ttemp->GetBinContent(i + 1));
722 ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
724 ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
726 ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
728 ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
730 ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
732 fTransverse_1->Fill(ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
733 fTransverse_2->Fill(ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
734 fTransverse_3->Fill(ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
735 fTransverse_4->Fill(ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
736 fTransverse_5->Fill(ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
752 std::map<int, double> trkID_E;
757 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
758 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
759 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
760 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
761 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
769 double shwvtxT = -999;
770 double shwvtxW = -999;
771 double shwtwoT = -999;
772 double shwtwoW = -999;
774 double shwvtxx = -999;
775 double shwvtxy = -999;
776 double shwtwox = -999;
777 double shwtwoy = -999;
778 double xtwoorth = -999;
779 double ytwoorth = -999;
781 double wirePitch = -999;
782 double tickToDist = -999;
784 bool foundParent =
false;
786 for (
auto const&
hit : allhits) {
787 if (
hit->WireID().Plane != collectionPlane.Plane)
continue;
792 for (
size_t j = 0; j < trackIDs.size(); ++j) {
816 shwvtxx = shwvtxT * tickToDist;
817 shwvtxy = shwvtxW * wirePitch;
819 shwtwox = shwtwoT * tickToDist;
820 shwtwoy = shwtwoW * wirePitch;
822 xtwoorth = (shwtwoy - shwvtxy) + shwvtxx;
823 ytwoorth = -(shwtwox - shwvtxx) + shwvtxy;
827 double xhit =
hit->PeakTime() * tickToDist;
828 double yhit =
hit->WireID().Wire * wirePitch;
830 double ldist =
abs((ytwoorth - shwvtxy) * xhit - (xtwoorth - shwvtxx) * yhit +
831 xtwoorth * shwvtxy - ytwoorth * shwvtxx) /
832 std::hypot(ytwoorth - shwvtxy, xtwoorth - shwvtxx);
833 double tdist = ((shwtwoy - shwvtxy) * xhit - (shwtwox - shwvtxx) * yhit + shwtwox * shwvtxy -
835 std::hypot(shwtwoy - shwvtxy, shwtwox - shwvtxx);
837 double to3D =
std::hypot(xvtx - xtwo, yvtx - ytwo, zvtx - ztwo) /
842 double t = ldist /
X0;
844 double energy = trackIDs[j].energy;
846 ltemp->Fill(t, energy);
847 ttemp->Fill(tdist, energy);
850 ttemp_1->Fill(tdist, energy);
852 ttemp_2->Fill(tdist, energy);
854 ttemp_3->Fill(tdist, energy);
856 ttemp_4->Fill(tdist, energy);
858 ttemp_5->Fill(tdist, energy);
864 for (
int i = 0; i <
LBINS; ++i) {
865 if (ltemp->GetBinContent(i + 1) == 0)
continue;
870 for (
int i = 0; i <
TBINS; ++i) {
871 if (ttemp->GetBinContent(i + 1) == 0)
continue;
876 ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
878 ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
880 ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
882 ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
884 ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
897 std::vector<sim::MCEnDep> alledep;
902 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
903 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
904 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
905 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
906 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
909 for (
size_t i = 0; i < allchan.size(); ++i) {
914 for (
auto const& tdc_ide_pair : tdc_ide_map) {
915 for (
auto const& ide : tdc_ide_pair.second) {
924 alledep.push_back(edep);
931 double x0 = electron.
Vx();
932 double y0 = electron.
Vy();
933 double z0 = electron.
Vz();
935 double x2 = electron.
Px();
936 double y2 = electron.
Py();
937 double z2 = electron.
Pz();
939 TVector3 v0(x2, y2, z2);
942 for (
size_t i = 0; i < alledep.size(); ++i) {
943 double x = (double)alledep[i].
Vertex()[0];
944 double y = (double)alledep[i].
Vertex()[1];
945 double z = (double)alledep[i].
Vertex()[2];
947 TVector3 v1(x - x0, y - y0, z - z0);
949 double ldist = v0.Dot(v1);
950 double t = ldist /
X0;
951 double tdist = (v0.Orthogonal()).Dot(v1);
953 double energy = alledep[i].Energy();
955 ltemp->Fill(t, energy);
956 ttemp->Fill(tdist, energy);
959 ttemp_1->Fill(tdist, energy);
961 ttemp_2->Fill(tdist, energy);
963 ttemp_3->Fill(tdist, energy);
965 ttemp_4->Fill(tdist, energy);
967 ttemp_5->Fill(tdist, energy);
970 for (
int i = 0; i <
LBINS; ++i) {
971 if (ltemp->GetBinContent(i + 1) == 0)
continue;
974 ltemp->GetBinCenter(i + 1), electron.
E(), ltemp->GetBinContent(i + 1));
977 for (
int i = 0; i <
TBINS; ++i) {
978 if (ttemp->GetBinContent(i + 1) == 0)
continue;
981 ttemp->GetBinCenter(i + 1), electron.
E(), ttemp->GetBinContent(i + 1));
984 ttemp_1->GetBinCenter(i + 1), electron.
E(), ttemp_1->GetBinContent(i + 1));
986 ttemp_2->GetBinCenter(i + 1), electron.
E(), ttemp_2->GetBinContent(i + 1));
988 ttemp_3->GetBinCenter(i + 1), electron.
E(), ttemp_3->GetBinContent(i + 1));
990 ttemp_4->GetBinCenter(i + 1), electron.
E(), ttemp_4->GetBinContent(i + 1));
992 ttemp_5->GetBinCenter(i + 1), electron.
E(), ttemp_5->GetBinContent(i + 1));
double E(const int i=0) const
geo::Length_t WireCoordinate(double YPos, double ZPos, geo::PlaneID const &planeid) const
Returns the index of the nearest wire to the specified position.
TProfile * fTransverse4_photon
TCShowerTemplateMaker(fhicl::ParameterSet const &pset)
const simb::MCNeutrino & GetNeutrino() const
double Py(const int i=0) const
void analyze(const art::Event &evt) override
TProfile2D * fShowerProfileSimTrans2D_5
TProfile * fTransverse3_photon
TProfile * fLongitudinal_photon
const simb::MCParticle * TrackIdToParticle_P(int id) const
TProfile2D * fShowerProfileSimTrans2D_2
const simb::MCParticle & Nu() const
TProfile * fShowerProfileRecoTrans
std::string fHitModuleLabel
double Px(const int i=0) const
double Temperature() const
In kelvin.
std::string fShowerModuleLabel
TProfile * fLongitudinal_electron
TProfile2D * fShowerProfileHitTrans2D_2
void SetTrackId(unsigned int id)
TProfile * fTransverse4_electron
void showerProfile(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> showerhits, TVector3 shwvtx, TVector3 shwdir, double elep)
EDAnalyzer(fhicl::ParameterSet const &pset)
TProfile2D * fShowerProfileSimTrans2D_1
geo::Length_t WirePitch(geo::PlaneID const &planeid) const
Returns the distance between two consecutive wires.
TProfile * fTransverse2_photon
TProfile2D * fShowerProfileHitTrans2D_4
TProfile * fShowerProfileSimLong
art framework interface to geometry description
TProfile2D * fShowerProfileHitTrans2D_1
std::enable_if_t< std::is_arithmetic_v< T >, T > hypot(T x, T y)
double Efield(unsigned int planegap=0) const
kV/cm
TProfile * fShowerProfileSimTrans
TProfile * fTransverse1_photon
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
TProfile2D * fShowerProfileRecoTrans2D_4
void showerProfileTrue(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> allhits, double elep)
int PdgCode(Resonance_t res, int Q)
(resonance id, charge) -> PDG code
const simb::MCParticle & Lepton() const
#define DEFINE_ART_MODULE(klass)
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
TProfile * fTransverse1_other
std::string fDigitModuleLabel
TProfile2D * fShowerProfileRecoTrans2D_5
void SetVertex(float x, float y, float z)
double ConvertXToTicks(double X, int p, int t, int c) const
TProfile * fTransverse5_other
double DriftVelocity(double efield=0., double temperature=0.) const
cm/us
TProfile * fLongitudinal_other
TProfile2D * fShowerProfileHitTrans2D_3
View_t View(geo::PlaneID const &pid) const
Returns the view (wire orientation) on the channels of specified TPC plane.
TProfile * fShowerProfileRecoLong
TProfile2D * fShowerProfileRecoTrans2D_2
Detector simulation of raw signals on wires.
raw::ChannelID_t Channel() const
Returns the readout channel this object describes.
double Vx(const int i=0) const
Declaration of signal hit object.
TProfile2D * fShowerProfileSimLong2D
TProfile * fTransverse5_electron
TProfile2D * fShowerProfileSimTrans2D
TProfile * fShowerProfileHitTrans
TProfile * fTransverse3_electron
Contains all timing reference information for the detector.
TProfile * fShowerProfileHitLong
TProfile2D * fShowerProfileRecoTrans2D_3
std::vector< sim::TrackIDE > HitToEveTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
TProfile2D * fShowerProfileHitTrans2D
double Pz(const int i=0) const
double Vz(const int i=0) const
TProfile2D * fShowerProfileSimTrans2D_4
detail::Node< FrameID, bool > PlaneID
TDCIDEs_t const & TDCIDEMap() const
Returns all the deposited energy information as stored.
boost::graph_traits< ModuleGraph >::vertex_descriptor Vertex
TProfile * fTransverse4_other
calo::CalorimetryAlg fCalorimetryAlg
auto const & get(AssnsNode< L, R, D > const &r)
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
const simb::MCParticle * TrackIdToMotherParticle_P(int id) const
double LifetimeCorrection(detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop, double time, double T0=0) const
TProfile2D * fShowerProfileHitLong2D
TProfile * fTransverse5_photon
TProfile2D * fShowerProfileRecoLong2D
double sampling_rate(DetectorClocksData const &data)
Returns the period of the TPC readout electronics clock.
TProfile2D * fShowerProfileRecoTrans2D_1
TProfile * fTransverse3_other
TProfile2D * fShowerProfileRecoTrans2D
TProfile * fTransverse2_electron
TProfile2D * fShowerProfileHitTrans2D_5
double Vy(const int i=0) const
decltype(auto) constexpr empty(T &&obj)
ADL-aware version of std::empty.
TProfile2D * fShowerProfileSimTrans2D_3
TProfile * fTransverse1_electron
std::string fGenieGenModuleLabel
TProfile * fTransverse2_other