Skip to content

User guide

The central object of thdmTools is the ParamPoint class. For each parameter point that one wishes to analyze, an instance of this class has to be created, giving the values of the free parameters as input.

Different theoretical and experimental constraints can be applied using the functions of the ParamPoint class.

ParamPoint

The base class for a 2HDM parameter point.

class Parampoint:

    def __init__(self, dc, debug=True)
The arguments are the dictionary dc containing the values of the free parameter and the optional boolean flag debug. If this flag is set to True, then additional checks will be performed in several parts of the code.

A typical generation of an instance of the ParamPoint class looks like:

from thdmtools.parampoint import Parampoint

dc = {
    'type': 2,
    'tb': 2.0,
    'alpha': 1.27,
    'mHh': 600.0,
    'mHl': 125.09,
    'mA': 700.0,
    'mHp': 800.0,
    'm12sq': 196000.0}

pt = ParamPoint(dc, debug=True)
In the following we assume that the object pt is an instance of the ParamPoint class as defined here.


check_vacuum_stability

Checks if the tree-level bounded-from-below conditions are satisfied by the scalar potential. An optional argument global_min can be set to True in order to also check if the EW minimum is the global minimum of the potential.

pt.check_vacuum_stability(global_min=False)
The function returns True if all conditions are satisfied and False otherwise.


check_perturbative_unitarity

Checks if the tree-level perturbative unitarity conditions are satisfied. The optional argument pertunilimit is a float number thatn can be used to set the upper limit on the eigenvalues of the \(2 \times 2\) scalar scattering matrix in the high-energy limit. The upper limit is given by pertunilimit times 16\(\pi\). By default, pertunilimit is set to 0.5, which corresponds to an upper limit of 8\(\pi\).

pt.check_perturbative_unitarity(pertunilimit=0.5)
The function returns True if all conditions are satisfied and False otherwise.


check_perturbative_unitarity_nlo

This function works in the same way as the function check_perturbative_unitarity, but uses the next-to-leading order conditions from arXiv:1609.01290.

pt.check_perturbative_unitarity_nlo(pertunilimit=0.5)
The function returns True if all conditions are satisfied and False otherwise.


calculate_branching_ratios

This function can be used to compute the branching ratios of the Higgs bosons. Depending on the arguments, this function internally calls the AnyHDecay and HiggsTools interfaces.

This function is automatically called internally if the branching ratios are required in other functions, for instance for HiggsBounds and HiggsSignals.

If the optional argument effcpl_mode is set to False, then all branching ratios are calculated with AnyHDecay. If this argument is set to True, then the partial widths for the decays of the Higgs boson at 125 GeV into SM particles are computed using the effective-coupling input format of HiggsTools, and only the widths for the decays into BSM particles are computed with AnyHDecay.

The second optional argument hdecay_h125yy determines the way in which the width for the decay of the Higgs boson at 125 GeV into two photons is calculated. This flag is only relevant if effcpl_mode=True. If hdecay_h125yy is set to True, then the partial width for the diphoton decay is computed using AnyHDecay, thus including the contributions from the charged-scalar loops. If hdecay_h125yy is set to False, the partial width for the diphoton decay is computed using the HiggsTools effective-coupling input format, where the contributions from the charged-scalar loops are not included.

pt.calculate_branching_ratios(
    effcpl_mode=False,
    hdecay_h125yy=True)
The values of the branching ratios are stored in the following dictonaries:
pt.b_Hl
pt.b_Hh
pt.A
pt.Hp
The total widths of the scalars are stored in the dictionary:
pt.wTot


check_flavour_constraints

This function uses the interface to SuperIso to compute various flavour-physics observables. Two of the most important of these observables are \(\mathrm{BR} ( b \to s \gamma)\) and \(\mathrm{BR} ( B_s \to \mu^+ \mu^-)\). For these two observables, the function also checks whether the predicted values (according to SuperIso) are within the experimentally measured values within two standard deviations. In this case the function returns True. If either of the predicted values is not in agreement with the experimental data, the function returns False.

By default, thdmTools uses for the experimental central values and the \(1\sigma\) uncertainties the HFLAV values from 2022, as they can be found under this link in Table 55 and Table 44. These values are stored in the thdmtools.constants module. The user can provide different experimentally allowed ranges by setting the optional arguments b2sgamrange and bs2mumurange, which each should be lists with two elements, where the element 0 should contain the lower limit and the element 1 should contain the upper limit of the experimental allowed range, respectively.

pt.check_flavour_constraints(
    b2sgamrange=None,
    bs2mumurange=None)
The full information of all theory predictions from SuperIso are stored in the dictionary:
pt.flavourdata
This dictonary contains both the SM and the 2HDM predictions of each observable. For detailed information about all the observables contained in this dictionary we refer to the SuperIso Manual.


check_ewpo_constraints

This function uses the interface to THDM_EWPOS to compute the following three electroweak precision observables: the \(W\)-boson mass \(M_W\), the sinus squared of the leptonic effective weak mixing angle \(\sin^2 \Theta_{\rm eff}\), and the total width of the \(Z\) boson \(\Gamma_Z\). For these observables the function also checks whether the predicted values are within the experimentally measured values within two standard deviations. In this case the function returns True. If either of the predicted values is not in agreement with the experimental data, the function returns False.

pt.check_ewpo_constraints(
    NSflag=3,
    contflag=2,
    loflag=2,
    MWexp=const.MW_comb_wo_cdf,
    delMWexp=const.MW_comb_wo_cdf_unc,
    GamZexp=const.Gamma_tot_Z_pdg,
    delGamZexp=const.Gamma_tot_Z_pdg_unc,
    s2wexp=const.sin2w_exp,
    dels2wexp=const.sin2w_exp_unc)
By default, thdmTools uses the experimental central values and their \(1\sigma\) uncertainties that can be found in the thdmtools.constants module. For \(M_W\), the default value is the combination excluding the 2022 CDF result taken from arXv:2308.09417. For \(\Gamma_Z\) the default value is the current PDG average value, and for \(\sin^2 \Theta_{\rm eff}\) the default value is the average value that is given in Figure 7.6 of arXiv:0509008. The user can also provide different experimental values via optional arguments. For instance, one can provide the experimental central value and the one standard-deviation uncertainty by setting the optional arguments MWexp and delMWexp, respectively

The function has three more optional arguments NSflag, contflag and loflag that determine the radiative corrections included in the theory predictions computed with THDM_EWPOS. For their precise definition, we refer to the THDM_EWPOS manual. The default values are 3, 2 and 2, respectively.

Caution: The two-loop results of THDM_EWPOS have not been thoroughly tested by us. While the thdmTools interface to THDM_EWPOS allows for the computation of \(M_W\) at two-loop level, we adivse proceeding with caution when using this feature.


check_ewpo_fit

This function checks whether the electroweak precision observables in terms of the oblique parameters are predicted to be in agreement with the experimental data from electroweak fits. For the theory predictions, the functions computes the oblique parameters \(S\), \(T\) and \(U\) at the one-loop level based on generic expressions from arXiv:0802.4353. The function returns True if the oblique parameters lie within the experimentally allowed range at \(2\sigma\) level based on the fit results from Gfitter, and it returns False otherwise.

pt.check_ewpo_fit(mode='STU')
The function has the optional argument mode. By default, this argument is set to "STU", in which case the function performs a 3-dimensional \(\chi^2\) test taking into account \(S\), \(T\) and \(U\). The second possible option is to set mode to "ST", in which case \(U\) is neglected and a 2-dimensional \(\chi^2\) fit is performed taking into account \(S\) and \(T\). Typically, in the 2HDM the option "ST" yields slightly stronger constraints since the modifications to the \(T\) parameter are the dominant effect.


check_collider_constraints

This function calls the HiggsTools interface in order to check against collider constraints. Both the HiggsBounds and the HiggsSignals checks are performed.

pt.check_collider_constraints(
    delta_chisq_hs=6.18,
    effcpl_mode=False,
    hdecay_h125yy=True,
    hbdata_path=None,
    hsdata_path=None)
The function returns two boolean variables. The first one is True if the parameter point passes the HiggsBounds test, and False otherwise. The second one is True if the parameter point passes the HiggsSignals test, and False otherwise. Note that this return value is based on a comparison to the SM in terms of \(\Delta \chi^2 = \chi^2_{\rm 2HDM} - \chi^2_{\rm SM}\), see below for details.

The optional arguments can be set to specify the following:

The arguments effcpl_mode and hdecay_h125yy are transferred to the function calculate_branching_ratios, see the description here for details. Note that the function calculate_branching_ratios is only called when calling this function if it has not been called already before. Hence, if the branching ratios have already been calculated, the arguments effcpl_mode and hdecay_h125yy are not used.

The argument delta_chisq_hs is the maximal \(\Delta \chi^2\) value considered to be allowed in the HiggsSignals \(\chi^2\) fit, where the delta_chisq_hs values are defined with respect to the SM predictions. By default, this argument is set to 6.18. In a 2-dimensional \(\chi^2\) fit this limit will give rise to exclusions at the \(2\sigma\) confidence level. One can also access the HiggsSignals \(\chi^2\) value itself with pt.chisq. Using this value the user can define exclusion limits that are independent of the SM.

By default, this function uses the data repositories of HiggsBounds and HiggsSignals that are downloaded during the installation and stored in the external directory. If different data repositories shall be used, one can provide the paths to these repositories by setting the arguments hbdata_path and hsdata_path.

In addition to the two return values of this function, many more details about the HiggsBounds results are stored in the following attributes:

The expected and observed \(r\)-ratios and the most sensitive search channel for each Higgs boson are stored in the objects:

pt.expratiohb_Hl
pt.obsratiohb_Hl
pt.channelhb_Hl

pt.expratiohb_Hh
pt.obsratiohb_Hh
pt.channelhb_Hh

pt.expratiohb_A
pt.obsratiohb_A
pt.channelhb_A

pt.expratiohb_Hp
pt.obsratiohb_Hp
pt.channelhb_Hp
The full bounds object created by HiggsTools containing the full information including all searches (see the HiggsTools documentation for details ) is stored in the object:
pt.reshb
The effective coupling coefficients that are used as input in HiggsTools to compute the cross sections are stored in the dictionary:
pt.effectiveCouplings
Various LHC cross sections for all Higgs bosons are stored in the dictionary:
pt.XS