CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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& productInstanceAlias);
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  //returns true if unscheduled (produced()==true) or using delayed reader (produced()==false)
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; }
93  TypeWithDict const& wrappedType() const { return transient_.wrappedType_; }
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 
114 
116  std::string const& moduleName() const { return transient_.moduleName_; }
117 
118  std::set<std::string> const& branchAliases() const { return branchAliases_; }
119  void insertBranchAlias(std::string const& alias) { branchAliases_.insert(alias); }
120  std::string const& branchName() const { return transient_.branchName_; }
122  BranchType const& branchType() const { return branchType_; }
123  std::string const& wrappedName() const { return transient_.wrappedName_; }
125 
126  bool isMergeable() const { return transient_.isMergeable_; }
128 
130 
132 
133  struct Transients {
134  Transients();
135 
136  void reset();
137 
138  // The parameter set id of the producer.
139  // This is set if and only if produced_ is true.
141 
142  // The module name of the producer.
143  // This is set if and only if produced_ is true.
145 
146  // The branch name, which is currently derivable from the other attributes.
148 
149  // The wrapped class name, which is currently derivable from the other attributes.
151 
152  // For SwitchProducer alias, the label of the aliased-for label; otherwise empty
154 
155  // Need a separate (transient) BranchID for switch, because
156  // otherwise originalBranchID() gives wrong answer when reading
157  // from a file (leading to wrong ProductProvenance to be retrieved)
159 
160  // A TypeWithDict object for the wrapped object
162 
163  // A TypeWithDict object for the unwrapped object
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  // Was this branch produced in this process rather than in a previous process
175  bool produced_;
176 
177  // Was this branch produced in this current process and by unscheduled production
178  // This item is set only in the framework, not by FWLite.
179  bool onDemand_;
180 
181  // Has the branch been dropped from the product tree in this file
182  // (or if this is a merged product registry, in the first file).
183  // This item is set only in the framework, not by FWLite.
184  bool dropped_;
185 
186  // Is the class of the branch marked as transient
187  // in the data dictionary
189 
190  // if Run or Lumi based, can only get at end transition
192 
193  // True if the product definition has a mergeProduct function
194  // and the branchType is Run or Lumi
196 
197  // True if provenance is set on call from input on read
199  };
200 
201  private:
202  void throwIfInvalid_() const;
203 
204  // What tree is the branch in?
206 
207  // A human friendly string that uniquely identifies the EDProducer
208  // and becomes part of the identity of a product that it produces
210 
211  // the physical process that this program was part of (e.g. production)
213 
214  // An ID uniquely identifying the branch
216 
217  // the full name of the type of product this is
219 
220  // a readable name of the type of product this is
222 
223  // a user-supplied name to distinguish multiple products of the same type
224  // that are produced by the same producer
226 
227  // The branch ROOT alias(es), which are settable by the user.
228  std::set<std::string> branchAliases_;
229 
230  // If this branch *is* an EDAlias, this field is the BranchID
231  // of the branch for which this branch is an alias.
232  // If this branch is not an EDAlias, the normal case, this field is 0.
234 
236  };
237 
238  inline std::ostream& operator<<(std::ostream& os, BranchDescription const& p) {
239  p.write(os);
240  return os;
241  }
242 
243  bool operator<(BranchDescription const& a, BranchDescription const& b);
244 
245  bool operator==(BranchDescription const& a, BranchDescription const& b);
246 
247  bool combinable(BranchDescription const& a, BranchDescription const& b);
248 
249  std::string match(BranchDescription const& a, BranchDescription const& b, std::string const& fileName);
250 } // namespace edm
251 #endif
bool operator<(DetSet< T > const &x, DetSet< T > const &y)
Definition: DetSet.h:89
constexpr bool operator==(ELseverityLevel const &e1, ELseverityLevel const &e2) noexcept
dictionary aliases
Definition: autoCond.py:86
std::string const & branchName() const
BranchType const & branchType() const
void setIsProvenanceSetOnRead(bool value=true) noexcept
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
static int const invalidSplitLevel
Definition: Hash.h:43
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
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)
def move
Definition: eostools.py:511
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)
bool isProvenanceSetOnRead() const noexcept
std::set< std::string > branchAliases_
BranchID const & aliasForBranchID() const
double a
Definition: hdecay.h:119
BranchID const & originalBranchID() const
tuple level
Definition: testEve_cfg.py:47
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
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