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::unique_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::unique_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 32 of file RootDelayedReader.h.

Member Typedef Documentation

Definition at line 34 of file RootDelayedReader.h.

Definition at line 35 of file RootDelayedReader.h.

Definition at line 36 of file RootDelayedReader.h.

Constructor & Destructor Documentation

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_(),
28  : static_cast<SharedResourcesAcquirer*>(nullptr)),
29  inputType_(inputType),
30  wrapperBaseTClass_(TClass::GetClass("edm::WrapperBase")) {
31  if (inputType == InputType::Primary) {
33  resourceAcquirer_ = std::make_unique<SharedResourcesAcquirer>(std::move(resources.first));
34  mutex_ = resources.second;
35  }
36  }
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
edm::RootDelayedReader::~RootDelayedReader ( )
override

Definition at line 38 of file RootDelayedReader.cc.

38 {}
edm::RootDelayedReader::RootDelayedReader ( RootDelayedReader const &  )
delete

Member Function Documentation

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

Definition at line 66 of file RootDelayedReader.h.

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

Referenced by getBranchInfo().

66 { return tree_.branches(); }
RootTree const & tree_
BranchMap const & branches() const
Definition: RootTree.cc:176
BranchInfo const* edm::RootDelayedReader::getBranchInfo ( BranchID const &  k) const
inlineprivate

Definition at line 67 of file RootDelayedReader.h.

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

Referenced by getProduct_().

67 { return branches().find(k); }
BranchInfo const * find(BranchID const &iKey) const
Definition: RootTree.h:74
int k[5][pyjets_maxn]
BranchMap const & branches() const
std::unique_ptr< WrapperBase > edm::RootDelayedReader::getProduct_ ( BranchID const &  k,
EDProductGetter const *  ep 
)
overrideprivatevirtual

Implements edm::DelayedReader.

Definition at line 44 of file RootDelayedReader.cc.

References cms::Exception::addContext(), beamvalidation::br, edm::RootTree::branchType(), SimDataFormats::CaloAnalysis::cp, edm::RootTree::entryNumberForIndex(), cppFunctionSkipper::exception, getBranchInfo(), edm::RootTree::getEntry(), edm::getWrapperBasePtr(), edm::InEvent, inputType_, lastException_, nextReader_, AlCaHLTBitMon_ParallelJobs::p, edm::InputFile::reportReadBranch(), edm::setRefCoreStreamer(), AlCaHLTBitMon_QueryRunRegistry::string, edm::EDProductGetter::transitionIndex(), tree_, and wrapperBaseTClass_.

Referenced by setSignals().

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

Implements edm::DelayedReader.

Definition at line 62 of file RootDelayedReader.h.

References nextReader_, and trackingPlots::other.

62 { nextReader_ = other; }
edm::propagate_const< DelayedReader * > nextReader_
RootDelayedReader& edm::RootDelayedReader::operator= ( RootDelayedReader const &  )
delete
signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::postEventReadFromSourceSignal ( ) const
inlinefinalvirtual

Implements edm::DelayedReader.

Definition at line 48 of file RootDelayedReader.h.

References postEventReadFromSourceSignal_.

49  {
51  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal_
signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* edm::RootDelayedReader::preEventReadFromSourceSignal ( ) const
inlinefinalvirtual

Implements edm::DelayedReader.

Definition at line 44 of file RootDelayedReader.h.

References preEventReadFromSourceSignal_.

45  {
47  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal_
void edm::RootDelayedReader::reset_ ( )
inlineoverrideprivatevirtual

Implements edm::DelayedReader.

Definition at line 63 of file RootDelayedReader.h.

References nextReader_, and sharedResources_().

63 { nextReader_ = nullptr; }
edm::propagate_const< DelayedReader * > nextReader_
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 53 of file RootDelayedReader.h.

References getProduct_(), gen::k, postEventReadFromSourceSignal_, and preEventReadFromSourceSignal_.

55  {
56  preEventReadFromSourceSignal_ = preEventReadSource;
57  postEventReadFromSourceSignal_ = postEventReadSource;
58  }
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal_
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal_
std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > edm::RootDelayedReader::sharedResources_ ( ) const
overrideprivatevirtual

Reimplemented from edm::DelayedReader.

Definition at line 40 of file RootDelayedReader.cc.

References mutex_, and resourceAcquirer_.

Referenced by reset_().

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

Member Data Documentation

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

Definition at line 71 of file RootDelayedReader.h.

InputType edm::RootDelayedReader::inputType_
private

Definition at line 76 of file RootDelayedReader.h.

Referenced by getProduct_().

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

Definition at line 87 of file RootDelayedReader.h.

Referenced by getProduct_().

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

Definition at line 75 of file RootDelayedReader.h.

Referenced by RootDelayedReader(), and sharedResources_().

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

Definition at line 72 of file RootDelayedReader.h.

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

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

Definition at line 81 of file RootDelayedReader.h.

Referenced by postEventReadFromSourceSignal(), and setSignals().

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

Definition at line 79 of file RootDelayedReader.h.

Referenced by preEventReadFromSourceSignal(), and setSignals().

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

Definition at line 74 of file RootDelayedReader.h.

Referenced by RootDelayedReader(), and sharedResources_().

RootTree const& edm::RootDelayedReader::tree_
private

Definition at line 70 of file RootDelayedReader.h.

Referenced by branches(), and getProduct_().

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

Definition at line 77 of file RootDelayedReader.h.

Referenced by getProduct_().