ThreeBody.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
7 
8 namespace boca
9 {
10 
16 template <typename Multiplet_1_, typename Multiplet_2_, typename Multiplet_3_>
17 class ThreeBody : public Multiplet
18 {
19 
20 public:
21 
22  ThreeBody() {};
23 
24  ThreeBody(Multiplet_1_ const& multiplet_1, Multiplet_2_ const& multiplet_2, Multiplet_3_ const& multiplet_3) {
25  SetMultiplets(multiplet_1, multiplet_2, multiplet_3);
26  }
27 
28  void SetMultiplets(Multiplet_1_ const& multiplet_1, Multiplet_2_ const& multiplet_2, Multiplet_3_ const& multiplet_3) {
29  multiplet_1_ = multiplet_1;
30  multiplet_2_ = multiplet_2;
31  multiplet_3_ = multiplet_3;
32  SetBdt((multiplet_1_.Bdt() + multiplet_2_.Bdt() + multiplet_3_.Bdt()) / 3);
33  }
34 
35  void SetMultiplets12(TwoBody<Multiplet_1_, Multiplet_2_> const& multiplet_12, Multiplet_3_ const& multiplet_3) {
36  SetMultiplets(multiplet_12.Multiplet1(), multiplet_12.Multiplet2(), multiplet_3);
37  }
38 
39  void SetMultiplets23(TwoBody<Multiplet_2_, Multiplet_3_> const& multiplet_23, Multiplet_1_ const& multiplet_1) {
40  SetMultiplets(multiplet_1, multiplet_23.Multiplet1(), multiplet_23.Multiplet2());
41  }
42 
43  void SetMultiplets13(TwoBody<Multiplet_1_, Multiplet_3_> const& multiplet_13, Multiplet_2_ const& multiplet_2) {
44  SetMultiplets(multiplet_13.Multiplet1(), multiplet_2, multiplet_13.Multiplet2());
45  }
46 
47  Multiplet_1_ const& Multiplet1() const {
48  return multiplet_1_;
49  }
50 
51  Multiplet_2_ const& Multiplet2() const {
52  return multiplet_2_;
53  }
54 
55  Multiplet_3_ const& Multiplet3() const {
56  return multiplet_3_;
57  }
58 
59  template <typename Multiplet_4_>
60  bool Overlap(Multiplet_4_ const& multiplet) const {
61  return multiplet.Overlap(multiplet_1_) || multiplet.Overlap(multiplet_2_) || multiplet.Overlap(multiplet_3_);
62  }
63 
64  bool Overlap(boca::Singlet const& singlet) const {
65  return multiplet_1_.Overlap(singlet) || multiplet_2_.Overlap(singlet) || multiplet_3_.Overlap(singlet);
66  }
67 
68  bool Overlap(boca::Jet const& jet) const {
69  return multiplet_1_.Overlap(jet) || multiplet_2_.Overlap(jet) || multiplet_3_.Overlap(jet);
70  }
71 
72  bool Overlap() const {
73  return multiplet_1_.Overlap(multiplet_2_) || multiplet_1_.Overlap(multiplet_3_) || multiplet_2_.Overlap(multiplet_3_);
74  }
75 
76  std::vector<boca::Jet> Jets() const override {
77  return Combine(Multiplet1().Jets(), Multiplet2().Jets(), Multiplet3().Jets());
78  }
79 
80  Momentum Ht() const {
81  return Multiplet1().Ht() + Multiplet2().Ht() + Multiplet3().Ht();
82  }
83 
84  int Charge() const {
85  return Multiplet1().Charge() + Multiplet2().Charge() + Multiplet3().Charge();
86  }
87 
89  return multiplet_12_.Get([this]() {
91  });
92  }
93 
95  return multiplet_23_.Get([this]() {
97  });
98  }
99 
101  return multiplet_13_.Get([this]() {
103  });
104  }
105 
106  std::vector<boca::LorentzVector<Momentum>> LorentzVectors() const override {
108  }
109 
111  return event_shapes_.Get([this]() {
113  });
114  }
115 
116 protected:
117 
118  void SetMultiplet1(Multiplet_1_ const& multiplet_1) {
119  multiplet_1_ = multiplet_1;
120  }
121 
122  void SetMultiplet2(Multiplet_2_ const& multiplet_2) {
123  multiplet_2_ = multiplet_2;
124  }
125 
126  void SetMultiplet3(Multiplet_3_ const& multiplet_3) {
127  multiplet_3_ = multiplet_3;
128  }
129 
130 private:
131 
132  boca::Jet GetJet() const override {
133  return Join(Multiplet1(), Multiplet2(), Multiplet3());
134  }
135 
136  Singlet GetConstituentJet() const override {
138  }
139 
141 
143 
145 
146  Multiplet_1_ multiplet_1_;
147 
148  Multiplet_2_ multiplet_2_;
149 
150  Multiplet_3_ multiplet_3_;
151 
152 };
153 
154 template<typename Multiplet_1_, typename Multiplet_2_, typename Multiplet_3_>
155 Jet Join(Multiplet_1_ const& multiplet_1, Multiplet_2_ const& multiplet_2, Multiplet_3_ const& multiplet_3)
156 {
157  return Join(multiplet_1.Jet(), multiplet_2.Jet(), multiplet_3.Jet());
158 }
159 
160 template<typename Multiplet_1_, typename Multiplet_2_, typename Multiplet_3_>
161 boca::Singlet JoinConstituents(Multiplet_1_ const& multiplet_1, Multiplet_2_ const& multiplet_2, Multiplet_3_ const& multiplet_3)
162 {
163  auto constituents = SortedByPt(Combine(multiplet_1.Constituents(), multiplet_2.Constituents(), multiplet_3.Constituents()));
164  boost::erase(constituents, boost::unique<boost::return_found_end>(constituents));
165  return Join(constituents);
166 }
167 
168 }
Three body base class.
Definition: ThreeBody.hh:17
void SetMultiplets23(TwoBody< Multiplet_2_, Multiplet_3_ > const &multiplet_23, Multiplet_1_ const &multiplet_1)
Definition: ThreeBody.hh:39
Jet.
Definition: Jet.hh:15
void SetMultiplet2(Multiplet_2_ const &multiplet_2)
Definition: ThreeBody.hh:122
Multiplet_2_ & Multiplet2()
Accessor to the second multiplet.
Definition: TwoBody.hh:183
int Charge() const
Definition: ThreeBody.hh:84
boca::Singlet JoinConstituents(Multiplet_1_ const &multiplet_1, Multiplet_2_ const &multiplet_2, Multiplet_3_ const &multiplet_3)
Definition: ThreeBody.hh:161
std::vector< boca::LorentzVector< Momentum > > LorentzVectors() const override
Definition: ThreeBody.hh:106
Lazy caching of variables.
Definition: Mutable.hh:19
TwoBody< Multiplet_1_, Multiplet_2_ > Multiplet12() const
Definition: ThreeBody.hh:88
ThreeBody()
Definition: ThreeBody.hh:22
Mutable< boca::EventShapes > event_shapes_
Definition: Multiplet.hh:153
Wrapper for a Jet in order to make it behave like a Multiplet.
Definition: Singlet.hh:19
Two body base class.
Definition: TwoBody.hh:24
void SetMultiplets(Multiplet_1_ const &multiplet_1, Multiplet_2_ const &multiplet_2, Multiplet_3_ const &multiplet_3)
Definition: ThreeBody.hh:28
Momentum Ht() const
Definition: ThreeBody.hh:80
Multiplet_1_ const & Multiplet1() const
Definition: ThreeBody.hh:47
std::vector< Element_ > Combine(std::vector< Element_ > const &vector_1, std::vector< Element_ > const &vector_2)
Combine two std::vector.
Definition: Vector.hh:101
boca::EventShapes EventShapes() const
Definition: ThreeBody.hh:110
Boosted Collider Analysis.
Definition: Analysis.hh:15
bool Overlap() const
Definition: ThreeBody.hh:72
void SetMultiplets13(TwoBody< Multiplet_1_, Multiplet_3_ > const &multiplet_13, Multiplet_2_ const &multiplet_2)
Definition: ThreeBody.hh:43
TwoBody< Multiplet_2_, Multiplet_3_ > Multiplet23() const
Definition: ThreeBody.hh:94
ThreeBody(Multiplet_1_ const &multiplet_1, Multiplet_2_ const &multiplet_2, Multiplet_3_ const &multiplet_3)
Definition: ThreeBody.hh:24
Jet Join(std::vector< Jet > const &jets)
Definition: Jet.cpp:202
Multiplet_2_ const & Multiplet2() const
Definition: ThreeBody.hh:51
Multiplet base class
Definition: Multiplet.hh:21
bool Overlap(boca::Jet const &jet) const
Definition: ThreeBody.hh:68
Multiplet_3_ const & Multiplet3() const
Definition: ThreeBody.hh:55
void SetMultiplet3(Multiplet_3_ const &multiplet_3)
Definition: ThreeBody.hh:126
std::vector< boca::Jet > Jets() const override
Definition: ThreeBody.hh:76
bool Overlap(boca::Singlet const &singlet) const
Definition: ThreeBody.hh:64
void SetMultiplets12(TwoBody< Multiplet_1_, Multiplet_2_ > const &multiplet_12, Multiplet_3_ const &multiplet_3)
Definition: ThreeBody.hh:35
Energy Momentum
Momentum measured in electronvolt.
Definition: ElectronVolt.hh:68
TwoBody< Multiplet_1_, Multiplet_3_ > Multiplet13() const
Definition: ThreeBody.hh:100
bool Overlap(Multiplet_4_ const &multiplet) const
Definition: ThreeBody.hh:60
std::vector< Multiplet > SortedByPt(std::vector< Multiplet > multiplets)
Definition: Sort.hh:53
virtual void SetBdt(double bdt)
Definition: Identification.cpp:17
void SetMultiplet1(Multiplet_1_ const &multiplet_1)
Definition: ThreeBody.hh:118
Multiplet_1_ & Multiplet1()
Accessor to the first multiplet.
Definition: TwoBody.hh:167
Calculates the event shapes for a given collection of jets.
Definition: EventShapes.hh:25