gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-2191-ga4742ac
a Global And Modular Bsm Inference Tool
higgs_couplings_table.hpp
Go to the documentation of this file.
1 // GAMBIT: Global and Modular BSM Inference Tool
2 // *********************************************
16 
17 #ifndef __higgs_couplings_table_hpp__
18 #define __higgs_couplings_table_hpp__
19 
22 
23 
24 namespace Gambit
25 {
26 
29  {
30 
31  private:
32 
35  std::vector<const DecayTable::Entry*> neutral_decays_SM_array;
36  std::map<str, const DecayTable::Entry&> neutral_decays_SM_map;
38 
41  std::vector<const DecayTable::Entry*> neutral_decays_array;
42  std::vector<const DecayTable::Entry*> charged_decays_array;
43  std::map<str, const DecayTable::Entry&> neutral_decays_map;
44  std::map<str, const DecayTable::Entry&> charged_decays_map;
46 
49 
52 
55 
56  public:
57 
59  std::vector<double> CP;
60 
62  std::vector<std::pair<str,str>> invisibles;
63 
66  std::vector<double> C_WW2;
67  std::vector<double> C_ZZ2;
68  std::vector<double> C_tt2;
69  std::vector<double> C_bb2;
70  std::vector<double> C_cc2;
71  std::vector<double> C_tautau2;
72  std::vector<double> C_gaga2;
73  std::vector<double> C_gg2;
74  std::vector<double> C_mumu2;
75  std::vector<double> C_Zga2;
76  std::vector<double> C_ss2;
77  std::vector<std::vector<double>> C_hiZ2;
79 
82 
84  void set_n_neutral_higgs(int);
85 
87  void set_n_charged_higgs(int);
88 
90  int get_n_neutral_higgs() const;
91 
93  int get_n_charged_higgs() const;
94 
97 
100  template <typename T>
101  double compute_effective_coupling(int index, const T& p1, const T& p2)
102  {
103  if (index > n_neutral_higgses - 1) utils_error().raise(LOCAL_INFO, "Requested index beyond n_neutral_higgses.");
104  // If channel is missing from either SM or BSM decays, return unity.
105  if (!neutral_decays_SM_array[index]->has_channel(p1, p2) or !neutral_decays_array[index]->has_channel(p1, p2)) return 1.;
106  double smwidth = neutral_decays_SM_array[index]->width_in_GeV;
107  double smbf = neutral_decays_SM_array[index]->BF(p1, p2);
108  if (smwidth <= 0. or smbf <= 0.) return 1.;
109  double total_width_ratio = neutral_decays_array[index]->width_in_GeV / smwidth;
110  double BF_ratio = neutral_decays_array[index]->BF(p1, p2) / smbf;
111  return total_width_ratio * BF_ratio;
112  }
113  template <typename T>
114  double compute_effective_coupling(str name, const T& p1, const T& p2)
115  {
116  if (neutral_decays_SM_map.find(name) == neutral_decays_SM_map.end() or
117  neutral_decays_map.find(name) == neutral_decays_map.end())
118  utils_error().raise(LOCAL_INFO, "Requested higgs not found.");
119  // If channel is missing from either SM or BSM decays, return unity.
120  if (!neutral_decays_SM_map.at(name).has_channel(p1, p2) or !neutral_decays_map.at(name).has_channel(p1, p2)) return 1.;
121  double smwidth = neutral_decays_SM_map.at(name).width_in_GeV;
122  double smbf = neutral_decays_SM_map.at(name).BF(p1, p2);
123  if (smwidth <= 0. or smbf <= 0.) return 1.;
124  double total_width_ratio = neutral_decays_map.at(name).width_in_GeV / smwidth;
125  double BF_ratio = neutral_decays_map.at(name).BF(p1, p2) / smbf;
126  return total_width_ratio * BF_ratio;
127  }
129 
130 
133  void set_neutral_decays_SM(int, const str&, const DecayTable::Entry&);
134  void set_neutral_decays(int, const str&, const DecayTable::Entry&);
135  void set_charged_decays(int, const str&, const DecayTable::Entry&);
136  void set_t_decays(const DecayTable::Entry&);
138 
141  const std::vector<const DecayTable::Entry*>& get_neutral_decays_SM_array() const;
142  const DecayTable::Entry& get_neutral_decays_SM(int) const;
143  const DecayTable::Entry& get_neutral_decays_SM(const str&) const;
144  const std::vector<const DecayTable::Entry*>& get_neutral_decays_array() const;
145  const DecayTable::Entry& get_neutral_decays(int) const;
146  const DecayTable::Entry& get_neutral_decays(const str&) const;
147  const std::vector<const DecayTable::Entry*>& get_charged_decays_array() const;
148  const DecayTable::Entry& get_charged_decays(int) const;
149  const DecayTable::Entry& get_charged_decays(const str&) const;
150  const DecayTable::Entry& get_t_decays() const;
152 
153  };
154 
155 }
156 
157 #endif //__higgs_couplings_table_hpp__
std::vector< std::vector< double > > C_hiZ2
std::map< str, const DecayTable::Entry & > neutral_decays_SM_map
DecayTable entry class. Holds the info on all decays of a given particle.
Definition: decay_table.hpp:96
std::map< str, const DecayTable::Entry & > neutral_decays_map
const std::vector< const DecayTable::Entry * > & get_neutral_decays_SM_array() const
Retrieve decay sets.
void set_t_decays(const DecayTable::Entry &)
Assign decay entries to top.
EXPORT_SYMBOLS error & utils_error()
Utility errors.
Decay table class declarations.
const DecayTable::Entry & get_neutral_decays(int) const
Retrieve decays of a specific neutral Higgs, by index.
std::map< str, const DecayTable::Entry & > charged_decays_map
#define LOCAL_INFO
Definition: local_info.hpp:34
GAMBIT native higgs coupling table class.
General small utility classes, typedefs, etc.
void set_n_charged_higgs(int)
Set the number of charged Higgses.
void set_charged_decays(int, const str &, const DecayTable::Entry &)
Assign decay entries to charged higgses.
const std::vector< const DecayTable::Entry * > & get_charged_decays_array() const
Retrieve decays of all charged higgses.
int get_n_neutral_higgs() const
Retrieve number of neutral higgses.
std::vector< std::pair< str, str > > invisibles
Particles that higgses can decay invisibly to.
const DecayTable::Entry & get_t_decays() const
Retrieve decays of the top quark.
std::vector< const DecayTable::Entry * > charged_decays_array
std::vector< const DecayTable::Entry * > neutral_decays_SM_array
SM neutral higgs decays.
int n_neutral_higgses
Number of neutral Higgs bosons.
const DecayTable::Entry & get_charged_decays(int) const
Retrieve decays of a specific charged Higgs, by index.
double compute_effective_coupling(int index, const T &p1, const T &p2)
Compute a neutral higgs effective coupling from the current two-body neutral higgs decays...
const std::vector< const DecayTable::Entry * > & get_neutral_decays_array() const
Retrieve decays of all neutral higgses.
const DecayTable::Entry & get_neutral_decays_SM(int) const
Retrieve SM decays of a specific neutral Higgs, by index.
std::vector< double > C_WW2
Effective couplings for neutral higgses.
const DecayTable::Entry * t_decays
t decays (as t can decay to h)
int n_charged_higgses
Number of charged Higgs bosons.
std::string str
Shorthand for a standard string.
Definition: Analysis.hpp:35
void set_n_neutral_higgs(int)
Set the number of neutral Higgses.
std::vector< const DecayTable::Entry * > neutral_decays_array
BSM higgs decays.
int get_n_charged_higgs() const
Retrieve number of charged higgses.
void set_neutral_decays(int, const str &, const DecayTable::Entry &)
Assign decay entries to neutral higgses.
double compute_effective_coupling(str name, const T &p1, const T &p2)
void set_effective_couplings_to_unity()
Set all effective couplings to 1.
void set_neutral_decays_SM(int, const str &, const DecayTable::Entry &)
Assign decay entries to the various table components.
std::vector< double > CP
CP of neutral higgses.
TODO: see if we can use this one:
Definition: Analysis.hpp:33