68 void set(std::shared_ptr<ProductRegistry const> iReg) { reg_ = iReg;}
73 return std::unique_ptr<EventEntryDescription>();
87 std::shared_ptr<ProductRegistry const>(reg_);
90 std::unique_ptr<WrapperBase>
95 std::unique_ptr<WrapperBase>
97 ProductRegistry::ProductList::const_iterator itFind= reg_->productList().find(k);
98 if(itFind == reg_->productList().end()) {
104 if(
nullptr == branch) {
106 <<
"could not find branch named '" << bDesc.
branchName() <<
"'" 107 <<
"\n Perhaps the data being requested was not saved in this file?";
112 if(!
bool(classType)) {
114 <<
"could not find dictionary for type '" << fullName <<
"'" 115 <<
"\n Please make sure all the necessary libraries are available.";
120 if(
nullptr == wrapperObj.
address()) {
121 throw cms::Exception(
"FailedToCreate") <<
"could not create an instance of '" << fullName <<
"'";
123 void* address = wrapperObj.
address();
124 branch->SetAddress(&address);
129 if(
nullptr == prod) {
131 <<
"failed to convert a '" << fullName
132 <<
"' to a edm::WrapperBase." 133 <<
"Please contact developers since something is very wrong.";
136 return std::unique_ptr<WrapperBase>(
prod);
155 pointerToBranchBuffer_(),
161 reader_->setTree(iTree);
180 std::vector<EventEntryDescription>
prov_;
205 everythingOK_(
false) {
245 if(iTree ==
nullptr)
return;
255 if(
nullptr ==
m_->tree_) {
259 TFile*
file =
m_->tree_->GetCurrentFile();
260 if(
nullptr == file) {
262 TChain*
chain =
dynamic_cast<TChain*
>(
m_->tree());
263 if(
nullptr == chain) {
267 file = chain->GetFile();
268 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) {
312 <<
"Failed to find event Selections branch in event tree";
314 eventSelectionsBranch->SetAddress(&pEventSelectionIDVector);
315 eventSelectionsBranch->GetEntry(iEntry);
320 if(!branchListIndexBranch) {
322 <<
"Failed to find branch list index branch in event tree";
324 branchListIndexBranch->SetAddress(&pBranchListIndexes);
325 branchListIndexBranch->GetEntry(iEntry);
326 m_->branchIDListHelper_->fixBranchListIndexes(branchListIndexes);
329 m_->reader_->setEntry(iEntry);
330 auto runAux = std::make_shared<edm::RunAuxiliary>(aux.run(), aux.time(), aux.time());
331 auto rp = std::make_shared<edm::RunPrincipal>(runAux,
m_->reg(),
m_->pc_,
nullptr, 0);
332 auto lbp = std::make_shared<edm::LuminosityBlockPrincipal>(
m_->reg(),
m_->pc_,
nullptr, 0);
334 m_->ep_->fillEventPrincipal(*eaux,
338 *(
m_->provRetriever_),
340 lbp->setRunPrincipal(rp);
341 m_->ep_->setLuminosityBlockPrincipal(lbp.get());
342 m_->processNames_ =
m_->ep_->processHistory();
347 Operate sentry(
m_->ep_->prodGetter());
350 std::cout <<
"While processing entry " << iEntry <<
" the following exception was caught \n" 351 << iEx.what() << std::endl;
353 std::cout <<
"While processing entry " << iEntry <<
" an unknown exception was caught" << std::endl;
390 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob> PsetMap;
392 PsetMap *psetMapPtr = &psetMap;
397 if(
nullptr == psetTree) {
399 <<
" in the input file.\n";
401 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
403 IdToBlobs* pIdToBlob = &idToBlob;
405 for(
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
406 psetTree->GetEntry(
i);
407 psetMap.insert(idToBlob);
424 auto branchIDListsHelper = std::make_shared<edm::BranchIDListHelper>();
430 metaDataTree->GetEntry(0);
432 for(
auto&
prod :
m_->reg_->productListUpdator()) {
438 for(
auto const&
entry : psetMap) {
444 for(
auto const& ph : pHistVector) {
445 m_->phreg_->registerProcessHistory(ph);
448 m_->pointerToBranchBuffer_.erase(
m_->pointerToBranchBuffer_.begin(),
449 m_->pointerToBranchBuffer_.end());
451 std::unique_ptr<edm::ProductRegistry> newReg = std::make_unique<edm::ProductRegistry>();
455 for(
auto& item : prodList) {
460 newReg->copyProduct(prod);
462 if(
m_->fileFormatVersion_.splitProductIDs()) {
464 <<
"Cannot change friendly class name algorithm without more development work\n" 465 <<
"to update BranchIDLists. Contact the framework group.\n";
469 newReg->copyProduct(newBD);
474 m_->reg().reset(newReg.release());
480 m_->pointerToBranchBuffer_.reserve(prodList2.size());
482 for(
auto& item : prodList2) {
487 if(
m_->tree_->GetBranch(prod.
branchName().c_str()) ==
nullptr) {
499 m_->branchIDListHelper_->updateFromInput(*branchIDListsPtr);
500 m_->reg_->setFrozen();
501 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)
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::unique_ptr< WrapperBase > getTheProduct(BranchKey const &k) const
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::string const & productDescriptionBranchName()
std::string const & processConfigurationBranchName()
std::shared_ptr< ThinnedAssociationsHelper > & thinnedAssociationsHelper()
Bool_t Process(Long64_t) override
edm::propagate_const< std::shared_ptr< ProcessHistoryRegistry > > phreg_
std::unique_ptr< WrapperBase > getProduct_(BranchKey const &k, EDProductGetter const *ep) override
std::shared_ptr< ProductRegistry const > reg() const
std::string const & branchIDListBranchName()
std::string const & branchListIndexesBranchName()
void setEntry(Long64_t iEntry)
static Registry * instance()
void Init(TTree *) override
virtual void begin(TList *&in)=0