61 #include <unordered_map> 70 void set(std::shared_ptr<std::unordered_map<unsigned int, BranchDescription const*>> iMap) {
bidToDesc_ =
std::move(iMap);}
75 return std::unique_ptr<EventEntryDescription>();
89 std::shared_ptr<std::unordered_map<unsigned int, BranchDescription const*>>
bidToDesc_;
92 std::unique_ptr<WrapperBase>
97 std::unique_ptr<WrapperBase>
106 if(
nullptr == branch) {
108 <<
"could not find branch named '" << bDesc.
branchName() <<
"'" 109 <<
"\n Perhaps the data being requested was not saved in this file?";
114 if(!
bool(classType)) {
116 <<
"could not find dictionary for type '" << fullName <<
"'" 117 <<
"\n Please make sure all the necessary libraries are available.";
122 if(
nullptr == wrapperObj.
address()) {
123 throw cms::Exception(
"FailedToCreate") <<
"could not create an instance of '" << fullName <<
"'";
125 void* address = wrapperObj.
address();
126 branch->SetAddress(&address);
131 if(
nullptr == prod) {
133 <<
"failed to convert a '" << fullName
134 <<
"' to a edm::WrapperBase." 135 <<
"Please contact developers since something is very wrong.";
138 return std::unique_ptr<WrapperBase>(
prod);
158 pointerToBranchBuffer_(),
164 reader_->setTree(iTree);
183 std::vector<EventEntryDescription>
prov_;
208 everythingOK_(
false) {
248 if(iTree ==
nullptr)
return;
258 if(
nullptr ==
m_->tree_) {
262 TFile*
file =
m_->tree_->GetCurrentFile();
263 if(
nullptr == file) {
265 TChain*
chain =
dynamic_cast<TChain*
>(
m_->tree());
266 if(
nullptr == chain) {
270 file = chain->GetFile();
271 if(
nullptr == file) {
295 std::unique_ptr<edm::EventAuxiliary> eaux = std::make_unique<edm::EventAuxiliary>();
300 branch->SetAddress(&pAux);
301 branch->GetEntry(iEntry);
313 if(!eventSelectionsBranch) {
315 <<
"Failed to find event Selections branch in event tree";
317 eventSelectionsBranch->SetAddress(&pEventSelectionIDVector);
318 eventSelectionsBranch->GetEntry(iEntry);
323 if(!branchListIndexBranch) {
325 <<
"Failed to find branch list index branch in event tree";
327 branchListIndexBranch->SetAddress(&pBranchListIndexes);
328 branchListIndexBranch->GetEntry(iEntry);
329 m_->branchIDListHelper_->fixBranchListIndexes(branchListIndexes);
332 m_->reader_->setEntry(iEntry);
333 auto runAux = std::make_shared<edm::RunAuxiliary>(aux.run(), aux.time(), aux.time());
334 auto rp = std::make_shared<edm::RunPrincipal>(runAux,
m_->reg(),
m_->pc_,
nullptr, 0);
335 auto lbp = std::make_shared<edm::LuminosityBlockPrincipal>(
m_->reg(),
m_->pc_,
nullptr, 0);
337 m_->ep_->fillEventPrincipal(*eaux,
341 *(
m_->provRetriever_),
343 lbp->setRunPrincipal(rp);
344 m_->ep_->setLuminosityBlockPrincipal(lbp.get());
345 m_->processNames_ =
m_->ep_->processHistory();
350 Operate sentry(
m_->ep_->prodGetter());
353 std::cout <<
"While processing entry " << iEntry <<
" the following exception was caught \n" 354 << iEx.what() << std::endl;
356 std::cout <<
"While processing entry " << iEntry <<
" an unknown exception was caught" << std::endl;
393 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob> PsetMap;
395 PsetMap *psetMapPtr = &psetMap;
400 if(
nullptr == psetTree) {
402 <<
" in the input file.\n";
404 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
406 IdToBlobs* pIdToBlob = &idToBlob;
408 for(
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
409 psetTree->GetEntry(
i);
410 psetMap.insert(idToBlob);
427 auto branchIDListsHelper = std::make_shared<edm::BranchIDListHelper>();
433 metaDataTree->GetEntry(0);
435 for(
auto&
prod :
m_->reg_->productListUpdator()) {
442 for(
auto const&
entry : psetMap) {
448 for(
auto const& ph : pHistVector) {
449 m_->phreg_->registerProcessHistory(ph);
452 m_->pointerToBranchBuffer_.erase(
m_->pointerToBranchBuffer_.begin(),
453 m_->pointerToBranchBuffer_.end());
455 std::unique_ptr<edm::ProductRegistry> newReg = std::make_unique<edm::ProductRegistry>();
459 for(
auto& item : prodList) {
464 newReg->copyProduct(prod);
466 if(
m_->fileFormatVersion_.splitProductIDs()) {
468 <<
"Cannot change friendly class name algorithm without more development work\n" 469 <<
"to update BranchIDLists. Contact the framework group.\n";
473 newReg->copyProduct(newBD);
478 m_->reg().reset(newReg.release());
484 m_->pointerToBranchBuffer_.reserve(prodList2.size());
486 for(
auto& item : prodList2) {
491 if(
m_->tree_->GetBranch(prod.
branchName().c_str()) ==
nullptr) {
503 m_->branchIDListHelper_->updateFromInput(*branchIDListsPtr);
504 m_->reg_->setFrozen();
505 m_->bidToDesc_->clear();
506 for(
auto const&
p:
m_->reg_->productList()) {
507 m_->bidToDesc_->emplace(
p.second.branchID().id(),&
p.second);
509 m_->ep_ = std::make_shared<edm::EventPrincipal>(
m_->reg(),
m_->branchIDListHelper(),
m_->thinnedAssociationsHelper(),
m_->pc_,
nullptr);
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * preEventReadFromSourceSignal() const override
std::vector< EventEntryDescription const * > pointerToBranchBuffer_
std::string const & idToParameterSetBlobsBranchName()
virtual void terminate(TList &out)=0
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & branchName() const
std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper() const
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
std::shared_ptr< std::unordered_map< unsigned int, BranchDescription const * > > bidToDesc_
BranchType const & branchType() const
std::vector< BranchIDList > BranchIDLists
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
virtual std::unique_ptr< EventEntryDescription > getProvenance_(BranchKey const &) const
void setTree(TTree *iTree)
virtual void preProcessing(const TList *in, TList &out)=0
std::vector< EventEntryDescription > prov_
edm::propagate_const< TTree * > tree_
edm::propagate_const< std::shared_ptr< edm::root::TFWLiteSelectorMembers > > m_
ObjectWithDict castObject(TypeWithDict const &) const
std::map< BranchKey, BranchDescription > ProductList
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
void mergeReaders_(DelayedReader *) override
void setRefCoreStreamer(bool resetAll=false)
std::string const & fileFormatVersionBranchName()
virtual void postProcessing(TList &out)=0
std::string const & eventSelectionsBranchName()
TTree const * tree() const
edm::ModuleDescription md_
edm::propagate_const< std::shared_ptr< edm::ProductProvenanceRetriever > > provRetriever_
std::shared_ptr< BranchIDListHelper > & branchIDListHelper()
virtual void process(const edm::Event &event)=0
void Terminate() override
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const * postEventReadFromSourceSignal() const override
std::vector< EventSelectionID > EventSelectionIDVector
std::string const & parameterSetsTreeName()
static TypeWithDict byName(std::string const &name)
FileFormatVersion fileFormatVersion_
std::vector< BranchListIndex > BranchListIndexes
std::string const & className() const
std::string friendlyName(std::string const &iFullName)
~TFWLiteSelectorBasic() override
edm::propagate_const< std::shared_ptr< ProductRegistry > > reg_
edm::propagate_const< std::shared_ptr< FWLiteDelayedReader > > reader_
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
std::string const & friendlyClassName() const
void setDropped(bool isDropped)
bool insertMapped(value_type const &v, bool forceUpdate=false)
void updateFriendlyClassName()
std::string const & metaDataTreeName()
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::ProcessConfiguration pc_
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::shared_ptr< ProductRegistry > & reg()
std::string const & parameterSetMapBranchName()
element_type const * get() const
ProcessHistoryVector vector_type
std::string const & processHistoryBranchName()
edm::propagate_const< std::shared_ptr< edm::EventPrincipal > > ep_
ProcessHistory processNames_
void setupNewFile(TFile &)
void SlaveTerminate() override
void setTree(TTree *iTree)
void SlaveBegin(TTree *) override
std::string wrappedClassName(std::string const &iFullName)
void Begin(TTree *) override
std::unique_ptr< WrapperBase > getProduct_(BranchID const &k, EDProductGetter const *ep) override
std::string const & productDescriptionBranchName()
std::string const & processConfigurationBranchName()
std::shared_ptr< ThinnedAssociationsHelper > & thinnedAssociationsHelper()
Bool_t Process(Long64_t) override
std::unique_ptr< WrapperBase > getTheProduct(BranchID const &k) const
edm::propagate_const< std::shared_ptr< ProcessHistoryRegistry > > phreg_
std::shared_ptr< ProductRegistry const > reg() const
std::string const & branchIDListBranchName()
std::string const & branchListIndexesBranchName()
void setEntry(Long64_t iEntry)
void setIsMergeable(BranchDescription &)
static Registry * instance()
void Init(TTree *) override
virtual void begin(TList *&in)=0