CHEIDI: Heidi.m

File Heidi.m, 4.7 KB (added by ChristianSpeckner, 7 years ago)

Spectrum calculator (requires Hdecay.m)

Line 
1(* Spectrum calculator for compact HEIDI. For more information, please take    *
2 * a look at                                                                   *
3 *                                                                             *
4 *   "Exploring the golden channel for HEIDI models using an interface between *
5 *      WHIZARD and FeynRules", N. D. Christensen, C. Duhr, B. Fuks, J. Reuter,*
6 *    C. Speckner, arXiv:1010.3251                                             *
7 *                                                                             *
8 * Please cite above reference if you use this program.                        *)
9
10BeginPackage["Heidi`"];
11Begin["Heidi`p`"];
12Needs["Hdecay`"];
13
14(* Initialize the package and clear all caches. *)
15Heidi`InitHeidi[mv_, mmh_, mcs_, mmb_, mg2_, mprec_] := Block[{},
16   v = mv;
17   mh = mmh;
18   cs = mcs;
19   mb = mmb;
20   g2 = mg2;
21   g = N[Sqrt[g2]];
22   alpha = N[g2 / mb * Coth[mb * Pi / cs]];
23   lambda = N[mh^2 / v^2 / 2];
24   prec = mprec;
25   Clear[MassCache, WFCache, WidthCache];
26   If[lambda <= alpha,
27      mh = 1.1 * Sqrt[2*alpha] * v;
28      Print["WARNING: choosen Higgs mass is to small; using mh "
29         <> ToString [mh] <> "GeV instead!"];
30      InitHeidi[v, mh, cs, mb, g2, prec];
31   ];
32];
33
34Heidi`InitHeidi[v_, mh_, cs_, mb_, g2_] := InitHeidi[v, mh, cs, mb, g2, 0.000001];
35
36Heidi`InitHeidi::usage = "usage: InitHeidi [v, mh, cs, mb, g2, prec]
37   v    : higgs VeV
38   mh   : higgs mass
39   cs   : compactification scale
40   mb   : bulk mass
41   g2   : 5D mixing squared
42   prec : precision for the numeric determination of the masses
43          (optional; default: 0.000001)";
44
45
46(* Calculate the nth mass eigenvalue *)
47Heidi`HeidiMass[n_] := Block[{fun, l, r, x, oldx},
48   If[NumericQ[MassCache[n]],
49      MassCache[n]
50   ,
51      If[n > 0,
52         fun = (mh^2 - mb^2 + 2*g2*v^2/# * Cot[Pi/cs*#] - #^2)&;
53         l = (n - 1) * cs; r = n * cs;
54      ,
55         fun = (mb^2 - mh^2 + 2*g2*v^2/# * Coth[Pi/cs*#] - #^2)&;
56         l = 0; r = mb;
57      ];
58      oldx = l;
59      x = (l + r) / 2;
60      While[Abs[(x - oldx) / x] > prec,
61         oldx = x;
62         If[fun[x] > 0, l = x, r = x];
63         x = (l + r) / 2;
64      ];
65      MassCache[n] = If[n == 0, Sqrt[mb^2 - N[x]^2], Sqrt[N[x]^2 + mb^2]]
66   ]
67]/;(n >= 0);
68
69Heidi`HeidiMass::usage = "usage: HeidiMass [n]
70   n    : mode index";
71
72
73(* Calculate the mth component of the nth wavefunction *)
74Heidi`HeidiWavefunction[n_, m_] := Block[{},
75   If[NumericQ[WFCache[n, m]],
76      WFCache[n, m]
77   ,
78      If[m == 0,
79         WFCache[n, m] = N[1/Sqrt[
80            1 + g2*v^2*Pi/cs/(HeidiMass[n]^2 - mb^2) +
81               (HeidiMass[n]^2 - mh^2)/2/(HeidiMass[n]^2 - mb^2) +
82               (HeidiMass[n]^2 - mh^2)^2 * Pi/4/g2/v^2/cs
83            ]]
84      ,
85         WFCache[n, m] = N[HeidiWavefunction[n, 0] *
86            2*g*v*Sqrt[cs/Pi/If[m == 1, 2, 1]] /
87            (HeidiMass[n]^2 - mb^2 - (m - 1)^2*cs^2)]
88      ]
89   ]
90]/;((n >= 0) && (m >= 0));
91
92Heidi`HeidiWavefunction::usage = "usage: HeidiWavefunction [n, m]
93   n : mode index
94   m : wavefunction component index (0 = pre-mixing higgs)";
95
96
97Heidi`HeidiScalarCoupling[i__] := Block[{},
98   -I*6 * (Times @@ (Heidi`HeidiWavefunction[#, 0]& /@ {i}))
99]/;((Length[{i}] == 4) && (And @@ ((# >= 0)& /@ {i})));
100
101Heidi`HeidiScalarCoupling[i__] := Block [{thing},
102   -2*I*v * (Times @@ (Heidi`HeidiWavefunction[#, 0]& /@ {i})) *
103      (3*lambda - ((Plus @@ ((HeidiMass[#]^2)& /@ {i})) - 3 * mh^2)/2/v^2)
104]/;((Length[{i}] == 3) && (And @@ ((# >= 0)& /@ {i})));
105
106Heidi`HeidiScalarCoupling::usage = "usage: HeidiScalarCoupling [i1, ..., in]
107   i1, ..., in : modes meeting at the vertex (n = 3 or n = 4)";
108
109
110Heidi`HeidiScalarWidth[i_] := Block[{calc},
111   calc[{x_, j_, k_}] := Which[
112      j == i, {x, j, k},
113      (HeidiMass[i] < HeidiMass[j] + HeidiMass[k]) || (k > j), {x, j+1, 0},
114      True, {
115         Sqrt[
116            (HeidiMass[i]^2 - (HeidiMass[j] + HeidiMass[k])^2) *
117            (HeidiMass[i]^2 - (HeidiMass[j] - HeidiMass[k])^2)]
118         /16/Pi/HeidiMass[i]^3 * Abs[HeidiScalarCoupling[i, j, k]]^2
119         /If[j == k, 2, 1] + x, j, k+1}
120   ];
121   If[NumericQ[WidthCache[i]], WidthCache[i], WidthCache[i] = FixedPoint[calc, {0, 0, 0}][[1]]]
122]/;(i >= 0);
123
124Heidi`HeidiScalarWidth::usage = "usage: HeidiScalarWidth [n]
125   n : mode index";
126
127
128Heidi`HeidiSMWidth[i_] := Block[{},
129   Hdecay[HeidiMass[i]] * HeidiWavefunction[i, 0]^2
130]/;(i >= 0);
131
132Heidi`HeidiSMWidth::usage = "usage: HeidiSMWidth [n]
133   n : mode index";
134
135
136Heidi`HeidiWidth[i_] := HeidiSMWidth[i] + HeidiScalarWidth[i];
137
138Heidi`HeidiWidth::usage = "usage: HeidiWidth [n]
139   n : mode index";
140
141End[];
142Protect[InitHeidi, HeidiMass, HeidiWavefunction, HeidiScalarCoupling, HeidiScalarWidth,
143   HeidiSMWidth, HeidiWidth];
144EndPackage[];