14 #include "art_root_io/TFileService.h" 33 #include "TProfile2D.h" 136 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",
581 std::vector<art::Ptr<recob::Hit>> hitlist;
585 std::vector<art::Ptr<sim::SimChannel>> simchanlist;
590 std::vector<art::Ptr<recob::Shower>> showerlist;
595 std::vector<art::Ptr<simb::MCTruth>> mclist;
601 if (
empty(mclist))
return;
604 auto const det_prop =
612 if (showerlist.size()) {
613 std::vector<art::Ptr<recob::Hit>> showerhits = shwfm.at(0);
617 showerlist[0]->ShowerStart(),
640 double shwVtxTime = detProp.
ConvertXToTicks(shwvtx[0], collectionPlane);
644 double shwTwoTime = detProp.
ConvertXToTicks(shwvtx[0] + shwdir[0], collectionPlane);
650 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
651 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
652 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
653 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
654 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
656 for (
size_t i = 0; i < showerhits.size(); ++i) {
657 if (showerhits[i]->
WireID().Plane != collectionPlane.Plane)
continue;
663 double xvtx = shwVtxTime * tickToDist;
664 double yvtx = shwVtxWire * wirePitch;
666 double xtwo = shwTwoTime * tickToDist;
667 double ytwo = shwTwoWire * wirePitch;
669 double xtwoorth = (ytwo - yvtx) + xvtx;
670 double ytwoorth = -(xtwo - xvtx) + yvtx;
672 double xhit = showerhits[i]->PeakTime() * tickToDist;
673 double yhit = showerhits[i]->WireID().Wire * wirePitch;
675 double ldist =
std::abs((ytwoorth - yvtx) * xhit - (xtwoorth - xvtx) * yhit + xtwoorth * yvtx -
677 std::hypot(ytwoorth - yvtx, xtwoorth - xvtx);
678 double tdist = ((ytwo - yvtx) * xhit - (xtwo - xvtx) * yhit + xtwo * yvtx - ytwo * xvtx) /
679 std::hypot(ytwo - yvtx, xtwo - xvtx);
681 double to3D = 1. / std::hypot(xvtx - xtwo,
685 double t = ldist /
X0;
687 double Q = showerhits[i]->Integral() *
691 ttemp->Fill(tdist, Q);
694 ttemp_1->Fill(tdist, Q);
696 ttemp_2->Fill(tdist, Q);
698 ttemp_3->Fill(tdist, Q);
700 ttemp_4->Fill(tdist, Q);
702 ttemp_5->Fill(tdist, Q);
706 for (
int i = 0; i <
LBINS; ++i) {
707 if (ltemp->GetBinContent(i + 1) == 0)
continue;
710 fLongitudinal->Fill(ltemp->GetBinCenter(i + 1), elep, ltemp->GetBinContent(i + 1));
713 for (
int i = 0; i <
TBINS; ++i) {
714 if (ttemp->GetBinContent(i + 1) == 0)
continue;
717 fTransverse->Fill(ttemp->GetBinCenter(i + 1), elep, ttemp->GetBinContent(i + 1));
720 ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
722 ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
724 ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
726 ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
728 ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
730 fTransverse_1->Fill(ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
731 fTransverse_2->Fill(ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
732 fTransverse_3->Fill(ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
733 fTransverse_4->Fill(ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
734 fTransverse_5->Fill(ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
750 std::map<int, double> trkID_E;
755 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
756 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
757 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
758 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
759 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
767 double shwvtxT = -999;
768 double shwvtxW = -999;
769 double shwtwoT = -999;
770 double shwtwoW = -999;
772 double shwvtxx = -999;
773 double shwvtxy = -999;
774 double shwtwox = -999;
775 double shwtwoy = -999;
776 double xtwoorth = -999;
777 double ytwoorth = -999;
779 double wirePitch = -999;
780 double tickToDist = -999;
782 bool foundParent =
false;
784 for (
auto const&
hit : allhits) {
785 if (
hit->WireID().Plane != collectionPlane.Plane)
continue;
790 for (
size_t j = 0; j < trackIDs.size(); ++j) {
815 shwvtxx = shwvtxT * tickToDist;
816 shwvtxy = shwvtxW * wirePitch;
818 shwtwox = shwtwoT * tickToDist;
819 shwtwoy = shwtwoW * wirePitch;
821 xtwoorth = (shwtwoy - shwvtxy) + shwvtxx;
822 ytwoorth = -(shwtwox - shwvtxx) + shwvtxy;
826 double xhit =
hit->PeakTime() * tickToDist;
827 double yhit =
hit->WireID().Wire * wirePitch;
829 double ldist =
abs((ytwoorth - shwvtxy) * xhit - (xtwoorth - shwvtxx) * yhit +
830 xtwoorth * shwvtxy - ytwoorth * shwvtxx) /
831 std::hypot(ytwoorth - shwvtxy, xtwoorth - shwvtxx);
832 double tdist = ((shwtwoy - shwvtxy) * xhit - (shwtwox - shwvtxx) * yhit + shwtwox * shwvtxy -
834 std::hypot(shwtwoy - shwvtxy, shwtwox - shwvtxx);
836 double to3D = std::hypot(xvtx - xtwo, yvtx - ytwo, zvtx - ztwo) /
837 std::hypot(shwvtxx - shwtwox,
841 double t = ldist /
X0;
843 double energy = trackIDs[j].energy;
845 ltemp->Fill(t, energy);
846 ttemp->Fill(tdist, energy);
849 ttemp_1->Fill(tdist, energy);
851 ttemp_2->Fill(tdist, energy);
853 ttemp_3->Fill(tdist, energy);
855 ttemp_4->Fill(tdist, energy);
857 ttemp_5->Fill(tdist, energy);
863 for (
int i = 0; i <
LBINS; ++i) {
864 if (ltemp->GetBinContent(i + 1) == 0)
continue;
869 for (
int i = 0; i <
TBINS; ++i) {
870 if (ttemp->GetBinContent(i + 1) == 0)
continue;
875 ttemp_1->GetBinCenter(i + 1), elep, ttemp_1->GetBinContent(i + 1));
877 ttemp_2->GetBinCenter(i + 1), elep, ttemp_2->GetBinContent(i + 1));
879 ttemp_3->GetBinCenter(i + 1), elep, ttemp_3->GetBinContent(i + 1));
881 ttemp_4->GetBinCenter(i + 1), elep, ttemp_4->GetBinContent(i + 1));
883 ttemp_5->GetBinCenter(i + 1), elep, ttemp_5->GetBinContent(i + 1));
896 std::vector<sim::MCEnDep> alledep;
901 TH1F* ttemp_1 =
new TH1F(
"ttemp_1",
"ttemp_1",
TBINS,
TMIN,
TMAX);
902 TH1F* ttemp_2 =
new TH1F(
"ttemp_2",
"ttemp_2",
TBINS,
TMIN,
TMAX);
903 TH1F* ttemp_3 =
new TH1F(
"ttemp_3",
"ttemp_3",
TBINS,
TMIN,
TMAX);
904 TH1F* ttemp_4 =
new TH1F(
"ttemp_4",
"ttemp_4",
TBINS,
TMIN,
TMAX);
905 TH1F* ttemp_5 =
new TH1F(
"ttemp_5",
"ttemp_5",
TBINS,
TMIN,
TMAX);
908 for (
size_t i = 0; i < allchan.size(); ++i) {
913 for (
auto const& tdc_ide_pair : tdc_ide_map) {
914 for (
auto const& ide : tdc_ide_pair.second) {
923 alledep.push_back(edep);
930 double x0 = electron.
Vx();
931 double y0 = electron.
Vy();
932 double z0 = electron.
Vz();
934 double x2 = electron.
Px();
935 double y2 = electron.
Py();
936 double z2 = electron.
Pz();
938 TVector3 v0(x2, y2, z2);
941 for (
size_t i = 0; i < alledep.size(); ++i) {
942 double x = (double)alledep[i].
Vertex()[0];
943 double y = (double)alledep[i].
Vertex()[1];
944 double z = (double)alledep[i].
Vertex()[2];
946 TVector3 v1(x - x0, y - y0, z - z0);
948 double ldist = v0.Dot(v1);
949 double t = ldist /
X0;
950 double tdist = (v0.Orthogonal()).Dot(v1);
952 double energy = alledep[i].Energy();
954 ltemp->Fill(t, energy);
955 ttemp->Fill(tdist, energy);
958 ttemp_1->Fill(tdist, energy);
960 ttemp_2->Fill(tdist, energy);
962 ttemp_3->Fill(tdist, energy);
964 ttemp_4->Fill(tdist, energy);
966 ttemp_5->Fill(tdist, energy);
969 for (
int i = 0; i <
LBINS; ++i) {
970 if (ltemp->GetBinContent(i + 1) == 0)
continue;
973 ltemp->GetBinCenter(i + 1), electron.
E(), ltemp->GetBinContent(i + 1));
976 for (
int i = 0; i <
TBINS; ++i) {
977 if (ttemp->GetBinContent(i + 1) == 0)
continue;
980 ttemp->GetBinCenter(i + 1), electron.
E(), ttemp->GetBinContent(i + 1));
983 ttemp_1->GetBinCenter(i + 1), electron.
E(), ttemp_1->GetBinContent(i + 1));
985 ttemp_2->GetBinCenter(i + 1), electron.
E(), ttemp_2->GetBinContent(i + 1));
987 ttemp_3->GetBinCenter(i + 1), electron.
E(), ttemp_3->GetBinContent(i + 1));
989 ttemp_4->GetBinCenter(i + 1), electron.
E(), ttemp_4->GetBinContent(i + 1));
991 ttemp_5->GetBinCenter(i + 1), electron.
E(), ttemp_5->GetBinContent(i + 1));
double E(const int i=0) const
TProfile * fTransverse4_photon
TCShowerTemplateMaker(fhicl::ParameterSet const &pset)
Length_t WireCoordinate(Point_t const &pos, PlaneID const &planeid) const
Returns the index of the nearest wire to the specified position.
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
Declaration of signal hit object.
const simb::MCParticle & Nu() const
TProfile * fShowerProfileRecoTrans
std::string fHitModuleLabel
double Px(const int i=0) const
double Temperature() const
In kelvin.
::geo::Point_t toPoint(Point const &p)
Convert the specified point into a geo::Point_t.
constexpr auto abs(T v)
Returns the absolute value of the argument.
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
TProfile * fTransverse2_photon
TProfile2D * fShowerProfileHitTrans2D_4
TProfile * fShowerProfileSimLong
TProfile2D * fShowerProfileHitTrans2D_1
Float_t y2[n_points_geant4]
double Efield(unsigned int planegap=0) const
kV/cm
TProfile * fShowerProfileSimTrans
IDparameter< geo::PlaneID > PlaneID
Member type of validated geo::PlaneID parameter.
TProfile * fTransverse1_photon
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
TProfile2D * fShowerProfileRecoTrans2D_4
void showerProfileTrue(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> allhits, double elep)
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
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
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space.
TProfile2D * fShowerProfileSimLong2D
TProfile * fTransverse5_electron
decltype(auto) get(T &&obj)
ADL-aware version of std::to_string.
TProfile2D * fShowerProfileSimTrans2D
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
TProfile * fShowerProfileHitTrans
TProfile * fTransverse3_electron
Contains all timing reference information for the detector.
TProfile * fShowerProfileHitLong
TProfile2D * fShowerProfileRecoTrans2D_3
View_t View(PlaneID const &pid) const
Returns the view (wire orientation) on the channels of specified TPC plane.
std::vector< sim::TrackIDE > HitToEveTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
TProfile2D * fShowerProfileHitTrans2D
double Pz(const int i=0) const
object containing MC truth information necessary for making RawDigits and doing back tracking ...
double Vz(const int i=0) const
TProfile2D * fShowerProfileSimTrans2D_4
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
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
Float_t x2[n_points_geant4]
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
Length_t WirePitch(PlaneID const &planeid=plane_zero) const
Returns the distance between two consecutive wires.
TProfile * fTransverse2_electron
TProfile2D * fShowerProfileHitTrans2D_5
double Vy(const int i=0) const
art framework interface to geometry description
decltype(auto) constexpr empty(T &&obj)
ADL-aware version of std::empty.
TProfile2D * fShowerProfileSimTrans2D_3
TProfile * fTransverse1_electron
std::string fGenieGenModuleLabel
TProfile * fTransverse2_other