Classes | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
nnet::TrainingDataAlg Class Reference

#include <PointIdAlg.h>

Inheritance diagram for nnet::TrainingDataAlg:
img::DataProviderAlg

Classes

struct  Config
 
struct  WireDrift
 

Public Types

enum  EMask { kNone = 0, kPdgMask = 0x00000FFF, kTypeMask = 0x0000F000, kVtxMask = 0xFFFF0000 }
 
enum  ETrkType { kDelta = 0x1000, kMichel = 0x2000, kPriEl = 0x4000, kPriMu = 0x8000 }
 
enum  EVtxId {
  kNuNC = 0x0010000, kNuCC = 0x0020000, kNuPri = 0x0040000, kNuE = 0x0100000,
  kNuMu = 0x0200000, kNuTau = 0x0400000, kHadr = 0x1000000, kPi0 = 0x2000000,
  kDecay = 0x4000000, kConv = 0x8000000, kElectronEnd = 0x10000000, kElastic = 0x20000000,
  kInelastic = 0x40000000
}
 
- Public Types inherited from img::DataProviderAlg
enum  EDownscaleMode { kMax = 1, kMaxMean = 2, kMean = 3 }
 

Public Member Functions

 TrainingDataAlg (const fhicl::ParameterSet &pset)
 
 TrainingDataAlg (const Config &config)
 
 ~TrainingDataAlg () override
 
void reconfigure (const Config &config)
 
bool saveSimInfo () const
 
bool setEventData (const art::Event &event, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, unsigned int plane, unsigned int tpc, unsigned int cryo)
 
bool setDataEventData (const art::Event &event, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, unsigned int plane, unsigned int tpc, unsigned int cryo)
 
bool findCrop (float max_e_cut, unsigned int &w0, unsigned int &w1, unsigned int &d0, unsigned int &d1) const
 
double getEdepTot () const
 
std::vector< float > const & wireEdep (size_t widx) const
 
std::vector< int > const & wirePdg (size_t widx) const
 
- Public Member Functions inherited from img::DataProviderAlg
 DataProviderAlg (const fhicl::ParameterSet &pset)
 
 DataProviderAlg (const Config &config)
 
virtual ~DataProviderAlg ()
 
bool setWireDriftData (const detinfo::DetectorClocksData &clock_data, const detinfo::DetectorPropertiesData &det_prop, const std::vector< recob::Wire > &wires, unsigned int plane, unsigned int tpc, unsigned int cryo)
 
std::vector< float > const & wireData (size_t widx) const
 
std::vector< std::vector< float > > getPatch (size_t wire, float drift, size_t patchSizeW, size_t patchSizeD) const
 
float getPixelOrZero (int wire, int drift) const
 
double getAdcSum () const
 
size_t getAdcArea () const
 
float poolMax (int wire, int drift, size_t r=0) const
 Pool max value in a patch around the wire/drift pixel. More...
 
unsigned int Cryo () const
 Pool sum of pixels in a patch around the wire/drift pixel. More...
 
unsigned int TPC () const
 
unsigned int Plane () const
 
unsigned int NWires () const
 
unsigned int NScaledDrifts () const
 
unsigned int NCachedDrifts () const
 
unsigned int DriftWindow () const
 
float ZeroLevel () const
 Level of zero ADC after scaling. More...
 
double LifetimeCorrection (detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop, double tick) const
 

Protected Member Functions

img::DataProviderAlgView resizeView (detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop, size_t wires, size_t drifts) override
 
- Protected Member Functions inherited from img::DataProviderAlg
std::vector< float > downscaleMax (std::size_t dst_size, std::vector< float > const &adc, size_t tick0) const
 
std::vector< float > downscaleMaxMean (std::size_t dst_size, std::vector< float > const &adc, size_t tick0) const
 
std::vector< float > downscaleMean (std::size_t dst_size, std::vector< float > const &adc, size_t tick0) const
 
std::vector< float > downscale (std::size_t dst_size, std::vector< float > const &adc, size_t tick0) const
 
size_t getDriftIndex (float drift) const
 
std::optional< std::vector< float > > setWireData (std::vector< float > const &adc, size_t wireIdx) const
 
bool patchFromDownsampledView (size_t wire, float drift, size_t size_w, size_t size_d, std::vector< std::vector< float >> &patch) const
 
bool patchFromOriginalView (size_t wire, float drift, size_t size_w, size_t size_d, std::vector< std::vector< float >> &patch) const
 

Private Member Functions

WireDrift getProjection (detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const TLorentzVector &tvec, unsigned int plane) const
 
bool setWireEdepsAndLabels (std::vector< float > const &edeps, std::vector< int > const &pdgs, size_t wireIdx)
 
void collectVtxFlags (std::unordered_map< size_t, std::unordered_map< int, int >> &wireToDriftToVtxFlags, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const std::unordered_map< int, const simb::MCParticle * > &particleMap, unsigned int plane) const
 
bool isElectronEnd (const simb::MCParticle &particle, const std::unordered_map< int, const simb::MCParticle * > &particleMap) const
 
bool isMuonDecaying (const simb::MCParticle &particle, const std::unordered_map< int, const simb::MCParticle * > &particleMap) const
 

Static Private Member Functions

static float particleRange2 (const simb::MCParticle &particle)
 

Private Attributes

double fEdepTot
 
std::vector< std::vector< float > > fWireDriftEdep
 
std::vector< std::vector< int > > fWireDriftPdg
 
art::InputTag fWireProducerLabel
 
art::InputTag fHitProducerLabel
 
art::InputTag fTrackModuleLabel
 
art::InputTag fSimulationProducerLabel
 
art::InputTag fSimChannelProducerLabel
 
bool fSaveVtxFlags
 
bool fSaveSimInfo
 
unsigned int fAdcDelay
 
std::vector< size_t > fEventsPerBin
 

Additional Inherited Members

- Protected Attributes inherited from img::DataProviderAlg
DataProviderAlgView fAlgView
 
EDownscaleMode fDownscaleMode
 
size_t fDriftWindow
 
bool fDownscaleFullView
 
float fDriftWindowInv
 
calo::CalorimetryAlg fCalorimetryAlg
 
geo::GeometryCore const * fGeometry
 

Detailed Description

Definition at line 198 of file PointIdAlg.h.

Member Enumeration Documentation

Enumerator
kNone 
kPdgMask 
kTypeMask 
kVtxMask 

Definition at line 200 of file PointIdAlg.h.

200  {
201  kNone = 0,
202  kPdgMask = 0x00000FFF, // pdg code mask
203  kTypeMask = 0x0000F000, // track type mask
204  kVtxMask = 0xFFFF0000 // vertex flags
205  };
Enumerator
kDelta 
kMichel 
kPriEl 
kPriMu 

Definition at line 207 of file PointIdAlg.h.

207  {
208  kDelta = 0x1000, // delta electron
209  kMichel = 0x2000, // Michel electron
210  kPriEl = 0x4000, // primary electron
211  kPriMu = 0x8000 // primary muon
212  };
Enumerator
kNuNC 
kNuCC 
kNuPri 
kNuE 
kNuMu 
kNuTau 
kHadr 
kPi0 
kDecay 
kConv 
kElectronEnd 
kElastic 
kInelastic 

Definition at line 214 of file PointIdAlg.h.

214  {
215  kNuNC = 0x0010000,
216  kNuCC = 0x0020000,
217  kNuPri = 0x0040000, // nu interaction type
218  kNuE = 0x0100000,
219  kNuMu = 0x0200000,
220  kNuTau = 0x0400000, // nu flavor
221  kHadr = 0x1000000, // hadronic inelastic scattering
222  kPi0 = 0x2000000, // pi0 produced in this vertex
223  kDecay = 0x4000000, // point of particle decay
224  kConv = 0x8000000, // gamma conversion
225  kElectronEnd = 0x10000000, // clear end of an electron
226  kElastic = 0x20000000, // Elastic scattering
227  kInelastic = 0x40000000 // Inelastic scattering
228  };

Constructor & Destructor Documentation

nnet::TrainingDataAlg::TrainingDataAlg ( const fhicl::ParameterSet pset)
inline

Definition at line 254 of file PointIdAlg.h.

256  {}
TrainingDataAlg(const fhicl::ParameterSet &pset)
Definition: PointIdAlg.h:254
nnet::TrainingDataAlg::TrainingDataAlg ( const Config config)

Definition at line 334 of file PointIdAlg.cxx.

336  , fEdepTot(0)
344  , fEventsPerBin(100, 0)
345 {
346  // If no sim channel producer is set then make it the same as the simulation label
347  if(fSimChannelProducerLabel.label().empty())
349 
351 }
fhicl::Atom< art::InputTag > WireLabel
Definition: PointIdAlg.h:234
unsigned int fAdcDelay
Definition: PointIdAlg.h:365
art::InputTag fTrackModuleLabel
Definition: PointIdAlg.h:359
fhicl::Atom< art::InputTag > HitLabel
Definition: PointIdAlg.h:236
fhicl::Atom< bool > SaveVtxFlags
Definition: PointIdAlg.h:246
fhicl::Atom< unsigned int > AdcDelayTicks
Definition: PointIdAlg.h:249
art::InputTag fWireProducerLabel
Definition: PointIdAlg.h:357
std::string const & label() const noexcept
Definition: InputTag.cc:79
static Config * config
Definition: config.cpp:1054
std::vector< size_t > fEventsPerBin
Definition: PointIdAlg.h:367
art::InputTag fSimChannelProducerLabel
Definition: PointIdAlg.h:361
fhicl::Atom< art::InputTag > TrackLabel
Definition: PointIdAlg.h:238
fhicl::Atom< art::InputTag > SimChannelLabel
Definition: PointIdAlg.h:243
art::InputTag fSimulationProducerLabel
Definition: PointIdAlg.h:360
fhicl::Atom< art::InputTag > SimulationLabel
Definition: PointIdAlg.h:240
art::InputTag fHitProducerLabel
Definition: PointIdAlg.h:358
nnet::TrainingDataAlg::~TrainingDataAlg ( )
overridedefault

Member Function Documentation

void nnet::TrainingDataAlg::collectVtxFlags ( std::unordered_map< size_t, std::unordered_map< int, int >> &  wireToDriftToVtxFlags,
detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp,
const std::unordered_map< int, const simb::MCParticle * > &  particleMap,
unsigned int  plane 
) const
private

Definition at line 554 of file PointIdAlg.cxx.

560 {
561  for (auto const& p : particleMap) {
562  auto const& particle = *p.second;
563 
564  double ekStart = 1000. * (particle.E() - particle.Mass());
565  double ekEnd = 1000. * (particle.EndE() - particle.Mass());
566  int pdg = abs(particle.PdgCode());
567  int flagsStart = nnet::TrainingDataAlg::kNone;
568  int flagsEnd = nnet::TrainingDataAlg::kNone;
569 
570  switch (pdg) {
571  case 22: // gamma
572  if ((particle.EndProcess() == "conv") && (ekStart > 40.0)) // conversion, gamma > 40MeV
573  {
574  flagsEnd = nnet::TrainingDataAlg::kConv;
575  }
576  break;
577 
578  case 11: // e+/-
579  if (isElectronEnd(particle, particleMap)) { flagsEnd = nnet::TrainingDataAlg::kElectronEnd; }
580  break;
581 
582  case 13: // mu+/-
583  if (isMuonDecaying(particle, particleMap)) { flagsEnd = nnet::TrainingDataAlg::kDecay; }
584  break;
585 
586  case 111: // pi0
587  flagsStart = nnet::TrainingDataAlg::kPi0;
588  break;
589 
590  case 321: // K+/-
591  case 211: // pi+/-
592  case 2212: // proton
593  if (ekStart > 50.0) {
594  if (particle.Mother() != 0) {
595  auto search = particleMap.find(particle.Mother());
596  if (search != particleMap.end()) {
597  auto const& mother = *((*search).second);
598  int m_pdg = abs(mother.PdgCode());
599  unsigned int nSec = mother.NumberDaughters();
600  unsigned int nVisible = 0;
601  if (nSec > 1) {
602  for (size_t d = 0; d < nSec; ++d) {
603  auto d_search = particleMap.find(mother.Daughter(d));
604  if (d_search != particleMap.end()) {
605  auto const& daughter = *((*d_search).second);
606  int d_pdg = abs(daughter.PdgCode());
607  if (((d_pdg == 2212) || (d_pdg == 211) || (d_pdg == 321)) &&
608  (1000. * (daughter.E() - daughter.Mass()) > 50.0)) {
609  ++nVisible;
610  }
611  }
612  }
613  }
614  // hadron with Ek > 50MeV (so well visible) and
615  // produced by another hadron (but not neutron, so not single track from nothing) or
616  // at least secondary hadrons with Ek > 50MeV (so this is a good kink or V-like)
617  if (((m_pdg != pdg) && (m_pdg != 2112)) || ((m_pdg != 2112) && (nVisible > 0)) ||
618  ((m_pdg == 2112) && (nVisible > 1))) {
619  flagsStart = nnet::TrainingDataAlg::kHadr;
620  }
621  }
622  }
623 
624  if (particle.EndProcess() == "FastScintillation") // potential decay at rest
625  {
626  unsigned int nSec = particle.NumberDaughters();
627  for (size_t d = 0; d < nSec; ++d) {
628  auto d_search = particleMap.find(particle.Daughter(d));
629  if (d_search != particleMap.end()) {
630  auto const& daughter = *((*d_search).second);
631  int d_pdg = abs(daughter.PdgCode());
632  if ((pdg == 321) && (d_pdg == 13)) {
634  break;
635  }
636  if ((pdg == 211) && (d_pdg == 13)) {
638  break;
639  }
640  }
641  }
642  }
643 
644  if ((particle.EndProcess() == "Decay") && (ekEnd > 200.0)) // decay in flight
645  {
646  unsigned int nSec = particle.NumberDaughters();
647  for (size_t d = 0; d < nSec; ++d) {
648  auto d_search = particleMap.find(particle.Daughter(d));
649  if (d_search != particleMap.end()) {
650  auto const& daughter = *((*d_search).second);
651  int d_pdg = abs(daughter.PdgCode());
652  if ((pdg == 321) && (d_pdg == 13)) {
653  flagsEnd = nnet::TrainingDataAlg::kHadr;
654  break;
655  }
656  if ((pdg == 211) && (d_pdg == 13)) {
657  flagsEnd = nnet::TrainingDataAlg::kHadr;
658  break;
659  }
660  }
661  }
662  }
663  }
664  break;
665 
666  default: continue;
667  }
668 
669  if (particle.Process() == "primary") { flagsStart |= nnet::TrainingDataAlg::kNuPri; }
670 
671  if (flagsStart != nnet::TrainingDataAlg::kNone) {
672  auto wd = getProjection(clockData, detProp, particle.Position(), plane);
673 
674  if ((wd.TPC == TPC()) && (wd.Cryo == Cryo())) {
675  wireToDriftToVtxFlags[wd.Wire][wd.Drift] |= flagsStart;
676  }
677  }
678  if (flagsEnd != nnet::TrainingDataAlg::kNone) {
679  auto wd = getProjection(clockData, detProp, particle.EndPosition(), plane);
680  if ((wd.TPC == TPC()) && (wd.Cryo == Cryo())) {
681  wireToDriftToVtxFlags[wd.Wire][wd.Drift] |= flagsEnd;
682  }
683  }
684 
685  //TY: check elastic/inelastic scattering
686  if (pdg == 321 || pdg == 211 || pdg == 2212) {
687  simb::MCTrajectory truetraj = particle.Trajectory();
688  auto thisTrajectoryProcessMap1 = truetraj.TrajectoryProcesses();
689  if (thisTrajectoryProcessMap1.size()) {
690  for (auto const& couple1 : thisTrajectoryProcessMap1) {
691  if ((truetraj.KeyToProcess(couple1.second)).find("Elastic") != std::string::npos) {
692  auto wd = getProjection(clockData, detProp, truetraj.at(couple1.first).first, plane);
693  if ((wd.TPC == TPC()) && (wd.Cryo == Cryo())) {
694  wireToDriftToVtxFlags[wd.Wire][wd.Drift] |= nnet::TrainingDataAlg::kElastic;
695  }
696  }
697  if ((truetraj.KeyToProcess(couple1.second)).find("Inelastic") != std::string::npos) {
698  auto wd = getProjection(clockData, detProp, truetraj.at(couple1.first).first, plane);
699  if ((wd.TPC == TPC()) && (wd.Cryo == Cryo())) {
700  wireToDriftToVtxFlags[wd.Wire][wd.Drift] |= nnet::TrainingDataAlg::kInelastic;
701  }
702  }
703  }
704  }
705  }
706  }
707 }
bool isMuonDecaying(const simb::MCParticle &particle, const std::unordered_map< int, const simb::MCParticle * > &particleMap) const
Definition: PointIdAlg.cxx:524
const value_type & at(const size_type i) const
Definition: MCTrajectory.h:175
std::string KeyToProcess(unsigned char const &key) const
WireDrift getProjection(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const TLorentzVector &tvec, unsigned int plane) const
Definition: PointIdAlg.cxx:425
bool isElectronEnd(const simb::MCParticle &particle, const std::unordered_map< int, const simb::MCParticle * > &particleMap) const
Definition: PointIdAlg.cxx:469
T abs(T value)
p
Definition: test.py:223
Definition: search.py:1
ProcessMap const & TrajectoryProcesses() const
Definition: MCTrajectory.h:188
unsigned int Cryo() const
Pool sum of pixels in a patch around the wire/drift pixel.
unsigned int TPC() const
bool nnet::TrainingDataAlg::findCrop ( float  max_e_cut,
unsigned int &  w0,
unsigned int &  w1,
unsigned int &  d0,
unsigned int &  d1 
) const

Definition at line 1020 of file PointIdAlg.cxx.

1025 {
1026  if (fWireDriftEdep.empty() || fWireDriftEdep.front().empty()) return false;
1027 
1028  float max_cut = 0.25 * max_e_cut;
1029 
1030  w0 = 0;
1031  float cut = 0;
1032  while (w0 < fWireDriftEdep.size()) {
1033  for (auto const d : fWireDriftEdep[w0])
1034  cut += d;
1035  if (cut < max_cut)
1036  w0++;
1037  else
1038  break;
1039  }
1040  w1 = fWireDriftEdep.size() - 1;
1041  cut = 0;
1042  while (w1 > w0) {
1043  for (auto const d : fWireDriftEdep[w1])
1044  cut += d;
1045  if (cut < max_cut)
1046  w1--;
1047  else
1048  break;
1049  }
1050  w1++;
1051 
1052  d0 = 0;
1053  cut = 0;
1054  while (d0 < fWireDriftEdep.front().size()) {
1055  for (size_t i = w0; i < w1; ++i)
1056  cut += fWireDriftEdep[i][d0];
1057  if (cut < max_cut)
1058  d0++;
1059  else
1060  break;
1061  }
1062  d1 = fWireDriftEdep.front().size() - 1;
1063  cut = 0;
1064  while (d1 > d0) {
1065  for (size_t i = w0; i < w1; ++i)
1066  cut += fWireDriftEdep[i][d1];
1067  if (cut < max_cut)
1068  d1--;
1069  else
1070  break;
1071  }
1072  d1++;
1073 
1074  unsigned int margin = 20;
1075  if ((w1 - w0 > 8) && (d1 - d0 > 8)) {
1076  if (w0 < margin)
1077  w0 = 0;
1078  else
1079  w0 -= margin;
1080 
1081  if (w1 > fWireDriftEdep.size() - margin)
1082  w1 = fWireDriftEdep.size();
1083  else
1084  w1 += margin;
1085 
1086  if (d0 < margin)
1087  d0 = 0;
1088  else
1089  d0 -= margin;
1090 
1091  if (d1 > fWireDriftEdep.front().size() - margin)
1092  d1 = fWireDriftEdep.front().size();
1093  else
1094  d1 += margin;
1095 
1096  return true;
1097  }
1098  else
1099  return false;
1100 }
std::vector< std::vector< float > > fWireDriftEdep
Definition: PointIdAlg.h:354
double nnet::TrainingDataAlg::getEdepTot ( ) const
inline

Definition at line 293 of file PointIdAlg.h.

294  {
295  return fEdepTot;
296  } // [GeV]
nnet::TrainingDataAlg::WireDrift nnet::TrainingDataAlg::getProjection ( detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp,
const TLorentzVector &  tvec,
unsigned int  plane 
) const
private

Definition at line 425 of file PointIdAlg.cxx.

429 {
431  wd.Wire = 0;
432  wd.Drift = 0;
433  wd.TPC = -1;
434  wd.Cryo = -1;
435 
436  try {
437  double vtx[3] = {tvec.X(), tvec.Y(), tvec.Z()};
438  if (fGeometry->FindTPCAtPosition(vtx).isValid) {
439  geo::TPCID tpcid = fGeometry->FindTPCAtPosition(vtx);
440  unsigned int tpc = tpcid.TPC, cryo = tpcid.Cryostat;
441 
442  // correct for the time offset
443  float dx = tvec.T() * 1.e-3 * detProp.DriftVelocity();
444  int driftDir = fGeometry->TPC(tpcid).DetectDriftDirection();
445  if (driftDir == 1) { dx *= -1; }
446  else if (driftDir != -1) {
447  throw cet::exception("nnet::TrainingDataAlg") << "drift direction is not X." << std::endl;
448  }
449  vtx[0] = tvec.X() + dx;
450 
451  wd.Wire = fGeometry->NearestWire(vtx, plane, tpc, cryo);
452  wd.Drift = detProp.ConvertXToTicks(vtx[0], plane, tpc, cryo);
453  wd.TPC = tpc;
454  wd.Cryo = cryo;
455  }
456  }
457  catch (const geo::InvalidWireIDError& e) {
458  mf::LogWarning("TrainingDataAlg")
459  << "Vertex projection out of wire planes, just skipping this vertex.";
460  }
461  catch (...) {
462  mf::LogWarning("TrainingDataAlg") << "Vertex projection out of wire planes, skip MC vertex.";
463  }
464  return wd;
465 }
geo::GeometryCore const * fGeometry
bool isValid
Whether this ID points to a valid element.
Definition: geo_types.h:211
CryostatID_t Cryostat
Index of cryostat.
Definition: geo_types.h:212
geo::TPCID FindTPCAtPosition(double const worldLoc[3]) const
Returns the ID of the TPC at specified location.
const double e
geo::WireID::WireID_t NearestWire(geo::Point_t const &point, geo::PlaneID const &planeid) const
Returns the index of wire closest to position in the specified TPC.
The data type to uniquely identify a TPC.
Definition: geo_types.h:386
short int DetectDriftDirection() const
Returns the expected drift direction based on geometry.
Definition: TPCGeo.cxx:157
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
TPCGeo const & TPC(unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified TPC.
Exception thrown on invalid wire number (e.g. NearestWireID())
Definition: Exceptions.h:158
TPCID_t TPC
Index of the TPC within its cryostat.
Definition: geo_types.h:406
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
bool nnet::TrainingDataAlg::isElectronEnd ( const simb::MCParticle particle,
const std::unordered_map< int, const simb::MCParticle * > &  particleMap 
) const
private

Definition at line 469 of file PointIdAlg.cxx.

472 {
473  const float minElectronLength2 = 2.5 * 2.5;
474  const float maxDeltaLength2 = 0.15 * 0.15;
475 
476  int pdg = abs(particle.PdgCode());
477  if (pdg != 11) return false; // should be applied only to electrons
478 
479  size_t nSec = particle.NumberDaughters();
480  for (size_t d = 0; d < nSec; ++d) {
481  auto d_search = particleMap.find(particle.Daughter(d));
482  if (d_search != particleMap.end()) {
483  auto const& daughter = *((*d_search).second);
484  int d_pdg = abs(daughter.PdgCode());
485  if (d_pdg != 22) { return false; } // not the end of the shower
486  }
487  }
488 
489  float trkLength2 = 0;
490  auto const* p = &particle;
491  bool branching = false;
492  while (!branching) {
493  trkLength2 += particleRange2(*p);
494  auto m_search = particleMap.find(p->Mother());
495  if (m_search != particleMap.end()) {
496  p = (*m_search).second;
497  int m_pdg = abs(p->PdgCode());
498  if (m_pdg == 11) {
499  nSec = p->NumberDaughters();
500  size_t ne = 0;
501  for (size_t d = 0; d < nSec; ++d) {
502  auto d_search = particleMap.find(p->Daughter(d));
503  if (d_search != particleMap.end()) {
504  auto const& daughter = *((*d_search).second);
505  int d_pdg = abs(daughter.PdgCode());
506  if (d_pdg == 11) {
507  if (particleRange2(daughter) > maxDeltaLength2) { ne++; }
508  }
509  }
510  }
511  if (ne > 1) { branching = true; }
512  }
513  else
514  break;
515  }
516  else
517  break;
518  }
519 
520  return (trkLength2 > minElectronLength2);
521 }
int PdgCode() const
Definition: MCParticle.h:212
int NumberDaughters() const
Definition: MCParticle.h:217
int Daughter(const int i) const
Definition: MCParticle.cxx:112
T abs(T value)
p
Definition: test.py:223
static float particleRange2(const simb::MCParticle &particle)
Definition: PointIdAlg.h:340
bool nnet::TrainingDataAlg::isMuonDecaying ( const simb::MCParticle particle,
const std::unordered_map< int, const simb::MCParticle * > &  particleMap 
) const
private

Definition at line 524 of file PointIdAlg.cxx.

527 {
528  bool hasElectron = false, hasNuMu = false, hasNuE = false;
529 
530  int pdg = abs(particle.PdgCode());
531  //if ((pdg == 13) && (particle.EndProcess() == "FastScintillation" || particle.EndProcess() == "Decay" || particle.EndProcess() == "muMinusCaptureAtRest")) // potential muon decay at rest
532  if ((pdg == 13) && (particle.EndProcess() == "FastScintillation" || particle.EndProcess() == "Decay")) // potential muon decay at rest
533  {
534  unsigned int nSec = particle.NumberDaughters();
535  for (size_t d = 0; d < nSec; ++d) {
536  auto d_search = particleMap.find(particle.Daughter(d));
537  if (d_search != particleMap.end()) {
538  auto const& daughter = *((*d_search).second);
539  int d_pdg = abs(daughter.PdgCode());
540  if (d_pdg == 11)
541  hasElectron = true;
542  else if (d_pdg == 14)
543  hasNuMu = true;
544  else if (d_pdg == 12)
545  hasNuE = true;
546  }
547  }
548  }
549 
550  return (hasElectron && hasNuMu && hasNuE);
551 }
int PdgCode() const
Definition: MCParticle.h:212
int NumberDaughters() const
Definition: MCParticle.h:217
int Daughter(const int i) const
Definition: MCParticle.cxx:112
T abs(T value)
std::string EndProcess() const
Definition: MCParticle.h:216
static float nnet::TrainingDataAlg::particleRange2 ( const simb::MCParticle particle)
inlinestaticprivate

Definition at line 340 of file PointIdAlg.h.

341  {
342  float dx = particle.EndX() - particle.Vx();
343  float dy = particle.EndY() - particle.Vy();
344  float dz = particle.EndZ() - particle.Vz();
345  return dx * dx + dy * dy + dz * dz;
346  }
double EndZ() const
Definition: MCParticle.h:228
double EndY() const
Definition: MCParticle.h:227
double Vx(const int i=0) const
Definition: MCParticle.h:221
double Vz(const int i=0) const
Definition: MCParticle.h:223
double EndX() const
Definition: MCParticle.h:226
double Vy(const int i=0) const
Definition: MCParticle.h:222
void nnet::TrainingDataAlg::reconfigure ( const Config config)
img::DataProviderAlgView nnet::TrainingDataAlg::resizeView ( detinfo::DetectorClocksData const &  clock_data,
detinfo::DetectorPropertiesData const &  det_prop,
size_t  wires,
size_t  drifts 
)
overrideprotectedvirtual

Reimplemented from img::DataProviderAlg.

Definition at line 358 of file PointIdAlg.cxx.

362 {
363  auto view = img::DataProviderAlg::resizeView(clock_data, det_prop, wires, drifts);
364 
365  fWireDriftEdep.resize(wires);
366  for (auto& w : fWireDriftEdep) {
367  w.resize(view.fNCachedDrifts);
368  std::fill(w.begin(), w.end(), 0.0F);
369  }
370 
371  fWireDriftPdg.resize(wires);
372  for (auto& w : fWireDriftPdg) {
373  w.resize(view.fNCachedDrifts);
374  std::fill(w.begin(), w.end(), 0);
375  }
376  return view;
377 }
virtual DataProviderAlgView resizeView(detinfo::DetectorClocksData const &clock_data, detinfo::DetectorPropertiesData const &det_prop, size_t wires, size_t drifts)
std::vector< std::vector< int > > fWireDriftPdg
Definition: PointIdAlg.h:355
def fill(s)
Definition: translator.py:93
std::vector< std::vector< float > > fWireDriftEdep
Definition: PointIdAlg.h:354
bool nnet::TrainingDataAlg::saveSimInfo ( ) const
inline

Definition at line 265 of file PointIdAlg.h.

266  {
267  return fSaveSimInfo;
268  }
bool nnet::TrainingDataAlg::setDataEventData ( const art::Event event,
detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp,
unsigned int  plane,
unsigned int  tpc,
unsigned int  cryo 
)

Definition at line 711 of file PointIdAlg.cxx.

717 {
718 
720  std::vector<art::Ptr<recob::Wire>> Wirelist;
721 
722  if (event.getByLabel(fWireProducerLabel, wireHandle)) art::fill_ptr_vector(Wirelist, wireHandle);
723 
724  if (!setWireDriftData(clockData, detProp, *wireHandle, plane, tpc, cryo)) {
725  mf::LogError("TrainingDataAlg") << "Wire data not set.";
726  return false;
727  }
728 
729  // Hit info
731  std::vector<art::Ptr<recob::Hit>> Hitlist;
732 
733  if (event.getByLabel(fHitProducerLabel, HitHandle)) art::fill_ptr_vector(Hitlist, HitHandle);
734 
735  // Track info
737  std::vector<art::Ptr<recob::Track>> Tracklist;
738 
739  if (event.getByLabel(fTrackModuleLabel, TrackHandle))
740  art::fill_ptr_vector(Tracklist, TrackHandle);
741 
742  art::FindManyP<recob::Track> ass_trk_hits(HitHandle, event, fTrackModuleLabel);
743 
744  // Loop over wires (sorry about hard coded value) to fill in 1) pdg and 2) charge depo
745  for (size_t widx = 0; widx < 240; ++widx) {
746 
747  std::vector<float> labels_deposit(fAlgView.fNDrifts, 0); // full-drift-length buffers
748  std::vector<int> labels_pdg(fAlgView.fNDrifts, 0);
749 
750  // First, the charge depo
751  for (size_t subwidx = 0; subwidx < Wirelist.size(); ++subwidx) {
752  if (widx + 240 == Wirelist[subwidx]->Channel()) {
753  labels_deposit = Wirelist[subwidx]->Signal();
754  break;
755  }
756  }
757 
758  // Second, the pdg code
759  // This code finds the angle of the track and records
760  // events based on its angle to try to get an isometric sample
761  // instead of just a bunch of straight tracks
762 
763  // Meta code:
764  // For each hit:
765  // find farthest hit from point
766  // then find farthest hit from THAT one
767  // should be start and end of track, then just use trig
768 
769  for (size_t iHit = 0; iHit < Hitlist.size(); ++iHit) {
770 
771  if (Hitlist[iHit]->Channel() != widx + 240) { continue; }
772  if (Hitlist[iHit]->View() != 1) { continue; }
773 
774  // Make sure there is a track association
775  if (ass_trk_hits.at(iHit).size() == 0) { continue; }
776 
777  // Not sure about this
778  // Cutting on length to not just get a bunch of shower stubs
779  // Might add a lot of bias though
780  if (ass_trk_hits.at(iHit)[0]->Length() < 5) { continue; }
781 
782  // Search for farest hit from this one
783  int far_index = 0;
784  double far_dist = 0;
785 
786  for (size_t jHit = 0; jHit < Hitlist.size(); ++jHit) {
787  if (jHit == iHit) { continue; }
788  if (Hitlist[jHit]->View() != 1) { continue; }
789 
790  if (ass_trk_hits.at(jHit).size() == 0) { continue; }
791  if (ass_trk_hits.at(jHit)[0]->ID() != ass_trk_hits.at(iHit)[0]->ID()) { continue; }
792 
793  double dist = sqrt((Hitlist[iHit]->Channel() - Hitlist[jHit]->Channel()) *
794  (Hitlist[iHit]->Channel() - Hitlist[jHit]->Channel()) +
795  (Hitlist[iHit]->PeakTime() - Hitlist[jHit]->PeakTime()) *
796  (Hitlist[iHit]->PeakTime() - Hitlist[jHit]->PeakTime()));
797 
798  if (far_dist < dist) {
799  far_dist = dist;
800  far_index = jHit;
801  }
802  }
803 
804  // Search for the other end of the track
805  int other_end = 0;
806  int other_dist = 0;
807 
808  for (size_t jHit = 0; jHit < Hitlist.size(); ++jHit) {
809  if (jHit == iHit or int(jHit) == far_index) { continue; }
810  if (Hitlist[jHit]->View() != 1) { continue; }
811 
812  if (ass_trk_hits.at(jHit).size() == 0) { continue; }
813  if (ass_trk_hits.at(jHit)[0]->ID() != ass_trk_hits.at(iHit)[0]->ID()) { continue; }
814 
815  double dist = sqrt((Hitlist[far_index]->Channel() - Hitlist[jHit]->Channel()) *
816  (Hitlist[far_index]->Channel() - Hitlist[jHit]->Channel()) +
817  (Hitlist[far_index]->PeakTime() - Hitlist[jHit]->PeakTime()) *
818  (Hitlist[far_index]->PeakTime() - Hitlist[jHit]->PeakTime()));
819 
820  if (other_dist < dist) {
821  other_dist = dist;
822  other_end = jHit;
823  }
824  }
825 
826  // We have the end points now
827  double del_wire = double(Hitlist[other_end]->Channel() - Hitlist[far_index]->Channel());
828  double del_time = double(Hitlist[other_end]->PeakTime() - Hitlist[far_index]->PeakTime());
829  double hypo = sqrt(del_wire * del_wire + del_time * del_time);
830 
831  if (hypo == 0) { continue; } // Should never happen, but doing it anyway
832 
833  double cosser = TMath::Abs(del_wire / hypo);
834  double norm_ang = TMath::ACos(cosser) * 2 / TMath::Pi();
835 
836  // Using fEventsPerBin to keep track of number of hits per angle (normalized to 0 to 1)
837 
838  int binner = int(norm_ang * fEventsPerBin.size());
839  if (binner >= (int)fEventsPerBin.size()) {
840  binner = fEventsPerBin.size() - 1;
841  } // Dealing with rounding errors
842 
843  // So we should get a total of 5000 * 100 = 50,000 if we use the whole set
844  if (fEventsPerBin[binner] > 5000) { continue; }
845  fEventsPerBin[binner]++;
846 
847  // If survives everything, saves the pdg
848  labels_pdg[Hitlist[iHit]->PeakTime()] = 211; // Same as pion for now
849  }
850 
851  setWireEdepsAndLabels(labels_deposit, labels_pdg, widx);
852 
853  } // for each Wire
854 
855  return true;
856 }
bool setWireEdepsAndLabels(std::vector< float > const &edeps, std::vector< int > const &pdgs, size_t wireIdx)
Definition: PointIdAlg.cxx:381
AdcChannelData::View View
art::InputTag fTrackModuleLabel
Definition: PointIdAlg.h:359
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
art::InputTag fWireProducerLabel
Definition: PointIdAlg.h:357
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
Definition: DataViewImpl.h:633
std::vector< size_t > fEventsPerBin
Definition: PointIdAlg.h:367
DataProviderAlgView fAlgView
bool setWireDriftData(const detinfo::DetectorClocksData &clock_data, const detinfo::DetectorPropertiesData &det_prop, const std::vector< recob::Wire > &wires, unsigned int plane, unsigned int tpc, unsigned int cryo)
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Definition: Ptr.h:297
art::InputTag fHitProducerLabel
Definition: PointIdAlg.h:358
bool nnet::TrainingDataAlg::setEventData ( const art::Event event,
detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp,
unsigned int  plane,
unsigned int  tpc,
unsigned int  cryo 
)

Definition at line 859 of file PointIdAlg.cxx.

865 {
867  event.getValidHandle<std::vector<recob::Wire>>(fWireProducerLabel);
868 
869  if (!setWireDriftData(clockData, detProp, *wireHandle, plane, tpc, cryo)) {
870  mf::LogError("TrainingDataAlg") << "Wire data not set.";
871  return false;
872  }
873 
874  if (!fSaveSimInfo || event.isRealData()) {
875  mf::LogInfo("TrainingDataAlg") << "Skip MC simulation info.";
876  return true;
877  }
878 
880  double electronsToGeV = 1. / larParameters->GeVToElectrons();
881 
882  auto particleHandle =
883  event.getValidHandle<std::vector<simb::MCParticle>>(fSimulationProducerLabel);
884 
885  auto simChannelHandle =
886  event.getValidHandle<std::vector<sim::SimChannel>>(fSimChannelProducerLabel);
887 
888  std::unordered_map<int, const simb::MCParticle*> particleMap;
889  for (auto const& particle : *particleHandle) {
890  particleMap[particle.TrackId()] = &particle;
891  }
892 
893  std::unordered_map<size_t, std::unordered_map<int, int>> wireToDriftToVtxFlags;
894  if (fSaveVtxFlags) collectVtxFlags(wireToDriftToVtxFlags, clockData, detProp, particleMap, plane);
895 
896  fEdepTot = 0;
897 
898  std::map<int, int> trackToPDG;
899  for (size_t widx = 0; widx < fAlgView.fNWires; ++widx) {
900  auto wireChannelNumber = fAlgView.fWireChannels[widx];
901  if (wireChannelNumber == raw::InvalidChannelID) continue;
902 
903  std::vector<float> labels_deposit(fAlgView.fNDrifts, 0); // full-drift-length buffers,
904  std::vector<int> labels_pdg(labels_deposit.size(), 0); // both of the same size,
905  int labels_size = labels_deposit.size(); // cached as int for comparisons below
906 
907  std::map<int, std::map<int, double>> timeToTrackToCharge;
908  for (auto const& channel : *simChannelHandle) {
909  if (channel.Channel() != wireChannelNumber) continue;
910 
911  auto const& timeSlices = channel.TDCIDEMap();
912  for (auto const& timeSlice : timeSlices) {
913  int time = timeSlice.first;
914 
915  auto const& energyDeposits = timeSlice.second;
916  for (auto const& energyDeposit : energyDeposits) {
917  int pdg = 0;
918  int tid = energyDeposit.trackID;
919  if (tid < 0) // negative tid means it is EM activity, and -tid is the mother
920  {
921  pdg = 11;
922  tid = -tid;
923 
924  auto search = particleMap.find(tid);
925  if (search == particleMap.end()) {
926  mf::LogWarning("TrainingDataAlg") << "PARTICLE NOT FOUND";
927  continue;
928  }
929  auto const& mother = *((*search).second); // mother particle of this EM
930  int mPdg = abs(mother.PdgCode());
931  if ((mPdg == 13) || (mPdg == 211) || (mPdg == 2212)) {
932  if (energyDeposit.numElectrons > 10)
933  pdg |= nnet::TrainingDataAlg::kDelta; // tag delta ray
934  }
935  }
936  else {
937  auto search = particleMap.find(tid);
938  if (search == particleMap.end()) {
939  mf::LogWarning("TrainingDataAlg") << "PARTICLE NOT FOUND";
940  continue;
941  }
942  auto const& particle = *((*search).second);
943  pdg = abs(particle.PdgCode());
944 
945  if (particle.Process() == "primary") {
946  if (pdg == 11) {
947  pdg |= nnet::TrainingDataAlg::kPriEl; // tag primary
948  }
949  else if (pdg == 13) {
950  pdg |= nnet::TrainingDataAlg::kPriMu; // tag primary
951  }
952  }
953 
954  /*
955  auto msearch = particleMap.find(particle.Mother());
956  if (msearch != particleMap.end()) {
957  auto const& mother = *((*msearch).second);
958  if (pdg == 11) // electron, check if it is Michel
959  {
960  if (nnet::TrainingDataAlg::isMuonDecaying(mother, particleMap)) {
961  std::cout<<particle.Process()<<std::endl;
962  pdg |= nnet::TrainingDataAlg::kMichel; // tag Michel
963  }
964  }
965  }
966  */
967  if (pdg == 11){ // electron, check if it is Michel or delta ray
968  if (particle.Process() == "Decay"){
969  pdg |= nnet::TrainingDataAlg::kMichel; // tag Michel
970  }
971  else if (particle.Process() == "muIoni"){
972  pdg |= nnet::TrainingDataAlg::kDelta; // tag delta ray
973  }
974  }
975  }
976 
977  trackToPDG[energyDeposit.trackID] = pdg;
978 
979  double energy = energyDeposit.numElectrons * electronsToGeV;
980  timeToTrackToCharge[time][energyDeposit.trackID] += energy;
981  fEdepTot += energy;
982 
983  } // loop over energy deposits
984  } // loop over time slices
985  } // for each SimChannel
986 
988  for (auto const& ttc : timeToTrackToCharge) {
989  float max_deposit = 0.0;
990  int max_pdg = 0;
991  for (auto const& tc : ttc.second) {
992 
993  if (tc.second > max_deposit) {
994  max_deposit = tc.second;
995  max_pdg = trackToPDG[tc.first];
996  }
997  }
998 
999  if (ttc.first < labels_size) {
1000  int tick_idx = ttc.first + fAdcDelay;
1001  if (tick_idx < labels_size) {
1002  labels_deposit[tick_idx] = max_deposit;
1003  labels_pdg[tick_idx] = max_pdg & type_pdg_mask;
1004  }
1005  }
1006  }
1007 
1008  for (auto const& drift_flags : wireToDriftToVtxFlags[widx]) {
1009  int drift = drift_flags.first, flags = drift_flags.second;
1010  if ((drift >= 0) && (drift < labels_size)) { labels_pdg[drift] |= flags; }
1011  }
1012  setWireEdepsAndLabels(labels_deposit, labels_pdg, widx);
1013  } // for each Wire
1014 
1015  return true;
1016 }
void collectVtxFlags(std::unordered_map< size_t, std::unordered_map< int, int >> &wireToDriftToVtxFlags, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const std::unordered_map< int, const simb::MCParticle * > &particleMap, unsigned int plane) const
Definition: PointIdAlg.cxx:554
bool setWireEdepsAndLabels(std::vector< float > const &edeps, std::vector< int > const &pdgs, size_t wireIdx)
Definition: PointIdAlg.cxx:381
unsigned int fAdcDelay
Definition: PointIdAlg.h:365
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
uint8_t channel
Definition: CRTFragment.hh:201
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
art::InputTag fWireProducerLabel
Definition: PointIdAlg.h:357
bool isRealData() const
T abs(T value)
constexpr ChannelID_t InvalidChannelID
ID of an invalid channel.
Definition: RawTypes.h:32
std::vector< raw::ChannelID_t > fWireChannels
art::InputTag fSimChannelProducerLabel
Definition: PointIdAlg.h:361
Definition: search.py:1
DataProviderAlgView fAlgView
bool setWireDriftData(const detinfo::DetectorClocksData &clock_data, const detinfo::DetectorPropertiesData &det_prop, const std::vector< recob::Wire > &wires, unsigned int plane, unsigned int tpc, unsigned int cryo)
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
art::InputTag fSimulationProducerLabel
Definition: PointIdAlg.h:360
double GeVToElectrons() const
bool nnet::TrainingDataAlg::setWireEdepsAndLabels ( std::vector< float > const &  edeps,
std::vector< int > const &  pdgs,
size_t  wireIdx 
)
private

Definition at line 381 of file PointIdAlg.cxx.

384 {
385  if ((wireIdx >= fWireDriftEdep.size()) || (edeps.size() != pdgs.size())) { return false; }
386 
387  size_t dstep = 1;
388  if (fDownscaleFullView) { dstep = fDriftWindow; }
389 
390  if (edeps.size() / dstep > fAlgView.fNCachedDrifts) { return false; }
391 
392  auto& wEdep = fWireDriftEdep[wireIdx];
393  auto& wPdg = fWireDriftPdg[wireIdx];
394 
395  for (size_t i = 0; i < fAlgView.fNCachedDrifts; ++i) {
396  size_t i0 = i * dstep;
397  size_t i1 = (i + 1) * dstep;
398 
399  int best_pdg = pdgs[i0] & nnet::TrainingDataAlg::kPdgMask;
400  int vtx_flags = pdgs[i0] & nnet::TrainingDataAlg::kVtxMask;
401  int type_flags = pdgs[i0] & nnet::TrainingDataAlg::kTypeMask;
402  float max_edep = edeps[i0];
403  for (size_t k = i0 + 1; k < i1; ++k) {
404  float ek = edeps[k];
405  if (ek > max_edep) {
406  max_edep = ek;
407  best_pdg = pdgs[k] & nnet::TrainingDataAlg::kPdgMask; // remember best matching pdg
408  }
409  type_flags |= pdgs[k] & nnet::TrainingDataAlg::kTypeMask; // accumulate track type flags
410  vtx_flags |= pdgs[k] & nnet::TrainingDataAlg::kVtxMask; // accumulate all vtx flags
411  }
412 
413  wEdep[i] = max_edep;
414 
415  best_pdg |= type_flags;
416  if (fSaveVtxFlags) best_pdg |= vtx_flags;
417  wPdg[i] = best_pdg;
418  }
419 
420  return true;
421 }
DataProviderAlgView fAlgView
std::vector< std::vector< int > > fWireDriftPdg
Definition: PointIdAlg.h:355
std::vector< std::vector< float > > fWireDriftEdep
Definition: PointIdAlg.h:354
std::vector<float> const& nnet::TrainingDataAlg::wireEdep ( size_t  widx) const
inline

Definition at line 298 of file PointIdAlg.h.

299  {
300  return fWireDriftEdep[widx];
301  }
std::vector< std::vector< float > > fWireDriftEdep
Definition: PointIdAlg.h:354
std::vector<int> const& nnet::TrainingDataAlg::wirePdg ( size_t  widx) const
inline

Definition at line 303 of file PointIdAlg.h.

304  {
305  return fWireDriftPdg[widx];
306  }
std::vector< std::vector< int > > fWireDriftPdg
Definition: PointIdAlg.h:355

Member Data Documentation

unsigned int nnet::TrainingDataAlg::fAdcDelay
private

Definition at line 365 of file PointIdAlg.h.

double nnet::TrainingDataAlg::fEdepTot
private

Definition at line 353 of file PointIdAlg.h.

std::vector<size_t> nnet::TrainingDataAlg::fEventsPerBin
private

Definition at line 367 of file PointIdAlg.h.

art::InputTag nnet::TrainingDataAlg::fHitProducerLabel
private

Definition at line 358 of file PointIdAlg.h.

bool nnet::TrainingDataAlg::fSaveSimInfo
private

Definition at line 363 of file PointIdAlg.h.

bool nnet::TrainingDataAlg::fSaveVtxFlags
private

Definition at line 362 of file PointIdAlg.h.

art::InputTag nnet::TrainingDataAlg::fSimChannelProducerLabel
private

Definition at line 361 of file PointIdAlg.h.

art::InputTag nnet::TrainingDataAlg::fSimulationProducerLabel
private

Definition at line 360 of file PointIdAlg.h.

art::InputTag nnet::TrainingDataAlg::fTrackModuleLabel
private

Definition at line 359 of file PointIdAlg.h.

std::vector<std::vector<float> > nnet::TrainingDataAlg::fWireDriftEdep
private

Definition at line 354 of file PointIdAlg.h.

std::vector<std::vector<int> > nnet::TrainingDataAlg::fWireDriftPdg
private

Definition at line 355 of file PointIdAlg.h.

art::InputTag nnet::TrainingDataAlg::fWireProducerLabel
private

Definition at line 357 of file PointIdAlg.h.


The documentation for this class was generated from the following files: