Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
lar_pandora::ConsolidatedPFParticleAnalysisTemplate Class Reference

ConsolidatedPFParticleAnalysisTemplate class. More...

Inheritance diagram for lar_pandora::ConsolidatedPFParticleAnalysisTemplate:
art::EDAnalyzer art::detail::Analyzer art::detail::LegacyModule art::Observer art::ModuleBase

Public Types

typedef art::Handle< std::vector< recob::PFParticle > > PFParticleHandle
 
typedef std::map< size_t, art::Ptr< recob::PFParticle > > PFParticleIdMap
 
typedef std::vector< art::Ptr< recob::PFParticle > > PFParticleVector
 
typedef std::vector< art::Ptr< recob::Track > > TrackVector
 
typedef std::vector< art::Ptr< recob::Shower > > ShowerVector
 
- Public Types inherited from art::EDAnalyzer
using WorkerType = WorkerT< EDAnalyzer >
 
using ModuleType = EDAnalyzer
 

Public Member Functions

 ConsolidatedPFParticleAnalysisTemplate (fhicl::ParameterSet const &pset)
 Constructor. More...
 
void reconfigure (fhicl::ParameterSet const &pset)
 Configure memeber variables using FHiCL parameters. More...
 
void analyze (const art::Event &evt)
 Analyze an event! More...
 
- Public Member Functions inherited from art::EDAnalyzer
 EDAnalyzer (fhicl::ParameterSet const &pset)
 
template<typename Config >
 EDAnalyzer (Table< Config > const &config)
 
std::string workerType () const
 
- Public Member Functions inherited from art::detail::Analyzer
virtual ~Analyzer () noexcept
 
 Analyzer (fhicl::ParameterSet const &pset)
 
template<typename Config >
 Analyzer (Table< Config > const &config)
 
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)
 
- Public Member Functions inherited from art::Observer
 ~Observer () noexcept
 
 Observer (Observer const &)=delete
 
 Observer (Observer &&)=delete
 
Observeroperator= (Observer const &)=delete
 
Observeroperator= (Observer &&)=delete
 
void registerProducts (ProductDescriptions &, ModuleDescription const &)
 
void fillDescriptions (ModuleDescription const &)
 
fhicl::ParameterSetID selectorConfig () const
 
- Public Member Functions inherited from art::ModuleBase
virtual ~ModuleBase () noexcept
 
 ModuleBase ()
 
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)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Private Member Functions

void GetPFParticleIdMap (const PFParticleHandle &pfParticleHandle, PFParticleIdMap &pfParticleMap)
 Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation. More...
 
void PrintOutScores (const art::Event &evt, const PFParticleHandle &pfParticleHandle) const
 Print out scores in PFParticleMetadata. More...
 
void GetFinalStatePFParticleVectors (const PFParticleIdMap &pfParticleMap, PFParticleVector &crParticles, PFParticleVector &nuParticles)
 Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation. More...
 
void CollectTracksAndShowers (const PFParticleVector &particles, const PFParticleHandle &pfParticleHandle, const art::Event &evt, TrackVector &tracks, ShowerVector &showers)
 Collect associated tracks and showers to particles in an input particle vector. More...
 

Private Attributes

std::string m_pandoraLabel
 The label for the pandora producer. More...
 
std::string m_trackLabel
 The label for the track producer from PFParticles. More...
 
std::string m_showerLabel
 The label for the shower producer from PFParticles. More...
 
bool m_printOutScores
 Option to investigate the associations to scores for PFParticles. More...
 

Additional Inherited Members

- Protected Member Functions inherited from art::Observer
std::string const & processName () const
 
bool wantAllEvents () const noexcept
 
bool wantEvent (ScheduleID id, Event const &e) const
 
Handle< TriggerResultsgetTriggerResults (Event const &e) const
 
 Observer (fhicl::ParameterSet const &config)
 
 Observer (std::vector< std::string > const &select_paths, std::vector< std::string > const &reject_paths, fhicl::ParameterSet const &config)
 
- Protected Member Functions inherited from art::ModuleBase
ConsumesCollectorconsumesCollector ()
 
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 ()
 

Detailed Description

ConsolidatedPFParticleAnalysisTemplate class.

Definition at line 24 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

Member Typedef Documentation

Constructor & Destructor Documentation

lar_pandora::ConsolidatedPFParticleAnalysisTemplate::ConsolidatedPFParticleAnalysisTemplate ( fhicl::ParameterSet const &  pset)

Constructor.

Parameters
psetthe set of input fhicl parameters

Definition at line 122 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

122  : art::EDAnalyzer(pset)
123 {
124  this->reconfigure(pset);
125 }
void reconfigure(fhicl::ParameterSet const &pset)
Configure memeber variables using FHiCL parameters.

Member Function Documentation

void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::analyze ( const art::Event evt)

Analyze an event!

Parameters
evtthe art event to analyze

Investigate scores associated as larpandoraobject::metadata for the PFParticles

Definition at line 139 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

140 {
141  // Collect the PFParticles from the event
142  PFParticleHandle pfParticleHandle;
143  evt.getByLabel(m_pandoraLabel, pfParticleHandle);
144 
145  if (!pfParticleHandle.isValid())
146  {
147  mf::LogDebug("ConsolidatedPFParticleAnalysisTemplate") << " Failed to find the PFParticles." << std::endl;
148  return;
149  }
150 
151  // Produce a map of the PFParticle IDs for fast navigation through the hierarchy
152  PFParticleIdMap pfParticleMap;
153  this->GetPFParticleIdMap(pfParticleHandle, pfParticleMap);
154 
155  /// Investigate scores associated as larpandoraobject::metadata for the PFParticles
156  if (m_printOutScores)
157  this->PrintOutScores(evt, pfParticleHandle);
158 
159  // Produce two PFParticle vectors containing final-state particles:
160  // 1. Particles identified as cosmic-rays - recontructed under cosmic-hypothesis
161  // 2. Daughters of the neutrino PFParticle - reconstructed under the neutrino hypothesis
162  std::vector< art::Ptr<recob::PFParticle> > crParticles;
163  std::vector< art::Ptr<recob::PFParticle> > nuParticles;
164  this->GetFinalStatePFParticleVectors(pfParticleMap, crParticles, nuParticles);
165 
166  // Use as required!
167  // -----------------------------
168  // What follows is an example showing how one might access the reconstructed neutrino final-state tracks and showers
169 
170  // These are the vectors to hold the tracks and showers for the final-states of the reconstructed neutrino
171  std::vector< art::Ptr<recob::Track> > tracks;
172  std::vector< art::Ptr<recob::Shower> > showers;
173  this->CollectTracksAndShowers(nuParticles, pfParticleHandle, evt, tracks, showers);
174 
175  // Print a summary of the consolidated event
176  std::cout << "Consolidated event summary:" << std::endl;
177  std::cout << " - Number of primary cosmic-ray PFParticles : " << crParticles.size() << std::endl;
178  std::cout << " - Number of neutrino final-state PFParticles : " << nuParticles.size() << std::endl;
179  std::cout << " ... of which are track-like : " << tracks.size() << std::endl;
180  std::cout << " ... of which are showers-like : " << showers.size() << std::endl;
181 }
void CollectTracksAndShowers(const PFParticleVector &particles, const PFParticleHandle &pfParticleHandle, const art::Event &evt, TrackVector &tracks, ShowerVector &showers)
Collect associated tracks and showers to particles in an input particle vector.
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
Definition: DataViewImpl.h:633
bool m_printOutScores
Option to investigate the associations to scores for PFParticles.
void PrintOutScores(const art::Event &evt, const PFParticleHandle &pfParticleHandle) const
Print out scores in PFParticleMetadata.
MaybeLogger_< ELseverityLevel::ELsev_success, false > LogDebug
void GetFinalStatePFParticleVectors(const PFParticleIdMap &pfParticleMap, PFParticleVector &crParticles, PFParticleVector &nuParticles)
Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation...
void GetPFParticleIdMap(const PFParticleHandle &pfParticleHandle, PFParticleIdMap &pfParticleMap)
Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation...
QTextStream & endl(QTextStream &s)
void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::CollectTracksAndShowers ( const PFParticleVector particles,
const PFParticleHandle pfParticleHandle,
const art::Event evt,
TrackVector tracks,
ShowerVector showers 
)
private

Collect associated tracks and showers to particles in an input particle vector.

Parameters
particlesa vector holding PFParticles from which to find the associated tracks and showers
pfParticleHandlethe handle for the PFParticle collection
evtthe art event to analyze
tracksa vector to hold the associated tracks
showersa vector to hold the associated showers

Definition at line 265 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

266 {
267  // Get the associations between PFParticles and tracks/showers from the event
268  art::FindManyP< recob::Track > pfPartToTrackAssoc(pfParticleHandle, evt, m_trackLabel);
269  art::FindManyP< recob::Shower > pfPartToShowerAssoc(pfParticleHandle, evt, m_showerLabel);
270 
271  for (const art::Ptr<recob::PFParticle> &pParticle : particles)
272  {
273  const std::vector< art::Ptr<recob::Track> > associatedTracks(pfPartToTrackAssoc.at(pParticle.key()));
274  const std::vector< art::Ptr<recob::Shower> > associatedShowers(pfPartToShowerAssoc.at(pParticle.key()));
275  const unsigned int nTracks(associatedTracks.size());
276  const unsigned int nShowers(associatedShowers.size());
277 
278  // Check if the PFParticle has no associated tracks or showers
279  if (nTracks == 0 && nShowers == 0)
280  {
281  mf::LogDebug("ConsolidatedPFParticleAnalysisTemplate") << " No tracks or showers were associated to PFParticle " << pParticle->Self() << std::endl;
282  continue;
283  }
284 
285  // Check if there is an associated track
286  if (nTracks == 1 && nShowers == 0)
287  {
288  tracks.push_back(associatedTracks.front());
289  continue;
290  }
291 
292  // Check if there is an associated shower
293  if (nTracks == 0 && nShowers == 1)
294  {
295  showers.push_back(associatedShowers.front());
296  continue;
297  }
298 
299  throw cet::exception("ConsolidatedPFParticleAnalysisTemplate") << " There were " << nTracks << " tracks and " << nShowers << " showers associated with PFParticle " << pParticle->Self();
300  }
301 }
std::string m_showerLabel
The label for the shower producer from PFParticles.
std::string m_trackLabel
The label for the track producer from PFParticles.
Definition: tracks.py:1
MaybeLogger_< ELseverityLevel::ELsev_success, false > LogDebug
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)
void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::GetFinalStatePFParticleVectors ( const PFParticleIdMap pfParticleMap,
PFParticleVector crParticles,
PFParticleVector nuParticles 
)
private

Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation.

Parameters
pfParticleMapthe mapping from ID to PFParticle
crParticlesa vector to hold the top-level PFParticles reconstructed under the cosmic hypothesis
nuParticlesa vector to hold the final-states of the reconstruced neutrino

Definition at line 225 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

226 {
227  for (PFParticleIdMap::const_iterator it = pfParticleMap.begin(); it != pfParticleMap.end(); ++it)
228  {
229  const art::Ptr<recob::PFParticle> pParticle(it->second);
230 
231  // Only look for primary particles
232  if (!pParticle->IsPrimary()) continue;
233 
234  // Check if this particle is identified as the neutrino
235  const int pdg(pParticle->PdgCode());
236  const bool isNeutrino(std::abs(pdg) == pandora::NU_E || std::abs(pdg) == pandora::NU_MU || std::abs(pdg) == pandora::NU_TAU);
237 
238  // All non-neutrino primary particles are reconstructed under the cosmic hypothesis
239  if (!isNeutrino)
240  {
241  crParticles.push_back(pParticle);
242  continue;
243  }
244 
245  // ATTN. We are filling nuParticles under the assumption that there is only one reconstructed neutrino identified per event.
246  // If this is not the case please handle accordingly
247  if (!nuParticles.empty())
248  {
249  throw cet::exception("ConsolidatedPFParticleAnalysisTemplate") << " This event contains multiple reconstructed neutrinos!";
250  }
251 
252  // Add the daughters of the neutrino PFParticle to the nuPFParticles vector
253  for (const size_t daughterId : pParticle->Daughters())
254  {
255  if (pfParticleMap.find(daughterId) == pfParticleMap.end())
256  throw cet::exception("ConsolidatedPFParticleAnalysisTemplate") << " Invalid PFParticle collection!";
257 
258  nuParticles.push_back(pfParticleMap.at(daughterId));
259  }
260  }
261 }
intermediate_table::const_iterator const_iterator
T abs(T value)
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::GetPFParticleIdMap ( const PFParticleHandle pfParticleHandle,
PFParticleIdMap pfParticleMap 
)
private

Produce a mapping from PFParticle ID to the art ptr to the PFParticle itself for fast navigation.

Parameters
pfParticleHandlethe handle for the PFParticle collection
pfParticleMapthe mapping from ID to PFParticle

Definition at line 185 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

186 {
187  for (unsigned int i = 0; i < pfParticleHandle->size(); ++i)
188  {
189  const art::Ptr<recob::PFParticle> pParticle(pfParticleHandle, i);
190  if (!pfParticleMap.insert(PFParticleIdMap::value_type(pParticle->Self(), pParticle)).second)
191  {
192  throw cet::exception("ConsolidatedPFParticleAnalysisTemplate") << " Unable to get PFParticle ID map, the input PFParticle collection has repeat IDs!";
193  }
194  }
195 }
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::PrintOutScores ( const art::Event evt,
const PFParticleHandle pfParticleHandle 
) const
private

Print out scores in PFParticleMetadata.

Parameters
evtthe art event to analyze
pfParticleHandlethe handle for the PFParticle collection

Definition at line 199 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

200 {
201  // Get the associations between PFParticles and larpandoraobj::PFParticleMetadata
202  art::FindManyP< larpandoraobj::PFParticleMetadata > pfPartToMetadataAssoc(pfParticleHandle, evt, m_pandoraLabel);
203 
204  for (unsigned int i = 0; i < pfParticleHandle->size(); ++i)
205  {
206  const std::vector< art::Ptr<larpandoraobj::PFParticleMetadata> > &pfParticleMetadataList(pfPartToMetadataAssoc.at(i));
207  if (!pfParticleMetadataList.empty())
208  {
209  const art::Ptr<recob::PFParticle> pParticle(pfParticleHandle, i);
210  for (unsigned int j=0; j<pfParticleMetadataList.size(); ++j)
211  {
212  const art::Ptr<larpandoraobj::PFParticleMetadata> &pfParticleMetadata(pfParticleMetadataList.at(j));
213  const larpandoraobj::PFParticleMetadata::PropertiesMap &pfParticlePropertiesMap(pfParticleMetadata->GetPropertiesMap());
214  if (!pfParticlePropertiesMap.empty())
215  std::cout << " Found PFParticle " << pParticle->Self() << " with: " << std::endl;
216  for (larpandoraobj::PFParticleMetadata::PropertiesMap::const_iterator it = pfParticlePropertiesMap.begin(); it != pfParticlePropertiesMap.end(); ++it)
217  std::cout << " - " << it->first << " = " << it->second << std::endl;
218  }
219  }
220  }
221 }
std::map< std::string, float > PropertiesMap
intermediate_table::const_iterator const_iterator
QTextStream & endl(QTextStream &s)
void lar_pandora::ConsolidatedPFParticleAnalysisTemplate::reconfigure ( fhicl::ParameterSet const &  pset)

Configure memeber variables using FHiCL parameters.

Parameters
psetthe set of input fhicl parameters

Definition at line 129 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

130 {
131  m_pandoraLabel = pset.get<std::string>("PandoraLabel");
132  m_trackLabel = pset.get<std::string>("TrackLabel");
133  m_showerLabel = pset.get<std::string>("ShowerLabel");
134  m_printOutScores = pset.get<bool>("PrintOutScores",true);
135 }
std::string string
Definition: nybbler.cc:12
std::string m_showerLabel
The label for the shower producer from PFParticles.
std::string m_trackLabel
The label for the track producer from PFParticles.
bool m_printOutScores
Option to investigate the associations to scores for PFParticles.

Member Data Documentation

std::string lar_pandora::ConsolidatedPFParticleAnalysisTemplate::m_pandoraLabel
private

The label for the pandora producer.

Definition at line 91 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

bool lar_pandora::ConsolidatedPFParticleAnalysisTemplate::m_printOutScores
private

Option to investigate the associations to scores for PFParticles.

Definition at line 94 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

std::string lar_pandora::ConsolidatedPFParticleAnalysisTemplate::m_showerLabel
private

The label for the shower producer from PFParticles.

Definition at line 93 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.

std::string lar_pandora::ConsolidatedPFParticleAnalysisTemplate::m_trackLabel
private

The label for the track producer from PFParticles.

Definition at line 92 of file ConsolidatedPFParticleAnalysisTemplate_module.cc.


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