LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
sim::DumpMCShowers Class Reference
Inheritance diagram for sim::DumpMCShowers:
art::EDAnalyzer art::EventObserverBase art::Consumer art::EngineCreator

Public Types

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

Public Member Functions

 DumpMCShowers (Parameters const &config)
 Configuration-checking constructor. More...
 
 DumpMCShowers (DumpMCShowers const &)=delete
 
 DumpMCShowers (DumpMCShowers &&)=delete
 
DumpMCShowersoperator= (DumpMCShowers const &)=delete
 
DumpMCShowersoperator= (DumpMCShowers &&)=delete
 
virtual void analyze (art::Event const &event) override
 
template<typename Stream >
void DumpMCShower (Stream &&out, sim::MCShower const &shower, std::string indent="", bool bIndentFirst=true) const
 Dumps the content of the specified particle in the output stream. 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 Attributes

art::InputTag fInputShowers
 name of MCShower's data product More...
 
std::string fOutputCategory
 name of the stream for output More...
 
unsigned int fDaughtersPerLine
 number of daughter IDs printed per line More...
 

Detailed Description

Definition at line 92 of file DumpMCShowers_module.cc.

Member Typedef Documentation

Definition at line 39 of file EDAnalyzer.h.

Definition at line 38 of file EDAnalyzer.h.

Constructor & Destructor Documentation

sim::DumpMCShowers::DumpMCShowers ( Parameters const &  config)
explicit

Configuration-checking constructor.

Definition at line 144 of file DumpMCShowers_module.cc.

145  : EDAnalyzer(config)
146  , fInputShowers(config().InputShowers())
147  , fOutputCategory(config().OutputCategory())
148  , fDaughtersPerLine(config().DaughtersPerLine())
149 {}
art::InputTag fInputShowers
name of MCShower&#39;s data product
std::string fOutputCategory
name of the stream for output
unsigned int fDaughtersPerLine
number of daughter IDs printed per line
EDAnalyzer(Table< Config > const &config)
Definition: EDAnalyzer.h:100
sim::DumpMCShowers::DumpMCShowers ( DumpMCShowers const &  )
delete
sim::DumpMCShowers::DumpMCShowers ( DumpMCShowers &&  )
delete

Member Function Documentation

void sim::DumpMCShowers::analyze ( art::Event const &  event)
overridevirtual

Implements art::EDAnalyzer.

Definition at line 230 of file DumpMCShowers_module.cc.

References DEFINE_ART_MODULE, DumpMCShower(), art::InputTag::encode(), fInputShowers, and fOutputCategory.

230  {
231 
232  // get the particles from the event
233  auto const& Showers
234  = *(event.getValidHandle<std::vector<sim::MCShower>>(fInputShowers));
235 
237  << "Event " << event.id() << ": data product '"
238  << fInputShowers.encode() << "' contains "
239  << Showers.size() << " MCShower objects";
240 
241  unsigned int iShower = 0;
243  for (sim::MCShower const& shower: Showers) {
244 
245  // a bit of a header
246  log << "\n[#" << (iShower++) << "] ";
247  DumpMCShower(log, shower, " ", false);
248 
249  } // for
250  log << "\n";
251 
252 } // sim::DumpMCShowers::analyze()
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
art::InputTag fInputShowers
name of MCShower&#39;s data product
std::string fOutputCategory
name of the stream for output
std::string encode() const
Definition: InputTag.cc:36
void DumpMCShower(Stream &&out, sim::MCShower const &shower, std::string indent="", bool bIndentFirst=true) const
Dumps the content of the specified particle in the output stream.
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
template<typename Stream >
void sim::DumpMCShowers::DumpMCShower ( Stream &&  out,
sim::MCShower const &  shower,
std::string  indent = "",
bool  bIndentFirst = true 
) const

Dumps the content of the specified particle in the output stream.

Template Parameters
Streamthe type of output stream
Parameters
outthe output stream
particlethe particle to be dumped
indentbase indentation string (default: none)
bIndentFirstif first output line should be indented (default: yes)

The indent string is prepended to every line of output, with the possible exception of the first one, in case bIndentFirst is true.

The output starts on the current line, and the last line is NOT broken.

Definition at line 153 of file DumpMCShowers_module.cc.

References sim::MCShower::AncestorEnd(), sim::MCShower::AncestorPdgCode(), sim::MCShower::AncestorProcess(), sim::MCShower::AncestorStart(), sim::MCShower::AncestorTrackID(), sim::MCShower::Charge(), sim::MCShower::DaughterTrackID(), sim::MCShower::dEdx(), sim::MCShower::DetProfile(), sim::MCShower::dQdx(), sim::MCShower::End(), fDaughtersPerLine, art::detail::indent(), max, sim::MCShower::MotherEnd(), sim::MCShower::MotherPdgCode(), sim::MCShower::MotherProcess(), sim::MCShower::MotherStart(), sim::MCShower::MotherTrackID(), sim::MCShower::Origin(), sim::MCShower::PdgCode(), sim::MCShower::Process(), sim::MCShower::Start(), sim::MCShower::StartDir(), and sim::MCShower::TrackID().

Referenced by analyze().

156  {
157  if (bIndentFirst) out << indent;
158  out
159  << "from GEANT track ID=" << shower.TrackID()
160  << " PDG ID=" << shower.PdgCode()
161  << " from " << OriginDescription(shower.Origin())
162  << " via '" << shower.Process() << "'";
163  out << "\n" << indent
164  << " starting at ";
165  ::PrintMCStep(out, shower.Start());
166  out << "\n" << indent
167  << " ending at ";
168  ::PrintMCStep(out, shower.End());
169 
170  TVector3 const& startDir = shower.StartDir();
171  out << "\n" << indent
172  << "pointing toward ("
173  << startDir.X() << ", " << startDir.Y() << ", " << startDir.Z() << ") cm";
174  std::vector<double> const& charges = shower.Charge();
175  std::vector<double> const& dQdx = shower.dQdx();
176  size_t const nQPlanes = dQdx.size(), nChPlanes = charges.size();
177  size_t const nPlanes = std::max(nQPlanes, nChPlanes);
178  out << "\n" << indent;
179  if (nPlanes > 0) {
180  out
181  << "dE/dx=" << shower.dEdx() << " MeV/cm and dQ/dx (charge) on "
182  << nPlanes << " planes:";
183  for (size_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
184  out << " [#" << iPlane << "] ";
185  if (iPlane < dQdx.size()) out << dQdx[iPlane];
186  else out << "<N/A>";
187  if (iPlane < charges.size()) out << " (" << charges[iPlane] << ")";
188  else out << "<N/A>";
189  } // for plane
190  }
191  else out << "no energy or charge information available";
192 
193  std::vector<unsigned int> const& daughters = shower.DaughterTrackID();
194  out << "\n" << indent
195  << "combined energy deposition information: ";
196  ::PrintMCStep(out, shower.DetProfile());
197  out << "\n" << indent
198  << daughters.size() << " daughters, ID:";
199  for (size_t i = 0; i < daughters.size(); ++i) {
200  if ((i % fDaughtersPerLine) == 0) out << "\n" << indent << " ";
201  out << " " << std::setw(8) << daughters[i];
202  } // for
203 
204  out << "\n" << indent
205  << "mother ID=" << shower.MotherTrackID()
206  << " PDG ID=" << shower.MotherPdgCode()
207  << " via '" << shower.MotherProcess() << "'";
208  out << "\n" << indent
209  << " starting at ";
210  ::PrintMCStep(out, shower.MotherStart());
211  out << "\n" << indent
212  << " ending at ";
213  ::PrintMCStep(out, shower.MotherEnd());
214 
215  out << "\n" << indent
216  << "ancestor ID=" << shower.AncestorTrackID()
217  << " PDG ID=" << shower.AncestorPdgCode()
218  << " via '" << shower.AncestorProcess() << "'";
219  out << "\n" << indent
220  << " starting at ";
221  ::PrintMCStep(out, shower.AncestorStart());
222  out << "\n" << indent
223  << " ending at ";
224  ::PrintMCStep(out, shower.AncestorEnd());
225 
226 } // sim::DumpMCShowers::DumpMCShower()
Int_t max
Definition: plot.C:27
std::string indent(std::size_t const i)
unsigned int fDaughtersPerLine
number of daughter IDs printed per line
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
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  }
DumpMCShowers& sim::DumpMCShowers::operator= ( DumpMCShowers const &  )
delete
DumpMCShowers& sim::DumpMCShowers::operator= ( DumpMCShowers &&  )
delete
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

unsigned int sim::DumpMCShowers::fDaughtersPerLine
private

number of daughter IDs printed per line

Definition at line 135 of file DumpMCShowers_module.cc.

Referenced by DumpMCShower().

art::InputTag sim::DumpMCShowers::fInputShowers
private

name of MCShower's data product

Definition at line 133 of file DumpMCShowers_module.cc.

Referenced by analyze().

std::string sim::DumpMCShowers::fOutputCategory
private

name of the stream for output

Definition at line 134 of file DumpMCShowers_module.cc.

Referenced by analyze().


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