CMS 3D CMS Logo

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 {
33  public:
34  static int const invalidSplitLevel = -1;
35  static int const invalidBasketSize = 0;
36  enum MatchMode { Strict = 0,
38 
40 
42  std::string const& moduleLabel,
43  std::string const& processName,
44  std::string const& className,
47  std::string const& moduleName,
49  TypeWithDict const& theTypeWithDict,
50  bool produced = true,
51  bool availableOnlyAtEndTransition = false,
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;}
91  bool transient() const {return transient_.transient_;}
92  void setTransient(bool isTransient) {transient_.transient_ = isTransient;}
99  int splitLevel() const {return transient_.splitLevel_;}
101  int basketSize() const {return transient_.basketSize_;}
103 
105  std::string const& moduleName() const {return transient_.moduleName_;}
106 
107  std::set<std::string> const& branchAliases() const {return branchAliases_;}
109  branchAliases_.insert(alias);
110  }
111  std::string const& branchName() const {return transient_.branchName_;}
113  BranchType const& branchType() const {return branchType_;}
116 
118 
120 
121  struct Transients {
122  Transients();
123 
124  void reset();
125 
126  // The parameter set id of the producer.
127  // This is set if and only if produced_ is true.
129 
130  // The module name of the producer.
131  // This is set if and only if produced_ is true.
133 
134  // The branch name, which is currently derivable fron the other attributes.
136 
137  // The wrapped class name, which is currently derivable fron the other attributes.
139 
140  // A TypeWithDict object for the wrapped object
142 
143  // A TypeWithDict object for the unwrapped object
145 
146  // The split level of the branch, as marked
147  // in the data dictionary.
149 
150  // The basket size of the branch, as marked
151  // in the data dictionary.
153 
154  // Was this branch produced in this process rather than in a previous process
155  bool produced_;
156 
157  // Was this branch produced in this current process and by unscheduled production
158  // This item is set only in the framework, not by FWLite.
159  bool onDemand_;
160 
161  // Has the branch been dropped from the product tree in this file
162  // (or if this is a merged product registry, in the first file).
163  // This item is set only in the framework, not by FWLite.
164  bool dropped_;
165 
166  // Is the class of the branch marked as transient
167  // in the data dictionary
169 
170  // if Run or Lumi based, can only get at end transition
172  };
173 
174  private:
175  void throwIfInvalid_() const;
176 
177  // What tree is the branch in?
179 
180  // A human friendly string that uniquely identifies the EDProducer
181  // and becomes part of the identity of a product that it produces
183 
184  // the physical process that this program was part of (e.g. production)
186 
187  // An ID uniquely identifying the branch
189 
190  // the full name of the type of product this is
192 
193  // a readable name of the type of product this is
195 
196  // a user-supplied name to distinguish multiple products of the same type
197  // that are produced by the same producer
199 
200  // The branch ROOT alias(es), which are settable by the user.
201  std::set<std::string> branchAliases_;
202 
203  // If this branch *is* an EDAlias, this field is the BranchID
204  // of the branch for which this branch is an alias.
205  // If this branch is not an EDAlias, the normal case, this field is 0.
207 
209  };
210 
211  inline
212  std::ostream&
213  operator<<(std::ostream& os, BranchDescription const& p) {
214  p.write(os);
215  return os;
216  }
217 
218  bool operator<(BranchDescription const& a, BranchDescription const& b);
219 
220  bool operator==(BranchDescription const& a, BranchDescription const& b);
221 
222  bool combinable(BranchDescription const& a, BranchDescription const& b);
223 
225  BranchDescription const& b,
226  std::string const& fileName);
227 }
228 #endif
size
Write out results.
bool operator<(DetSet< T > const &x, DetSet< T > const &y)
Definition: DetSet.h:90
type
Definition: HCALResponse.h:21
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)
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &) noexcept
std::string const & className() const
std::string const & moduleLabel() const
std::string const & productInstanceName() const
bool combinable(BranchDescription const &a, BranchDescription const &b)
TypeID unwrappedTypeID() const
void setWrappedName(std::string const &name)
void setSplitLevel(int level)
std::string const & friendlyClassName() const
BranchID const & branchID() 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
HLT enums.
double a
Definition: hdecay.h:121
BranchID const & originalBranchID() const
bool availableOnlyAtEndTransition() const
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
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