gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-252-gf9a3f78
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  public:
31 
34  const static int max_neutral_higgses = 3;
35  const static int max_charged_higgses = 1;
37 
38  private:
39 
43  std::map<str, const DecayTable::Entry&> neutral_decays_SM_map;
45 
50  std::map<str, const DecayTable::Entry&> neutral_decays_map;
51  std::map<str, const DecayTable::Entry&> charged_decays_map;
53 
56 
57  public:
58 
64 
67 
69  std::vector<str> invisibles;
70 
86 
89 
92  template <typename T>
93  double compute_effective_coupling(int index, const T& p1, const T& p2)
94  {
95  if (index > max_neutral_higgses - 1) utils_error().raise(LOCAL_INFO, "Requested index beyond max_neutral_higgses.");
96  // If channel is missing from either SM or BSM decays, return unity.
97  if (!neutral_decays_SM_array[index]->has_channel(p1, p2) or !neutral_decays_array[index]->has_channel(p1, p2)) return 1.;
98  double smwidth = neutral_decays_SM_array[index]->width_in_GeV;
99  double smbf = neutral_decays_SM_array[index]->BF(p1, p2);
100  if (smwidth <= 0. or smbf <= 0.) return 1.;
101  double total_width_ratio = neutral_decays_array[index]->width_in_GeV / smwidth;
102  double BF_ratio = neutral_decays_array[index]->BF(p1, p2) / smbf;
103  return total_width_ratio * BF_ratio;
104  }
105  template <typename T>
106  double compute_effective_coupling(str name, const T& p1, const T& p2)
107  {
108  if (neutral_decays_SM_map.find(name) == neutral_decays_SM_map.end() or
109  neutral_decays_map.find(name) == neutral_decays_map.end())
110  utils_error().raise(LOCAL_INFO, "Requested higgs not found.");
111  // If channel is missing from either SM or BSM decays, return unity.
112  if (!neutral_decays_SM_map.at(name).has_channel(p1, p2) or !neutral_decays_map.at(name).has_channel(p1, p2)) return 1.;
113  double smwidth = neutral_decays_SM_map.at(name).width_in_GeV;
114  double smbf = neutral_decays_SM_map.at(name).BF(p1, p2);
115  if (smwidth <= 0. or smbf <= 0.) return 1.;
116  double total_width_ratio = neutral_decays_map.at(name).width_in_GeV / smwidth;
117  double BF_ratio = neutral_decays_map.at(name).BF(p1, p2) / smbf;
118  return total_width_ratio * BF_ratio;
119  }
121 
122 
125  void set_neutral_decays_SM(int, const str&, const DecayTable::Entry&);
126  void set_neutral_decays(int, const str&, const DecayTable::Entry&);
127  void set_charged_decays(int, const str&, const DecayTable::Entry&);
128  void set_t_decays(const DecayTable::Entry&);
130 
133  const h0_decay_array_type& get_neutral_decays_SM_array(int) const;
134  const DecayTable::Entry& get_neutral_decays_SM(int) const;
135  const DecayTable::Entry& get_neutral_decays_SM(const str&) const;
136  const h0_decay_array_type& get_neutral_decays_array(int) const;
137  const DecayTable::Entry& get_neutral_decays(int) const;
138  const DecayTable::Entry& get_neutral_decays(const str&) const;
139  const hp_decay_array_type& get_charged_decays_array(int) const;
140  const DecayTable::Entry& get_charged_decays(int) const;
141  const DecayTable::Entry& get_charged_decays(const str&) const;
142  const DecayTable::Entry& get_t_decays() const;
144 
145  };
146 
147 }
148 
149 #endif //__higgs_couplings_table_hpp__
static const int max_neutral_higgses
The maximal Higgs sector manageable by this class; update as needed.
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
const DecayTable::Entry * charged_decays_array[max_charged_higgses]
double C_ZZ2[max_neutral_higgses]
double BF(const std::vector< std::pair< int, int > > &) const
Retrieve branching fraction for decay to a given final state.
std::map< str, const DecayTable::Entry & > neutral_decays_map
std::vector< str > invisibles
Particles that higgses can decay invisibly to.
double C_tt2[max_neutral_higgses]
void set_t_decays(const DecayTable::Entry &)
Assign decay entries to top.
EXPORT_SYMBOLS error & utils_error()
Utility errors.
double C_cc2[max_neutral_higgses]
Decay table class declarations.
double CP[max_neutral_higgses]
CP of neutral higgses.
double C_WW2[max_neutral_higgses]
Effective couplings for neutral higgses.
const DecayTable::Entry * neutral_decays_array[max_neutral_higgses]
BSM higgs decays.
const DecayTable::Entry * neutral_decays_SM_array[max_neutral_higgses]
SM neutral higgs decays.
const hp_decay_array_type & get_charged_decays_array(int) const
Retrieve decays of all charged higgses.
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.
const h0_decay_array_type & get_neutral_decays_SM_array(int) const
Retrieve decay sets.
void set_charged_decays(int, const str &, const DecayTable::Entry &)
Assign decay entries to charged higgses.
const DecayTable::Entry * hp_decay_array_type[max_charged_higgses]
double C_ss2[max_neutral_higgses]
const DecayTable::Entry & get_t_decays() const
Retrieve decays of the top quark.
double C_mumu2[max_neutral_higgses]
double C_bb2[max_neutral_higgses]
double C_tautau2[max_neutral_higgses]
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...
double width_in_GeV
Total particle width (in GeV)
const DecayTable::Entry & get_neutral_decays_SM(int) const
Retrieve SM decays of a specific neutral Higgs, by index.
const DecayTable::Entry * t_decays
t decays (as t can decay to h)
const DecayTable::Entry * h0_decay_array_type[max_neutral_higgses]
Types to make returning decay arrays easier.
std::string str
Shorthand for a standard string.
Definition: Analysis.hpp:35
double C_Zga2[max_neutral_higgses]
void set_neutral_decays(int, const str &, const DecayTable::Entry &)
Assign decay entries to neutral higgses.
double C_gaga2[max_neutral_higgses]
double compute_effective_coupling(str name, const T &p1, const T &p2)
void set_neutral_decays_SM(int, const str &, const DecayTable::Entry &)
Assign decay entries to the various table components.
const h0_decay_array_type & get_neutral_decays_array(int) const
Retrieve decays of all neutral higgses.
double C_gg2[max_neutral_higgses]
TODO: see if we can use this one:
Definition: Analysis.hpp:33
double C_hiZ2[max_neutral_higgses][max_neutral_higgses]