Rivet  3.1.3
SmearedMET.hh
1 // -*- C++ -*-
2 #ifndef RIVET_SmearedMET_HH
3 #define RIVET_SmearedMET_HH
4 
5 #include "Rivet/Projection.hh"
6 #include "Rivet/Projections/METFinder.hh"
7 #include "Rivet/Projections/MissingMomentum.hh"
8 #include "Rivet/Tools/SmearingFunctions.hh"
9 #include <functional>
10 
11 namespace Rivet {
12 
13 
15  class SmearedMET : public METFinder {
16  public:
17 
20 
24  template <typename V2VFN>
25  SmearedMET(const MissingMomentum& mm, const V2VFN& metSmearFn)
26  : _metSmearFn(metSmearFn)
27  {
28  setName("SmearedMET");
29  declare(mm, "TruthMET");
30  }
31 
33  template <typename V2VFN>
34  SmearedMET(const V2VFN& metSmearFn, const Cut& cut)
35  : _metSmearFn(metSmearFn)
36  {
37  setName("SmearedMET");
38  declare(MissingMomentum(cut), "TruthMET");
39  }
40 
41 
44 
46 
47 
49  CmpState compare(const Projection& p) const {
50  const SmearedMET& other = dynamic_cast<const SmearedMET&>(p);
51  if (get_address(_metSmearFn) == 0) return cmp((size_t)this, (size_t)&p);
52  MSG_TRACE("Smear hashes = " << get_address(_metSmearFn) << "," << get_address(other._metSmearFn));
53  return mkPCmp(other, "TruthMET") || cmp(get_address(_metSmearFn), get_address(other._metSmearFn));
54  }
55 
56 
58  void project(const Event& e) {
59  const auto& mm = apply<MissingMomentum>(e, "TruthMET");
60  _vet = mm.vectorEt();
61  if (_metSmearFn) _vet = _metSmearFn(_vet, mm.scalarEt()); //< smearing
62  }
63 
64 
69 
74  const Vector3& vectorPt() const { return vectorEt(); }
75 
77 
78 
83 
87  const Vector3& vectorEt() const { return _vet; }
88 
90 
91 
93  void reset() { }
94 
95 
96  private:
97 
98  Vector3 _vet;
99 
101  std::function<Vector3(const Vector3&, double)> _metSmearFn;
102 
103  };
104 
105 
106 }
107 
108 #endif
void setName(const std::string &name)
Used by derived classes to set their name.
Definition: Projection.hh:142
Definition: MC_Cent_pPb.hh:10
CmpState compare(const Projection &p) const
Compare to another SmearedMET.
Definition: SmearedMET.hh:49
void reset()
Reset the projection. Smearing functions will be unchanged.
Definition: SmearedMET.hh:93
const Vector3 & vectorPt() const
Definition: SmearedMET.hh:74
void project(const Event &e)
Perform the MET finding & smearing calculation.
Definition: SmearedMET.hh:58
Interface for projections that find missing transverse energy/momentum.
Definition: METFinder.hh:11
Representation of a HepMC event, and enabler of Projection caching.
Definition: Event.hh:22
Cmp< Projection > mkPCmp(const Projection &otherparent, const std::string &pname) const
const Vector3 & vectorEt() const
Definition: SmearedMET.hh:87
DEFAULT_RIVET_PROJ_CLONE(SmearedMET)
Clone on the heap.
Wrapper projection for smearing missing (transverse) energy/momentum with detector resolutions...
Definition: SmearedMET.hh:15
SmearedMET(const V2VFN &metSmearFn, const Cut &cut)
Constructor from a Cut (on the particles used to determine missing momentum) and a smearing function...
Definition: SmearedMET.hh:34
#define MSG_TRACE(x)
Lowest-level, most verbose messaging, using MSG_LVL.
Definition: Logging.hh:193
Calculate missing , etc. as complements to the total visible momentum.
Definition: MissingMomentum.hh:22
SmearedMET(const MissingMomentum &mm, const V2VFN &metSmearFn)
Constructor from a MissingMomentum projection and a smearing function.
Definition: SmearedMET.hh:25
const PROJ & declare(const PROJ &proj, const std::string &name)
Register a contained projection (user-facing version)
Definition: ProjectionApplier.hh:170
Base class for all Rivet projections.
Definition: Projection.hh:29
Three-dimensional specialisation of Vector.
Definition: Vector3.hh:26
Cmp< T > cmp(const T &t1, const T &t2)
Global helper function for easy creation of Cmp objects.
Definition: Cmp.hh:255