All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
sbnd::CosmicIdTree Class Reference
Inheritance diagram for sbnd::CosmicIdTree:

Classes

struct  BeamTime
 
struct  Config
 

Public Types

using Parameters = art::EDAnalyzer::Table< Config >
 
typedef art::Handle
< std::vector
< recob::PFParticle > > 
PFParticleHandle
 
typedef std::map< size_t,
art::Ptr< recob::PFParticle > > 
PFParticleIdMap
 

Public Member Functions

 CosmicIdTree (Parameters const &config)
 
virtual void beginJob () override
 
virtual void analyze (const art::Event &event) override
 
virtual void endJob () override
 
void ResetTrackVars ()
 
void ResetPfpVars ()
 

Private Member Functions

void GetPFParticleIdMap (const PFParticleHandle &pfParticleHandle, PFParticleIdMap &pfParticleMap)
 

Private Attributes

art::InputTag fSimModuleLabel
 name of detsim producer More...
 
art::InputTag fCRTHitLabel
 name of CRT producer More...
 
art::InputTag fCRTTrackLabel
 name of CRT producer More...
 
art::InputTag fTPCTrackLabel
 name of CRT producer More...
 
art::InputTag fCaloModuleLabel
 name of CRT producer More...
 
art::InputTag fPandoraLabel
 
bool fVerbose
 print information about what's going on More...
 
double fBeamTimeMin
 
double fBeamTimeMax
 
TPCGeoAlg fTpcGeo
 
CRTBackTracker fCrtBackTrack
 
CosmicIdAlg fCosId
 
TTree * fTrackTree
 
TTree * fPfpTree
 
std::string track_type
 
bool track_pfp_nu
 
int track_nu_tpc
 
int track_pdg
 
double track_time
 
double track_length
 
double track_momentum
 
double track_theta
 
double track_phi
 
bool track_crt_hit_true_match
 
double track_crt_hit_dca
 
bool track_crt_track_true_match
 
double track_crt_track_dca
 
double track_crt_track_angle
 
bool track_stops
 
double track_stop_ratio_start
 
double track_stop_ratio_end
 
double track_fiducial_dist_start
 
double track_fiducial_dist_end
 
int track_tpc
 
bool track_apa_cross
 
double track_apa_dist
 
double track_apa_min_dist
 
double track_pandora_nu_score
 
std::string pfp_type
 
bool pfp_nu
 
int pfp_nu_tpc
 
int pfp_n_tracks
 
int pfp_pdg
 
double pfp_time
 
double pfp_length
 
double pfp_momentum
 
double pfp_theta
 
double pfp_phi
 
double pfp_tracks_angle
 
double pfp_second_length
 
bool pfp_crt_hit_true_match
 
double pfp_crt_hit_dca
 
double pfp_sec_crt_hit_dca
 
bool pfp_crt_track_true_match
 
double pfp_crt_track_dca
 
double pfp_crt_track_angle
 
bool pfp_stops
 
double pfp_stop_ratio_start
 
double pfp_stop_ratio_end
 
double pfp_sec_stop_ratio_start
 
double pfp_sec_stop_ratio_end
 
double pfp_fiducial_dist_start
 
double pfp_fiducial_dist_end
 
double pfp_sec_fiducial_dist_start
 
double pfp_sec_fiducial_dist_end
 
int pfp_tpc
 
bool pfp_apa_cross
 
double pfp_apa_dist
 
double pfp_apa_min_dist
 
double pfp_sec_apa_min_dist
 
double pfp_pandora_nu_score
 

Detailed Description

Definition at line 52 of file CosmicIdTree_module.cc.

Member Typedef Documentation

using sbnd::CosmicIdTree::Parameters = art::EDAnalyzer::Table<Config>

Definition at line 127 of file CosmicIdTree_module.cc.

typedef art::Handle< std::vector<recob::PFParticle> > sbnd::CosmicIdTree::PFParticleHandle

Definition at line 145 of file CosmicIdTree_module.cc.

typedef std::map< size_t, art::Ptr<recob::PFParticle> > sbnd::CosmicIdTree::PFParticleIdMap

Definition at line 146 of file CosmicIdTree_module.cc.

Constructor & Destructor Documentation

sbnd::CosmicIdTree::CosmicIdTree ( Parameters const &  config)
explicit

Definition at line 238 of file CosmicIdTree_module.cc.

239  : EDAnalyzer(config)
240  , fSimModuleLabel (config().SimModuleLabel())
241  , fCRTHitLabel (config().CRTHitLabel())
242  , fCRTTrackLabel (config().CRTTrackLabel())
243  , fTPCTrackLabel (config().TPCTrackLabel())
244  , fCaloModuleLabel (config().CaloModuleLabel())
245  , fPandoraLabel (config().PandoraLabel())
246  , fVerbose (config().Verbose())
247  , fBeamTimeMin (config().BeamTimeLimits().BeamTimeMin())
248  , fBeamTimeMax (config().BeamTimeLimits().BeamTimeMax())
249  , fCrtBackTrack (config().CrtBackTrack())
250  , fCosId (config().CosIdAlg())
251  {
252 
253  } //CosmicIdTree()
BEGIN_PROLOG Verbose
art::InputTag fCRTHitLabel
name of CRT producer
art::InputTag fCRTTrackLabel
name of CRT producer
art::InputTag fSimModuleLabel
name of detsim producer
art::InputTag fTPCTrackLabel
name of CRT producer
art::InputTag fCaloModuleLabel
name of CRT producer
BEGIN_PROLOG don t mess with this TPCTrackLabel
CRTBackTracker fCrtBackTrack
bool fVerbose
print information about what&#39;s going on

Member Function Documentation

void sbnd::CosmicIdTree::analyze ( const art::Event &  event)
overridevirtual

Definition at line 333 of file CosmicIdTree_module.cc.

334  {
335 
336  // Fetch basic event info
337  if(fVerbose){
338  std::cout<<"============================================"<<std::endl
339  <<"Run = "<<event.run()<<", SubRun = "<<event.subRun()<<", Event = "<<event.id().event()<<std::endl
340  <<"============================================"<<std::endl;
341  }
342 
343  //----------------------------------------------------------------------------------------------------------
344  // GETTING PRODUCTS
345  //----------------------------------------------------------------------------------------------------------
346  // Get g4 particles
347  art::ServiceHandle<cheat::ParticleInventoryService> pi_serv;
348  auto particleHandle = event.getValidHandle<std::vector<simb::MCParticle>>(fSimModuleLabel);
349 
350  // Get CRT hits from the event
351  art::Handle< std::vector<sbn::crt::CRTHit>> crtHitHandle;
352  std::vector<art::Ptr<sbn::crt::CRTHit> > crtHitList;
353  if (event.getByLabel(fCRTHitLabel, crtHitHandle))
354  art::fill_ptr_vector(crtHitList, crtHitHandle);
355 
356  // Initialize the CRT backtracker for speed
357  fCrtBackTrack.Initialize(event);
358 
359  // Loop over the CRT hits and match them to true particles
360  std::vector<sbn::crt::CRTHit> crtHits;
361  std::map<int, int> numHitMap;
362  int hit_i = 0;
363  for(auto const& hit : (crtHitList)){
364  // Don't try to match CRT hits in time with the beam
365  double hitTime = hit->ts1_ns * 1e-3;
366  if(hitTime > fBeamTimeMin && hitTime < fBeamTimeMax) continue;
367  crtHits.push_back(*hit);
368  int hitTrueID = fCrtBackTrack.TrueIdFromHitId(event, hit_i);
369  hit_i++;
370  numHitMap[hitTrueID]++;
371  }
372 
373  // Get CRT tracks from the event
374  art::Handle< std::vector<sbn::crt::CRTTrack>> crtTrackHandle;
375  std::vector<art::Ptr<sbn::crt::CRTTrack> > crtTrackList;
376  if (event.getByLabel(fCRTTrackLabel, crtTrackHandle))
377  art::fill_ptr_vector(crtTrackList, crtTrackHandle);
378 
379  // Loop over the CRT tracks and match them to true particles
380  std::vector<sbn::crt::CRTTrack> crtTracks;
381  std::map<int, int> numTrackMap;
382  int track_i = 0;
383  for(auto const& track : (crtTrackList)){
384  // Don't try to match CRT tracks in time with the beam
385  double trackTime = track->ts1_ns * 1e-3;
386  if(trackTime > fBeamTimeMin && trackTime < fBeamTimeMax) continue;
387  crtTracks.push_back(*track);
388  int trackTrueID = fCrtBackTrack.TrueIdFromTrackId(event, track_i);
389  track_i++;
390  numTrackMap[trackTrueID]++;
391  }
392 
393  // Get reconstructed tracks from the event and hit/calorimetry associations
394  auto tpcTrackHandle = event.getValidHandle<std::vector<recob::Track>>(fTPCTrackLabel);
395  art::FindManyP<recob::Hit> findManyHits(tpcTrackHandle, event, fTPCTrackLabel);
396  art::FindManyP<anab::Calorimetry> findManyCalo(tpcTrackHandle, event, fCaloModuleLabel);
397 
398  // Get PFParticles from pandora
399  PFParticleHandle pfParticleHandle;
400  event.getByLabel(fPandoraLabel, pfParticleHandle);
401  if( !pfParticleHandle.isValid() ){
402  if(fVerbose) std::cout<<"Failed to find the PFParticles."<<std::endl;
403  return;
404  }
405  PFParticleIdMap pfParticleMap;
406  this->GetPFParticleIdMap(pfParticleHandle, pfParticleMap);
407  // Get PFParticle to track associations
408  art::FindManyP< recob::Track > pfPartToTrackAssoc(pfParticleHandle, event, fTPCTrackLabel);
409  art::FindManyP<larpandoraobj::PFParticleMetadata> findManyPFPMetadata(pfParticleHandle,
410  event, fPandoraLabel);
411 
412  //----------------------------------------------------------------------------------------------------------
413  // TRUTH MATCHING
414  //----------------------------------------------------------------------------------------------------------
415 
416  // Sort the true particles by type
417  std::map<int, simb::MCParticle> particles;
418  std::vector<simb::MCParticle> parts;
419  std::vector<int> nuParticleIds;
420  std::vector<int> lepParticleIds;
421  std::vector<int> dirtParticleIds;
422  std::vector<int> crParticleIds;
423  // Record where the beam activity occurs
424  int nuTpc = -2;
425  // Loop over the true particles
426  for (auto const& particle: (*particleHandle)){
427 
428  // Make map with ID
429  int partID = particle.TrackId();
430  particles[partID] = particle;
431  parts.push_back(particle);
432 
433  // Get MCTruth
434  art::Ptr<simb::MCTruth> truth = pi_serv->TrackIdToMCTruth_P(partID);
435  int pdg = std::abs(particle.PdgCode());
436  double time = particle.T() * 1e-3; //[us]
437 
438  // If origin is a neutrino
439  if(truth->Origin() == simb::kBeamNeutrino){
440  geo::Point_t vtx;
441  vtx.SetX(truth->GetNeutrino().Nu().Vx()); vtx.SetY(truth->GetNeutrino().Nu().Vy()); vtx.SetZ(truth->GetNeutrino().Nu().Vz());
442  // If neutrino vertex is not inside the TPC then call it a dirt particle
443  if(!fTpcGeo.InFiducial(vtx, 0.)){
444  dirtParticleIds.push_back(partID);
445  }
446  // If it's a primary muon
447  else if(pdg==13 && particle.Mother()==0){
448  lepParticleIds.push_back(partID);
449  }
450  // Other nu particles
451  else{
452  nuParticleIds.push_back(partID);
453  }
454  }
455 
456  // If origin is a cosmic ray
457  else if(truth->Origin() == simb::kCosmicRay){
458  crParticleIds.push_back(partID);
459 
460  }
461 
462  // If particle is primary, charged and in time with the beam get the TPC
463  if(particle.Mother()==0 &&
464  (pdg==13||pdg==111||pdg==211||pdg==2212||pdg==11) &&
465  time > fBeamTimeMin && time < fBeamTimeMax){
466  std::pair<TVector3, TVector3> cross = fTpcGeo.CrossingPoints(particle);
467  if(cross.first.X() != cross.second.X()){
468  if(cross.first.X() < 0 && cross.second.X() < 0 && (nuTpc == 0 || nuTpc == -2)) nuTpc = 0;
469  else if(cross.first.X() > 0 && cross.second.X() > 0 && (nuTpc == 1 || nuTpc == -2)) nuTpc = 1;
470  else nuTpc = -1;
471  }
472  }
473 
474  }
475 
476  //----------------------------------------------------------------------------------------------------------
477  // FAKE PDS RECONSTRUCTION
478  //----------------------------------------------------------------------------------------------------------
479 
480  // Create fake flashes in each tpc
481  std::pair<std::vector<double>, std::vector<double>> fakeFlashes = CosmicIdUtils::FakeTpcFlashes(parts);
482  std::vector<double> fakeTpc0Flashes = fakeFlashes.first;
483  std::vector<double> fakeTpc1Flashes = fakeFlashes.second;
484  bool tpc0BeamFlash = CosmicIdUtils::BeamFlash(fakeTpc0Flashes, fBeamTimeMin, fBeamTimeMax);
485  bool tpc1BeamFlash = CosmicIdUtils::BeamFlash(fakeTpc1Flashes, fBeamTimeMin, fBeamTimeMax);
486 
487  // If there are no flashes in time with the beam then ignore the event
488  if(!tpc0BeamFlash && !tpc1BeamFlash) return;
489 
490  //----------------------------------------------------------------------------------------------------------
491  // FILLING THE PFPARTICLE TREE
492  //----------------------------------------------------------------------------------------------------------
493 
494  auto const clockData = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(event);
495  auto const detProp = art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(event, clockData);
496 
497  //Loop over the pfparticle map
498  std::map<int, bool> isPfpNu;
499  for (PFParticleIdMap::const_iterator it = pfParticleMap.begin(); it != pfParticleMap.end(); ++it){
500 
501  const art::Ptr<recob::PFParticle> pParticle(it->second);
502  // Only look for primary particles
503  if (!pParticle->IsPrimary()) continue;
504 
505  ResetPfpVars();
506  pfp_nu_tpc = nuTpc;
507 
508  // Check if this particle is identified as the neutrino
509  const int pdg(pParticle->PdgCode());
510  const bool isNeutrino(std::abs(pdg) == pandora::NU_E || std::abs(pdg) == pandora::NU_MU || std::abs(pdg) == pandora::NU_TAU);
511 
512  // FIXME Won't ever look at cosmic pfps as they don't have daughters
513  pfp_nu = isNeutrino;
514 
515  std::vector<recob::Track> nuTracks;
516  // Loop over daughters of pfparticle
517  for (const size_t daughterId : pParticle->Daughters()){
518 
519  // Get tracks associated with daughter
520  art::Ptr<recob::PFParticle> pDaughter = pfParticleMap.at(daughterId);
521  const std::vector< art::Ptr<recob::Track> > associatedTracks(pfPartToTrackAssoc.at(pDaughter.key()));
522  if(associatedTracks.size() != 1) continue;
523 
524  // Get the first associated track
525  recob::Track tpcTrack = *associatedTracks.front();
526  nuTracks.push_back(tpcTrack);
527 
528  isPfpNu[tpcTrack.ID()] = isNeutrino;
529 
530  // Truth match muon tracks and pfps
531  std::vector<art::Ptr<recob::Hit>> hits = findManyHits.at(tpcTrack.ID());
532  int trueId = RecoUtils::TrueParticleIDFromTotalRecoHits(clockData, hits, false);
533  if(std::find(lepParticleIds.begin(), lepParticleIds.end(), trueId) != lepParticleIds.end()){
534  pfp_type = "NuMu";
535  }
536  else if(std::find(nuParticleIds.begin(), nuParticleIds.end(), trueId) != nuParticleIds.end()){
537  if(pfp_type != "NuMu") pfp_type = "Nu";
538  }
539  else if(std::find(dirtParticleIds.begin(), dirtParticleIds.end(), trueId) != dirtParticleIds.end()){
540  if(pfp_type != "NuMu" && pfp_type != "Nu") pfp_type = "Dirt";
541  }
542  else if(std::find(crParticleIds.begin(), crParticleIds.end(), trueId) != crParticleIds.end()){
543  if(pfp_type != "NuMu" && pfp_type != "Nu" && pfp_type != "Dirt") pfp_type = "Cr";
544  }
545 
546  // Get the TPC the pfp was detected in
547  std::vector<art::Ptr<recob::Hit>> tpcHits = findManyHits.at(tpcTrack.ID());
548  int tpc = fTpcGeo.DetectedInTPC(tpcHits);
549  if(tpc == pfp_tpc || pfp_tpc == -99999) pfp_tpc = tpc;
550  else if(pfp_tpc != tpc) pfp_tpc = -1;
551  }
552 
553  // Don't consider PFParticles with no associated tracks
554  if(nuTracks.size() == 0) continue;
555 
556  pfp_n_tracks = nuTracks.size();
557 
558  // Sort tracks by length
559  std::sort(nuTracks.begin(), nuTracks.end(), [](auto& left, auto& right){
560  return left.Length() > right.Length();});
561 
562  // Choose longest track as cosmic muon candidate
563  recob::Track tpcTrack = nuTracks[0];
564  std::vector<art::Ptr<recob::Hit>> hits = findManyHits.at(tpcTrack.ID());
565  int trueId = RecoUtils::TrueParticleIDFromTotalRecoHits(clockData, hits, false);
566 
567  std::vector<art::Ptr<anab::Calorimetry>> calos = findManyCalo.at(tpcTrack.ID());
568 
569  // Get truth variables
570  if(particles.find(trueId) != particles.end()){
571  pfp_pdg = particles[trueId].PdgCode();
572  pfp_momentum = particles[trueId].P();
573  pfp_time = particles[trueId].T();
574  // Does the true particle match any CRT hits or tracks?
575  if(numHitMap.find(trueId) != numHitMap.end()){
576  if(numHitMap[trueId] > 0) pfp_crt_hit_true_match = true;
577  }
578  if(numTrackMap.find(trueId) != numTrackMap.end()){
579  if(numTrackMap[trueId] > 0) pfp_crt_track_true_match = true;
580  }
581  // Does particle stop in the TPC?
582  geo::Point_t end {particles[trueId].EndX(), particles[trueId].EndY(), particles[trueId].EndZ()};
583  if(fTpcGeo.InFiducial(end, 0.)) pfp_stops = true;
584  // Does the true particle cross the APA?
585  pfp_apa_cross = fTpcGeo.CrossesApa(particles[trueId]);
586  // Distance from the APA of the reco track at the true time
587  pfp_apa_dist = fCosId.ApaAlg().ApaDistance(detProp, tpcTrack, pfp_time/1e3, hits);
588  }
589 
590  pfp_length = tpcTrack.Length();
591  pfp_theta = tpcTrack.Theta();
592  pfp_phi = tpcTrack.Phi();
593 
594  // Get the second longest track originating from the same vertex
595  recob::Track secTrack = tpcTrack;
596  bool useSecTrack = false;
597  if(nuTracks.size() > 1){
598  TVector3 start = tpcTrack.Vertex<TVector3>();
599  TVector3 end = tpcTrack.End<TVector3>();
600 
601  for(size_t i = 1; i < nuTracks.size(); i++){
602  recob::Track track2 = nuTracks[i];
603  TVector3 start2 = track2.Vertex<TVector3>();
604  TVector3 end2 = track2.End<TVector3>();
605  // Do they share the same vertex? (no delta rays)
606  if((start-start2).Mag() > 5.) continue;
607  // Get the angle between the two longest tracks
608  pfp_tracks_angle = (end - start).Angle(end2 - start2);
609  pfp_second_length = track2.Length();
610  useSecTrack = true;
611  secTrack = track2;
612  break;
613  }
614 
615  }
616 
617  // CRT hit cut - get the distance of closest approach for the nearest CRT hit
618  std::pair<sbn::crt::CRTHit, double> closestHit = fCosId.CrtHitAlg().T0Alg().ClosestCRTHit(detProp, tpcTrack, crtHits, event);
619  pfp_crt_hit_dca = closestHit.second;
620  if(useSecTrack){
621  std::pair<sbn::crt::CRTHit, double> closestSecHit = fCosId.CrtHitAlg().T0Alg().ClosestCRTHit(detProp, secTrack, crtHits, event);
622  pfp_sec_crt_hit_dca = closestHit.second;
623  }
624 
625  // CRT track cut - get the average distance of closest approach and angle between tracks for the nearest CRT track
626  std::pair<sbn::crt::CRTTrack, double> closestTrackDca = fCosId.CrtTrackAlg().TrackAlg().ClosestCRTTrackByDCA(detProp, tpcTrack, crtTracks, event);
627  pfp_crt_track_dca = closestTrackDca.second;
628  std::pair<sbn::crt::CRTTrack, double> closestTrackAngle = fCosId.CrtTrackAlg().TrackAlg().ClosestCRTTrackByAngle(detProp, tpcTrack, crtTracks, event);
629  pfp_crt_track_angle = closestTrackAngle.second;
630 
631  // Stopping cut - get the chi2 ratio of the start and end of the track
632  pfp_stop_ratio_start = fCosId.StoppingAlg().StoppingChiSq(tpcTrack.Vertex(), calos);
633  pfp_stop_ratio_end = fCosId.StoppingAlg().StoppingChiSq(tpcTrack.End(), calos);
634  if(useSecTrack){
635  std::vector<art::Ptr<anab::Calorimetry>> secCalos = findManyCalo.at(secTrack.ID());
637  pfp_sec_stop_ratio_end = fCosId.StoppingAlg().StoppingChiSq(secTrack.End(), secCalos);
638  }
639 
640  // Fiducial cut - Get the fiducial volume the start and end points are contained in
641  pfp_fiducial_dist_start = fTpcGeo.MinDistToWall(tpcTrack.Vertex());
642  pfp_fiducial_dist_end = fTpcGeo.MinDistToWall(tpcTrack.End());
643  if(useSecTrack){
646  }
647 
648  // APA cut - get the minimum distance to the APA at all PDS times
649  std::pair<double, double> ApaMin = fCosId.ApaAlg().MinApaDistance(detProp, tpcTrack, hits, fakeTpc0Flashes, fakeTpc1Flashes);
650  pfp_apa_min_dist = ApaMin.first;
651  if(useSecTrack){
652  std::vector<art::Ptr<recob::Hit>> secHits = findManyHits.at(secTrack.ID());
653  std::pair<double, double> ApaMin = fCosId.ApaAlg().MinApaDistance(detProp, secTrack, hits, fakeTpc0Flashes, fakeTpc1Flashes);
654  pfp_sec_apa_min_dist = ApaMin.first;
655  }
656 
657  // Get the PFParticle Nu Score for the PFP Neutrino
658  pfp_pandora_nu_score = fCosId.PandoraNuScoreAlg().GetPandoraNuScore(*pParticle, findManyPFPMetadata);
659 
660  // Fill the PFParticle tree
661  fPfpTree->Fill();
662 
663  }
664 
665  //----------------------------------------------------------------------------------------------------------
666  // FILLING THE TRACK TREE
667  //----------------------------------------------------------------------------------------------------------
668 
669  // Loop over reconstructed tracks
670  for (auto const& tpcTrack : (*tpcTrackHandle)){
671 
672  ResetTrackVars();
673  track_nu_tpc = nuTpc;
674 
675  // Get the associated hits
676  std::vector<art::Ptr<recob::Hit>> hits = findManyHits.at(tpcTrack.ID());
677  int trueId = RecoUtils::TrueParticleIDFromTotalRecoHits(clockData, hits, false);
678 
679  std::vector<art::Ptr<anab::Calorimetry>> calos = findManyCalo.at(tpcTrack.ID());
680 
681  // Determine the type of the track
682  if(std::find(lepParticleIds.begin(), lepParticleIds.end(), trueId) != lepParticleIds.end()) track_type = "NuMu";
683  if(std::find(nuParticleIds.begin(), nuParticleIds.end(), trueId) != nuParticleIds.end()) track_type = "Nu";
684  if(std::find(crParticleIds.begin(), crParticleIds.end(), trueId) != crParticleIds.end()) track_type = "Cr";
685  if(std::find(dirtParticleIds.begin(), dirtParticleIds.end(), trueId) != dirtParticleIds.end()) track_type = "Dirt";
686 
687  // Check if it belongs to a neutrino tagged PFP
688  if(isPfpNu.find(tpcTrack.ID()) != isPfpNu.end()){
689  if(isPfpNu[tpcTrack.ID()]) track_pfp_nu = true;
690  }
691 
692  // Get truth variables
693  if(particles.find(trueId) != particles.end()){
694  track_pdg = particles[trueId].PdgCode();
695  track_momentum = particles[trueId].P();
696  track_time = particles[trueId].T();
697  // Does the true particle match any CRT hits or tracks?
698  if(numHitMap.find(trueId) != numHitMap.end()){
699  if(numHitMap[trueId] > 0) track_crt_hit_true_match = true;
700  }
701  if(numTrackMap.find(trueId) != numTrackMap.end()){
702  if(numTrackMap[trueId] > 0) track_crt_track_true_match = true;
703  }
704  // Does particle stop in the TPC?
705  geo::Point_t end {particles[trueId].EndX(), particles[trueId].EndY(), particles[trueId].EndZ()};
706  if(fTpcGeo.InFiducial(end, 0.)) track_stops = true;
707  // Does the true particle cross the APA?
708  track_apa_cross = fTpcGeo.CrossesApa(particles[trueId]);
709  // Distance from the APA of the reco track at the true time
710  track_apa_dist = fCosId.ApaAlg().ApaDistance(detProp, tpcTrack, track_time/1e3, hits);
711  }
712 
713  track_length = tpcTrack.Length();
714  track_theta = tpcTrack.Theta();
715  track_phi = tpcTrack.Phi();
716 
717  // CRT hit cut - get the distance of closest approach for the nearest CRT hit
718  std::pair<sbn::crt::CRTHit, double> closestHit = fCosId.CrtHitAlg().T0Alg().ClosestCRTHit(detProp, tpcTrack, crtHits, event);
719  track_crt_hit_dca = closestHit.second;
720 
721  // CRT track cut - get the average distance of closest approach and angle between tracks for the nearest CRT track
722  std::pair<sbn::crt::CRTTrack, double> closestTrackDca = fCosId.CrtTrackAlg().TrackAlg().ClosestCRTTrackByDCA(detProp, tpcTrack, crtTracks, event);
723  track_crt_track_dca = closestTrackDca.second;
724  std::pair<sbn::crt::CRTTrack, double> closestTrackAngle = fCosId.CrtTrackAlg().TrackAlg().ClosestCRTTrackByAngle(detProp, tpcTrack, crtTracks, event);
725  track_crt_track_angle = closestTrackAngle.second;
726 
727  // Stopping cut - get the chi2 ratio of the start and end of the track
728  track_stop_ratio_start = fCosId.StoppingAlg().StoppingChiSq(tpcTrack.Vertex(), calos);
729  track_stop_ratio_end = fCosId.StoppingAlg().StoppingChiSq(tpcTrack.End(), calos);
730 
731  // Fiducial cut - Get the fiducial volume the start and end points are contained in
732  track_fiducial_dist_start = fTpcGeo.MinDistToWall(tpcTrack.Vertex());
734 
735  // Geometry cut - get the TPC the track was detected in
737 
738  // APA cut - get the minimum distance to the APA at all PDS times
739  std::pair<double, double> ApaMin = fCosId.ApaAlg().MinApaDistance(detProp, tpcTrack, hits, fakeTpc0Flashes, fakeTpc1Flashes);
740  track_apa_min_dist = ApaMin.first;
741 
742  // The PFP Nu Score only exists for PFP Neutrinos
743  if (track_pfp_nu){
744  for(auto const pfp : (*pfParticleHandle)){
745  // Get the associated track if there is one
746  const std::vector< art::Ptr<recob::Track> > associatedTracks(pfPartToTrackAssoc.at(pfp.Self()));
747  if(associatedTracks.size() != 1) continue;
748  recob::Track trk = *associatedTracks.front();
749  if(trk.ID() != tpcTrack.ID()) continue;
750 
751  recob::PFParticle PFPNeutrino = fCosId.PandoraNuScoreAlg().GetPFPNeutrino(pfp, (*pfParticleHandle));
752  track_pandora_nu_score = fCosId.PandoraNuScoreAlg().GetPandoraNuScore(PFPNeutrino, findManyPFPMetadata);
753  break;
754  }
755  }
756  // Fill the Track tree
757  fTrackTree->Fill();
758  }
759 
760  } // CosmicIdTree::analyze()
int TrueIdFromTrackId(const art::Event &event, int track_i)
var pdg
Definition: selectors.fcl:14
bool BeamFlash(std::vector< double > flashes, double beamTimeMin, double beamTimeMax)
std::map< size_t, art::Ptr< recob::PFParticle > > PFParticleIdMap
StoppingParticleCosmicIdAlg StoppingAlg() const
art::InputTag fCRTHitLabel
name of CRT producer
walls no right
Definition: selectors.fcl:105
art::InputTag fCRTTrackLabel
name of CRT producer
process_name use argoneut_mc_hitfinder track
process_name hit
Definition: cheaterreco.fcl:51
double StoppingChiSq(geo::Point_t end, std::vector< art::Ptr< anab::Calorimetry >> calos)
int TrueIdFromHitId(const art::Event &event, int hit_i)
art::InputTag fSimModuleLabel
name of detsim producer
art::InputTag fTPCTrackLabel
name of CRT producer
double ApaDistance(detinfo::DetectorPropertiesData const &detProp, recob::Track track, double t0, std::vector< art::Ptr< recob::Hit >> hits)
T abs(T value)
art::InputTag fCaloModuleLabel
name of CRT producer
std::pair< sbn::crt::CRTHit, double > ClosestCRTHit(detinfo::DetectorPropertiesData const &detProp, recob::Track tpcTrack, std::pair< double, double > t0MinMax, std::vector< sbn::crt::CRTHit > crtHits, int driftDirection)
double Length(size_t p=0) const
Access to various track properties.
recob::PFParticle GetPFPNeutrino(recob::PFParticle pfparticle, std::map< size_t, art::Ptr< recob::PFParticle > > &pfParticleMap)
std::pair< sbn::crt::CRTTrack, double > ClosestCRTTrackByDCA(detinfo::DetectorPropertiesData const &detProp, recob::Track tpcTrack, std::vector< sbn::crt::CRTTrack > crtTracks, const art::Event &event, double minAngle=0.)
float GetPandoraNuScore(recob::PFParticle pfparticle, art::FindManyP< larpandoraobj::PFParticleMetadata > PFPMetaDataAssoc)
bool CrossesApa(const simb::MCParticle &particle)
Point_t const & Vertex() const
void GetPFParticleIdMap(const PFParticleHandle &pfParticleHandle, PFParticleIdMap &pfParticleMap)
auto end(FixedBins< T, C > const &) noexcept
Definition: FixedBins.h:585
art::Handle< std::vector< recob::PFParticle > > PFParticleHandle
const Cut kCosmicRay
std::pair< double, double > MinApaDistance(detinfo::DetectorPropertiesData const &detProp, recob::Track track, std::vector< double > t0List, int tpc)
walls no left
Definition: selectors.fcl:105
int TrueParticleIDFromTotalRecoHits(detinfo::DetectorClocksData const &clockData, const std::vector< art::Ptr< recob::Hit > > &hits, bool rollup_unsaved_ids=1)
int DetectedInTPC(std::vector< art::Ptr< recob::Hit >> hits)
Hierarchical representation of particle flow.
Definition: PFParticle.h:44
CRTBackTracker fCrtBackTrack
std::pair< sbn::crt::CRTTrack, double > ClosestCRTTrackByAngle(detinfo::DetectorPropertiesData const &detProp, recob::Track tpcTrack, std::vector< sbn::crt::CRTTrack > crtTracks, const art::Event &event, double minDCA=0.)
do i e
bool fVerbose
print information about what&#39;s going on
std::pair< std::vector< double >, std::vector< double > > FakeTpcFlashes(std::vector< simb::MCParticle > particles)
Definition: CosmicIdUtils.cc:8
Point_t const & End() const
Vector cross(Vector const &a, Vector const &b)
Return cross product of two vectors.
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space.
Definition: geo_vectors.h:184
PandoraNuScoreCosmicIdAlg PandoraNuScoreAlg() const
BEGIN_PROLOG could also be cout
auto const detProp
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a &quot;fitted&quot; track:
std::pair< TVector3, TVector3 > CrossingPoints(const simb::MCParticle &particle)
bool InFiducial(geo::Point_t point, double fiducial)
void sbnd::CosmicIdTree::beginJob ( )
overridevirtual

Definition at line 256 of file CosmicIdTree_module.cc.

257  {
258 
259  // Access tfileservice to handle creating and writing histograms
260  art::ServiceHandle<art::TFileService> tfs;
261 
262  // Track tree
263  fTrackTree = tfs->make<TTree>("tracks", "tracks");
264 
265  fTrackTree->Branch("track_type", &track_type);
266  fTrackTree->Branch("track_pfp_nu", &track_pfp_nu, "track_pfp_nu/O");
267  fTrackTree->Branch("track_nu_tpc", &track_nu_tpc, "track_nu_tpc/I");
268  fTrackTree->Branch("track_pdg", &track_pdg, "track_pdg/I");
269  fTrackTree->Branch("track_time", &track_time, "track_time/D");
270  fTrackTree->Branch("track_length", &track_length, "track_length/D");
271  fTrackTree->Branch("track_momentum", &track_momentum, "track_momentum/D");
272  fTrackTree->Branch("track_theta", &track_theta, "track_theta/D");
273  fTrackTree->Branch("track_phi", &track_phi, "track_phi/D");
274  fTrackTree->Branch("track_crt_hit_true_match", &track_crt_hit_true_match, "track_crt_hit_true_match/O");
275  fTrackTree->Branch("track_crt_hit_dca", &track_crt_hit_dca, "track_crt_hit_dca/D");
276  fTrackTree->Branch("track_crt_track_true_match", &track_crt_track_true_match, "track_crt_track_true_match/O");
277  fTrackTree->Branch("track_crt_track_dca", &track_crt_track_dca, "track_crt_track_dca/D");
278  fTrackTree->Branch("track_crt_track_angle", &track_crt_track_angle, "track_crt_track_angle/D");
279  fTrackTree->Branch("track_stops", &track_stops, "track_stops/O");
280  fTrackTree->Branch("track_stop_ratio_start", &track_stop_ratio_start, "track_stop_ratio_start/D");
281  fTrackTree->Branch("track_stop_ratio_end", &track_stop_ratio_end, "track_stop_ratio_end/D");
282  fTrackTree->Branch("track_fiducial_dist_start", &track_fiducial_dist_start, "track_fiducial_dist_start/D");
283  fTrackTree->Branch("track_fiducial_dist_end", &track_fiducial_dist_end, "track_fiducial_dist_end/D");
284  fTrackTree->Branch("track_tpc", &track_tpc, "track_tpc/I");
285  fTrackTree->Branch("track_apa_cross", &track_apa_cross, "track_apa_cross/O");
286  fTrackTree->Branch("track_apa_dist", &track_apa_dist, "track_apa_dist/D");
287  fTrackTree->Branch("track_apa_min_dist", &track_apa_min_dist, "track_apa_min_dist/D");
288  fTrackTree->Branch("track_pandora_nu_score", &track_pandora_nu_score, "track_pandora_nu_score/D");
289 
290  // PFParticle tree
291  fPfpTree = tfs->make<TTree>("pfps", "pfps");
292 
293  fPfpTree->Branch("pfp_type", &pfp_type);
294  fPfpTree->Branch("pfp_nu", &pfp_nu, "pfp_nu/O");
295  fPfpTree->Branch("pfp_nu_tpc", &pfp_nu_tpc, "pfp_nu_tpc/I");
296  fPfpTree->Branch("pfp_n_tracks", &pfp_n_tracks, "pfp_n_tracks/I");
297  fPfpTree->Branch("pfp_pdg", &pfp_pdg, "pfp_pdg/I");
298  fPfpTree->Branch("pfp_time", &pfp_time, "pfp_time/D");
299  fPfpTree->Branch("pfp_length", &pfp_length, "pfp_length/D");
300  fPfpTree->Branch("pfp_momentum", &pfp_momentum, "pfp_momentum/D");
301  fPfpTree->Branch("pfp_theta", &pfp_theta, "pfp_theta/D");
302  fPfpTree->Branch("pfp_phi", &pfp_phi, "pfp_phi/D");
303  fPfpTree->Branch("pfp_tracks_angle", &pfp_tracks_angle, "pfp_tracks_angle/D");
304  fPfpTree->Branch("pfp_second_length", &pfp_second_length, "pfp_second_length/D");
305  fPfpTree->Branch("pfp_crt_hit_true_match", &pfp_crt_hit_true_match, "pfp_crt_hit_true_match/O");
306  fPfpTree->Branch("pfp_crt_hit_dca", &pfp_crt_hit_dca, "pfp_crt_hit_dca/D");
307  fPfpTree->Branch("pfp_sec_crt_hit_dca", &pfp_sec_crt_hit_dca, "pfp_sec_crt_hit_dca/D");
308  fPfpTree->Branch("pfp_crt_track_true_match", &pfp_crt_track_true_match, "pfp_crt_track_true_match/O");
309  fPfpTree->Branch("pfp_crt_track_dca", &pfp_crt_track_dca, "pfp_crt_track_dca/D");
310  fPfpTree->Branch("pfp_crt_track_angle", &pfp_crt_track_angle, "pfp_crt_track_angle/D");
311  fPfpTree->Branch("pfp_stops", &pfp_stops, "pfp_stops/O");
312  fPfpTree->Branch("pfp_stop_ratio_start", &pfp_stop_ratio_start, "pfp_stop_ratio_start/D");
313  fPfpTree->Branch("pfp_stop_ratio_end", &pfp_stop_ratio_end, "pfp_stop_ratio_end/D");
314  fPfpTree->Branch("pfp_sec_stop_ratio_start", &pfp_sec_stop_ratio_start, "pfp_sec_stop_ratio_start/D");
315  fPfpTree->Branch("pfp_sec_stop_ratio_end", &pfp_sec_stop_ratio_end, "pfp_sec_stop_ratio_end/D");
316  fPfpTree->Branch("pfp_fiducial_dist_start", &pfp_fiducial_dist_start, "pfp_fiducial_dist_start/D");
317  fPfpTree->Branch("pfp_fiducial_dist_end", &pfp_fiducial_dist_end, "pfp_fiducial_dist_end/D");
318  fPfpTree->Branch("pfp_sec_fiducial_dist_start", &pfp_sec_fiducial_dist_start, "pfp_sec_fiducial_dist_start/D");
319  fPfpTree->Branch("pfp_sec_fiducial_dist_end", &pfp_sec_fiducial_dist_end, "pfp_sec_fiducial_dist_end/D");
320  fPfpTree->Branch("pfp_tpc", &pfp_tpc, "pfp_tpc/I");
321  fPfpTree->Branch("pfp_apa_cross", &pfp_apa_cross, "pfp_apa_cross/O");
322  fPfpTree->Branch("pfp_apa_dist", &pfp_apa_dist, "pfp_apa_dist/D");
323  fPfpTree->Branch("pfp_apa_min_dist", &pfp_apa_min_dist, "pfp_apa_min_dist/D");
324  fPfpTree->Branch("pfp_sec_apa_min_dist", &pfp_sec_apa_min_dist, "pfp_sec_apa_min_dist/D");
325  fPfpTree->Branch("pfp_pandora_nu_score", &pfp_pandora_nu_score, "pfp_pandora_nu_score/D");
326 
327  // Initial output
328  if(fVerbose) std::cout<<"----------------- Cosmic ID Tree Module -------------------"<<std::endl;
329 
330  } // CosmicIdTree::beginJob()
bool fVerbose
print information about what&#39;s going on
art::ServiceHandle< art::TFileService > tfs
BEGIN_PROLOG could also be cout
void sbnd::CosmicIdTree::endJob ( )
overridevirtual

Definition at line 763 of file CosmicIdTree_module.cc.

763  {
764 
765 
766  } // CosmicIdTree::endJob()
void sbnd::CosmicIdTree::GetPFParticleIdMap ( const PFParticleHandle pfParticleHandle,
PFParticleIdMap pfParticleMap 
)
private

Definition at line 768 of file CosmicIdTree_module.cc.

768  {
769  for (unsigned int i = 0; i < pfParticleHandle->size(); ++i){
770  const art::Ptr<recob::PFParticle> pParticle(pfParticleHandle, i);
771  if (!pfParticleMap.insert(PFParticleIdMap::value_type(pParticle->Self(), pParticle)).second){
772  std::cout << " Unable to get PFParticle ID map, the input PFParticle collection has repeat IDs!" <<"\n";
773  }
774  }
775  }
BEGIN_PROLOG could also be cout
void sbnd::CosmicIdTree::ResetPfpVars ( )

Definition at line 803 of file CosmicIdTree_module.cc.

803  {
804  pfp_type = "none";
805  pfp_nu = false;
806  pfp_nu_tpc = -99999;
807  pfp_n_tracks = 0;
808  pfp_pdg = -99999;
809  pfp_length = -99999;
810  pfp_momentum = -99999;
811  pfp_theta = -99999;
812  pfp_phi = -99999;
813  pfp_tracks_angle = -99999;
814  pfp_second_length = -99999;
815  pfp_crt_hit_true_match = false;
816  pfp_crt_hit_dca = -99999;
817  pfp_sec_crt_hit_dca = -99999;
818  pfp_crt_track_true_match = false;
819  pfp_crt_track_dca = -99999;
820  pfp_crt_track_angle = -99999;
821  pfp_stops = false;
822  pfp_stop_ratio_start = -99999;
823  pfp_stop_ratio_end = -99999;
824  pfp_sec_stop_ratio_start = -99999;
825  pfp_sec_stop_ratio_end = -99999;
826  pfp_fiducial_dist_start = -99999;
827  pfp_fiducial_dist_end = -99999;
829  pfp_sec_fiducial_dist_end = -99999;
830  pfp_tpc = -99999;
831  pfp_apa_cross = false;
832  pfp_apa_dist = -99999;
833  pfp_apa_min_dist = -99999;
834  pfp_sec_apa_min_dist = -99999;
835  pfp_pandora_nu_score = -99999;
836  }
void sbnd::CosmicIdTree::ResetTrackVars ( )

Definition at line 777 of file CosmicIdTree_module.cc.

777  {
778  track_type = "none";
779  track_pfp_nu = false;
780  track_nu_tpc = -99999;
781  track_pdg = -99999;
782  track_length = -99999;
783  track_momentum = -99999;
784  track_theta = -99999;
785  track_phi = -99999;
786  track_crt_hit_true_match = false;
787  track_crt_hit_dca = -99999;
789  track_crt_track_dca = -99999;
790  track_crt_track_angle = -99999;
791  track_stops = false;
792  track_stop_ratio_start = -99999;
793  track_stop_ratio_end = -99999;
794  track_fiducial_dist_start = -99999;
795  track_fiducial_dist_end = -99999;
796  track_tpc = -99999;
797  track_apa_cross = false;
798  track_apa_dist = -99999;
799  track_apa_min_dist = -99999;
800  track_pandora_nu_score = -99999;
801  }

Member Data Documentation

double sbnd::CosmicIdTree::fBeamTimeMax
private

Definition at line 161 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::fBeamTimeMin
private

Definition at line 160 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fCaloModuleLabel
private

name of CRT producer

Definition at line 157 of file CosmicIdTree_module.cc.

CosmicIdAlg sbnd::CosmicIdTree::fCosId
private

Definition at line 167 of file CosmicIdTree_module.cc.

CRTBackTracker sbnd::CosmicIdTree::fCrtBackTrack
private

Definition at line 165 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fCRTHitLabel
private

name of CRT producer

Definition at line 154 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fCRTTrackLabel
private

name of CRT producer

Definition at line 155 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fPandoraLabel
private

Definition at line 158 of file CosmicIdTree_module.cc.

TTree* sbnd::CosmicIdTree::fPfpTree
private

Definition at line 171 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fSimModuleLabel
private

name of detsim producer

Definition at line 153 of file CosmicIdTree_module.cc.

TPCGeoAlg sbnd::CosmicIdTree::fTpcGeo
private

Definition at line 163 of file CosmicIdTree_module.cc.

art::InputTag sbnd::CosmicIdTree::fTPCTrackLabel
private

name of CRT producer

Definition at line 156 of file CosmicIdTree_module.cc.

TTree* sbnd::CosmicIdTree::fTrackTree
private

Definition at line 170 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::fVerbose
private

print information about what's going on

Definition at line 159 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::pfp_apa_cross
private

Definition at line 228 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_apa_dist
private

Definition at line 229 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_apa_min_dist
private

Definition at line 230 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_crt_hit_dca
private

Definition at line 213 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::pfp_crt_hit_true_match
private

Definition at line 212 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_crt_track_angle
private

Definition at line 217 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_crt_track_dca
private

Definition at line 216 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::pfp_crt_track_true_match
private

Definition at line 215 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_fiducial_dist_end
private

Definition at line 224 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_fiducial_dist_start
private

Definition at line 223 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_length
private

Definition at line 206 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_momentum
private

Definition at line 207 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::pfp_n_tracks
private

Definition at line 203 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::pfp_nu
private

Definition at line 201 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::pfp_nu_tpc
private

Definition at line 202 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_pandora_nu_score
private

Definition at line 232 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::pfp_pdg
private

Definition at line 204 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_phi
private

Definition at line 209 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_apa_min_dist
private

Definition at line 231 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_crt_hit_dca
private

Definition at line 214 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_fiducial_dist_end
private

Definition at line 226 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_fiducial_dist_start
private

Definition at line 225 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_stop_ratio_end
private

Definition at line 222 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_sec_stop_ratio_start
private

Definition at line 221 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_second_length
private

Definition at line 211 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_stop_ratio_end
private

Definition at line 220 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_stop_ratio_start
private

Definition at line 219 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::pfp_stops
private

Definition at line 218 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_theta
private

Definition at line 208 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_time
private

Definition at line 205 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::pfp_tpc
private

Definition at line 227 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::pfp_tracks_angle
private

Definition at line 210 of file CosmicIdTree_module.cc.

std::string sbnd::CosmicIdTree::pfp_type
private

Definition at line 200 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::track_apa_cross
private

Definition at line 194 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_apa_dist
private

Definition at line 195 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_apa_min_dist
private

Definition at line 196 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_crt_hit_dca
private

Definition at line 184 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::track_crt_hit_true_match
private

Definition at line 183 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_crt_track_angle
private

Definition at line 187 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_crt_track_dca
private

Definition at line 186 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::track_crt_track_true_match
private

Definition at line 185 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_fiducial_dist_end
private

Definition at line 192 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_fiducial_dist_start
private

Definition at line 191 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_length
private

Definition at line 179 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_momentum
private

Definition at line 180 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::track_nu_tpc
private

Definition at line 176 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_pandora_nu_score
private

Definition at line 197 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::track_pdg
private

Definition at line 177 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::track_pfp_nu
private

Definition at line 175 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_phi
private

Definition at line 182 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_stop_ratio_end
private

Definition at line 190 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_stop_ratio_start
private

Definition at line 189 of file CosmicIdTree_module.cc.

bool sbnd::CosmicIdTree::track_stops
private

Definition at line 188 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_theta
private

Definition at line 181 of file CosmicIdTree_module.cc.

double sbnd::CosmicIdTree::track_time
private

Definition at line 178 of file CosmicIdTree_module.cc.

int sbnd::CosmicIdTree::track_tpc
private

Definition at line 193 of file CosmicIdTree_module.cc.

std::string sbnd::CosmicIdTree::track_type
private

Definition at line 174 of file CosmicIdTree_module.cc.


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