API
The user interface is defined in the
classes BenchmarkPoint
and its
subclass BenchmarkPointFromFile
.
The latter defines additional functions
to define a parameter point based on
the parameter values given in an
input file. An example of such input
file can be found here.
BenchmarkPointFromFile class¶
The base class for a munuSSM parameter point.
From the input parameters the required theoretical predictions can be computed. Various functions exist in order to confront a parameter point with theoretical or experimental constraints.
__init__(self, file)
special
¶
Initialize an instance of a parameter point given an input file that defines the values of the free parameters. An example input file can be found here.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
file |
str |
Path of inputfile (relative from the current directory or absolute). |
required |
Source code in munuSSM/benchmarkPointFromFile.py
def __init__(self, file):
"""
Initialize an instance of a parameter
point given an input file that defines
the values of the free parameters.
An example input file can be found
[here](https://www.desy.de/~biek/munussmdocu/site/example/).
Args:
file (str): Path of inputfile (relative
from the current directory or absolute).
"""
super().__init__()
try:
self._get_paras(file)
except FileNotFoundError as err:
raise err
# Calc first with MT = MT_POLE and
# MB = MB_MB to get MUE, ml2 and mv2
self.MT = self.MT_POLE
self.MB = self.MB_MB
self._calc_depend_paras()
self._solve_tp_eqs()
self.calc_tree_level_spectrum()
self._check_for_tachyons()
# From this set of paras get MT and MB from FH
self._call_feynhiggs_MTMB()
# Calculate again with correct MT and MB
self._calc_depend_paras()
self._solve_tp_eqs()
self.calc_tree_level_spectrum()
calc_branching_ratios(self)
¶
Calculates the branching rations of the neutral and charged scalars.
The results are stored in the attributes
BranchingRatiosh
for the CP-even
neutral scalars, BranchingRatiosA
for
the CP-odd neutral scalars, and
BranchingRatiosX
for the charged scalars/sleptons.
Source code in munuSSM/benchmarkPoint.py
def calc_branching_ratios(self):
"""
Calculates the branching rations of
the neutral and charged scalars.
The results are stored in the attributes
`BranchingRatiosh` for the CP-even
neutral scalars, `BranchingRatiosA` for
the CP-odd neutral scalars, and
`BranchingRatiosX` for the charged scalars/sleptons.
"""
scalarDecays.get_branching_ratios(self, True)
pseudoscalarDecays.get_branching_ratios(self, True)
sleptonDecays.get_branching_ratios(self)
calc_loop_masses(self, even=2, odd=1, accu=0.0001, momentum_mode=1)
¶
Calculates the loop-corrected masses at the given order of accuracy. Sets the results as attributes depending on the chosen flags.
The results are stored in the
attributes Masshh
, Masshh_L
or Masshh_2L
for the CP-even
scalars, and MassAh
or MassAh_L
for the CP-odd scalars.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
even |
int |
Loop level for the prediction of masses of neutral CP-even scalars. Options: 0, 1, 2 |
2 |
odd |
int |
Loop level for the prediction of masses of neutral CP-odd scalars. Options: 0, 1 |
1 |
accu |
float |
Precision of iterative procedure when momentum-dependence is included. Should be set to much smaller value than the theorical uncertainties of the predictions for the masses. |
0.0001 |
momentum_mode |
int |
If set to 1 then momentum-dependence of radiative corrections is included at the one-loop level. If set to 0 then the momentum is set to zero everywhere. |
1 |
Source code in munuSSM/benchmarkPoint.py
def calc_loop_masses(
self, even=2, odd=1, accu=1.e-4,
momentum_mode=1):
"""
Calculates the loop-corrected
masses at the given order of accuracy.
Sets the results as attributes
depending on the chosen flags.
The results are stored in the
attributes `Masshh`, `Masshh_L`
or `Masshh_2L` for the CP-even
scalars, and `MassAh` or `MassAh_L`
for the CP-odd scalars.
Args:
even (int): Loop level for the
prediction of masses of
neutral CP-even scalars.
Options: 0, 1, 2
odd (int): Loop level for the
prediction of masses of
neutral CP-odd scalars.
Options: 0, 1
accu (float): Precision of iterative
procedure when momentum-dependence
is included. Should be set to much
smaller value than the theorical
uncertainties of the predictions
for the masses.
momentum_mode (int): If set to 1 then
momentum-dependence of radiative
corrections is included at the
one-loop level. If set to 0 then
the momentum is set to zero everywhere.
"""
try:
self.Masshh
except AttributeError:
self.calc_tree_level_spectrum()
if (even != 0) and (even != 1) and (even != 2):
raise ValueError(
"Value of even must be 0, 1 or 2. You entered: " +
str(even))
if (odd != 0) and (odd != 1):
raise ValueError(
"Value of odd must be 0 or 1. You entered: " +
str(odd))
if (momentum_mode != 1) and (momentum_mode != 0):
raise ValueError(
"Value of momentum_mode must be 1. You entered: " +
str(momentum_mode))
if not even == 0:
self._calc_even_loop_masses(
even, accu, momentum_mode)
if not odd == 0:
self._calc_odd_loop_masses(
odd, accu, momentum_mode)
higgsBounds interface¶
In order to apply the collider constraints
via the interface to HiggsBounds and
HiggsSignals, the subpackage munuSSM.higgsBounds
has to be used. Therein, the module util
defines two functions to either apply
only the HiggsBounds test or to apply
both the HiggsBounds and the HiggsSignals test.
check_higgsbounds(pts, dM=3.0)
¶
Performs the HiggsBounds test for the given parameter points.
The results are stored for each item
pt
contained in pts
in the dictionaries
pt.HiggsBounds
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pts |
list |
List of instances of BenchmarkPoint class. |
required |
dM |
float |
Mass uncertainty for the masses of the scalars. |
3.0 |
Source code in munuSSM/higgsBounds/util.py
def check_higgsbounds(pts, dM=3.):
"""
Performs the HiggsBounds
test for the given parameter points.
The results are stored for each item
`pt` contained in `pts` in the dictionaries
`pt.HiggsBounds`.
Args:
pts (list): List of instances of
BenchmarkPoint class.
dM (float): Mass uncertainty for
the masses of the scalars.
"""
try:
len(pts)
except TypeError:
pts = [pts]
for pt in pts:
pt._setup_higgsbounds(dM)
hb = _fill_input(pts, dM)
hb.run_full()
for n in range(0, hb.nPoints):
pts[n].HiggsBounds = {
'result': hb.HBresult_full[n, ...],
'chan': hb.chan_full[n, ...],
'obsratio': hb.obsratio_full[n, ...],
'ncombined': hb.ncombined_full[n, ...],
'XSsingleH': hb.singleH[n, ...],
'XSggH': hb.ggH[n, ...],
'XSbbH': hb.bbH[n, ...],
'XSVBF': hb.VBF[n, ...],
'XSWH': hb.WH[n, ...],
'XSZH': hb.ZH[n, ...],
'XSttH': hb.ttH[n, ...],
'XStH_tchan': hb.tH_tchan[n, ...],
'XStH_schan': hb.tH_schan[n, ...],
'XSqqZH': hb.qqZH[n, ...],
'XSggZH': hb.ggZH[n, ...]
}
check_higgsbounds_higgssignals(pts, dM=3.0)
¶
Performs the HiggsBounds and HiggsSignals test for the given parameter points.
The results are stored for each item
pt
contained in pts
in the dictionaries
pt.HiggsBounds
and pt.HiggsSignals
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pts |
list |
List of instances of BenchmarkPoint class. |
required |
dM |
float |
Mass uncertainty for the masses of the scalars. |
3.0 |
Source code in munuSSM/higgsBounds/util.py
def check_higgsbounds_higgssignals(pts, dM=3.):
"""
Performs the HiggsBounds and HiggsSignals
test for the given parameter points.
The results are stored for each item
`pt` contained in `pts` in the dictionaries
`pt.HiggsBounds` and `pt.HiggsSignals`.
Args:
pts (list): List of instances of
BenchmarkPoint class.
dM (float): Mass uncertainty for
the masses of the scalars.
"""
try:
len(pts)
except TypeError:
pts = [pts]
for pt in pts:
pt._setup_higgsbounds(dM)
hb = _fill_input(pts, dM)
hb.run_hbhs_full()
for n in range(0, hb.nPoints):
pts[n].HiggsBounds = {
'result': hb.HBresult_full[n, ...],
'chan': hb.chan_full[n, ...],
'obsratio': hb.obsratio_full[n, ...],
'ncombined': hb.ncombined_full[n, ...],
'XSsingleH': hb.singleH[n, ...],
'XSggH': hb.ggH[n, ...],
'XSbbH': hb.bbH[n, ...],
'XSVBF': hb.VBF[n, ...],
'XSWH': hb.WH[n, ...],
'XSZH': hb.ZH[n, ...],
'XSttH': hb.ttH[n, ...],
'XStH_tchan': hb.tH_tchan[n, ...],
'XStH_schan': hb.tH_schan[n, ...],
'XSqqZH': hb.qqZH[n, ...],
'XSggZH': hb.ggZH[n, ...]
}
pts[n].HiggsSignals = {
'Chisq_mu': hb.Chisq_mu[n, ...].item(),
'Chisq_mh': hb.Chisq_mh[n, ...].item(),
'Chisq': hb.Chisq[n, ...].item(),
'nobs': hb.nobs[n, ...].item(),
'Pvalue': hb.Pvalue[n, ...].item(),
'Delta_Chisq_mu': hb.Delta_Chisq_mu[n, ...].item(),
'Delta_Chisq_mh': hb.Delta_Chisq_mh[n, ...].item(),
'Delta_Chisq': hb.Delta_Chisq[n, ...].item()
}
CheckPotential class¶
In order to determine whether the electroweak
vacuum of a parameter point is stable or
metastable, i.e. sufficiently long-lived
in comparison to the age of the universe,
the subpackage vacuumStability
can be
used. The check is performed by
creating an instance of the CheckPotential
class and subsequently calling the function
check_stability
.
__init__(self, pt)
special
¶
Initializes an instance of the
CheckPotential
class for the
parameter point that was given
as input.
During initialization, only the
scalar potential and other objects
are constructed. In order to perform
the analyses one has to subsequently
call the function check_stability
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
pt |
BenchmarkPoint |
The parameter point for which the stability of the vacuum shall be verified. |
required |
Source code in munuSSM/vacuumStability/checkPotential.py
def __init__(self, pt):
"""
Initializes an instance of the
`CheckPotential` class for the
parameter point that was given
as input.
During initialization, only the
scalar potential and other objects
are constructed. In order to perform
the analyses one has to subsequently
call the function `check_stability`.
Args:
pt (BenchmarkPoint): The parameter
point for which the stability
of the vacuum shall be verified.
"""
self.ew_eps = 1.e-6
self.hom_grad_eps = 1.e-5
# Important to only use small
# letters for module variables
# of solvetadpoles
solvetadpoles.g1 = pt.g1.float
solvetadpoles.g2 = pt.g2.float
solvetadpoles.lam = pt.lam.float
solvetadpoles.mlhd2 = pt.mlHd2.float
solvetadpoles.tlam = pt.Tlam.float
solvetadpoles.kap = pt.kap.float
solvetadpoles.yv = pt.Yv.float
solvetadpoles.tv = pt.Tv.float
solvetadpoles.tk = pt.Tk.float
solvetadpoles.mv2 = pt.mv2.float
solvetadpoles.ml2 = pt.ml2.float
solvetadpoles.mhd2 = pt.mHd2.float
solvetadpoles.mhu2 = pt.mHu2.float
self.Potential = Potential(pt)
self.ew_min = {
'vd': pt.vd.float,
'vu': pt.vu.float,
'vR': pt.vR.float,
'vL': pt.vL.float}
self.check_ew_vacuum()
self.pt = pt
check_stability(self)
¶
Determines all local minima of the neutral CP-even scalar potential. In case that there are deeper false minima below the electroweak minimum, the function then determines the euclidean bounce action for each possible transition. Based on the values of the bounce actions, one can decide whether a parameter point features a sufficiently long-lived electroweak vacuum.
The results are stored as the attribute
Transitions
for the parameter point
for which the instance of CheckPotential
was initialized. When the electroweak minimum
is the global minimum, this object is
an empty list.
Source code in munuSSM/vacuumStability/checkPotential.py
def check_stability(self):
"""
Determines all local minima of the
neutral CP-even scalar potential.
In case that there are deeper false minima
below the electroweak minimum, the
function then determines the euclidean
bounce action for each possible transition.
Based on the values of the bounce actions,
one can decide whether a parameter point
features a sufficiently long-lived
electroweak vacuum.
The results are stored as the attribute
`Transitions` for the parameter point
for which the instance of `CheckPotential`
was initialized. When the electroweak minimum
is the global minimum, this object is
an empty list.
"""
self.all_minima = self._run_HOM4PS2()
dcs = []
depth = np.inf
for i, x in enumerate(self.all_minima):
V = self.Potential.V0_X(x)
dc = {
'vd': x[0],
'vu': x[1],
'vR1': x[2],
'vR2': x[3],
'vR3': x[4],
'vL1': x[5],
'vL2': x[6],
'vL3': x[7],
'V0': V}
dcs.append(dc)
if V < depth:
depth = V
ind_global = i
for i, dc in enumerate(dcs):
if i == ind_global:
dc['global'] = 1
else:
dc['global'] = 0
self.minima = dcs
self.pt.local_minima = dcs
self.findTrans()