ATLAS Offline Software
MissingET_v1.icc
Go to the documentation of this file.
1 // -*- c++ -*-
2 
3 /*
4  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 
8 ////////////////////////////////////////////
9 // MissingET_v1 Inline Functions: Getters //
10 ////////////////////////////////////////////
11 
12 inline float xAOD::MissingET_v1::met() const { return sqrt(this->mpx()*this->mpx()+this->mpy()*this->mpy()); }
13 inline float xAOD::MissingET_v1::phi() const { return atan2(this->mpy(),this->mpx()); }
14 inline float xAOD::MissingET_v1::mpx() const { return m_acc_mpx(*this); }
15 inline float xAOD::MissingET_v1::mpy() const { return m_acc_mpy(*this); }
16 inline float xAOD::MissingET_v1::sumet() const { return m_acc_sumet(*this); }
17 
18 inline const std::string& xAOD::MissingET_v1::name() const { static const SG::AuxElement::Accessor<std::string> acc("name"); return acc(*this); }
19 inline std::size_t xAOD::MissingET_v1::nameHash() const {
20  if (!m_nameHash.isValid()) { m_nameHash.set(std::hash<std::string>()(this->f_nameConst())); }
21  return *m_nameHash.ptr();
22 }
23 inline MissingETBase::Types::bitmask_t xAOD::MissingET_v1::source() const { static const SG::AuxElement::Accessor<MissingETBase::Types::bitmask_t> acc("source"); return acc(*this); }
24 
25 ////////////////////////////////////////////
26 // MissingET_v1 Inline Functions: Setters //
27 ////////////////////////////////////////////
28 
29 inline float& xAOD::MissingET_v1::f_mpx() { return m_acc_mpx(*this); }
30 inline float& xAOD::MissingET_v1::f_mpy() { return m_acc_mpy(*this); }
31 inline float& xAOD::MissingET_v1::f_sumet() { return m_acc_sumet(*this); }
32 
33 inline std::string& xAOD::MissingET_v1::f_name() { static const SG::AuxElement::Accessor<std::string> acc("name"); return acc(*this); }
34 inline const std::string& xAOD::MissingET_v1::f_nameConst() const { static const SG::AuxElement::ConstAccessor<std::string> acc("name"); return acc(*this); }
35 inline MissingETBase::Types::bitmask_t& xAOD::MissingET_v1::f_source() { static const SG::AuxElement::Accessor<MissingETBase::Types::bitmask_t> acc("source"); return acc(*this); }
36 
37 inline void xAOD::MissingET_v1::setMpx(float mpx) { this->f_mpx() = mpx; }
38 inline void xAOD::MissingET_v1::setMpy(float mpy) { this->f_mpy() = mpy; }
39 inline void xAOD::MissingET_v1::setSumet(float sumet) { this->f_sumet() = sumet; }
40 
41 inline void xAOD::MissingET_v1::setName(const std::string& name) {
42  this->f_name() = name;
43  updateHash();
44 }
45 
46 inline void xAOD::MissingET_v1::updateHash() {
47  m_nameHash.reset();
48  m_nameHash.set(std::hash<std::string>()(this->f_nameConst()));
49 }
50 inline void xAOD::MissingET_v1::setSource(MissingETBase::Types::bitmask_t src) { this->f_source() = src; }
51 
52 ///////////////////////////////////////////////////
53 // MissingET_v1 Inline Functions: Object algebra //
54 ///////////////////////////////////////////////////
55 
56 inline xAOD::MissingET_v1& xAOD::MissingET_v1::operator+=(const IParticle* particle)
57 { this->add(particle); return *this; }
58 
59 inline xAOD::MissingET_v1& xAOD::MissingET_v1::operator+=(const MissingET_v1& met)
60 { this->f_mpx() += met.mpx(); this->f_mpy() += met.mpy(); this->f_sumet() += met.sumet(); return *this; }
61 
62 inline xAOD::MissingET_v1& xAOD::MissingET_v1::operator-=(const MissingET_v1& met)
63 { this->f_mpx() -= met.mpx(); this->f_mpy() -= met.mpy(); this->f_sumet() -= met.sumet(); return *this; }
64 
65 inline xAOD::MissingET_v1& xAOD::MissingET_v1::operator*=(float scale)
66 { this->f_mpx() *= scale; this->f_mpy() *= scale; this->f_sumet() *= scale; return *this; }
67 
68 inline xAOD::MissingET_v1& xAOD::MissingET_v1::operator/=(float scale)
69 { float f(MissingETBase::Numerical::divide(1.,scale)); this->operator*=(f); return *this; }
70 
71 ///////////////////////////////////////////////////////////////////////
72 // MissingET_v1 Inline Functions: Object Algebra in Global Namespace //
73 ///////////////////////////////////////////////////////////////////////
74 
75 inline xAOD::MissingET_v1 operator+(const xAOD::MissingET_v1& met0,const xAOD::MissingET_v1& met1)
76 { return xAOD::MissingET_v1(met0.mpx()+met1.mpx(),met0.mpy()+met1.mpy(),met0.sumet()+met1.sumet()); }
77 
78 inline xAOD::MissingET_v1 operator-(const xAOD::MissingET_v1& met0,const xAOD::MissingET_v1& met1)
79 { return xAOD::MissingET_v1(met0.mpx()-met1.mpx(),met0.mpy()-met1.mpy(),met0.sumet()-met1.sumet()); }
80 
81 inline xAOD::MissingET_v1 operator*(const xAOD::MissingET_v1& met,float scale)
82 { return xAOD::MissingET_v1(met.mpx()*scale,met.mpy()*scale,met.sumet()*scale); }
83 
84 inline xAOD::MissingET_v1 operator*(float scale,const xAOD::MissingET_v1& met)
85 { return met * scale; }
86 
87 inline xAOD::MissingET_v1 operator/(const xAOD::MissingET_v1& met,float scale)
88 { float f(MissingETBase::Numerical::divide(1.,scale)); return f * met; }
89 
90 ////////////////////////////////////////////////
91 // MissingET_v1 Inline Functions: Comparators //
92 ////////////////////////////////////////////////
93 
94 inline bool xAOD::MissingET_v1::operator==(const MissingET_v1& met) const
95 { return MissingETBase::Numerical::isEqual(met.mpx(),this->mpx()) && MissingETBase::Numerical::isEqual(met.mpy(),this->mpy()) && MissingETBase::Numerical::isEqual(met.sumet(),this->sumet()); }
96 
97 inline bool xAOD::MissingET_v1::operator!=(const MissingET_v1& met) const
98 { return !this->operator==(met); }
99 
100 //////////////////////////////////////////////////
101 // MissingET_v1 Inline Functions: Data Managers //
102 //////////////////////////////////////////////////
103 
104 inline void xAOD::MissingET_v1::clear()
105 { this->f_mpx() = 0.; this->f_mpy() = 0.; this->f_sumet() = 0.; }
106 
107 ///////////////////////////////////////////////////////////////
108 // The rest of the file contains doxygen documentation only! //
109 ///////////////////////////////////////////////////////////////
110 
111 /*! @class xAOD::MissingET_v1
112  *
113  * This object provides the data store for the missing transverse momentum (MET) components @f$(p_{x},p_{y},\Sigma E_{\rmT}) @f$. In addition, each
114  * xAOD::MissingET_v1 object stores the name of the MET term it represents, and a source indicator. The object can be instantiated as a default (no-op)
115  * @link xAOD::MissingET_v1::MissingET_v1(bool) object without a datastore @endlink, or a fully functional plain-old-data (POD) object with a private data store.
116  * The latter is supported by constructors with just @link xAOD::MissingET_v1::MissingET_v1(const std::string&,MissingETBase::Types::bitmask_t) name and source indicator @endlink,
117  * initial kinematics are set to zero), and constructors storing (initial or final) kinematic contributions, either from a
118  * @link xAOD::MissingET_v1::MissingET_v1(const IParticle*,const std::string&,MissingETBase::Types::bitmask_t) physics or signal object reference @endlink
119  * or from @link xAOD::MissingET_v1::MissingET_v1(float,float,float,const std::string&,MissingETBase::Types::bitmask_t) individually specified kinematics @endlink.
120  *
121  * @note This object is designed to store only the summed kinematics of a MET term, together with some identifiers. The actual contribution to this term from
122  * any physics or signal object to this MET term is not stored here, but in a dedicated @link xAOD::MissingETComponent_v1 MET component object @endlink.
123  *
124  * Adding kinematics to a MET term implies to use the correct convention, which is given by
125  * @f{eqnarray*}{
126  * p_{x}^{\rm miss} & = & - \sum p_{x} \\
127  * p_{y}^{\rm miss} & = & - \sum p_{y} \\
128  * \Sigma E_{\rm T} & = & \sum p_{\rm T}.
129  * @f}
130  * Here @f$ p_{x,y} @f$ and @f$ p_{\rm T} @f$ are the transverse momentum and its components of the particle (or detector signal object) added to the MET object. This convention
131  * is implemented by the xAOD::MissingET_v1::add() method, which is highly recommended to be used to fill the MET term.
132  *
133  * MET data are initially represented in indivdual, non-storable data objects.
134  * As mentioned above, each of these data objects typically contains the contribution from a set of same type final state objects
135  * like particles and jets, and is identified as a specific contribution by a name and a source indicator (bit pattern). In general all MET objects from the various
136  * sources contribute to a given MET reconstruction configuration and their sum is the overall MET for the event. For storage, and to indicated that a given xAOD::MissingET_v1
137  * object represents a certain MET term in a given MET reconstruction configuration, the individual MET objects
138  * are collected into a xAOD::MissingETContainer_v1 object. Typically, the insertion sequence (e.g. the index of an individual MET object) in this container is
139  * determined by the tool sequence with which the MET terms are reconstructed, there is no particular enforcement of this rule in the EDM. Safe (random) accessors using the
140  * name or the source indicator of the requested MET object are provided by the MET object.
141  *
142  * @author Peter Loch <loch_AT_physics.arizona.edu>
143  * @author Silvia Resconi <Silvia.Resconi_AT_cern.ch>
144  *
145  * @date Feb. 20, 2014
146  * @version v1.0 (for release 19.0.1)
147  */
148 
149 //////////////////
150 // Constructors //
151 //////////////////
152 
153 /*! @fn xAOD::MissingET_v1::MissingET_v1(bool createStore)
154  *
155  * This constructor generates a no-op object without an attached store, if invoked with its default argument, which is the same as explicitly invoking it
156  * the argument @c false.
157  *
158  * @param[in] createStore flags if private store should be created (@c true) or not (@c false) (optional, default is @c false - no private store)
159  *
160  * @note The default constructor is provided in accordance with requirements for the general xAOD EDM design. An object constructed this way does not
161  * provide a data store, and any use of an accessor method for such an object may lead to undesired behaviour and program crashes.
162  */
163 
164 /*! @fn xAOD::MissingET_v1::MissingET_v1(const std::string& name="MissingET",MissingETBase::Types::bitmask_t src)
165  *
166  * A MET object with a name and and (optional) source indicator is constructed. The initiat MET components @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ are each set to zero.
167  *
168  * @param[in] name argument providing a name for the MissingET_v1 object, default "MissingET"
169  * @param[in] src optional argument providing the source tag, default is "unknown" MissingETBase::Source::unknown().
170  *
171  * @note This constructors instantiates a MET object with a private data store for the kinematics with meaningful inditial values, and the given name and source indicator. While the
172  * object instantiated this way is not storable, it is otherwise a fully usable.
173  */
174 
175 /*! @fn xAOD::MissingET_v1::MissingET_v1(const IParticle* particle, const std::string& name,MissingETBase::Types::bitmask_t src)
176  *
177  * A MET object with a name (optional) and a source indicator (optional) is constructed. The initial MET components
178  * @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ are each set to the corresponding components in the particle.
179  *
180  * @param[in] particle reference to particle with initial kinematics
181  * @param[in] name optional argument providing a name for the MissingET_v1 object, default "MissingET"
182  * @param[in] src optional argument providing the source tag, default is "unknown" MissingETBase::Source::unknown().
183  *
184  * @note This constructors instantiates a MET object with a private data store for the kinematics with meaningful inditial values, and the given name and source indicator. While the
185  * object instantiated this way is not storable, it is otherwise a fully usable.
186  */
187 
188 /*! @fn xAOD::MissingET_v1::MissingET_v1(float mpx,float mpy,float pt,const std::string& name,MissingETBase::Types::bitmask_t src);
189  *
190  * A MET object with a name (optional) and a source indicator (optional) is constructed. The initial MET components
191  * @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ are given in the argument list.
192  *
193  * @param[in] mpx momentum component @f$ p_{x} @f$
194  * @param[in] mpy momentum component @f$ p_{y} @f$
195  * @param[in] pt momentum component @f$ p_{\rm T} @f$
196  * @param[in] name optional argument providing a name for the MissingET_v1 object, default "MissingET"
197  * @param[in] src optional argument providing the source tag, default is "unknown" MissingETBase::Source::unknown().
198  *
199  * @note This constructors instantiates a MET object with a private data store for the kinematics with meaningful inditial values, and the given name and source indicator. While the
200  * object instantiated this way is not storable, it is otherwise a fully usable. Not enforcing @f$ p_{\rm T} = \sqrt{ p_{x}^{2} + p_{y}^{2} } @f$ is intentional, as in
201  * principle the MET components ( @f$ E_{\rm T}^{\rm miss} @f$ ) can have a different scale than the scalar transverse momentum sum @f$ \Sigma E_{\rm T} @f$ .
202  */
203 
204 /*! @fn xAOD::MissingET_v1::MissingET_v1(const MissingET_v1& met)
205  *
206  * Provides a deep copy of the MET object. The constructed MissingET_v1 object does not share its AuxElement with the source object. If the source object is
207  * incomplete (has no data store), the resulting object does not have a data store either.
208  *
209  * @note The particular behaviour concerning the data store depends on the actual implementation of SG::AuxElement::makePrivateStore.
210  *
211  * @parm[in] met reference to non-modifiable MET object (the source).
212  */
213 
214 /////////////
215 // Setters //
216 /////////////
217 
218 /*! @fn void xAOD::MissingET_v1::setMpx(float value)
219  *
220  * @param[in] value new value for component.
221  *
222  * @note This is a true setter function. The previous stored value is replaced by the new value.
223  *
224  * @warning This method only sets one MET component. It does not update any other data held by the MET object. Clients should use the
225  * xAOD::MissingET_v1::add methods for coherent update of all related data.
226  */
227 
228 /*! @fn void xAOD::MissingET_v1::setMpy(float value)
229  * @copydetails xAOD::MissingET_v1::setMpx(float)
230  */
231 
232 /*! @fn void xAOD::MissingET_v1::setSumet(float value)
233  * @copydetails xAOD::MissingET_v1::setMpx(float)
234  */
235 
236 /*! @fn void xAOD::MissingET_v1::setName(const std::string& name)
237  *
238  * @param[in] name reference to non-modifiable dataword holding the desired name of the MET object.
239  *
240  * @note This is a true setter function. The previous stored value is replaced by the new value.
241  */
242 
243 /*! @fn void xAOD::MissingET_v1::setSource(MissingETBase::Types::bitmask_t src)
244  *
245  * Elements of the bitmasks and helpers interpreting them are given in the MissingETBase::Source structure.
246  *
247  * @param[in] src bitmask of new source indicator
248  *
249  * @note This is a true setter function. The previous stored value is replaced by the new value.
250  */
251 
252 ///////////////
253 // Accessors //
254 ///////////////
255 
256 /*! @fn const std::string& xAOD::MissingET_v1::name() const
257  *
258  * @return Reference to non-modifiable dataword storing the name of the MET object.
259  */
260 
261 /*! @fn MissingETBase::Types::bitmask_t xAOD::MissingET_v1::source() const
262  *
263  * @return Bit mask characterizing the source of this MET term
264  */
265 
266 /////////////////////////////
267 // Manipulating Kinematics //
268 /////////////////////////////
269 
270 /*! @fn virtual void xAOD::MissingET_v1::add(const IParticle* particle)
271  *
272  * The particle kinematics is added to MET.
273  *
274  * @param[in] particle pointer to the particle object
275  *
276  * This method updates the internal data stores holding @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ like:
277  * @f{eqnarray*}{
278  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} - p_{x}^{\rm particle} \\
279  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} - p_{y}^{\rm particle} \\
280  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} + p_{\rm T}^{\rm particle} .
281  * @f}
282  * The particle momentum components contributing to MET are @f$ p_{x}^{\rm particle} @f$, @f$ p_{y}^{\rm particle} @f$, and @f$ p_{\rm T}^{\rm particle} @f$.
283  *
284  * @note There is no reference to the particle object added to the MET object. Its composition can be stored in a MissingETComponent_v1 object, but this
285  * has to be explicitly done by the user.
286  */
287 
288 /*! @fn virtual void xAOD::MissingET_v1::add(const IParticle* particle,float scale)
289  *
290  * Here the particle kinematics is added to the MET object with a common scale factor. This method updates the internal data stores. If each
291  * MET component needs a different scale, xAOD::MissingET_v1::add(float,float,float) can be used.
292  *
293  * @param[in] particle pointer to the particle object
294  * @param[in] scale scale factor
295  *
296  * This method updates the internal data stores holding @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ like:
297  * @f{eqnarray*}{
298  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} - f \cdot p_{x}^{\rm particle} \\
299  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} - f \cdot p_{y}^{\rm particle} \\
300  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} + f \cdot p_{\rm T}^{\rm particle} .
301  * @f}
302  * The particle momentum components contributing to MET are @f$ p_{x}^{\rm particle} @f$, @f$ p_{y}^{\rm particle} @f$, and @f$ p_{\rm T}^{\rm particle} @f$.
303  * The scale factor if @f$ f @f$.
304  *
305  * @note There is no reference to the particle object added to the MET object. Its composition can be stored in a MissingETComponent_v1 object, but this
306  * has to be explicitly done by the user.
307  */
308 
309 /*! @fn virtual void xAOD::MissingET_v1::add(float px,float py)
310  *
311  * The given kinematic quantities are added to MET.
312  *
313  * @param[in] px momentum component @f$ p_{x} @f$
314  * @param[in] py momentum component @f$ p_{y} @f$
315  *
316  * This method updates the internal data stores.
317  */
318 
319 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator+=(const IParticle* particle)
320  *
321  * @return Reference to (updated) self.
322  * @copydetails xAOD::MissingET_v1::add(const IParticle* particle)
323  */
324 
325 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator-=(const IParticle* part)
326  *
327  * The particle kinematics is subtracted to the MET object This method updates the internal data stores. If each
328  * MET component needs a different scale, xAOD::MissingET_v1::add(float,float,float) can be used.
329  *
330  * @return Reference to (updated) self.
331  *
332  * @param[in] particle pointer to the particle object
333  *
334  * This method updates the internal data stores holding @f$ (p_{x},p_{y},\Sigma E_{\rm T}) @f$ like:
335  * @f{eqnarray*}{
336  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} + p_{x}^{\rm particle} \\
337  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} + p_{y}^{\rm particle} \\
338  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} - p_{\rm T}^{\rm particle} .
339  * @f}
340  * The particle momentum components subtracted from MET are @f$ p_{x}^{\rm particle} @f$, @f$ p_{y}^{\rm particle} @f$, and @f$ p_{\rm T}^{\rm particle} @f$.
341  */
342 
343 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator+=(const xAOD::MissingET_v1& met)
344  *
345  * @return Reference to self.
346  *
347  * @param[in] met reference to non-modifiable MET object.
348  *
349  * The data content of this MET object is updated with the components provided by the referenced MET object:
350  * @f{eqnarray*}{
351  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} + p_{x}^{{\rm miss}\prime} \\
352  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} + p_{y}^{{\rm miss}\prime} \\
353  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} + \Sigma E_{\rm miss}^{\prime} .
354  * @f}
355  *
356  * Here @f$ (p_{x}^{\rm miss},p_{y}^{\rm miss},\Sigma E_{\rm T}) @f$ are the components of this object, while
357  * @f$ (p_{x}^{{\rm miss}\prime},p_{y}^{{\rm miss}\prime},\Sigma E_{\rm T}^{\prime}) @f$ are the components of the added object.
358  */
359 
360 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator-=(const xAOD::MissingET_v1& met)
361  *
362  * @return Reference to self.
363  *
364  * @param[in] met reference to non-modifiable MET object.
365  *
366  * The data content of this MET object is updated with the components provided by the referenced MET object:
367  * @f{eqnarray*}{
368  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} - p_{x}^{{\rm miss}\prime} \\
369  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} - p_{y}^{{\rm miss}\prime} \\
370  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} - \Sigma E_{\rm miss}^{\prime} .
371  * @f}
372  *
373  * Here @f$ (p_{x}^{\rm miss},p_{y}^{\rm miss},\Sigma E_{\rm T}) @f$ are the components of this object, while
374  * @f$ (p_{x}^{{\rm miss}\prime},p_{y}^{{\rm miss}\prime},\Sigma E_{\rm T}^{\prime}) @f$ are the components of the subtracted object.
375  */
376 
377 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator*=(float scale)
378  *
379  * @return Reference to self.
380  *
381  * @param[in] scale scale factor to be applied to all MET components.
382  *
383  * The data content of this MET object is updated as follows:
384  * @f{eqnarray*}{
385  * p_{x}^{\rm miss} & \to & f \cdot p_{x}^{\rm miss} \\
386  * p_{y}^{\rm miss} & \to & f \cdot p_{y}^{\rm miss} \\
387  * \Sigma E_{\rm T} & \to & f \cdot \Sigma E_{\rm T}
388  * @f}
389  *
390  * Here @f$ (p_{x}^{\rm miss},p_{y}^{\rm miss},\Sigma E_{\rm T}) @f$ are the components of this object, and @f$ f @f$ is the scale factor.
391  */
392 
393 /*! @fn xAOD::MissingET_v1& xAOD::MissingET_v1::operator/=(float scale)
394  *
395  * @return Reference to self.
396  *
397  * @param[in] scale scale factor to be applied to all MET components.
398  *
399  * The data content of this MET object is updated as follows:
400  * @f{eqnarray*}{
401  * p_{x}^{\rm miss} & \to & p_{x}^{\rm miss} / f \\
402  * p_{y}^{\rm miss} & \to & p_{y}^{\rm miss} / f \\
403  * \Sigma E_{\rm T} & \to & \Sigma E_{\rm T} / f
404  * @f}
405  *
406  * Here @f$ (p_{x}^{\rm miss},p_{y}^{\rm miss},\Sigma E_{\rm T}) @f$ are the components of this object, and @f$ f @f$ is the scale factor.
407  *
408  * @note If @f$ f = 0 @f$, the rule implemented in MissingETBase::Numerical::divide(float,float) is applied to the results for each
409  * component.
410  */
411 
412 /////////////////
413 // Reset/Clear //
414 /////////////////
415 
416 /*! @fn void xAOD::MissingET_v1::clear()
417  *
418  * This function sets @f$ p_{x} = 0 @f$, @f$ p_{y} = 0 @f$, and @f$ \Sigma E_{\rm T} = 0 @f$. The name and the source indicator
419  * of this MET object are not changed.
420  */
421 
422 /////////////////
423 // Comparators //
424 /////////////////
425 
426 /*! @fn bool xAOD::MissingET_v1::operator==(const xAOD::MissingET_v1& met) const
427  *
428  * Two MET objects are equal when they have, within the precision defined in MissingETBase::Numerical::precision(),
429  * the same @f$ E_{\rm T}^{\rm miss} @f$ and the same @f$ \Sigma E_{\rm T} @f$.
430  *
431  * @return @c true if two MET objects are equal.
432  */
433 
434  /*! @fn bool xAOD::MissingET_v1::operator!=(const xAOD::MissingET_v1& met) const
435  *
436  * Two MET objects are not equal when they do not have, within the precision defined in MissingETBase::Numerical::precision(),
437  * the same @f$ E_{\rm T}^{\rm miss} @f$ and the same @f$ \Sigma E_{\rm T} @f$.
438  *
439  * @return @c true if two MET objects are not equal.
440  */
441 
442 /////////////////////////
443 // Protected Functions //
444 /////////////////////////
445 
446 /*! @fn float& xAOD::MissingET_v1::f_mpx(()
447  *
448  * The underlying SG::AuxElement store is accessed through references to keyed, modifiable data members.
449  *
450  * @return Reference to modifiable dataword storing MET object data.
451  */
452 
453 /*! @fn float& xAOD::MissingET_v1::f_py()
454  * @copydetails xAOD::MissingET_v1::f_mpx()
455  */
456 
457 /*! @fn float& xAOD::MissingET_v1::f_sumet()
458  * @copydetails xAOD::MissingET_v1::f_mpx()
459  */
460 
461 /*! @fn const std::string& xAOD::MissingET_v1::f_name()
462  * @copydetails xAOD::MissingET_v1::f_mpx()
463  */
464 
465 /*! @fn MissingETBase::Types::bitmask_t& xAOD::MissingET_v1::f_source()
466  * @copydetails xAOD::MissingET_v1::f_mpx()
467  */
468 
469 ////////////////////////////////
470 // Global Namespace Operators //
471 ////////////////////////////////
472 
473 /*! @fn xAOD::MissingET_v1 operator+(const xAOD::MissingET_v1& met0,const xAOD::MissingET_v1& met1)
474  *
475  * The MET components of the two referenced objects are added by (1) creating a copy of the first referenced MET object and
476  * (2) use the xAOD::MissingET_v1::operator+=(const xAOD::MissingET_v1&) method to add the second referenced MET object to it.
477  *
478  * @return New MissingET_v1 object reflecting the result of the add operation.
479  *
480  * @param[in] met0 reference to non-modifiable first MET object
481  * @param[in] met1 reference to non-modifiable second MET object
482  */
483 
484 /*! @fn xAOD::MissingET_v1 operator-(const xAOD::MissingET_v1& met0,const xAOD::MissingET_v1& met1)
485  *
486  * The MET components of the two referenced objects are subtracted by (1) creating a copy of the first referenced MET object and
487  * (2) use the xAOD::MissingET_v1::operator-=(const xAOD::MissingET_v1&) method to subtract the second referenced MET object from it.
488  *
489  * @return New MissingET_v1 object reflecting the result of the subtract operation.
490  *
491  * @param[in] met0 reference to non-modifiable first MET object
492  * @param[in] met1 reference to non-modifiable second MET object
493  */
494 
495 /*! @fn xAOD::MissingET_v1 operator*(const xAOD::MissingET_v1& met,float scale)
496  *
497  * The kinematic components of the referenced MET objects are scaled by (1) creating a copy of the referenced MET object and
498  * (2) use the xAOD::MissingET_v1::operator*=(float) method to apply the scale to the components of the new MET object.
499  *
500  * @return New MissingET_v1 object reflecting the result of the multiply operation.
501  *
502  * @param[in] met reference to non-modifiable MET object
503  * @param[in] scale scale factor to be applied
504  */
505 
506 /*! @fn xAOD::MissingET_v1 operator*(float scale,const xAOD::MissingET_v1& met)
507  * @copydetails operator*(const xAOD::MissingET_v1&,float)
508  */
509 
510 /*! @fn xAOD::MissingET_v1 operator/(const xAOD::MissingET_v1& met,float scale);
511  *
512  * The kinematic components of the referenced MET objects are scaled by (1) creating a copy of the referenced MET object and
513  * (2) use the xAOD::MissingET_v1::operator/=(float) method to divide the components of the new MET object by the scale factor.
514  *
515  * @return New MissingET_v1 object reflecting the result of the divide operation.
516  *
517  * @param[in] met reference to non-modifiable MET object
518  * @param[in] scale scale factor to be applied
519  */
520