CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
BranchDescription.h
Go to the documentation of this file.
1 #ifndef DataFormats_Provenance_BranchDescription_h
2 #define DataFormats_Provenance_BranchDescription_h
3 
4 /*----------------------------------------------------------------------
5 
6 BranchDescription: The full description of a Branch.
7 This description also applies to every product instance on the branch.
8 
9 ----------------------------------------------------------------------*/
17 
18 #include <iosfwd>
19 #include <map>
20 #include <set>
21 #include <string>
22 
23 /*
24  BranchDescription
25 
26  definitions:
27  The event-independent description of an EDProduct.
28 
29 */
30 
31 namespace edm {
32  class WrapperInterfaceBase;
34  public:
35  static int const invalidSplitLevel = -1;
36  static int const invalidBasketSize = 0;
37  enum MatchMode { Strict = 0,
39 
41 
43  std::string const& moduleLabel,
44  std::string const& processName,
45  std::string const& className,
48  std::string const& moduleName,
50  TypeWithDict const& theTypeWithDict,
51  bool produced = true,
52  std::set<std::string> const& aliases = std::set<std::string>());
53 
54  BranchDescription(BranchDescription const& aliasForBranch,
55  std::string const& moduleLabelAlias,
56  std::string const& poruductInstanceAlias);
57 
59 
60  void init() {
63  }
64 
65  void initBranchName();
66 
67  void initFromDictionary();
68 
69  void write(std::ostream& os) const;
70 
71  void merge(BranchDescription const& other);
72 
73  std::string const& moduleLabel() const {return moduleLabel_;}
74  std::string const& processName() const {return processName_;}
75  BranchID const& branchID() const {return branchID_;}
76  BranchID const& aliasForBranchID() const {return aliasForBranchID_;}
77  bool isAlias() const {return aliasForBranchID_.isValid() && produced();}
79  std::string const& fullClassName() const {return fullClassName_;}
80  std::string const& className() const {return fullClassName();}
83  bool produced() const {return transient_.produced_;}
84  void setProduced(bool isProduced) {transient_.produced_ = isProduced;}
85  bool present() const {return !transient_.dropped_;}
86  bool dropped() const {return transient_.dropped_;}
87  void setDropped(bool isDropped) {transient_.dropped_ = isDropped;}
88  bool onDemand() const {return transient_.onDemand_;}
89  void setOnDemand(bool isOnDemand) {transient_.onDemand_ = isOnDemand;}
90  bool transient() const {return transient_.transient_;}
91  void setTransient(bool isTransient) {transient_.transient_ = isTransient;}
98  int splitLevel() const {return transient_.splitLevel_;}
100  int basketSize() const {return transient_.basketSize_;}
102 
104  std::string const& moduleName() const {return transient_.moduleName_;}
105 
106  std::set<std::string> const& branchAliases() const {return branchAliases_;}
107  void insertBranchAlias(std::string const& alias) {
108  branchAliases_.insert(alias);
109  }
110  std::string const& branchName() const {return transient_.branchName_;}
112  BranchType const& branchType() const {return branchType_;}
116 
117  WrapperInterfaceBase const* getInterface() const;
119 
121 
122  struct Transients {
123  Transients();
124 
125  void reset();
126 
127  // The parameter set id of the producer.
128  // This is set if and only if produced_ is true.
130 
131  // The module name of the producer.
132  // This is set if and only if produced_ is true.
134 
135  // The branch name, which is currently derivable fron the other attributes.
137 
138  // The wrapped class name, which is currently derivable fron the other attributes.
140 
141  // Was this branch produced in this process rather than in a previous process
142  bool produced_;
143 
144  // Was this branch produced in this current process and by unscheduled production
145  // This item is set only in the framework, not by FWLite.
146  bool onDemand_;
147 
148  // Has the branch been dropped from the product tree in this file
149  // (or if this is a merged product registry, in the first file).
150  // This item is set only in the framework, not by FWLite.
151  bool dropped_;
152 
153  // Is the class of the branch marked as transient
154  // in the data dictionary
156 
157  // A TypeWithDict object for the wrapped object
159 
160  // A TypeWithDict object for the unwrapped object
162 
163  // A pointer to a polymorphic object to obtain typed Wrapper.
165 
166  // The split level of the branch, as marked
167  // in the data dictionary.
169 
170  // The basket size of the branch, as marked
171  // in the data dictionary.
173  };
174 
175  private:
176  void throwIfInvalid_() const;
177 
178  // What tree is the branch in?
180 
181  // A human friendly string that uniquely identifies the EDProducer
182  // and becomes part of the identity of a product that it produces
184 
185  // the physical process that this program was part of (e.g. production)
187 
188  // An ID uniquely identifying the branch
190 
191  // the full name of the type of product this is
193 
194  // a readable name of the type of product this is
196 
197  // a user-supplied name to distinguish multiple products of the same type
198  // that are produced by the same producer
200 
201  // The branch ROOT alias(es), which are settable by the user.
202  std::set<std::string> branchAliases_;
203 
204  // If this branch *is* an EDAlias, this field is the BranchID
205  // of the branch for which this branch is an alias.
206  // If this branch is not an EDAlias, the normal case, this field is 0.
208 
210  };
211 
212  inline
213  std::ostream&
214  operator<<(std::ostream& os, BranchDescription const& p) {
215  p.write(os);
216  return os;
217  }
218 
219  bool operator<(BranchDescription const& a, BranchDescription const& b);
220 
221  bool operator==(BranchDescription const& a, BranchDescription const& b);
222 
223  bool combinable(BranchDescription const& a, BranchDescription const& b);
224 
225  std::string match(BranchDescription const& a,
226  BranchDescription const& b,
227  std::string const& fileName);
228 }
229 #endif
bool operator<(DetSet< T > const &x, DetSet< T > const &y)
Definition: DetSet.h:90
type
Definition: HCALResponse.h:21
dictionary aliases
Definition: autoCond.py:23
std::string const & branchName() const
BranchType const & branchType() const
static int const invalidSplitLevel
static int const invalidBasketSize
void setOnDemand(bool isOnDemand)
std::string const & processName() const
bool isValid() const
Definition: BranchID.h:24
void write(std::ostream &os) const
BranchType
Definition: BranchType.h:11
void setWrappedType(TypeWithDict const &type)
void setTransient(bool isTransient)
std::string const & className() const
std::string const & moduleLabel() const
std::string const & productInstanceName() const
bool combinable(BranchDescription const &a, BranchDescription const &b)
WrapperInterfaceBase * wrapperInterfaceBase_
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &)
TypeID unwrappedTypeID() const
void setWrappedName(std::string const &name)
void setSplitLevel(int level)
std::string const & friendlyClassName() const
BranchID const & branchID() const
WrapperInterfaceBase const * getInterface() const
TypeWithDict const & unwrappedType() const
void setDropped(bool isDropped)
std::type_info const & typeInfo() const
std::string const & moduleName() const
std::string const & fullClassName() const
ParameterSetID const & parameterSetID() const
double b
Definition: hdecay.h:120
std::set< std::string > const & branchAliases() const
std::set< std::string > branchAliases_
BranchID const & aliasForBranchID() const
double a
Definition: hdecay.h:121
WrapperInterfaceBase *& wrapperInterfaceBase()
BranchID const & originalBranchID() const
tuple level
Definition: testEve_cfg.py:34
void setUnwrappedType(TypeWithDict const &type)
void setBasketSize(int size)
void setProduced(bool isProduced)
std::ostream & operator<<(std::ostream &ost, const HLTGlobalStatus &hlt)
Formatted printout of trigger tbale.
std::string const & wrappedName() const
tuple size
Write out results.
void insertBranchAlias(std::string const &alias)
TypeWithDict const & wrappedType() const
std::string match(BranchDescription const &a, BranchDescription const &b, std::string const &fileName)
void merge(BranchDescription const &other)
TypeID wrappedTypeID() const