-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathHNL.h
122 lines (103 loc) · 3.56 KB
/
HNL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// cHNLdecay -- calculate decay widths of Heavy Neutral Leptons
// Copyright (C) 2018 - Fabian A.J. Thiele, <fabian.thiele@posteo.de>
//
// This file is part of cHNLdecay.
//
// cHNLdecay is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// cHNLdecay is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#ifndef HNL_H
#define HNL_H
#include "Config.h"
#include "Lepton.h"
#include "Meson.h"
#include "TString.h"
#include <iostream>
#include <map>
#include <utility>
class HNL {
public:
HNL(TString n, Double_t m, Double_t U2, const Lepton &a) {
name = n;
mass = m;
angle = U2;
generation.emplace_back(Lepton(a));
dc_c;
majorana = true;
}
HNL(TString n, Double_t m, Double_t U2, const std::vector<Lepton> &a) {
name = n;
mass = m;
angle = U2;
for (auto l : a) {
generation.emplace_back(Lepton(l));
}
dc_c;
majorana = true;
}
bool mixesWith(const Lepton &a) const {
bool mixes = false;
for (auto g : generation) {
if (g == a)
mixes = true;
}
return mixes;
}
Double_t getMass() const { return mass; }
Double_t getAngle() const { return angle; }
void setMass(Double_t m) {
clearDecayChannels();
mass = m;
}
void setAngle(Double_t a) {
clearDecayChannels();
angle = a;
}
TString getName() const { return name; }
void newDecayChannel(std::vector<Int_t> particles, Double_t value) {
dc_c.insert(std::pair<std::vector<Int_t>, Double_t>(particles, value));
}
bool existDecayChannel(std::vector<Int_t> p) const {
return (dc_c.count(p) > 0);
}
void clearDecayChannels() { dc_c.clear(); }
bool isMajorana() const { return majorana; }
void setMajorana(bool val) { majorana = val; }
std::map<std::vector<Int_t>, Double_t> getDecayChannels() const {
return dc_c;
}
std::vector<Lepton> getGeneration() const { return generation; }
Double_t getPartialWidth(std::shared_ptr<Config> cfg, const Lepton &alpha,
const Quark &beta);
Double_t getPartialWidth(std::shared_ptr<Config> cfg, const Lepton &alpha,
const Quark &beta, const Quark &gamma);
Double_t getPartialWidth(std::shared_ptr<Config> cfg, const Lepton &alpha,
const Lepton &beta, bool invisible = true);
Double_t getPartialWidthInv(std::shared_ptr<Config> cfg, const Lepton &alpha,
const Lepton &beta);
Double_t getPartialWidth(std::shared_ptr<Config> cfg, const Lepton &alpha,
const Meson &m);
Double_t getTotalWidth(std::shared_ptr<Config> cfg,
const std::vector<Lepton> &leptons,
const std::vector<Meson> &particles);
Double_t getTotalWidth(std::shared_ptr<Config> cfg,
const std::vector<Lepton> &leptons,
const std::vector<Quark> &particles);
private:
TString name;
Double_t mass;
Double_t angle;
std::vector<Lepton> generation;
std::map<std::vector<Int_t>, Double_t> dc_c; // decay channels stored
bool majorana;
};
#endif