CMS 3D CMS Logo

ProductRegistry.h
Go to the documentation of this file.
1 #ifndef DataFormats_Provenance_ProductRegistry_h
2 #define DataFormats_Provenance_ProductRegistry_h
3 
17 
18 #include <array>
19 #include <memory>
20 
21 #include <iosfwd>
22 #include <map>
23 #include <set>
24 #include <string>
25 #include <utility>
26 #include <vector>
27 
28 namespace edm {
29 
30  class ProductResolverIndexHelper;
31  class TypeID;
32  class TypeWithDict;
33 
35  public:
36  typedef std::map<BranchKey, BranchDescription> ProductList;
37 
39 
40  // A constructor from the persistent data memebers from another product registry.
41  // saves time by not copying the transient components.
42  // The constructed registry will be frozen by default.
43  explicit ProductRegistry(ProductList const& productList, bool toBeFrozen = true);
44 
45  virtual ~ProductRegistry() {}
46 
47  typedef std::map<BranchKey, BranchDescription const> ConstProductList;
48 
49  void addProduct(BranchDescription const& productdesc, bool iFromListener = false);
50 
51  void addLabelAlias(BranchDescription const& productdesc,
52  std::string const& labelAlias,
53  std::string const& instanceAlias);
54 
55  void copyProduct(BranchDescription const& productdesc);
56 
57  void setFrozen(bool initializeLookupInfo = true);
58 
59  void setFrozen(std::set<TypeID> const& productTypesConsumed,
60  std::set<TypeID> const& elementTypesConsumed,
61  std::string const& processName);
62 
63  void setUnscheduledProducts(std::set<std::string> const& unscheduledLabels);
64 
66  std::string const& fileName,
68 
69  void updateFromInput(ProductList const& other);
70 
71  void updateFromInput(std::vector<BranchDescription> const& other);
72 
73  ProductList const& productList() const {
74  //throwIfNotFrozen();
75  return productList_;
76  }
77 
79  throwIfFrozen();
80  return productList_;
81  }
82 
83  // Return all the branch names currently known to *this. This
84  // does a return-by-value of the vector so that it may be used in
85  // a colon-initialization list.
86  std::vector<std::string> allBranchNames() const;
87 
88  // Return pointers to (const) BranchDescriptions for all the
89  // BranchDescriptions known to *this. This does a
90  // return-by-value of the vector so that it may be used in a
91  // colon-initialization list.
92  std::vector<BranchDescription const*> allBranchDescriptions() const;
93 
94  //NOTE: this is not const since we only want items that have non-const access to this class to be
95  // able to call this internal iteration
96  template <typename T>
97  void callForEachBranch(T const& iFunc) {
98  //NOTE: If implementation changes from a map, need to check that iterators are still valid
99  // after an insert with the new container, else need to copy the container and iterate over the copy
100  for (ProductRegistry::ProductList::const_iterator itEntry = productList_.begin(), itEntryEnd = productList_.end();
101  itEntry != itEntryEnd;
102  ++itEntry) {
103  iFunc(itEntry->second);
104  }
105  }
106  ProductList::size_type size() const { return productList_.size(); }
107 
108  void print(std::ostream& os) const;
109 
110  bool anyProducts(BranchType const brType) const;
111 
112  std::shared_ptr<ProductResolverIndexHelper const> productLookup(BranchType branchType) const;
113  std::shared_ptr<ProductResolverIndexHelper> productLookup(BranchType branchType);
114 
115  // returns the appropriate ProductResolverIndex else ProductResolverIndexInvalid if no BranchID is available
116  ProductResolverIndex indexFrom(BranchID const& iID) const;
117 
118  bool productProduced(BranchType branchType) const { return transient_.productProduced_[branchType]; }
120 
121  std::vector<std::pair<std::string, std::string>> const& aliasToOriginal() const {
123  }
124 
125  ProductResolverIndex const& getNextIndexValue(BranchType branchType) const;
126 
128 
129  bool frozen() const { return transient_.frozen_; }
130 
131  struct Transients {
132  Transients();
133  void reset();
134 
135  std::shared_ptr<ProductResolverIndexHelper const> eventProductLookup() const {
137  }
138  std::shared_ptr<ProductResolverIndexHelper>& eventProductLookup() {
140  }
141  std::shared_ptr<ProductResolverIndexHelper const> lumiProductLookup() const {
143  }
144  std::shared_ptr<ProductResolverIndexHelper>& lumiProductLookup() {
146  }
147  std::shared_ptr<ProductResolverIndexHelper const> runProductLookup() const {
149  }
150  std::shared_ptr<ProductResolverIndexHelper>& runProductLookup() { return get_underlying_safe(runProductLookup_); }
151 
152  bool frozen_;
153  // Is at least one (run), (lumi), (event) persistent product produced this process?
154  std::array<bool, NumBranchTypes> productProduced_;
156 
160 
164 
165  std::map<BranchID, ProductResolverIndex> branchIDToIndex_;
166 
167  std::vector<std::pair<std::string, std::string>> aliasToOriginal_;
168  };
169 
170  private:
171  void setProductProduced(BranchType branchType) {
172  transient_.productProduced_[branchType] = true;
174  }
175 
176  void freezeIt(bool frozen = true) { transient_.frozen_ = frozen; }
177 
178  void initializeLookupTables(std::set<TypeID> const* productTypesConsumed,
179  std::set<TypeID> const* elementTypesConsumed,
180  std::string const* processName);
181 
182  void checkDictionariesOfConsumedTypes(std::set<TypeID> const* productTypesConsumed,
183  std::set<TypeID> const* elementTypesConsumed,
184  std::map<TypeID, TypeID> const& containedTypeMap,
185  std::map<TypeID, std::vector<TypeWithDict>>& containedTypeToBaseTypesMap);
186 
188 
189  virtual void addCalled(BranchDescription const&, bool iFromListener);
190  void throwIfNotFrozen() const;
191  void throwIfFrozen() const;
192 
194 
197  };
198 
199  inline bool operator==(ProductRegistry const& a, ProductRegistry const& b) {
200  return a.productList() == b.productList();
201  }
202 
203  inline bool operator!=(ProductRegistry const& a, ProductRegistry const& b) { return !(a == b); }
204 
205  inline std::ostream& operator<<(std::ostream& os, ProductRegistry const& pr) {
206  pr.print(os);
207  return os;
208  }
209 
210 } // namespace edm
211 
212 #endif
edm::ProductRegistry::callForEachBranch
void callForEachBranch(T const &iFunc)
Definition: ProductRegistry.h:97
edm::ProductRegistry::Transients::productProduced_
std::array< bool, NumBranchTypes > productProduced_
Definition: ProductRegistry.h:154
edm::ProductRegistry::Transients::lumiProductLookup
std::shared_ptr< ProductResolverIndexHelper const > lumiProductLookup() const
Definition: ProductRegistry.h:141
edm::ProductRegistry::checkDictionariesOfConsumedTypes
void checkDictionariesOfConsumedTypes(std::set< TypeID > const *productTypesConsumed, std::set< TypeID > const *elementTypesConsumed, std::map< TypeID, TypeID > const &containedTypeMap, std::map< TypeID, std::vector< TypeWithDict >> &containedTypeToBaseTypesMap)
Definition: ProductRegistry.cc:473
edm::ProductResolverIndex
unsigned int ProductResolverIndex
Definition: ProductResolverIndex.h:8
edm::ProductRegistry::Transients::frozen_
bool frozen_
Definition: ProductRegistry.h:152
edm::ProductRegistry::indexFrom
ProductResolverIndex indexFrom(BranchID const &iID) const
Definition: ProductRegistry.cc:564
edm::ProductRegistry::allBranchNames
std::vector< std::string > allBranchNames() const
Definition: ProductRegistry.cc:201
edm::ProductRegistry::Transients::lumiProductLookup_
edm::propagate_const< std::shared_ptr< ProductResolverIndexHelper > > lumiProductLookup_
Definition: ProductRegistry.h:158
edm::ProductRegistry::transient_
Transients transient_
Definition: ProductRegistry.h:196
edm::ProductRegistry::setFrozen
void setFrozen(bool initializeLookupInfo=true)
Definition: ProductRegistry.cc:165
edm::ProductRegistry::Transients::runProductLookup_
edm::propagate_const< std::shared_ptr< ProductResolverIndexHelper > > runProductLookup_
Definition: ProductRegistry.h:159
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::ProductRegistry::size
ProductList::size_type size() const
Definition: ProductRegistry.h:106
edm::ProductRegistry::checkForDuplicateProcessName
void checkForDuplicateProcessName(BranchDescription const &desc, std::string const *processName) const
Definition: ProductRegistry.cc:553
edm::ProductRegistry::~ProductRegistry
virtual ~ProductRegistry()
Definition: ProductRegistry.h:45
ProductResolverIndex.h
edm::ProductRegistry::updateFromInput
void updateFromInput(ProductList const &other)
Definition: ProductRegistry.cc:221
edm::ProductRegistry::productLookup
std::shared_ptr< ProductResolverIndexHelper const > productLookup(BranchType branchType) const
Definition: ProductRegistry.cc:149
edm::ProductRegistry::getNextIndexValue
ProductResolverIndex const & getNextIndexValue(BranchType branchType) const
Definition: ProductRegistry.cc:578
MillePedeFileConverter_cfg.fileName
fileName
Definition: MillePedeFileConverter_cfg.py:32
edm::ProductRegistry::print
void print(std::ostream &os) const
Definition: ProductRegistry.cc:572
edm::ProductRegistry::Transients::eventProductLookup
std::shared_ptr< ProductResolverIndexHelper > & eventProductLookup()
Definition: ProductRegistry.h:138
edm::BranchType
BranchType
Definition: BranchType.h:11
edm::ProductRegistry::Transients::runNextIndexValue_
ProductResolverIndex runNextIndexValue_
Definition: ProductRegistry.h:163
edm::ProductRegistry
Definition: ProductRegistry.h:34
edm::BranchDescription::Permissive
Definition: BranchDescription.h:36
edm::operator<<
std::ostream & operator<<(std::ostream &ost, const HLTGlobalStatus &hlt)
Formatted printout of trigger tbale.
Definition: HLTGlobalStatus.h:106
edm::propagate_const
Definition: propagate_const.h:32
edm::operator!=
bool operator!=(debugging_allocator< X > const &, debugging_allocator< Y > const &) noexcept
Definition: debugging_allocator.h:75
edm::ProductRegistry::anyProducts
bool anyProducts(BranchType const brType) const
Definition: ProductRegistry.cc:139
trigger::size_type
uint16_t size_type
Definition: TriggerTypeDefs.h:18
edm::ProductRegistry::productListUpdator
ProductList & productListUpdator()
Definition: ProductRegistry.h:78
edm::operator==
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &) noexcept
Definition: debugging_allocator.h:72
BranchListIndex.h
edm::ProductRegistry::Transients::lumiProductLookup
std::shared_ptr< ProductResolverIndexHelper > & lumiProductLookup()
Definition: ProductRegistry.h:144
edm::ProductRegistry::Transients::eventProductLookup
std::shared_ptr< ProductResolverIndexHelper const > eventProductLookup() const
Definition: ProductRegistry.h:135
edm::BranchID
Definition: BranchID.h:14
edm::ProductRegistry::Transients::Transients
Transients()
Definition: ProductRegistry.cc:34
edm::BranchDescription::MatchMode
MatchMode
Definition: BranchDescription.h:36
trackingPlots.other
other
Definition: trackingPlots.py:1465
edm::ProductRegistry::throwIfFrozen
void throwIfFrozen() const
Definition: ProductRegistry.cc:185
b
double b
Definition: hdecay.h:118
edm::ProductRegistry::addProduct
void addProduct(BranchDescription const &productdesc, bool iFromListener=false)
Definition: ProductRegistry.cc:73
edm::ProductRegistry::throwIfNotFrozen
void throwIfNotFrozen() const
Definition: ProductRegistry.cc:192
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ProductRegistry::copyProduct
void copyProduct(BranchDescription const &productdesc)
Definition: ProductRegistry.cc:126
edm::get_underlying_safe
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
Definition: get_underlying_safe.h:40
edm::ProductRegistry::Transients::branchIDToIndex_
std::map< BranchID, ProductResolverIndex > branchIDToIndex_
Definition: ProductRegistry.h:165
edm::ProductRegistry::ProductList
std::map< BranchKey, BranchDescription > ProductList
Definition: ProductRegistry.h:36
edm::ProductRegistry::Transients::reset
void reset()
Definition: ProductRegistry.cc:50
BranchDescription.h
edm::ProductRegistry::Transients::runProductLookup
std::shared_ptr< ProductResolverIndexHelper > & runProductLookup()
Definition: ProductRegistry.h:150
a
double a
Definition: hdecay.h:119
sipixeldigitoraw
Definition: SiPixelDigiToRaw.cc:38
edm::ProductRegistry::ConstProductList
std::map< BranchKey, BranchDescription const > ConstProductList
Definition: ProductRegistry.h:47
edm::ProductRegistry::ProductRegistry
ProductRegistry()
Definition: ProductRegistry.cc:32
BranchType.h
edm::ProductRegistry::allBranchDescriptions
std::vector< BranchDescription const * > allBranchDescriptions() const
Definition: ProductRegistry.cc:211
edm::ProductRegistry::addLabelAlias
void addLabelAlias(BranchDescription const &productdesc, std::string const &labelAlias, std::string const &instanceAlias)
Definition: ProductRegistry.cc:113
edm::ProductRegistry::initializeTransients
void initializeTransients()
Definition: ProductRegistry.h:127
edm::ProductRegistry::productList_
ProductList productList_
Definition: ProductRegistry.h:195
edm::ProductRegistry::setProductProduced
void setProductProduced(BranchType branchType)
Definition: ProductRegistry.h:171
SimL1EmulatorRepack_CalouGT_cff.processName
processName
Definition: SimL1EmulatorRepack_CalouGT_cff.py:17
edm::ProductRegistry::Transients
Definition: ProductRegistry.h:131
edm::ProductRegistry::initializeLookupTables
void initializeLookupTables(std::set< TypeID > const *productTypesConsumed, std::set< TypeID > const *elementTypesConsumed, std::string const *processName)
Definition: ProductRegistry.cc:307
edm::TypeID
Definition: TypeID.h:22
edm::ProductRegistry::productList
ProductList const & productList() const
Definition: ProductRegistry.h:73
edm::ProductRegistry::aliasToOriginal
std::vector< std::pair< std::string, std::string > > const & aliasToOriginal() const
Definition: ProductRegistry.h:121
edm::ProductRegistry::Transients::eventProductLookup_
edm::propagate_const< std::shared_ptr< ProductResolverIndexHelper > > eventProductLookup_
Definition: ProductRegistry.h:157
T
long double T
Definition: Basic3DVectorLD.h:48
edm::ProductRegistry::addCalled
virtual void addCalled(BranchDescription const &, bool iFromListener)
Definition: ProductRegistry.cc:199
BranchKey.h
edm::ProductRegistry::productProduced
bool productProduced(BranchType branchType) const
Definition: ProductRegistry.h:118
edm::ProductRegistry::frozen
bool frozen() const
Definition: ProductRegistry.h:129
edm::ProductRegistry::Transients::eventNextIndexValue_
ProductResolverIndex eventNextIndexValue_
Definition: ProductRegistry.h:161
edm::BranchDescription
Definition: BranchDescription.h:32
edm::ProductRegistry::Transients::lumiNextIndexValue_
ProductResolverIndex lumiNextIndexValue_
Definition: ProductRegistry.h:162
edm::ProductRegistry::nextIndexValue
ProductResolverIndex & nextIndexValue(BranchType branchType)
Definition: ProductRegistry.cc:586
genParticles_cff.map
map
Definition: genParticles_cff.py:11
edm::ProductRegistry::merge
std::string merge(ProductRegistry const &other, std::string const &fileName, BranchDescription::MatchMode branchesMustMatch=BranchDescription::Permissive)
Definition: ProductRegistry.cc:262
edm::ProductRegistry::Transients::aliasToOriginal_
std::vector< std::pair< std::string, std::string > > aliasToOriginal_
Definition: ProductRegistry.h:167
edm::ProductRegistry::anyProductProduced
bool anyProductProduced() const
Definition: ProductRegistry.h:119
get_underlying_safe.h
edm::ProductRegistry::freezeIt
void freezeIt(bool frozen=true)
Definition: ProductRegistry.h:176
edm::ProductRegistry::setUnscheduledProducts
void setUnscheduledProducts(std::set< std::string > const &unscheduledLabels)
Definition: ProductRegistry.cc:233
edm::ProductRegistry::Transients::anyProductProduced_
bool anyProductProduced_
Definition: ProductRegistry.h:155
edm::ProductRegistry::Transients::runProductLookup
std::shared_ptr< ProductResolverIndexHelper const > runProductLookup() const
Definition: ProductRegistry.h:147