LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
art::ProductRetriever Class Reference

#include "ProductRetriever.h"

Inheritance diagram for art::ProductRetriever:
art::Event art::Results art::Run art::SubRun

Public Member Functions

 ~ProductRetriever ()
 
 ProductRetriever (BranchType bt, Principal const &p, ModuleContext const &mc, bool recordParents)
 
 ProductRetriever (ProductRetriever const &)=delete
 
 ProductRetriever (ProductRetriever &&)=delete
 
ProductRetrieveroperator= (ProductRetriever const &)=delete
 
ProductRetrieveroperator= (ProductRetriever &)=delete
 
template<typename PROD >
PROD const & getProduct (InputTag const &tag) const
 
template<typename PROD >
PROD const & getProduct (ProductToken< PROD > const &token) const
 
template<typename PROD >
Handle< PROD > getHandle (SelectorBase const &) const
 
template<typename PROD >
Handle< PROD > getHandle (ProductID const pid) const
 
template<typename PROD >
Handle< PROD > getHandle (InputTag const &tag) const
 
template<typename PROD >
Handle< PROD > getHandle (ProductToken< PROD > const &token) const
 
template<typename PROD >
ValidHandle< PROD > getValidHandle (InputTag const &tag) const
 
template<typename PROD >
ValidHandle< PROD > getValidHandle (ProductToken< PROD > const &token) const
 
template<typename PROD >
std::vector< InputTaggetInputTags (SelectorBase const &selector=MatchAllSelector{}) const
 
template<typename PROD >
std::vector< ProductToken< PROD > > getProductTokens (SelectorBase const &selector=MatchAllSelector{}) const
 
template<typename PROD >
std::vector< Handle< PROD > > getMany (SelectorBase const &selector=MatchAllSelector{}) const
 
template<typename PROD >
bool get (SelectorBase const &, Handle< PROD > &result) const
 
template<typename PROD >
bool get (ProductID const pid, Handle< PROD > &result) const
 
template<typename PROD >
bool getByLabel (std::string const &label, std::string const &instance, Handle< PROD > &result) const
 
template<typename PROD >
bool getByLabel (std::string const &label, std::string const &instance, std::string const &process, Handle< PROD > &result) const
 
template<typename PROD >
bool getByLabel (InputTag const &tag, Handle< PROD > &result) const
 
template<typename ELEMENT >
std::size_t getView (std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
 
template<typename ELEMENT >
std::size_t getView (std::string const &moduleLabel, std::string const &productInstanceName, std::vector< ELEMENT const * > &result) const
 
template<typename ELEMENT >
std::size_t getView (InputTag const &, std::vector< ELEMENT const * > &result) const
 
template<typename ELEMENT >
std::size_t getView (ViewToken< ELEMENT > const &, std::vector< ELEMENT const * > &result) const
 
template<typename ELEMENT >
bool getView (std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, View< ELEMENT > &result) const
 
template<typename ELEMENT >
bool getView (std::string const &moduleLabel, std::string const &productInstanceName, View< ELEMENT > &result) const
 
template<typename ELEMENT >
bool getView (InputTag const &, View< ELEMENT > &result) const
 
template<typename ELEMENT >
bool getView (ViewToken< ELEMENT > const &, View< ELEMENT > &result) const
 
std::vector< ProductIDretrievedPIDs () const
 
std::optional< Provenance const > getProductProvenance (ProductID) const
 
std::optional< fhicl::ParameterSet const > getProcessParameterSet (std::string const &process) const
 
cet::exempt_ptr< BranchDescription const > getProductDescription (ProductID) const
 
EDProductGetter const * productGetter (ProductID const pid) const
 
template<typename T >
ProductID getProductID (std::string const &instance_name="") const
 

Private Member Functions

void recordAsParent_ (cet::exempt_ptr< Group const > grp) const
 
cet::exempt_ptr< Group const > getContainerForView_ (TypeID const &, std::string const &moduleLabel, std::string const &productInstanceName, ProcessTag const &processTag) const
 
ProductID getProductID_ (TypeID const &typeID, std::string const &instance) const
 
std::vector< InputTaggetInputTags_ (WrappedTypeID const &wrapped, SelectorBase const &selector) const
 
GroupQueryResult getByLabel_ (WrappedTypeID const &wrapped, InputTag const &tag) const
 
GroupQueryResult getBySelector_ (WrappedTypeID const &wrapped, SelectorBase const &selector) const
 
GroupQueryResult getByProductID_ (ProductID productID) const
 
std::vector< GroupQueryResultgetMany_ (WrappedTypeID const &wrapped, SelectorBase const &sel) const
 

Private Attributes

std::recursive_mutex mutex_ {}
 
BranchType const branchType_
 
Principal const & principal_
 
ModuleContext const & mc_
 
ModuleDescription const & md_
 
bool const recordParents_
 
std::set< ProductIDretrievedProducts_ {}
 

Detailed Description

Definition at line 49 of file ProductRetriever.h.

Constructor & Destructor Documentation

art::ProductRetriever::~ProductRetriever ( )
default
art::ProductRetriever::ProductRetriever ( BranchType  bt,
Principal const &  p,
ModuleContext const &  mc,
bool  recordParents 
)
explicit

Definition at line 34 of file ProductRetriever.cc.

References mc_, md_, principal_, and recordParents_.

38  : branchType_{bt}
39  , principal_{principal}
40  , mc_{mc}
41  , md_{mc.moduleDescription()}
42  , recordParents_{recordParents}
43  {}
ModuleContext const & mc_
Principal const & principal_
BranchType const branchType_
ModuleDescription const & md_
art::ProductRetriever::ProductRetriever ( ProductRetriever const &  )
delete
art::ProductRetriever::ProductRetriever ( ProductRetriever &&  )
delete

Member Function Documentation

template<typename PROD >
bool art::ProductRetriever::get ( SelectorBase const &  sel,
Handle< PROD > &  result 
) const

Definition at line 417 of file ProductRetriever.h.

Referenced by art::Observer::getTriggerResults(), and art::detail::ProcessAndEventSelector::triggerResults().

418  {
419  result = getHandle<PROD>(sel);
420  return static_cast<bool>(result);
421  }
template<typename PROD >
bool art::ProductRetriever::get ( ProductID const  pid,
Handle< PROD > &  result 
) const

Definition at line 425 of file ProductRetriever.h.

426  {
427  result = getHandle<PROD>(pid);
428  return static_cast<bool>(result);
429  }
template<typename PROD >
bool art::ProductRetriever::getByLabel ( std::string const &  label,
std::string const &  instance,
Handle< PROD > &  result 
) const

Definition at line 444 of file ProductRetriever.h.

Referenced by lar::util::details::FindAllP< Source, Dest >::Add(), reco3d::PlotSpacePoints::analyze(), opdet::OpDigiAna::analyze(), opdet::FIFOHistogramAna::analyze(), opdet::OpFlashMCTruthAna::analyze(), cheat::CheckBackTracking::analyze(), calo::PrintCalorimetry::analyze(), opdet::OpFlashSimpleAna::analyze(), shower::TCShowerAnalysis::analyze(), opdet::OpHitAna::analyze(), opdet::OpFlashAna::analyze(), pid::PIDAAnalyzer::analyze(), trk::TrackContainmentAnalyzer::analyze(), MCBTDemo::analyze(), vertex::AggregateVertexAna::analyze(), detsim::SimWireAna::analyze(), shower::TCShowerElectronLikelihood::analyze(), shower::TCShowerTemplateMaker::analyze(), detsim::WienerFilterAna::analyze(), larg4::ISCalcAna::analyze(), microboone::CosmicRemovalAna::analyze(), vertex::FeatureVertexFinderAna::analyze(), cluster::HoughLineFinderAna::analyze(), opdet::FlashHypothesisAna::analyze(), hit::MagDriftAna::analyze(), pfpf::PFPAna::analyze(), calo::CaloChecker::analyze(), pdsp::CheckCNNScore::analyze(), caldata::CalWireAna::analyze(), opreco::OpticalRecoAna::analyze(), cluster::ClusterAna::analyze(), cluster::ClusterPCA::analyze(), lar_pandora::ConsolidatedPFParticleAnalysisTemplate::analyze(), opdet::LEDCalibrationAna::analyze(), hit::GausHitFinderAna::analyze(), hit::HitAnaModule::analyze(), cluster::DBclusterAna::analyze(), hit::HitFinderAna::analyze(), trkf::SpacePointAna::analyze(), cluster::ClusterTrackAna::analyze(), cheat::RecoCheckAna::analyze(), rwgt::ReweightAna::analyze(), nnet::EvaluateROIEff::analyze(), NuShowerEff::analyze(), nnet::RawWaveformDump::analyze(), nnet::PointIdEffTest::analyze(), nnet::RawWaveformClnSigDump::analyze(), ems::MultiEMShowers::analyze(), lar::example::AnalysisExample::analyze(), trkf::SeedAna::analyze(), trkf::TrackAna::analyze(), ClusteringValidation::ClusteringValidation::analyze(), trkf::TrackAna::anaStitch(), lar_pandora::LArPandoraHelper::BuildMCParticleHitMaps(), evd::AnalysisBaseDrawer::CalorShower(), evd::HitSelector::ChangeHit(), lar_cluster3d::StandardHit3DBuilder::CollectArtHits(), lar_cluster3d::SnippetHit3DBuilder::CollectArtHits(), lar_pandora::LArPandoraHelper::CollectClusters(), lar_pandora::LArPandoraHelper::CollectCosmicTags(), lar_pandora::LArPandoraHelper::CollectGeneratorMCParticles(), lar_pandora::LArPandoraHelper::CollectHits(), lar_pandora::LArPandoraHelper::CollectMCParticles(), lar_pandora::LArPandoraSliceIdHelper::CollectNeutrinoMCParticles(), lar_pandora::LArPandoraHelper::CollectPFParticleMetadata(), lar_pandora::LArPandoraExternalEventBuilding::CollectPFParticles(), lar_pandora::LArPandoraHelper::CollectPFParticles(), lar_pandora::LArPandoraHelper::CollectSeeds(), ems::EMShower3D::CollectShower2D(), lar_pandora::LArPandoraHelper::CollectShowers(), lar_pandora::LArPandoraHelper::CollectSimChannels(), lar_pandora::LArPandoraHelper::CollectSpacePoints(), lar_pandora::LArPandoraHelper::CollectT0s(), lar_pandora::LArPandoraHelper::CollectTracks(), lar_pandora::LArPandoraHelper::CollectVertices(), lar_pandora::LArPandoraHelper::CollectWires(), ems::MultiEMShowers::convCluster(), t0::IndirectHitParticleAssns::CreateHitParticleAssociations(), t0::DirectHitParticleAssns::CreateHitParticleAssociations(), evdb_tool::DrawSimPhoton3D::Draw(), evdb_tool::DrawLArVoxel3D::Draw(), evdb_tool::DrawSimEnergyDeposit3D::drawAll(), evd::AnalysisBaseDrawer::DrawDeDx(), evd::AnalysisBaseDrawer::DrawKineticEnergy(), evdb_tool::DrawSimEnergyDeposit3D::drawMCPartAssociated(), evd::RecoBaseDrawer::DrawTrackVertexAssns2D(), lcvn::LArNuCVNZlibMaker::endSubRun(), sim::POTaccumulator::endSubRun(), filt::LArG4ParticleFilter::filter(), filt::FinalStateParticleFilter::filter(), simfilter::FilterNoDirtNeutrinos::filter(), filter::MuonFilter::filter(), trkf::StitchAlg::FindHeadsAndTails(), anab::FVectorReader< T, N >::FVectorReader(), trkf::Track3DKalmanHit::getAllHits(), lar_pandora::LArPandoraHelper::GetAssociatedHits(), lar_pandora::LArPandoraSliceIdHelper::GetBeamNeutrinoMCTruth(), trkf::Track3DKalmanHit::getClusteredHits(), evd::RecoBaseDrawer::GetClusters(), evd::RecoBaseDrawer::GetEdges(), evd::RecoBaseDrawer::GetEndPoint2D(), evd::RecoBaseDrawer::GetEvents(), lar_pandora::LArPandoraSliceIdHelper::GetHitOrigins(), trkf::SeedFinderModule::GetHitsFromEvent(), evd::RecoBaseDrawer::GetOpFlashes(), evd::RecoBaseDrawer::GetPFParticles(), trkf::Track3DKalmanHit::getPFParticleStuff(), lar_pandora::LArPandoraSliceIdHelper::GetPFParticleToHitsMap(), evd::RecoBaseDrawer::GetSeeds(), sim::SimListUtils::GetSimPhotonsCollection(), evd::RecoBaseDrawer::GetSlices(), trkf::SeedFinderModule::GetSortedHitsFromClusters(), evd::RecoBaseDrawer::GetSpacePoints(), evd::RecoBaseDrawer::GetVertices(), quad::GetVtxByAssns(), evd::RecoBaseDrawer::GetWires(), lar_cluster3d::SpacePointHit3DBuilder::Hit3DBuilder(), lar_pandora::LArPandoraEventDump::PandoraData::LoadCollection(), evgb::MCTruthAndFriendsItr::MCTruthAndFriendsItr(), mvapid::MVAAlg::PrepareEvent(), wc::CellTree::processCalib(), DUNE::NeutrinoShowerEff::processEff(), DUNE::MuonTrackingEff::processEff(), DUNE::NeutrinoTrackingEff::processEff(), wc::CellTree::processMC(), wc::CellTree::processOpFlash(), wc::CellTree::processOpHit(), wc::CellTree::processRaw(), wc::CellTree::processSimChannel(), wc::CellTree::processSpacePointTruthDepo(), wc::CellTree::processTrigger(), opdet::OpticalRawDigitReformatter::produce(), pid::Chi2ParticleID::produce(), cosmic::TrackPFParticleMatch::produce(), MCReco::produce(), vertex::VertexCheater::produce(), hit::DisambigCheater::produce(), hit::MCHitFinder::produce(), shwf::ShowerCheater::produce(), trk::TrackContainmentTagger::produce(), event::EventCheater::produce(), cosmic::CosmicClusterTagger::produce(), trkf::FeatureTracker::produce(), cosmic::CosmicTrackTagger::produce(), hit::TTHitFinder::produce(), trkf::SpacePointCheater::produce(), trkf::SpacePointFinder::produce(), apa::APAHitFinder::produce(), hit::RawHitFinder::produce(), cosmic::CosmicPFParticleTagger::produce(), sppt::TTSpacePointFinder::produce(), trkf::TrackCheater::produce(), hit::RFFHitFinder::produce(), hit::FFTHitFinder::produce(), cluster::ClusterCheater::produce(), shwf::ShowerFinder::produce(), trkf::TrackStitcher::produce(), noisefilteralg::WireCellNoiseFilter::produce(), vertex::PrimaryVertexFinder::produce(), cluster::DBcluster::produce(), caldata::CalWire::produce(), cosmic::BeamFlashTrackMatchTagger::produce(), cluster::EndPointModule::produce(), caldata::CalWireT962::produce(), cluster::LineMerger::produce(), reco3d::SpacePointSolver::produce(), cosmic::CosmicPCAxisTagger::produce(), shower::TCShower::produce(), CRHitRemoval::produce(), calo::TrackCalorimetry::produce(), trkf::SpacePts::produce(), ShowerReco3D::produce(), t0::MCParticleTrackMatching::produce(), trkf::Track3Dreco::produce(), t0::MCParticleShowerMatching::produce(), cluster::BlurredClustering::produce(), nnet::WaveformRoiFinder::produce(), sce::SCECorrection::produce(), cluster::TrajCluster::produce(), trkf::MCSFitProducer::produce(), ems::EMShower3D::produce(), phot::PDFastSimPVS::produce(), trkf::CCTrackMaker::produce(), shwf::ShowerReco::produce(), phot::PDFastSimANN::produce(), trkf::Track3DKalman::produce(), hit::GausHitFinder::produce(), cluster::SmallClusterFinder::produce(), trkf::TrackKalmanCheater::produce(), quad::QuadVtx::produce(), hit::DPRawHitFinder::produce(), CRHitRemovalByPCA::produce(), vertex::VertexFinder2D::produce(), lbne::PhotonCounterT0Matching::produce(), NuGraphInference::produce(), vertex::FeatureVertexFinder::produce(), shower::EMShower::produce(), trkf::PMAlgTrajFitter::produce(), detsim::DriftElectronstoPlane::produce(), t0::MCTruthT0Matching::produce(), calo::Calorimetry::produce(), trkf::Track3DKalmanSPS::produce(), detsim::SimDriftElectrons::produce(), trkf::KalmanFilterTrajectoryFitter::produce(), calo::GnocchiCalorimetry::produce(), phot::PDFastSimPAR::produce(), opdet::OpHitFinder::produce(), trkf::CosmicTracker::produce(), larg4::LArG4::produce(), evd::details::RawDigitCacheDataClass::ReadProduct(), evd::InfoTransfer::Rebuild(), cheat::PhotonBackTracker::Rebuild(), evd::HitSelector::SaveHits(), evd::HitSelector::SaveSeedLines(), cluster::ClusterMergeHelper::SetClusters(), nnet::TrainingDataAlg::setDataEventData(), tss::TrackShowerHits::sortHits(), and evd::details::RawDigitCacheDataClass::Update().

447  {
448  result = getHandle<PROD>({moduleLabel, instance});
449  return static_cast<bool>(result);
450  }
const std::string instance
template<typename PROD >
bool art::ProductRetriever::getByLabel ( std::string const &  label,
std::string const &  instance,
std::string const &  process,
Handle< PROD > &  result 
) const

Definition at line 433 of file ProductRetriever.h.

437  {
438  result = getHandle<PROD>({moduleLabel, productInstanceName, processName});
439  return static_cast<bool>(result);
440  }
template<typename PROD >
bool art::ProductRetriever::getByLabel ( InputTag const &  tag,
Handle< PROD > &  result 
) const

Definition at line 454 of file ProductRetriever.h.

455  {
456  result = getHandle<PROD>(tag);
457  return static_cast<bool>(result);
458  }
GroupQueryResult art::ProductRetriever::getByLabel_ ( WrappedTypeID const &  wrapped,
InputTag const &  tag 
) const
private

Definition at line 202 of file ProductRetriever.cc.

References branchType_, art::GroupQueryResult::failed(), art::Principal::getByLabel(), art::InputTag::instance(), art::ConsumesInfo::instance(), art::InputTag::label(), mc_, md_, mutex_, principal_, art::InputTag::process(), art::ModuleDescription::processName(), art::ProductInfo::Product, art::WrappedTypeID::product_type, recordAsParent_(), recordParents_, art::GroupQueryResult::result(), art::GroupQueryResult::succeeded(), and art::ConsumesInfo::validateConsumedProduct().

204  {
205  std::lock_guard lock{mutex_};
206  ProcessTag const processTag{tag.process(), md_.processName()};
207  ProductInfo const pinfo{ProductInfo::ConsumableType::Product,
208  wrapped.product_type,
209  tag.label(),
210  tag.instance(),
211  processTag};
213  GroupQueryResult qr = principal_.getByLabel(
214  mc_, wrapped, tag.label(), tag.instance(), processTag);
215  bool const ok = qr.succeeded() && !qr.failed();
216  if (recordParents_ && ok) {
217  recordAsParent_(qr.result());
218  }
219  return qr;
220  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
static ConsumesInfo * instance()
Definition: ConsumesInfo.cc:27
ModuleContext const & mc_
Principal const & principal_
BranchType const branchType_
std::string const & processName() const
ModuleDescription const & md_
std::recursive_mutex mutex_
void validateConsumedProduct(BranchType const, ModuleDescription const &, ProductInfo const &productInfo)
GroupQueryResult getByLabel(ModuleContext const &mc, WrappedTypeID const &wrapped, std::string const &label, std::string const &productInstanceName, ProcessTag const &processTag) const
Definition: Principal.cc:506
GroupQueryResult art::ProductRetriever::getByProductID_ ( ProductID  productID) const
private

Definition at line 238 of file ProductRetriever.cc.

References art::Principal::getByProductID(), mutex_, principal_, recordAsParent_(), recordParents_, and art::GroupQueryResult::succeeded().

239  {
240  std::lock_guard lock{mutex_};
241  auto qr = principal_.getByProductID(pid);
242  bool const ok = qr.succeeded() && !qr.failed();
243  if (recordParents_ && ok) {
244  recordAsParent_(qr.result());
245  }
246  return qr;
247  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
Principal const & principal_
std::recursive_mutex mutex_
GroupQueryResult getByProductID(ProductID const pid) const
Definition: Principal.cc:839
GroupQueryResult art::ProductRetriever::getBySelector_ ( WrappedTypeID const &  wrapped,
SelectorBase const &  selector 
) const
private

Definition at line 223 of file ProductRetriever.cc.

References art::Principal::getBySelector(), mc_, md_, mutex_, principal_, art::ModuleDescription::processName(), recordAsParent_(), recordParents_, and art::GroupQueryResult::succeeded().

225  {
226  std::lock_guard lock{mutex_};
227  // We do *not* track whether consumes was called for a SelectorBase.
228  ProcessTag const processTag{"", md_.processName()};
229  auto qr = principal_.getBySelector(mc_, wrapped, sel, processTag);
230  bool const ok = qr.succeeded() && !qr.failed();
231  if (recordParents_ && ok) {
232  recordAsParent_(qr.result());
233  }
234  return qr;
235  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
ModuleContext const & mc_
Principal const & principal_
std::string const & processName() const
ModuleDescription const & md_
GroupQueryResult getBySelector(ModuleContext const &mc, WrappedTypeID const &wrapped, SelectorBase const &, ProcessTag const &) const
Definition: Principal.cc:488
std::recursive_mutex mutex_
cet::exempt_ptr< Group const > art::ProductRetriever::getContainerForView_ ( TypeID const &  typeID,
std::string const &  moduleLabel,
std::string const &  productInstanceName,
ProcessTag const &  processTag 
) const
private

Definition at line 114 of file ProductRetriever.cc.

References branchType_, e, art::Principal::getMatchingSequence(), art::ConsumesInfo::instance(), mc_, md_, art::ProcessTag::name(), principal_, art::errors::ProductNotFound, art::resolve_products(), art::TypeID::typeInfo(), art::detail::upcastAllowed(), art::ConsumesInfo::validateConsumedProduct(), and art::ProductInfo::ViewElement.

118  {
119  // Check that the consumesView<ELEMENT, BT>(InputTag),
120  // or the mayConsumeView<ELEMENT, BT>(InputTag)
121  // is actually present.
123  branchType_,
124  md_,
126  typeID,
127  moduleLabel,
128  productInstanceName,
129  processTag});
130  // Fetch the specified data products, which must be containers.
131  auto const groups = principal_.getMatchingSequence(
132  mc_,
133  Selector{ModuleLabelSelector{moduleLabel} &&
134  ProductInstanceNameSelector{productInstanceName} &&
135  ProcessNameSelector{processTag.name()}},
136  processTag);
137  auto qrs = resolve_products(groups, TypeID{});
138  // Remove any containers that do not allow upcasting of their
139  // elements to the desired element type.
140  auto new_end =
141  remove_if(qrs.begin(), qrs.end(), [&typeID](auto const& gqr) {
142  auto const group = gqr.result();
143  assert(group->productDescription().supportsView());
144  return !detail::upcastAllowed(*group->uniqueProduct()->typeInfo(),
145  typeID.typeInfo());
146  });
147  qrs.erase(new_end, qrs.end());
148  // Throw if there is not one and only one container to return.
149  if (qrs.size() != 1) {
151  e << "getView: Found "
152  << (qrs.empty() ? "no products" : "more than one product")
153  << " matching all criteria\n"
154  << "Looking for sequence of type: " << typeID << '\n'
155  << "Looking for module label: " << moduleLabel << '\n'
156  << "Looking for productInstanceName: " << productInstanceName << '\n';
157  if (!processTag.name().empty()) {
158  e << "Looking for processName: " << processTag.name() << '\n';
159  }
160  throw e;
161  }
162  // And return the single result.
163  return qrs[0].result();
164  }
static ConsumesInfo * instance()
Definition: ConsumesInfo.cc:27
ModuleContext const & mc_
Principal const & principal_
BranchType const branchType_
ModuleDescription const & md_
std::vector< cet::exempt_ptr< Group > > getMatchingSequence(ModuleContext const &, SelectorBase const &, ProcessTag const &) const
Definition: Principal.cc:550
void validateConsumedProduct(BranchType const, ModuleDescription const &, ProductInfo const &productInfo)
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
bool upcastAllowed(std::type_info const &tiFrom, std::type_info const &tiTo)
Float_t e
Definition: plot.C:35
std::vector< GroupQueryResult > resolve_products(std::vector< cet::exempt_ptr< art::Group >> const &groups, art::TypeID const &wrapped_type)
Definition: Group.cc:428
template<typename PROD >
Handle< PROD > art::ProductRetriever::getHandle ( SelectorBase const &  sel) const
template<typename PROD >
Handle< PROD > art::ProductRetriever::getHandle ( ProductID const  pid) const

Definition at line 244 of file ProductRetriever.h.

245  {
246  auto qr = getByProductID_(pid);
247  return Handle<PROD>{qr};
248  }
GroupQueryResult getByProductID_(ProductID productID) const
template<typename PROD >
Handle< PROD > art::ProductRetriever::getHandle ( InputTag const &  tag) const

Definition at line 252 of file ProductRetriever.h.

253  {
254  auto qr = getByLabel_(WrappedTypeID::make<PROD>(), tag);
255  return Handle<PROD>{qr};
256  }
GroupQueryResult getByLabel_(WrappedTypeID const &wrapped, InputTag const &tag) const
template<typename PROD >
Handle< PROD > art::ProductRetriever::getHandle ( ProductToken< PROD > const &  token) const

Definition at line 260 of file ProductRetriever.h.

References art::ProductToken< T >::inputTag().

261  {
262  return getHandle<PROD>(token.inputTag());
263  }
template<typename PROD >
std::vector< InputTag > art::ProductRetriever::getInputTags ( SelectorBase const &  selector = MatchAllSelector{}) const

Definition at line 283 of file ProductRetriever.h.

284  {
285  return getInputTags_(WrappedTypeID::make<PROD>(), selector);
286  }
std::vector< InputTag > getInputTags_(WrappedTypeID const &wrapped, SelectorBase const &selector) const
std::vector< InputTag > art::ProductRetriever::getInputTags_ ( WrappedTypeID const &  wrapped,
SelectorBase const &  selector 
) const
private

Definition at line 194 of file ProductRetriever.cc.

References art::Principal::getInputTags(), mc_, md_, principal_, and art::ModuleDescription::processName().

196  {
197  ProcessTag const processTag{"", md_.processName()};
198  return principal_.getInputTags(mc_, wrapped, selector, processTag);
199  }
std::vector< InputTag > getInputTags(ModuleContext const &mc, WrappedTypeID const &wrapped, SelectorBase const &, ProcessTag const &) const
Definition: Principal.cc:520
ModuleContext const & mc_
Principal const & principal_
std::string const & processName() const
ModuleDescription const & md_
template<typename PROD >
std::vector< Handle< PROD > > art::ProductRetriever::getMany ( SelectorBase const &  selector = MatchAllSelector{}) const

Definition at line 303 of file ProductRetriever.h.

Referenced by opdet::PhotonInf::analyze(), opdet::SimPhotonCounter::analyze(), nnet::RawWaveformDump::analyze(), nnet::RawWaveformClnSigDump::analyze(), artg4tk::dataFromRunOrService(), evd::RecoBaseDrawer::DrawShower3D(), evd::RecoBaseDrawer::DrawShowerOrtho(), evd::RecoBaseDrawer::DrawTrack3D(), evd::RecoBaseDrawer::DrawTrackOrtho(), simfilter::FilterCryostatNus::filter(), simfilter::FilterGenInTime::filter(), artg4tk::PrimaryEventActionService::generatePrimaries(), evdb_tool::DrawLArVoxel3D::GetMCTruth(), evd::SimulationDrawer::GetMCTruth(), evwgh::PPFXThinNucAWeightCalc::GetWeight(), evwgh::PPFXCVWeightCalc::GetWeight(), evwgh::PPFXTotAbsorpWeightCalc::GetWeight(), evwgh::PPFXWeightCalc::GetWeight(), evwgh::PPFXMIPPPionWeightCalc::GetWeight(), evwgh::PPFXOtherWeightCalc::GetWeight(), evwgh::PPFXTargAttenWeightCalc::GetWeight(), evwgh::PPFXThinKaonWeightCalc::GetWeight(), evwgh::PPFXThinMesonWeightCalc::GetWeight(), evwgh::PPFXMIPPKaonWeightCalc::GetWeight(), evwgh::PPFXThinNucWeightCalc::GetWeight(), evwgh::PPFXThinPionWeightCalc::GetWeight(), evwgh::PPFXThinNeutronPionWeightCalc::GetWeight(), larg4::IonAndScint::inputCollections(), larg4::larg4Main::inputCollections(), evgb::MCTruthAndFriendsItr::MCTruthAndFriendsItr(), geo::AuxDetGeometry::preBeginRun(), sim::GenericCRT::produce(), sim::PhotonHitConverter::produce(), larg4::LArG4::produce(), geo::GeometryConfigurationWriter::readRunData(), and evdb::ScanFrame::Record().

304  {
305  auto const qrs = getMany_(WrappedTypeID::make<PROD>(), sel);
306  std::vector<Handle<PROD>> products;
307  products.reserve(qrs.size());
308  cet::transform_all(qrs, back_inserter(products), [](auto const& qr) {
309  return Handle<PROD>{qr};
310  });
311  return products;
312  }
std::vector< GroupQueryResult > getMany_(WrappedTypeID const &wrapped, SelectorBase const &sel) const
std::vector< GroupQueryResult > art::ProductRetriever::getMany_ ( WrappedTypeID const &  wrapped,
SelectorBase const &  sel 
) const
private

Definition at line 250 of file ProductRetriever.cc.

References branchType_, art::Principal::getMany(), art::ConsumesInfo::instance(), art::ProductInfo::Many, mc_, md_, mutex_, principal_, art::ModuleDescription::processName(), art::WrappedTypeID::product_type, recordAsParent_(), recordParents_, and art::ConsumesInfo::validateConsumedProduct().

252  {
253  std::lock_guard lock{mutex_};
255  branchType_,
256  md_,
257  ProductInfo{ProductInfo::ConsumableType::Many, wrapped.product_type});
258  ProcessTag const processTag{"", md_.processName()};
259  auto qrs = principal_.getMany(mc_, wrapped, sel, processTag);
260  for (auto const& qr : qrs) {
261  if (recordParents_) {
262  recordAsParent_(qr.result());
263  }
264  }
265  return qrs;
266  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
static ConsumesInfo * instance()
Definition: ConsumesInfo.cc:27
ModuleContext const & mc_
Principal const & principal_
BranchType const branchType_
std::string const & processName() const
ModuleDescription const & md_
std::recursive_mutex mutex_
void validateConsumedProduct(BranchType const, ModuleDescription const &, ProductInfo const &productInfo)
std::vector< GroupQueryResult > getMany(ModuleContext const &mc, WrappedTypeID const &wrapped, SelectorBase const &, ProcessTag const &) const
Definition: Principal.cc:534
std::optional< fhicl::ParameterSet const > art::ProductRetriever::getProcessParameterSet ( std::string const &  process) const

Definition at line 53 of file ProductRetriever.cc.

References fhicl::ParameterSetRegistry::get(), art::ProcessHistory::getConfigurationForProcess(), mutex_, principal_, and art::Principal::processHistory().

54  {
55  std::lock_guard lock{mutex_};
56  auto const config =
58  if (!config) {
59  return std::nullopt;
60  }
61 
62  if (fhicl::ParameterSet ps;
63  fhicl::ParameterSetRegistry::get(config->parameterSetID(), ps)) {
64  return std::make_optional(std::move(ps));
65  }
66  return std::nullopt;
67  }
static collection_type const & get() noexcept
Principal const & principal_
std::recursive_mutex mutex_
ProcessHistory const & processHistory() const
Definition: Principal.cc:247
std::optional< ProcessConfiguration > getConfigurationForProcess(std::string const &name) const
template<typename PROD >
PROD const & art::ProductRetriever::getProduct ( InputTag const &  tag) const
template<typename PROD >
PROD const & art::ProductRetriever::getProduct ( ProductToken< PROD > const &  token) const

Definition at line 228 of file ProductRetriever.h.

229  {
230  return *getValidHandle(token);
231  }
ValidHandle< PROD > getValidHandle(InputTag const &tag) const
cet::exempt_ptr< BranchDescription const > art::ProductRetriever::getProductDescription ( ProductID  pid) const

Definition at line 95 of file ProductRetriever.cc.

References art::Principal::getProductDescription(), and principal_.

96  {
98  }
Principal const & principal_
cet::exempt_ptr< BranchDescription const > getProductDescription(ProductID const pid, bool const alwaysEnableLookupOfProducedProducts=false) const
Definition: Principal.cc:779
template<typename PROD >
ProductID art::ProductRetriever::getProductID ( std::string const &  instance_name = "") const
ProductID art::ProductRetriever::getProductID_ ( TypeID const &  typeID,
std::string const &  instance 
) const
private

Definition at line 167 of file ProductRetriever.cc.

References branchType_, art::canonicalProductName(), art::TypeID::friendlyClassName(), art::Principal::getProductDescription(), instance, md_, art::ModuleDescription::moduleLabel(), mutex_, principal_, art::ModuleDescription::processName(), and art::errors::ProductRegistrationFailure.

169  {
170  std::lock_guard lock{mutex_};
171  auto const& product_name = canonicalProductName(
172  type.friendlyClassName(), md_.moduleLabel(), instance, md_.processName());
173  ProductID const pid{product_name};
174  auto desc = principal_.getProductDescription(pid);
175  if (!desc) {
177  "ProductRetriever::getProductID: error while trying to "
178  "retrieve product description:\n")
179  << "No product is registered for\n"
180  << " process name: '" << md_.processName() << "'\n"
181  << " module label: '" << md_.moduleLabel() << "'\n"
182  << " product friendly class name: '" << type.friendlyClassName()
183  << "'\n"
184  << " product instance name: '" << instance << "'\n"
185  << " branch type: '" << branchType_ << "'\n";
186  }
187  // The description object is owned by either the source or the
188  // event processor, whose lifetimes exceed that of the
189  // ProductRetriever object. It is therefore safe to dereference.
190  return desc->productID();
191  }
std::string const & moduleLabel() const
const std::string instance
Principal const & principal_
BranchType const branchType_
std::string const & processName() const
ModuleDescription const & md_
cet::exempt_ptr< BranchDescription const > getProductDescription(ProductID const pid, bool const alwaysEnableLookupOfProducedProducts=false) const
Definition: Principal.cc:779
std::recursive_mutex mutex_
std::string canonicalProductName(std::string const &friendlyClassName, std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName)
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::optional< Provenance const > art::ProductRetriever::getProductProvenance ( ProductID  pid) const

Definition at line 78 of file ProductRetriever.cc.

References art::Principal::getByProductID(), principal_, and art::GroupQueryResult::result().

79  {
80  auto gqr = principal_.getByProductID(pid);
81  if (gqr.failed()) {
82  return std::nullopt;
83  }
84 
85  auto group = gqr.result();
86  if (!group->productProvenance()) {
87  // This can happen if someone tries to access the provenance
88  // before the product has been produced.
89  return std::nullopt;
90  }
91  return std::make_optional<Provenance const>(group);
92  }
Principal const & principal_
cet::exempt_ptr< Group > result() const
GroupQueryResult getByProductID(ProductID const pid) const
Definition: Principal.cc:839
template<typename PROD >
std::vector< ProductToken< PROD > > art::ProductRetriever::getProductTokens ( SelectorBase const &  selector = MatchAllSelector{}) const

Definition at line 290 of file ProductRetriever.h.

291  {
292  auto const tags = getInputTags<PROD>(selector);
293  std::vector<ProductToken<PROD>> tokens;
294  tokens.reserve(tags.size());
295  cet::transform_all(tags, back_inserter(tokens), [](auto const& tag) {
296  return ProductToken<PROD>{tag};
297  });
298  return tokens;
299  }
template<typename PROD >
ValidHandle< PROD > art::ProductRetriever::getValidHandle ( InputTag const &  tag) const

Definition at line 268 of file ProductRetriever.h.

References art::ValidHandle< T >::product().

Referenced by quad::EvalVtx::analyze(), hit::MCHitAnaExample::analyze(), detsim::SimDriftedElectronClusterAna::analyze(), larg::LArSimChannelAna::analyze(), vertex::FeatureVertexFinderAna::analyze(), ShowerQuality::analyze(), recob::DumpVertices::analyze(), hit::HitAnaModule::analyze(), nnet::WaveformDenoiseTest::analyze(), nnet::NoiseWaveformDump::analyze(), nnet::EvaluateROIEff::analyze(), sim::DumpMCTruth::analyze(), recob::DumpPCAxes::analyze(), recob::DumpSeeds::analyze(), recob::DumpSpacePoints::analyze(), sim::DumpGTruth::analyze(), hit::DumpHits::analyze(), recob::DumpClusters::analyze(), nnet::RawWaveformDump::analyze(), nnet::PointIdEffTest::analyze(), detsim::DumpRawDigits::analyze(), caldata::DumpWires::analyze(), nnet::RawWaveformClnSigDump::analyze(), recob::DumpPFParticles::analyze(), recob::DumpTracks::analyze(), ShowerRecoTools::ShowerExampleTool::CalculateElement(), ShowerRecoTools::ShowerLengthPercentile::CalculateElement(), ShowerRecoTools::ShowerTrackTrajToSpacePoint::CalculateElement(), ShowerRecoTools::Shower3DCylinderTrackHitFinder::CalculateElement(), ShowerRecoTools::ShowerTrackHitDirection::CalculateElement(), ShowerRecoTools::ShowerStartPositionCheater::CalculateElement(), ShowerRecoTools::ShowerTrackFinderCheater::CalculateElement(), ShowerRecoTools::ShowerPCAPropergationStartPosition::CalculateElement(), ShowerRecoTools::ShowerPFPVertexStartPosition::CalculateElement(), ShowerRecoTools::Shower2DLinearRegressionTrackHitFinder::CalculateElement(), ShowerRecoTools::ShowerLinearEnergy::CalculateElement(), ShowerRecoTools::ShowerDirectionCheater::CalculateElement(), ShowerRecoTools::ShowerTrackPCADirection::CalculateElement(), ShowerRecoTools::ShowerNumElectronsEnergy::CalculateElement(), ShowerRecoTools::ShowerPCADirection::CalculateElement(), ShowerRecoTools::ShowerIncrementalTrackHitFinder::CalculateElement(), ShowerRecoTools::ShowerTrajPointdEdx::CalculateElement(), shower::LArPandoraShowerCheatingAlg::CheatDebugEVD(), nnet::EmTrack< N >::classify_hits(), t0::IndirectHitParticleAssns::CreateHitParticleAssociations(), t0::DirectHitParticleAssns::CreateHitParticleAssociations(), shower::LArPandoraShowerAlg::DebugEVD(), simfilter::FilterNoMCParticles::filter(), simfilter::FilterSimPhotonTime::filter(), cluster::SmallClusterFilter::filter(), simfilter::FilterSimPhotonLiteTime::filter(), anab::FVectorReader< T, N >::FVectorReader(), quad::GetFirstVertex(), trkmkr::KalmanFilterFitTrackMaker::initEvent(), nnet::EmTrack< N >::make_clusters(), nnet::EmTrack< N >::make_tracks(), MCReco::MakeMCEdep(), lar_cluster3d::StandardHit3DBuilder::makeRawDigitAssns(), lar_cluster3d::SnippetHit3DBuilder::makeRawDigitAssns(), lar_cluster3d::StandardHit3DBuilder::makeWireAssns(), lar_cluster3d::SnippetHit3DBuilder::makeWireAssns(), MCReco::produce(), hit::HitFinder::produce(), trkf::TCTrack::produce(), reco::shower::LArPandoraModularShowerCreation::produce(), cluster::LineCluster::produce(), opdet::OpFlashFinder::produce(), cluster::ClusterCrawler::produce(), hit::HitCheater::produce(), opdet::OpMCDigi::produce(), evwgh::EventWeight::produce(), spacecharge::ShiftEdepSCE::produce(), NuSliceHitsProducer::produce(), cluster::DBCluster3D::produce(), cluster::HoughLineFinder::produce(), TrackProducerFromTrack::produce(), TrackProducerFromTrackTrajectory::produce(), calo::ShowerCalorimetry::produce(), cluster::TrajCluster::produce(), TrackProducerFromPFParticle::produce(), trkf::VertexFitter::produce(), nnet::EmTrack< N >::produce(), nnet::ParticleDecayId::produce(), t0::MCTruthT0Matching::produce(), nnet::EmTrackClusterId2out::produce(), nnet::EmTrackClusterId::produce(), nnet::EmTrackMichelId::produce(), trkf::KalmanFilterTrajectoryFitter::produce(), trkf::PMAlgTrackMaker::produce(), sim::MergeSimSources::produce(), phot::PhotonLibraryPropagation::produce(), and trkf::KalmanFilterFinalTrackFitter::produce().

269  {
270  auto h = getHandle<PROD>(tag);
271  return ValidHandle{h.product(), h.productGetter(), *h.provenance()};
272  }
template<typename PROD >
ValidHandle< PROD > art::ProductRetriever::getValidHandle ( ProductToken< PROD > const &  token) const

Definition at line 276 of file ProductRetriever.h.

References art::ProductToken< T >::inputTag().

277  {
278  return getValidHandle<PROD>(token.inputTag());
279  }
template<typename ELEMENT >
std::size_t art::ProductRetriever::getView ( std::string const &  moduleLabel,
std::string const &  productInstanceName,
std::string const &  processName,
std::vector< ELEMENT const * > &  result 
) const

Definition at line 316 of file ProductRetriever.h.

Referenced by larg4::LArG4Ana::analyze(), pmtana::PMTAna::analyze(), opdet::SimPhotonCounter::analyze(), evd::RecoBaseDrawer::CountHits(), cluster::ClusterMatchAlg::FillMCInfo(), filter::ADCFilter::filter(), evd::RecoBaseDrawer::GetHits(), sim::SimListUtils::GetLArVoxelList(), evd::SimulationDrawer::GetParticle(), evd::RecoBaseDrawer::GetShowers(), evd::RecoBaseDrawer::GetTracks(), opdet::OpticalRawDigitReformatter::produce(), event::EventCheater::produce(), hit::HitCheater::produce(), detsim::SimWire::produce(), and opdet::OpHitFinder::produce().

320  {
321  std::lock_guard lock{mutex_};
322  std::size_t const orig_size = result.size();
323  auto grp = getContainerForView_(TypeID{typeid(ELEMENT)},
324  moduleLabel,
325  productInstanceName,
326  ProcessTag{processName, md_.processName()});
327  if (recordParents_) {
328  recordAsParent_(grp);
329  }
330  auto const view = grp->uniqueProduct()->getView();
331  std::vector<ELEMENT const*> castedView;
332  for (auto p : view) {
333  castedView.push_back(static_cast<ELEMENT const*>(p));
334  }
335  result = std::move(castedView);
336  return result.size() - orig_size;
337  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
std::string const & processName() const
ModuleDescription const & md_
std::recursive_mutex mutex_
cet::exempt_ptr< Group const > getContainerForView_(TypeID const &, std::string const &moduleLabel, std::string const &productInstanceName, ProcessTag const &processTag) const
template<typename ELEMENT >
std::size_t art::ProductRetriever::getView ( std::string const &  moduleLabel,
std::string const &  productInstanceName,
std::vector< ELEMENT const * > &  result 
) const

Definition at line 341 of file ProductRetriever.h.

344  {
345  return getView(moduleLabel, productInstanceName, {}, result);
346  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
template<typename ELEMENT >
std::size_t art::ProductRetriever::getView ( InputTag const &  tag,
std::vector< ELEMENT const * > &  result 
) const

Definition at line 350 of file ProductRetriever.h.

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

352  {
353  return getView(tag.label(), tag.instance(), tag.process(), result);
354  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
template<typename ELEMENT >
std::size_t art::ProductRetriever::getView ( ViewToken< ELEMENT > const &  token,
std::vector< ELEMENT const * > &  result 
) const

Definition at line 358 of file ProductRetriever.h.

References art::ViewToken< Element >::inputTag().

360  {
361  return getView(token.inputTag(), result);
362  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
template<typename ELEMENT >
bool art::ProductRetriever::getView ( std::string const &  moduleLabel,
std::string const &  productInstanceName,
std::string const &  processName,
View< ELEMENT > &  result 
) const

Definition at line 366 of file ProductRetriever.h.

370  {
371  std::lock_guard lock{mutex_};
372  auto grp = getContainerForView_(TypeID{typeid(ELEMENT)},
373  moduleLabel,
374  productInstanceName,
375  ProcessTag{processName, md_.processName()});
376  if (recordParents_) {
377  recordAsParent_(grp);
378  }
379  auto const view = grp->uniqueProduct()->getView();
380  std::vector<ELEMENT const*> castedView;
381  for (auto p : view) {
382  castedView.push_back(static_cast<ELEMENT const*>(p));
383  }
384  result =
385  View{std::move(castedView), grp->productID(), grp->uniqueProduct()};
386  return true;
387  }
void recordAsParent_(cet::exempt_ptr< Group const > grp) const
std::string const & processName() const
ModuleDescription const & md_
std::recursive_mutex mutex_
cet::exempt_ptr< Group const > getContainerForView_(TypeID const &, std::string const &moduleLabel, std::string const &productInstanceName, ProcessTag const &processTag) const
template<typename ELEMENT >
bool art::ProductRetriever::getView ( std::string const &  moduleLabel,
std::string const &  productInstanceName,
View< ELEMENT > &  result 
) const

Definition at line 391 of file ProductRetriever.h.

394  {
395  return getView(moduleLabel, productInstanceName, {}, result);
396  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
template<typename ELEMENT >
bool art::ProductRetriever::getView ( InputTag const &  tag,
View< ELEMENT > &  result 
) const

Definition at line 400 of file ProductRetriever.h.

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

401  {
402  return getView(tag.label(), tag.instance(), tag.process(), result);
403  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
template<typename ELEMENT >
bool art::ProductRetriever::getView ( ViewToken< ELEMENT > const &  token,
View< ELEMENT > &  result 
) const

Definition at line 407 of file ProductRetriever.h.

References art::ViewToken< Element >::inputTag().

409  {
410  return getView(token.inputTag(), result);
411  }
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
ProductRetriever& art::ProductRetriever::operator= ( ProductRetriever const &  )
delete
ProductRetriever& art::ProductRetriever::operator= ( ProductRetriever )
delete
void art::ProductRetriever::recordAsParent_ ( cet::exempt_ptr< Group const >  grp) const
private

Definition at line 101 of file ProductRetriever.cc.

References util::cbegin(), util::cend(), and retrievedProducts_.

Referenced by getByLabel_(), getByProductID_(), getBySelector_(), and getMany_().

102  {
103  if (grp->productDescription().transient()) {
104  // If the product retrieved is transient, don't use its
105  // ProductID; use the ProductID's of its parents.
106  auto const& parents = grp->productProvenance()->parentage().parents();
107  retrievedProducts_.insert(cbegin(parents), cend(parents));
108  } else {
109  retrievedProducts_.insert(grp->productDescription().productID());
110  }
111  }
decltype(auto) constexpr cend(T &&obj)
ADL-aware version of std::cend.
Definition: StdUtils.h:93
std::set< ProductID > retrievedProducts_
decltype(auto) constexpr cbegin(T &&obj)
ADL-aware version of std::cbegin.
Definition: StdUtils.h:85
std::vector< ProductID > art::ProductRetriever::retrievedPIDs ( ) const

Definition at line 70 of file ProductRetriever.cc.

References util::begin(), util::end(), mutex_, and retrievedProducts_.

Referenced by art::Event::commitProducts().

71  {
72  std::lock_guard lock{mutex_};
73  return std::vector<ProductID>(begin(retrievedProducts_),
75  }
std::set< ProductID > retrievedProducts_
decltype(auto) constexpr end(T &&obj)
ADL-aware version of std::end.
Definition: StdUtils.h:77
std::recursive_mutex mutex_
decltype(auto) constexpr begin(T &&obj)
ADL-aware version of std::begin.
Definition: StdUtils.h:69

Member Data Documentation

BranchType const art::ProductRetriever::branchType_
private

Definition at line 189 of file ProductRetriever.h.

Referenced by getByLabel_(), getContainerForView_(), getMany_(), and getProductID_().

ModuleContext const& art::ProductRetriever::mc_
private
ModuleDescription const& art::ProductRetriever::md_
private
std::recursive_mutex art::ProductRetriever::mutex_ {}
mutableprivate
bool const art::ProductRetriever::recordParents_
private
std::set<ProductID> art::ProductRetriever::retrievedProducts_ {}
mutableprivate

Definition at line 208 of file ProductRetriever.h.

Referenced by recordAsParent_(), and retrievedPIDs().


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