LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
recob::DumpPFParticles Class Reference

Prints the content of all the ParticleFlow particles on screen. More...

Inheritance diagram for recob::DumpPFParticles:
art::EDAnalyzer art::EventObserverBase art::Consumer art::EngineCreator

Classes

struct  Config
 

Public Types

using Parameters = art::EDAnalyzer::Table< Config >
 
using WorkerType = WorkerT< EDAnalyzer >
 
using ModuleType = EDAnalyzer
 

Public Member Functions

 DumpPFParticles (Parameters const &config)
 Default constructor. More...
 
virtual void analyze (const art::Event &evt) override
 Does the printing. More...
 
std::string workerType () const
 
bool modifiesEvent () const
 
void registerProducts (MasterProductRegistry &, ProductDescriptions &, ModuleDescription const &)
 
std::string const & processName () const
 
bool wantAllEvents () const
 
bool wantEvent (Event const &e)
 
fhicl::ParameterSetID selectorConfig () const
 
art::Handle< art::TriggerResultsgetTriggerResults (Event const &e) const
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > consumes (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > consumesView (InputTag const &it)
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > mayConsume (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > mayConsumeView (InputTag const &it)
 
base_engine_tcreateEngine (seed_t seed)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make, label_t const &engine_label)
 
seed_t get_seed_value (fhicl::ParameterSet const &pset, char const key[]="seed", seed_t const implicit_seed=-1)
 

Static Public Member Functions

static cet::exempt_ptr< Consumernon_module_context ()
 

Protected Member Functions

CurrentProcessingContext const * currentContext () const
 
detail::CachedProducts & cachedProducts ()
 
void validateConsumedProduct (BranchType const bt, ProductInfo const &pi)
 
void prepareForJob (fhicl::ParameterSet const &pset)
 
void showMissingConsumes () const
 

Private Member Functions

void MakePFParticleGraph (art::Event const &event, art::ValidHandle< std::vector< recob::PFParticle >> const &handle) const
 

Static Private Member Functions

static std::string DotFileName (art::EventID const &evtID, art::Provenance const &prodInfo)
 

Private Attributes

art::InputTag fInputTag
 input tag of the PFParticle product More...
 
std::string fOutputCategory
 category for LogInfo output More...
 
bool fPrintHexFloats
 whether to print floats in base 16 More...
 
unsigned int fMaxDepth
 maximum generation to print (0: only primaries) More...
 
bool fMakeEventGraphs
 whether to create one DOT file per event More...
 

Detailed Description

Prints the content of all the ParticleFlow particles on screen.

This analyser prints the content of all the ParticleFlow particles into the LogInfo/LogVerbatim stream.

Configuration parameters

  • PFModuleLabel (art::InputTag, required): label of the producer used to create the recob::PFParticle collection to be dumped
  • OutputCategory (string, default: "DumpPFParticles"): the category used for the output (useful for filtering)
  • PrintHexFloats (boolean, default: false): print all the floating point numbers in base 16
  • MaxDepth (unsigned int, optional): if specified, at most this number of particle generations will be printed; 1 means printing only primaries and their daughters, 0 only primaries. If not specified, no limit will be applied. This is useful for buggy PFParticles with circular references.
  • MakeParticleGraphs (boolean, default: false): creates a DOT file for each event, with a graph of PFParticle relations; each file is named as: ProcessName_ModuleLabel_InstanceName_Run::_Subrun::_Event::_particles.dot, where the the input label elements refer to the data product being plotted.

Particle connection graphs

When MakeParticleGraphs configuration option is activated, a file is created for each event, that contains the particle flow tree in GraphViz format. The GraphViz dot command can be used to render it into a PDF, SVG, EPS or one of the many supported bitmap formats. The typical command to use is:

dot -Tpdf -oPMTrk.pdf PMTrk.dot

A bash command to convert all files into a OutputFormat format:

OutputFormat='pdf'
for DotFile in *.dot ; do
  OutputFile="${DotFile%.dot}.${OutputFormat}"
  [[ "$OutputFile" -ot "$DotFile" ]] || continue # up to date already
  echo "${DotFile} => ${OutputFile} ..."
  dot -T"$OutputFormat" -o"$OutputFile" "$DotFile" || break
done

which will also skip files already converted.

The output shows one cell ("node") per particle. The format of the node follows these prescriptions:

  • the label has the particle ID number prepended by a hash character (#)
  • if the particle has a PDG ID, that also appears in the label (either the name of the corresponding particle, or, if unknown, just the PDG ID number)
  • if the particle is primary, it is rendered in bold font
  • if the particle is referred by other particles, but it is not present ("ghost particle"), its border is red and dashed

The relations between particles in the flow are represented by connecting lines ("edges"). Connection information is redundant: the parent particle should have the daughter in the daughter list, and the daughter should have the parent particle referenced as such. Since the connection is usually from two sources, there are usually two arrow heads, each one close to the particle that provides information on that connection; all arrow heads point from parent to daughter.

  • when the information of daughter and parent is consistent, a black line with two arrow heads both pointing to the daughter is shown
  • when the parent is ghost, the arrow head close to the daughter is hollow; ghost particles have no arrow heads close to them
  • when the daughter is ghost, the arrow head close to the parent is hollow; ghost particles have no arrow heads close to them

If you are trying to interpret an existing diagram, the following list is more direct to the point. Nodes: represent particles (see above for the label content)

  • bold label: primary particle
  • red, dashed border: "ghost particle" (missing but referenced by others)
  • other: just a particle

Connecting lines ("edges"):

  • all arrow heads point from parent to daughter
  • black with two full arrow heads: regular parent to daughter
  • black with a single inward empty arrow head: the particle close to the arrow claims the particle pointed by the arrow as a daughter, but there is no information on that daughter (ghost daughter)
  • black with a single outward empty arrow head: the particle at the tip of the arrow claims to be daughter of the other particle, but there is no information on that parent (ghost parent)
  • red, outward arrow: the daughter (at the tip of the only arrow) claims the other particle as parent, but that parent does not recognise it as daughter
  • orange, inward arrow: the parent (close to the only arrow head) claims the other particle as daughter, but that daighter does not recognise it as parent

Definition at line 132 of file DumpPFParticles_module.cc.

Member Typedef Documentation

Definition at line 39 of file EDAnalyzer.h.

Definition at line 38 of file EDAnalyzer.h.

Constructor & Destructor Documentation

recob::DumpPFParticles::DumpPFParticles ( Parameters const &  config)
explicit

Default constructor.

Definition at line 1120 of file DumpPFParticles_module.cc.

References DotFileName(), fMaxDepth, and max.

1121  : EDAnalyzer(config)
1122  , fInputTag(config().PFModuleLabel())
1123  , fOutputCategory(config().OutputCategory())
1124  , fPrintHexFloats(config().PrintHexFloats())
1126  , fMakeEventGraphs(config().MakeParticleGraphs())
1127  {
1128  // here we are handling the optional configuration key as it had just a
1129  // default value
1130  if (!config().MaxDepth(fMaxDepth))
1132  }
Int_t max
Definition: plot.C:27
std::string fOutputCategory
category for LogInfo output
unsigned int fMaxDepth
maximum generation to print (0: only primaries)
EDAnalyzer(Table< Config > const &config)
Definition: EDAnalyzer.h:100
bool fMakeEventGraphs
whether to create one DOT file per event
art::InputTag fInputTag
input tag of the PFParticle product
bool fPrintHexFloats
whether to print floats in base 16

Member Function Documentation

void recob::DumpPFParticles::analyze ( const art::Event evt)
overridevirtual

Does the printing.

Definition at line 1176 of file DumpPFParticles_module.cc.

References DEFINE_ART_MODULE, art::InputTag::encode(), fInputTag, fMakeEventGraphs, fMaxDepth, fOutputCategory, fPrintHexFloats, art::DataViewImpl::getValidHandle(), art::Event::id(), and MakePFParticleGraph().

1176  {
1177 
1178  //
1179  // collect all the available information
1180  //
1181  // fetch the data to be dumped on screen
1183  = evt.getValidHandle<std::vector<recob::PFParticle>>(fInputTag);
1184 
1185  if (fMakeEventGraphs)
1186  MakePFParticleGraph(evt, PFParticles);
1187 
1188  art::FindOne<recob::Vertex> const ParticleVertices
1189  (PFParticles, evt, fInputTag);
1190  art::FindMany<recob::Track> const ParticleTracks
1191  (PFParticles, evt, fInputTag);
1192  art::FindMany<recob::Cluster> const ParticleClusters
1193  (PFParticles, evt, fInputTag);
1194  art::FindMany<recob::Seed> const ParticleSeeds
1195  (PFParticles, evt, fInputTag);
1196  art::FindMany<recob::SpacePoint> const ParticleSpacePoints
1197  (PFParticles, evt, fInputTag);
1198  art::FindMany<recob::PCAxis> const ParticlePCAxes
1199  (PFParticles, evt, fInputTag);
1200 
1201  size_t const nParticles = PFParticles->size();
1202  mf::LogVerbatim(fOutputCategory) << "Event " << evt.id()
1203  << " contains " << nParticles << " particles from '"
1204  << fInputTag.encode() << "'";
1205 
1206  // prepare the dumper
1207  ParticleDumper::PrintOptions_t options;
1208  options.hexFloats = fPrintHexFloats;
1209  options.maxDepth = fMaxDepth;
1210  options.streamName = fOutputCategory;
1211  ParticleDumper dumper(*PFParticles, options);
1212  if (ParticleVertices.isValid()) dumper.SetVertices(&ParticleVertices);
1213  else mf::LogPrint("DumpPFParticles") << "WARNING: vertex information not available";
1214  if (ParticleTracks.isValid()) dumper.SetTracks(&ParticleTracks);
1215  else mf::LogPrint("DumpPFParticles") << "WARNING: track information not available";
1216  if (ParticleClusters.isValid()) dumper.SetClusters(&ParticleClusters);
1217  else mf::LogPrint("DumpPFParticles") << "WARNING: cluster information not available";
1218  if (ParticleSeeds.isValid()) dumper.SetSeeds(&ParticleSeeds);
1219  else mf::LogPrint("DumpPFParticles") << "WARNING: seed information not avaialble";
1220  if (ParticleSpacePoints.isValid())
1221  dumper.SetSpacePoints(&ParticleSpacePoints);
1222  else {
1223  mf::LogPrint("DumpPFParticles")
1224  << "WARNING: space point information not available";
1225  }
1226  if (ParticlePCAxes.isValid())
1227  dumper.SetPCAxes(&ParticlePCAxes);
1228  else {
1229  mf::LogPrint("DumpPFParticles")
1230  << "WARNING: principal component axis not available";
1231  }
1232  dumper.DumpAllParticles(" ");
1233 
1234  mf::LogVerbatim(fOutputCategory) << "\n"; // two empty lines
1235 
1236  } // DumpPFParticles::analyze()
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
std::string fOutputCategory
category for LogInfo output
unsigned int fMaxDepth
maximum generation to print (0: only primaries)
std::string encode() const
Definition: InputTag.cc:36
bool fMakeEventGraphs
whether to create one DOT file per event
void MakePFParticleGraph(art::Event const &event, art::ValidHandle< std::vector< recob::PFParticle >> const &handle) const
art::InputTag fInputTag
input tag of the PFParticle product
ValidHandle< PROD > getValidHandle(InputTag const &tag) const
bool fPrintHexFloats
whether to print floats in base 16
EventID id() const
Definition: Event.h:56
MaybeLogger_< ELseverityLevel::ELsev_warning, true > LogPrint
detail::CachedProducts& art::EventObserverBase::cachedProducts ( )
inlineprotectedinherited

Definition at line 79 of file EventObserverBase.h.

References art::EventObserverBase::selectors_.

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

80  {
81  return selectors_;
82  }
detail::CachedProducts selectors_
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::consumes ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::consumes ( InputTag const &  it)
inherited

Definition at line 147 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

148 {
149  if (!moduleContext_)
150  return ProductToken<T>::invalid();
151 
152  consumables_[BT].emplace_back(ConsumableType::Product,
153  TypeID{typeid(T)},
154  it.label(),
155  it.instance(),
156  it.process());
157  return ProductToken<T>{it};
158 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::consumesMany ( )
inherited

Definition at line 162 of file Consumer.h.

163 {
164  if (!moduleContext_)
165  return;
166 
167  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
168 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::consumesView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::consumesView ( InputTag const &  it)
inherited

Definition at line 172 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

173 {
174  if (!moduleContext_)
175  return ViewToken<T>::invalid();
176 
177  consumables_[BT].emplace_back(ConsumableType::ViewElement,
178  TypeID{typeid(T)},
179  it.label(),
180  it.instance(),
181  it.process());
182  return ViewToken<T>{it};
183 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make 
)
inherited

Definition at line 32 of file EngineCreator.cc.

References art::EngineCreator::rng().

34 {
35  return rng()->createEngine(
36  placeholder_schedule_id(), seed, kind_of_engine_to_make);
37 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make,
label_t const &  engine_label 
)
inherited

Definition at line 40 of file EngineCreator.cc.

References art::EngineCreator::rng().

43 {
44  return rng()->createEngine(
45  placeholder_schedule_id(), seed, kind_of_engine_to_make, engine_label);
46 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
CurrentProcessingContext const * art::EDAnalyzer::currentContext ( ) const
protectedinherited

Definition at line 114 of file EDAnalyzer.cc.

References art::EDAnalyzer::current_context_.

Referenced by art::EDAnalyzer::workerType().

115  {
116  return current_context_.get();
117  }
CPC_exempt_ptr current_context_
Definition: EDAnalyzer.h:179
std::string recob::DumpPFParticles::DotFileName ( art::EventID const &  evtID,
art::Provenance const &  prodInfo 
)
staticprivate

Definition at line 1137 of file DumpPFParticles_module.cc.

References art::EventID::event(), art::Provenance::moduleLabel(), art::Provenance::processName(), art::Provenance::productInstanceName(), art::EventID::run(), art::EventID::subRun(), and util::flags::to_string().

Referenced by DumpPFParticles(), and MakePFParticleGraph().

1138  {
1139  return prodInfo.processName()
1140  + '_' + prodInfo.moduleLabel()
1141  + '_' + prodInfo.productInstanceName()
1142  + "_Run" + std::to_string(evtID.run())
1143  + "_Subrun" + std::to_string(evtID.subRun())
1144  + "_Event" + std::to_string(evtID.event())
1145  + "_particles.dot";
1146  } // DumpPFParticles::DotFileName()
std::string to_string(Flag_t< Storage > const flag)
Convert a flag into a stream (shows its index).
Definition: BitMask.h:187
EngineCreator::seed_t EngineCreator::get_seed_value ( fhicl::ParameterSet const &  pset,
char const  key[] = "seed",
seed_t const  implicit_seed = -1 
)
inherited

Definition at line 49 of file EngineCreator.cc.

References fhicl::ParameterSet::get().

Referenced by art::MixFilter< T >::initEngine_().

52 {
53  auto const& explicit_seeds = pset.get<std::vector<int>>(key, {});
54  return explicit_seeds.empty() ? implicit_seed : explicit_seeds.front();
55 }
art::Handle<art::TriggerResults> art::EventObserverBase::getTriggerResults ( Event const &  e) const
inlineinherited

Definition at line 61 of file EventObserverBase.h.

References art::detail::CachedProducts::getOneTriggerResults(), and art::EventObserverBase::selectors_.

Referenced by art::OutputModule::doWriteEvent().

62  {
64  }
detail::CachedProducts selectors_
art::Handle< art::TriggerResults > getOneTriggerResults(Event const &) const
Float_t e
Definition: plot.C:34
void recob::DumpPFParticles::MakePFParticleGraph ( art::Event const &  event,
art::ValidHandle< std::vector< recob::PFParticle >> const &  handle 
) const
private

Definition at line 1150 of file DumpPFParticles_module.cc.

References DotFileName(), art::EventID::event(), art::EventID::run(), and art::EventID::subRun().

Referenced by analyze().

1153  {
1154  art::EventID const eventID = event.id();
1155  std::string fileName = DotFileName(eventID, *(handle.provenance()));
1156  std::ofstream outFile(fileName); // overwrite by default
1157 
1158  outFile
1159  << "// " << fileName
1160  << "\n// "
1161  << "\n// Created for run " << eventID.run()
1162  << " subrun " << eventID.subRun()
1163  << " event " << eventID.event()
1164  << "\n// "
1165  << "\n// dump of " << handle->size() << " particles"
1166  << "\n// "
1167  << std::endl;
1168 
1169  PFParticleGraphMaker graphMaker;
1170  graphMaker.MakeGraph(outFile, *handle);
1171 
1172  } // DumpPFParticles::MakePFParticleGraph()
RunNumber_t run() const
Definition: EventID.h:99
Provenance const * provenance() const
Definition: Handle.h:342
static std::string DotFileName(art::EventID const &evtID, art::Provenance const &prodInfo)
EventNumber_t event() const
Definition: EventID.h:117
SubRunNumber_t subRun() const
Definition: EventID.h:111
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::mayConsume ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::mayConsume ( InputTag const &  it)
inherited

Definition at line 190 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

191 {
192  if (!moduleContext_)
193  return ProductToken<T>::invalid();
194 
195  consumables_[BT].emplace_back(ConsumableType::Product,
196  TypeID{typeid(T)},
197  it.label(),
198  it.instance(),
199  it.process());
200  return ProductToken<T>{it};
201 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::mayConsumeMany ( )
inherited

Definition at line 205 of file Consumer.h.

206 {
207  if (!moduleContext_)
208  return;
209 
210  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
211 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::mayConsumeView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::mayConsumeView ( InputTag const &  it)
inherited

Definition at line 215 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

216 {
217  if (!moduleContext_)
218  return ViewToken<T>::invalid();
219 
220  consumables_[BT].emplace_back(ConsumableType::ViewElement,
221  TypeID{typeid(T)},
222  it.label(),
223  it.instance(),
224  it.process());
225  return ViewToken<T>{it};
226 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
bool art::EventObserverBase::modifiesEvent ( ) const
inlineinherited

Definition at line 25 of file EventObserverBase.h.

26  {
27  return false;
28  }
void art::Consumer::prepareForJob ( fhicl::ParameterSet const &  pset)
protectedinherited

Definition at line 89 of file Consumer.cc.

References fhicl::ParameterSet::get_if_present().

Referenced by art::EDProducer::doBeginJob(), art::EDFilter::doBeginJob(), and art::EDAnalyzer::doBeginJob().

90 {
91  if (!moduleContext_)
92  return;
93 
94  pset.get_if_present("errorOnMissingConsumes", requireConsumes_);
95  for (auto& consumablesPerBranch : consumables_) {
96  cet::sort_all(consumablesPerBranch);
97  }
98 }
bool requireConsumes_
Definition: Consumer.h:137
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
std::string const& art::EventObserverBase::processName ( ) const
inlineinherited
void art::EventObserverBase::registerProducts ( MasterProductRegistry ,
ProductDescriptions ,
ModuleDescription const &   
)
inlineinherited

Definition at line 33 of file EventObserverBase.h.

36  {}
fhicl::ParameterSetID art::EventObserverBase::selectorConfig ( ) const
inlineinherited

Definition at line 56 of file EventObserverBase.h.

References art::EventObserverBase::selector_config_id_.

Referenced by art::RootOutputFile::writeOne().

57  {
58  return selector_config_id_;
59  }
fhicl::ParameterSetID selector_config_id_
void art::Consumer::showMissingConsumes ( ) const
protectedinherited

Definition at line 125 of file Consumer.cc.

Referenced by art::EDProducer::doEndJob(), art::EDFilter::doEndJob(), art::EDAnalyzer::doEndJob(), and art::RootOutput::endJob().

126 {
127  if (!moduleContext_)
128  return;
129 
130  // If none of the branches have missing consumes statements, exit early.
131  if (std::all_of(cbegin(missingConsumes_),
132  cend(missingConsumes_),
133  [](auto const& perBranch) { return perBranch.empty(); }))
134  return;
135 
136  constexpr cet::HorizontalRule rule{60};
137  mf::LogPrint log{"MTdiagnostics"};
138  log << '\n'
139  << rule('=') << '\n'
140  << "The following consumes (or mayConsume) statements are missing from\n"
141  << module_context(moduleDescription_) << '\n'
142  << rule('-') << '\n';
143 
144  cet::for_all_with_index(
145  missingConsumes_, [&log](std::size_t const i, auto const& perBranch) {
146  for (auto const& pi : perBranch) {
147  log << " "
148  << assemble_consumes_statement(static_cast<BranchType>(i), pi)
149  << '\n';
150  }
151  });
152  log << rule('=');
153 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
void art::Consumer::validateConsumedProduct ( BranchType const  bt,
ProductInfo const &  pi 
)
protectedinherited

Definition at line 101 of file Consumer.cc.

References art::errors::ProductRegistrationFailure.

103 {
104  // Early exits if consumes tracking has been disabled or if the
105  // consumed product is an allowed consumable.
106  if (!moduleContext_)
107  return;
108 
109  if (cet::binary_search_all(consumables_[bt], pi))
110  return;
111 
112  if (requireConsumes_) {
114  "Consumer: an error occurred during validation of a "
115  "retrieved product\n\n")
116  << "The following consumes (or mayConsume) statement is missing from\n"
117  << module_context(moduleDescription_) << ":\n\n"
118  << " " << assemble_consumes_statement(bt, pi) << "\n\n";
119  }
120 
121  missingConsumes_[bt].insert(pi);
122 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
bool requireConsumes_
Definition: Consumer.h:137
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
bool art::EventObserverBase::wantAllEvents ( ) const
inlineinherited
bool art::EventObserverBase::wantEvent ( Event const &  e)
inlineinherited
std::string art::EDAnalyzer::workerType ( ) const
inlineinherited

Definition at line 109 of file EDAnalyzer.h.

References art::EDAnalyzer::currentContext().

110  {
111  return "WorkerT<EDAnalyzer>";
112  }

Member Data Documentation

art::InputTag recob::DumpPFParticles::fInputTag
private

input tag of the PFParticle product

Definition at line 179 of file DumpPFParticles_module.cc.

Referenced by analyze().

bool recob::DumpPFParticles::fMakeEventGraphs
private

whether to create one DOT file per event

Definition at line 183 of file DumpPFParticles_module.cc.

Referenced by analyze().

unsigned int recob::DumpPFParticles::fMaxDepth
private

maximum generation to print (0: only primaries)

Definition at line 182 of file DumpPFParticles_module.cc.

Referenced by analyze(), and DumpPFParticles().

std::string recob::DumpPFParticles::fOutputCategory
private

category for LogInfo output

Definition at line 180 of file DumpPFParticles_module.cc.

Referenced by analyze().

bool recob::DumpPFParticles::fPrintHexFloats
private

whether to print floats in base 16

Definition at line 181 of file DumpPFParticles_module.cc.

Referenced by analyze().


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