LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
trkf::TrackAna Class Reference
Inheritance diagram for trkf::TrackAna:
art::EDAnalyzer art::detail::Analyzer art::detail::LegacyModule art::Observer art::ModuleBase

Classes

struct  MCHists
 
struct  RecoHists
 

Public Types

using ModuleType = EDAnalyzer
 

Public Member Functions

 TrackAna (fhicl::ParameterSet const &pset)
 
void doBeginJob (SharedResources const &resources)
 
void doEndJob ()
 
void doRespondToOpenInputFile (FileBlock const &fb)
 
void doRespondToCloseInputFile (FileBlock const &fb)
 
void doRespondToOpenOutputFiles (FileBlock const &fb)
 
void doRespondToCloseOutputFiles (FileBlock const &fb)
 
bool doBeginRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doEndRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doBeginSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEndSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEvent (EventPrincipal &ep, ModuleContext const &mc, std::atomic< std::size_t > &counts_run, std::atomic< std::size_t > &counts_passed, std::atomic< std::size_t > &counts_failed)
 
ModuleDescription const & moduleDescription () const
 
void setModuleDescription (ModuleDescription const &)
 
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables () const
 
void sortConsumables (std::string const &current_process_name)
 
std::unique_ptr< Worker > makeWorker (WorkerParams const &wp)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Protected Member Functions

std::string const & processName () const
 
bool wantAllEvents () const noexcept
 
bool wantEvent (ScheduleID id, Event const &e) const
 
Handle< TriggerResults > getTriggerResults (Event const &e) const
 
ConsumesCollector & consumesCollector ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 

Private Member Functions

void analyze (const art::Event &evt) override
 
void endJob () override
 
void anaStitch (const art::Event &evt, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp)
 
std::vector< size_t > fsort_indexes (const std::vector< double > &v)
 

Private Attributes

std::string fTrackModuleLabel
 
std::string fMCTrackModuleLabel
 
std::string fSpacepointModuleLabel
 
std::string fStitchModuleLabel
 
std::string fTrkSpptAssocModuleLabel
 
std::string fHitSpptAssocModuleLabel
 
std::string fHitModuleLabel
 
int fDump
 
double fMinMCKE
 
double fMinMCLen
 
double fMatchColinearity
 
double fMatchDisp
 
double fWMatchDisp
 
double fMatchLength
 
bool fIgnoreSign
 
bool fStitchedAnalysis
 
std::string fOrigin
 
bool fCheckOrigin
 
simb::Origin_t fOriginValue
 
int fPrintLevel
 
std::map< int, MCHistsfMCHistMap
 
std::map< int, RecoHistsfRecoHistMap
 
int fNumEvent
 

Detailed Description

Definition at line 251 of file TrackAna_module.cc.

Member Typedef Documentation

Definition at line 22 of file EDAnalyzer.h.

Constructor & Destructor Documentation

trkf::TrackAna::TrackAna ( fhicl::ParameterSet const &  pset)
explicit

Definition at line 632 of file TrackAna_module.cc.

References fCheckOrigin, fDump, fHitModuleLabel, fHitSpptAssocModuleLabel, fMCTrackModuleLabel, fMinMCKE, fMinMCLen, fOrigin, fOriginValue, fStitchModuleLabel, fTrackModuleLabel, fTrkSpptAssocModuleLabel, simb::kBeamNeutrino, simb::kCosmicRay, simb::kSingleParticle, simb::kSuperNovaNeutrino, and simb::kUnknown.

633  : EDAnalyzer(pset)
634  , fTrackModuleLabel(pset.get<std::string>("TrackModuleLabel"))
635  , fMCTrackModuleLabel(pset.get<std::string>("MCTrackModuleLabel"))
636  , fSpacepointModuleLabel(pset.get<std::string>("SpacepointModuleLabel"))
637  , fStitchModuleLabel(pset.get<std::string>("StitchModuleLabel"))
638  , fTrkSpptAssocModuleLabel(pset.get<std::string>("TrkSpptAssocModuleLabel"))
639  , fHitSpptAssocModuleLabel(pset.get<std::string>("HitSpptAssocModuleLabel"))
640  , fHitModuleLabel(pset.get<std::string>("HitModuleLabel"))
641  , fDump(pset.get<int>("Dump"))
642  , fMinMCKE(pset.get<double>("MinMCKE"))
643  , fMinMCLen(pset.get<double>("MinMCLen"))
644  , fMatchColinearity(pset.get<double>("MatchColinearity"))
645  , fMatchDisp(pset.get<double>("MatchDisp"))
646  , fWMatchDisp(pset.get<double>("WMatchDisp"))
647  , fMatchLength(pset.get<double>("MatchLength"))
648  , fIgnoreSign(pset.get<bool>("IgnoreSign"))
649  , fStitchedAnalysis(pset.get<bool>("StitchedAnalysis", false))
650  , fOrigin(pset.get<std::string>("MCTrackOrigin", "Any"))
651  , fPrintLevel(pset.get<int>("PrintLevel", 0))
652  , fNumEvent(0)
653  {
654 
655  // Decide whether to check MCTrack origin
656  fCheckOrigin = false;
658  if (fOrigin.find("Beam") != std::string::npos) {
659  fCheckOrigin = true;
661  }
662  else if (fOrigin.find("Cosmic") != std::string::npos) {
663  fCheckOrigin = true;
665  }
666  else if (fOrigin.find("Super") != std::string::npos) {
667  fCheckOrigin = true;
669  }
670  else if (fOrigin.find("Single") != std::string::npos) {
671  fCheckOrigin = true;
673  }
674 
675  // Report.
676 
677  mf::LogInfo("TrackAna") << "TrackAna configured with the following parameters:\n"
678  << " TrackModuleLabel = " << fTrackModuleLabel << "\n"
679  << " MCTrackModuleLabel = " << fMCTrackModuleLabel << "\n"
680  << " StitchModuleLabel = " << fStitchModuleLabel << "\n"
681  << " TrkSpptAssocModuleLabel = " << fTrkSpptAssocModuleLabel << "\n"
682  << " HitSpptAssocModuleLabel = " << fHitSpptAssocModuleLabel << "\n"
683  << " HitModuleLabel = " << fHitModuleLabel << "\n"
684  << " Dump = " << fDump << "\n"
685  << " MinMCKE = " << fMinMCKE << "\n"
686  << " MinMCLen = " << fMinMCLen << " Origin = " << fOrigin
687  << " Origin value " << fOriginValue;
688  }
std::string fHitSpptAssocModuleLabel
std::string fTrkSpptAssocModuleLabel
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
std::string fSpacepointModuleLabel
std::string fStitchModuleLabel
EDAnalyzer(fhicl::ParameterSet const &pset)
Definition: EDAnalyzer.cc:6
single particles thrown at the detector
Definition: MCTruth.h:26
std::string fMCTrackModuleLabel
simb::Origin_t fOriginValue
std::string fOrigin
Supernova neutrinos.
Definition: MCTruth.h:25
std::string fTrackModuleLabel
std::string fHitModuleLabel
Cosmic rays.
Definition: MCTruth.h:24
Beam neutrinos.
Definition: MCTruth.h:23

Member Function Documentation

void trkf::TrackAna::analyze ( const art::Event evt)
overrideprivate

Definition at line 690 of file TrackAna_module.cc.

References util::abs(), anaStitch(), detinfo::DetectorPropertiesData::ConvertXToTicks(), dir, detinfo::DetectorPropertiesData::DriftVelocity(), e, sim::MCStep::E(), simb::MCParticle::E(), recob::Track::End(), recob::Track::EndCovariance(), recob::Track::EndDirection(), recob::Track::EndMomentum(), art::Event::event(), fCheckOrigin, fDump, trkf::TrackAna::MCHists::fHcosth, trkf::TrackAna::MCHists::fHdl, trkf::TrackAna::MCHists::fHdp, trkf::TrackAna::MCHists::fHdpc, trkf::TrackAna::MCHists::fHdudwpull, trkf::TrackAna::MCHists::fHduvcosth, trkf::TrackAna::MCHists::fHdvdwpull, trkf::TrackAna::RecoHists::fHendd, trkf::TrackAna::MCHists::fHenddx, trkf::TrackAna::MCHists::fHenddy, trkf::TrackAna::MCHists::fHenddz, trkf::TrackAna::RecoHists::fHendx, trkf::TrackAna::RecoHists::fHendy, trkf::TrackAna::RecoHists::fHendz, trkf::TrackAna::MCHists::fHgendx, trkf::TrackAna::MCHists::fHgendy, trkf::TrackAna::MCHists::fHgendz, trkf::TrackAna::MCHists::fHgke, trkf::TrackAna::MCHists::fHgkel, trkf::TrackAna::MCHists::fHglen, trkf::TrackAna::MCHists::fHglens, trkf::TrackAna::MCHists::fHgmom, trkf::TrackAna::MCHists::fHgmoml, trkf::TrackAna::MCHists::fHgphi, trkf::TrackAna::MCHists::fHgstartx, trkf::TrackAna::MCHists::fHgstarty, trkf::TrackAna::MCHists::fHgstartz, trkf::TrackAna::MCHists::fHgtheta, trkf::TrackAna::MCHists::fHgtheta_xz, trkf::TrackAna::MCHists::fHgtheta_yz, trkf::TrackAna::MCHists::fHHitEff, trkf::TrackAna::MCHists::fHHitPurity, fHitModuleLabel, trkf::TrackAna::RecoHists::fHlen, trkf::TrackAna::RecoHists::fHlens, trkf::TrackAna::MCHists::fHlvsl, trkf::TrackAna::MCHists::fHmcdudw, trkf::TrackAna::MCHists::fHmcdvdw, trkf::TrackAna::MCHists::fHmcendx, trkf::TrackAna::MCHists::fHmcendy, trkf::TrackAna::MCHists::fHmcendz, trkf::TrackAna::MCHists::fHmcke, trkf::TrackAna::MCHists::fHmckel, trkf::TrackAna::MCHists::fHmclen, trkf::TrackAna::MCHists::fHmclens, trkf::TrackAna::MCHists::fHmcmom, trkf::TrackAna::MCHists::fHmcmoml, trkf::TrackAna::MCHists::fHmcphi, trkf::TrackAna::MCHists::fHmcstartx, trkf::TrackAna::MCHists::fHmcstarty, trkf::TrackAna::MCHists::fHmcstartz, trkf::TrackAna::MCHists::fHmctheta, trkf::TrackAna::MCHists::fHmctheta_xz, trkf::TrackAna::MCHists::fHmctheta_yz, trkf::TrackAna::MCHists::fHmcu, trkf::TrackAna::MCHists::fHmcv, trkf::TrackAna::MCHists::fHmcw, trkf::TrackAna::RecoHists::fHmom, trkf::TrackAna::RecoHists::fHmoml, trkf::TrackAna::RecoHists::fHphi, trkf::TrackAna::MCHists::fHppull, trkf::TrackAna::MCHists::fHppullc, trkf::TrackAna::MCHists::fHpvsp, trkf::TrackAna::MCHists::fHpvspc, trkf::TrackAna::RecoHists::fHstartd, trkf::TrackAna::MCHists::fHstartdx, trkf::TrackAna::MCHists::fHstartdy, trkf::TrackAna::MCHists::fHstartdz, trkf::TrackAna::RecoHists::fHstartx, trkf::TrackAna::RecoHists::fHstarty, trkf::TrackAna::RecoHists::fHstartz, trkf::TrackAna::RecoHists::fHtheta, trkf::TrackAna::RecoHists::fHtheta_xz, trkf::TrackAna::RecoHists::fHtheta_yz, trkf::TrackAna::MCHists::fHupull, trkf::TrackAna::MCHists::fHvpull, fIgnoreSign, fMatchColinearity, fMatchDisp, fMatchLength, fMCHistMap, fMCTrackModuleLabel, fMinMCKE, fMinMCLen, fNumEvent, fOriginValue, fPrintLevel, fRecoHistMap, fStitchedAnalysis, fStitchModuleLabel, fTrackModuleLabel, fWMatchDisp, Get, art::FindManyP< ProdB, Data >::get(), art::ProductRetriever::getByLabel(), recob::Track::GlobalToLocalRotationAtPoint(), recob::Track::HasMomentum(), cheat::BackTrackerService::HitCollectionEfficiency(), cheat::BackTrackerService::HitCollectionPurity(), recob::Track::ID(), art::Event::isRealData(), art::Handle< T >::isValid(), geo::k3D, simb::kCosmicRay, simb::MCParticle::Mass(), sim::MCStep::Momentum(), recob::Track::NumberTrajectoryPoints(), sim::MCTrack::Origin(), sim::MCTrack::PdgCode(), geo::PlaneID::Plane, art::Event::run(), sim::MCTrack::Start(), sim::MCStep::T(), sim::MCTrack::TrackID(), cheat::ParticleInventoryService::TrackIdToParticle_P(), recob::Track::Vertex(), recob::Track::VertexCovariance(), recob::Track::VertexDirection(), recob::Track::VertexMomentum(), and w.

691  {
694  auto const& wireReadoutGeom = art::ServiceHandle<geo::WireReadout>()->Get();
695 
696  ++fNumEvent;
697 
698  // Optional dump stream.
699 
700  std::unique_ptr<mf::LogInfo> pdump;
701  if (fDump > 0) {
702  --fDump;
703  pdump = std::make_unique<mf::LogInfo>("TrackAna");
704  }
705 
706  // Make sure histograms are booked.
707 
708  bool mc = !evt.isRealData();
709 
710  // Get MCTracks.
711 
713  evt.getByLabel(fMCTrackModuleLabel, mctrackh);
714  // pair of MCTrack and index of matched reco track
715  std::vector<std::pair<const sim::MCTrack*, int>> selected_mctracks;
716 
717  auto const clockData = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(evt);
718  auto const detProp =
720 
721  if (mc && mctrackh.isValid()) {
722 
723  selected_mctracks.reserve(mctrackh->size());
724 
725  // Dump MCTracks.
726 
727  if (pdump) {
728  *pdump << "MC Tracks\n"
729  << " Id pdg x y z dx dy dz "
730  " p\n"
731  << "--------------------------------------------------------------------------------"
732  "-----------\n";
733  }
734 
735  // Loop over mc tracks, and fill histograms that depend only
736  // on mc information. Also, fill a secondary list of mc tracks
737  // that pass various selection criteria.
738 
739  for (std::vector<sim::MCTrack>::const_iterator imctrk = mctrackh->begin();
740  imctrk != mctrackh->end();
741  ++imctrk) {
742  const sim::MCTrack& mctrk = *imctrk;
743  int pdg = mctrk.PdgCode();
744  if (fIgnoreSign) pdg = std::abs(pdg);
745 
746  // Ignore everything except stable charged nonshowering particles.
747 
748  int apdg = std::abs(pdg);
749  if (apdg == 13 || // Muon
750  apdg == 211 || // Charged pion
751  apdg == 321 || // Charged kaon
752  apdg == 2212) { // (Anti)proton
753 
754  // check MC track origin?
755  if (fCheckOrigin && mctrk.Origin() != fOriginValue) continue;
756 
757  // Apply minimum energy cut.
758 
759  if (mctrk.Start().E() >= mctrk.Start().Momentum().Mag() + 1000. * fMinMCKE) {
760 
761  // Calculate the x offset due to nonzero mc particle time.
762 
763  double mctime = mctrk.Start().T(); // nsec
764  double mcdx = mctime * 1.e-3 * detProp.DriftVelocity(); // cm
765 
766  // Calculate the length of this mc particle inside the fiducial volume.
767 
768  geo::Point_t mcstart;
769  geo::Point_t mcend;
770  TVector3 mcstartmom;
771  TVector3 mcendmom;
772  double plen = length(detProp, mctrk, mcdx, mcstart, mcend, mcstartmom, mcendmom);
773 
774  // Apply minimum fiducial length cut. Always reject particles that have
775  // zero length in the tpc regardless of the configured cut.
776 
777  if (plen > 0. && plen > fMinMCLen) {
778 
779  // This is a good mc particle (capable of making a track).
780 
781  selected_mctracks.push_back(std::make_pair(&mctrk, -1));
782 
783  // Dump MC particle information here.
784 
785  if (pdump) {
786  double pstart = mcstartmom.Mag();
787  double pend = mcendmom.Mag();
788  *pdump << "\nOffset" << std::setw(3) << mctrk.TrackID() << std::setw(6)
789  << mctrk.PdgCode() << " " << std::fixed << std::setprecision(2)
790  << std::setw(10) << mcdx << "\nStart " << std::setw(3) << mctrk.TrackID()
791  << std::setw(6) << mctrk.PdgCode() << " " << std::fixed
792  << std::setprecision(2) << std::setw(10) << mcstart.X() << std::setw(10)
793  << mcstart.Y() << std::setw(10) << mcstart.Z();
794  if (pstart > 0.) {
795  *pdump << " " << std::fixed << std::setprecision(3) << std::setw(10)
796  << mcstartmom[0] / pstart << std::setw(10) << mcstartmom[1] / pstart
797  << std::setw(10) << mcstartmom[2] / pstart;
798  }
799  else
800  *pdump << std::setw(32) << " ";
801  *pdump << std::setw(12) << std::fixed << std::setprecision(3) << pstart;
802  *pdump << "\nEnd " << std::setw(3) << mctrk.TrackID() << std::setw(6)
803  << mctrk.PdgCode() << " " << std::fixed << std::setprecision(2)
804  << std::setw(10) << mcend.X() << std::setw(10) << mcend.Y() << std::setw(10)
805  << mcend.Z();
806  if (pend > 0.01) {
807  *pdump << " " << std::fixed << std::setprecision(3) << std::setw(10)
808  << mcendmom[0] / pend << std::setw(10) << mcendmom[1] / pend
809  << std::setw(10) << mcendmom[2] / pend;
810  }
811  else
812  *pdump << std::setw(32) << " ";
813  *pdump << std::setw(12) << std::fixed << std::setprecision(3) << pend
814  << "\nLength: " << plen << "\n";
815  }
816 
817  // Fill histograms.
818 
819  if (fMCHistMap.count(pdg) == 0) {
820  std::ostringstream ostr;
821  ostr << "MC" << (fIgnoreSign ? "All" : (pdg > 0 ? "Pos" : "Neg")) << std::abs(pdg);
822  fMCHistMap.emplace(pdg, MCHists{ostr.str()});
823  }
824  const MCHists& mchists = fMCHistMap.at(pdg);
825 
826  double mctheta_xz = std::atan2(mcstartmom.X(), mcstartmom.Z());
827  double mctheta_yz = std::atan2(mcstartmom.Y(), mcstartmom.Z());
828  double mcmom = mcstartmom.Mag();
829  double mcmass = 0.001 * mctrk.Start().Momentum().Mag();
830  double mcke = mcmom * mcmom / (std::hypot(mcmom, mcmass) + mcmass);
831 
832  mchists.fHmcstartx->Fill(mcstart.X());
833  mchists.fHmcstarty->Fill(mcstart.Y());
834  mchists.fHmcstartz->Fill(mcstart.Z());
835  mchists.fHmcendx->Fill(mcend.X());
836  mchists.fHmcendy->Fill(mcend.Y());
837  mchists.fHmcendz->Fill(mcend.Z());
838  mchists.fHmctheta->Fill(mcstartmom.Theta());
839  mchists.fHmcphi->Fill(mcstartmom.Phi());
840  mchists.fHmctheta_xz->Fill(mctheta_xz);
841  mchists.fHmctheta_yz->Fill(mctheta_yz);
842  mchists.fHmcmom->Fill(mcmom);
843  mchists.fHmcmoml->Fill(mcmom);
844  mchists.fHmcke->Fill(mcke);
845  mchists.fHmckel->Fill(mcke);
846  mchists.fHmclen->Fill(plen);
847  mchists.fHmclens->Fill(plen);
848  }
849  }
850  }
851  }
852  } //mc
853 
854  // Get tracks and spacepoints and hits
858 
859  evt.getByLabel(fTrackModuleLabel, trackh);
860  evt.getByLabel(fStitchModuleLabel, trackvh);
861  evt.getByLabel(fHitModuleLabel, hith);
862 
863  // Extract all hits into a vector of art::Ptrs (the format used by back tracker).
864 
865  std::vector<art::Ptr<recob::Hit>> allhits;
866  if (hith.isValid()) {
867  allhits.reserve(hith->size());
868  for (unsigned int i = 0; i < hith->size(); ++i) {
869  allhits.emplace_back(hith, i);
870  }
871  }
872 
873  // Construct FindManyP object to be used for finding track-hit associations.
874 
875  art::FindManyP<recob::Hit> tkhit_find(trackh, evt, fTrackModuleLabel);
876 
877  // This new top part of TrackAna between two long lines of ************s
878  // is particular to analyzing Stitched Tracks.
879  // *******************************************************************//
880 
881  if (trackvh.isValid() && fStitchedAnalysis) {
882  mf::LogDebug("TrackAna") << "TrackAna read " << trackvh->size()
883  << " vectors of Stitched PtrVectorsof tracks.";
884  anaStitch(evt, clockData, detProp);
885  }
886 
887  if (trackh.isValid()) {
888 
889  if (pdump) {
890  *pdump << "\nReconstructed Tracks\n"
891  << " Id MCid x y z dx dy dz "
892  " p\n"
893  << "--------------------------------------------------------------------------------"
894  "-----------\n";
895  }
896 
897  // Loop over tracks.
898 
899  int ntrack = trackh->size();
900  for (int i = 0; i < ntrack; ++i) {
901  art::Ptr<recob::Track> ptrack(trackh, i);
902  const recob::Track& track = *ptrack;
903 
904  // Extract hits associated with this track.
905 
906  std::vector<art::Ptr<recob::Hit>> trackhits;
907  tkhit_find.get(i, trackhits);
908 
909  // Calculate the x offset due to nonzero reconstructed time.
910 
911  double trackdx = 0;
912 
913  // Fill histograms involving reco tracks only.
914 
915  int ntraj = track.NumberTrajectoryPoints();
916  if (ntraj > 0) {
917  TVector3 pos = track.Vertex<TVector3>();
918  TVector3 dir = track.VertexDirection<TVector3>();
919  TVector3 end = track.End<TVector3>();
920  pos[0] += trackdx;
921  end[0] += trackdx;
922 
923  double dpos = bdist(pos);
924  double dend = bdist(end);
925  double tlen = length(track);
926  double theta_xz = std::atan2(dir.X(), dir.Z());
927  double theta_yz = std::atan2(dir.Y(), dir.Z());
928 
929  if (fRecoHistMap.count(0) == 0) fRecoHistMap.emplace(0, RecoHists{"Reco"});
930  const RecoHists& rhists = fRecoHistMap.at(0);
931 
932  rhists.fHstartx->Fill(pos.X());
933  rhists.fHstarty->Fill(pos.Y());
934  rhists.fHstartz->Fill(pos.Z());
935  rhists.fHstartd->Fill(dpos);
936  rhists.fHendx->Fill(end.X());
937  rhists.fHendy->Fill(end.Y());
938  rhists.fHendz->Fill(end.Z());
939  rhists.fHendd->Fill(dend);
940  rhists.fHtheta->Fill(dir.Theta());
941  rhists.fHphi->Fill(dir.Phi());
942  rhists.fHtheta_xz->Fill(theta_xz);
943  rhists.fHtheta_yz->Fill(theta_yz);
944 
945  double mom = 0.;
946  if (track.HasMomentum()) mom = track.VertexMomentum();
947  rhists.fHmom->Fill(mom);
948  rhists.fHmoml->Fill(mom);
949  rhists.fHlen->Fill(tlen);
950  rhists.fHlens->Fill(tlen);
951 
952  // Id of matching mc particle.
953 
954  int mcid = -1;
955 
956  // Loop over direction.
957 
958  for (int swap = 0; swap < 2; ++swap) {
959 
960  // Analyze reversed tracks only if start momentum = end momentum.
961 
962  if (swap != 0 && track.HasMomentum() &&
963  std::abs(track.VertexMomentum() - track.EndMomentum()) > 1.e-3)
964  continue;
965 
966  // Calculate the global-to-local rotation matrix.
967 
968  int start_point = (swap == 0 ? 0 : ntraj - 1);
969  TMatrixD rot = track.GlobalToLocalRotationAtPoint<TMatrixD>(start_point);
970 
971  // Update track data for reversed case.
972 
973  if (swap != 0) {
974  rot(1, 0) = -rot(1, 0);
975  rot(2, 0) = -rot(2, 0);
976  rot(1, 1) = -rot(1, 1);
977  rot(2, 1) = -rot(2, 1);
978  rot(1, 2) = -rot(1, 2);
979  rot(2, 2) = -rot(2, 2);
980 
981  pos = track.End<TVector3>();
982  dir = -track.EndDirection<TVector3>();
983  end = track.Vertex<TVector3>();
984  pos[0] += trackdx;
985  end[0] += trackdx;
986 
987  dpos = bdist(pos);
988  dend = bdist(end);
989  theta_xz = std::atan2(dir.X(), dir.Z());
990  theta_yz = std::atan2(dir.Y(), dir.Z());
991 
992  if (track.HasMomentum()) mom = track.EndMomentum();
993  }
994 
995  // Get covariance matrix.
996 
997  const auto& cov = (swap == 0 ? track.VertexCovariance() : track.EndCovariance());
998 
999  // Loop over track-like mc particles.
1000 
1001  for (unsigned int imc = 0; imc < selected_mctracks.size(); ++imc) {
1002  const sim::MCTrack& mctrk = *selected_mctracks[imc].first;
1003  int pdg = mctrk.PdgCode();
1004  if (fIgnoreSign) pdg = std::abs(pdg);
1005  auto iMCHistMap = fMCHistMap.find(pdg);
1006  if (iMCHistMap == fMCHistMap.end())
1007  throw cet::exception("TrackAna") << "no particle with ID=" << pdg << "\n";
1008  const MCHists& mchists = iMCHistMap->second;
1009 
1010  // Calculate the x offset due to nonzero mc particle time.
1011 
1012  double mctime = mctrk.Start().T(); // nsec
1013  double mcdx = mctime * 1.e-3 * detProp.DriftVelocity(); // cm
1014 
1015  // Calculate the points where this mc particle enters and leaves the
1016  // fiducial volume, and the length in the fiducial volume.
1017 
1018  geo::Point_t mcstart;
1019  geo::Point_t mcend;
1020  TVector3 mcstartmom;
1021  TVector3 mcendmom;
1022  double plen = length(detProp, mctrk, mcdx, mcstart, mcend, mcstartmom, mcendmom);
1023 
1024  // Get the displacement of this mc particle in the global coordinate system.
1025 
1026  TVector3 mcpos{mcstart.X() - pos[0], mcstart.Y() - pos[1], mcstart.Z() - pos[2]};
1027 
1028  // Rotate the momentum and position to the
1029  // track-local coordinate system.
1030 
1031  TVector3 mcmoml = rot * mcstartmom;
1032  TVector3 mcposl = rot * mcpos;
1033 
1034  double colinearity = mcmoml.Z() / mcmoml.Mag();
1035 
1036  double u = mcposl.X();
1037  double v = mcposl.Y();
1038  double w = mcposl.Z();
1039 
1040  double pu = mcmoml.X();
1041  double pv = mcmoml.Y();
1042  double pw = mcmoml.Z();
1043 
1044  double dudw = pu / pw;
1045  double dvdw = pv / pw;
1046 
1047  double u0 = u - w * dudw;
1048  double v0 = v - w * dvdw;
1049  double uv0 = std::hypot(u0, v0);
1050 
1051  mchists.fHduvcosth->Fill(colinearity, uv0);
1052 
1053  if (std::abs(uv0) < fMatchDisp) {
1054 
1055  // Fill slope matching histograms.
1056 
1057  mchists.fHmcdudw->Fill(dudw);
1058  mchists.fHmcdvdw->Fill(dvdw);
1059  mchists.fHdudwpull->Fill(dudw / std::sqrt(cov(2, 2)));
1060  mchists.fHdvdwpull->Fill(dvdw / std::sqrt(cov(3, 3)));
1061  }
1062  mchists.fHcosth->Fill(colinearity);
1063  if (colinearity > fMatchColinearity) {
1064 
1065  // Fill displacement matching histograms.
1066 
1067  mchists.fHmcu->Fill(u0);
1068  mchists.fHmcv->Fill(v0);
1069  mchists.fHmcw->Fill(w);
1070  mchists.fHupull->Fill(u0 / std::sqrt(cov(0, 0)));
1071  mchists.fHvpull->Fill(v0 / std::sqrt(cov(1, 1)));
1072 
1073  if (std::abs(uv0) < fMatchDisp) {
1074 
1075  // Fill matching histograms.
1076 
1077  double mctheta_xz = std::atan2(mcstartmom.X(), mcstartmom.Z());
1078  double mctheta_yz = std::atan2(mcstartmom.Y(), mcstartmom.Z());
1079  double mcmom = mcstartmom.Mag();
1080  double mcmass = 0.001 * mctrk.Start().Momentum().Mag();
1081  double mcke = mcmom * mcmom / (std::hypot(mcmom, mcmass) + mcmass);
1082 
1083  mchists.fHstartdx->Fill(pos.X() - mcstart.X());
1084  mchists.fHstartdy->Fill(pos.Y() - mcstart.Y());
1085  mchists.fHstartdz->Fill(pos.Z() - mcstart.Z());
1086  mchists.fHenddx->Fill(end.X() - mcend.X());
1087  mchists.fHenddy->Fill(end.Y() - mcend.Y());
1088  mchists.fHenddz->Fill(end.Z() - mcend.Z());
1089  mchists.fHlvsl->Fill(plen, tlen);
1090  mchists.fHdl->Fill(tlen - plen);
1091  mchists.fHpvsp->Fill(mcmom, mom);
1092  double dp = mom - mcmom;
1093  mchists.fHdp->Fill(dp);
1094  mchists.fHppull->Fill(dp / std::sqrt(cov(4, 4)));
1095  if (std::abs(dpos) >= 5. && std::abs(dend) >= 5.) {
1096  mchists.fHpvspc->Fill(mcmom, mom);
1097  mchists.fHdpc->Fill(dp);
1098  mchists.fHppullc->Fill(dp / std::sqrt(cov(4, 4)));
1099  }
1100 
1101  // Count this track as well-reconstructed if it is matched to an
1102  // mc particle (which it is if get here), and if in addition the
1103  // starting position (w) matches and the reconstructed track length
1104  // is more than 0.5 of the mc particle trajectory length.
1105 
1106  bool good = std::abs(w) <= fWMatchDisp && tlen > fMatchLength * plen;
1107  if (good) {
1108  mcid = mctrk.TrackID();
1109 
1110  // Calculate and fill hit efficiency and purity.
1111 
1112  std::set<int> tkidset;
1113  tkidset.insert(mcid);
1114  double hiteff = bt_serv->HitCollectionEfficiency(
1115  clockData, tkidset, trackhits, allhits, geo::k3D);
1116  double hitpurity = bt_serv->HitCollectionPurity(clockData, tkidset, trackhits);
1117  mchists.fHHitEff->Fill(hiteff);
1118  mchists.fHHitPurity->Fill(hitpurity);
1119 
1120  // Fill efficiency numerator histograms.
1121 
1122  mchists.fHgstartx->Fill(mcstart.X());
1123  mchists.fHgstarty->Fill(mcstart.Y());
1124  mchists.fHgstartz->Fill(mcstart.Z());
1125  mchists.fHgendx->Fill(mcend.X());
1126  mchists.fHgendy->Fill(mcend.Y());
1127  mchists.fHgendz->Fill(mcend.Z());
1128  mchists.fHgtheta->Fill(mcstartmom.Theta());
1129  mchists.fHgphi->Fill(mcstartmom.Phi());
1130  mchists.fHgtheta_xz->Fill(mctheta_xz);
1131  mchists.fHgtheta_yz->Fill(mctheta_yz);
1132  mchists.fHgmom->Fill(mcmom);
1133  mchists.fHgmoml->Fill(mcmom);
1134  mchists.fHgke->Fill(mcke);
1135  mchists.fHgkel->Fill(mcke);
1136  mchists.fHglen->Fill(plen);
1137  mchists.fHglens->Fill(plen);
1138 
1139  // set the match flag
1140  selected_mctracks[imc].second = i;
1141 
1142  if (fPrintLevel > 0) {
1143  const simb::MCParticle* ptkl = pi_serv->TrackIdToParticle_P(mcid);
1144  float KE = ptkl->E() - ptkl->Mass();
1145  std::string KEUnits = " GeV";
1146  if (mctrk.Origin() != simb::kCosmicRay) {
1147  // MeV for low energy particles
1148  KE *= 1000;
1149  KEUnits = " MeV";
1150  }
1151  mf::LogVerbatim("TrackAna")
1152  << evt.run() << "." << evt.event() << " Match MCTkID " << std::setw(6)
1153  << mctrk.TrackID() << " Origin " << mctrk.Origin() << " PDG" << std::setw(5)
1154  << mctrk.PdgCode() << " KE" << std::setw(4) << (int)KE << KEUnits
1155  << " RecoTrkID " << track.ID() << " hitEff " << std::setprecision(2)
1156  << hiteff << " hitPur " << hitpurity;
1157  // this won't work for DUNE
1158  for (unsigned short ipl = 0; ipl < wireReadoutGeom.Nplanes(); ++ipl) {
1159  geo::PlaneID const planeID{0, 0, ipl};
1160  auto const& plane = wireReadoutGeom.Plane(planeID);
1161  auto const sWire = plane.NearestWireID(mcstart).Wire;
1162  auto const sTick = detProp.ConvertXToTicks(mcstart.X(), planeID);
1163  auto const eWire = plane.NearestWireID(mcend).Wire;
1164  auto const eTick = detProp.ConvertXToTicks(mcend.X(), planeID);
1165  mf::LogVerbatim("TrackAna")
1166  << " Wire:Tick in Pln " << ipl << " W:T " << sWire << ":" << sTick
1167  << " - " << eWire << ":" << eTick;
1168  } // ipl
1169  } // fPrintLevel == 2
1170  } // good
1171  }
1172  }
1173  }
1174  }
1175 
1176  // Dump track information here.
1177 
1178  if (pdump) {
1179  TVector3 pos = track.Vertex<TVector3>();
1180  TVector3 dir = track.VertexDirection<TVector3>();
1181  TVector3 end = track.End<TVector3>();
1182  pos[0] += trackdx;
1183  end[0] += trackdx;
1184  TVector3 enddir = track.EndDirection<TVector3>();
1185  double pstart = track.VertexMomentum();
1186  double pend = track.EndMomentum();
1187  *pdump << "\nOffset" << std::setw(3) << track.ID() << std::setw(6) << mcid << " "
1188  << std::fixed << std::setprecision(2) << std::setw(10) << trackdx << "\nStart "
1189  << std::setw(3) << track.ID() << std::setw(6) << mcid << " " << std::fixed
1190  << std::setprecision(2) << std::setw(10) << pos[0] << std::setw(10) << pos[1]
1191  << std::setw(10) << pos[2];
1192  if (pstart > 0.) {
1193  *pdump << " " << std::fixed << std::setprecision(3) << std::setw(10) << dir[0]
1194  << std::setw(10) << dir[1] << std::setw(10) << dir[2];
1195  }
1196  else
1197  *pdump << std::setw(32) << " ";
1198  *pdump << std::setw(12) << std::fixed << std::setprecision(3) << pstart;
1199  *pdump << "\nEnd " << std::setw(3) << track.ID() << std::setw(6) << mcid << " "
1200  << std::fixed << std::setprecision(2) << std::setw(10) << end[0] << std::setw(10)
1201  << end[1] << std::setw(10) << end[2];
1202  if (pend > 0.01) {
1203  *pdump << " " << std::fixed << std::setprecision(3) << std::setw(10) << enddir[0]
1204  << std::setw(10) << enddir[1] << std::setw(10) << enddir[2];
1205  }
1206  else
1207  *pdump << std::setw(32) << " ";
1208  *pdump << std::setw(12) << std::fixed << std::setprecision(3) << pend
1209  << "\nLength: " << tlen << "\n";
1210  }
1211  }
1212  }
1213  } // i
1214 
1215  // print out un-matched MC tracks
1216  if (fPrintLevel > 0) {
1217  for (unsigned int imc = 0; imc < selected_mctracks.size(); ++imc) {
1218  if (selected_mctracks[imc].second >= 0) continue;
1219  const sim::MCTrack& mctrk = *selected_mctracks[imc].first;
1220  const simb::MCParticle* ptkl = pi_serv->TrackIdToParticle_P(mctrk.TrackID());
1221  float KE = ptkl->E() - ptkl->Mass();
1222  std::string KEUnits = " GeV";
1223  if (mctrk.Origin() != simb::kCosmicRay) {
1224  // MeV for low energy particles
1225  KE *= 1000;
1226  KEUnits = " MeV";
1227  }
1228  // find the start/end wire:time in each plane
1229  geo::Point_t mcstart, mcend;
1230  TVector3 mcstartmom, mcendmom;
1231  double mcdx = mctrk.Start().T() * 1.e-3 * detProp.DriftVelocity(); // cm
1232  double plen = length(detProp, mctrk, mcdx, mcstart, mcend, mcstartmom, mcendmom);
1233  mf::LogVerbatim("TrackAna")
1234  << evt.run() << "." << evt.event() << " NoMat MCTkID " << std::setw(6) << mctrk.TrackID()
1235  << " Origin " << mctrk.Origin() << " PDG" << std::setw(5) << mctrk.PdgCode() << " KE"
1236  << std::setw(4) << (int)KE << KEUnits << " Length " << std::fixed << std::setprecision(1)
1237  << plen << " cm";
1238  if (fPrintLevel > 1) {
1239  // this won't work for DUNE
1240  for (unsigned short ipl = 0; ipl < wireReadoutGeom.Nplanes(); ++ipl) {
1241  geo::PlaneID const& planeID{0, 0, ipl};
1242  auto const& plane = wireReadoutGeom.Plane(planeID);
1243  auto const sWire = plane.NearestWireID(mcstart).Wire;
1244  auto const sTick = detProp.ConvertXToTicks(mcstart.X(), planeID);
1245  auto const eWire = plane.NearestWireID(mcend).Wire;
1246  auto const eTick = detProp.ConvertXToTicks(mcend.X(), planeID);
1247  mf::LogVerbatim("TrackAna") << " Wire:Tick in Pln " << ipl << " W:T " << sWire << ":"
1248  << sTick << " - " << eWire << ":" << eTick;
1249  } // ipl
1250  } // fPrintLevel > 1
1251  } // imc
1252  } // fPrintLevel > 0
1253  }
double E(const int i=0) const
Definition: MCParticle.h:234
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
simb::Origin_t Origin() const
Definition: MCTrack.h:38
double EndMomentum() const
Definition: Track.h:178
double VertexMomentum() const
Definition: Track.h:176
const simb::MCParticle * TrackIdToParticle_P(int id) const
double HitCollectionEfficiency(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits, std::vector< art::Ptr< recob::Hit >> const &allhits, geo::View_t const &view) const
double Mass() const
Definition: MCParticle.h:240
The data type to uniquely identify a Plane.
Definition: geo_types.h:364
bool HasMomentum() const
Definition: Track.h:174
size_t NumberTrajectoryPoints() const
Various functions related to the presence and the number of (valid) points.
Definition: Track.h:136
constexpr auto abs(T v)
Returns the absolute value of the argument.
Vector_t VertexDirection() const
Access to track direction at different points.
Definition: Track.h:166
const SMatrixSym55 & VertexCovariance() const
Access to covariance matrices.
Definition: Track.h:191
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
std::string fStitchModuleLabel
intermediate_table::const_iterator const_iterator
double T() const
Definition: MCStep.h:41
bool isRealData() const
Definition: Event.cc:53
std::map< int, MCHists > fMCHistMap
3-dimensional objects, potentially hits, clusters, prongs, etc.
Definition: geo_types.h:137
Rotation_t GlobalToLocalRotationAtPoint(size_t p) const
Definition: Track.h:230
bool isValid() const noexcept
Definition: Handle.h:203
decltype(auto) constexpr end(T &&obj)
ADL-aware version of std::end.
Definition: StdUtils.h:77
double HitCollectionPurity(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits) const
void anaStitch(const art::Event &evt, detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp)
Point_t const & Vertex() const
Access to track position at different points.
Definition: Track.h:158
const SMatrixSym55 & EndCovariance() const
Access to covariance matrices.
Definition: Track.h:192
std::string fMCTrackModuleLabel
EventNumber_t event() const
Definition: Event.cc:41
PlaneID_t Plane
Index of the plane within its TPC.
Definition: geo_types.h:373
int PdgCode() const
Definition: MCTrack.h:39
const TLorentzVector & Momentum() const
Definition: MCStep.h:34
simb::Origin_t fOriginValue
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:180
int ID() const
Definition: Track.h:244
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
TDirectory * dir
Definition: macro.C:5
MaybeLogger_< ELseverityLevel::ELsev_success, false > LogDebug
Vector_t EndDirection() const
Access to track direction at different points.
Definition: Track.h:167
std::map< int, RecoHists > fRecoHistMap
double E() const
Definition: MCStep.h:45
void swap(lar::deep_const_fwd_iterator_nested< CITER, INNERCONTEXTRACT > &a, lar::deep_const_fwd_iterator_nested< CITER, INNERCONTEXTRACT > &b)
Point_t const & End() const
Access to track position at different points.
Definition: Track.h:159
const MCStep & Start() const
Definition: MCTrack.h:42
std::string fTrackModuleLabel
unsigned int TrackID() const
Definition: MCTrack.h:40
Float_t e
Definition: plot.C:35
RunNumber_t run() const
Definition: Event.cc:29
second_as<> second
Type of time stored in seconds, in double precision.
Definition: spacetime.h:82
Float_t track
Definition: plot.C:35
Float_t w
Definition: plot.C:20
std::string fHitModuleLabel
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track:
Definition: Track.h:49
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
Cosmic rays.
Definition: MCTruth.h:24
void trkf::TrackAna::anaStitch ( const art::Event evt,
detinfo::DetectorClocksData const &  clockData,
detinfo::DetectorPropertiesData const &  detProp 
)
private

Definition at line 1255 of file TrackAna_module.cc.

References util::abs(), detinfo::DetectorPropertiesData::DriftVelocity(), simb::MCParticle::E(), trkf::TrackAna::RecoHists::fHHitChg, trkf::TrackAna::RecoHists::fHHitPdg, trkf::TrackAna::RecoHists::fHHitTrkId, trkf::TrackAna::RecoHists::fHHitWidth, fHitSpptAssocModuleLabel, trkf::TrackAna::RecoHists::fModeFrac, trkf::TrackAna::RecoHists::fNTrkIdTrks, trkf::TrackAna::RecoHists::fNTrkIdTrks2, trkf::TrackAna::RecoHists::fNTrkIdTrks3, fRecoHistMap, fsort_indexes(), fSpacepointModuleLabel, fStitchModuleLabel, fTrackModuleLabel, fTrkSpptAssocModuleLabel, art::ProductRetriever::getByLabel(), cheat::BackTrackerService::HitToTrackIDEs(), art::Event::isRealData(), art::Handle< T >::isValid(), geo::kCollection, simb::MCParticle::Mass(), n, sim::NoParticleId, simb::MCParticle::PdgCode(), art::PtrVector< T >::size(), util::size(), sum, simb::MCParticle::T(), cheat::ParticleInventoryService::TrackIdToParticle_P(), and x.

Referenced by analyze().

1258  {
1261 
1262  std::map<int, std::map<int, art::PtrVector<recob::Hit>>> hitmap; // trkID, otrk, hitvec
1263  std::map<int, int> KEmap; // length traveled in det [cm]?, trkID want to sort by KE
1264  bool mc = !evt.isRealData();
1268 
1269  evt.getByLabel(fTrackModuleLabel, trackh);
1270  evt.getByLabel(fSpacepointModuleLabel, sppth);
1271  evt.getByLabel(fStitchModuleLabel, trackvh);
1272  int ntv(trackvh->size());
1273 
1274  std::vector<art::PtrVector<recob::Track>>::const_iterator cti = trackvh->begin();
1275 
1276  if (trackh.isValid()) {
1278  int nsppts_assnwhole = fswhole.size();
1279  std::cout << "TrackAna: Number of clumps of Spacepoints from Assn for all Tracks: "
1280  << nsppts_assnwhole << std::endl;
1281  }
1282 
1283  if (fRecoHistMap.count(0) == 0) {
1284  fRecoHistMap.emplace(0, RecoHists{"Reco"});
1285  std::cout << "\n"
1286  << "\t\t TrkAna: Fresh fRecoHistMap[0] ******* \n"
1287  << std::endl;
1288  }
1289  const RecoHists& rhistsStitched = fRecoHistMap.at(0);
1290 
1291  std::vector<std::vector<unsigned int>> NtrkIdsAll;
1292  std::vector<double> ntvsorted;
1293  hitmap.clear();
1294  KEmap.clear();
1295 
1296  // Look at the components of the stitched tracks. Grab their sppts/hits from Assns.
1297  for (int o = 0; o < ntv; ++o) // o for outer
1298  {
1299  const art::PtrVector<recob::Track> pvtrack(*(cti++));
1300  int ntrack = pvtrack.size();
1301  std::vector<std::vector<unsigned int>> NtrkId_Hit; // hit IDs in inner tracks
1302  std::vector<unsigned int> vecMode;
1304 
1305  for (int i = 0; i < ntrack; ++i) {
1306 
1307  // From gdb> ptype fs, the vector of Ptr<SpacePoint>s it appears is
1308  // grabbed after fs.at(0)
1309  bool assns(true);
1310  try {
1311  // Got Spacepoints from this Track; now get Hits from those
1312  // Spacepoints.
1313 
1314  int nsppts_assn = fs.at(i).size();
1315 
1316  const auto& sppt = fs.at(i); //.at(0);
1317  // since we're in a try and worried about failure, we won't pull the following
1318  // FindManyP out of the loop.
1320 
1321  // Importantly, loop on all sppts, though they don't all contribute to the track.
1322  // As opposed to looping on the trajectory pts, which is a lower number.
1323  // Also, important, in job in whch this runs I set TrackKal3DSPS parameter MaxPass=1,
1324  // cuz I don't want merely the sparse set of sppts as follows from the uncontained
1325  // MS-measurement in 2nd pass.
1326  std::vector<unsigned int> vecNtrkIds;
1327  for (int is = 0; is < nsppts_assn; ++is) {
1328  int nhits = fh.at(is).size(); // should be 2 or 3: number of planes.
1329  for (int ih = 0; ih < nhits; ++ih) {
1330  const auto& hit = fh.at(is).at(ih); // Our vector is after the .at(is) this time.
1331  if (hit->SignalType() != geo::kCollection) continue;
1332  rhistsStitched.fHHitChg->Fill(hit->Integral());
1333  rhistsStitched.fHHitWidth->Fill(2. * hit->RMS());
1334  if (mc) {
1335  std::vector<sim::TrackIDE> tids = bt_serv->HitToTrackIDEs(clockData, hit);
1336  // more here.
1337  // Loop over track ids.
1338  bool justOne(true); // Only take first trk that contributed to this hit
1339  for (std::vector<sim::TrackIDE>::const_iterator itid = tids.begin();
1340  itid != tids.end();
1341  ++itid) {
1342  int trackID = std::abs(itid->trackID);
1343  hitmap[trackID][o].push_back(hit);
1344 
1345  if (justOne) {
1346  vecNtrkIds.push_back(trackID);
1347  justOne = false;
1348  }
1349  // Add hit to PtrVector corresponding to this track id.
1350  rhistsStitched.fHHitTrkId->Fill(trackID);
1351  const simb::MCParticle* part = pi_serv->TrackIdToParticle_P(trackID);
1352  if (!part) break;
1353 
1354  rhistsStitched.fHHitPdg->Fill(part->PdgCode());
1355  // This really needs to be indexed as KE deposited in volTPC, not just KE. EC, 24-July-2014.
1356 
1357  geo::Point_t mcstart;
1358  geo::Point_t mcend;
1359  TVector3 mcstartmom;
1360  TVector3 mcendmom;
1361  double mctime = part->T(); // nsec
1362  double mcdx = mctime * 1.e-3 * detProp.DriftVelocity(); // cm
1363 
1364  double plen = length(detProp, *part, mcdx, mcstart, mcend, mcstartmom, mcendmom);
1365 
1366  KEmap[(int)(1e6 * plen)] = trackID; // multiple assignment but always the same, so
1367  // fine.
1368  }
1369 
1370  } // mc
1371  } // hits
1372 
1373  } // spacepoints
1374 
1375  if (mc) {
1376  NtrkId_Hit.push_back(vecNtrkIds);
1377  // Find the trkID mode for this i^th track
1378  unsigned int ii(1);
1379  int max(-12), n(1), ind(0);
1380  std::sort(vecNtrkIds.begin(), vecNtrkIds.end());
1381  std::vector<unsigned int> strkIds(vecNtrkIds);
1382  while (ii < vecNtrkIds.size()) {
1383  if (strkIds.at(ii) != strkIds.at(ii - 1)) { n = 1; }
1384  else {
1385  n++;
1386  }
1387  if (n > max) {
1388  max = n;
1389  ind = ii;
1390  }
1391  ii++;
1392  }
1393  unsigned int mode(sim::NoParticleId);
1394  if (strkIds.begin() != strkIds.end()) mode = strkIds.at(ind);
1395  vecMode.push_back(mode);
1396 
1397  if (strkIds.size() != 0)
1398  rhistsStitched.fModeFrac->Fill((double)max / (double)strkIds.size());
1399  else
1400  rhistsStitched.fModeFrac->Fill(-1.0);
1401  } // mc
1402 
1403  } // end try
1404  catch (cet::exception& x) {
1405  assns = false;
1406  }
1407  if (!assns) throw cet::exception("TrackAna") << "Bad Associations. \n";
1408 
1409  } // i
1410 
1411  if (mc) {
1412  // one vector per o trk, for all modes of stitched i trks
1413  auto& back = NtrkIdsAll.emplace_back(vecMode);
1414 
1415  auto const last = std::unique(back.begin(), back.end());
1416  back.erase(last, back.end());
1417  double sum(0.0);
1418  for (auto const val : back) {
1419  sum += hitmap[val][o].size();
1420  }
1421  ntvsorted.push_back(sum);
1422  }
1423 
1424  //
1425  } // o
1426 
1427  int vtmp(0);
1428  // get KEmap indices by most energetic first, least last.
1429  for (auto it = KEmap.rbegin(); it != KEmap.rend(); ++it) {
1430  vtmp++;
1431  }
1432 
1433  // get o trk indices by their hits. Most populous track first, least last.
1434  for (auto const o : fsort_indexes(ntvsorted)) {
1435  int v(0);
1436  // get KEmap indices by longest trajectory first, least last.
1437  for (auto it = KEmap.rbegin(); it != KEmap.rend(); ++it) {
1438  int val = it->second; // grab trkIDs in order, since they're sorted by KE
1439  rhistsStitched.fNTrkIdTrks3->Fill(o, v, hitmap[val][o].size());
1440  v++;
1441  }
1442  }
1443 
1444  // In how many o tracks did each trkId appear? Histo it. Would like it to be
1445  // precisely 1. Histo it vs. particle KE.
1446  flattener flat(NtrkIdsAll);
1447  std::vector<unsigned int>& v = flat;
1448  // auto const it ( std::unique(v.begin(),v.end()) ); // never use this it,
1449  // perhaps.
1450  for (auto const val : v) {
1451  if (val != (unsigned int)sim::NoParticleId) {
1452  const simb::MCParticle* part = pi_serv->TrackIdToParticle_P(val);
1453  double T(part->E() - 0.001 * part->Mass());
1454  rhistsStitched.fNTrkIdTrks->Fill(std::count(v.begin(), v.end(), val));
1455  rhistsStitched.fNTrkIdTrks2->Fill(std::count(v.begin(), v.end(), val), T);
1456  }
1457  else {
1458  rhistsStitched.fNTrkIdTrks2->Fill(-1.0, 0.0);
1459  }
1460  }
1461  }
Float_t x
Definition: compare.C:6
double E(const int i=0) const
Definition: MCParticle.h:234
int PdgCode() const
Definition: MCParticle.h:213
std::vector< sim::TrackIDE > HitToTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
std::string fHitSpptAssocModuleLabel
std::string fTrkSpptAssocModuleLabel
const simb::MCParticle * TrackIdToParticle_P(int id) const
std::string fSpacepointModuleLabel
double Mass() const
Definition: MCParticle.h:240
constexpr auto abs(T v)
Returns the absolute value of the argument.
std::string fStitchModuleLabel
intermediate_table::const_iterator const_iterator
bool isRealData() const
Definition: Event.cc:53
bool isValid() const noexcept
Definition: Handle.h:203
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:101
TString part[npart]
Definition: Style.C:32
std::vector< size_t > fsort_indexes(const std::vector< double > &v)
static const int NoParticleId
Definition: sim.h:21
double T(const int i=0) const
Definition: MCParticle.h:225
Detector simulation of raw signals on wires.
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:180
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
std::map< int, RecoHists > fRecoHistMap
Char_t n[5]
std::string fTrackModuleLabel
Double_t sum
Definition: plot.C:31
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
Signal from collection planes.
Definition: geo_types.h:148
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::consumes ( InputTag const &  tag)
protectedinherited

Definition at line 61 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumes().

62  {
63  return collector_.consumes<T, BT>(tag);
64  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ProductToken< T > consumes(InputTag const &)
ConsumesCollector & art::ModuleBase::consumesCollector ( )
protectedinherited

Definition at line 57 of file ModuleBase.cc.

References art::ModuleBase::collector_.

58  {
59  return collector_;
60  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::consumesMany ( )
protectedinherited

Definition at line 75 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesMany().

76  {
77  collector_.consumesMany<T, BT>();
78  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::consumesView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::consumesView ( InputTag const &  tag)
inherited

Definition at line 68 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesView().

69  {
70  return collector_.consumesView<T, BT>(tag);
71  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > consumesView(InputTag const &)
void art::detail::Analyzer::doBeginJob ( SharedResources const &  resources)
inherited

Definition at line 25 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

26  {
27  setupQueues(resources);
28  ProcessingFrame const frame{ScheduleID{}};
29  beginJobWithFrame(frame);
30  }
virtual void beginJobWithFrame(ProcessingFrame const &)=0
virtual void setupQueues(SharedResources const &)=0
bool art::detail::Analyzer::doBeginRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 68 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

69  {
70  ProcessingFrame const frame{mc.scheduleID()};
71  beginRunWithFrame(std::as_const(rp).makeRun(mc), frame);
72  return true;
73  }
virtual void beginRunWithFrame(Run const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doBeginSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 84 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

85  {
86  ProcessingFrame const frame{mc.scheduleID()};
87  beginSubRunWithFrame(std::as_const(srp).makeSubRun(mc), frame);
88  return true;
89  }
virtual void beginSubRunWithFrame(SubRun const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doEndJob ( )
inherited

Definition at line 33 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

34  {
35  ProcessingFrame const frame{ScheduleID{}};
36  endJobWithFrame(frame);
37  }
virtual void endJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Analyzer::doEndRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 76 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

77  {
78  ProcessingFrame const frame{mc.scheduleID()};
79  endRunWithFrame(std::as_const(rp).makeRun(mc), frame);
80  return true;
81  }
virtual void endRunWithFrame(Run const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doEndSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 92 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

93  {
94  ProcessingFrame const frame{mc.scheduleID()};
95  endSubRunWithFrame(std::as_const(srp).makeSubRun(mc), frame);
96  return true;
97  }
virtual void endSubRunWithFrame(SubRun const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doEvent ( EventPrincipal ep,
ModuleContext const &  mc,
std::atomic< std::size_t > &  counts_run,
std::atomic< std::size_t > &  counts_passed,
std::atomic< std::size_t > &  counts_failed 
)
inherited

Definition at line 100 of file Analyzer.cc.

References e, and art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

105  {
106  auto const e = std::as_const(ep).makeEvent(mc);
107  if (wantEvent(mc.scheduleID(), e)) {
108  ++counts_run;
109  ProcessingFrame const frame{mc.scheduleID()};
110  analyzeWithFrame(e, frame);
111  ++counts_passed;
112  }
113  return true;
114  }
bool wantEvent(ScheduleID id, Event const &e) const
Definition: Observer.cc:63
Float_t e
Definition: plot.C:35
virtual void analyzeWithFrame(Event const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToCloseInputFile ( FileBlock const &  fb)
inherited

Definition at line 47 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

48  {
49  ProcessingFrame const frame{ScheduleID{}};
51  }
TFile fb("Li6.root")
virtual void respondToCloseInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToCloseOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 61 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

62  {
63  ProcessingFrame const frame{ScheduleID{}};
65  }
virtual void respondToCloseOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Analyzer::doRespondToOpenInputFile ( FileBlock const &  fb)
inherited

Definition at line 40 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

41  {
42  ProcessingFrame const frame{ScheduleID{}};
44  }
TFile fb("Li6.root")
virtual void respondToOpenInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToOpenOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 54 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

55  {
56  ProcessingFrame const frame{ScheduleID{}};
58  }
virtual void respondToOpenOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void trkf::TrackAna::endJob ( )
overrideprivatevirtual

Reimplemented from art::EDAnalyzer.

Definition at line 1463 of file TrackAna_module.cc.

References trkf::TrackAna::MCHists::fHeendx, trkf::TrackAna::MCHists::fHeendy, trkf::TrackAna::MCHists::fHeendz, trkf::TrackAna::MCHists::fHeke, trkf::TrackAna::MCHists::fHekel, trkf::TrackAna::MCHists::fHelen, trkf::TrackAna::MCHists::fHelens, trkf::TrackAna::MCHists::fHemom, trkf::TrackAna::MCHists::fHemoml, trkf::TrackAna::MCHists::fHephi, trkf::TrackAna::MCHists::fHestartx, trkf::TrackAna::MCHists::fHestarty, trkf::TrackAna::MCHists::fHestartz, trkf::TrackAna::MCHists::fHetheta, trkf::TrackAna::MCHists::fHetheta_xz, trkf::TrackAna::MCHists::fHetheta_yz, trkf::TrackAna::MCHists::fHgendx, trkf::TrackAna::MCHists::fHgendy, trkf::TrackAna::MCHists::fHgendz, trkf::TrackAna::MCHists::fHgke, trkf::TrackAna::MCHists::fHgkel, trkf::TrackAna::MCHists::fHglen, trkf::TrackAna::MCHists::fHglens, trkf::TrackAna::MCHists::fHgmom, trkf::TrackAna::MCHists::fHgmoml, trkf::TrackAna::MCHists::fHgphi, trkf::TrackAna::MCHists::fHgstartx, trkf::TrackAna::MCHists::fHgstarty, trkf::TrackAna::MCHists::fHgstartz, trkf::TrackAna::MCHists::fHgtheta, trkf::TrackAna::MCHists::fHgtheta_xz, trkf::TrackAna::MCHists::fHgtheta_yz, trkf::TrackAna::MCHists::fHmcendx, trkf::TrackAna::MCHists::fHmcendy, trkf::TrackAna::MCHists::fHmcendz, trkf::TrackAna::MCHists::fHmcke, trkf::TrackAna::MCHists::fHmckel, trkf::TrackAna::MCHists::fHmclen, trkf::TrackAna::MCHists::fHmclens, trkf::TrackAna::MCHists::fHmcmom, trkf::TrackAna::MCHists::fHmcmoml, trkf::TrackAna::MCHists::fHmcphi, trkf::TrackAna::MCHists::fHmcstartx, trkf::TrackAna::MCHists::fHmcstarty, trkf::TrackAna::MCHists::fHmcstartz, trkf::TrackAna::MCHists::fHmctheta, trkf::TrackAna::MCHists::fHmctheta_xz, trkf::TrackAna::MCHists::fHmctheta_yz, fMCHistMap, and fNumEvent.

1464  {
1465  // Print summary.
1466 
1467  mf::LogInfo("TrackAna") << "TrackAna statistics:\n"
1468  << " Number of events = " << fNumEvent;
1469 
1470  // Fill efficiency histograms.
1471 
1472  for (std::map<int, MCHists>::const_iterator i = fMCHistMap.begin(); i != fMCHistMap.end();
1473  ++i) {
1474  const MCHists& mchists = i->second;
1475  effcalc(mchists.fHgstartx, mchists.fHmcstartx, mchists.fHestartx);
1476  effcalc(mchists.fHgstarty, mchists.fHmcstarty, mchists.fHestarty);
1477  effcalc(mchists.fHgstartz, mchists.fHmcstartz, mchists.fHestartz);
1478  effcalc(mchists.fHgendx, mchists.fHmcendx, mchists.fHeendx);
1479  effcalc(mchists.fHgendy, mchists.fHmcendy, mchists.fHeendy);
1480  effcalc(mchists.fHgendz, mchists.fHmcendz, mchists.fHeendz);
1481  effcalc(mchists.fHgtheta, mchists.fHmctheta, mchists.fHetheta);
1482  effcalc(mchists.fHgphi, mchists.fHmcphi, mchists.fHephi);
1483  effcalc(mchists.fHgtheta_xz, mchists.fHmctheta_xz, mchists.fHetheta_xz);
1484  effcalc(mchists.fHgtheta_yz, mchists.fHmctheta_yz, mchists.fHetheta_yz);
1485  effcalc(mchists.fHgmom, mchists.fHmcmom, mchists.fHemom);
1486  effcalc(mchists.fHgmoml, mchists.fHmcmoml, mchists.fHemoml);
1487  effcalc(mchists.fHgke, mchists.fHmcke, mchists.fHeke);
1488  effcalc(mchists.fHgkel, mchists.fHmckel, mchists.fHekel);
1489  effcalc(mchists.fHglen, mchists.fHmclen, mchists.fHelen);
1490  effcalc(mchists.fHglens, mchists.fHmclens, mchists.fHelens);
1491  }
1492  }
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
intermediate_table::const_iterator const_iterator
std::map< int, MCHists > fMCHistMap
std::vector< size_t > trkf::TrackAna::fsort_indexes ( const std::vector< double > &  v)
private

Definition at line 1495 of file TrackAna_module.cc.

Referenced by anaStitch().

1496  {
1497  // initialize original index locations
1498  std::vector<size_t> idx(v.size());
1499  for (size_t i = 0; i != idx.size(); ++i)
1500  idx[i] = i;
1501  // sort indexes based on comparing values in v
1502  std::sort(idx.begin(), idx.end(), [&v](size_t i1, size_t i2) {
1503  return v[i1] > v[i2];
1504  }); // Want most occupied trks first. was <, EC, 21-July.
1505  return idx;
1506  }
std::array< std::vector< ProductInfo >, NumBranchTypes > const & art::ModuleBase::getConsumables ( ) const
inherited

Definition at line 43 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::getConsumables().

44  {
45  return collector_.getConsumables();
46  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables() const
Handle< TriggerResults > art::Observer::getTriggerResults ( Event const &  e) const
protectedinherited

Definition at line 75 of file Observer.cc.

References art::ProductRetriever::get(), and art::Observer::selectors_.

Referenced by art::OutputModule::doWriteEvent(), and art::Observer::wantAllEvents().

76  {
77  if (selectors_) {
78  return selectors_->getOneTriggerResults(e);
79  }
80 
81  // The following applies for cases where no SelectEvents entries
82  // exist.
83  Handle<TriggerResults> h;
84  if (e.get(empty_process_name, h)) {
85  return h;
86  }
87  return Handle<TriggerResults>{};
88  }
Float_t e
Definition: plot.C:35
std::optional< detail::ProcessAndEventSelectors > selectors_
Definition: Observer.h:79
std::unique_ptr< Worker > art::ModuleBase::makeWorker ( WorkerParams const &  wp)
inherited

Definition at line 37 of file ModuleBase.cc.

References art::ModuleBase::doMakeWorker(), and art::NumBranchTypes.

38  {
39  return doMakeWorker(wp);
40  }
virtual std::unique_ptr< Worker > doMakeWorker(WorkerParams const &wp)=0
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::mayConsume ( InputTag const &  tag)
protectedinherited

Definition at line 82 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsume().

83  {
84  return collector_.mayConsume<T, BT>(tag);
85  }
ProductToken< T > mayConsume(InputTag const &)
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::mayConsumeMany ( )
protectedinherited

Definition at line 96 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeMany().

97  {
98  collector_.mayConsumeMany<T, BT>();
99  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::mayConsumeView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::mayConsumeView ( InputTag const &  tag)
inherited

Definition at line 89 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeView().

90  {
91  return collector_.mayConsumeView<T, BT>(tag);
92  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > mayConsumeView(InputTag const &)
ModuleDescription const & art::ModuleBase::moduleDescription ( ) const
inherited

Definition at line 13 of file ModuleBase.cc.

References art::errors::LogicError.

Referenced by art::OutputModule::doRespondToOpenInputFile(), art::OutputModule::doWriteEvent(), art::Modifier::fillProductDescriptions(), art::OutputModule::makePlugins_(), art::OutputWorker::OutputWorker(), reco::shower::LArPandoraModularShowerCreation::produce(), art::Modifier::registerProducts(), and art::OutputModule::registerProducts().

14  {
15  if (md_.has_value()) {
16  return *md_;
17  }
18 
20  "There was an error while calling moduleDescription().\n"}
21  << "The moduleDescription() base-class member function cannot be called\n"
22  "during module construction. To determine which module is "
23  "responsible\n"
24  "for calling it, find the '<module type>:<module "
25  "label>@Construction'\n"
26  "tag in the message prefix above. Please contact artists@fnal.gov\n"
27  "for guidance.\n";
28  }
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
string const & art::Observer::processName ( ) const
protectedinherited

Definition at line 57 of file Observer.cc.

References art::Observer::process_name_.

Referenced by art::FileDumperOutput::printPrincipal().

58  {
59  return process_name_;
60  }
std::string process_name_
Definition: Observer.h:76
void art::ModuleBase::setModuleDescription ( ModuleDescription const &  md)
inherited

Definition at line 31 of file ModuleBase.cc.

References art::ModuleBase::md_.

32  {
33  md_ = md;
34  }
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
void art::ModuleBase::sortConsumables ( std::string const &  current_process_name)
inherited

Definition at line 49 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::sortConsumables().

50  {
51  // Now that we know we have seen all the consumes declarations,
52  // sort the results for fast lookup later.
53  collector_.sortConsumables(current_process_name);
54  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
void sortConsumables(std::string const &current_process_name)
bool art::Observer::wantAllEvents ( ) const
inlineprotectednoexceptinherited

Definition at line 31 of file Observer.h.

References e, art::Observer::getTriggerResults(), art::Observer::wantAllEvents_, and art::Observer::wantEvent().

32  {
33  return wantAllEvents_;
34  }
bool wantAllEvents_
Definition: Observer.h:75
bool art::Observer::wantEvent ( ScheduleID  id,
Event const &  e 
) const
protectedinherited

Definition at line 63 of file Observer.cc.

References art::Observer::rejectors_, art::Observer::selectors_, and art::Observer::wantAllEvents_.

Referenced by art::OutputModule::doEvent(), art::OutputModule::doWriteEvent(), and art::Observer::wantAllEvents().

64  {
65  if (wantAllEvents_) {
66  return true;
67  }
68  bool const select_event = selectors_ ? selectors_->matchEvent(id, e) : true;
69  bool const reject_event =
70  rejectors_ ? rejectors_->matchEvent(id, e) : false;
71  return select_event and not reject_event;
72  }
bool wantAllEvents_
Definition: Observer.h:75
std::optional< detail::ProcessAndEventSelectors > rejectors_
Definition: Observer.h:80
Float_t e
Definition: plot.C:35
std::optional< detail::ProcessAndEventSelectors > selectors_
Definition: Observer.h:79

Member Data Documentation

bool trkf::TrackAna::fCheckOrigin
private

Definition at line 422 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

int trkf::TrackAna::fDump
private

Definition at line 411 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

std::string trkf::TrackAna::fHitModuleLabel
private

Definition at line 409 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

std::string trkf::TrackAna::fHitSpptAssocModuleLabel
private

Definition at line 408 of file TrackAna_module.cc.

Referenced by anaStitch(), and TrackAna().

bool trkf::TrackAna::fIgnoreSign
private

Definition at line 418 of file TrackAna_module.cc.

Referenced by analyze().

double trkf::TrackAna::fMatchColinearity
private

Definition at line 414 of file TrackAna_module.cc.

Referenced by analyze().

double trkf::TrackAna::fMatchDisp
private

Definition at line 415 of file TrackAna_module.cc.

Referenced by analyze().

double trkf::TrackAna::fMatchLength
private

Definition at line 417 of file TrackAna_module.cc.

Referenced by analyze().

std::map<int, MCHists> trkf::TrackAna::fMCHistMap
private

Definition at line 428 of file TrackAna_module.cc.

Referenced by analyze(), and endJob().

std::string trkf::TrackAna::fMCTrackModuleLabel
private

Definition at line 404 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

double trkf::TrackAna::fMinMCKE
private

Definition at line 412 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

double trkf::TrackAna::fMinMCLen
private

Definition at line 413 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

int trkf::TrackAna::fNumEvent
private

Definition at line 433 of file TrackAna_module.cc.

Referenced by analyze(), and endJob().

std::string trkf::TrackAna::fOrigin
private

Definition at line 421 of file TrackAna_module.cc.

Referenced by TrackAna().

simb::Origin_t trkf::TrackAna::fOriginValue
private

Definition at line 423 of file TrackAna_module.cc.

Referenced by analyze(), and TrackAna().

int trkf::TrackAna::fPrintLevel
private

Definition at line 424 of file TrackAna_module.cc.

Referenced by analyze().

std::map<int, RecoHists> trkf::TrackAna::fRecoHistMap
private

Definition at line 429 of file TrackAna_module.cc.

Referenced by analyze(), and anaStitch().

std::string trkf::TrackAna::fSpacepointModuleLabel
private

Definition at line 405 of file TrackAna_module.cc.

Referenced by anaStitch().

bool trkf::TrackAna::fStitchedAnalysis
private

Definition at line 419 of file TrackAna_module.cc.

Referenced by analyze().

std::string trkf::TrackAna::fStitchModuleLabel
private

Definition at line 406 of file TrackAna_module.cc.

Referenced by analyze(), anaStitch(), and TrackAna().

std::string trkf::TrackAna::fTrackModuleLabel
private

Definition at line 403 of file TrackAna_module.cc.

Referenced by analyze(), anaStitch(), and TrackAna().

std::string trkf::TrackAna::fTrkSpptAssocModuleLabel
private

Definition at line 407 of file TrackAna_module.cc.

Referenced by anaStitch(), and TrackAna().

double trkf::TrackAna::fWMatchDisp
private

Definition at line 416 of file TrackAna_module.cc.

Referenced by analyze().


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