LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
art::SubRunPrincipal Class Referencefinal

#include "SubRunPrincipal.h"

Inheritance diagram for art::SubRunPrincipal:
art::Principal art::EDProductGetterFinder

Public Types

using Auxiliary = SubRunAuxiliary
 
using GroupCollection = std::map< ProductID, std::unique_ptr< Group >>
 
using const_iterator = GroupCollection::const_iterator
 
using ProcessNameConstIterator = ProcessHistory::const_iterator
 
using GroupQueryResultVec = std::vector< GroupQueryResult >
 
using size_type = GroupCollection::size_type
 
using ProcessName = std::string
 

Public Member Functions

 SubRunPrincipal (SubRunAuxiliary const &, ProcessConfiguration const &, cet::exempt_ptr< ProductTable const > presentProducts, std::unique_ptr< BranchMapper > &&=std::make_unique< BranchMapper >(), std::unique_ptr< DelayedReader > &&=std::make_unique< NoDelayedReader >())
 
RunPrincipal const & runPrincipal () const
 
cet::exempt_ptr< RunPrincipal const > runPrincipalExemptPtr () const
 
void setRunPrincipal (cet::exempt_ptr< RunPrincipal const > rp)
 
SubRunAuxiliary const & aux () const
 
SubRunID id () const
 
RunNumber_t run () const
 
SubRunNumber_t subRun () const
 
Timestamp const & beginTime () const
 
Timestamp const & endTime () const
 
void setEndTime (Timestamp const &time)
 
void put (std::unique_ptr< EDProduct > &&, BranchDescription const &, std::unique_ptr< ProductProvenance const > &&, RangeSet &&)
 
void fillGroup (BranchDescription const &) override
 
RangeSet seenRanges () const override
 
void updateSeenRanges (RangeSet const &rs)
 
BranchType branchType () const override
 
EDProductGetter const * productGetter (ProductID const pid) const
 
OutputHandle getForOutput (ProductID const, bool resolveProd) const
 
GroupQueryResult getBySelector (WrappedTypeID const &wrapped, SelectorBase const &) const
 
GroupQueryResult getByProductID (ProductID const pid) const
 
GroupQueryResult getByLabel (WrappedTypeID const &wrapped, std::string const &label, std::string const &productInstanceName, std::string const &processName) const
 
GroupQueryResultVec getMany (WrappedTypeID const &wrapped, SelectorBase const &) const
 
GroupQueryResultVec getMatchingSequence (SelectorBase const &) const
 
void removeCachedProduct (ProductID const pid) const
 
void addSecondaryPrincipal (std::unique_ptr< Principal > &&val)
 
void setProducedProducts (ProductTable const &producedProducts)
 
void readImmediate () const
 
void readProvenanceImmediate () const
 
ProcessHistory const & processHistory () const
 
ProcessConfiguration const & processConfiguration () const
 
BranchMapper const & branchMapper () const
 
size_t size () const
 
const_iterator begin () const
 
const_iterator cbegin () const
 
const_iterator end () const
 
const_iterator cend () const
 
void addToProcessHistory ()
 
EDProductGetter const * getEDProductGetter (ProductID const pid) const
 

Static Public Attributes

static constexpr BranchType branch_type = Auxiliary::branch_type
 

Protected Member Functions

BranchMapperbranchMapper ()
 
void fillGroup (std::unique_ptr< Group > &&group)
 
DelayedReaderproductReader ()
 
int tryNextSecondaryFile () const
 
cet::exempt_ptr< Group const > getGroupForPtr (ProductID const pid) const
 
cet::exempt_ptr< Group const > getGroup (ProductID const pid) const
 
cet::exempt_ptr< Group const > getResolvedGroup (ProductID const pid, bool resolveProd) const
 

Private Member Functions

ProcessHistoryID const & processHistoryID () const override
 
void setProcessHistoryID (ProcessHistoryID const &phid) override
 

Private Attributes

SubRunAuxiliary aux_
 
cet::exempt_ptr< RunPrincipal const > runPrincipal_ {nullptr}
 
RangeSet rangeSet_ {RangeSet::invalid()}
 

Detailed Description

Definition at line 28 of file SubRunPrincipal.h.

Member Typedef Documentation

using art::Principal::const_iterator = GroupCollection::const_iterator
inherited

Definition at line 52 of file Principal.h.

using art::Principal::GroupCollection = std::map<ProductID, std::unique_ptr<Group>>
inherited

Definition at line 51 of file Principal.h.

using art::Principal::GroupQueryResultVec = std::vector<GroupQueryResult>
inherited

Definition at line 54 of file Principal.h.

using art::Principal::ProcessName = std::string
inherited

Definition at line 56 of file Principal.h.

using art::Principal::size_type = GroupCollection::size_type
inherited

Definition at line 55 of file Principal.h.

Constructor & Destructor Documentation

art::SubRunPrincipal::SubRunPrincipal ( SubRunAuxiliary const &  aux,
ProcessConfiguration const &  pc,
cet::exempt_ptr< ProductTable const >  presentProducts,
std::unique_ptr< BranchMapper > &&  mapper = std::make_unique<BranchMapper>(),
std::unique_ptr< DelayedReader > &&  rtrv = std::make_unique<NoDelayedReader>() 
)

Definition at line 12 of file SubRunPrincipal.cc.

References art::Principal::addToProcessHistory(), aux(), aux_, art::ProductMetaData::instance(), art::InSubRun, art::SubRunAuxiliary::processHistoryID_, art::Principal::productReader(), and art::DelayedReader::setGroupFinder().

18  : Principal{pc,
20  presentProducts,
21  std::move(mapper),
22  std::move(rtrv)}
23  , aux_{aux}
24  {
26  cet::exempt_ptr<EDProductGetterFinder const>{this});
27  if (ProductMetaData::instance().productProduced(InSubRun)) {
29  }
30  }
void setGroupFinder(cet::exempt_ptr< EDProductGetterFinder const > ep)
Definition: DelayedReader.h:38
SubRunAuxiliary aux_
Principal(Principal const &)=delete
DelayedReader & productReader()
Definition: Principal.h:198
ProcessHistoryID processHistoryID_
void addToProcessHistory()
Definition: Principal.cc:80
static ProductMetaData const & instance()
SubRunAuxiliary const & aux() const

Member Function Documentation

void art::Principal::addSecondaryPrincipal ( std::unique_ptr< Principal > &&  val)
inlineinherited

Definition at line 100 of file Principal.h.

References art::Principal::secondaryPrincipals_.

101  {
102  secondaryPrincipals_.emplace_back(std::move(val));
103  }
std::vector< std::unique_ptr< Principal > > secondaryPrincipals_
Definition: Principal.h:293
void Principal::addToProcessHistory ( )
inherited

Definition at line 80 of file Principal.cc.

References art::errors::Configuration, art::thread_safe_registry_via_id< K, M >::emplace(), art::Principal::processConfiguration_, art::Principal::processHistory_, art::Principal::processHistoryModified_, art::ProcessConfiguration::processName(), and art::Principal::setProcessHistoryID().

Referenced by art::Principal::cend(), art::EventPrincipal::EventPrincipal(), art::RunPrincipal::RunPrincipal(), SubRunPrincipal(), art::RootOutput::write(), art::RootOutput::writeRun(), and art::RootOutput::writeSubRun().

81 {
83  return;
84  }
85  string const& processName = processConfiguration_.processName();
86  for (auto const& val : processHistory_) {
87  if (processName == val.processName()) {
89  << "The process name " << processName
90  << " was previously used on these products.\n"
91  << "Please modify the configuration file to use a "
92  << "distinct process name.\n";
93  }
94  }
95  processHistory_.push_back(processConfiguration_);
96  // OPTIMIZATION NOTE: As of 0_9_0_pre3 For very simple Sources
97  // (e.g. EmptyEvent) this routine takes up nearly 50% of the time
98  // per event, and 96% of the time for this routine is spent in
99  // computing the ProcessHistory id which happens because we are
100  // reconstructing the ProcessHistory for each event. It would
101  // probably be better to move the ProcessHistory construction out to
102  // somewhere which persists for longer than one Event.
103  auto const phid = processHistory_.id();
104  ProcessHistoryRegistry::emplace(phid, processHistory_);
105  setProcessHistoryID(phid);
107 }
ProcessHistory processHistory_
Definition: Principal.h:268
bool processHistoryModified_
Definition: Principal.h:277
std::string const & processName() const
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
ProcessConfiguration const & processConfiguration_
Definition: Principal.h:270
static auto emplace(value_type const &value)
virtual void setProcessHistoryID(ProcessHistoryID const &)=0
SubRunAuxiliary const& art::SubRunPrincipal::aux ( ) const
inline

Definition at line 54 of file SubRunPrincipal.h.

References aux_.

Referenced by beginTime(), endTime(), id(), processHistoryID(), run(), setProcessHistoryID(), subRun(), SubRunPrincipal(), and art::RootOutputFile::writeSubRun().

55  {
56  return aux_;
57  }
SubRunAuxiliary aux_
const_iterator art::Principal::begin ( ) const
inlineinherited

Definition at line 156 of file Principal.h.

References art::Principal::groups_.

157  {
158  return groups_.begin();
159  }
GroupCollection groups_
Definition: Principal.h:280
Timestamp const& art::SubRunPrincipal::beginTime ( ) const
inline

Definition at line 74 of file SubRunPrincipal.h.

References aux(), and art::SubRunAuxiliary::beginTime().

75  {
76  return aux().beginTime();
77  }
Timestamp const & beginTime() const
SubRunAuxiliary const & aux() const
BranchMapper const& art::Principal::branchMapper ( ) const
inlineinherited
BranchMapper& art::Principal::branchMapper ( )
inlineprotectedinherited

Definition at line 192 of file Principal.h.

References art::Principal::branchMapperPtr_.

193  {
194  return *branchMapperPtr_;
195  }
std::unique_ptr< BranchMapper > branchMapperPtr_
Definition: Principal.h:284
BranchType art::SubRunPrincipal::branchType ( ) const
inlineoverridevirtual

Implements art::Principal.

Definition at line 109 of file SubRunPrincipal.h.

References branch_type, processHistoryID(), and setProcessHistoryID().

110  {
111  return branch_type;
112  }
static constexpr BranchType branch_type
const_iterator art::Principal::cbegin ( ) const
inlineinherited

Definition at line 162 of file Principal.h.

References art::Principal::groups_.

163  {
164  return groups_.cbegin();
165  }
GroupCollection groups_
Definition: Principal.h:280
const_iterator art::Principal::cend ( ) const
inlineinherited
const_iterator art::Principal::end ( void  ) const
inlineinherited

Definition at line 168 of file Principal.h.

References art::Principal::groups_.

169  {
170  return groups_.end();
171  }
GroupCollection groups_
Definition: Principal.h:280
Timestamp const& art::SubRunPrincipal::endTime ( ) const
inline

Definition at line 79 of file SubRunPrincipal.h.

References aux(), and art::SubRunAuxiliary::endTime().

Referenced by art::BeginEndPackage< Level::SubRun >::End::preScheduleSignal().

80  {
81  return aux().endTime();
82  }
Timestamp const & endTime() const
SubRunAuxiliary const & aux() const
void art::SubRunPrincipal::fillGroup ( BranchDescription const &  pd)
overridevirtual

Implements art::Principal.

Definition at line 45 of file SubRunPrincipal.cc.

References art::Principal::fillGroup(), art::RangeSet::invalid(), art::gfactory::make_group(), and art::BranchDescription::productID().

Referenced by setEndTime().

46  {
48  gfactory::make_group(pd, pd.productID(), RangeSet::invalid()));
49  }
virtual void fillGroup(BranchDescription const &)=0
static RangeSet invalid()
Definition: RangeSet.cc:46
std::unique_ptr< Group > make_group(BranchDescription const &, ProductID const &, RangeSet &&)
Definition: GroupFactory.h:44
void art::Principal::fillGroup ( std::unique_ptr< Group > &&  group)
inlineprotectedinherited
GroupQueryResult Principal::getByLabel ( WrappedTypeID const &  wrapped,
std::string const &  label,
std::string const &  productInstanceName,
std::string const &  processName 
) const
inherited

Definition at line 143 of file Principal.cc.

References art::Principal::findGroupsForProduct(), art::WrappedTypeID::product_type, and art::errors::ProductNotFound.

Referenced by art::DataViewImpl::getByLabel_().

147 {
148  Selector const sel{ModuleLabelSelector{label} &&
149  ProductInstanceNameSelector{productInstanceName} &&
150  ProcessNameSelector{processName}};
151  auto const& results = findGroupsForProduct(wrapped, sel, true);
152  if (results.empty()) {
153  auto whyFailed =
154  std::make_shared<art::Exception>(art::errors::ProductNotFound);
155  *whyFailed << "getByLabel: Found zero products matching all criteria\n"
156  << "Looking for type: " << wrapped.product_type << "\n"
157  << "Looking for module label: " << label << "\n"
158  << "Looking for productInstanceName: " << productInstanceName
159  << "\n"
160  << (processName.empty() ? "" : "Looking for process: ")
161  << processName;
162  return GroupQueryResult{whyFailed};
163  }
164  if (results.size() > 1) {
166  << "getByLabel: Found " << results.size()
167  << " products rather than one which match all criteria\n"
168  << "Looking for type: " << wrapped.product_type << "\n"
169  << "Looking for module label: " << label << "\n"
170  << "Looking for productInstanceName: " << productInstanceName << "\n"
171  << (processName.empty() ? "" : "Looking for process: ") << processName
172  << "\n";
173  }
174  return results[0];
175 }
GroupQueryResultVec findGroupsForProduct(WrappedTypeID const &wrapped, SelectorBase const &, bool stopIfProcessHasMatch) const
Definition: Principal.cc:278
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
GroupQueryResult Principal::getByProductID ( ProductID const  pid) const
inherited

Definition at line 131 of file Principal.cc.

References art::Principal::getGroupForPtr(), and art::errors::ProductNotFound.

Referenced by art::DataViewImpl::getByProductID_(), art::Principal::getEDProductGetterImpl(), and art::Principal::productGetter().

132 {
133  if (auto const g = getGroupForPtr(pid)) {
134  return GroupQueryResult{g};
135  }
136  auto whyFailed =
137  std::make_shared<art::Exception>(art::errors::ProductNotFound, "InvalidID");
138  *whyFailed << "getGroup: no product with given product id: " << pid << "\n";
139  return GroupQueryResult{whyFailed};
140 }
cet::exempt_ptr< Group const > getGroupForPtr(ProductID const pid) const
Definition: Principal.cc:481
GroupQueryResult Principal::getBySelector ( WrappedTypeID const &  wrapped,
SelectorBase const &  sel 
) const
inherited

Definition at line 110 of file Principal.cc.

References art::Principal::findGroupsForProduct(), art::WrappedTypeID::product_type, and art::errors::ProductNotFound.

Referenced by art::DataViewImpl::get_().

112 {
113  auto const& results = findGroupsForProduct(wrapped, sel, true);
114  if (results.empty()) {
115  auto whyFailed =
116  std::make_shared<art::Exception>(art::errors::ProductNotFound);
117  *whyFailed << "getBySelector: Found zero products matching all criteria\n"
118  << "Looking for type: " << wrapped.product_type << "\n";
119  return GroupQueryResult{whyFailed};
120  }
121  if (results.size() > 1) {
123  << "getBySelector: Found " << results.size()
124  << " products rather than one which match all criteria\n"
125  << "Looking for type: " << wrapped.product_type << "\n";
126  }
127  return results[0];
128 }
GroupQueryResultVec findGroupsForProduct(WrappedTypeID const &wrapped, SelectorBase const &, bool stopIfProcessHasMatch) const
Definition: Principal.cc:278
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
EDProductGetter const* art::EDProductGetterFinder::getEDProductGetter ( ProductID const  pid) const
inlineinherited

Definition at line 25 of file EDProductGetterFinder.h.

References art::EDProductGetterFinder::getEDProductGetterImpl().

26  {
28  }
virtual EDProductGetter const * getEDProductGetterImpl(ProductID) const =0
OutputHandle Principal::getForOutput ( ProductID const  pid,
bool  resolveProd 
) const
inherited

Definition at line 424 of file Principal.cc.

References art::Principal::getResolvedGroup(), art::OutputHandle::invalid(), and art::OutputHandle::rangeOfValidity().

Referenced by art::RootOutputFile::fillBranches(), art::detail::KeptProvenance::insertAncestors(), and art::ProvenanceCheckerOutput::write().

425 {
426  auto const& g = getResolvedGroup(pid, resolveProd);
427  if (g.get() == nullptr) {
428  return OutputHandle::invalid();
429  }
430 
431  if (resolveProd) {
432  // If a request to resolve the product is made, then it should
433  // exist and be marked as present. Return invalid handles if this
434  // is not the case.
435  if (g->anyProduct() == nullptr) {
436  return OutputHandle::invalid();
437  }
438  if (!g->anyProduct()->isPresent()) {
439  return OutputHandle::invalid();
440  }
441  }
442  if (!g->anyProduct() && !g->productProvenancePtr()) {
443  return OutputHandle{g->rangeOfValidity()};
444  }
445  return OutputHandle{g->anyProduct(),
446  &g->productDescription(),
447  g->productProvenancePtr(),
448  g->rangeOfValidity()};
449 }
RangeSet const & rangeOfValidity() const
Definition: OutputHandle.h:78
cet::exempt_ptr< Group const > getResolvedGroup(ProductID const pid, bool resolveProd) const
Definition: Principal.cc:452
static OutputHandle invalid()
Definition: OutputHandle.h:52
cet::exempt_ptr< Group const > Principal::getGroup ( ProductID const  pid) const
protectedinherited
cet::exempt_ptr< Group const > Principal::getGroupForPtr ( ProductID const  pid) const
protectedinherited

Definition at line 481 of file Principal.cc.

References art::Principal::getGroup(), art::Principal::presentFromSource(), art::Principal::producedProducts_, art::Principal::secondaryPrincipals_, and art::Principal::tryNextSecondaryFile().

Referenced by art::Principal::fillGroup(), art::Principal::getByProductID(), and art::Principal::getResolvedGroup().

482 {
483  bool produced{false};
484  if (producedProducts_) {
485  auto const& availableProducts = producedProducts_->availableProducts;
486  if (availableProducts.find(pid) != availableProducts.cend()) {
487  produced = true;
488  }
489  }
490 
491  // Look through current process and currently opened primary input file.
492  if (produced || presentFromSource(pid)) {
493  return getGroup(pid);
494  }
495 
496  // Look through secondary files
497  for (auto const& sp : secondaryPrincipals_) {
498  if (sp->presentFromSource(pid)) {
499  return sp->getGroup(pid);
500  }
501  }
502 
503  // Try new secondary files
504  while (true) {
505  int const err = tryNextSecondaryFile();
506  if (err == -2) {
507  // No more files.
508  return nullptr;
509  }
510  if (err == -1) {
511  // Run, SubRun, or Event not found.
512  continue;
513  }
514  assert(!secondaryPrincipals_.empty());
515  auto& new_sp = secondaryPrincipals_.back();
516  if (new_sp->presentFromSource(pid)) {
517  return new_sp->getGroup(pid);
518  }
519  }
520 
521  return nullptr;
522 }
bool presentFromSource(ProductID) const
Definition: Principal.cc:470
cet::exempt_ptr< Group const > getGroup(ProductID const pid) const
Definition: Principal.cc:525
int tryNextSecondaryFile() const
Definition: Principal.cc:184
cet::exempt_ptr< ProductTable const > producedProducts_
Definition: Principal.h:272
std::vector< std::unique_ptr< Principal > > secondaryPrincipals_
Definition: Principal.h:293
Principal::GroupQueryResultVec Principal::getMany ( WrappedTypeID const &  wrapped,
SelectorBase const &  sel 
) const
inherited

Definition at line 178 of file Principal.cc.

References art::Principal::findGroupsForProduct().

Referenced by art::DataViewImpl::getMany_().

179 {
180  return findGroupsForProduct(wrapped, sel, false);
181 }
GroupQueryResultVec findGroupsForProduct(WrappedTypeID const &wrapped, SelectorBase const &, bool stopIfProcessHasMatch) const
Definition: Principal.cc:278
Principal::GroupQueryResultVec Principal::getMatchingSequence ( SelectorBase const &  selector) const
inherited

Definition at line 195 of file Principal.cc.

References art::Principal::findGroups(), art::Principal::matchingSequenceFromInputFile(), art::Principal::producedProducts_, art::Principal::secondaryPrincipals_, and art::Principal::tryNextSecondaryFile().

Referenced by art::DataViewImpl::getMatchingSequenceByLabel_().

196 {
197  GroupQueryResultVec results;
198 
199  // Find groups from current process
200  if (producedProducts_) {
201  if (findGroups(producedProducts_->viewLookup, selector, results, true) !=
202  0) {
203  return results;
204  }
205  }
206 
207  // Look through currently opened input files
208  if (results.empty()) {
209  results = matchingSequenceFromInputFile(selector);
210  if (!results.empty()) {
211  return results;
212  }
213 
214  for (auto const& sp : secondaryPrincipals_) {
215  results = sp->matchingSequenceFromInputFile(selector);
216  if (!results.empty()) {
217  return results;
218  }
219  }
220  }
221 
222  // Open more secondary files if necessary
223  if (results.empty()) {
224  while (true) {
225  int const err = tryNextSecondaryFile();
226  if (err == -2) {
227  // No more files.
228  break;
229  }
230  if (err == -1) {
231  // Run, SubRun, or Event not found.
232  continue;
233  }
234  assert(!secondaryPrincipals_.empty());
235  auto& new_sp = secondaryPrincipals_.back();
236  results = new_sp->matchingSequenceFromInputFile(selector);
237  if (!results.empty()) {
238  return results;
239  }
240  }
241  }
242 
243  return results;
244 }
int tryNextSecondaryFile() const
Definition: Principal.cc:184
cet::exempt_ptr< ProductTable const > producedProducts_
Definition: Principal.h:272
size_t findGroups(ProcessLookup const &, SelectorBase const &, GroupQueryResultVec &results, bool stopIfProcessHasMatch, TypeID wanted_wrapper=TypeID{}) const
Definition: Principal.cc:355
std::vector< GroupQueryResult > GroupQueryResultVec
Definition: Principal.h:54
GroupQueryResultVec matchingSequenceFromInputFile(SelectorBase const &) const
Definition: Principal.cc:247
std::vector< std::unique_ptr< Principal > > secondaryPrincipals_
Definition: Principal.h:293
cet::exempt_ptr< Group const > Principal::getResolvedGroup ( ProductID const  pid,
bool  resolveProd 
) const
protectedinherited

Definition at line 452 of file Principal.cc.

References art::Principal::getGroupForPtr().

Referenced by art::Principal::fillGroup(), and art::Principal::getForOutput().

453 {
454  // FIXME: This reproduces the behavior of the original getGroup with
455  // resolveProv == false but I am not sure this is correct in the
456  // case of an unavailable product.
457  auto const g = getGroupForPtr(pid);
458  if (!g.get() || !resolveProd) {
459  return g;
460  }
461  bool const gotIt = g->resolveProductIfAvailable(g->producedWrapperType());
462  if (!gotIt) {
463  // Behavior is the same as if the group wasn't there.
464  return nullptr;
465  }
466  return g;
467 }
cet::exempt_ptr< Group const > getGroupForPtr(ProductID const pid) const
Definition: Principal.cc:481
ProcessConfiguration const& art::Principal::processConfiguration ( ) const
inlineinherited

Definition at line 138 of file Principal.h.

References art::Principal::processConfiguration_.

Referenced by art::get_ProductDescription().

139  {
140  return processConfiguration_;
141  }
ProcessConfiguration const & processConfiguration_
Definition: Principal.h:270
ProcessHistory const& art::Principal::processHistory ( ) const
inlineinherited

Definition at line 132 of file Principal.h.

References art::Principal::processHistory_.

Referenced by art::Principal::findGroups(), and art::DataViewImpl::processHistory().

133  {
134  return processHistory_;
135  }
ProcessHistory processHistory_
Definition: Principal.h:268
ProcessHistoryID const & art::SubRunPrincipal::processHistoryID ( ) const
overrideprivatevirtual

Implements art::Principal.

Definition at line 33 of file SubRunPrincipal.cc.

References aux(), and art::SubRunAuxiliary::processHistoryID_.

Referenced by branchType().

34  {
35  return aux().processHistoryID_;
36  }
ProcessHistoryID processHistoryID_
SubRunAuxiliary const & aux() const
EDProductGetter const * Principal::productGetter ( ProductID const  pid) const
inherited

Definition at line 532 of file Principal.cc.

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

Referenced by art::SourceHelper::makePtr(), art::Results::productGetter(), art::Run::productGetter(), art::SubRun::productGetter(), and art::Event::productGetter().

533 {
534  EDProductGetter const* result{getByProductID(pid).result().get()};
535  return result ? result : deferredGetter_(pid);
536 }
cet::exempt_ptr< Group const > result() const
EDProductGetter const * deferredGetter_(ProductID const pid) const
Definition: Principal.cc:412
GroupQueryResult getByProductID(ProductID const pid) const
Definition: Principal.cc:131
DelayedReader& art::Principal::productReader ( )
inlineprotectedinherited

Definition at line 198 of file Principal.h.

References art::Principal::store_.

Referenced by art::EventPrincipal::EventPrincipal(), art::ResultsPrincipal::ResultsPrincipal(), art::RunPrincipal::RunPrincipal(), and SubRunPrincipal().

199  {
200  return *store_;
201  }
std::unique_ptr< DelayedReader > store_
Definition: Principal.h:288
void art::SubRunPrincipal::put ( std::unique_ptr< EDProduct > &&  edp,
BranchDescription const &  pd,
std::unique_ptr< ProductProvenance const > &&  productProvenance,
RangeSet &&  rs 
)

Definition at line 52 of file SubRunPrincipal.cc.

References art::Principal::branchMapper(), art::Principal::fillGroup(), art::BranchMapper::insert(), art::gfactory::make_group(), and art::BranchDescription::productID().

Referenced by art::SubRun::commit(), and setEndTime().

57  {
58  assert(edp);
59  branchMapper().insert(std::move(productProvenance));
61  gfactory::make_group(pd, pd.productID(), std::move(rs), std::move(edp)));
62  }
BranchMapper const & branchMapper() const
Definition: Principal.h:144
result_t insert(std::unique_ptr< ProductProvenance const > &&)
Definition: BranchMapper.cc:24
virtual void fillGroup(BranchDescription const &)=0
std::unique_ptr< Group > make_group(BranchDescription const &, ProductID const &, RangeSet &&)
Definition: GroupFactory.h:44
void art::Principal::readImmediate ( ) const
inlineinherited

Definition at line 112 of file Principal.h.

References art::Principal::groups_, and art::Principal::readProvenanceImmediate().

113  {
115  for (auto const& val : groups_) {
116  if (!val.second->productUnavailable()) {
117  val.second->resolveProduct(val.second->producedWrapperType());
118  }
119  }
120  }
GroupCollection groups_
Definition: Principal.h:280
void readProvenanceImmediate() const
Definition: Principal.h:123
void art::Principal::readProvenanceImmediate ( ) const
inlineinherited

Definition at line 123 of file Principal.h.

References art::Principal::branchMapperPtr_, and art::Principal::groups_.

Referenced by art::Principal::readImmediate().

124  {
125  for (auto const& val : groups_) {
126  (void)val.second->productProvenancePtr();
127  }
128  branchMapperPtr_->setDelayedRead(false);
129  }
std::unique_ptr< BranchMapper > branchMapperPtr_
Definition: Principal.h:284
GroupCollection groups_
Definition: Principal.h:280
void Principal::removeCachedProduct ( ProductID const  pid) const
inherited

Definition at line 259 of file Principal.cc.

References art::Principal::getGroup(), art::errors::ProductNotFound, and art::Principal::secondaryPrincipals_.

Referenced by art::DataViewImpl::removeCachedProduct_().

260 {
261  if (auto g = getGroup(pid)) {
262  g->removeCachedProduct();
263  return;
264  }
265  for (auto const& sp : secondaryPrincipals_) {
266  if (auto g = sp->getGroup(pid)) {
267  g->removeCachedProduct();
268  return;
269  }
270  }
271  throw Exception(errors::ProductNotFound, "removeCachedProduct")
272  << "Attempt to remove unknown product corresponding to ProductID: " << pid
273  << '\n'
274  << "Please contact artists@fnal.gov\n";
275 }
cet::exempt_ptr< Group const > getGroup(ProductID const pid) const
Definition: Principal.cc:525
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::vector< std::unique_ptr< Principal > > secondaryPrincipals_
Definition: Principal.h:293
RunNumber_t art::SubRunPrincipal::run ( ) const
inline

Definition at line 64 of file SubRunPrincipal.h.

References aux(), and art::SubRunAuxiliary::run().

65  {
66  return aux().run();
67  }
SubRunAuxiliary const & aux() const
RunNumber_t run() const
RunPrincipal const & art::SubRunPrincipal::runPrincipal ( ) const

Definition at line 65 of file SubRunPrincipal.cc.

References art::errors::NullPointerError, and runPrincipal_.

66  {
67  if (!runPrincipal_) {
69  << "Tried to obtain a NULL runPrincipal.\n";
70  }
71  return *runPrincipal_;
72  }
cet::exempt_ptr< RunPrincipal const > runPrincipal_
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
cet::exempt_ptr<RunPrincipal const> art::SubRunPrincipal::runPrincipalExemptPtr ( ) const
inline

Definition at line 43 of file SubRunPrincipal.h.

References runPrincipal_.

Referenced by art::Source< T >::throwIfInsane_().

44  {
45  return runPrincipal_;
46  }
cet::exempt_ptr< RunPrincipal const > runPrincipal_
RangeSet art::SubRunPrincipal::seenRanges ( ) const
inlineoverridevirtual

Implements art::Principal.

Definition at line 98 of file SubRunPrincipal.h.

References rangeSet_.

Referenced by art::EDProducer::doEndSubRun(), and art::EDFilter::doEndSubRun().

99  {
100  return rangeSet_;
101  }
void art::SubRunPrincipal::setEndTime ( Timestamp const &  time)
inline

Definition at line 85 of file SubRunPrincipal.h.

References aux_, fillGroup(), put(), and art::SubRunAuxiliary::setEndTime().

86  {
87  aux_.setEndTime(time);
88  }
SubRunAuxiliary aux_
void setEndTime(Timestamp const &time)
void art::SubRunPrincipal::setProcessHistoryID ( ProcessHistoryID const &  phid)
overrideprivatevirtual

Implements art::Principal.

Definition at line 39 of file SubRunPrincipal.cc.

References aux(), and art::SubRunAuxiliary::setProcessHistoryID().

Referenced by branchType().

40  {
41  return aux().setProcessHistoryID(phid);
42  }
void setProcessHistoryID(ProcessHistoryID const &phid) const
SubRunAuxiliary const & aux() const
void art::Principal::setProducedProducts ( ProductTable const &  producedProducts)
inlineinherited

Definition at line 106 of file Principal.h.

References art::Principal::producedProducts_.

107  {
108  producedProducts_ = cet::make_exempt_ptr(&producedProducts);
109  }
cet::exempt_ptr< ProductTable const > producedProducts_
Definition: Principal.h:272
void art::SubRunPrincipal::setRunPrincipal ( cet::exempt_ptr< RunPrincipal const >  rp)
inline

Definition at line 48 of file SubRunPrincipal.h.

References runPrincipal_.

49  {
50  runPrincipal_ = rp;
51  }
cet::exempt_ptr< RunPrincipal const > runPrincipal_
size_t art::Principal::size ( void  ) const
inlineinherited

Definition at line 150 of file Principal.h.

References art::Principal::groups_.

Referenced by art::DataViewImpl::size().

151  {
152  return groups_.size();
153  }
GroupCollection groups_
Definition: Principal.h:280
SubRunNumber_t art::SubRunPrincipal::subRun ( ) const
inline

Definition at line 69 of file SubRunPrincipal.h.

References aux(), and art::SubRunAuxiliary::subRun().

70  {
71  return aux().subRun();
72  }
SubRunNumber_t subRun() const
SubRunAuxiliary const & aux() const
int Principal::tryNextSecondaryFile ( ) const
protectedinherited

Definition at line 184 of file Principal.cc.

References art::Principal::nextSecondaryFileIdx_, and art::Principal::store_.

Referenced by art::Principal::fillGroup(), art::Principal::findGroupsForProduct(), art::Principal::getGroupForPtr(), and art::Principal::getMatchingSequence().

185 {
186  int const err = store_->openNextSecondaryFile(nextSecondaryFileIdx_);
187  if (err != -2) {
188  // there are more files to try
190  }
191  return err;
192 }
std::unique_ptr< DelayedReader > store_
Definition: Principal.h:288
int nextSecondaryFileIdx_
Definition: Principal.h:297
void art::SubRunPrincipal::updateSeenRanges ( RangeSet const &  rs)
inline

Definition at line 103 of file SubRunPrincipal.h.

References rangeSet_.

Referenced by art::EndPathExecutor::setAuxiliaryRangeSetID().

104  {
105  rangeSet_ = rs;
106  }

Member Data Documentation

SubRunAuxiliary art::SubRunPrincipal::aux_
private

Definition at line 118 of file SubRunPrincipal.h.

Referenced by aux(), setEndTime(), and SubRunPrincipal().

constexpr BranchType art::SubRunPrincipal::branch_type = Auxiliary::branch_type
static

Definition at line 31 of file SubRunPrincipal.h.

Referenced by branchType().

RangeSet art::SubRunPrincipal::rangeSet_ {RangeSet::invalid()}
private

Definition at line 120 of file SubRunPrincipal.h.

Referenced by seenRanges(), and updateSeenRanges().

cet::exempt_ptr<RunPrincipal const> art::SubRunPrincipal::runPrincipal_ {nullptr}
private

Definition at line 119 of file SubRunPrincipal.h.

Referenced by runPrincipal(), runPrincipalExemptPtr(), and setRunPrincipal().


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