CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::RootDelayedReader Class Reference

#include <RootDelayedReader.h>

Inheritance diagram for edm::RootDelayedReader:
edm::DelayedReader

Public Types

typedef roottree::BranchInfo BranchInfo
 
typedef roottree::BranchMap BranchMap
 
typedef roottree::EntryNumber EntryNumber
 

Public Member Functions

RootDelayedReaderoperator= (RootDelayedReader const &)=delete
 
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal () const final
 
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal () const final
 
 RootDelayedReader (RootTree const &tree, std::shared_ptr< InputFile > filePtr, InputType inputType)
 
 RootDelayedReader (RootDelayedReader const &)=delete
 
void setSignals (signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
 
 ~RootDelayedReader () override
 
- Public Member Functions inherited from edm::DelayedReader
std::shared_ptr< WrapperBasegetProduct (BranchID const &k, EDProductGetter const *ep, ModuleCallingContext const *mcc=nullptr)
 
void mergeReaders (DelayedReader *other)
 
void reset ()
 
std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > sharedResources () const
 
virtual ~DelayedReader ()
 

Private Member Functions

BranchMap const & branches () const
 
BranchInfo const * getBranchInfo (BranchID const &k) const
 
std::shared_ptr< WrapperBasegetProduct_ (BranchID const &k, EDProductGetter const *ep) override
 
void mergeReaders_ (DelayedReader *other) override
 
void reset_ () override
 
std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > sharedResources_ () const override
 

Private Attributes

edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
 
InputType inputType_
 
std::exception_ptr lastException_
 
std::shared_ptr< std::recursive_mutex > mutex_
 
edm::propagate_const< DelayedReader * > nextReader_
 
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal_
 
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal_
 
std::unique_ptr< SharedResourcesAcquirerresourceAcquirer_
 
RootTree const & tree_
 
edm::propagate_const< TClass * > wrapperBaseTClass_
 

Detailed Description

Definition at line 33 of file RootDelayedReader.h.

Member Typedef Documentation

◆ BranchInfo

Definition at line 35 of file RootDelayedReader.h.

◆ BranchMap

Definition at line 36 of file RootDelayedReader.h.

◆ EntryNumber

Definition at line 37 of file RootDelayedReader.h.

Constructor & Destructor Documentation

◆ RootDelayedReader() [1/2]

edm::RootDelayedReader::RootDelayedReader ( RootTree const &  tree,
std::shared_ptr< InputFile filePtr,
InputType  inputType 
)

Definition at line 23 of file RootDelayedReader.cc.

References edm::SharedResourcesRegistry::createAcquirerForSourceDelayedReader(), edm::SharedResourcesRegistry::instance(), eostools::move(), mutex_, edm::Primary, resourceAcquirer_, and mps_fire::resources.

24  : tree_(tree),
25  filePtr_(filePtr),
26  nextReader_(),
27  inputType_(inputType),
28  wrapperBaseTClass_(TClass::GetClass("edm::WrapperBase")) {
29  if (inputType == InputType::Primary) {
31  resourceAcquirer_ = std::make_unique<SharedResourcesAcquirer>(std::move(resources.first));
32  mutex_ = resources.second;
33  }
34  }
RootTree const & tree_
std::shared_ptr< std::recursive_mutex > mutex_
static SharedResourcesRegistry * instance()
std::unique_ptr< SharedResourcesAcquirer > resourceAcquirer_
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
edm::propagate_const< TClass * > wrapperBaseTClass_
Definition: tree.py:1
edm::propagate_const< DelayedReader * > nextReader_
std::pair< SharedResourcesAcquirer, std::shared_ptr< std::recursive_mutex > > createAcquirerForSourceDelayedReader()
def move(src, dest)
Definition: eostools.py:511

◆ ~RootDelayedReader()

edm::RootDelayedReader::~RootDelayedReader ( )
override

Definition at line 36 of file RootDelayedReader.cc.

36 {}

◆ RootDelayedReader() [2/2]

edm::RootDelayedReader::RootDelayedReader ( RootDelayedReader const &  )
delete

Member Function Documentation

◆ branches()

BranchMap const& edm::RootDelayedReader::branches ( ) const
inlineprivate

Definition at line 67 of file RootDelayedReader.h.

References edm::RootTree::branches(), and tree_.

Referenced by getBranchInfo().

67 { return tree_.branches(); }
RootTree const & tree_
BranchMap const & branches() const
Definition: RootTree.cc:194

◆ getBranchInfo()

BranchInfo const* edm::RootDelayedReader::getBranchInfo ( BranchID const &  k) const
inlineprivate

Definition at line 68 of file RootDelayedReader.h.

References branches(), edm::roottree::BranchMap::find(), and dqmdumpme::k.

Referenced by getProduct_().

68 { return branches().find(k); }
BranchInfo const * find(BranchID const &iKey) const
Definition: RootTree.h:59
BranchMap const & branches() const

◆ getProduct_()

std::shared_ptr< WrapperBase > edm::RootDelayedReader::getProduct_ ( BranchID const &  k,
EDProductGetter const *  ep 
)
overrideprivatevirtual

Implements edm::DelayedReader.

Definition at line 42 of file RootDelayedReader.cc.

References beamvalidation::br, edm::RootTree::branchType(), filterCSVwithJSON::copy, MillePedeFileConverter_cfg::e, edm::RootTree::entryNumberForIndex(), SiStripBadComponentsDQMServiceTemplate_cfg::ep, getBranchInfo(), edm::RootTree::getEntry(), edm::getWrapperBasePtr(), edm::InEvent, inputType_, dqmdumpme::k, lastException_, nextReader_, AlCaHLTBitMon_ParallelJobs::p, edm::InputFile::reportReadBranch(), edm::setRefCoreStreamer(), AlCaHLTBitMon_QueryRunRegistry::string, tree_, and wrapperBaseTClass_.

42  {
43  if (lastException_) {
44  try {
45  std::rethrow_exception(lastException_);
46  } catch (edm::Exception const& e) {
47  //avoid growing the context each time the exception is rethrown.
48  auto copy = e;
49  copy.addContext("Rethrowing an exception that happened on a different read request.");
50  throw copy;
51  } catch (cms::Exception& e) {
52  //If we do anything here to 'copy', we would lose the actual type of the exception.
53  e.addContext("Rethrowing an exception that happened on a different read request.");
54  throw;
55  }
56  }
57  auto branchInfo = getBranchInfo(k);
58  if (not branchInfo) {
59  if (nextReader_) {
60  return nextReader_->getProduct(k, ep);
61  } else {
62  return std::shared_ptr<WrapperBase>();
63  }
64  }
65  TBranch* br = branchInfo->productBranch_;
66  if (br == nullptr) {
67  if (nextReader_) {
68  return nextReader_->getProduct(k, ep);
69  } else {
70  return std::shared_ptr<WrapperBase>();
71  }
72  }
73 
75  //make code exception safe
76  std::shared_ptr<void> refCoreStreamerGuard(nullptr, [](void*) {
77  setRefCoreStreamer(false);
78  ;
79  });
80  TClass* cp = branchInfo->classCache_;
81  if (nullptr == cp) {
82  branchInfo->classCache_ = TClass::GetClass(branchInfo->branchDescription_.wrappedName().c_str());
83  cp = branchInfo->classCache_;
84  branchInfo->offsetToWrapperBase_ = cp->GetBaseClassOffset(wrapperBaseTClass_);
85  }
86  void* p = cp->New();
87  std::unique_ptr<WrapperBase> edp = getWrapperBasePtr(p, branchInfo->offsetToWrapperBase_);
88  br->SetAddress(&p);
89  try {
90  //Run, Lumi, and ProcessBlock only have 1 entry number, which is index 0
91  tree_.getEntry(br, tree_.entryNumberForIndex(tree_.branchType() == InEvent ? ep->transitionIndex() : 0));
92  } catch (...) {
93  lastException_ = std::current_exception();
94  std::rethrow_exception(lastException_);
95  }
96  if (tree_.branchType() == InEvent) {
97  // CMS-THREADING For the primary input source calls to this function need to be serialized
99  }
100  return edp;
101  }
BranchInfo const * getBranchInfo(BranchID const &k) const
EntryNumber const & entryNumberForIndex(unsigned int index) const
Definition: RootTree.cc:113
RootTree const & tree_
void setRefCoreStreamer(bool resetAll=false)
static void reportReadBranch(InputType inputType, std::string const &branchname)
Definition: InputFile.cc:110
void getEntry(TBranch *branch, EntryNumber entry) const
Definition: RootTree.cc:382
std::exception_ptr lastException_
edm::propagate_const< TClass * > wrapperBaseTClass_
BranchType branchType() const
Definition: RootTree.h:184
std::unique_ptr< WrapperBase > getWrapperBasePtr(void *p, int offset)
edm::propagate_const< DelayedReader * > nextReader_

◆ mergeReaders_()

void edm::RootDelayedReader::mergeReaders_ ( DelayedReader other)
inlineoverrideprivatevirtual

Implements edm::DelayedReader.

Definition at line 63 of file RootDelayedReader.h.

References nextReader_, and trackingPlots::other.

63 { nextReader_ = other; }
edm::propagate_const< DelayedReader * > nextReader_

◆ operator=()

RootDelayedReader& edm::RootDelayedReader::operator= ( RootDelayedReader const &  )
delete

◆ postEventReadFromSourceSignal()

signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::postEventReadFromSourceSignal ( ) const
inlinefinalvirtual

Implements edm::DelayedReader.

Definition at line 49 of file RootDelayedReader.h.

References postEventReadFromSourceSignal_.

50  {
52  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal_

◆ preEventReadFromSourceSignal()

signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::preEventReadFromSourceSignal ( ) const
inlinefinalvirtual

Implements edm::DelayedReader.

Definition at line 45 of file RootDelayedReader.h.

References preEventReadFromSourceSignal_.

46  {
48  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal_

◆ reset_()

void edm::RootDelayedReader::reset_ ( )
inlineoverrideprivatevirtual

Implements edm::DelayedReader.

Definition at line 64 of file RootDelayedReader.h.

References nextReader_.

64 { nextReader_ = nullptr; }
edm::propagate_const< DelayedReader * > nextReader_

◆ setSignals()

void edm::RootDelayedReader::setSignals ( signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *  preEventReadSource,
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *  postEventReadSource 
)
inline

Definition at line 54 of file RootDelayedReader.h.

References postEventReadFromSourceSignal_, and preEventReadFromSourceSignal_.

56  {
57  preEventReadFromSourceSignal_ = preEventReadSource;
58  postEventReadFromSourceSignal_ = postEventReadSource;
59  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal_
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal_

◆ sharedResources_()

std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > edm::RootDelayedReader::sharedResources_ ( ) const
overrideprivatevirtual

Reimplemented from edm::DelayedReader.

Definition at line 38 of file RootDelayedReader.cc.

References mutex_, and resourceAcquirer_.

38  {
39  return std::make_pair(resourceAcquirer_.get(), mutex_.get());
40  }
std::shared_ptr< std::recursive_mutex > mutex_
std::unique_ptr< SharedResourcesAcquirer > resourceAcquirer_

Member Data Documentation

◆ filePtr_

edm::propagate_const<std::shared_ptr<InputFile> > edm::RootDelayedReader::filePtr_
private

Definition at line 72 of file RootDelayedReader.h.

◆ inputType_

InputType edm::RootDelayedReader::inputType_
private

Definition at line 77 of file RootDelayedReader.h.

Referenced by getProduct_().

◆ lastException_

std::exception_ptr edm::RootDelayedReader::lastException_
mutableprivate

Definition at line 89 of file RootDelayedReader.h.

Referenced by getProduct_().

◆ mutex_

std::shared_ptr<std::recursive_mutex> edm::RootDelayedReader::mutex_
private

Definition at line 76 of file RootDelayedReader.h.

Referenced by RootDelayedReader(), and sharedResources_().

◆ nextReader_

edm::propagate_const<DelayedReader*> edm::RootDelayedReader::nextReader_
private

Definition at line 73 of file RootDelayedReader.h.

Referenced by getProduct_(), mergeReaders_(), and reset_().

◆ postEventReadFromSourceSignal_

signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::postEventReadFromSourceSignal_
private
Initial value:
=
nullptr

Definition at line 82 of file RootDelayedReader.h.

Referenced by postEventReadFromSourceSignal(), and setSignals().

◆ preEventReadFromSourceSignal_

signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::preEventReadFromSourceSignal_
private
Initial value:
=
nullptr

Definition at line 80 of file RootDelayedReader.h.

Referenced by preEventReadFromSourceSignal(), and setSignals().

◆ resourceAcquirer_

std::unique_ptr<SharedResourcesAcquirer> edm::RootDelayedReader::resourceAcquirer_
private

Definition at line 75 of file RootDelayedReader.h.

Referenced by RootDelayedReader(), and sharedResources_().

◆ tree_

RootTree const& edm::RootDelayedReader::tree_
private

Definition at line 71 of file RootDelayedReader.h.

Referenced by branches(), and getProduct_().

◆ wrapperBaseTClass_

edm::propagate_const<TClass*> edm::RootDelayedReader::wrapperBaseTClass_
private

Definition at line 78 of file RootDelayedReader.h.

Referenced by getProduct_().