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 
104  bool isSwitchAlias() const {return not transient_.switchAliasModuleLabel_.empty();}
108  void setSwitchAliasForBranch(BranchDescription const& aliasForBranch);
109 
110  bool isAnyAlias() const {return isAlias() or isSwitchAlias();}
111 
113  std::string const& moduleName() const {return transient_.moduleName_;}
114 
115  std::set<std::string> const& branchAliases() const {return branchAliases_;}
117  branchAliases_.insert(alias);
118  }
119  std::string const& branchName() const {return transient_.branchName_;}
121  BranchType const& branchType() const {return branchType_;}
124 
125  bool isMergeable() const { return transient_.isMergeable_; }
127 
129 
131 
132  struct Transients {
133  Transients();
134 
135  void reset();
136 
137  // The parameter set id of the producer.
138  // This is set if and only if produced_ is true.
140 
141  // The module name of the producer.
142  // This is set if and only if produced_ is true.
144 
145  // The branch name, which is currently derivable fron the other attributes.
147 
148  // The wrapped class name, which is currently derivable fron the other attributes.
150 
151  // For SwitchProducer alias, the label of the aliased-for label; otherwise empty
153 
154  // Need a separate (transient) BranchID for switch, because
155  // otherwise originalBranchID() gives wrong answer when reading
156  // from a file (leading to wrong ProductProvenance to be retrieved)
158 
159  // A TypeWithDict object for the wrapped object
161 
162  // A TypeWithDict object for the unwrapped object
164 
165  // The split level of the branch, as marked
166  // in the data dictionary.
168 
169  // The basket size of the branch, as marked
170  // in the data dictionary.
172 
173  // Was this branch produced in this process rather than in a previous process
174  bool produced_;
175 
176  // Was this branch produced in this current process and by unscheduled production
177  // This item is set only in the framework, not by FWLite.
178  bool onDemand_;
179 
180  // Has the branch been dropped from the product tree in this file
181  // (or if this is a merged product registry, in the first file).
182  // This item is set only in the framework, not by FWLite.
183  bool dropped_;
184 
185  // Is the class of the branch marked as transient
186  // in the data dictionary
188 
189  // if Run or Lumi based, can only get at end transition
191 
192  // True if the product definition has a mergeProduct function
193  // and the branchType is Run or Lumi
195  };
196 
197  private:
198  void throwIfInvalid_() const;
199 
200  // What tree is the branch in?
202 
203  // A human friendly string that uniquely identifies the EDProducer
204  // and becomes part of the identity of a product that it produces
206 
207  // the physical process that this program was part of (e.g. production)
209 
210  // An ID uniquely identifying the branch
212 
213  // the full name of the type of product this is
215 
216  // a readable name of the type of product this is
218 
219  // a user-supplied name to distinguish multiple products of the same type
220  // that are produced by the same producer
222 
223  // The branch ROOT alias(es), which are settable by the user.
224  std::set<std::string> branchAliases_;
225 
226  // If this branch *is* an EDAlias, this field is the BranchID
227  // of the branch for which this branch is an alias.
228  // If this branch is not an EDAlias, the normal case, this field is 0.
230 
232  };
233 
234  inline
235  std::ostream&
236  operator<<(std::ostream& os, BranchDescription const& p) {
237  p.write(os);
238  return os;
239  }
240 
241  bool operator<(BranchDescription const& a, BranchDescription const& b);
242 
243  bool operator==(BranchDescription const& a, BranchDescription const& b);
244 
245  bool combinable(BranchDescription const& a, BranchDescription const& b);
246 
248  BranchDescription const& b,
249  std::string const& fileName);
250 }
251 #endif
size
Write out results.
bool operator<(DetSet< T > const &x, DetSet< T > const &y)
Definition: DetSet.h:92
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
BranchID const & switchAliasForBranchID() const
BranchType
Definition: BranchType.h:11
void setWrappedType(TypeWithDict const &type)
void setTransient(bool isTransient)
char const * label
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &) noexcept
std::string const & className() const
std::string const & switchAliasModuleLabel() const
std::string const & moduleLabel() const
std::string const & productInstanceName() const
bool combinable(BranchDescription const &a, BranchDescription const &b)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
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
void setSwitchAliasModuleLabel(std::string label)
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.
void setSwitchAliasForBranch(BranchDescription const &aliasForBranch)
std::string const & wrappedName() const
void insertBranchAlias(std::string const &alias)
def move(src, dest)
Definition: eostools.py:511
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