HeavyHiggs.hh
Go to the documentation of this file.
1 #pragma once
2 
4 #include "boca/Settings.hh"
6 
12 namespace heavyhiggs
13 {
14 
15 using namespace boca;
16 
17 
18 enum class Process
19 {
20  H0,
21  Hbb,
22  Htt,
23  Htb,
24  tt,
25  tt2,
26  tttt,
27  tttwb,
28  tttb,
29  ttwbb,
30  ttwcc,
31  Htwb,
32  ttwwbb,
33  hbb,
34  bb,
35  cc,
36  jj
37 
38 };
39 
40 std::string Name(Process process);
41 
43 
48 namespace analysis
49 {
50 
58 template<typename Tagger_>
59 class HeavyHiggs : public boca::Analysis<Tagger_>
60 {
61 
62 public:
63 
66  }
67 
68  boca::Mass Mass() const {
69  return 1_TeV;
70  return 500_GeV;
71  return 400_GeV;
72  return 750_GeV;
73  return 800_GeV;
74  return 1.5_TeV;
75  return 2_TeV;
76  return 300_GeV;
77  return 600_GeV;
78  return 700_GeV;
79  return 900_GeV;
80  return 3_TeV;
81  return 4_TeV;
82  return 5_TeV;
83  return 7_TeV;
84  return 8_TeV;
85  return 10_TeV;
86  return 12_TeV;
87  return 15_TeV;
88  return 20_TeV;
89  };
90 
91  long TrainNumberMax() const override {
92  return 10000;
93  return 100;
94  return 100000;
95  return 1000;
96  return 500;
97  return 10000000;
98  return 1000000;
99  return 10;
100  };
101 
102  long ReadNumberMax() const override {
103  return 10000000;
104  return 100000;
105  return 10000;
106  return 100;
107  return 1000;
108  return 500;
109  return 1000000;
110  return 10;
111  };
112 
114  return boca::Collider::lhc;
115  return boca::Collider::future;
116  };
117 
118  Momentum PreCut() const {
119  switch (Collider()) {
120  case boca::Collider::lhc :
121  switch (static_cast<int>(Mass() / GeV)) {
122  case 400 : return at_rest;
123  case 500 : return at_rest;
124  case 1000 : return 250_GeV;
125  case 2000 : return 250_GeV;
126  case 3000 : return 250_GeV;
127  default : std::cout << "Switch default for Mass of " << Mass() << '\n';
128  return at_rest;
129  }
131  switch (static_cast<int>(Mass() / GeV)) {
132  case 400 : return at_rest;
133  case 500 : return at_rest;
134  case 1000 : return 300_GeV;
135  case 2000 : return 300_GeV;
136  case 4000 : return 1.5_TeV;
137  case 6000 : return 2.5_TeV;
138  case 10000 : return 2.5_TeV;
139  case 15000 : return 2.5_TeV;
140  case 20000 : return 2.5_TeV;
141  default : std::cout << "Switch default for Mass of " << Mass() << '\n';
142  return at_rest;
143  }
144  default : std::cout << "Switch default for Collider " << to_int(Collider()) << '\n';
145  return at_rest;
146  }
147  };
148 
149  Momentum MissingEt() const {
150  switch (Collider()) {
151  case boca::Collider::lhc : return 30_GeV;
152  case boca::Collider::future : return 60_GeV;
153  default : std::cout << "Switch default for Collider " << to_int(Collider()) << '\n';
154  return at_rest;
155  }
156  };
157 
158  Momentum LeptonPt() const {
159  switch (Collider()) {
160  case boca::Collider::lhc : return 50_GeV;
161  case boca::Collider::future : return 100_GeV;
162  default : std::cout << "Switch default for Collider " << to_int(Collider()) << '\n';
163  return at_rest;
164  }
165  };
166 
167  Momentum BottomPt() const {
168  switch (Collider()) {
169  case boca::Collider::lhc : return 20_GeV;
170  case boca::Collider::future : return 40_GeV;
171  default : std::cout << "Switch default for Collider " << to_int(Collider()) << '\n';
172  return at_rest;
173  }
174  };
175 
176  int FileNumber(Process process) const {
177  switch (Collider()) {
178  case boca::Collider::lhc :
179  switch (process) {
180  case Process::Hbb : return 1;
181  case Process::ttwwbb : return 1;
182  case Process::ttwbb : return 1;
183  case Process::Htt : return 1;
184  case Process::Htwb : return 1;
185  case Process::tttt : return 1;
186  case Process::tttwb : return 1;
187  case Process::tt : return 20;
188  default : std::cout << "Switch default for Process " << to_int(process) << '\n';
189  return 1;
190  }
192  switch (process) {
193  case Process::ttwwbb : return 2;
194  case Process::ttwbb : return 1;
195  default : std::cout << "Switch default for Process " << to_int(process) << '\n';
196  return 1;
197  }
198  default : std::cout << "Switch default for Collider " << to_int(Collider()) << '\n';
199  return 1;
200  }
201  }
202 
203  std::string Suffix(Process process) const {
204  switch (process) {
205  case Process::Hbb : return "";
206  case Process::Htt : return "";
207  case Process::Htwb : return "_" + boca::units::Name(Mass());
208  case Process::ttwwbb : return "";
209  case Process::ttwbb : return "";
210  case Process::tttt : return "";
211  case Process::tttwb : return "";
212  case Process::tt : return "";
213  default : std::cout << "Switch default for Process " << to_int(process) << '\n';
214  return "";
215  }
216  }
217 
218  virtual boca::Crosssection Crosssection(Process process) const {
219  switch (process) {
220  case Process::Hbb :
221  switch (this->Collider()) {
222  case boca::Collider::lhc:
223  switch (static_cast<int>(Mass() / GeV)) {
224 // case 500 : return 100_fb; // FIXME this is the wrong value
225  case 500 : return 25.52_fb;
226  case 1000 : return 1.278_fb;
227  case 2000 : return 0.02190_fb;
228  DEFAULT(static_cast<int>(Mass() / GeV), fb);
229  }
231  switch (static_cast<int>(Mass() / GeV)) {
232  case 500 : return 973.5_fb;
233  case 1000 : return 123.0_fb;
234  case 1500 : return 28.62_fb;
235  case 2000 : return 9.485_fb;
236  case 3000 : return 1.754_fb;
237  case 4000 : return 0.4851_fb;
238  case 5000 : return 0.1669_fb;
239  case 6000 : return 0.06731_fb;
240  case 7000 : return 0.02937_fb;
241  case 8000 : return 0.01425_fb;
242  case 10000 : return 0.003842_fb;
243  case 12000 : return 0.001221_fb;
244  case 15000 : return 0.0002650_fb;
245  case 20000 : return 0.00002821_fb;
246  DEFAULT(static_cast<int>(Mass() / GeV), fb);
247  }
248  DEFAULT(to_int(this->Collider()), fb);
249  }
250  case Process::tt :
251  switch (this->Collider()) {
252  case boca::Collider::lhc:
253  switch (static_cast<int>(PreCut() / GeV)) {
254  case 0 : return 97.54 * 2 * 1000_fb;
255  case 250 : return 5.698 * 2 * 1000_fb;
256  DEFAULT(static_cast<int>(PreCut() / GeV), fb);
257  }
258  DEFAULT(Name(Collider()), fb);
259  }
260  default : std::cout << "Switch default for Process " << to_int(process) << '\n';
261  return 0_fb;
262  }
263  }
264 
265  void AddSignal(Process process) {
266  NewFile(Tag::signal, process);
267  }
268 
269  void AddBackground(Process process) {
270  NewFile(Tag::background, process);
271  }
272 
273  virtual void NewFile(Tag tag, Process process) {
274  boca::analysis::Base::AddFile(tag, {FileNames(process, tag), LatexName(process), this->Crosssection(process)});
275  }
276 
277  std::vector<std::string> FileNames(Process process, Tag tag) const {
278  if (FileNumber(process) == 1) return {FileName(process, tag)};
279  std::vector<std::string> names;
280  for (auto const & file_number : IntegerRange(FileNumber(process))) {
281  if (file_number == 0) names.emplace_back(FileName(process, tag));
282  else names.emplace_back(FileName(process, tag) + "_" + std::to_string(file_number));
283  }
284  return names;
285  }
286 
287  virtual std::string FileName(Process process, Tag tag) const {
288 // std::cout << "file name: " << Name(process) + Suffix(process) + "_" + Name(Collider()) << '\n';
289  switch (tag) {
290  case Tag::signal : return Name(process) + Suffix(process) + "-" + Name(Collider()) + "_" + boca::units::Name(Mass());
291  case Tag::background : return Name(process) + Suffix(process) + "-" + Name(Collider()) + "-" + boca::units::Name(PreCut());
292 // case Tag::background : return Name(process) + Suffix(process) + "_" + Name(Collider());
293  default : std::cout << "Switch default for Tag " << to_int(tag) << '\n';
294  return "";
295  }
296  }
297 
298 private:
299 
300 };
301 
302 }
303 
304 }
Momentum const at_rest
Definition: ElectronVolt.hh:71
decltype(auto) IntegerRange(Integer last)
Definition: Types.hh:18
Analysis for heavy higgs.
Definition: HeavyHiggs.hh:59
void AddFile(Tag tag, boca::FileInfo const &file)
Definition: Base.cpp:124
Momentum PreCut() const
Definition: HeavyHiggs.hh:118
long TrainNumberMax() const override
Definition: HeavyHiggs.hh:91
void AddSignal(Process process)
Definition: HeavyHiggs.hh:265
Momentum BottomPt() const
Definition: HeavyHiggs.hh:167
HeavyHiggs()
Definition: HeavyHiggs.hh:64
static void SetCollider(boca::Collider collider)
Definition: Settings.cpp:40
Heavy Higgs partner.
Definition: Charged.hh:7
std::string FileName(std::string const &file)
Definition: Debug.cpp:48
int FileNumber(Process process) const
Definition: HeavyHiggs.hh:176
virtual boca::Crosssection Crosssection(Process process) const
Definition: HeavyHiggs.hh:218
Momentum MissingEt() const
Definition: HeavyHiggs.hh:149
boca::latex::String LatexName(Process process)
Definition: HeavyHiggs.cpp:29
Tag
The Tag distinguishes between signal and background events.
Definition: Tag.hh:14
long ReadNumberMax() const override
Definition: HeavyHiggs.hh:102
std::string Name(Energy const &energy)
Definition: ElectronVolt.cpp:34
virtual std::string FileName(Process process, Tag tag) const
Definition: HeavyHiggs.hh:287
provides main analysis loops and logic.
Definition: Analysis.hh:29
Momentum LeptonPt() const
Definition: HeavyHiggs.hh:158
Definition: String.hh:45
default detector for a 100TeV collider
decltype(auto) to_int(Enumeration value)
Definition: Types.hh:29
void AddBackground(Process process)
Definition: HeavyHiggs.hh:269
Boosted Collider Analysis.
Definition: Analysis.hh:15
#define DEFAULT(...)
Definition: DEBUG_MACROS.hh:118
virtual void NewFile(Tag tag, Process process)
Definition: HeavyHiggs.hh:273
boost::units::quantity< barn::Area > Crosssection
Crosssection measured in barn.
Definition: Barn.hh:36
std::string Name(Process process)
Definition: HeavyHiggs.cpp:7
Process
Definition: HeavyHiggs.hh:18
boca::Collider Collider() const
Definition: HeavyHiggs.hh:113
boca::Mass Mass() const
Definition: HeavyHiggs.hh:68
Definition: PreCut.hh:13
Energy Momentum
Momentum measured in electronvolt.
Definition: ElectronVolt.hh:68
Collider
Detector type indicates which kind of detector geometry is going to be used.
Definition: Settings.hh:30
std::vector< std::string > FileNames(Process process, Tag tag) const
Definition: HeavyHiggs.hh:277
std::string Suffix(Process process) const
Definition: HeavyHiggs.hh:203
Energy Mass
Mass measured in electronvolt.
Definition: ElectronVolt.hh:62
default LHC detector