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 {
33  public:
34  static int const invalidSplitLevel = -1;
35  static int const invalidBasketSize = 0;
36  enum MatchMode { Strict = 0, Permissive };
37 
39 
41  std::string const& moduleLabel,
42  std::string const& processName,
43  std::string const& className,
46  std::string const& moduleName,
48  TypeWithDict const& theTypeWithDict,
49  bool produced = true,
50  bool availableOnlyAtEndTransition = false,
51  std::set<std::string> const& aliases = std::set<std::string>());
52 
53  BranchDescription(BranchDescription const& aliasForBranch,
54  std::string const& moduleLabelAlias,
55  std::string const& poruductInstanceAlias);
56 
58 
59  void init() {
62  }
63 
64  void initBranchName();
65 
66  void initFromDictionary();
67 
68  void write(std::ostream& os) const;
69 
70  void merge(BranchDescription const& other);
71 
72  std::string const& moduleLabel() const { return moduleLabel_; }
73  std::string const& processName() const { return processName_; }
74  BranchID const& branchID() const { return branchID_; }
75  BranchID const& aliasForBranchID() const { return aliasForBranchID_; }
76  bool isAlias() const { return aliasForBranchID_.isValid() && produced(); }
78  std::string const& fullClassName() const { return fullClassName_; }
79  std::string const& className() const { return fullClassName(); }
82  bool produced() const { return transient_.produced_; }
83  void setProduced(bool isProduced) { transient_.produced_ = isProduced; }
84  bool present() const { return !transient_.dropped_; }
85  bool dropped() const { return transient_.dropped_; }
86  void setDropped(bool isDropped) { transient_.dropped_ = isDropped; }
87  bool onDemand() const { return transient_.onDemand_; }
88  void setOnDemand(bool isOnDemand) { transient_.onDemand_ = isOnDemand; }
90  bool transient() const { return transient_.transient_; }
91  void setTransient(bool isTransient) { transient_.transient_ = isTransient; }
92  TypeWithDict const& wrappedType() const { return transient_.wrappedType_; }
98  int splitLevel() const { return transient_.splitLevel_; }
100  int basketSize() const { return transient_.basketSize_; }
102 
103  bool isSwitchAlias() const { return not transient_.switchAliasModuleLabel_.empty(); }
107  void setSwitchAliasForBranch(BranchDescription const& aliasForBranch);
108 
109  bool isAnyAlias() const { return isAlias() or isSwitchAlias(); }
110 
112  std::string const& moduleName() const { return transient_.moduleName_; }
113 
114  std::set<std::string> const& branchAliases() const { return branchAliases_; }
115  void insertBranchAlias(std::string const& alias) { branchAliases_.insert(alias); }
116  std::string const& branchName() const { return transient_.branchName_; }
118  BranchType const& branchType() const { return branchType_; }
119  std::string const& wrappedName() const { return transient_.wrappedName_; }
121 
122  bool isMergeable() const { return transient_.isMergeable_; }
124 
126 
128 
129  struct Transients {
130  Transients();
131 
132  void reset();
133 
134  // The parameter set id of the producer.
135  // This is set if and only if produced_ is true.
137 
138  // The module name of the producer.
139  // This is set if and only if produced_ is true.
141 
142  // The branch name, which is currently derivable fron the other attributes.
144 
145  // The wrapped class name, which is currently derivable fron the other attributes.
147 
148  // For SwitchProducer alias, the label of the aliased-for label; otherwise empty
150 
151  // Need a separate (transient) BranchID for switch, because
152  // otherwise originalBranchID() gives wrong answer when reading
153  // from a file (leading to wrong ProductProvenance to be retrieved)
155 
156  // A TypeWithDict object for the wrapped object
158 
159  // A TypeWithDict object for the unwrapped object
161 
162  // The split level of the branch, as marked
163  // in the data dictionary.
165 
166  // The basket size of the branch, as marked
167  // in the data dictionary.
169 
170  // Was this branch produced in this process rather than in a previous process
171  bool produced_;
172 
173  // Was this branch produced in this current process and by unscheduled production
174  // This item is set only in the framework, not by FWLite.
175  bool onDemand_;
176 
177  // Has the branch been dropped from the product tree in this file
178  // (or if this is a merged product registry, in the first file).
179  // This item is set only in the framework, not by FWLite.
180  bool dropped_;
181 
182  // Is the class of the branch marked as transient
183  // in the data dictionary
185 
186  // if Run or Lumi based, can only get at end transition
188 
189  // True if the product definition has a mergeProduct function
190  // and the branchType is Run or Lumi
192  };
193 
194  private:
195  void throwIfInvalid_() const;
196 
197  // What tree is the branch in?
199 
200  // A human friendly string that uniquely identifies the EDProducer
201  // and becomes part of the identity of a product that it produces
203 
204  // the physical process that this program was part of (e.g. production)
206 
207  // An ID uniquely identifying the branch
209 
210  // the full name of the type of product this is
212 
213  // a readable name of the type of product this is
215 
216  // a user-supplied name to distinguish multiple products of the same type
217  // that are produced by the same producer
219 
220  // The branch ROOT alias(es), which are settable by the user.
221  std::set<std::string> branchAliases_;
222 
223  // If this branch *is* an EDAlias, this field is the BranchID
224  // of the branch for which this branch is an alias.
225  // If this branch is not an EDAlias, the normal case, this field is 0.
227 
229  };
230 
231  inline std::ostream& operator<<(std::ostream& os, BranchDescription const& p) {
232  p.write(os);
233  return os;
234  }
235 
236  bool operator<(BranchDescription const& a, BranchDescription const& b);
237 
238  bool operator==(BranchDescription const& a, BranchDescription const& b);
239 
240  bool combinable(BranchDescription const& a, BranchDescription const& b);
241 
243 } // namespace edm
244 #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:22
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:118
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:119
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