CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends
edm::ProducerBase Class Reference

#include <ProducerBase.h>

Inheritance diagram for edm::ProducerBase:
edm::ProductRegistryHelper edm::EDFilter edm::EDProducer edm::global::EDFilterBase edm::global::EDProducerBase edm::limited::EDFilterBase edm::limited::EDProducerBase edm::one::EDFilterBase edm::one::EDProducerBase edm::PuttableSourceBase edm::stream::EDFilterBase edm::stream::EDProducerBase

Public Types

using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 

Public Member Functions

void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 

Protected Member Functions

template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 

Private Member Functions

template<typename P >
void commit_ (P &iPrincipal)
 
template<typename P , typename I >
void commit_ (P &iPrincipal, I *iID)
 
- Private Member Functions inherited from edm::ProductRegistryHelper
virtual bool hasAbilityToProduceInBeginLumis () const
 
virtual bool hasAbilityToProduceInBeginProcessBlocks () const
 
virtual bool hasAbilityToProduceInBeginRuns () const
 
virtual bool hasAbilityToProduceInEndLumis () const
 
virtual bool hasAbilityToProduceInEndProcessBlocks () const
 
virtual bool hasAbilityToProduceInEndRuns () const
 
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
 ProductRegistryHelper ()
 
std::vector< bool > const & recordProvenanceList () const
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
virtual ~ProductRegistryHelper () noexcept(false)
 

Private Attributes

std::function< void(BranchDescription const &)> callWhenNewProductsRegistered_
 
std::array< std::vector< edm::ProductResolverIndex >, edm::NumBranchTypesputIndicies_
 
std::vector< edm::ProductResolverIndexputTokenToResolverIndex_
 

Friends

class EDFilter
 
class EDProducer
 
class global::EDFilterBase
 
class global::EDProducerBase
 
class limited::EDFilterBase
 
class limited::EDProducerBase
 
class one::EDFilterBase
 
class one::EDProducerBase
 
class PuttableSourceBase
 
template<typename T >
class stream::ProducingModuleAdaptorBase
 

Additional Inherited Members

- Private Types inherited from edm::ProductRegistryHelper
typedef std::vector< TypeLabelItemTypeLabelList
 
- Static Private Member Functions inherited from edm::ProductRegistryHelper
static void addToRegistry (TypeLabelList::const_iterator const &iBegin, TypeLabelList::const_iterator const &iEnd, ModuleDescription const &iDesc, ProductRegistry &iReg, ProductRegistryHelper *iProd, bool iIsListener=false)
 

Detailed Description

Definition at line 71 of file ProducerBase.h.

Member Typedef Documentation

◆ ModuleToResolverIndicies

using edm::ProducerBase::ModuleToResolverIndicies = std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex> >

Definition at line 90 of file ProducerBase.h.

◆ TypeLabelList

Definition at line 73 of file ProducerBase.h.

Constructor & Destructor Documentation

◆ ProducerBase()

edm::ProducerBase::ProducerBase ( )

Definition at line 16 of file ProducerBase.cc.

std::function< void(BranchDescription const &)> callWhenNewProductsRegistered_
Definition: ProducerBase.h:130

◆ ~ProducerBase()

edm::ProducerBase::~ProducerBase ( )
overridenoexcept

Definition at line 17 of file ProducerBase.cc.

17 {}

Member Function Documentation

◆ callWhenNewProductsRegistered()

void edm::ProducerBase::callWhenNewProductsRegistered ( std::function< void(BranchDescription const &)> const &  func)
inline

◆ commit_() [1/2]

template<typename P >
void edm::ProducerBase::commit_ ( P iPrincipal)
inlineprivate

Definition at line 121 of file ProducerBase.h.

References putIndicies_.

Referenced by edm::PuttableSourceBase::doBeginLumi(), edm::EDProducer::doBeginLuminosityBlock(), edm::EDFilter::doBeginLuminosityBlock(), edm::one::EDFilterBase::doBeginLuminosityBlock(), edm::one::EDProducerBase::doBeginLuminosityBlock(), edm::global::EDProducerBase::doBeginLuminosityBlock(), edm::limited::EDProducerBase::doBeginLuminosityBlock(), edm::global::EDFilterBase::doBeginLuminosityBlock(), edm::limited::EDFilterBase::doBeginLuminosityBlock(), edm::one::EDProducerBase::doBeginProcessBlock(), edm::one::EDFilterBase::doBeginProcessBlock(), edm::global::EDProducerBase::doBeginProcessBlock(), edm::limited::EDProducerBase::doBeginProcessBlock(), edm::limited::EDFilterBase::doBeginProcessBlock(), edm::global::EDFilterBase::doBeginProcessBlock(), edm::PuttableSourceBase::doBeginRun(), edm::EDProducer::doBeginRun(), edm::EDFilter::doBeginRun(), edm::one::EDProducerBase::doBeginRun(), edm::one::EDFilterBase::doBeginRun(), edm::global::EDProducerBase::doBeginRun(), edm::limited::EDProducerBase::doBeginRun(), edm::limited::EDFilterBase::doBeginRun(), edm::global::EDFilterBase::doBeginRun(), edm::EDProducer::doEndLuminosityBlock(), edm::EDFilter::doEndLuminosityBlock(), edm::one::EDProducerBase::doEndLuminosityBlock(), edm::one::EDFilterBase::doEndLuminosityBlock(), edm::global::EDProducerBase::doEndLuminosityBlock(), edm::limited::EDProducerBase::doEndLuminosityBlock(), edm::global::EDFilterBase::doEndLuminosityBlock(), edm::limited::EDFilterBase::doEndLuminosityBlock(), edm::one::EDProducerBase::doEndProcessBlock(), edm::one::EDFilterBase::doEndProcessBlock(), edm::global::EDProducerBase::doEndProcessBlock(), edm::limited::EDProducerBase::doEndProcessBlock(), edm::global::EDFilterBase::doEndProcessBlock(), edm::limited::EDFilterBase::doEndProcessBlock(), edm::EDProducer::doEndRun(), edm::EDFilter::doEndRun(), edm::one::EDFilterBase::doEndRun(), edm::one::EDProducerBase::doEndRun(), edm::global::EDProducerBase::doEndRun(), edm::limited::EDProducerBase::doEndRun(), edm::limited::EDFilterBase::doEndRun(), edm::global::EDFilterBase::doEndRun(), edm::EDProducer::doEvent(), edm::global::EDFilterBase::doEvent(), edm::EDFilter::doEvent(), edm::one::EDProducerBase::doEvent(), edm::one::EDFilterBase::doEvent(), edm::global::EDProducerBase::doEvent(), edm::limited::EDFilterBase::doEvent(), and edm::limited::EDProducerBase::doEvent().

121  {
122  iPrincipal.commit_(putIndicies_[producerbasehelper::PrincipalTraits<P>::kBranchType]);
123  }
std::array< std::vector< edm::ProductResolverIndex >, edm::NumBranchTypes > putIndicies_
Definition: ProducerBase.h:131

◆ commit_() [2/2]

template<typename P , typename I >
void edm::ProducerBase::commit_ ( P iPrincipal,
I *  iID 
)
inlineprivate

Definition at line 126 of file ProducerBase.h.

References putIndicies_.

126  {
127  iPrincipal.commit_(putIndicies_[producerbasehelper::PrincipalTraits<P>::kBranchType], iID);
128  }
std::array< std::vector< edm::ProductResolverIndex >, edm::NumBranchTypes > putIndicies_
Definition: ProducerBase.h:131

◆ indiciesForPutProducts()

std::vector<edm::ProductResolverIndex> const& edm::ProducerBase::indiciesForPutProducts ( BranchType  iBranchType) const
inline

Definition at line 95 of file ProducerBase.h.

References putIndicies_.

95  {
96  return putIndicies_[iBranchType];
97  }
std::array< std::vector< edm::ProductResolverIndex >, edm::NumBranchTypes > putIndicies_
Definition: ProducerBase.h:131

◆ produces() [1/11]

template<typename ProductType , Transition B>
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( typename ProductType  ,
Transition  B 
)
inlineprotected

Definition at line 153 of file ProductRegistryHelper.h.

153  {
154  TypeID tid(typeid(ProductType));
155  return BranchAliasSetterT<ProductType>{produces<B>(
157  }
Definition: APVGainStruct.h:7
def move(src, dest)
Definition: eostools.py:511

◆ produces() [2/11]

template<typename ProductType , BranchType B>
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( typename ProductType  ,
BranchType  B 
)
inlineprotected

Definition at line 136 of file ProductRegistryHelper.h.

136  {
137  return produces<ProductType, B>(std::string());
138  }

◆ produces() [3/11]

template<typename ProductType , BranchType B>
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( typename ProductType  ,
BranchType  B 
)
inlineprotected

Definition at line 141 of file ProductRegistryHelper.h.

141  {
142  TypeID tid(typeid(ProductType));
143  return BranchAliasSetterT<ProductType>{
145  }
Definition: APVGainStruct.h:7
def move(src, dest)
Definition: eostools.py:511

◆ produces() [4/11]

template<typename ProductType , Transition B>
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( typename ProductType  ,
Transition  B 
)
inlineprotected

Definition at line 148 of file ProductRegistryHelper.h.

148  {
149  return produces<ProductType, B>(std::string());
150  }

◆ produces() [5/11]

template<class ProductType >
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( class ProductType  )
inlineprotected

Definition at line 131 of file ProductRegistryHelper.h.

131  {
132  return produces<ProductType, InEvent>(std::move(instanceName));
133  }
def move(src, dest)
Definition: eostools.py:511

◆ produces() [6/11]

BranchAliasSetter edm::ProductRegistryHelper::produces
inlineprotected

Definition at line 159 of file ProductRegistryHelper.h.

161  {
162  return produces<Transition::Event>(id, std::move(instanceName), recordProvenance);
163  }
def move(src, dest)
Definition: eostools.py:511

◆ produces() [7/11]

template<BranchType B>
BranchAliasSetter edm::ProductRegistryHelper::produces ( BranchType  B)
inlineprotected

Definition at line 166 of file ProductRegistryHelper.h.

168  {
169  unsigned int index = typeLabelList_.size();
171  recordProvenanceList_.push_back(recordProvenance and B == InEvent);
172  return BranchAliasSetter{typeLabelList_.back(), EDPutToken{static_cast<unsigned int>(index)}};
173  }
Definition: APVGainStruct.h:7
constexpr Transition convertToTransition(BranchType iValue)
Definition: Transition.h:31
std::vector< bool > recordProvenanceList_
def move(src, dest)
Definition: eostools.py:511

◆ produces() [8/11]

template<Transition B>
BranchAliasSetter edm::ProductRegistryHelper::produces ( Transition  B)
inlineprotected

Definition at line 175 of file ProductRegistryHelper.h.

177  {
178  unsigned int index = typeLabelList_.size();
179  typeLabelList_.emplace_back(B, id, std::move(instanceName));
180  recordProvenanceList_.push_back(recordProvenance and B == Transition::Event);
181  return BranchAliasSetter{typeLabelList_.back(), EDPutToken{index}};
182  }
Definition: APVGainStruct.h:7
std::vector< bool > recordProvenanceList_
def move(src, dest)
Definition: eostools.py:511

◆ produces() [9/11]

template<Transition Tr = Transition::Event>
auto edm::ProductRegistryHelper::produces ( Transition  Tr = Transition::Event)
inlineprotectednoexcept

declare what type of product will make and with which optional label

the statement

produces<ProductType>("optlabel");

should be added to the producer ctor for every product

Definition at line 117 of file ProductRegistryHelper.h.

117  {
118  return ProductRegistryHelperAdaptor<Tr>(*this, std::move(instanceName));
119  }
def move(src, dest)
Definition: eostools.py:511

◆ produces() [10/11]

template<Transition Tr = Transition::Event>
auto edm::ProductRegistryHelper::produces ( Transition  Tr = Transition::Event)
inlineprotectednoexcept

Definition at line 121 of file ProductRegistryHelper.h.

121  {
122  return ProductRegistryHelperAdaptor<Tr>(*this);
123  }

◆ produces() [11/11]

template<class ProductType >
BranchAliasSetterT<ProductType> edm::ProductRegistryHelper::produces ( class ProductType  )
inlineprotected

Definition at line 126 of file ProductRegistryHelper.h.

126  {
127  return produces<ProductType, InEvent>(std::string());
128  }

◆ producesCollector()

ProducesCollector edm::ProducerBase::producesCollector ( )
protected

Definition at line 105 of file ProducerBase.cc.

Referenced by ConfigurableAnalysis::ConfigurableAnalysis(), and NTuplingDevice::NTuplingDevice().

105 { return ProducesCollector{this}; }

◆ putTokenIndexToProductResolverIndex()

std::vector<edm::ProductResolverIndex> const& edm::ProducerBase::putTokenIndexToProductResolverIndex ( ) const
inline

◆ recordProvenanceList()

std::vector<bool> const& edm::ProductRegistryHelper::recordProvenanceList
inline

Definition at line 100 of file ProductRegistryHelper.h.

Referenced by edm::PrincipalGetAdapter::recordProvenanceList().

100 { return recordProvenanceList_; }
std::vector< bool > recordProvenanceList_

◆ registerProducts()

void edm::ProducerBase::registerProducts ( ProducerBase producer,
ProductRegistry iReg,
ModuleDescription const &  md 
)

Definition at line 57 of file ProducerBase.cc.

References edm::ProductRegistryHelper::addToRegistry(), edm::ProductRegistry::callForEachBranch(), relativeConstraints::empty, registrationCallback(), and edm::ProductRegistryHelper::typeLabelList().

Referenced by edm::EDProducer::registerProductsAndCallbacks(), edm::EDFilter::registerProductsAndCallbacks(), edm::one::EDProducerBase::registerProductsAndCallbacks(), edm::one::EDFilterBase::registerProductsAndCallbacks(), edm::global::EDProducerBase::registerProductsAndCallbacks(), edm::limited::EDProducerBase::registerProductsAndCallbacks(), edm::global::EDFilterBase::registerProductsAndCallbacks(), and edm::limited::EDFilterBase::registerProductsAndCallbacks().

57  {
59  return;
60  }
61  //If we have a callback, first tell the callback about all the entries already in the
62  // product registry, then add any items this producer wants to add to the registry
63  // and only after that do we register the callback. This is done so the callback does not
64  // get called for items registered by this producer (avoids circular reference problems)
65  bool isListener = false;
66  if (registrationCallback()) {
67  isListener = true;
68  iReg->callForEachBranch(registrationCallback());
69  }
70  TypeLabelList const& plist = typeLabelList();
71 
72  ProductRegistryHelper::addToRegistry(plist.begin(), plist.end(), md, *(iReg), this, isListener);
73  if (registrationCallback()) {
75  regService->watchProductAdditions(CallbackWrapper(producer, registrationCallback(), iReg, md));
76  }
77  }
std::function< void(BranchDescription const &)> registrationCallback() const
used by the fwk to register list of products
Definition: ProducerBase.cc:19
ProductRegistryHelper::TypeLabelList TypeLabelList
Definition: ProducerBase.h:73
static void addToRegistry(TypeLabelList::const_iterator const &iBegin, TypeLabelList::const_iterator const &iEnd, ModuleDescription const &iDesc, ProductRegistry &iReg, ProductRegistryHelper *iProd, bool iIsListener=false)
TypeLabelList const & typeLabelList() const
used by the fwk to register the list of products of this module

◆ registrationCallback()

std::function< void(BranchDescription const &)> edm::ProducerBase::registrationCallback ( ) const

used by the fwk to register list of products

Definition at line 19 of file ProducerBase.cc.

References callWhenNewProductsRegistered_.

Referenced by registerProducts().

19  {
21  }
std::function< void(BranchDescription const &)> callWhenNewProductsRegistered_
Definition: ProducerBase.h:130

◆ resolvePutIndicies()

void edm::ProducerBase::resolvePutIndicies ( BranchType  iBranchType,
ModuleToResolverIndicies const &  iIndicies,
std::string const &  moduleLabel 
)

Definition at line 79 of file ProducerBase.cc.

References edm::convertToBranchType(), mps_fire::i, SiStripPI::max, HerwigMaxPtPartonFilter_cfi::moduleLabel, putIndicies_, putTokenToResolverIndex_, FastTimerService_cff::range, and edm::ProductRegistryHelper::typeLabelList().

Referenced by edm::PuttableSourceBase::beginJob().

81  {
82  auto const& plist = typeLabelList();
83  if (putTokenToResolverIndex_.size() != plist.size()) {
85  }
86  auto range = iIndicies.equal_range(moduleLabel);
87  putIndicies_[iBranchType].reserve(iIndicies.count(moduleLabel));
88  for (auto it = range.first; it != range.second; ++it) {
89  putIndicies_[iBranchType].push_back(std::get<2>(it->second));
90  unsigned int i = 0;
91  for (auto const& tl : plist) {
92  if (convertToBranchType(tl.transition_) == iBranchType and (tl.typeID_ == *std::get<0>(it->second)) and
93  (tl.productInstanceName_ == std::get<1>(it->second))) {
94  putTokenToResolverIndex_[i] = std::get<2>(it->second);
95  //NOTE: The ExternalLHEProducer puts the 'same' product in at
96  // both beginRun and endRun. Therefore we can get multiple matches.
97  // When the module is finally fixed, we can use the 'break'
98  //break;
99  }
100  ++i;
101  }
102  }
103  }
std::array< std::vector< edm::ProductResolverIndex >, edm::NumBranchTypes > putIndicies_
Definition: ProducerBase.h:131
std::vector< edm::ProductResolverIndex > putTokenToResolverIndex_
Definition: ProducerBase.h:132
TypeLabelList const & typeLabelList() const
used by the fwk to register the list of products of this module
constexpr BranchType convertToBranchType(Transition iValue)
Definition: Transition.h:26

◆ typeLabelList()

ProductRegistryHelper::TypeLabelList const & edm::ProductRegistryHelper::typeLabelList

used by the fwk to register the list of products of this module

Definition at line 20 of file ProductRegistryHelper.cc.

Referenced by edm::PrincipalGetAdapter::getPutTokenIndex(), edm::PrincipalGetAdapter::getTypeIDForPutTokenIndex(), and edm::PrincipalGetAdapter::productInstanceLabel().

20 { return typeLabelList_; }

Friends And Related Function Documentation

◆ EDFilter

friend class EDFilter
friend

Definition at line 109 of file ProducerBase.h.

◆ EDProducer

friend class EDProducer
friend

Definition at line 108 of file ProducerBase.h.

◆ global::EDFilterBase

friend class global::EDFilterBase
friend

Definition at line 113 of file ProducerBase.h.

◆ global::EDProducerBase

friend class global::EDProducerBase
friend

Definition at line 112 of file ProducerBase.h.

◆ limited::EDFilterBase

friend class limited::EDFilterBase
friend

Definition at line 115 of file ProducerBase.h.

◆ limited::EDProducerBase

friend class limited::EDProducerBase
friend

Definition at line 114 of file ProducerBase.h.

◆ one::EDFilterBase

friend class one::EDFilterBase
friend

Definition at line 111 of file ProducerBase.h.

◆ one::EDProducerBase

friend class one::EDProducerBase
friend

Definition at line 110 of file ProducerBase.h.

◆ PuttableSourceBase

friend class PuttableSourceBase
friend

Definition at line 116 of file ProducerBase.h.

◆ stream::ProducingModuleAdaptorBase

template<typename T >
friend class stream::ProducingModuleAdaptorBase
friend

Definition at line 118 of file ProducerBase.h.

Member Data Documentation

◆ callWhenNewProductsRegistered_

std::function<void(BranchDescription const&)> edm::ProducerBase::callWhenNewProductsRegistered_
private

Definition at line 130 of file ProducerBase.h.

Referenced by callWhenNewProductsRegistered(), and registrationCallback().

◆ putIndicies_

std::array<std::vector<edm::ProductResolverIndex>, edm::NumBranchTypes> edm::ProducerBase::putIndicies_
private

Definition at line 131 of file ProducerBase.h.

Referenced by commit_(), indiciesForPutProducts(), and resolvePutIndicies().

◆ putTokenToResolverIndex_

std::vector<edm::ProductResolverIndex> edm::ProducerBase::putTokenToResolverIndex_
private

Definition at line 132 of file ProducerBase.h.

Referenced by putTokenIndexToProductResolverIndex(), and resolvePutIndicies().