61 #include <unordered_map> 70 void set(std::shared_ptr<std::unordered_map<unsigned int, BranchDescription const*>> iMap) {
78 return std::unique_ptr<EventEntryDescription>();
94 std::shared_ptr<std::unordered_map<unsigned int, BranchDescription const*>>
bidToDesc_;
109 if (
nullptr == branch) {
111 <<
"\n Perhaps the data being requested was not saved in this file?";
116 if (!
bool(classType)) {
117 throw cms::Exception(
"MissingDictionary") <<
"could not find dictionary for type '" << fullName <<
"'" 118 <<
"\n Please make sure all the necessary libraries are available.";
123 if (
nullptr == wrapperObj.
address()) {
124 throw cms::Exception(
"FailedToCreate") <<
"could not create an instance of '" << fullName <<
"'";
126 void* address = wrapperObj.
address();
127 branch->SetAddress(&address);
132 if (
nullptr == prod) {
133 throw cms::Exception(
"FailedConversion") <<
"failed to convert a '" << fullName <<
"' to a edm::WrapperBase." 134 <<
"Please contact developers since something is very wrong.";
137 return std::unique_ptr<WrapperBase>(
prod);
157 pointerToBranchBuffer_(),
163 reader_->setTree(iTree);
189 std::vector<EventEntryDescription>
prov_;
247 if (iTree ==
nullptr)
256 if (
nullptr ==
m_->tree_) {
260 TFile*
file =
m_->tree_->GetCurrentFile();
261 if (
nullptr == file) {
263 TChain*
chain =
dynamic_cast<TChain*
>(
m_->tree());
264 if (
nullptr == chain) {
268 file = chain->GetFile();
269 if (
nullptr == file) {
292 std::unique_ptr<edm::EventAuxiliary> eaux = std::make_unique<edm::EventAuxiliary>();
297 branch->SetAddress(&pAux);
298 branch->GetEntry(iEntry);
310 if (!eventSelectionsBranch) {
313 eventSelectionsBranch->SetAddress(&pEventSelectionIDVector);
314 eventSelectionsBranch->GetEntry(iEntry);
319 if (!branchListIndexBranch) {
322 branchListIndexBranch->SetAddress(&pBranchListIndexes);
323 branchListIndexBranch->GetEntry(iEntry);
324 m_->branchIDListHelper_->fixBranchListIndexes(branchListIndexes);
327 m_->reader_->setEntry(iEntry);
328 auto runAux = std::make_shared<edm::RunAuxiliary>(aux.run(), aux.time(), aux.time());
329 auto rp = std::make_shared<edm::RunPrincipal>(runAux,
m_->reg(),
m_->pc_,
nullptr, 0);
330 auto lbp = std::make_shared<edm::LuminosityBlockPrincipal>(
m_->reg(),
m_->pc_,
nullptr, 0);
332 m_->ep_->fillEventPrincipal(*eaux,
336 *(
m_->provRetriever_),
338 lbp->setRunPrincipal(rp);
339 m_->ep_->setLuminosityBlockPrincipal(lbp.get());
340 m_->processNames_ =
m_->ep_->processHistory();
345 Operate sentry(
m_->ep_->prodGetter());
348 std::cout <<
"While processing entry " << iEntry <<
" the following exception was caught \n" 349 << iEx.what() << std::endl;
351 std::cout <<
"While processing entry " << iEntry <<
" an unknown exception was caught" << std::endl;
380 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob> PsetMap;
382 PsetMap* psetMapPtr = &psetMap;
387 if (
nullptr == psetTree) {
391 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
393 IdToBlobs* pIdToBlob = &idToBlob;
395 for (
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
396 psetTree->GetEntry(
i);
397 psetMap.insert(idToBlob);
413 auto branchIDListsHelper = std::make_shared<edm::BranchIDListHelper>();
419 metaDataTree->GetEntry(0);
421 for (
auto&
prod :
m_->reg_->productListUpdator()) {
428 for (
auto const&
entry : psetMap) {
434 for (
auto const& ph : pHistVector) {
435 m_->phreg_->registerProcessHistory(ph);
438 m_->pointerToBranchBuffer_.erase(
m_->pointerToBranchBuffer_.begin(),
m_->pointerToBranchBuffer_.end());
440 std::unique_ptr<edm::ProductRegistry> newReg = std::make_unique<edm::ProductRegistry>();
444 for (
auto& item : prodList) {
449 newReg->copyProduct(prod);
451 if (
m_->fileFormatVersion_.splitProductIDs()) {
453 <<
"Cannot change friendly class name algorithm without more development work\n" 454 <<
"to update BranchIDLists. Contact the framework group.\n";
458 newReg->copyProduct(newBD);
463 m_->reg().reset(newReg.release());
469 m_->pointerToBranchBuffer_.reserve(prodList2.size());
471 for (
auto& item : prodList2) {
476 if (
m_->tree_->GetBranch(prod.
branchName().c_str()) ==
nullptr) {
488 m_->branchIDListHelper_->updateFromInput(*branchIDListsPtr);
489 m_->reg_->setFrozen();
490 m_->bidToDesc_->clear();
491 for (
auto const&
p :
m_->reg_->productList()) {
492 m_->bidToDesc_->emplace(
p.second.branchID().id(), &
p.second);
494 m_->ep_ = std::make_shared<edm::EventPrincipal>(
495 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< std::unordered_map< unsigned int, BranchDescription const * > > > bidToDesc_
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