a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
THDMWcache.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "THDMWcache.h"
9 #include <fstream>
10 #include "gslpp.h"
11 #include <sstream>
12 #include <string>
13 
15  :unitarityeigenvalues(11, 0.),
16  NLOunitarityeigenvalues(11, 0.),
17  myTHDMW(static_cast<const THDMW*> (&SM_i)),
18  PV(false),
19  ATLAS8_gg_phi_tt(53, 2, 0.),
20  ATLAS8_gg_phi_tt_e(53, 2, 0.),
21  CMS8_pp_H_hh_bbbb(167, 2, 0.),
22  CMS8_bb_phi_bb(81, 2, 0.),
23  Dummy(167, 2, 0.),
24  CMS8_pp_H_hh_bbbb_e(167, 2, 0.),
25  CMS8_bb_phi_bb_e(81, 2, 0.),
26  ATLAS13_bb_phi_tt(61,2,0.),
27  ATLAS13_tt_phi_tt(61,2,0.),
28  ATLAS13_pp_H_hh_bbbb(271,2,0.),
29  ATLAS13_bb_phi_tt_e(61,2,0.),
30  ATLAS13_tt_phi_tt_e(61,2,0.),
31  ATLAS13_pp_H_hh_bbbb_e(271,2,0.),
32  CMS13_pp_phi_bb(66,2,0.),
33  CMS13_pp_H_hh_bbbb(95,2,0.),
34  CMS13_ggF_H_hh_bbbb(226,2,0.),
35  CMS8_pp_phi_bb(88,2,0.),
36  CMS13_pp_phi_bb_e(66,2,0.),
37  CMS13_pp_H_hh_bbbb_e(95,2,0.),
38  CMS13_ggF_H_hh_bbbb_e(226,2,0.),
39  CMS13_pp_R_gg(241,2,0.),
40 
41  ATLAS8_pp_Hpm_tb(41,2,0.),
42  ATLAS8_pp_Hpm_tb_e(41,2,0.),
43  CMS8_pp_Hp_tb(43,2,0.),
44  CMS8_pp_Hp_tb_e(43,2,0.),
45  CMS13_bb_H_bb(101,2,0.),
46  ATLAS13_pp_Hp_tb(181,2,0.),
47 // ATLAS13_pp_Hp_tb1(71,2,0.),
48 // ATLAS13_pp_Hp_tb2(181,2,0.),
49 // ATLAS13_pp_Hp_tb1_e(71,2,0.),
50 // ATLAS13_pp_Hp_tb2_e(181,2,0.),
51  ATLAS13_pp_Gkk_tt(131,2,0.),
52  ATLAS13_pp_SS_jjjj(126,2,0.),
53  MadGraph_pp_Sr_tt(22800,5,0.),
54  MadGraph_pp_Srtt_tttt(22800,5,0.),
55  MadGraph_pp_Sr_jj(2940,5,0.),
56  MadGraph_pp_SrSr_jjjj(4200,5,0.),
57  MadGraph_pp_Stb_tbtb(4332,4,0.),
58  MadGraph_pp_Sitt_tttt(9360,4,0.),
59  MadGraph_pp_Srbb_bbbb(15960,5,0.),
60  MadGraph_pp_Srbb_bbbb_8TeV(15960,5,0.),
61  MadGraph_pp_Sibb_bbbb(8892,4,0.),
62  MadGraph_pp_Sibb_bbbb_8TeV(8892,4,0.),
63  MadGraph_pp_Si_bb(8892,4,0.),
64  MadGraph_pp_Si_bb_8TeV(8892,4,0.),
65  MadGraph_pp_Sr_bb(15960,5,0.),
66  MadGraph_pp_Sr_bb_8TeV(15960,5,0.),
67  arraybsgamma(1111, 3, 0.),
68  betaeigenvalues(11, 0.)
69  //myTHDMW(static_cast<const THDMW*> (&SM_i))
70 
71 
72 
73 {
74  myRunnerTHDMW=new RunnerTHDMW(SM_i);
75  read();
76 }
77 
79 {
80  delete myRunnerTHDMW;
81 }
82 //
84 //
85 int THDMWcache::CacheCheck(const gslpp::complex cache[][CacheSize],
86  const int NumPar, const double params[]) const {
87  bool bCache;
88  for(int i=0; i<CacheSize; i++) {
89  bCache = true;
90  for(int j=0; j<NumPar; j++)
91  bCache &= (params[j] == cache[j][i].real());
92  if (bCache) return i;
93  }
94  return -1;
95 }
96 
97 int THDMWcache::CacheCheckReal(const double cache[][CacheSize],
98  const int NumPar, const double params[]) const {
99  bool bCache;
100  for(int i=0; i<CacheSize; i++) {
101  bCache = true;
102  for(int j=0; j<NumPar; j++)
103  bCache &= (params[j] == cache[j][i]);
104  if (bCache) return i;
105  }
106  return -1;
107 }
108 
109 void THDMWcache::CacheShift(gslpp::complex cache[][CacheSize], const int NumPar,
110  const double params[], const gslpp::complex newResult) const {
111  // shift old parameters and result
112  for(int i=CacheSize-1; i>0; i--)
113  for(int j=0; j<NumPar+1; j++)
114  cache[j][i] = cache[j][i-1];
115 
116  // store new parameters and result
117  for(int j=0; j<NumPar; j++) {
118  cache[j][0] = gslpp::complex(params[j], 0.0, false);
119  cache[NumPar][0] = newResult;
120  }
121 }
122 
123 void THDMWcache::CacheShiftReal(double cache[][CacheSize], const int NumPar,
124  const double params[], const double newResult) const {
125  // shift old parameters and result
126  for(int i=CacheSize-1; i>0; i--)
127  for(int j=0; j<NumPar+1; j++)
128  cache[j][i] = cache[j][i-1];
129 
130  // store new parameters and result
131  for(int j=0; j<NumPar; j++) {
132  cache[j][0] = params[j];
133  cache[NumPar][0] = newResult;
134  }
135 }
136 
138 //--------- Passarino Veltman Functions for THDMW ---------//
140 
141 gslpp::complex THDMWcache::A0_MZ2_mSp2(const double MZ2, const double mSp2) const {
142  int NumPar = 2;
143  double params[] = {MZ2, mSp2};
144 
145  int i = CacheCheck(A0_MZ2_mSp2_cache, NumPar, params);
146  if (i>=0) {
147  return ( A0_MZ2_mSp2_cache[NumPar][i] );
148  } else {
149  gslpp::complex newResult = PV.A0(MZ2, mSp2);
150  CacheShift(A0_MZ2_mSp2_cache, NumPar, params, newResult);
151  return newResult;
152  }
153 }
154 
155 gslpp::complex THDMWcache::A0_MZ2_mSr2(const double MZ2, const double mSr2) const {
156  int NumPar = 2;
157  double params[] = {MZ2, mSr2};
158 
159  int i = CacheCheck(A0_MZ2_mSr2_cache, NumPar, params);
160  if (i>=0) {
161  return ( A0_MZ2_mSr2_cache[NumPar][i] );
162  } else {
163  gslpp::complex newResult = PV.A0(MZ2, mSr2);
164  CacheShift(A0_MZ2_mSr2_cache, NumPar, params, newResult);
165  return newResult;
166  }
167 }
168 
169 gslpp::complex THDMWcache::A0_MZ2_mSi2(const double MZ2, const double mSi2) const {
170  int NumPar = 2;
171  double params[] = {MZ2, mSi2};
172 
173  int i = CacheCheck(A0_MZ2_mSi2_cache, NumPar, params);
174  if (i>=0) {
175  return ( A0_MZ2_mSi2_cache[NumPar][i] );
176  } else {
177  gslpp::complex newResult = PV.A0(MZ2, mSi2);
178  CacheShift(A0_MZ2_mSi2_cache, NumPar, params, newResult);
179  return newResult;
180  }
181 }
182 
183 gslpp::complex THDMWcache::B0_MZ2_0_mSp2_mSp2(const double MZ2, const double mSp2) const {
184  int NumPar = 2;
185  double params[] = {MZ2, mSp2};
186 
187  int i = CacheCheck(B0_MZ2_0_mSp2_mSp2_cache, NumPar, params);
188  if (i>=0) {
189  return ( B0_MZ2_0_mSp2_mSp2_cache[NumPar][i] );
190  } else {
191  gslpp::complex newResult = PV.B0(MZ2,0. ,mSp2 , mSp2);
192  CacheShift(B0_MZ2_0_mSp2_mSp2_cache, NumPar, params, newResult);
193  return newResult;
194  }
195 }
196  /*gslpp::complex THDMWcache::B00_MZ2_0_mSr2_mSp2(const double MZ2, const double mSr2, const double mSp2) const {
197  int NumPar = 3;
198  double params[] = {MZ2, mSr2, mSp2};
199 
200  int i = CacheCheck(B00_MZ2_0_mSr2_mSp2_cache, NumPar, params);
201  if (i>=0) {
202  return ( B00_MZ2_0_mSr2_mSp2_cache[NumPar][i] );
203  } else {
204  gslpp::complex newResult = PV.B00(MZ2, 0. , mSr2, mSp2);
205  CacheShift(B00_MZ2_0_mSr2_mSp2_cache, NumPar, params, newResult);
206  return newResult;
207  }
208 }
209 
210 gslpp::complex THDMWcache::B00_MZ2_0_mSi2_mSp2(const double MZ2, const double mSi2, const double mSp2) const {
211  int NumPar = 3;
212  double params[] = {MZ2, mSi2, mSp2};
213 
214  int i = CacheCheck(B00_MZ2_0_mSi2_mSp2_cache, NumPar, params);
215  if (i>=0) {
216  return ( B00_MZ2_0_mSi2_mSp2_cache[NumPar][i] );
217  } else {
218  gslpp::complex newResult = PV.B00(MZ2, 0. , mSi2, mSp2);
219  CacheShift(B00_MZ2_0_mSi2_mSp2_cache, NumPar, params, newResult);
220  return newResult;
221  }
222 }
223 
224 gslpp::complex THDMWcache::B00_MZ2_0_mSp2_mSp2(const double MZ2, const double mSp2) const {
225  int NumPar = 2;
226  double params[] = {MZ2, mSp2};
227 
228  int i = CacheCheck(B00_MZ2_0_mSp2_mSp2_cache, NumPar, params);
229  if (i>=0) {
230  return ( B00_MZ2_0_mSp2_mSp2_cache[NumPar][i] );
231  } else {
232  gslpp::complex newResult = PV.B00(MZ2, 0. , mSp2, mSp2);
233  CacheShift(B00_MZ2_0_mSp2_mSp2_cache, NumPar, params, newResult);
234  return newResult;
235  }
236 }*/
237 
238 gslpp::complex THDMWcache::B00_MZ2_MZ2_mSr2_mSp2(const double MZ2, const double mSr2, const double mSp2) const {
239  int NumPar = 3;
240  double params[] = {MZ2, mSr2, mSp2};
241 
242  int i = CacheCheck(B00_MZ2_MZ2_mSr2_mSp2_cache, NumPar, params);
243  if (i>=0) {
244  return ( B00_MZ2_MZ2_mSr2_mSp2_cache[NumPar][i] );
245  } else {
246  gslpp::complex newResult = PV.B00(MZ2, MZ2 , mSr2, mSp2);
247  CacheShift(B00_MZ2_MZ2_mSr2_mSp2_cache, NumPar, params, newResult);
248  return newResult;
249  }
250 }
251 
252 gslpp::complex THDMWcache::B00_MZ2_MZ2_mSi2_mSp2(const double MZ2, const double mSi2, const double mSp2) const {
253  int NumPar = 3;
254  double params[] = {MZ2, mSi2, mSp2};
255 
256  int i = CacheCheck(B00_MZ2_MZ2_mSi2_mSp2_cache, NumPar, params);
257  if (i>=0) {
258  return ( B00_MZ2_MZ2_mSi2_mSp2_cache[NumPar][i] );
259  } else {
260  gslpp::complex newResult = PV.B00(MZ2, MZ2 , mSi2, mSp2);
261  CacheShift(B00_MZ2_MZ2_mSi2_mSp2_cache, NumPar, params, newResult);
262  return newResult;
263  }
264 }
265 
266 gslpp::complex THDMWcache::B00_MZ2_MZ2_mSr2_mSi2(const double MZ2, const double mSr2, const double mSi2) const {
267  int NumPar = 3;
268  double params[] = {MZ2, mSr2, mSi2};
269 
270  int i = CacheCheck(B00_MZ2_MZ2_mSr2_mSi2_cache, NumPar, params);
271  if (i>=0) {
272  return ( B00_MZ2_MZ2_mSr2_mSi2_cache[NumPar][i] );
273  } else {
274  gslpp::complex newResult = PV.B00(MZ2, MZ2 , mSr2, mSi2);
275  CacheShift(B00_MZ2_MZ2_mSr2_mSi2_cache, NumPar, params, newResult);
276  return newResult;
277  }
278 }
279 
280 
281 
282 gslpp::complex THDMWcache::B00_MZ2_MZ2_mSp2_mSp2(const double MZ2, const double mSp2) const {
283  int NumPar = 2;
284  double params[] = {MZ2, mSp2};
285 
286  int i = CacheCheck(B00_MZ2_MZ2_mSp2_mSp2_cache, NumPar, params);
287  if (i>=0) {
288  return ( B00_MZ2_MZ2_mSp2_mSp2_cache[NumPar][i] );
289  } else {
290  gslpp::complex newResult = PV.B00(MZ2, MZ2 , mSp2, mSp2);
291  CacheShift(B00_MZ2_MZ2_mSp2_mSp2_cache, NumPar, params, newResult);
292  return newResult;
293  }
294 }
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
307 //--------- End Passarino Veltman Functions for THDMW ---------//
309 
310 
311 
312 
313 //double THDMWcache::ghHpHm(const double mHp2, const double tanb, const double m12_2, const double bma, const double mHl2, const double vev) const {
314 // int NumPar = 6;
315 // double params[] = {mHp2, tanb, m12_2, bma, mHl2, vev};
316 //
317 // int i = CacheCheckReal(ghHpHm_cache, NumPar, params);
318 // if (i>=0) {
319 // return ( ghHpHm_cache[NumPar][i] );
320 // } else {
321 // double newResult = ((cos(bma)*mHl2*(tanb*tanb-1.0))/tanb
322 // -(mHl2+2.0*mHp2)*sin(bma)
323 // +(m12_2*(cos(bma)*(1.0-tanb*tanb)+2.0*sin(bma)*tanb)*(1.0+tanb*tanb))/(tanb*tanb))/vev;
324 // CacheShiftReal(ghHpHm_cache, NumPar, params, newResult);
325 // return newResult;
326 // }
327 //}
328 //
329 //double THDMWcache::g_HH_HpHm(const double mHp2, const double mHh2, const double tanb, const double m12_2, const double bma, const double vev) const {
330 // int NumPar = 6;
331 // double params[] = {mHp2, mHh2, tanb, m12_2, bma, vev};
332 //
333 // int i = CacheCheckReal(g_HH_HpHm_cache, NumPar, params);
334 // if (i>=0) {
335 // return ( g_HH_HpHm_cache[NumPar][i] );
336 // } else {
337 // double newResult = (cos(bma)*(mHh2-2.0*mHp2)
338 // +((m12_2-mHh2*tanb+m12_2*tanb*tanb)
339 // *(2.0*cos(bma)*tanb+sin(bma)*(tanb*tanb-1.0)))/(tanb*tanb))/vev;
340 // CacheShiftReal(g_HH_HpHm_cache, NumPar, params, newResult);
341 // return newResult;
342 // }
343 //}
344 
345 gslpp::complex THDMWcache::I_h_U(const double mHl2, const double Mu, const double Mc, const double Mt) const {
346  int NumPar = 4;
347  double params[] = {mHl2, Mu, Mc, Mt};
348 
349  int i = CacheCheck(I_h_U_cache, NumPar, params);
350  if (i>=0) {
351  return ( I_h_U_cache[NumPar][i] );
352  } else {
353  double TAUu=4.0*Mu*Mu/mHl2;
354  double TAUc=4.0*Mc*Mc/mHl2;
355  double TAUt=4.0*Mt*Mt/mHl2;
356  gslpp::complex newResult = -(8./3.)*(TAUu*(1.0+(1.0-TAUu)*f_func(TAUu))
357  +TAUc*(1.0+(1.0-TAUc)*f_func(TAUc))+TAUt*(1.0+(1.0-TAUt)*f_func(TAUt)));
358  CacheShift(I_h_U_cache, NumPar, params, newResult);
359  return newResult;
360  }
361 }
362 
363 gslpp::complex THDMWcache::I_HH_U(const double mHh2, const double Mc, const double Mt) const {
364  int NumPar = 3;
365  double params[] = {mHh2, Mc, Mt};
366 
367  int i = CacheCheck(I_HH_U_cache, NumPar, params);
368  if (i>=0) {
369  return ( I_HH_U_cache[NumPar][i] );
370  } else {
371  double TAUc=4.0*Mc*Mc/mHh2;
372  double TAUt=4.0*Mt*Mt/mHh2;
373  gslpp::complex newResult = -(8./3.)*(TAUc*(1.0+(1.0-TAUc)*f_func(TAUc))
374  +TAUt*(1.0+(1.0-TAUt)*f_func(TAUt)));
375  CacheShift(I_HH_U_cache, NumPar, params, newResult);
376  return newResult;
377  }
378 }
379 
380 gslpp::complex THDMWcache::I_A_U(const double mA2, const double Mc, const double Mt) const {
381  int NumPar = 3;
382  double params[] = {mA2, Mc, Mt};
383 
384  int i = CacheCheck(I_A_U_cache, NumPar, params);
385  if (i>=0) {
386  return ( I_A_U_cache[NumPar][i] );
387  } else {
388  double TAUc=4.0*Mc*Mc/mA2;
389  double TAUt=4.0*Mt*Mt/mA2;
390  gslpp::complex newResult = -(8./3.)*(TAUc*f_func(TAUc)+TAUt*f_func(TAUt));
391  CacheShift(I_A_U_cache, NumPar, params, newResult);
392  return newResult;
393  }
394 }
395 
396 gslpp::complex THDMWcache::I_h_D(const double mHl2, const double Md, const double Ms, const double Mb) const {
397  int NumPar = 4;
398  double params[] = {mHl2, Md, Ms, Mb};
399 
400  int i = CacheCheck(I_h_D_cache, NumPar, params);
401  if (i>=0) {
402  return ( I_h_D_cache[NumPar][i] );
403  } else {
404  double TAUd=4.0*Md*Md/mHl2;
405  double TAUs=4.0*Ms*Ms/mHl2;
406  double TAUb=4.0*Mb*Mb/mHl2;
407  gslpp::complex newResult = -(2./3.)*(TAUd*(1.0+(1.0-TAUd)*f_func(TAUd))
408  +TAUs*(1.0+(1.0-TAUs)*f_func(TAUs))+TAUb*(1.0+(1.0-TAUb)*f_func(TAUb)));
409  CacheShift(I_h_D_cache, NumPar, params, newResult);
410  return newResult;
411  }
412 }
413 
414 gslpp::complex THDMWcache::I_HH_D(const double mHh2, const double Ms, const double Mb) const {
415  int NumPar = 3;
416  double params[] = {mHh2, Ms, Mb};
417 
418  int i = CacheCheck(I_HH_D_cache, NumPar, params);
419  if (i>=0) {
420  return ( I_HH_D_cache[NumPar][i] );
421  } else {
422  double TAUs=4.0*Ms*Ms/mHh2;
423  double TAUb=4.0*Mb*Mb/mHh2;
424  gslpp::complex newResult = -(2./3.)*(TAUs*(1.0+(1.0-TAUs)*f_func(TAUs))
425  +TAUb*(1.0+(1.0-TAUb)*f_func(TAUb)));
426  CacheShift(I_HH_D_cache, NumPar, params, newResult);
427  return newResult;
428  }
429 }
430 
431 gslpp::complex THDMWcache::I_A_D(const double mA2, const double Ms, const double Mb) const {
432  int NumPar = 3;
433  double params[] = {mA2, Ms, Mb};
434 
435  int i = CacheCheck(I_A_D_cache, NumPar, params);
436  if (i>=0) {
437  return ( I_A_D_cache[NumPar][i] );
438  } else {
439  double TAUs=4.0*Ms*Ms/mA2;
440  double TAUb=4.0*Mb*Mb/mA2;
441  gslpp::complex newResult = -(2./3.)*(TAUs*f_func(TAUs)+TAUb*f_func(TAUb));
442  CacheShift(I_A_D_cache, NumPar, params, newResult);
443  return newResult;
444  }
445 }
446 
447 gslpp::complex THDMWcache::I_h_L(const double mHl2, const double Me, const double Mmu, const double Mtau) const {
448  int NumPar = 4;
449  double params[] = {mHl2, Me, Mmu, Mtau};
450 
451  int i = CacheCheck(I_h_L_cache, NumPar, params);
452  if (i>=0) {
453  return ( I_h_L_cache[NumPar][i] );
454  } else {
455  double TAUe=4.0*Me*Me/mHl2;
456  double TAUmu=4.0*Mmu*Mmu/mHl2;
457  double TAUtau=4.0*Mtau*Mtau/mHl2;
458  gslpp::complex newResult = -2.0*(TAUe*(1.0+(1.0-TAUe)*f_func(TAUe))
459  +TAUmu*(1.0+(1.0-TAUmu)*f_func(TAUmu))
460  +TAUtau*(1.0+(1.0-TAUtau)*f_func(TAUtau)));
461  CacheShift(I_h_L_cache, NumPar, params, newResult);
462  return newResult;
463  }
464 }
465 
466 gslpp::complex THDMWcache::I_HH_L(const double mHh2, const double Mmu, const double Mtau) const {
467  int NumPar = 3;
468  double params[] = {mHh2, Mmu, Mtau};
469 
470  int i = CacheCheck(I_HH_L_cache, NumPar, params);
471  if (i>=0) {
472  return ( I_HH_L_cache[NumPar][i] );
473  } else {
474  double TAUmu=4.0*Mmu*Mmu/mHh2;
475  double TAUtau=4.0*Mtau*Mtau/mHh2;
476  gslpp::complex newResult = -2.0*(TAUmu*(1.0+(1.0-TAUmu)*f_func(TAUmu))+
477  TAUtau*(1.0+(1.0-TAUtau)*f_func(TAUtau)));
478  CacheShift(I_HH_L_cache, NumPar, params, newResult);
479  return newResult;
480  }
481 }
482 
483 gslpp::complex THDMWcache::I_A_L(const double mA2, const double Mmu, const double Mtau) const {
484  int NumPar = 3;
485  double params[] = {mA2, Mmu, Mtau};
486 
487  int i = CacheCheck(I_A_L_cache, NumPar, params);
488  if (i>=0) {
489  return ( I_A_L_cache[NumPar][i] );
490  } else {
491  double TAUmu=4.0*Mmu*Mmu/mA2;
492  double TAUtau=4.0*Mtau*Mtau/mA2;
493  gslpp::complex newResult = -2.0*(TAUmu*f_func(TAUmu)+TAUtau*f_func(TAUtau));
494  CacheShift(I_A_L_cache, NumPar, params, newResult);
495  return newResult;
496  }
497 }
498 
499 gslpp::complex THDMWcache::I_H_W(const double mH, const double MW) const {
500  int NumPar = 2;
501  double params[] = {mH, MW};
502 
503  int i = CacheCheck(I_H_W_cache, NumPar, params);
504  if (i>=0) {
505  return ( I_H_W_cache[NumPar][i] );
506  } else {
507  double TAUw=4.0*MW*MW/(mH*mH);
508  gslpp::complex newResult = 2.0 + 3.0*TAUw + 3.0*TAUw*(2.0-TAUw)*f_func(TAUw);
509  CacheShift(I_H_W_cache, NumPar, params, newResult);
510  return newResult;
511  }
512 }
513 
514 gslpp::complex THDMWcache::I_H_Hp(const double mHp2, const double mH) const {
515  int NumPar = 2;
516  double params[] = {mHp2, mH};
517 
518  int i = CacheCheck(I_H_Hp_cache, NumPar, params);
519  if (i>=0) {
520  return ( I_H_Hp_cache[NumPar][i] );
521  } else {
522  double TAUhp=4.0*mHp2/(mH*mH);
523  gslpp::complex newResult = -TAUhp*(1.0-TAUhp*f_func(TAUhp));
524  CacheShift(I_H_Hp_cache, NumPar, params, newResult);
525  return newResult;
526  }
527 }
528 
529 gslpp::complex THDMWcache::A_h_U(const double mHl2, const double cW2, const double Mu, const double Mc, const double Mt, const double MZ) const {
530  int NumPar = 6;
531  double params[] = {mHl2, cW2, Mu, Mc, Mt, MZ};
532 
533  int i = CacheCheck(A_h_U_cache, NumPar, params);
534  if (i>=0) {
535  return ( A_h_U_cache[NumPar][i] );
536  } else {
537  double TAUu=4.0*Mu*Mu/mHl2;
538  double TAUc=4.0*Mc*Mc/mHl2;
539  double TAUt=4.0*Mt*Mt/mHl2;
540  double LAMu=4.0*Mu*Mu/(MZ*MZ);
541  double LAMc=4.0*Mc*Mc/(MZ*MZ);
542  double LAMt=4.0*Mt*Mt/(MZ*MZ);
543  double sW2=1.0-cW2;
544  gslpp::complex newResult = -4.0*(1.0/2.0-4.0/3.0*sW2)*(Int1(TAUu,LAMu)+Int1(TAUc,LAMc)
545  +Int1(TAUt,LAMt)-Int2(TAUu,LAMu)-Int2(TAUc,LAMc)-Int2(TAUt,LAMt));
546  CacheShift(A_h_U_cache, NumPar, params, newResult);
547  return newResult;
548  }
549 }
550 
551 gslpp::complex THDMWcache::A_HH_U(const double mHh2, const double cW2, const double Mc, const double Mt, const double MZ) const {
552  int NumPar = 5;
553  double params[] = {mHh2, cW2, Mc, Mt, MZ};
554 
555  int i = CacheCheck(A_HH_U_cache, NumPar, params);
556  if (i>=0) {
557  return ( A_HH_U_cache[NumPar][i] );
558  } else {
559  double TAUc=4.0*Mc*Mc/mHh2;
560  double TAUt=4.0*Mt*Mt/mHh2;
561  double LAMc=4.0*Mc*Mc/(MZ*MZ);
562  double LAMt=4.0*Mt*Mt/(MZ*MZ);
563  double sW2=1.0-cW2;
564  gslpp::complex newResult = -4.0*(1.0/2.0-4.0/3.0*sW2)*(Int1(TAUc,LAMc)-Int2(TAUc,LAMc)
565  +Int1(TAUt,LAMt)-Int2(TAUt,LAMt));
566  CacheShift(A_HH_U_cache, NumPar, params, newResult);
567  return newResult;
568  }
569 }
570 
571 gslpp::complex THDMWcache::A_A_U(const double mA2, const double cW2, const double Mc, const double Mt, const double MZ) const {
572  int NumPar = 5;
573  double params[] = {mA2, cW2, Mc, Mt, MZ};
574 
575  int i = CacheCheck(A_A_U_cache, NumPar, params);
576  if (i>=0) {
577  return ( A_A_U_cache[NumPar][i] );
578  } else {
579  double TAUc=4.0*Mc*Mc/mA2;
580  double TAUt=4.0*Mt*Mt/mA2;
581  double LAMc=4.0*Mc*Mc/(MZ*MZ);
582  double LAMt=4.0*Mt*Mt/(MZ*MZ);
583  double sW2=1.0-cW2;
584  gslpp::complex newResult = -4.0*(1.0/2.0-4.0/3.0*sW2)*(-Int2(TAUc,LAMc)-Int2(TAUt,LAMt))/sqrt(sW2*cW2);
585  CacheShift(A_A_U_cache, NumPar, params, newResult);
586  return newResult;
587  }
588 }
589 
590 gslpp::complex THDMWcache::A_h_D(const double mHl2, const double cW2, const double Md, const double Ms, const double Mb, const double MZ) const {
591  int NumPar = 6;
592  double params[] = {mHl2, cW2, Md, Ms, Mb, MZ};
593 
594  int i = CacheCheck(A_h_D_cache, NumPar, params);
595  if (i>=0) {
596  return ( A_h_D_cache[NumPar][i] );
597  } else {
598  double TAUd=4.0*Md*Md/mHl2;
599  double TAUs=4.0*Ms*Ms/mHl2;
600  double TAUb=4.0*Mb*Mb/mHl2;
601  double LAMd=4.0*Md*Md/(MZ*MZ);
602  double LAMs=4.0*Ms*Ms/(MZ*MZ);
603  double LAMb=4.0*Mb*Mb/(MZ*MZ);
604  double sW2=1.0-cW2;
605  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0/3.0*sW2)*(Int1(TAUd,LAMd)+Int1(TAUs,LAMs)
606  +Int1(TAUb,LAMb)-Int2(TAUd,LAMd)-Int2(TAUs,LAMs)-Int2(TAUb,LAMb));
607  CacheShift(A_h_D_cache, NumPar, params, newResult);
608  return newResult;
609  }
610 }
611 
612 gslpp::complex THDMWcache::A_HH_D(const double mHh2, const double cW2, const double Ms, const double Mb, const double MZ) const {
613  int NumPar = 5;
614  double params[] = {mHh2, cW2, Ms, Mb, MZ};
615 
616  int i = CacheCheck(A_HH_D_cache, NumPar, params);
617  if (i>=0) {
618  return ( A_HH_D_cache[NumPar][i] );
619  } else {
620  double TAUs=4.0*Ms*Ms/mHh2;
621  double TAUb=4.0*Mb*Mb/mHh2;
622  double LAMs=4.0*Ms*Ms/(MZ*MZ);
623  double LAMb=4.0*Mb*Mb/(MZ*MZ);
624  double sW2=1.0-cW2;
625  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0/3.0*sW2)*(Int1(TAUs,LAMs)-Int2(TAUs,LAMs)
626  +Int1(TAUb,LAMb)-Int2(TAUb,LAMb));
627  CacheShift(A_HH_D_cache, NumPar, params, newResult);
628  return newResult;
629  }
630 }
631 
632 gslpp::complex THDMWcache::A_A_D(const double mA2, const double cW2, const double Ms, const double Mb, const double MZ) const {
633  int NumPar = 5;
634  double params[] = {mA2, cW2, Ms, Mb, MZ};
635 
636  int i = CacheCheck(A_A_D_cache, NumPar, params);
637  if (i>=0) {
638  return ( A_A_D_cache[NumPar][i] );
639  } else {
640  double TAUs=4.0*Ms*Ms/mA2;
641  double TAUb=4.0*Mb*Mb/mA2;
642  double LAMs=4.0*Ms*Ms/(MZ*MZ);
643  double LAMb=4.0*Mb*Mb/(MZ*MZ);
644  double sW2=1.0-cW2;
645  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0/3.0*sW2)*(-Int2(TAUs,LAMs)-Int2(TAUb,LAMb))/sqrt(sW2*cW2);
646  CacheShift(A_A_D_cache, NumPar, params, newResult);
647  return newResult;
648  }
649 }
650 
651 gslpp::complex THDMWcache::A_h_L(const double mHl2, const double cW2, const double Me, const double Mmu, const double Mtau, const double MZ) const {
652  int NumPar = 6;
653  double params[] = {mHl2, cW2, Me, Mmu, Mtau, MZ};
654 
655  int i = CacheCheck(A_h_L_cache, NumPar, params);
656  if (i>=0) {
657  return ( A_h_L_cache[NumPar][i] );
658  } else {
659  double TAUe=4.0*Me*Me/mHl2;
660  double TAUmu=4.0*Mmu*Mmu/mHl2;
661  double TAUtau=4.0*Mtau*Mtau/mHl2;
662  double LAMe=4.0*Me*Me/(MZ*MZ);
663  double LAMmu=4.0*Mmu*Mmu/(MZ*MZ);
664  double LAMtau=4.0*Mtau*Mtau/(MZ*MZ);
665  double sW2=1.0-cW2;
666  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0*sW2)*(Int1(TAUe,LAMe)+Int1(TAUmu,LAMmu)
667  +Int1(TAUtau,LAMtau)-Int2(TAUe,LAMe)-Int2(TAUmu,LAMmu)
668  -Int2(TAUtau,LAMtau));
669  CacheShift(A_h_L_cache, NumPar, params, newResult);
670  return newResult;
671  }
672 }
673 
674 gslpp::complex THDMWcache::A_HH_L(const double mHh2, const double cW2, const double Mmu, const double Mtau, const double MZ) const {
675  int NumPar = 5;
676  double params[] = {mHh2, cW2, Mmu, Mtau, MZ};
677 
678  int i = CacheCheck(A_HH_L_cache, NumPar, params);
679  if (i>=0) {
680  return ( A_HH_L_cache[NumPar][i] );
681  } else {
682  double TAUmu=4.0*Mmu*Mmu/mHh2;
683  double TAUtau=4.0*Mtau*Mtau/mHh2;
684  double LAMmu=4.0*Mmu*Mmu/(MZ*MZ);
685  double LAMtau=4.0*Mtau*Mtau/(MZ*MZ);
686  double sW2=1.0-cW2;
687  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0*sW2)*(Int1(TAUmu,LAMmu)-Int2(TAUmu,LAMmu)
688  +Int1(TAUtau,LAMtau)-Int2(TAUtau,LAMtau));
689  CacheShift(A_HH_L_cache, NumPar, params, newResult);
690  return newResult;
691  }
692 }
693 
694 gslpp::complex THDMWcache::A_A_L(const double mA2, const double cW2, const double Mmu, const double Mtau, const double MZ) const {
695  int NumPar = 5;
696  double params[] = {mA2, cW2, Mmu, Mtau, MZ};
697 
698  int i = CacheCheck(A_A_L_cache, NumPar, params);
699  if (i>=0) {
700  return ( A_A_L_cache[NumPar][i] );
701  } else {
702  double TAUmu=4.0*Mmu*Mmu/mA2;
703  double TAUtau=4.0*Mtau*Mtau/mA2;
704  double LAMmu=4.0*Mmu*Mmu/(MZ*MZ);
705  double LAMtau=4.0*Mtau*Mtau/(MZ*MZ);
706  double sW2=1.0-cW2;
707  gslpp::complex newResult = 2.0*(-1.0/2.0+2.0*sW2)*(-Int2(TAUmu,LAMmu)-Int2(TAUtau,LAMtau))/sqrt(sW2*cW2);
708  CacheShift(A_A_L_cache, NumPar, params, newResult);
709  return newResult;
710  }
711 }
712 
713 gslpp::complex THDMWcache::A_H_W(const double mH, const double cW2, const double MW, const double MZ) const {
714  int NumPar = 4;
715  double params[] = {mH, cW2, MW, MZ};
716 
717  int i = CacheCheck(A_H_W_cache, NumPar, params);
718  if (i>=0) {
719  return ( A_H_W_cache[NumPar][i] );
720  } else {
721  double TAUw=4.0*MW*MW/(mH*mH);
722  double LAMw=4.0*MW*MW/(MZ*MZ);
723  double sW2=1.0-cW2;
724  gslpp::complex newResult = -sqrt(cW2/sW2)*(4.0*(3.0-sW2/cW2)*Int2(TAUw,LAMw)
725  +((1.0+2.0/TAUw)*sW2/cW2-(5.0+2.0/TAUw))*Int1(TAUw,LAMw));
726  CacheShift(A_H_W_cache, NumPar, params, newResult);
727  return newResult;
728  }
729 }
730 
731 gslpp::complex THDMWcache::A_H_Hp(const double mHp2, const double mH, const double cW2, const double MZ) const {
732  int NumPar = 4;
733  double params[] = {mHp2, mH, cW2, MZ};
734 
735  int i = CacheCheck(A_H_Hp_cache, NumPar, params);
736  if (i>=0) {
737  return ( A_H_Hp_cache[NumPar][i] );
738  } else {
739  double TAUhp=4.0*mHp2/(mH*mH);
740  double LAMhp=4.0*mHp2/(MZ*MZ);
741  double sW2=1.0-cW2;
742  gslpp::complex newResult = (1.0-2.0*sW2)/sqrt(cW2*sW2)*Int1(TAUhp,LAMhp);
743  CacheShift(A_H_Hp_cache, NumPar, params, newResult);
744  return newResult;
745  }
746 }
747 
748 gslpp::complex THDMWcache::f_func(const double x) const{
749  if(x<1) {
750  gslpp::complex z = -gslpp::complex::i()*M_PI;
751  return -pow(log((1.0+sqrt(1.0-x))/(1.0-sqrt(1.0-x)))+z,2)/4.0;
752  }
753  else {
754  return pow(asin(sqrt(1.0/x)),2);
755  }
756 }
757 
758 gslpp::complex THDMWcache::g_func(const double x) const{
759  if(x<1) {
760  gslpp::complex z = -gslpp::complex::i()*M_PI;
761  gslpp::complex gs1 = sqrt(1.0-x)*(log((1.0+sqrt(1.0-x))/(1.0-sqrt(1.0-x)))+z)/2.0;
762  return gs1;
763  }
764  else {
765  gslpp::complex gg1 = sqrt(x-1.0)*asin(sqrt(1.0/x));
766  return gg1;
767  }
768 }
769 
770 gslpp::complex THDMWcache::Int1(const double tau, const double lambda) const{
771  return tau*lambda/(tau-lambda)/2.0+tau*tau*lambda*lambda/((tau-lambda)
772  *(tau-lambda))/2.0*(f_func(tau)-f_func(lambda))+tau*tau*lambda/((tau-lambda)
773  *(tau-lambda))*(g_func(tau)-g_func(lambda));
774 }
775 
776 gslpp::complex THDMWcache::Int2(const double tau, const double lambda) const{
777  return -tau*lambda/(tau-lambda)/2.0*(f_func(tau)-f_func(lambda));
778 }
779 
781 {
782  double Mt = myTHDMW->getQuarks(QCD::TOP).getMass();
783  double Mb = myTHDMW->getQuarks(QCD::BOTTOM).getMass();
784  double Mc = myTHDMW->getQuarks(QCD::CHARM).getMass();
785  double Ms = myTHDMW->getQuarks(QCD::STRANGE).getMass();
786  double Mu = myTHDMW->getQuarks(QCD::UP).getMass();
787  double Md = myTHDMW->getQuarks(QCD::DOWN).getMass();
788  double Mtau = myTHDMW->getLeptons(StandardModel::TAU).getMass();
789  double Mmu = myTHDMW->getLeptons(StandardModel::MU).getMass();
791  double MW = myTHDMW->Mw();
792  double cW2 = myTHDMW->c02();
793  double sW2=1.0-cW2;
794 
795  double BrSM_htobb = 5.77e-1;
796  double BrSM_htotautau = 6.32e-2;
797  double BrSM_htogaga = 2.28e-3;
798  double BrSM_htoWW = 2.15e-1;
799  double BrSM_htoZZ = 2.64e-2;
800  double BrSM_htogg = 8.57e-2;
801  double BrSM_htoZga = 1.54e-3;
802  double BrSM_htocc = 2.91e-2;
803 
804  if( THDMWmodel == "ManoharWise" || THDMWmodel == "custodialMW" ) {
805  rh_QuQu = 1.0;
806  rh_VV = 1.0;
807  rh_QdQd = 1.0;
808  rh_ll = 1.0;
809 
810  //gluon coupling
811  gslpp::complex fermU = I_h_U(mhsq,Mu,Mc,Mt);
812  gslpp::complex fermD = I_h_D(mhsq,Md,Ms,Mb);
813  double ch_p=-nu1*vev*vev/(4.0*mSpsq);//Victor Miralles, non-custodial
814  double ch_r=-(nu1+nu2+2.0*nu3)*vev*vev/(4.0*mSRsq);//Victor Miralles, non-custodial
815  double ch_i=-(nu1+nu2-2.0*nu3)*vev*vev/(4.0*mSIsq);//Victor Miralles, non-custodial
816  gslpp::complex I_h_Sp = 4.5*ch_p*I_H_Hp(mSpsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
817  gslpp::complex I_h_SR = 2.25*ch_r*I_H_Hp(mSRsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
818  gslpp::complex I_h_SI = 2.25*ch_i*I_H_Hp(mSIsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
819  double ABSggMW=(-9.0/16.0*(fermU+4.0*fermD)+I_h_Sp+I_h_SR+I_h_SI).abs2(); //Factor 9/16 and 4 to normalize Higgs Hunters Guide to 1606.01298
820  double ABSggSM=(-9.0/16.0*(fermU+4.0*fermD)).abs2(); //Factor 9/16 and 4 to normalize Higgs Hunters Guide to 1606.01298
821  rh_gg=ABSggMW/ABSggSM;
822  //std::cout<<"I_h_Sp*2.0 = "<<I_h_Sp*2.0<<std::endl;
823  //std::cout<<"-9.0/16.0*fermU = "<<-9.0/16.0*fermU<<std::endl;
824  //photon coupling
825  gslpp::complex fermL = I_h_L(mhsq,Me,Mmu,Mtau);
826  gslpp::complex I_hSM_W = I_H_W(sqrt(mhsq),MW);
827  gslpp::complex I_h_S = -8.0*ch_p*I_H_Hp(mSpsq,sqrt(mhsq));//Factor of 1/3 cancels with the normalization factor 3 between Higgs Hunters Guide and 1606.01298
828  double ABSgagaMW=(fermU+fermD+fermL+I_hSM_W+I_h_S).abs2();//-8 times (31) in 1606.01298
829  double ABSgagaSM=(fermU+fermD+fermL+I_hSM_W).abs2();//-8 times (31) in 1606.01298
830  rh_gaga=ABSgagaMW/ABSgagaSM;
831 
832  //Z photon coupling
833  gslpp::complex A_h_Ux = A_h_U(mhsq,cW2,Mu,Mc,Mt,MZ);
834  gslpp::complex A_h_Dx = A_h_D(mhsq,cW2,Md,Ms,Mb,MZ);
835  gslpp::complex A_h_Lx = A_h_L(mhsq,cW2,Me,Mmu,Mtau,MZ);
836  gslpp::complex A_h_F = (A_h_Ux+A_h_Dx+A_h_Lx)/sqrt(sW2*cW2);
837  gslpp::complex A_hSM_W = A_H_W(sqrt(mhsq),cW2,MW,MZ);
838  gslpp::complex A_h_S = -8.0*ch_p*A_H_Hp(mSpsq,sqrt(mhsq),cW2,MZ);//Just analagous to the diphoton loop
839  double ABSZgaMW=(A_h_F+A_hSM_W+A_h_S).abs2();
840  double ABSZgaSM=(A_h_F+A_hSM_W).abs2();
841  rh_Zga=ABSZgaMW/ABSZgaSM;
842 
843  }
844  else if( THDMWmodel == "custodial1" ) {
845  rh_QuQu = cosa*cosa/(sinb*sinb);
846  rh_VV = sin(bma)*sin(bma);
847  rh_QdQd = rh_QuQu;
848  rh_ll = rh_QuQu;
849 
850  //gluon coupling
851  gslpp::complex fermU = I_h_U(mhsq,Mu,Mc,Mt);
852  gslpp::complex fermD = I_h_D(mhsq,Md,Ms,Mb);
853  double ch_p=(-nu1*sina*cosb+omega1*cosa*sinb+kappa1*(cosa*cosb-sina*sinb))*vev*vev/(4.0*mSpsq);
854  double ch_r=(-(nu1+2.0*nu2)*sina*cosb+(omega1+2.0*omega2)*cosa*sinb+(kappa1+2.0*kappa2)*(cosa*cosb-sina*sinb))*vev*vev/(4.0*mSRsq);
855  double ch_i=ch_p;
856  gslpp::complex I_h_Sp = 4.5*ch_p*I_H_Hp(mSpsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
857  gslpp::complex I_h_SR = 2.25*ch_r*I_H_Hp(mSRsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
858  gslpp::complex I_h_SI = 2.25*ch_i*I_H_Hp(mSIsq,sqrt(mhsq)); //Factor 3 to normalize Higgs Hunters Guide to 1606.01298
859  double ABSggTHDMW=(-9.0/16.0*(cosa/sinb)*(fermU+4.0*fermD)+I_h_Sp+I_h_SR+I_h_SI).abs2(); //Factor 9/16 to normalize Higgs Hunters Guide to 1606.01298
860  double ABSggSM=(-9.0/16.0*(fermU+4.0*fermD)).abs2(); //Factor 9/16 to normalize Higgs Hunters Guide to 1606.01298
861  rh_gg=ABSggTHDMW/ABSggSM;
862 
863  //photon coupling
864  double ghHpHm = vev*vev/mAsq * (-lambda1*sina*sinb*sinb*cosb+lambda2*cosa*sinb*cosb*cosb
866  -2.0*lambda4*(cosa*cosb-sina*sinb)*sinb*cosb);
867  gslpp::complex fermL = I_h_L(mhsq,Me,Mmu,Mtau);
868  gslpp::complex I_hSM_W = I_H_W(sqrt(mhsq),MW);
869  gslpp::complex I_h_Hp = -0.5*ghHpHm*I_H_Hp(mSpsq,sqrt(mhsq));
870  gslpp::complex I_h_S = -8.0*ch_p*I_H_Hp(mSpsq,sqrt(mhsq));//Factor of 1/3 cancels with the normalization factor 3 between Higgs Hunters Guide and 1606.01298
871  double ABSgagaTHDMW=((cosa/sinb)*(fermU+fermD+fermL)+sin(bma)*I_hSM_W+I_h_Hp+I_h_S).abs2();//-8 times (31) in 1606.01298
872  double ABSgagaSM=(fermU+fermD+fermL+I_hSM_W).abs2();//-8 times (31) in 1606.01298
873  rh_gaga=ABSgagaTHDMW/ABSgagaSM;
874 
875  //Z photon coupling
876  gslpp::complex A_h_Ux = A_h_U(mhsq,cW2,Mu,Mc,Mt,MZ);
877  gslpp::complex A_h_Dx = A_h_D(mhsq,cW2,Md,Ms,Mb,MZ);
878  gslpp::complex A_h_Lx = A_h_L(mhsq,cW2,Me,Mmu,Mtau,MZ);
879  gslpp::complex A_h_F = cosa/sinb*(A_h_Ux+A_h_Dx+A_h_Lx)/sqrt(sW2*cW2);
880  gslpp::complex A_hSM_W = A_H_W(sqrt(mhsq),cW2,MW,MZ);
881  gslpp::complex A_h_Hp = -0.5*ghHpHm*A_H_Hp(mSpsq,sqrt(mhsq),cW2,MZ);
882  gslpp::complex A_h_S = -8.0*ch_p*A_H_Hp(mSpsq,sqrt(mhsq),cW2,MZ);//Just analagous to the diphoton loop
883  double ABSZgaTHDMW=(A_h_F+sin(bma)*A_hSM_W+A_h_Hp+A_h_S).abs2();
884  double ABSZgaSM=(A_h_F+A_hSM_W).abs2();
885  rh_Zga=ABSZgaTHDMW/ABSZgaSM;
886 
887  }
888  else {
889  throw std::runtime_error("THDMWmodel can only be \"ManoharWise\", \"custodialMW\" or \"custodial1\".");
890  }
891 
892  sumModBRs = rh_QdQd*BrSM_htobb + rh_VV*(BrSM_htoWW+BrSM_htoZZ) + rh_ll*BrSM_htotautau +
893  rh_gaga*BrSM_htogaga + rh_gg*BrSM_htogg + rh_Zga*BrSM_htoZga + rh_QuQu*BrSM_htocc;
894 
896 
897  THDM_BR_h_bb = rh_QdQd*BrSM_htobb/sumModBRs;
898  THDM_BR_h_gaga = rh_gaga*BrSM_htogaga/sumModBRs;
899  THDM_BR_h_tautau = rh_ll*BrSM_htotautau/sumModBRs;
900  THDM_BR_h_WW = rh_VV*BrSM_htoWW/sumModBRs;
901  THDM_BR_h_ZZ = rh_VV*BrSM_htoZZ/sumModBRs;
902 }
903 
905 {
906 
907  std::string RGEorder=myTHDMW->getRGEorderflag();
908  //flag will be used to transport information about model and RGEorder to the Runner:
909  //flag=0 for LO, 1 for approxNLO (and 2 for NLO - not implemented yet)
910  int flag;
911  if( RGEorder == "LO" ) flag=0;
912  else if( RGEorder == "approxNLO" ) flag=1;
913 // else if( RGEorder == "NLO" ) flag=2;
914  else {
915  throw std::runtime_error("RGEorder can be only any of \"LO\", \"approxNLO\" or \"NLO\"");
916  }
917 
918  if( THDMWmodel == "custodial1")
919  {
920  double lambda1_at_MZ=lambda1;
921  double lambda2_at_MZ=lambda2;
922  double lambda3_at_MZ=lambda3;
923  double lambda4_at_MZ=lambda4;
924  double mu1_at_MZ=mu1;
925  double mu3_at_MZ=mu3;
926  double mu4_at_MZ=mu4;
927  double nu1_at_MZ=nu1;
928  double omega1_at_MZ=omega1;
929  double kappa1_at_MZ=kappa1;
930  double nu2_at_MZ=nu2;
931  double omega2_at_MZ=omega2;
932  double kappa2_at_MZ=kappa2;
933  double nu4_at_MZ=nu4;
934  double omega4_at_MZ=omega4;
935  double NLOuniscale=myTHDMW->getNLOuniscaleTHDMW();
936 
937  if(fabs(Q_THDMW-log10(MZ))<0.005) //at MZ scale
938  {
939  Q_cutoff=log10(MZ);
940 
941  lambda1_at_Q = lambda1_at_MZ;
942  lambda2_at_Q = lambda2_at_MZ;
943  lambda3_at_Q = lambda3_at_MZ;
944  lambda4_at_Q = lambda4_at_MZ;
945  mu1_at_Q = mu1_at_MZ;
946  mu3_at_Q = mu3_at_MZ;
947  mu4_at_Q = mu4_at_MZ;
948  nu1_at_Q = nu1_at_MZ;
949  omega1_at_Q = omega1_at_MZ;
950  kappa1_at_Q = kappa1_at_MZ;
951  nu2_at_Q = nu2_at_MZ;
952  omega2_at_Q = omega2_at_MZ;
953  kappa2_at_Q = kappa2_at_MZ;
954  nu4_at_Q = nu4_at_MZ;
955  omega4_at_Q = omega4_at_MZ;
956  }
957  else //at some other scale
958  {
959  double InitVals[15];
960  InitVals[0]=lambda1_at_MZ;
961  InitVals[1]=lambda2_at_MZ;
962  InitVals[2]=lambda3_at_MZ;
963  InitVals[3]=lambda4_at_MZ;
964  InitVals[4]=mu1_at_MZ;
965  InitVals[5]=mu3_at_MZ;
966  InitVals[6]=mu4_at_MZ;
967  InitVals[7]=nu1_at_MZ;
968  InitVals[8]=omega1_at_MZ;
969  InitVals[9]=kappa1_at_MZ;
970  InitVals[10]=nu2_at_MZ;
971  InitVals[11]=omega2_at_MZ;
972  InitVals[12]=kappa2_at_MZ;
973  InitVals[13]=nu4_at_MZ;
974  InitVals[14]=omega4_at_MZ;
975 
976  Q_cutoff=myRunnerTHDMW->RGERunnerTHDMW(InitVals, 15, log10(MZ), Q_THDMW, flag, RpepsTHDMW, NLOuniscale); //Running up to Q_cutoff<=Q_THDM
977 
978  lambda1_at_Q = InitVals[0];
979  lambda2_at_Q = InitVals[1];
980  lambda3_at_Q = InitVals[2];
981  lambda4_at_Q = InitVals[3];
982  mu1_at_Q=InitVals[4];
983  mu3_at_Q=InitVals[5];
984  mu4_at_Q = InitVals[6];
985  nu1_at_Q = InitVals[7];
986  omega1_at_Q = InitVals[8];
987  kappa1_at_Q = InitVals[9];
988  nu2_at_Q = InitVals[10];
989  omega2_at_Q = InitVals[11];
990  kappa2_at_Q = InitVals[12];
991  nu4_at_Q = InitVals[13];
992  omega4_at_Q = InitVals[14];
993  }
994  }//End custodial1 case
995  else if( THDMWmodel == "ManoharWise")
996  {
997  double lambda1_at_MZ=lambda1;
998  double nu1_at_MZ=nu1;
999  double nu2_at_MZ=nu2;
1000  double nu3_at_MZ=nu3;
1001  double nu4_at_MZ=nu4;
1002  double nu5_at_MZ=nu5;
1003  double mu1_at_MZ=mu1;
1004  double mu2_at_MZ=mu2;
1005  double mu3_at_MZ=mu3;
1006  double mu4_at_MZ=mu4;
1007  double mu5_at_MZ=mu5;
1008  double mu6_at_MZ=mu6;
1009  double NLOuniscale=myTHDMW->getNLOuniscaleTHDMW();
1010 
1011  if(fabs(Q_THDMW-log10(MZ))<0.005) //at MZ scale
1012  {
1013  Q_cutoff=log10(MZ);
1014 
1015  lambda1_at_Q = lambda1_at_MZ;
1016  nu1_at_Q = nu1_at_MZ;
1017  nu2_at_Q = nu2_at_MZ;
1018  nu3_at_Q = nu3_at_MZ;
1019  nu4_at_Q = nu4_at_MZ;
1020  nu5_at_Q = nu5_at_MZ;
1021  mu1_at_Q = mu1_at_MZ;
1022  mu2_at_Q = mu2_at_MZ;
1023  mu3_at_Q = mu3_at_MZ;
1024  mu4_at_Q = mu4_at_MZ;
1025  mu5_at_Q = mu5_at_MZ;
1026  mu6_at_Q = mu6_at_MZ;
1027  }
1028  else //at some other scale
1029  {
1030  double InitVals[12];
1031  InitVals[0]=lambda1_at_MZ;
1032  InitVals[1]=nu1_at_MZ;
1033  InitVals[2]=nu2_at_MZ;
1034  InitVals[3]=nu3_at_MZ;
1035  InitVals[4]=nu4_at_MZ;
1036  InitVals[5]=nu5_at_MZ;
1037  InitVals[6]=mu1_at_MZ;
1038  InitVals[7]=mu2_at_MZ;
1039  InitVals[8]=mu3_at_MZ;
1040  InitVals[9]=mu4_at_MZ;
1041  InitVals[10]=mu5_at_MZ;
1042  InitVals[11]=mu6_at_MZ;
1043 
1044  Q_cutoff=myRunnerTHDMW->RGERunnerMW(InitVals, 12, log10(MZ), Q_THDMW, flag, RpepsTHDMW, NLOuniscale); //Running up to Q_cutoff<=Q_THDM
1045 
1046  lambda1_at_Q = InitVals[0];
1047  nu1_at_Q = InitVals[1];
1048  nu2_at_Q = InitVals[2];
1049  nu3_at_Q = InitVals[3];
1050  nu4_at_Q = InitVals[4];
1051  nu5_at_Q = InitVals[5];
1052  mu1_at_Q=InitVals[6];
1053  mu2_at_Q=InitVals[7];
1054  mu3_at_Q=InitVals[8];
1055  mu4_at_Q = InitVals[9];
1056  mu5_at_Q=InitVals[10];
1057  mu6_at_Q=InitVals[11];
1058  }
1059  }//End ManoharWise case
1060  else if( THDMWmodel == "custodialMW")
1061  {
1062  double lambda1_at_MZ=lambda1;
1063  double nu1_at_MZ=nu1;
1064  double nu2_at_MZ=nu2;
1065  double nu4_at_MZ=nu4;
1066  double mu1_at_MZ=mu1;
1067  double mu3_at_MZ=mu3;
1068  double mu4_at_MZ=mu4;
1069  double NLOuniscale=myTHDMW->getNLOuniscaleTHDMW();
1070 
1071  if(fabs(Q_THDMW-log10(MZ))<0.005) //at MZ scale
1072  {
1073  Q_cutoff=log10(MZ);
1074 
1075  lambda1_at_Q = lambda1_at_MZ;
1076  nu1_at_Q = nu1_at_MZ;
1077  nu2_at_Q = nu2_at_MZ;
1078  nu4_at_Q = nu4_at_MZ;
1079  mu1_at_Q = mu1_at_MZ;
1080  mu3_at_Q = mu3_at_MZ;
1081  mu4_at_Q = mu4_at_MZ;
1082  }
1083  else //at some other scale
1084  {
1085  double InitVals[12];
1086  InitVals[0]=lambda1_at_MZ;
1087  InitVals[1]=nu1_at_MZ;
1088  InitVals[2]=nu2_at_MZ;
1089  InitVals[3]=nu4_at_MZ;
1090  InitVals[4]=mu1_at_MZ;
1091  InitVals[5]=mu3_at_MZ;
1092  InitVals[6]=mu4_at_MZ;
1093 
1094  Q_cutoff=myRunnerTHDMW->RGERunnercustodialMW(InitVals, 7, log10(MZ), Q_THDMW, flag, RpepsTHDMW, NLOuniscale); //Running up to Q_cutoff<=Q_THDM
1095 
1096  lambda1_at_Q = InitVals[0];
1097  nu1_at_Q = InitVals[1];
1098  nu2_at_Q = InitVals[2];
1099  nu4_at_Q = InitVals[3];
1100  mu1_at_Q=InitVals[4];
1101  mu3_at_Q=InitVals[5];
1102  mu4_at_Q = InitVals[6];
1103  }
1104  }//End custodialMW case
1105 }
1106 
1108 {
1109  if( THDMWmodel != "custodial1" && THDMWmodel != "ManoharWise" && THDMWmodel != "custodialMW")
1110  {
1111  throw std::runtime_error("THDMW unitarity constraints are only implemented for the \"custodial1\", the \"ManoharWise\" and the \"custodialMW\" model.");
1112  }
1113 
1114  if( THDMWmodel == "custodial1")
1115  {
1116  double pi=M_PI;
1117  gslpp::matrix<gslpp::complex> Smatrix1(4,4,0.), Smatrix2(4,4,0.);
1118  gslpp::matrix<gslpp::complex> Sbmatrix1(4,4,0.), Sbmatrix2(4,4,0.);
1119  gslpp::matrix<gslpp::complex> Seigenvectors1(4,4,0.), Seigenvectors2(4,4,0.);
1120  gslpp::matrix<gslpp::complex> Seigenvectors1T(4,4,0.), Seigenvectors2T(4,4,0.);
1121  gslpp::vector<double> Seigenvalues1(4,0.), Seigenvalues2(4,0.);
1122  gslpp::vector<gslpp::complex> Sbeigenvalues1(4,0.), Sbeigenvalues2(4,0.);
1123 
1124  /*
1125  ******* LO part *************
1126  */
1127 
1128  // Definition of the blocks of the S-matrix
1129  Smatrix1.assign(0,0, 3.0*lambda1/(16.0*pi));
1130  Smatrix1.assign(0,1, (2.0*lambda3+lambda4)/(16.0*pi));
1131  Smatrix1.assign(1,0, Smatrix1(0,1));
1132  Smatrix1.assign(0,3, (2.0*nu1+nu2)/(8.0*sqrt(2.0)*pi));
1133  Smatrix1.assign(3,0, Smatrix1(0,3));
1134  Smatrix1.assign(1,1, 3.0*lambda2/(16.0*pi));
1135  Smatrix1.assign(1,3, (2.0*omega1+omega2)/(8.0*sqrt(2.0)*pi));
1136  Smatrix1.assign(3,1, Smatrix1(1,3));
1137  Smatrix1.assign(2,2, (lambda3+5.0*lambda4)/(16.0*pi));
1138  Smatrix1.assign(2,3, (4.0*kappa1+2.0*kappa2)/(16.0*pi));
1139  Smatrix1.assign(3,2, Smatrix1(2,3));
1140  Smatrix1.assign(3,3, (26.0*mu1+17.0*mu3+13.0*mu4)/(32.0*pi));
1141 
1142  Smatrix2.assign(0,0, lambda1/(16.0*pi));
1143  Smatrix2.assign(0,1, lambda4/(16.0*pi));
1144  Smatrix2.assign(1,0, Smatrix2(0,1));
1145  Smatrix2.assign(0,3, nu2/(8.0*sqrt(2.0)*pi));
1146  Smatrix2.assign(3,0, Smatrix2(0,3));
1147  Smatrix2.assign(1,1, lambda2/(16.0*pi));
1148  Smatrix2.assign(1,3, omega2/(8.0*sqrt(2.0)*pi));
1149  Smatrix2.assign(3,1, Smatrix2(1,3));
1150  Smatrix2.assign(2,2, (lambda3+lambda4)/(16.0*pi));
1151  Smatrix2.assign(2,3, kappa2/(8.0*pi));
1152  Smatrix2.assign(3,2, Smatrix2(2,3));
1153  Smatrix2.assign(3,3, (14.0*mu1+3.0*mu3+27.0*mu4)/(96.0*pi));
1154 
1155  Smatrix1.eigensystem(Seigenvectors1, Seigenvalues1);
1156  Smatrix2.eigensystem(Seigenvectors2, Seigenvalues2);
1157 
1158  for (int i=0; i < 4; i++) {
1159  unitarityeigenvalues.assign(i, Seigenvalues1(i));
1160  unitarityeigenvalues.assign(4+i, Seigenvalues2(i));
1161  }
1162  unitarityeigenvalues.assign(8, (lambda3-lambda4)/(16.0*pi));
1163  unitarityeigenvalues.assign(9, sqrt(15.0)*nu4/(16.0*pi));
1164  unitarityeigenvalues.assign(10, sqrt(15.0)*omega4/(16.0*pi));
1165 
1166  /*
1167  ******* NLO part *************
1168  */
1169 
1170  double blambda1=(12.0*lambda1*lambda1 + 4.0*lambda3*lambda3 + 4.0*lambda3*lambda4 + 4.0*lambda4*lambda4
1171  + 8.0*nu1*nu1 + 8.0*nu1*nu2 + 8.0*nu2*nu2)/(16.0*pi*pi);
1172  double blambda2=(12.0*lambda2*lambda2 + 4.0*lambda3*lambda3 + 4.0*lambda3*lambda4 + 4.0*lambda4*lambda4
1173  + 8.0*omega1*omega1 + 8.0*omega1*omega2 + 8.0*omega2*omega2)/(16.0*pi*pi);
1174  double blambda3=(4.0*lambda3*lambda3 + 4.0*lambda4*lambda4 + (lambda1+lambda2)*(6.0*lambda3+2.0*lambda4)
1175  + 8.0*kappa2*kappa2 + 8.0*nu1*omega1 + 4.0*nu2*omega1 + 4.0*nu1*omega2)/(16.0*pi*pi);
1176  double blambda4=(lambda1*lambda4 + lambda2*lambda4 + 4.0*lambda3*lambda4 + 6.0*lambda4*lambda4
1177  + 4.0*kappa1*kappa1 + 4.0*kappa1*kappa2 + 2.0*kappa2*kappa2 + 2.0*nu2*omega2)/(8.0*pi*pi);
1178  double bmu1=(11.0*mu1*mu1 + 3.0*mu1*mu4 + mu1*(2.0*mu1+6.0*mu3+3.0*mu4)
1179  + 3.0*nu4*nu4 + 3.0*omega4*omega4)/(16.0*pi*pi);
1180  double bmu3=(18.0*kappa1*kappa1 + 18.0*kappa1*kappa2 + 134.0*mu1*mu1 + 6.0*mu1*(39.0*mu3 + 22.0*mu4)
1181  + 3.0*(30.0*mu3*mu3 + 39.0*mu3*mu4 + 9.0*mu4*mu4
1182  + 3.0*nu1*nu1 + 3.0*nu1*nu2 - 5.0*nu4*nu4
1183  + 3.0*omega1*omega1 + 3.0*omega1*omega2 - 5.0*omega4*omega4))/(72.0*pi*pi);
1184  double bmu4=(18.0*kappa2*kappa2 + 4.0*mu1*mu1 + 156.0*mu1*mu4 + 54.0*mu3*mu4 + 144.0*mu4*mu4
1185  + 9.0*nu2*nu2 + 6.0*nu4*nu4 + 9.0*omega2*omega2 + 6.0*omega4*omega4)/(144.0*pi*pi);
1186  double bnu1=(6.0*kappa1*kappa1 + 6.0*kappa2*kappa2 + 18.0*lambda1*nu1
1187  + 78.0*mu1*nu1 + 51.0*mu3*nu1 + 39.0*mu4*nu1 + 6.0*nu1*nu1
1188  + 6.0*lambda1*nu2 + 32.0*mu1*nu2 + 24.0*mu3*nu2 + 6.0*mu4*nu2
1189  + 6.0*nu2*nu2 + 10.0*nu4*nu4
1190  + 12.0*lambda3*omega1 + 6.0*lambda4*omega1 + 6.0*lambda3*omega2)/(48.0*pi*pi);
1191  double bomega1=(6.0*kappa1*kappa1 + 6.0*kappa2*kappa2
1192  + 12.0*lambda3*nu1 + 6.0*lambda4*nu1 + 6.0*lambda3*nu2
1193  + 18.0*lambda2*omega1 + 78.0*mu1*omega1 + 51.0*mu3*omega1 + 39.0*mu4*omega1 + 6.0*omega1*omega1
1194  + 6.0*lambda2*omega2 + 32.0*mu1*omega2 + 24.0*mu3*omega2 + 6.0*mu4*omega2 + 6.0*omega2*omega2
1195  + 10.0*omega4*omega4)/(48.0*pi*pi);
1196  double bkappa1=(6.0*kappa1*(2.0*lambda3 + 10.0*lambda4 + 18.0*mu1 + 17.0*mu3 + 13.0*mu4 + 2.0*nu1 + 2.0*omega1)
1197  + kappa2*(24.0*lambda4 + 64.0*mu1 + 48.0*mu3 + 24.0*mu4 + 9.0*nu2 + 9.0*omega2)
1198  + 20.0*nu4*omega4)/(96.0*pi*pi);
1199  double bnu2=(4.0*kappa1*kappa2 + 6.0*kappa2*kappa2 + 2.0*lambda1*nu2 + ((14.0*mu1)/3.0 + mu3 + 9.0*mu4)*nu2
1200  + 4.0*nu1*nu2 + 6.0*nu2*nu2 + (25.0*nu4*nu4)/3.0 + 2.0*lambda4*omega2)/(16.0*pi*pi);
1201  double bomega2=(4.0*kappa1*kappa2 + 6.0*kappa2*kappa2 + 2.0*lambda4*nu2 + 2.0*lambda2*omega2
1202  + ((14.0*mu1)/3.0 + mu3 + 9.0*mu4)*omega2 + 4.0*omega1*omega2 + 6.0*omega2*omega2
1203  + (25.0*omega4*omega4)/3.0)/(16.0*pi*pi);
1204  double bkappa2=(kappa2*(6.0*lambda3 + 6.0*lambda4 + 14.0*mu1 + 3.0*mu3 + 27.0*mu4
1205  + 6.0*nu1 + 12.0*nu2 + 6.0*omega1 + 12.0*omega2)
1206  + 6.0*kappa1*(nu2 + omega2) + 42.0*nu4*omega4)/(48.0*pi*pi);
1207  double bnu4=(11.0*mu1*nu4 + 3.0*mu3*nu4 + 9.0*mu4*nu4 + 3.0*nu1*nu4 + 9.0*nu2*nu4
1208  + 3.0*kappa1*omega4 + 9.0*kappa2*omega4)/(16.0*pi*pi);
1209  double bomega4=(3.0*kappa1*nu4 + 9.0*kappa2*nu4
1210  + (11.0*mu1 + 3.0*(mu3 + 3.0*mu4 + omega1 + 3.0*omega2))*omega4)/(16.0*pi*pi);
1211 
1212  Sbmatrix1.assign(0,0, 3.0*blambda1/(16.0*pi));
1213  Sbmatrix1.assign(0,1, (2.0*blambda3+blambda4)/(16.0*pi));
1214  Sbmatrix1.assign(1,0, Sbmatrix1(0,1));
1215  Sbmatrix1.assign(0,3, (2.0*bnu1+bnu2)/(8.0*sqrt(2.0)*pi));
1216  Sbmatrix1.assign(3,0, Sbmatrix1(0,3));
1217  Sbmatrix1.assign(1,1, 3.0*blambda2/(16.0*pi));
1218  Sbmatrix1.assign(1,3, (2.0*bomega1+bomega2)/(8.0*sqrt(2.0)*pi));
1219  Sbmatrix1.assign(3,1, Sbmatrix1(1,3));
1220  Sbmatrix1.assign(2,2, (blambda3+5.0*blambda4)/(16.0*pi));
1221  Sbmatrix1.assign(2,3, (4.0*bkappa1+2.0*bkappa2)/(16.0*pi));
1222  Sbmatrix1.assign(3,2, Sbmatrix1(2,3));
1223  Sbmatrix1.assign(3,3, (26.0*bmu1+17.0*bmu3+13.0*bmu4)/(32.0*pi));
1224 
1225  Sbmatrix2.assign(0,0, blambda1/(16.0*pi));
1226  Sbmatrix2.assign(0,1, blambda4/(16.0*pi));
1227  Sbmatrix2.assign(1,0, Sbmatrix2(0,1));
1228  Sbmatrix2.assign(0,3, bnu2/(8.0*sqrt(2.0)*pi));
1229  Sbmatrix2.assign(3,0, Sbmatrix2(0,3));
1230  Sbmatrix2.assign(1,1, blambda2/(16.0*pi));
1231  Sbmatrix2.assign(1,3, bomega2/(8.0*sqrt(2.0)*pi));
1232  Sbmatrix2.assign(3,1, Sbmatrix2(1,3));
1233  Sbmatrix2.assign(2,2, (blambda3+blambda4)/(16.0*pi));
1234  Sbmatrix2.assign(2,3, bkappa2/(8.0*pi));
1235  Sbmatrix2.assign(3,2, Sbmatrix2(2,3));
1236  Sbmatrix2.assign(3,3, (14.0*bmu1+3.0*bmu3+27.0*bmu4)/(96.0*pi));
1237 
1238  Seigenvectors1T=Seigenvectors1.hconjugate();
1239  Seigenvectors2T=Seigenvectors2.hconjugate();
1240 
1241  for (int i=0; i < 4; i++) {
1242  for (int k=0; k < 4; k++) {
1243  for (int l=0; l < 4; l++) {
1244  Sbeigenvalues1.assign(i, Sbeigenvalues1(i) + Seigenvectors1T(i,k) * Sbmatrix1(k,l) * Seigenvectors1(l,i) );
1245  Sbeigenvalues2.assign(i, Sbeigenvalues2(i) + Seigenvectors2T(i,k) * Sbmatrix2(k,l) * Seigenvectors2(l,i) );
1246  }
1247  }
1248  betaeigenvalues.assign(i, -1.5 * Sbeigenvalues1(i));
1249  betaeigenvalues.assign(i+4, -1.5 * Sbeigenvalues2(i));
1250  }
1251 
1252  betaeigenvalues.assign(8, -1.5 * (blambda3-blambda4)/(16.0*pi));
1253  betaeigenvalues.assign(9, -1.5 * sqrt(15.0)*bnu4/(16.0*pi));
1254  betaeigenvalues.assign(10, -1.5 * sqrt(15.0)*bomega4/(16.0*pi));
1255 
1256  for (int i=0; i < 11; i++) {
1258  }
1259  }//End of the custodial1 case
1260 
1261  if( THDMWmodel == "ManoharWise")
1262  {
1263  double pi=M_PI;
1264 
1265  /*
1266  ******* LO part *************
1267  */
1268 
1269  // Eigenvalues of the S-matrix, calculated by Li Cheng and Victor Miralles
1270  double muA = 4.0*mu1+4.0*mu2+8.5*mu3+5.0*mu4+1.5*mu5+2.5*mu6;
1271  double muB = (4.0*mu1+4.0*mu2+1.5*mu3+12.0*mu4+1.5*mu5-0.5*mu6)/3.0;
1272  double muC = (-0.5*mu1-0.5*mu2+1.5*mu3+1.5*mu4+12.0*mu5+4.0*mu6)/3.0;
1273  double MA1 = 3.0*lambda1 + muA - sqrt(9.0*lambda1*lambda1-6.0*lambda1*muA+muA*muA+32.0*nu1*nu1+32.0*nu1*nu2+8.0*nu2*nu2);
1274  double MA2 = 3.0*lambda1 + muA + sqrt(9.0*lambda1*lambda1-6.0*lambda1*muA+muA*muA+32.0*nu1*nu1+32.0*nu1*nu2+8.0*nu2*nu2);
1275  double MB1 = lambda1 + muB - sqrt(lambda1*lambda1-2.0*lambda1*muB+muB*muB+8.0*nu2*nu2);
1276  double MB2 = lambda1 + muB + sqrt(lambda1*lambda1-2.0*lambda1*muB+muB*muB+8.0*nu2*nu2);
1277  double MC1 = lambda1 + muC - sqrt(lambda1*lambda1-2.0*lambda1*muC+muC*muC+32.0*nu3*nu3);
1278  double MC2 = lambda1 + muC + sqrt(lambda1*lambda1-2.0*lambda1*muC+muC*muC+32.0*nu3*nu3);
1279  unitarityeigenvalues.assign(0, MA1/(32.0*pi));
1280  unitarityeigenvalues.assign(1, MA2/(32.0*pi));
1281  unitarityeigenvalues.assign(2, MB1/(32.0*pi));
1282  unitarityeigenvalues.assign(3, MB2/(32.0*pi));
1283  unitarityeigenvalues.assign(4, MC1/(32.0*pi));
1284  unitarityeigenvalues.assign(5, MC2/(32.0*pi));
1285  unitarityeigenvalues.assign(6, lambda1/(16.0*pi));
1286  unitarityeigenvalues.assign(7, sqrt(15.0)*(nu4+nu5)/(64.0*pi));
1287 
1288  /*
1289  ******* NLO part *************
1290  */
1291 
1292  //beta_lambda1
1293  double betalambda1 = (12.0*lambda1*lambda1 + 8.0*nu1*nu1 + 8.0*nu1*nu2 + 4.0*nu2*nu2 + 16.0*nu3*nu3)/(16.0*pi*pi);
1294  //beta_nu1
1295  double betanu1 = (2.0*nu1*nu1 + nu2*nu2 + 4.0*nu3*nu3 + 2.0*lambda1*(3.0*nu1+nu2)
1296  + (7.0*nu4*nu4 - 4.0*nu4*nu5 + 7.0*nu5*nu5)/3.0
1297  + nu1*(8.0*mu1 + 8.0*mu2 + 17.0*mu3 + 10.0*mu4 + 3.0*mu5 + 5.0*mu6)
1298  + nu2*(8.0*mu1 + 8.0*mu2 + 24.0*mu3 + 3.0*mu4
1299  + 3.0*mu5 + 8.0*mu6)/3.0)/(16.0*pi*pi);
1300  //beta_nu2
1301  double betanu2 = (2.0*nu2*nu2 + 4.0*nu1*nu2 + 16.0*nu3*nu3 + 2.0*lambda1*nu2
1302  + (4.0*nu4*nu4 + 17.0*nu4*nu5 + 4.0*nu5*nu5)/3.0
1303  + nu2*(8.0*mu1 + 8.0*mu2 + 3.0*mu3 + 24.0*mu4
1304  + 3.0*mu5 - mu6)/3.0)/(16.0*pi*pi);
1305  //beta_nu3
1306  double betanu3 = (2.0*nu3*(lambda1 + 2.0*nu1 + 3.0*nu2)
1307  + (17.0*nu4*nu4 + 16.0*nu4*nu5 + 17.0*nu5*nu5)/12.0
1308  + nu3*(-mu1 - mu2 + 3.0*mu3 + 3.0*mu4
1309  + 24.0*mu5 + 8.0*mu6)/3.0)/(16.0*pi*pi);
1310  //beta_nu4
1311  double betanu4 = (8.0*nu3*nu4 + 2.0*nu3*nu5
1312  + nu5*(2.0*nu2 - mu2 + 2.0*mu4 + 4.0*mu5 + mu6)
1313  + nu4*(3.0*nu1 + 2.0*nu2 + 6.0*mu1 + 2.0*mu2 + 3.0*mu3
1314  + 2.0*mu4 + mu5 + mu6))/(16.0*pi*pi);
1315  //beta_nu5
1316  double betanu5 = (2.0*nu3*nu4 + 8.0*nu3*nu5
1317  + nu4*(2.0*nu2 - mu1 + 2.0*mu4 + 4.0*mu5 + mu6)
1318  + nu5*(3.0*nu1 + 2.0*nu2 + 6.0*mu1 + 2.0*mu2 + 3.0*mu3
1319  + 2.0*mu4 + mu5 + mu6))/(16.0*pi*pi);
1320  //beta_mu1
1321  double betamu1 = (3.0*nu4*nu4 + 7.0*mu1*mu1
1322  + mu1*(6.0*mu2 + 6.0*mu3 + 4.0*mu4 - mu5 - 2.0*mu6)
1323  + mu2*(4.0*mu4 - mu5)
1324  - 2.0*mu4*mu6 + 2.0*mu5*mu6 + mu6*mu6)/(16.0*pi*pi);
1325  //beta_mu2
1326  double betamu2 = (3.0*nu5*nu5 + 7.0*mu2*mu2
1327  + mu2*(6.0*mu1 + 6.0*mu3 + 4.0*mu4 - mu5 - 2.0*mu6)
1328  + mu1*(4.0*mu4 - mu5)
1329  - 2.0*mu4*mu6 + 2.0*mu5*mu6 + mu6*mu6)/(16.0*pi*pi);
1330  //beta_mu3
1331  double betamu3 = (20.0*mu3*mu3
1332  + mu3*(288.0*mu1 + 288.0*mu2 + 360.0*mu4 + 108.0*mu5 + 180.0*mu6)/18.0
1333  + (36.0*nu1*nu1 + 36.0*nu1*nu2 - 24.0*nu4*nu4 - 12.0*nu4*nu5
1334  - 24.0*nu5*nu5 + 62.0*mu1*mu1 + 64.0*mu1*mu2 + 62.0*mu2*mu2
1335  + (96.0*mu4 + 18.0*mu5 + 58.0*mu6)*(mu1 + mu2)
1336  + 54.0*mu4*mu4 + 36.0*mu4*mu5 + 132.0*mu4*mu6 + 18.0*mu5*mu5
1337  + 18.0*mu5*mu6 + 29.0*mu6*mu6)/18.0)/(16.0*pi*pi);
1338  //beta_mu4
1339  double betamu4 = (nu2*nu2 - (nu4*nu4 - 4.0*nu4*nu5 + nu5*nu5)/3.0 + 10.0*mu4*mu4 /*mu4??*/
1340  + mu5*(mu1 + mu2 + mu6)
1341  + mu4*(4.0*(4.0*mu1 + 4.0*mu2 + mu6)/3.0 + 2.0*mu5 + 6.0*mu4)
1342  + 4.0*mu5*mu5
1343  + (mu1*mu1 + mu2*mu2 - 4.0*mu6*(mu1+mu2) - 2.0*mu6*mu6)/9.0
1344  + 26.0/9.0*mu1*mu2)/(16.0*pi*pi);
1345  //beta_mu5
1346  double betamu5 = (4.0*nu3*nu3 - (nu4*nu4 - 4.0*nu4*nu5 + nu5*nu5)/3.0
1347  + mu5*((mu1 + mu2 + 19.0*mu6)/3.0 + 8.0*mu4 + 6.0*mu3)
1348  + 2.0*mu4*mu6 + 8.0*mu5*mu5
1349  + (mu1*mu1 + mu2*mu2 - 4.0*mu6*(mu1+mu2) + 7.0*mu6*mu6)/9.0
1350  - 10.0/9.0*mu1*mu2)/(16.0*pi*pi);
1351  //beta_mu6
1352  double betamu6 = (0.5*mu6*mu6 + 3.0*nu4*nu4 + 3.0*nu5*nu5
1353  - 2.0*(mu1*mu1 + mu2*mu2) + 6.0*mu5*(mu1 + mu2)
1354  + 7.0*mu6*(mu1 + mu2 + mu3))/(16.0*pi*pi);
1355 
1356 
1357  double betamuA = 4.0*betamu1+4.0*betamu2+8.5*betamu3+5.0*betamu4+1.5*betamu5+2.5*betamu6;
1358  double betamuB = (4.0*betamu1+4.0*betamu2+1.5*betamu3+12.0*betamu4+1.5*betamu5-0.5*betamu6)/3.0;
1359  double betamuC = (-0.5*betamu1-0.5*betamu2+1.5*betamu3+1.5*betamu4+12.0*betamu5+4.0*betamu6)/3.0;
1360  double betaMA1 = 3.0*betalambda1 + betamuA
1361  - sqrt(9.0*betalambda1*betalambda1-6.0*betalambda1*betamuA+betamuA*betamuA
1362  +32.0*betanu1*betanu1+32.0*betanu1*betanu2+8.0*betanu2*betanu2);
1363  double betaMA2 = 3.0*betalambda1 + betamuA
1364  + sqrt(9.0*betalambda1*betalambda1-6.0*betalambda1*betamuA+betamuA*betamuA
1365  +32.0*betanu1*betanu1+32.0*betanu1*betanu2+8.0*betanu2*betanu2);
1366  double betaMB1 = betalambda1 + betamuB - sqrt(betalambda1*betalambda1-2.0*betalambda1*betamuB+betamuB*betamuB+8.0*betanu2*betanu2);
1367  double betaMB2 = betalambda1 + betamuB + sqrt(betalambda1*betalambda1-2.0*betalambda1*betamuB+betamuB*betamuB+8.0*betanu2*betanu2);
1368  double betaMC1 = betalambda1 + betamuC - sqrt(betalambda1*betalambda1-2.0*betalambda1*betamuC+betamuC*betamuC+32.0*betanu3*betanu3);
1369  double betaMC2 = betalambda1 + betamuC + sqrt(betalambda1*betalambda1-2.0*betalambda1*betamuC+betamuC*betamuC+32.0*betanu3*betanu3);
1370 
1371  betaeigenvalues.assign(0, -1.5 * betaMA1/(32.0*pi));
1372  betaeigenvalues.assign(1, -1.5 * betaMA2/(32.0*pi));
1373  betaeigenvalues.assign(2, -1.5 * betaMB1/(32.0*pi));
1374  betaeigenvalues.assign(3, -1.5 * betaMB2/(32.0*pi));
1375  betaeigenvalues.assign(4, -1.5 * betaMC1/(32.0*pi));
1376  betaeigenvalues.assign(5, -1.5 * betaMC2/(32.0*pi));
1377  betaeigenvalues.assign(6, -1.5 * betalambda1/(16.0*pi));
1378  betaeigenvalues.assign(7, -1.5 * sqrt(15.0)*(betanu4+betanu5)/(64.0*pi));
1379 
1380 
1381  for (int i=0; i < 8; i++) {
1383  }
1384 
1385  }//End of the ManoharWise case
1386  if( THDMWmodel == "custodialMW")
1387  {
1388  double pi=M_PI;
1389  gslpp::matrix<gslpp::complex> Smatrix1(2,2,0.), Smatrix2(2,2,0.);
1390  gslpp::matrix<gslpp::complex> Seigenvectors1(2,2,0.), Seigenvectors2(2,2,0.);
1391  gslpp::vector<double> Seigenvalues1(2,0.), Seigenvalues2(2,0.);
1392 
1393  /*
1394  ******* LO part *************
1395  */
1396 
1397  // Definition of the blocks of the S-matrix, taken from 1303.4848
1398  Smatrix1.assign(0,0, 3.0*lambda1/(16.0*pi));
1399  Smatrix1.assign(0,1, (2.0*nu1+nu2)/(8.0*sqrt(2.0)*pi));
1400  Smatrix1.assign(1,0, Smatrix1(0,1));
1401  Smatrix1.assign(1,1, (26.0*mu1+17.0*mu3+13.0*mu4)/(32.0*pi));
1402 
1403  Smatrix2.assign(0,0, lambda1/(16.0*pi));
1404  Smatrix2.assign(0,1, nu2/(8.0*sqrt(2.0)*pi));
1405  Smatrix2.assign(1,0, Smatrix2(0,1));
1406  Smatrix2.assign(1,1, (14.0*mu1+3.0*mu3+27.0*mu4)/(96.0*pi));
1407 
1408  Smatrix1.eigensystem(Seigenvectors1, Seigenvalues1);
1409  Smatrix2.eigensystem(Seigenvectors2, Seigenvalues2);
1410 
1411  for (int i=0; i < 2; i++) {
1412  unitarityeigenvalues.assign(i, Seigenvalues1(i));
1413  unitarityeigenvalues.assign(2+i, Seigenvalues2(i));
1414  }
1415  unitarityeigenvalues.assign(4, sqrt(15.0)*nu4/(16.0*pi)); //non-custodial limit from 1606.01298
1416  }//End of the custodialMW case
1417 }
1418 
1419 // Direct Searches
1420 
1421 
1422 
1423 gslpp::matrix<double> THDMWcache::readTable(std::string filename, int rowN, int colN){
1424 
1425  std::ifstream INfile;
1426  std::string lineTab;
1427  INfile.open( filename.c_str() );
1428  if(INfile.fail()){
1429  std::cout<<"error: in THDMWcache, table doesn't exist!"<< filename <<std::endl;
1430  }
1431 
1432  gslpp::matrix<double> arrayTab(rowN, colN, 0.);
1433  int a =0;
1434  int b=0;
1435  double v;
1436 
1437  while(INfile.good()){
1438  while(getline(INfile, lineTab)){
1439  if( lineTab[0]=='#' )continue;
1440  else{
1441  std::istringstream streamTab(lineTab);
1442  b=0;
1443  while(streamTab >>v){
1444  arrayTab.assign(a,b,v);
1445  b++;
1446  }
1447  a++;
1448  }
1449  }
1450  }
1451 
1452  INfile.close();
1453 
1454  return arrayTab;
1455 }
1456 
1457 //1D interpolation
1458 
1460 
1461  int rowN=arrayTab.size_i();
1462 
1463  double xmin = arrayTab(0,0);
1464  double xmax = arrayTab(rowN-1,0);
1465  double interval = arrayTab(1,0)-arrayTab(0,0);
1466  int Nintervals = (x-xmin)/interval;
1467  double y = 0.0;
1468 
1469  if(x<xmin){
1470 // std::cout<<"warning: your table parameter value is smaller than the minimum allowed value"<<std::endl;
1471  return 0.;
1472  }
1473  else if(x>xmax){
1474 // std::cout<<"warning: your table parameter value is greater than the maximum allowed value"<<std::endl;
1475  return 0.;
1476  }
1477  else{
1478  y =(arrayTab(Nintervals+1,1)-arrayTab(Nintervals,1))/(arrayTab(Nintervals+1,0)
1479  -arrayTab(Nintervals,0))*(x-arrayTab(Nintervals,0))+arrayTab(Nintervals,1);
1480  return y;
1481  }
1482 }
1483 
1484 
1485 //3D interpolation
1486 
1487 double THDMWcache::interpolate3D(gslpp::matrix<double> arrayTab, double x, double y, double z){
1488 
1489  int rowN=arrayTab.size_i();
1490  double xmin = arrayTab(0,0);
1491  double xmax = arrayTab(rowN-1,0);
1492  double ymin = arrayTab(0,1);
1493  double ymax = arrayTab(rowN-1,1);
1494  double zmin = arrayTab(0,2);
1495  double zmax = arrayTab(rowN-1,2);
1496  double intervalx = arrayTab(1,0)-arrayTab(0,0);
1497  int iy=1;
1498  do iy++;
1499  while(arrayTab(iy,1)-arrayTab(iy-1,1)==0&&iy<6000000);
1500  double intervaly = arrayTab(iy,1)-arrayTab(iy-1,1);
1501  int iz=1;
1502  do iz++;
1503  while(arrayTab(iz,2)-arrayTab(iz-1,2)==0&&iz<6000000);
1504  double intervalz = arrayTab(iz,2)-arrayTab(iz-1,2);
1505  int Nintervalsx = (x-xmin)/intervalx;
1506  int Nintervalsy = (y-ymin)/intervaly;
1507  int Nintervalsz = (z-zmin)/intervalz;
1508  int MaxNintervalx = round((xmax-xmin)/intervalx);
1509  int MaxNintervaly = round((ymax-ymin)/intervaly);
1510  int MaxNintervalz = round((zmax-zmin)/intervalz);
1511  //std::cout<<"MaxNintervalx="<<MaxNintervalx<<std::endl;
1512  //std::cout<<"MaxNintervaly="<<MaxNintervaly<<std::endl;
1513  //std::cout<<"MaxNintervalz="<<MaxNintervalz<<std::endl;
1514  //std::cout<<"imax="<<iz*Nintervalsz+iy*Nintervalsy+Nintervalsx<<std::endl;
1515  //std::cout<<"imax+1="<<(iz)*(Nintervalsz+1)+(iy)*(Nintervalsy+1)+Nintervalsx+1<<std::endl;
1516  //std::cout<<"Nintervalx="<<Nintervalsx<<std::endl;
1517  //std::cout<<"Nintervaly="<<Nintervalsy<<std::endl;
1518  //std::cout<<"Nintervalz="<<Nintervalsz<<std::endl;
1519  if(x<xmin||Nintervalsx>MaxNintervalx||y<ymin||Nintervalsy>MaxNintervaly||z<zmin||Nintervalsz>MaxNintervalz){
1520  //std::cout<<"warning: the parameter point lies outside the table"<<std::endl;
1521  //std::cout<<"x="<<x<<std::endl;
1522  //std::cout<<"y="<<y<<std::endl;
1523  //std::cout<<"z="<<z<<std::endl;
1524  return 0.;
1525  }
1526  else{
1527 
1528  double x1=arrayTab(iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,0);
1529  double x2=arrayTab(iz*(Nintervalsz)+iy*(Nintervalsy)+Nintervalsx+1,0);
1530  double y1=arrayTab(iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,1);
1531  double y2=arrayTab(iz*(Nintervalsz)+iy*(Nintervalsy+1)+Nintervalsx,1);
1532  double z1=arrayTab(iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,2);
1533  double z2=arrayTab(iz*(Nintervalsz+1)+iy*(Nintervalsy)+Nintervalsx,2);
1534 
1535  return (arrayTab(iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,3) * (x2-x) * (y2-y) * (z2-z)
1536  +arrayTab(iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,3) * (x-x1) * (y2-y) * (z2-z)
1537  +arrayTab(iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,3) * (x2-x) * (y-y1) * (z2-z)
1538  +arrayTab(iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,3) * (x2-x) * (y2-y) * (z-z1)
1539  +arrayTab(iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,3) * (x-x1) * (y-y1) * (z2-z)
1540  +arrayTab(iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,3) * (x-x1) * (y2-y) * (z-z1)
1541  +arrayTab(iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,3) * (x2-x) * (y-y1) * (z-z1)
1542  +arrayTab(iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,3) * (x-x1) * (y-y1) * (z-z1))/((x2-x1)*(y2-y1)*(z2-z1));
1543 
1544  }
1545 }
1546 
1547 
1548 
1549 //4D interpolation
1550 
1551 double THDMWcache::interpolate4D(gslpp::matrix<double> arrayTab, double x, double y, double z, double v){
1552 
1553  int rowN=arrayTab.size_i();
1554 
1555  double xmin = arrayTab(0,0);
1556  double xmax = arrayTab(rowN-1,0);
1557  double ymin = arrayTab(0,1);
1558  double ymax = arrayTab(rowN-1,1);
1559  double zmin = arrayTab(0,2);
1560  double zmax = arrayTab(rowN-1,2);
1561  double vmin = arrayTab(0,3);
1562  double vmax = arrayTab(rowN-1,3);
1563  double intervalx = arrayTab(1,0)-arrayTab(0,0);
1564  int iy=1;
1565  do iy++;
1566  while(arrayTab(iy,1)-arrayTab(iy-1,1)==0&&iy<6000000);
1567  double intervaly = arrayTab(iy,1)-arrayTab(iy-1,1);
1568  int iz=1;
1569  do iz++;
1570  while(arrayTab(iz,2)-arrayTab(iz-1,2)==0&&iz<6000000);
1571  double intervalz = arrayTab(iz,2)-arrayTab(iz-1,2);
1572  int iv=1;
1573  do iv++;
1574  while(arrayTab(iv,3)-arrayTab(iv-1,3)==0&&iv<6000000);
1575  double intervalv = arrayTab(iv,3)-arrayTab(iv-1,3);
1576  int Nintervalsx = (x-xmin)/intervalx;
1577  int Nintervalsy = (y-ymin)/intervaly;
1578  int Nintervalsz = (z-zmin)/intervalz;
1579  int Nintervalsv = (v-vmin)/intervalv;
1580  int MaxNintervalx = round((xmax-xmin)/intervalx);
1581  int MaxNintervaly = round((ymax-ymin)/intervaly);
1582  int MaxNintervalz = round((zmax-zmin)/intervalz);
1583  int MaxNintervalv = round((vmax-vmin)/intervalv);
1584  //std::cout<<"xmin="<<xmin<<std::endl;
1585  //std::cout<<"xmax="<<xmax<<std::endl;
1586  //std::cout<<"ymin="<<ymin<<std::endl;
1587  //std::cout<<"ymax="<<ymax<<std::endl;
1588  //std::cout<<"zmin="<<zmin<<std::endl;
1589  //std::cout<<"zmax="<<zmax<<std::endl;
1590  //std::cout<<"vmin="<<vmin<<std::endl;
1591  //std::cout<<"vmax="<<vmax<<std::endl;
1592  //std::cout<<"intervalx="<<intervalx<<std::endl;
1593  //std::cout<<"intervaly="<<intervaly<<std::endl;
1594  //std::cout<<"intervalz="<<intervalz<<std::endl;
1595  //std::cout<<"intervalv="<<intervalv<<std::endl;
1596  //std::cout<<"Nintervalsx="<<Nintervalsx<<std::endl;
1597  //std::cout<<"Nintervalsy="<<Nintervalsy<<std::endl;
1598  //std::cout<<"Nintervalsz="<<Nintervalsz<<std::endl;
1599  //std::cout<<"Nintervalsv="<<Nintervalsv<<std::endl;
1600 
1601  if(x<xmin||Nintervalsx>MaxNintervalx||y<ymin||Nintervalsy>MaxNintervaly||z<zmin||Nintervalsz>MaxNintervalz||v<vmin||Nintervalsv>MaxNintervalv){
1602  //std::cout<<"warning: the parameter point lies outside the table"<<std::endl;
1603  //std::cout<<"x="<<x<<std::endl;
1604  //std::cout<<"y="<<y<<std::endl;
1605  //std::cout<<"z="<<z<<std::endl;
1606  //std::cout<<"v="<<v<<std::endl;
1607  return 0.;
1608  }
1609  else{
1610  double x1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,0);
1611  double x2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz)+iy*(Nintervalsy)+Nintervalsx+1,0);
1612  double y1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,1);
1613  double y2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz)+iy*(Nintervalsy+1)+Nintervalsx,1);
1614  double z1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,2);
1615  double z2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz+1)+iy*(Nintervalsy)+Nintervalsx,2);
1616  double v1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,3);
1617  double v2=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz)+iy*(Nintervalsy)+Nintervalsx,3);
1618  //std::cout<<"Nmax="<<iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1<<std::endl;
1619  //std::cout<<"x1="<<x1<<std::endl;
1620  //std::cout<<"x2="<<x2<<std::endl;
1621  //std::cout<<"y1="<<y1<<std::endl;
1622  //std::cout<<"y2="<<y2<<std::endl;
1623  //std::cout<<"z1="<<z1<<std::endl;
1624  //std::cout<<"z2="<<z2<<std::endl;
1625  //std::cout<<"v1="<<v1<<std::endl;
1626  //std::cout<<"v2="<<v2<<std::endl;
1627  /*std::cout<<"Interpolation= "<<(arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z2-z) * (v2-v)
1628  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z2-z) * (v2-v)
1629  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z2-z) * (v2-v)
1630  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z-z1) * (v2-v)
1631  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z2-z) * (v-v1)
1632  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z2-z) * (v2-v)
1633  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z-z1) * (v2-v)
1634  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z2-z) * (v-v1)
1635  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z-z1) * (v2-v)
1636  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z2-z) * (v-v1)
1637  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z-z1) * (v-v1)
1638  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z-z1) * (v2-v)
1639  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z2-z) * (v-v1)
1640  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z-z1) * (v-v1)
1641  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z-z1) * (v-v1)
1642  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z-z1) * (v-v1))/((x2-x1)*(y2-y1)*(z2-z1)*(v2-v1))<<std::endl;*/
1643  return (arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z2-z) * (v2-v)
1644  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z2-z) * (v2-v)
1645  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z2-z) * (v2-v)
1646  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z-z1) * (v2-v)
1647  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z2-z) * (v-v1)
1648  +arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z2-z) * (v2-v)
1649  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z-z1) * (v2-v)
1650  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z2-z) * (v-v1)
1651  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z-z1) * (v2-v)
1652  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z2-z) * (v-v1)
1653  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4) * (x2-x) * (y2-y) * (z-z1) * (v-v1)
1654  +arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z-z1) * (v2-v)
1655  +arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z2-z) * (v-v1)
1656  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4) * (x-x1) * (y2-y) * (z-z1) * (v-v1)
1657  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4) * (x2-x) * (y-y1) * (z-z1) * (v-v1)
1658  +arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4) * (x-x1) * (y-y1) * (z-z1) * (v-v1))/((x2-x1)*(y2-y1)*(z2-z1)*(v2-v1));
1659  }
1660 }
1661 
1662 /*
1663 //4D log interpolation
1664 
1665 double THDMWcache::loginterpolate4D(gslpp::matrix<double> arrayTab, double x, double y, double z, double v){
1666 
1667  int rowN=arrayTab.size_i();
1668 
1669  double xmin = arrayTab(0,0);
1670  double xmax = arrayTab(rowN-1,0);
1671  double ymin = arrayTab(0,1);
1672  double ymax = arrayTab(rowN-1,1);
1673  double zmin = arrayTab(0,2);
1674  double zmax = arrayTab(rowN-1,2);
1675  double vmin = arrayTab(0,3);
1676  double vmax = arrayTab(rowN-1,3);
1677  double intervalx = arrayTab(1,0)-arrayTab(0,0);
1678  int iy=1;
1679  do iy++;
1680  while(arrayTab(iy,1)-arrayTab(iy-1,1)==0&&iy<6000000);
1681  double intervaly = arrayTab(iy,1)-arrayTab(iy-1,1);
1682  int iz=1;
1683  do iz++;
1684  while(arrayTab(iz,2)-arrayTab(iz-1,2)==0&&iz<6000000);
1685  double intervalz = arrayTab(iz,2)-arrayTab(iz-1,2);
1686  int iv=1;
1687  do iv++;
1688  while(arrayTab(iv,3)-arrayTab(iv-1,3)==0&&iv<6000000);
1689  double intervalv = arrayTab(iv,3)-arrayTab(iv-1,3);
1690  int Nintervalsx = (x-xmin)/intervalx;
1691  int Nintervalsy = (y-ymin)/intervaly;
1692  int Nintervalsz = (z-zmin)/intervalz;
1693  int Nintervalsv = (v-vmin)/intervalv;
1694 
1695  if(x<xmin||x>xmax||y<ymin||y>ymax||z<zmin||z>zmax||v<vmin||v>vmax){
1696  std::cout<<"warning: the parameter point lies outside the table"<<std::endl;
1697  return 0.;
1698  }
1699  else{
1700  double x1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,0);
1701  double x2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz)+iy*(Nintervalsy)+Nintervalsx+1,0);
1702  double y1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,1);
1703  double y2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz)+iy*(Nintervalsy+1)+Nintervalsx,1);
1704  double z1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,2);
1705  double z2=arrayTab(iv*(Nintervalsv)+iz*(Nintervalsz+1)+iy*(Nintervalsy)+Nintervalsx,2);
1706  double v1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,3);
1707  double v2=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz)+iy*(Nintervalsy)+Nintervalsx,3);
1708  double N1=1e-15;
1709  double N2=1e-15;
1710  double N3=1e-15;
1711  double N4=1e-15;
1712  double N5=1e-15;
1713  double N6=1e-15;
1714  double N7=1e-15;
1715  double N8=1e-15;
1716  double N9=1e-15;
1717  double N10=1e-15;
1718  double N11=1e-15;
1719  double N12=1e-15;
1720  double N13=1e-15;
1721  double N14=1e-15;
1722  double N15=1e-15;
1723  double N16=1e-15;
1724 
1725  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4),2))>1e-15) N1=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4);
1726  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4),2)>1e-15) N2=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4);
1727  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4),2))>1e-15) N3=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4);
1728  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4),2))>1e-15) N4=arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4);
1729  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4),2))>1e-15) N5=arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx,4);
1730  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4),2))>1e-15) N6=arrayTab(iv*Nintervalsv+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4);
1731  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4),2))>1e-15) N7=arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4);
1732  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4),2))>1e-15) N8=arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*Nintervalsy+Nintervalsx+1,4);
1733  if(sqrt(pow(arrayTab(iv*Nintervalsv+1+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4),2))>1e-15) N9=arrayTab(iv*Nintervalsv+1+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4);
1734  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4),2))>1e-15) N10=arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx,4);
1735  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4),2))>1e-15) N11=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx,4);
1736  if(sqrt(pow(arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4),2))>1e-15) N12=arrayTab(iv*Nintervalsv+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4);
1737  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4),2))>1e-15) N13=arrayTab(iv*(Nintervalsv+1)+iz*Nintervalsz+iy*(Nintervalsy+1)+Nintervalsx+1,4);
1738  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4),2))>1e-15) N14=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*Nintervalsy+Nintervalsx+1,4);
1739  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4),2))>1e-15) N15=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx,4);
1740  if(sqrt(pow(arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4),2))>1e-15) N16=arrayTab(iv*(Nintervalsv+1)+iz*(Nintervalsz+1)+iy*(Nintervalsy+1)+Nintervalsx+1,4);
1741 
1742 
1743 
1744 
1745  return (log10(N1) * (x2-x) * (y2-y) * (z2-z) * (v2-v)
1746  +log10(N2) * (x-x1) * (y2-y) * (z2-z) * (v2-v)
1747  +log10(N3) * (x2-x) * (y-y1) * (z2-z) * (v2-v)
1748  +log10(N4) * (x2-x) * (y2-y) * (z-z1) * (v2-v)
1749  +log10(N5) * (x2-x) * (y2-y) * (z2-z) * (v-v1)
1750  +log10(N6) * (x-x1) * (y-y1) * (z2-z) * (v2-v)
1751  +log10(N7) * (x-x1) * (y2-y) * (z-z1) * (v2-v)
1752  +log10(N8) * (x-x1) * (y2-y) * (z2-z) * (v-v1)
1753  +log10(N9) * (x2-x) * (y-y1) * (z-z1) * (v2-v)
1754  +log10(N10) * (x2-x) * (y-y1) * (z2-z) * (v-v1)
1755  +log10(N11) * (x2-x) * (y2-y) * (z-z1) * (v-v1)
1756  +log10(N12) * (x-x1) * (y-y1) * (z-z1) * (v2-v)
1757  +log10(N13) * (x-x1) * (y-y1) * (z2-z) * (v-v1)
1758  +log10(N14) * (x-x1) * (y2-y) * (z-z1) * (v-v1)
1759  +log10(N15) * (x2-x) * (y-y1) * (z-z1) * (v-v1)
1760  +log10(N16) * (x-x1) * (y-y1) * (z-z1) * (v-v1))/((x2-x1)*(y2-y1)*(z2-z1)*(v2-v1));
1761  }
1762 }
1763 */
1764 
1765 /*
1766 double THDMWcache::ip_cs_ppto2Sto4t_13(double etaD, double etaU, double THDMW_nu4, double mSR){
1767  int NumPar = 4;
1768  double params[] = {etaD, etaU, THDMW_nu4, mSR};
1769 
1770  int i = CacheCheck(ip_cs_ppto2Sto4t_13_cache, NumPar, params);
1771  if (i>=0) {
1772  return ( ip_cs_ppto2Sto4t_13_cache[NumPar][i] );
1773  } else {
1774  double newResult = 0.0;
1775  if (mSR>=500. && mSR <=1500.) {
1776  newResult = interpolate4D(log_cs_ggHp_8, etaD, etaU, THDMW_nu4, mSR);
1777  }
1778  CacheShift(ip_cs_ppto2Sto4t_13_cache, NumPar, params, newResult);
1779  return newResult;
1780  }
1781 }*/
1782 
1783 
1784 
1785 //double THDMWcache::ip_cs_ppto2Sto4t_13(double THDMW_nu1, double THDMW_nu2, double THDMW_nu4, double THDMW_mS2){
1786 // int NumPar = 4;
1787 // double params[] = {THDMW_nu1, THDMW_nu2, THDMW_nu4, THDMW_mS2};
1788 
1793 // double newResult = 0.0;
1794 // if (THDMW_mS2>=250000. && THDMW_mS2 <=1000000.) {
1795 // newResult = interpolate4D(log_cs_ggH_13, THDMW_nu1, THDMW_nu2, THDMW_nu4, sqrt(THDMW_mS2));
1796 // }
1798 // return newResult;
1799 // }
1800 
1802 
1803 
1804 
1805  std::stringstream ex0,ex1,ex2,ex3;
1806  std::stringstream ex1e,ex2e,ex3e;
1807 // std::stringstream ex14ep2,ex14em2;
1808  std::stringstream ex4,ex5,ex6,ex7,ex8;
1809  std::stringstream ex4e,ex5e,ex6e,ex7e,ex8e;
1810  std::stringstream ex9,ex10,ex13;
1811  std::stringstream ex9e,ex10e,ex13e;
1812  std::stringstream ex14, ex15,ex16,ex17,ex18,ex19;
1813  std::stringstream th1,th2,th3,th4,th5,th6,th7,th8,th9,th10,th11,th12,th13,th14;
1814 
1815  std::stringstream bsg1;
1816 
1817  std::cout<<"reading tables"<<std::endl;
1818 
1819 // std::cout << "HEPFITTABS = " << getenv("HEPFITPATH") << std::endl;
1820  std::stringstream path;
1821  path << getenv("HEPFITTABS") << "/THDM/tabs/";
1822 // path << "/Users/victormirallesaznar/tabs/";
1823 // std::cout << path.str() << std::endl;
1824  std::string tablepath=path.str();
1825 // std::cout << tablepath << std::endl;
1826 
1827 
1828 
1830 // std::cout<<"br_tt="<<br_tt<<std::endl;
1831 // double brtt1[4][2];
1832 // brtt1[0][1]=1;
1833 // gslpp::matrix<double> brtt1(19861,2,0.);
1834 // std::stringstream br1x;
1835 // br1x << "log_cs_ggH_13.h";
1836 // //brtt1(2)=(3.,4.);
1837 // brtt1=readTable(br1x.str(),20,2);
1838 // std::cout<<"brtt1="<<bla1<<std::endl;
1839 
1840 
1841 
1842  ex0 << tablepath << "150304114.dat";//Dummy will be deleted by Scientific Linux
1843  Dummy = readTable(ex0.str(),167,2);
1844  ex1 << tablepath << "150304114.dat";
1845  CMS8_pp_H_hh_bbbb = readTable(ex1.str(),167,2);
1846  ex1e << tablepath << "150304114_e.dat";
1847  CMS8_pp_H_hh_bbbb_e = readTable(ex1e.str(),167,2);
1848  ex2 << tablepath << "150608329.dat";
1849  CMS8_bb_phi_bb = readTable(ex2.str(),81,2);
1850  ex2e << tablepath << "150608329_e.dat";
1851  CMS8_bb_phi_bb_e = readTable(ex2e.str(),81,2);
1852  ex3 << tablepath << "150507018.dat";
1853  ATLAS8_gg_phi_tt = readTable(ex3.str(),53,2);
1854  ex3e << tablepath << "150507018_e.dat";
1855  ATLAS8_gg_phi_tt_e = readTable(ex3e.str(),53,2);
1856 
1857 // ex14ep1 << tablepath << "150602301_ep1.dat";
1858 // CMS_ggF_phi_gaga_ep1 = readTable(ex14ep1.str(),141,2);
1859  //CHANGE THIS DEFINITION!
1860 // ex14ep2 << tablepath << "150602301_e.dat";
1861 // CMS_ggF_phi_gaga_ep2 = readTable(ex14ep2.str(),141,2);
1862 // ex14em1 << tablepath << "150602301_em1.dat";
1863 // CMS_ggF_phi_gaga_em1 = readTable(ex14em1.str(),141,2);
1864  //CHANGE THIS DEFINITION!
1865 // ex14em2 << tablepath << "150602301_e.dat";
1866 // CMS_ggF_phi_gaga_em2 = readTable(ex14em2.str(),141,2);
1867 
1868 
1869 
1870  ex4 << tablepath << "ATLAS-CONF-2016-104_b.dat";
1871  ATLAS13_bb_phi_tt = readTable(ex4.str(),61,2);
1872  ex4e << tablepath << "ATLAS-CONF-2016-104_b_e.dat";
1873  ATLAS13_bb_phi_tt_e = readTable(ex4e.str(),61,2);
1874  ex5 << tablepath << "180711883.dat";
1875  ATLAS13_tt_phi_tt = readTable(ex5.str(),61,2);
1876  ex5e << tablepath << "ATLAS-CONF-2016-104_a_e.dat";
1877  ATLAS13_tt_phi_tt_e = readTable(ex5e.str(),61,2);
1878  ex6 << tablepath << "ATLAS-CONF-2016-049.dat";
1879  ATLAS13_pp_H_hh_bbbb = readTable(ex6.str(),271,2);
1880  ex6e << tablepath << "ATLAS-CONF-2016-049_e.dat";
1881  ATLAS13_pp_H_hh_bbbb_e = readTable(ex6e.str(),271,2);
1882  ex7 << tablepath << "CMS-PAS-HIG-16-025.dat";
1883  CMS13_pp_phi_bb = readTable(ex7.str(),66,2);
1884  ex7e << tablepath << "CMS-PAS-HIG-16-025_e.dat";
1885  CMS13_pp_phi_bb_e = readTable(ex7e.str(),66,2);
1886  ex8 << tablepath << "180603548.dat";
1887  CMS13_pp_H_hh_bbbb = readTable(ex8.str(),95,2);
1888  ex8e << tablepath << "180603548_e.dat";
1889  CMS13_pp_H_hh_bbbb_e = readTable(ex8e.str(),95,2);
1890 
1891 
1892 
1893  ex9 << tablepath << "151203704.dat";
1894  ATLAS8_pp_Hpm_tb = readTable(ex9.str(),41,2);
1895  ex9e << tablepath << "151203704_e.dat";
1896  ATLAS8_pp_Hpm_tb_e = readTable(ex9e.str(),41,2);
1897  ex10 << tablepath << "150807774_b.dat";
1898  CMS8_pp_Hp_tb = readTable(ex10.str(),43,2);
1899  ex10e << tablepath << "150807774_b_e.dat";
1900  CMS8_pp_Hp_tb_e = readTable(ex10e.str(),43,2);
1901  ex17 << tablepath << "180803599.dat";
1902  ATLAS13_pp_Hp_tb = readTable(ex17.str(),181,2);
1903  ex18 << tablepath << "180512191.dat";
1904  CMS13_bb_H_bb = readTable(ex18.str(),101,2);
1905 // ex11 << tablepath << "ATLAS-CONF-2016-089.dat";
1906 // ATLAS13_pp_Hp_tb1 = readTable(ex11.str(),71,2);
1907 // ex11e << tablepath << "ATLAS-CONF-2016-089_e.dat";
1908 // ATLAS13_pp_Hp_tb1_e = readTable(ex11e.str(),71,2);
1909 // ex12 << tablepath << "ATLAS-CONF-2016-104_c.dat";
1910 // ATLAS13_pp_Hp_tb2 = readTable(ex12.str(),181,2);
1911 // ex12e << tablepath << "ATLAS-CONF-2016-104_c_e.dat";
1912 // ATLAS13_pp_Hp_tb2_e = readTable(ex12e.str(),181,2);
1913  ex13 << tablepath << "171004960.dat";
1914  CMS13_ggF_H_hh_bbbb = readTable(ex13.str(),226,2);
1915  ex13e << tablepath << "171004960_e.dat";
1916  CMS13_ggF_H_hh_bbbb_e = readTable(ex13e.str(),226,2);
1917  ex14 << tablepath << "180410823_b.dat";
1918  ATLAS13_pp_Gkk_tt = readTable(ex14.str(),131,2);
1919  ex15 << tablepath << "CMS-CR-2018-204.dat";
1920  CMS13_pp_R_gg = readTable(ex15.str(),241,2);
1921  ex16 << tablepath << "171007171.dat";
1922  ATLAS13_pp_SS_jjjj = readTable(ex16.str(),126,2);
1923 
1924  ex19 << tablepath << "180206149.dat";
1925  CMS8_pp_phi_bb = readTable(ex19.str(),88,2);
1926 
1927  th1 << tablepath << "Generated_data_S2t_Fixed_Steps.dat";
1928  MadGraph_pp_Sr_tt = readTable(th1.str(),22800,5);
1929 
1930  th2 << tablepath << "Generated_data_Stt_tttt_Fixed_Steps.dat";
1931  MadGraph_pp_Srtt_tttt = readTable(th2.str(),22800,5);
1932 
1933  th3 << tablepath << "Generated_data_S_jj_Fixed_Steps.dat";
1934  MadGraph_pp_Sr_jj = readTable(th3.str(),2940,5);
1935 
1936  th4 << tablepath << "Generated_data_SS_jjjj_Fixed_Steps.dat";
1937  MadGraph_pp_SrSr_jjjj = readTable(th4.str(),4200,5);
1938 
1939  th5 << tablepath << "Generated_data_Stb_tbtb_Fixed_Steps.dat";
1940  MadGraph_pp_Stb_tbtb = readTable(th5.str(),4332,4);
1941 
1942  th6 << tablepath << "Generated_data_Soddtt_tttt_Fixed_Steps.dat";
1943  MadGraph_pp_Sitt_tttt = readTable(th6.str(),9360,4);
1944 
1945  th7 << tablepath << "Generated_data_Srbb_bbbb_Fixed_Steps.dat";
1946  MadGraph_pp_Srbb_bbbb = readTable(th7.str(),15960,5);
1947 
1948  th8 << tablepath << "Generated_data_Sibb_bbbb_Fixed_Steps.dat";
1949  MadGraph_pp_Sibb_bbbb = readTable(th8.str(),8892,4);
1950 
1951  th9 << tablepath << "Generated_data_Sr_bb_Fixed_Steps.dat";
1952  MadGraph_pp_Sr_bb = readTable(th9.str(),15960,5);
1953 
1954  th10 << tablepath << "Generated_data_Sr_bb_8TeV_Fixed_Steps.dat";
1955  MadGraph_pp_Sr_bb_8TeV = readTable(th10.str(),15960,5);
1956 
1957  th11 << tablepath << "Generated_data_Si_bb_Fixed_Steps.dat";
1958  MadGraph_pp_Si_bb = readTable(th11.str(),8892,4);
1959 
1960  th12 << tablepath << "Generated_data_Si_bb_8TeV_Fixed_Steps.dat";
1961  MadGraph_pp_Si_bb_8TeV = readTable(th12.str(),8892,4);
1962 
1963  th13 << tablepath << "Generated_data_Srbb_bbbb_8TeV_Fixed_Steps.dat";
1964  MadGraph_pp_Srbb_bbbb_8TeV = readTable(th13.str(),15960,5);
1965 
1966  th14 << tablepath << "Generated_data_Sibb_bbbb_8TeV_Fixed_Steps.dat";
1967  MadGraph_pp_Sibb_bbbb_8TeV = readTable(th14.str(),8892,4);
1968 
1969 
1970  bsg1 << tablepath << "bsgammatable.dat";
1971  arraybsgamma = readTable(bsg1.str(),1111,3);
1972 }
1973 
1975  int NumPar = 1;
1976  double params[] = {mass};
1977 
1978  int i = CacheCheckReal(ip_ex_pp_phi_hh_bbbb_CMS8_cache, NumPar, params);
1979  if (i>=0) {
1980  return ( ip_ex_pp_phi_hh_bbbb_CMS8_cache[NumPar][i] );
1981  } else {
1982  double newResult = interpolate(CMS8_pp_H_hh_bbbb,mass);
1983  CacheShiftReal(ip_ex_pp_phi_hh_bbbb_CMS8_cache, NumPar, params, newResult);
1984  return newResult;
1985  }
1986 }
1987 
1989  int NumPar = 1;
1990  double params[] = {mass};
1991 
1992  int i = CacheCheckReal(ip_ex_pp_phi_hh_bbbb_CMS8_cache_e, NumPar, params);
1993  if (i>=0) {
1994  return ( ip_ex_pp_phi_hh_bbbb_CMS8_cache_e[NumPar][i] );
1995  } else {
1996  double newResult = interpolate(CMS8_pp_H_hh_bbbb_e,mass);
1997  CacheShiftReal(ip_ex_pp_phi_hh_bbbb_CMS8_cache_e, NumPar, params, newResult);
1998  return newResult;
1999  }
2000 }
2001 
2003  int NumPar = 1;
2004  double params[] = {mass};
2005 
2006  int i = CacheCheckReal(ip_ex_bb_phi_bb_CMS8_cache, NumPar, params);
2007  if (i>=0) {
2008  return ( ip_ex_bb_phi_bb_CMS8_cache[NumPar][i] );
2009  } else {
2010  double newResult = interpolate (CMS8_bb_phi_bb,mass);
2011  CacheShiftReal(ip_ex_bb_phi_bb_CMS8_cache, NumPar, params, newResult);
2012  return newResult;
2013  }
2014 }
2015 
2016 
2017 
2019  int NumPar = 1;
2020  double params[] = {mass};
2021 
2022  int i = CacheCheckReal(ip_ex_bb_phi_bb_CMS8_cache_e, NumPar, params);
2023  if (i>=0) {
2024  return ( ip_ex_bb_phi_bb_CMS8_cache_e[NumPar][i] );
2025  } else {
2026  double newResult = interpolate (CMS8_bb_phi_bb_e,mass);
2027  CacheShiftReal(ip_ex_bb_phi_bb_CMS8_cache_e, NumPar, params, newResult);
2028  return newResult;
2029  }
2030 }
2031 
2033  int NumPar = 1;
2034  double params[] = {mass};
2035 
2036  int i = CacheCheckReal(ip_ex_gg_phi_tt_ATLAS8_cache, NumPar, params);
2037  if (i>=0) {
2038  return ( ip_ex_gg_phi_tt_ATLAS8_cache[NumPar][i] );
2039  } else {
2040  double newResult = interpolate (ATLAS8_gg_phi_tt,mass);
2041  CacheShiftReal(ip_ex_gg_phi_tt_ATLAS8_cache, NumPar, params, newResult);
2042  return newResult;
2043  }
2044 }
2045 
2046 
2047 
2049  int NumPar = 1;
2050  double params[] = {mass};
2051 
2052  int i = CacheCheckReal(ip_ex_gg_phi_tt_ATLAS8_cache_e, NumPar, params);
2053  if (i>=0) {
2054  return ( ip_ex_gg_phi_tt_ATLAS8_cache_e[NumPar][i] );
2055  } else {
2056  double newResult = interpolate (ATLAS8_gg_phi_tt_e,mass);
2057  CacheShiftReal(ip_ex_gg_phi_tt_ATLAS8_cache_e, NumPar, params, newResult);
2058  return newResult;
2059  }
2060 }
2061 
2063  int NumPar = 1;
2064  double params[] = {mass};
2065 
2066  int i = CacheCheckReal(ip_ex_bb_phi_tt_ATLAS13_cache, NumPar, params);
2067  if (i>=0) {
2068  return ( ip_ex_bb_phi_tt_ATLAS13_cache[NumPar][i] );
2069  } else {
2070  double newResult = interpolate (ATLAS13_bb_phi_tt,mass);
2071  CacheShiftReal(ip_ex_bb_phi_tt_ATLAS13_cache, NumPar, params, newResult);
2072  return newResult;
2073  }
2074 }
2075 
2076 
2077 
2079  int NumPar = 1;
2080  double params[] = {mass};
2081 
2082  int i = CacheCheckReal(ip_ex_bb_phi_tt_ATLAS13_cache_e, NumPar, params);
2083  if (i>=0) {
2084  return ( ip_ex_bb_phi_tt_ATLAS13_cache_e[NumPar][i] );
2085  } else {
2086  double newResult = interpolate (ATLAS13_bb_phi_tt_e,mass);
2087  CacheShiftReal(ip_ex_bb_phi_tt_ATLAS13_cache_e, NumPar, params, newResult);
2088  return newResult;
2089  }
2090 }
2091 
2092 
2093 
2095  int NumPar = 1;
2096  double params[] = {mass};
2097 
2098  int i = CacheCheckReal(ip_ex_tt_phi_tt_ATLAS13_cache, NumPar, params);
2099  if (i>=0) {
2100  return(ip_ex_tt_phi_tt_ATLAS13_cache[NumPar][i] );
2101  } else {
2102  double newResult = interpolate (ATLAS13_tt_phi_tt,mass);
2103  CacheShiftReal(ip_ex_tt_phi_tt_ATLAS13_cache, NumPar, params, newResult);
2104  return newResult;
2105  }
2106 }
2107 
2108 
2109 
2111  int NumPar = 1;
2112  double params[] = {mass};
2113 
2114  int i = CacheCheckReal(ip_ex_tt_phi_tt_ATLAS13_cache_e, NumPar, params);
2115  if (i>=0) {
2116  return(ip_ex_tt_phi_tt_ATLAS13_cache_e[NumPar][i] );
2117  } else {
2118  double newResult = interpolate (ATLAS13_tt_phi_tt_e,mass);
2119  CacheShiftReal(ip_ex_tt_phi_tt_ATLAS13_cache_e, NumPar, params, newResult);
2120  return newResult;
2121  }
2122 }
2123 
2125  int NumPar = 1;
2126  double params[] = {mass};
2127 
2128  int i = CacheCheckReal(ip_ex_pp_H_hh_bbbb_ATLAS13_cache, NumPar, params);
2129  if (i>=0) {
2130  return(ip_ex_pp_H_hh_bbbb_ATLAS13_cache[NumPar][i] );
2131  } else {
2132  double newResult = interpolate (ATLAS13_pp_H_hh_bbbb,mass);
2133  CacheShiftReal(ip_ex_pp_H_hh_bbbb_ATLAS13_cache, NumPar, params, newResult);
2134  return newResult;
2135  }
2136 }
2137 
2138 
2139 
2141  int NumPar = 1;
2142  double params[] = {mass};
2143 
2144  int i = CacheCheckReal(ip_ex_pp_H_hh_bbbb_ATLAS13_cache_e, NumPar, params);
2145  if (i>=0) {
2146  return(ip_ex_pp_H_hh_bbbb_ATLAS13_cache_e[NumPar][i] );
2147  } else {
2148  double newResult = interpolate (ATLAS13_pp_H_hh_bbbb_e,mass);
2149  CacheShiftReal(ip_ex_pp_H_hh_bbbb_ATLAS13_cache_e, NumPar, params, newResult);
2150  return newResult;
2151  }
2152 }
2153 
2154 
2156  int NumPar = 1;
2157  double params[] = {mass};
2158 
2159  int i = CacheCheckReal(ip_ex_pp_phi_bb_CMS13_cache, NumPar, params);
2160  if (i>=0) {
2161  return(ip_ex_pp_phi_bb_CMS13_cache[NumPar][i] );
2162  } else {
2163  double newResult = interpolate (CMS13_pp_phi_bb,mass);
2164  CacheShiftReal(ip_ex_pp_phi_bb_CMS13_cache, NumPar, params, newResult);
2165  return newResult;
2166  }
2167 }
2168 
2170  int NumPar = 1;
2171  double params[] = {mass};
2172 
2173  int i = CacheCheckReal(ip_ex_pp_phi_bb_CMS8_cache, NumPar, params);
2174  if (i>=0) {
2175  return(ip_ex_pp_phi_bb_CMS8_cache[NumPar][i] );
2176  } else {
2177  double newResult = interpolate (CMS8_pp_phi_bb,mass);
2178  CacheShiftReal(ip_ex_pp_phi_bb_CMS8_cache, NumPar, params, newResult);
2179  return newResult;
2180  }
2181 }
2182 
2183 
2184 
2185 
2186 
2188  int NumPar = 1;
2189  double params[] = {mass};
2190 
2191  int i = CacheCheckReal(ip_ex_pp_phi_bb_CMS13_cache_e, NumPar, params);
2192  if (i>=0) {
2193  return(ip_ex_pp_phi_bb_CMS13_cache_e[NumPar][i] );
2194  } else {
2195  double newResult = interpolate (CMS13_pp_phi_bb_e,mass);
2196  CacheShiftReal(ip_ex_pp_phi_bb_CMS13_cache_e, NumPar, params, newResult);
2197  return newResult;
2198  }
2199 }
2200 
2202  int NumPar = 1;
2203  double params[] = {mass};
2204 
2205  int i = CacheCheckReal(ip_ex_pp_H_hh_bbbb_CMS13_cache, NumPar, params);
2206  if (i>=0) {
2207  return(ip_ex_pp_H_hh_bbbb_CMS13_cache[NumPar][i] );
2208  } else {
2209  double newResult = interpolate (CMS13_pp_H_hh_bbbb,mass);
2210  CacheShiftReal(ip_ex_pp_H_hh_bbbb_CMS13_cache, NumPar, params, newResult);
2211  return newResult;
2212  }
2213 }
2214 
2215 
2216 
2218  int NumPar = 1;
2219  double params[] = {mass};
2220 
2221  int i = CacheCheckReal(ip_ex_pp_H_hh_bbbb_CMS13_cache_e, NumPar, params);
2222  if (i>=0) {
2223  return(ip_ex_pp_H_hh_bbbb_CMS13_cache_e[NumPar][i] );
2224  } else {
2225  double newResult = interpolate (CMS13_pp_H_hh_bbbb_e,mass);
2226  CacheShiftReal(ip_ex_pp_H_hh_bbbb_CMS13_cache_e, NumPar, params, newResult);
2227  return newResult;
2228  }
2229 }
2230 
2231 
2233  int NumPar = 1;
2234  double params[] = {mass};
2235 
2236  int i = CacheCheckReal(ip_ex_pp_Hpm_tb_ATLAS8_cache, NumPar, params);
2237  if (i>=0) {
2238  return(ip_ex_pp_Hpm_tb_ATLAS8_cache[NumPar][i] );
2239  } else {
2240  double newResult = interpolate (ATLAS8_pp_Hpm_tb,mass);
2241  CacheShiftReal(ip_ex_pp_Hpm_tb_ATLAS8_cache, NumPar, params, newResult);
2242  return newResult;
2243  }
2244 }
2245 
2246 
2247 
2249  int NumPar = 1;
2250  double params[] = {mass};
2251 
2252  int i = CacheCheckReal(ip_ex_pp_Hpm_tb_ATLAS8_cache_e, NumPar, params);
2253  if (i>=0) {
2254  return(ip_ex_pp_Hpm_tb_ATLAS8_cache_e[NumPar][i] );
2255  } else {
2256  double newResult = interpolate (ATLAS8_pp_Hpm_tb_e,mass);
2257  CacheShiftReal(ip_ex_pp_Hpm_tb_ATLAS8_cache_e, NumPar, params, newResult);
2258  return newResult;
2259  }
2260 }
2261 
2262 
2263 
2265  int NumPar = 1;
2266  double params[] = {mass};
2267 
2268  int i = CacheCheckReal(ip_ex_pp_Hp_tb_CMS8_cache, NumPar, params);
2269  if (i>=0) {
2270  return(ip_ex_pp_Hp_tb_CMS8_cache[NumPar][i] );
2271  } else {
2272  double newResult = interpolate (CMS8_pp_Hp_tb,mass);
2273  CacheShiftReal(ip_ex_pp_Hp_tb_CMS8_cache, NumPar, params, newResult);
2274  return newResult;
2275  }
2276 }
2277 
2278 
2279 
2281  int NumPar = 1;
2282  double params[] = {mass};
2283 
2284  int i = CacheCheckReal(ip_ex_pp_Hp_tb_CMS8_cache_e, NumPar, params);
2285  if (i>=0) {
2286  return(ip_ex_pp_Hp_tb_CMS8_cache_e[NumPar][i] );
2287  } else {
2288  double newResult = interpolate (CMS8_pp_Hp_tb_e,mass);
2289  CacheShiftReal(ip_ex_pp_Hp_tb_CMS8_cache_e, NumPar, params, newResult);
2290  return newResult;
2291  }
2292 }
2293 
2295  int NumPar = 1;
2296  double params[] = {mass};
2297 
2298  int i = CacheCheckReal(ip_ex_pp_Hp_tb_ATLAS13_cache, NumPar, params);
2299  if (i>=0) {
2300  return(ip_ex_pp_Hp_tb_ATLAS13_cache[NumPar][i] );
2301  } else {
2302  double newResult = interpolate (ATLAS13_pp_Hp_tb,mass);
2303  CacheShiftReal(ip_ex_pp_Hp_tb_ATLAS13_cache, NumPar, params, newResult);
2304  return newResult;
2305  }
2306 }
2307 
2308 
2309 
2310 
2312  int NumPar = 1;
2313  double params[] = {mass};
2314 
2315  int i = CacheCheckReal(ip_ex_ggF_H_hh_bbbb_CMS13_cache, NumPar, params);
2316  if (i>=0) {
2317  return(ip_ex_ggF_H_hh_bbbb_CMS13_cache[NumPar][i] );
2318  } else {
2319  double newResult = interpolate (CMS13_ggF_H_hh_bbbb,mass);
2320  CacheShiftReal(ip_ex_ggF_H_hh_bbbb_CMS13_cache, NumPar, params, newResult);
2321  return newResult;
2322  }
2323 }
2324 
2325 
2326 
2328  int NumPar = 1;
2329  double params[] = {mass};
2330 
2331  int i = CacheCheckReal(ip_ex_ggF_H_hh_bbbb_CMS13_cache_e, NumPar, params);
2332  if (i>=0) {
2333  return(ip_ex_ggF_H_hh_bbbb_CMS13_cache_e[NumPar][i] );
2334  } else {
2335  double newResult = interpolate (CMS13_ggF_H_hh_bbbb_e,mass);
2336  CacheShiftReal(ip_ex_ggF_H_hh_bbbb_CMS13_cache_e, NumPar, params, newResult);
2337  return newResult;
2338  }
2339 }
2340 
2342  int NumPar = 1;
2343  double params[] = {mass};
2344 
2345  int i = CacheCheckReal(ip_ex_pp_Gkk_tt_ATLAS13_cache, NumPar, params);
2346  if (i>=0) {
2347  return(ip_ex_pp_Gkk_tt_ATLAS13_cache[NumPar][i] );
2348  } else {
2349  double newResult = interpolate(ATLAS13_pp_Gkk_tt,mass);
2350  CacheShiftReal(ip_ex_pp_Gkk_tt_ATLAS13_cache, NumPar, params, newResult);
2351  return newResult;
2352  }
2353 }
2354 
2356  int NumPar = 1;
2357  double params[] = {mass};
2358 
2359  int i = CacheCheckReal(ip_ex_pp_R_gg_CMS13_cache, NumPar, params);
2360  if (i>=0) {
2361  return(ip_ex_pp_R_gg_CMS13_cache[NumPar][i] );
2362  } else {
2363  double newResult = interpolate(CMS13_pp_R_gg,mass);
2364  CacheShiftReal(ip_ex_pp_R_gg_CMS13_cache, NumPar, params, newResult);
2365  return newResult;
2366  }
2367 }
2368 
2370  int NumPar = 1;
2371  double params[] = {mass};
2372 
2373  int i = CacheCheckReal(ip_ex_pp_SS_jjjj_ATLAS13_cache, NumPar, params);
2374  if (i>=0) {
2375  return(ip_ex_pp_SS_jjjj_ATLAS13_cache[NumPar][i] );
2376  } else {
2377  double newResult = interpolate(ATLAS13_pp_SS_jjjj,mass);
2378  CacheShiftReal(ip_ex_pp_SS_jjjj_ATLAS13_cache, NumPar, params, newResult);
2379  return newResult;
2380  }
2381 }
2382 
2384  int NumPar = 1;
2385  double params[] = {mass};
2386 
2387  int i = CacheCheckReal(ip_ex_bb_H_bb_CMS13_cache, NumPar, params);
2388  if (i>=0) {
2389  return ( ip_ex_bb_H_bb_CMS13_cache[NumPar][i] );
2390  } else {
2391  double newResult = interpolate(CMS13_bb_H_bb,mass);
2392  CacheShiftReal(ip_ex_bb_H_bb_CMS13_cache, NumPar, params, newResult);
2393  return newResult;
2394  }
2395 }
2396 
2397 
2398 
2399 
2400 
2401 double THDMWcache::ip_th_pp_Sr_tt(double etaD, double etaU, double Lambda4, double mSr){
2402  int NumPar = 4;
2403  double params[] = {etaD, etaU, Lambda4, mSr};
2404 
2405  int i = CacheCheckReal(ip_th_pp_Sr_tt_cache, NumPar, params);
2406  if (i>=0) {
2407  return(ip_th_pp_Sr_tt_cache[NumPar][i] );
2408  } else {
2409  double newResult = interpolate4D (MadGraph_pp_Sr_tt,etaD,etaU,Lambda4,mSr);
2410  CacheShiftReal(ip_th_pp_Sr_tt_cache, NumPar, params, newResult);
2411  return newResult;
2412  }
2413 }
2414 
2415 double THDMWcache::ip_th_pp_Srtt_tttt(double etaD, double etaU, double Lambda4, double mSr){
2416  int NumPar = 4;
2417  double params[] = {etaD, etaU, Lambda4, mSr};
2418 
2419  int i = CacheCheckReal(ip_th_pp_Srtt_tttt_cache, NumPar, params);
2420  if (i>=0) {
2421  return(ip_th_pp_Srtt_tttt_cache[NumPar][i] );
2422  } else {
2423  double newResult = interpolate4D (MadGraph_pp_Srtt_tttt,etaD,etaU,Lambda4,mSr);
2424  CacheShiftReal(ip_th_pp_Srtt_tttt_cache, NumPar, params, newResult);
2425  return newResult;
2426  }
2427 }
2428 
2429 double THDMWcache::ip_th_pp_Sr_jj(double etaD, double etaU, double Lambda4, double mSr){
2430  int NumPar = 4;
2431  double params[] = {etaD, etaU, Lambda4, mSr};
2432 
2433  int i = CacheCheckReal(ip_th_pp_Sr_jj_cache, NumPar, params);
2434  if (i>=0) {
2435  return(ip_th_pp_Sr_jj_cache[NumPar][i] );
2436  } else {
2437  double newResult = interpolate4D (MadGraph_pp_Sr_jj,etaD,etaU,Lambda4,mSr);
2438  CacheShiftReal(ip_th_pp_Sr_jj_cache, NumPar, params, newResult);
2439  return newResult;
2440  }
2441 }
2442 
2443 double THDMWcache::ip_th_pp_SrSr_jjjj(double etaD, double etaU, double Lambda4, double mSr){
2444  int NumPar = 4;
2445  double params[] = {etaD, etaU, Lambda4, mSr};
2446 
2447  int i = CacheCheckReal(ip_th_pp_SrSr_jjjj_cache, NumPar, params);
2448  if (i>=0) {
2449  return(ip_th_pp_SrSr_jjjj_cache[NumPar][i] );
2450  } else {
2451  double newResult = interpolate4D (MadGraph_pp_SrSr_jjjj,etaD,etaU,Lambda4,mSr);
2452  CacheShiftReal(ip_th_pp_SrSr_jjjj_cache, NumPar, params, newResult);
2453  return newResult;
2454  }
2455 }
2456 
2457 
2458 double THDMWcache::ip_th_pp_Stb_tbtb(double etaD, double etaU, double mS){
2459  int NumPar = 3;
2460  double params[] = {etaD, etaU, mS};
2461 
2462  int i = CacheCheckReal(ip_th_pp_Stb_tbtb_cache, NumPar, params);
2463  if (i>=0) {
2464  return(ip_th_pp_Stb_tbtb_cache[NumPar][i] );
2465  } else {
2466  double newResult = interpolate3D (MadGraph_pp_Stb_tbtb,etaD,etaU,mS);
2467  CacheShiftReal(ip_th_pp_Stb_tbtb_cache, NumPar, params, newResult);
2468  return newResult;
2469  }
2470 }
2471 
2472 
2473 double THDMWcache::ip_th_pp_Sitt_tttt(double etaD, double etaU, double mS){
2474  int NumPar = 3;
2475  double params[] = {etaD, etaU, mS};
2476 
2477  int i = CacheCheckReal(ip_th_pp_Sitt_tttt_cache, NumPar, params);
2478  if (i>=0) {
2479  return(ip_th_pp_Sitt_tttt_cache[NumPar][i] );
2480  } else {
2481  double newResult = interpolate3D (MadGraph_pp_Sitt_tttt,etaD,etaU,mS);
2482  CacheShiftReal(ip_th_pp_Sitt_tttt_cache, NumPar, params, newResult);
2483  return newResult;
2484  }
2485 }
2486 
2487 
2488 double THDMWcache::ip_th_pp_Srbb_bbbb(double etaD, double etaU, double Lambda4, double mSr){
2489  int NumPar = 4;
2490  double params[] = {etaD, etaU, Lambda4, mSr};
2491 
2492  int i = CacheCheckReal(ip_th_pp_Srbb_bbbb_cache, NumPar, params);
2493  if (i>=0) {
2494  return(ip_th_pp_Srbb_bbbb_cache[NumPar][i] );
2495  } else {
2496  double newResult = interpolate4D (MadGraph_pp_Srbb_bbbb,etaD,etaU,Lambda4,mSr);
2497  CacheShiftReal(ip_th_pp_Srbb_bbbb_cache, NumPar, params, newResult);
2498  return newResult;
2499  }
2500 }
2501 
2502 
2503 double THDMWcache::ip_th_pp_Srbb_bbbb_8TeV(double etaD, double etaU, double Lambda4, double mSr){
2504  int NumPar = 4;
2505  double params[] = {etaD, etaU, Lambda4, mSr};
2506 
2507  int i = CacheCheckReal(ip_th_pp_Srbb_bbbb_8TeV_cache, NumPar, params);
2508  if (i>=0) {
2509  return(ip_th_pp_Srbb_bbbb_8TeV_cache[NumPar][i] );
2510  } else {
2511  double newResult = interpolate4D (MadGraph_pp_Srbb_bbbb_8TeV,etaD,etaU,Lambda4,mSr);
2512  CacheShiftReal(ip_th_pp_Srbb_bbbb_8TeV_cache, NumPar, params, newResult);
2513  return newResult;
2514  }
2515 }
2516 
2517 
2518 double THDMWcache::ip_th_pp_Sibb_bbbb(double etaD, double etaU, double mS){
2519  int NumPar = 3;
2520  double params[] = {etaD, etaU, mS};
2521 
2522  int i = CacheCheckReal(ip_th_pp_Sibb_bbbb_cache, NumPar, params);
2523  if (i>=0) {
2524  return(ip_th_pp_Sibb_bbbb_cache[NumPar][i] );
2525  } else {
2526  double newResult = interpolate3D (MadGraph_pp_Sibb_bbbb,etaD,etaU,mS);
2527  //std::cout<<"check"<<std::endl;
2528  CacheShiftReal(ip_th_pp_Sibb_bbbb_cache, NumPar, params, newResult);
2529  return newResult;
2530  }
2531 }
2532 
2533 
2534 
2535 double THDMWcache::ip_th_pp_Sibb_bbbb_8TeV(double etaD, double etaU, double mS){
2536  int NumPar = 3;
2537  double params[] = {etaD, etaU, mS};
2538 
2539  int i = CacheCheckReal(ip_th_pp_Sibb_bbbb_8TeV_cache, NumPar, params);
2540  if (i>=0) {
2541  return(ip_th_pp_Sibb_bbbb_8TeV_cache[NumPar][i] );
2542  } else {
2543  double newResult = interpolate3D (MadGraph_pp_Sibb_bbbb_8TeV,etaD,etaU,mS);
2544  //std::cout<<"check"<<std::endl;
2545  CacheShiftReal(ip_th_pp_Sibb_bbbb_8TeV_cache, NumPar, params, newResult);
2546  return newResult;
2547  }
2548 }
2549 
2550 
2551 
2552 
2553 
2554 double THDMWcache::ip_th_pp_Sr_bb(double etaD, double etaU, double Lambda4, double mSr){
2555  int NumPar = 4;
2556  double params[] = {etaD, etaU, Lambda4, mSr};
2557 
2558  int i = CacheCheckReal(ip_th_pp_Sr_bb_cache, NumPar, params);
2559  if (i>=0) {
2560  return(ip_th_pp_Sr_bb_cache[NumPar][i] );
2561  } else {
2562  double newResult = interpolate4D (MadGraph_pp_Sr_bb,etaD,etaU,Lambda4,mSr);
2563  CacheShiftReal(ip_th_pp_Sr_bb_cache, NumPar, params, newResult);
2564  return newResult;
2565  }
2566 }
2567 
2568 
2569 
2570 double THDMWcache::ip_th_pp_Sr_bb_8TeV(double etaD, double etaU, double Lambda4, double mSr){
2571  int NumPar = 4;
2572  double params[] = {etaD, etaU, Lambda4, mSr};
2573 
2574  int i = CacheCheckReal(ip_th_pp_Sr_bb_8TeV_cache, NumPar, params);
2575  if (i>=0) {
2576  return(ip_th_pp_Sr_bb_8TeV_cache[NumPar][i] );
2577  } else {
2578  double newResult = interpolate4D (MadGraph_pp_Sr_bb_8TeV,etaD,etaU,Lambda4,mSr);
2579  CacheShiftReal(ip_th_pp_Sr_bb_8TeV_cache, NumPar, params, newResult);
2580  return newResult;
2581  }
2582 }
2583 
2584 
2585 double THDMWcache::ip_th_pp_Si_bb(double etaD, double etaU, double mS){
2586  int NumPar = 3;
2587  double params[] = {etaD, etaU, mS};
2588 
2589  int i = CacheCheckReal(ip_th_pp_Si_bb_cache, NumPar, params);
2590  if (i>=0) {
2591  return(ip_th_pp_Si_bb_cache[NumPar][i] );
2592  } else {
2593  double newResult = interpolate3D (MadGraph_pp_Si_bb,etaD,etaU,mS);
2594  //std::cout<<"check"<<std::endl;
2595  CacheShiftReal(ip_th_pp_Si_bb_cache, NumPar, params, newResult);
2596  return newResult;
2597  }
2598 }
2599 
2600 
2601 
2602 
2603 double THDMWcache::ip_th_pp_Si_bb_8TeV(double etaD, double etaU, double mS){
2604  int NumPar = 3;
2605  double params[] = {etaD, etaU, mS};
2606 
2607  int i = CacheCheckReal(ip_th_pp_Si_bb_8TeV_cache, NumPar, params);
2608  if (i>=0) {
2609  return(ip_th_pp_Si_bb_8TeV_cache[NumPar][i] );
2610  } else {
2611  double newResult = interpolate3D (MadGraph_pp_Si_bb_8TeV,etaD,etaU,mS);
2612  //std::cout<<"check"<<std::endl;
2613  CacheShiftReal(ip_th_pp_Si_bb_8TeV_cache, NumPar, params, newResult);
2614  return newResult;
2615  }
2616 }
2617 
2618 
2619 
2620 
2621 /*
2622 double THDMWcache::logip_th_pp_SrSr_jjjj(double etaD, double etaU, double Lambda4, double mSr){
2623  int NumPar = 4;
2624  double params[] = {etaD, etaU, Lambda4, mSr};
2625 
2626  int i = CacheCheckReal(logip_th_pp_SrSr_jjjj_cache, NumPar, params);
2627  if (i>=0) {
2628  return(logip_th_pp_SrSr_jjjj_cache[NumPar][i] );
2629  } else {
2630  double newResult = loginterpolate4D (MadGraph_pp_SrSr_jjjj,etaD,etaU,Lambda4,mSr);
2631  CacheShiftReal(logip_th_pp_SrSr_jjjj_cache, NumPar, params, newResult);
2632  return newResult;
2633  }
2634 }
2635 */
2636 
2637 
2638 
2640 {
2641  double mSr=sqrt(mSRsq);
2642  double mSp=sqrt(mSpsq);
2643  double mSi=sqrt(mSIsq);
2644  double MW=myTHDMW->Mw();
2645  //double mW2=myTHDMW->Mw();
2646  double SqrtEtaU=copysign(sqrt(sqrt(pow(etaU,2))),etaU);
2647  double SqrtEtaD=copysign(sqrt(sqrt(pow(etaD,2))),etaD);
2648  double nu45=(nu4+nu5)/2;
2649  //EtaU and EtaD in Sqrt Units!!!
2650  THoEX_pp_Sr_tt=0.;
2651  THoEX_pp_Srtt_tttt=0.;
2652  THoEX_pp_Sr_jj=0.;
2653  THoEX_pp_SrSr_jjjj=0.;
2654  THoEX_pp_Stb_tbtb=0.;
2655  THoEX_pp_Sitt_tttt=0.;
2656  THoEX_pp_Srbb_bbbb=0.;
2658  THoEX_pp_Sibb_bbbb=0.;
2660  THoEX_pp_Sr_bb=0.;
2662  THoEX_pp_Si_bb=0.;
2664 
2665  pp_Sr_tt_TH13 = 1.0e-15;
2666  pp_Srtt_tttt_TH13 = 1.0e-15;
2667  pp_Sr_jj_TH13=1.0e-15;
2668  pp_SrSr_jjjj_TH13=1.0e-15;
2669  pp_Stb_tbtb_TH13=1.0e-15;
2670  pp_Srtt_tttt_TH13 = 1.0e-15;
2671  pp_Sitt_tttt_TH13 = 1.0e-15;
2672  pp_Srbb_bbbb_TH13= 1.0e-15;
2673  pp_Srbb_bbbb_TH8= 1.0e-15;
2674  pp_Sibb_bbbb_TH13= 1.0e-15;
2675  pp_Sibb_bbbb_TH8= 1.0e-15;
2676  pp_Sr_bb_TH13= 1.0e-15;
2677  pp_Sr_bb_TH8= 1.0e-15;
2678  pp_Si_bb_TH13= 1.0e-15;
2679  pp_Si_bb_TH8= 1.0e-15;
2680  //logpp_SrSr_jjjj_TH13=-15;
2681 
2682 
2683 
2684  //std::cout<<"mSr="<<mSr<<std::endl;
2685  //std::cout<<"nu45="<<nu45<<std::endl;
2686  //std::cout<<"etaU="<<etaU<<std::endl;
2687  //std::cout<<"etaD="<<etaD<<std::endl;
2688  //std::cout<<"MW="<<MW<<std::endl;
2689  //std::cout<<"MZ="<<MZ<<std::endl;
2690 
2691  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<56.2499 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Sr_tt_TH13=ip_th_pp_Sr_tt(SqrtEtaD,SqrtEtaU,nu45,mSr);
2692  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<56.2499 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Srtt_tttt_TH13=ip_th_pp_Srtt_tttt(SqrtEtaD,SqrtEtaU,nu45,mSr);
2693  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Sr_jj_TH13=ip_th_pp_Sr_jj(SqrtEtaD,SqrtEtaU,nu45,mSr);
2694  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_SrSr_jjjj_TH13=ip_th_pp_SrSr_jjjj(SqrtEtaD,SqrtEtaU,nu45,mSr);
2695  if(mSpsq > 1.6001e5 && mSpsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<56.2499 && mSpsq<(mSRsq+MW*MW) && mSp<=(mSIsq+MW*MW)) pp_Stb_tbtb_TH13=ip_th_pp_Stb_tbtb(SqrtEtaD,SqrtEtaU,mSp);
2696  if(mSIsq > 1.6001e5 && mSIsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<56.2499 && mSIsq<(mSpsq+MW*MW) && mSIsq<=(mSRsq+MZ*MZ)) pp_Sitt_tttt_TH13=ip_th_pp_Sitt_tttt(SqrtEtaD,SqrtEtaU,mSi);
2697  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Srbb_bbbb_TH13=ip_th_pp_Srbb_bbbb(SqrtEtaD,SqrtEtaU,nu45,mSr);
2698  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Srbb_bbbb_TH8=ip_th_pp_Srbb_bbbb_8TeV(SqrtEtaD,SqrtEtaU,nu45,mSr);
2699  if(mSIsq > 1.6001e5 && mSIsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.999 && mSIsq<(mSpsq+MW*MW) && mSIsq<=(mSRsq+MZ*MZ)) pp_Sibb_bbbb_TH13=ip_th_pp_Sibb_bbbb(SqrtEtaD,SqrtEtaU,mSi);
2700  if(mSIsq > 1.6001e5 && mSIsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.999 && mSIsq<(mSpsq+MW*MW) && mSIsq<=(mSRsq+MZ*MZ)) pp_Sibb_bbbb_TH8=ip_th_pp_Sibb_bbbb_8TeV(SqrtEtaD,SqrtEtaU,mSi);
2701  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Sr_bb_TH13=ip_th_pp_Sr_bb(SqrtEtaD,SqrtEtaU,nu45,mSr);
2702  if(mSRsq > 1.6001e5 && mSRsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.9999 && nu45*nu45<168.999 && mSRsq<(mSpsq+MW*MW) && mSRsq<=(mSIsq+MZ*MZ)) pp_Sr_bb_TH8 =ip_th_pp_Sr_bb_8TeV(SqrtEtaD,SqrtEtaU,nu45,mSr);
2703  if(mSIsq > 1.6001e5 && mSIsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.999 && mSIsq<(mSpsq+MW*MW) && mSIsq<=(mSRsq+MZ*MZ)) pp_Si_bb_TH13=ip_th_pp_Si_bb(SqrtEtaD,SqrtEtaU,mSi);
2704  if(mSIsq > 1.6001e5 && mSIsq<2.2499e6 && etaD*etaD<399.99 && etaU*etaU<3.999 && mSIsq<(mSpsq+MW*MW) && mSIsq<=(mSRsq+MZ*MZ)) pp_Si_bb_TH8=ip_th_pp_Si_bb_8TeV(SqrtEtaD,SqrtEtaU,mSi);
2705 
2706 
2707 
2708  //std::cout<<"Sibb2="<< interpolate3D(MadGraph_pp_Sibb_bbbb,4.47213,1.4141,1450)<<std::endl;
2709  //std::cout<<"Sibb="<< interpolate3D(MadGraph_pp_Sibb_bbbb,-4.47214,-1.4142,350)<<std::endl;
2710  //std::cout<<"Sitt="<< interpolate3D(MadGraph_pp_Sitt_tttt,SqrtEtaD,SqrtEtaU,mSi)<<std::endl;
2711  //std::cout<<"Sitt="<<ip_th_pp_Sitt_tttt(SqrtEtaD,0,mSi)<<std::endl;
2712  //if(mSr>= 400 && mSr<=1500) logpp_SrSr_jjjj_TH13=logip_th_pp_SrSr_jjjj(SqrtEtaD,SqrtEtaU,nu45,mSr);
2713 
2714  //std::cout<<"pp_Stb_tbtb_TH13 first="<<ip_th_pp_Stb_tbtb(SqrtEtaD,SqrtEtaU,mSp)<<std::endl;
2715  //std::cout<<"pp_Stb_tbtb_TH13 second="<<interpolate3D(MadGraph_pp_Stb_tbtb,SqrtEtaD,SqrtEtaU,mSp)<<std::endl;
2716  if(mSr>= 400 && mSr<=1500) THoEX_pp_Sr_tt=pp_Sr_tt_TH13/ip_ex_pp_Gkk_tt_ATLAS13(mSr);
2717  if(mSr>= 400 && mSr<=1000) THoEX_pp_Srtt_tttt=pp_Srtt_tttt_TH13/ip_ex_tt_phi_tt_ATLAS13(mSr);
2718  if(mSr>= 600 && mSr<=1500) THoEX_pp_Sr_jj=pp_Sr_jj_TH13/ip_ex_pp_R_gg_CMS13(mSr);
2719  if(mSr>= 500 && mSr<=1500) THoEX_pp_SrSr_jjjj=pp_SrSr_jjjj_TH13/ip_ex_pp_SS_jjjj_ATLAS13(mSr);
2720  if(mSp>= 400 && mSp<=1500) THoEX_pp_Stb_tbtb=pp_Stb_tbtb_TH13/ip_ex_pp_Hp_tb_ATLAS13(mSp);
2721  if(mSi>= 400 && mSi<=1000) THoEX_pp_Sitt_tttt=pp_Sitt_tttt_TH13/ip_ex_tt_phi_tt_ATLAS13(mSi);
2722  if(mSr>= 400 && mSr<=1300) THoEX_pp_Srbb_bbbb=pp_Srbb_bbbb_TH13/ip_ex_bb_H_bb_CMS13(mSr);
2723  if(mSr>= 400 && mSr<=900) THoEX_pp_Srbb_bbbb_8TeV=pp_Srbb_bbbb_TH8/ip_ex_bb_phi_bb_CMS8(mSr);
2724  if(mSi>= 400 && mSi<=1300) THoEX_pp_Sibb_bbbb=pp_Sibb_bbbb_TH13/ip_ex_bb_H_bb_CMS13(mSi);
2725  if(mSi>= 400 && mSi<=900) THoEX_pp_Sibb_bbbb_8TeV=pp_Sibb_bbbb_TH8/ip_ex_bb_phi_bb_CMS8(mSi);
2726  if(mSr>= 550 && mSr<=1200) THoEX_pp_Sr_bb=pp_Sr_bb_TH13/ip_ex_pp_phi_bb_CMS13(mSr);
2727  if(mSr>= 400 && mSr<=1200) THoEX_pp_Sr_bb_8TeV=pp_Sr_bb_TH8/ip_ex_pp_phi_bb_CMS8(mSr);
2728  if(mSi>= 550 && mSi<=1200) THoEX_pp_Si_bb=pp_Si_bb_TH13/ip_ex_pp_phi_bb_CMS13(mSi);
2729  if(mSr>= 400 && mSr<=1200) THoEX_pp_Si_bb_8TeV=pp_Si_bb_TH8/ip_ex_pp_phi_bb_CMS8(mSr);
2730  //std::cout<<"ip_ex_pp_phi_bb_CMS13(mSi)="<< ip_ex_pp_phi_bb_CMS13(550) <<std::endl;
2731  //std::cout<<"pp_Si_bb_TH13="<< ip_th_pp_Si_bb(4.469,0,550) <<std::endl;
2732  //std::cout<<"pp_Si_bb_TH13="<< ip_th_pp_Si_bb(4.469,1.41,550) <<std::endl;
2733 }
2734 
2735 
2736 
2738 {
2739  double sin2b=2.0*sinb*cosb;
2740  double cos2b=cosb*cosb-sinb*sinb;
2741  double tan2b=sin2b/cos2b;
2742  double cot2b=1.0/tan2b;
2743  double sin2a=2.0*sina*cosa;
2744  double cos2a=cosa*cosa-sina*sina;
2745  double tan2a=sin2a/cos2a;
2746  double cot2a=1.0/tan2a;
2748 
2749  m11sq = vev*vev*(lambda2*sinb*sinb*tanb/(cot2a-2.0*cot2b)
2750  +(lambda1*(cosb*cosb - (4.0*cosb*cosb-3.0)*cosb*tan2a/sinb)
2751  -lambda345*(sinb*sinb + cos2b*tan2a*tanb))/(4.0*cot2b*tan2a-2.0));
2752 
2753  m22sq = vev*vev*(-lambda1*cosb*cosb*cosb/sinb/(cot2a-2.0*cot2b)
2754  +(lambda2*(sinb*sinb + (4.0*sinb*sinb-3.0)*tanb*tan2a)
2755  -lambda345*(cosb*cosb + cos2b*tan2a*cosb/sinb))/(4.0*cot2b*tan2a-2.0));
2756 
2757  m12sq = vev*vev*(-lambda345*sin2b
2758  +2.0*(lambda1*cosb*cosb - lambda2*sinb*sinb)*tan2a/(4.0*tan2a/tan2b-2.0));
2759 
2761  +lambda345*sin2a*cosb*sinb
2762  +sin(bma)*sin(bma)*(lambda345 + (lambda2 - lambda1/(tanb*tanb))*tan2a*tanb)/(1.0 - 2.0*cot2b*tan2a));
2763 
2764  mAsq = vev*vev*(lambda3+lambda4 + tan2a*(-lambda1*cosb/sinb + lambda2*tanb + 2.0*lambda5*cot2b))/(1.0 - 2.0*cot2b*tan2a);
2765 
2767  -lambda345*sin2a*cosb*sinb
2768  +cos(bma)*cos(bma)*(lambda345 + (lambda2 - lambda1/(tanb*tanb))*tan2a*tanb)/(1.0 - 2.0*cot2b*tan2a));
2769 
2770  mSRsq = mSsq + vev*vev*((nu1+nu2+2.0*nu3)*cosb*cosb + (omega1+omega2+2.0*omega3)*sinb*sinb
2771  +(kappa1+kappa2+kappa3)*sin2b)/4.0;
2772 
2773  mSIsq = mSsq + vev*vev*((nu1+nu2-2.0*nu3)*cosb*cosb + (omega1+omega2-2.0*omega3)*sinb*sinb
2774  +(kappa1+kappa2-kappa3)*sin2b)/4.0;
2775 
2776  if( THDMWmodel == "custodial1" ) {
2777  mHpsq = mAsq;
2778  mSpsq = mSIsq;
2779  }
2780  else if( THDMWmodel == "ManoharWise" ) {
2781  mhsq = vev*vev*lambda1;
2782  mSRsq = mSsq + vev*vev*(nu1+nu2+2.0*nu3)/4.0;
2783  mSIsq = mSsq + vev*vev*(nu1+nu2-2.0*nu3)/4.0;
2784  mSpsq = mSsq + vev*vev*nu1/4.0;
2785  }
2786  else if( THDMWmodel == "custodialMW" ) {
2787  mhsq = vev*vev*lambda1;
2788  mSRsq = mSsq + vev*vev*(nu1+2.0*nu2)/4.0;
2789  mSIsq = mSsq + vev*vev*nu1/4.0;
2790  mSpsq = mSIsq;
2791  }
2792  else {
2793  mHpsq = vev*vev*(lambda345 + tan2a*(-lambda1*cosb/sinb + lambda2*tanb + (lambda4+lambda5)*cot2b))/(1.0 - 2.0*cot2b*tan2a);
2794  mSpsq = mSsq + vev*vev*(nu1*cosb*cosb + omega1*sinb*sinb + kappa1*sin2b)/4.0;
2795  }
2796 
2797  if(mhsq < 0 || mHsq < 0 || mAsq < 0 || mSRsq < 0 || mSIsq < 0 || mHpsq < 0 || mSpsq < 0)
2798  {
2799  return std::numeric_limits<double>::quiet_NaN();
2800  }
2801  else
2802  {
2803  return 1.;
2804  }
2805 }
2806 
2808 {
2811  MZ=myTHDMW->getMz();
2812  vev=myTHDMW->v();
2848 
2849 
2851  computeHHlimits();
2853  computeUnitarity();
2855 }
QCD::TAU
Definition: QCD.h:316
THDMWcache::ip_ex_pp_phi_hh_bbbb_CMS8_cache_e
double ip_ex_pp_phi_hh_bbbb_CMS8_cache_e[2][CacheSize]
Definition: THDMWcache.h:396
THDMWcache::CacheCheck
int CacheCheck(const gslpp::complex cache[][CacheSize], const int NumPar, const double params[]) const
Check whether for the latest set of parameters a value is in the cache.
Definition: THDMWcache.cpp:85
THDMWcache::mu2
double mu2
Definition: THDMWcache.h:847
THDMWcache::ip_th_pp_Si_bb
double ip_th_pp_Si_bb(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> Si -> b bbar.
Definition: THDMWcache.cpp:2585
THDMWcache::ip_ex_pp_Gkk_tt_ATLAS13
double ip_ex_pp_Gkk_tt_ATLAS13(double mass)
Interpolating function for the expected ATLAS upper limit on pp -> Gkk (Kaluza-Klein graviton) -> t t...
Definition: THDMWcache.cpp:2341
THDMWcache::tanb
double tanb
Definition: THDMWcache.h:834
gslpp::cos
complex cos(const complex &z)
Definition: gslpp_complex.cpp:429
THDMWcache::interpolate3D
double interpolate3D(gslpp::matrix< double > arrayTab, double x, double y, double z)
Linearly interpolates a table with three parameter dimensions.
Definition: THDMWcache.cpp:1487
THDMWcache::lambda2
double lambda2
Definition: THDMWcache.h:841
THDMWcache::CMS13_pp_phi_bb_e
gslpp::matrix< double > CMS13_pp_phi_bb_e
Definition: THDMWcache.h:456
THDMWcache::f_func
gslpp::complex f_func(const double x) const
loginterpolating function for the theoretical value of p p -> Sr Sr ->j j j j
Definition: THDMWcache.cpp:748
THDMWcache::ATLAS8_gg_phi_tt_e
gslpp::matrix< double > ATLAS8_gg_phi_tt_e
Definition: THDMWcache.h:447
THDMW::getTHDMW_mS2
double getTHDMW_mS2() const
A getter for .
Definition: THDMW.h:472
THDMWcache::mHsq
double mHsq
Definition: THDMWcache.h:78
THDMWcache::rh_QuQu
double rh_QuQu
Definition: THDMWcache.h:144
THDMWcache::ATLAS13_bb_phi_tt
gslpp::matrix< double > ATLAS13_bb_phi_tt
Definition: THDMWcache.h:452
THDMWcache::A0_MZ2_mSp2
gslpp::complex A0_MZ2_mSp2(const double MZ2, const double mSp2) const
Definition: THDMWcache.cpp:141
THDMW::getTHDMW_rho_b
double getTHDMW_rho_b() const
A getter for .
Definition: THDMW.h:721
THDMWcache::THoEX_pp_Sr_tt
double THoEX_pp_Sr_tt
Definition: THDMWcache.h:103
THDMWcache::THoEX_pp_Si_bb_8TeV
double THoEX_pp_Si_bb_8TeV
Definition: THDMWcache.h:116
THDMWcache::bma
double bma
Definition: THDMWcache.h:837
PVfunctions::A0
double A0(const double mu2, const double m2) const
.
Definition: PVfunctions.cpp:23
StandardModel::v
virtual double v() const
The Higgs vacuum expectation value.
Definition: StandardModel.cpp:917
THDMWcache::THoEX_pp_Srbb_bbbb
double THoEX_pp_Srbb_bbbb
Definition: THDMWcache.h:109
THDMW::getTHDMW_lambda4
double getTHDMW_lambda4() const
A getter for .
Definition: THDMW.h:443
THDMWcache::CMS8_pp_Hp_tb_e
gslpp::matrix< double > CMS8_pp_Hp_tb_e
Definition: THDMWcache.h:461
THDMWcache::rh_gaga
double rh_gaga
Definition: THDMWcache.h:149
THDMWcache::ip_th_pp_Srbb_bbbb_cache
double ip_th_pp_Srbb_bbbb_cache[5][CacheSize]
Definition: THDMWcache.h:387
THDMW::getTHDMW_nu4
double getTHDMW_nu4() const
A getter for .
Definition: THDMW.h:570
THDMWcache::pp_Si_bb_TH13
double pp_Si_bb_TH13
Definition: THDMWcache.h:100
THDMWcache::m12sq
double m12sq
Definition: THDMWcache.h:74
QCD::BOTTOM
Definition: QCD.h:329
THDMWcache::I_h_U_cache
gslpp::complex I_h_U_cache[5][CacheSize]
Definition: THDMWcache.h:339
THDMWcache::ip_ex_pp_H_hh_bbbb_ATLAS13_cache
double ip_ex_pp_H_hh_bbbb_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:405
THDMWcache::ip_th_pp_Sr_bb_8TeV_cache
double ip_th_pp_Sr_bb_8TeV_cache[5][CacheSize]
Definition: THDMWcache.h:383
THDMWcache::myTHDMW
const THDMW * myTHDMW
Definition: THDMWcache.h:164
THDMWcache::ip_ex_pp_H_hh_bbbb_CMS13
double ip_ex_pp_H_hh_bbbb_CMS13(double mass)
Interpolating function for the observed CMS upper limit on a scalar resonance decaying to two bosons...
Definition: THDMWcache.cpp:2201
THDMWcache::ip_ex_pp_Hpm_tb_ATLAS8_e
double ip_ex_pp_Hpm_tb_ATLAS8_e(double mass)
Interpolating function for the expected ATLAS upper limit on a singly charged scalar resonance decayi...
Definition: THDMWcache.cpp:2248
THDMWcache::cosb
double cosb
Definition: THDMWcache.h:836
THDMWcache::ip_th_pp_Sr_jj_cache
double ip_th_pp_Sr_jj_cache[5][CacheSize]
Definition: THDMWcache.h:392
THDMW::getTHDMW_nu2
double getTHDMW_nu2() const
A getter for .
Definition: THDMW.h:550
THDMWcache::ip_th_pp_Si_bb_8TeV
double ip_th_pp_Si_bb_8TeV(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> Si -> b bbar.
Definition: THDMWcache.cpp:2603
THDMWcache::ip_th_pp_Sr_bb_cache
double ip_th_pp_Sr_bb_cache[5][CacheSize]
Definition: THDMWcache.h:384
THDMWcache::kappa2_at_Q
double kappa2_at_Q
Definition: THDMWcache.h:66
THDMWcache::ip_ex_ggF_H_hh_bbbb_CMS13_cache_e
double ip_ex_ggF_H_hh_bbbb_CMS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:421
THDMWcache::omega2
double omega2
Definition: THDMWcache.h:858
THDMWcache::ip_ex_pp_phi_hh_bbbb_CMS8_cache
double ip_ex_pp_phi_hh_bbbb_CMS8_cache[2][CacheSize]
Definition: THDMWcache.h:395
THDMWcache::omega1
double omega1
Definition: THDMWcache.h:857
THDMWcache::CMS13_bb_H_bb
gslpp::matrix< double > CMS13_bb_H_bb
Definition: THDMWcache.h:462
gslpp::matrix< double >::assign
void assign(const size_t &i, const size_t &j, const double &a)
Definition: gslpp_matrix_double.cpp:108
THDMWcache::A_h_L
gslpp::complex A_h_L(const double mHl2, const double cW2, const double Me, const double Mmu, const double Mtau, const double MZ) const
Amplitude for the SM Higgs boson decay to a photon and a Z boson including the leptons in the loop.
Definition: THDMWcache.cpp:651
THDMWcache::ip_th_pp_Srbb_bbbb_8TeV_cache
double ip_th_pp_Srbb_bbbb_8TeV_cache[5][CacheSize]
Definition: THDMWcache.h:388
THDMWcache::THDMWmodel
std::string THDMWmodel
Definition: THDMWcache.h:830
THDMWcache::mu3_at_Q
double mu3_at_Q
Definition: THDMWcache.h:59
gslpp::matrix< double >
A class for constructing and defining operations on real matrices.
Definition: gslpp_matrix_double.h:48
THDMWcache::CMS13_ggF_H_hh_bbbb
gslpp::matrix< double > CMS13_ggF_H_hh_bbbb
Definition: THDMWcache.h:454
THDMWcache::B00_MZ2_MZ2_mSi2_mSp2_cache
gslpp::complex B00_MZ2_MZ2_mSi2_mSp2_cache[4][CacheSize]
Definition: THDMWcache.h:375
THDMWcache::ip_ex_pp_phi_bb_CMS13
double ip_ex_pp_phi_bb_CMS13(double mass)
Interpolating function for the observed CMS upper limit on a scalar resonance decaying to a b quark p...
Definition: THDMWcache.cpp:2155
THDMW::getTHDMW_nu5
double getTHDMW_nu5() const
A getter for .
Definition: THDMW.h:578
THDMWcache::ip_th_pp_Srtt_tttt_cache
double ip_th_pp_Srtt_tttt_cache[5][CacheSize]
Definition: THDMWcache.h:393
THDMWcache::A_A_D_cache
gslpp::complex A_A_D_cache[6][CacheSize]
Definition: THDMWcache.h:356
THDMWcache::I_h_L
gslpp::complex I_h_L(const double mHl2, const double Me, const double Mmu, const double Mtau) const
Amplitude for the SM Higgs boson decay to diphotons including the leptons in the loop.
Definition: THDMWcache.cpp:447
THDMWcache::I_h_D_cache
gslpp::complex I_h_D_cache[5][CacheSize]
Definition: THDMWcache.h:342
THDMWcache::CMS8_pp_H_hh_bbbb
gslpp::matrix< double > CMS8_pp_H_hh_bbbb
Definition: THDMWcache.h:448
THDMWcache::nu4
double nu4
Definition: THDMWcache.h:855
THDMW::getTHDMW_omega2
double getTHDMW_omega2() const
A getter for .
Definition: THDMW.h:604
THDMWcache::computeSignalStrengthQuantities
void computeSignalStrengthQuantities()
Definition: THDMWcache.cpp:780
THDMWcache::ip_ex_pp_H_hh_bbbb_ATLAS13
double ip_ex_pp_H_hh_bbbb_ATLAS13(double mass)
Interpolating function for the observed ATLAS upper limit on a spin-2 resonance decaying to two boso...
Definition: THDMWcache.cpp:2124
THDMWcache::Int1
gslpp::complex Int1(const double tau, const double lambda) const
Definition: THDMWcache.cpp:770
THDMWcache::ip_ex_pp_Hp_tb_ATLAS13_cache
double ip_ex_pp_Hp_tb_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:416
THDMWcache::THoEX_pp_Sr_bb_8TeV
double THoEX_pp_Sr_bb_8TeV
Definition: THDMWcache.h:114
THDMWcache::rh_gg
double rh_gg
Definition: THDMWcache.h:146
THDMWcache::ip_ex_pp_SS_jjjj_ATLAS13_cache
double ip_ex_pp_SS_jjjj_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:424
THDMWcache::omega2_at_Q
double omega2_at_Q
Definition: THDMWcache.h:65
THDMWcache::interpolate
double interpolate(gslpp::matrix< double > arrayTab, double x)
Linearly interpolates a table with one parameter dimension.
Definition: THDMWcache.cpp:1459
THDMWcache::nu3
double nu3
Definition: THDMWcache.h:854
gslpp::sin
complex sin(const complex &z)
Definition: gslpp_complex.cpp:420
THDMWcache::I_A_U_cache
gslpp::complex I_A_U_cache[4][CacheSize]
Definition: THDMWcache.h:341
THDMWcache::ip_ex_ggF_H_hh_bbbb_CMS13_e
double ip_ex_ggF_H_hh_bbbb_CMS13_e(double mass)
Interpolating function for the expected CMS upper limit on a scalar resonance decaying to two bosons...
Definition: THDMWcache.cpp:2327
THDMWcache::I_HH_D
gslpp::complex I_HH_D(const double mHh2, const double Ms, const double Mb) const
Amplitude for a heavy CP-even Higgs boson decay to diphotons including the strange and bottom quarks ...
Definition: THDMWcache.cpp:414
THDMWcache::THoEX_pp_Si_bb
double THoEX_pp_Si_bb
Definition: THDMWcache.h:115
THDMWcache::nu2
double nu2
Definition: THDMWcache.h:853
THDMWcache::ip_ex_pp_phi_hh_bbbb_CMS8_e
double ip_ex_pp_phi_hh_bbbb_CMS8_e(double mass)
Interpolating function for the expected CMS upper limit on a scalar resonance decaying to two bosons...
Definition: THDMWcache.cpp:1988
lambda345
An observable class for the quartic Higgs potential coupling combination .
Definition: THDMquantities.h:497
THDMWcache::mu3
double mu3
Definition: THDMWcache.h:848
THDMWcache::Dummy
gslpp::matrix< double > Dummy
Definition: THDMWcache.h:449
THDMWcache::nu2_at_Q
double nu2_at_Q
Definition: THDMWcache.h:64
THDMWcache::mAsq
double mAsq
Definition: THDMWcache.h:79
QCD::UP
Definition: QCD.h:324
THDMWcache::mu2_at_Q
double mu2_at_Q
Definition: THDMWcache.h:71
THDMWcache::ip_ex_pp_phi_bb_CMS8_cache
double ip_ex_pp_phi_bb_CMS8_cache[2][CacheSize]
Definition: THDMWcache.h:408
THDMWcache::A_H_Hp_cache
gslpp::complex A_H_Hp_cache[5][CacheSize]
Definition: THDMWcache.h:361
THDMWcache::ATLAS13_bb_phi_tt_e
gslpp::matrix< double > ATLAS13_bb_phi_tt_e
Definition: THDMWcache.h:453
THDMWcache::pp_Srtt_tttt_TH13
double pp_Srtt_tttt_TH13
Definition: THDMWcache.h:89
THDMWcache::computeUnitarity
void computeUnitarity()
Definition: THDMWcache.cpp:1107
lambda3
An observable class for the quartic Higgs potential coupling .
Definition: THDMquantities.h:428
THDMW::getTHDMW_lambda3
double getTHDMW_lambda3() const
A getter for .
Definition: THDMW.h:430
THDMWcache::CMS8_bb_phi_bb
gslpp::matrix< double > CMS8_bb_phi_bb
Definition: THDMWcache.h:448
THDMWcache::vev
double vev
Definition: THDMWcache.h:833
THDMWcache::CacheSize
static const int CacheSize
Cache size.
Definition: THDMWcache.h:172
THDMW::getModelTypeTHDMWflag
std::string getModelTypeTHDMWflag() const
A getter for the THDMW model type.
Definition: THDMW.h:329
THDMWcache::Q_cutoff
double Q_cutoff
Definition: THDMWcache.h:45
THDMWcache::ip_ex_pp_phi_bb_CMS13_cache
double ip_ex_pp_phi_bb_CMS13_cache[2][CacheSize]
Definition: THDMWcache.h:407
gslpp.h
THDMWcache::mu1
double mu1
Definition: THDMWcache.h:846
THDMWcache::ip_ex_pp_R_gg_CMS13_cache
double ip_ex_pp_R_gg_CMS13_cache[2][CacheSize]
Definition: THDMWcache.h:423
THDMWcache::I_HH_U
gslpp::complex I_HH_U(const double mHh2, const double Mc, const double Mt) const
Amplitude for a heavy CP-even Higgs boson decay to diphotons including the charm and top quarks in th...
Definition: THDMWcache.cpp:363
THDMWcache::sumModBRs
double sumModBRs
Definition: THDMWcache.h:152
THDMWcache::pp_Srbb_bbbb_TH8
double pp_Srbb_bbbb_TH8
Definition: THDMWcache.h:95
THDMWcache::MadGraph_pp_Si_bb
gslpp::matrix< double > MadGraph_pp_Si_bb
Definition: THDMWcache.h:478
QCD::CHARM
Definition: QCD.h:326
THDMWcache::ip_th_pp_Sr_bb_8TeV
double ip_th_pp_Sr_bb_8TeV(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr -> b bbar at 8 TeV.
Definition: THDMWcache.cpp:2570
THDMWcache::CMS8_pp_Hp_tb
gslpp::matrix< double > CMS8_pp_Hp_tb
Definition: THDMWcache.h:460
THDMWcache::runTHDMWparameters
void runTHDMWparameters()
Definition: THDMWcache.cpp:904
THDMWcache::ip_th_pp_Si_bb_cache
double ip_th_pp_Si_bb_cache[4][CacheSize]
Definition: THDMWcache.h:382
THDMWcache::lambda4_at_Q
double lambda4_at_Q
Definition: THDMWcache.h:57
THDMWcache::Q_THDMW
double Q_THDMW
Definition: THDMWcache.h:831
THDMWcache::CMS8_pp_phi_bb
gslpp::matrix< double > CMS8_pp_phi_bb
Definition: THDMWcache.h:455
gslpp::complex
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
THDMW::getTHDMW_mu6
double getTHDMW_mu6() const
A getter for .
Definition: THDMW.h:529
THDM_BR_h_bb
THDM branching ratio of .
Definition: lightHiggs.h:21
THDMW::getTHDMW_lambda1
double getTHDMW_lambda1() const
A getter for .
Definition: THDMW.h:409
THDMWcache::MadGraph_pp_Sr_bb
gslpp::matrix< double > MadGraph_pp_Sr_bb
Definition: THDMWcache.h:480
gslpp::log
complex log(const complex &z)
Definition: gslpp_complex.cpp:342
THDMWcache::rh_QdQd
double rh_QdQd
Definition: THDMWcache.h:147
THDMWcache::A0_MZ2_mSp2_cache
gslpp::complex A0_MZ2_mSp2_cache[3][CacheSize]
Definition: THDMWcache.h:366
gslpp::matrix< gslpp::complex >
THDMW::getTHDMW_mu4
double getTHDMW_mu4() const
A getter for .
Definition: THDMW.h:508
THDMWcache::readTable
gslpp::matrix< double > readTable(std::string filename, int rowN, int colN)
This function reads values from a table and returns them as an array.
Definition: THDMWcache.cpp:1423
THDMWcache::ip_th_pp_Sr_tt_cache
double ip_th_pp_Sr_tt_cache[5][CacheSize]
Definition: THDMWcache.h:394
THDMWcache::MadGraph_pp_Srtt_tttt
gslpp::matrix< double > MadGraph_pp_Srtt_tttt
Definition: THDMWcache.h:469
THDMWcache::ip_th_pp_Sibb_bbbb
double ip_th_pp_Sibb_bbbb(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> Si bbar b -> b bbar bbar b.
Definition: THDMWcache.cpp:2518
RunnerTHDMW::RGERunnerMW
virtual double RGERunnerMW(double InitialValues[], unsigned long int NumberOfRGEs, double Q1, double Q2, int order, double Rpeps, double tNLOuni)
Definition: RunnerTHDMW.cpp:882
QCD::ELECTRON
Definition: QCD.h:312
THDMWcache::lambda3
double lambda3
Definition: THDMWcache.h:842
THDMWcache::ip_th_pp_Sr_jj
double ip_th_pp_Sr_jj(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr -> j j.
Definition: THDMWcache.cpp:2429
THDMWcache::pp_Si_bb_TH8
double pp_Si_bb_TH8
Definition: THDMWcache.h:101
THDMW::getTHDMW_kappa1
double getTHDMW_kappa1() const
A getter for .
Definition: THDMW.h:662
THDM_BR_h_gaga
THDM branching ratio of .
Definition: lightHiggs.h:42
THDMWcache::THoEX_pp_Srtt_tttt
double THoEX_pp_Srtt_tttt
Definition: THDMWcache.h:104
THDMW::getTHDMW_etaU
double getTHDMW_etaU() const
A getter for .
Definition: THDMW.h:704
THDMWcache::kappa3
double kappa3
Definition: THDMWcache.h:863
StandardModel
A model class for the Standard Model.
Definition: StandardModel.h:474
THDMWcache::ip_ex_ggF_H_hh_bbbb_CMS13_cache
double ip_ex_ggF_H_hh_bbbb_CMS13_cache[2][CacheSize]
Definition: THDMWcache.h:420
THDMW::getTHDMW_nu3
double getTHDMW_nu3() const
A getter for .
Definition: THDMW.h:558
THDMWcache::pp_Sr_bb_TH8
double pp_Sr_bb_TH8
Definition: THDMWcache.h:99
THDMWcache::NLOunitarityeigenvalues
gslpp::vector< gslpp::complex > NLOunitarityeigenvalues
Definition: THDMWcache.h:142
THDMWcache::ip_ex_pp_Hpm_tb_ATLAS8_cache_e
double ip_ex_pp_Hpm_tb_ATLAS8_cache_e[2][CacheSize]
Definition: THDMWcache.h:413
THDMWcache::MadGraph_pp_Sr_jj
gslpp::matrix< double > MadGraph_pp_Sr_jj
Definition: THDMWcache.h:470
THDMWcache::omega4
double omega4
Definition: THDMWcache.h:860
THDMWcache::MadGraph_pp_Sr_bb_8TeV
gslpp::matrix< double > MadGraph_pp_Sr_bb_8TeV
Definition: THDMWcache.h:481
THDMW::getTHDMW_kappa2
double getTHDMW_kappa2() const
A getter for .
Definition: THDMW.h:675
THDMWcache::mu4_at_Q
double mu4_at_Q
Definition: THDMWcache.h:60
THDMW
A base class for symmetric Two-Higgs-Doublet-Manohar-Wise models.
Definition: THDMW.h:233
THDMWcache::B00_MZ2_MZ2_mSi2_mSp2
gslpp::complex B00_MZ2_MZ2_mSi2_mSp2(const double MZ2, const double mSi2, const double mSp2) const
Definition: THDMWcache.cpp:252
RunnerTHDMW::RGERunnercustodialMW
virtual double RGERunnercustodialMW(double InitialValues[], unsigned long int NumberOfRGEs, double Q1, double Q2, int order, double Rpeps, double tNLOuni)
Definition: RunnerTHDMW.cpp:927
THDMWcache::ip_th_pp_SrSr_jjjj_cache
double ip_th_pp_SrSr_jjjj_cache[5][CacheSize]
Definition: THDMWcache.h:391
THDMWcache::MadGraph_pp_Sibb_bbbb_8TeV
gslpp::matrix< double > MadGraph_pp_Sibb_bbbb_8TeV
Definition: THDMWcache.h:477
THDMWcache::rh_ll
double rh_ll
Definition: THDMWcache.h:148
THDMWcache::ip_th_pp_Si_bb_8TeV_cache
double ip_th_pp_Si_bb_8TeV_cache[4][CacheSize]
Definition: THDMWcache.h:381
THDMWcache::I_H_W_cache
gslpp::complex I_H_W_cache[3][CacheSize]
Definition: THDMWcache.h:348
THDMWcache::ip_ex_bb_phi_bb_CMS8_cache
double ip_ex_bb_phi_bb_CMS8_cache[2][CacheSize]
Definition: THDMWcache.h:397
THDMWcache::A0_MZ2_mSr2_cache
gslpp::complex A0_MZ2_mSr2_cache[3][CacheSize]
Definition: THDMWcache.h:367
THDMWcache::myRunnerTHDMW
RunnerTHDMW * myRunnerTHDMW
Definition: THDMWcache.h:165
THDMWcache::A_H_Hp
gslpp::complex A_H_Hp(const double mHp2, const double mH, const double cW2, const double MZ) const
Amplitude for a CP-even Higgs boson decay to a photon and a Z boson including the charged Higgs boson...
Definition: THDMWcache.cpp:731
THDMWcache::ip_ex_bb_phi_tt_ATLAS13_cache_e
double ip_ex_bb_phi_tt_ATLAS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:402
THDMWcache::I_h_U
gslpp::complex I_h_U(const double mHl2, const double Mu, const double Mc, const double Mt) const
Amplitude for the SM Higgs boson decay to diphotons including the up-type quarks in the loop.
Definition: THDMWcache.cpp:345
lambda1
An observable class for the quartic Higgs potential coupling .
Definition: THDMquantities.h:382
THDMWcache::THoEX_pp_Sr_bb
double THoEX_pp_Sr_bb
Definition: THDMWcache.h:113
RunnerTHDMW::RGERunnerTHDMW
virtual double RGERunnerTHDMW(double InitialValues[], unsigned long int NumberOfRGEs, double Q1, double Q2, int order, double Rpeps, double tNLOuni)
Definition: RunnerTHDMW.cpp:837
THDMWcache::I_h_D
gslpp::complex I_h_D(const double mHl2, const double Md, const double Ms, const double Mb) const
Amplitude for the SM Higgs boson decay to diphotons including the down-type quarks in the loop.
Definition: THDMWcache.cpp:396
THDM_BR_h_tautau
THDM branching ratio of .
Definition: lightHiggs.h:63
THDMW::getTHDMW_sina
double getTHDMW_sina() const
A getter for .
Definition: THDMW.h:401
THDMWcache::THoEX_pp_Stb_tbtb
double THoEX_pp_Stb_tbtb
Definition: THDMWcache.h:107
THDMWcache::interpolate4D
double interpolate4D(gslpp::matrix< double > arrayTab, double x, double y, double z, double v)
Linearly interpolates a table with four parameter dimensions.
Definition: THDMWcache.cpp:1551
THDMWcache::RpepsTHDMW
double RpepsTHDMW
Definition: THDMWcache.h:140
THDMWcache::ATLAS8_pp_Hpm_tb
gslpp::matrix< double > ATLAS8_pp_Hpm_tb
Definition: THDMWcache.h:458
THDMWcache::nu1_at_Q
double nu1_at_Q
Definition: THDMWcache.h:61
THDMW::getTHDMW_etaD
double getTHDMW_etaD() const
A getter for .
Definition: THDMW.h:712
THDMWcache::omega3
double omega3
Definition: THDMWcache.h:859
THDMWcache::B00_MZ2_MZ2_mSr2_mSp2
gslpp::complex B00_MZ2_MZ2_mSr2_mSp2(const double MZ2, const double mSr2, const double mSp2) const
Definition: THDMWcache.cpp:238
THDMWcache::mu4
double mu4
Definition: THDMWcache.h:849
THDMWcache::betaeigenvalues
gslpp::vector< gslpp::complex > betaeigenvalues
Definition: THDMWcache.h:826
THDMWcache::mu5
double mu5
Definition: THDMWcache.h:850
THDMWcache::CMS13_pp_R_gg
gslpp::matrix< double > CMS13_pp_R_gg
Definition: THDMWcache.h:457
THDMWcache::nu1
double nu1
Definition: THDMWcache.h:852
THDMWcache::ip_ex_pp_phi_hh_bbbb_CMS8
double ip_ex_pp_phi_hh_bbbb_CMS8(double mass)
Interpolating function for the observed CMS upper limit on a scalar resonance decaying to two bosons...
Definition: THDMWcache.cpp:1974
THDMWcache::pp_Stb_tbtb_TH13
double pp_Stb_tbtb_TH13
Definition: THDMWcache.h:92
THDMWcache::lambda5
double lambda5
Definition: THDMWcache.h:844
THDMWcache::ip_ex_tt_phi_tt_ATLAS13
double ip_ex_tt_phi_tt_ATLAS13(double mass)
Interpolating function for the observed ATLAS upper limit on a tt associated scalar resonance decayin...
Definition: THDMWcache.cpp:2094
StandardModel::c02
double c02() const
The square of the cosine of the weak mixing angle defined without weak radiative corrections.
Definition: StandardModel.cpp:939
THDMWcache::mSpsq
double mSpsq
Definition: THDMWcache.h:83
THDMWcache::I_HH_L_cache
gslpp::complex I_HH_L_cache[4][CacheSize]
Definition: THDMWcache.h:346
THDMWcache::nu5
double nu5
Definition: THDMWcache.h:856
THDMWcache::pp_SrSr_jjjj_TH13
double pp_SrSr_jjjj_TH13
Definition: THDMWcache.h:91
THDMWcache::nu3_at_Q
double nu3_at_Q
Definition: THDMWcache.h:69
THDMWcache::ip_ex_pp_H_hh_bbbb_CMS13_e
double ip_ex_pp_H_hh_bbbb_CMS13_e(double mass)
Interpolating function for the expected CMS upper limit on a scalar resonance decaying to two bosons...
Definition: THDMWcache.cpp:2217
THDMWcache::ip_th_pp_Sibb_bbbb_8TeV_cache
double ip_th_pp_Sibb_bbbb_8TeV_cache[4][CacheSize]
Definition: THDMWcache.h:386
THDMWcache::nu5_at_Q
double nu5_at_Q
Definition: THDMWcache.h:70
lambda4
An observable class for the quartic Higgs potential coupling .
Definition: THDMquantities.h:451
THDMWcache::THDM_BR_h_ZZ
double THDM_BR_h_ZZ
Definition: THDMWcache.h:158
Particle::getMass
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
THDMWcache::mhsq
double mhsq
Definition: THDMWcache.h:77
THDMWcache::pp_Sitt_tttt_TH13
double pp_Sitt_tttt_TH13
Definition: THDMWcache.h:93
THDMWcache::I_A_D
gslpp::complex I_A_D(const double mA2, const double Ms, const double Mb) const
Amplitude for a CP-odd Higgs boson decay to diphotons including the strange and bottom quarks in the ...
Definition: THDMWcache.cpp:431
THDMWcache::CMS13_pp_phi_bb
gslpp::matrix< double > CMS13_pp_phi_bb
Definition: THDMWcache.h:454
THDMWcache::ip_ex_bb_H_bb_CMS13_cache
double ip_ex_bb_H_bb_CMS13_cache[2][CacheSize]
Definition: THDMWcache.h:425
THDMW::getTHDMW_mu2
double getTHDMW_mu2() const
A getter for .
Definition: THDMW.h:488
THDMWcache::THDM_BR_h_WW
double THDM_BR_h_WW
Definition: THDMWcache.h:157
THDMWcache::ip_th_pp_Sitt_tttt
double ip_th_pp_Sitt_tttt(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> Si tbar t -> t tbar tbar t.
Definition: THDMWcache.cpp:2473
THDMWcache::mSIsq
double mSIsq
Definition: THDMWcache.h:81
THDMWcache::CMS13_ggF_H_hh_bbbb_e
gslpp::matrix< double > CMS13_ggF_H_hh_bbbb_e
Definition: THDMWcache.h:456
THDMWcache::A_A_L_cache
gslpp::complex A_A_L_cache[6][CacheSize]
Definition: THDMWcache.h:359
THDMW::getTHDMW_lambda5
double getTHDMW_lambda5() const
A getter for .
Definition: THDMW.h:456
THDMWcache::A_A_L
gslpp::complex A_A_L(const double mA2, const double cW2, const double Mmu, const double Mtau, const double MZ) const
Amplitude for a CP-odd Higgs boson decay to a photon and a Z boson including muons and taus in the lo...
Definition: THDMWcache.cpp:694
THDMWcache::MadGraph_pp_Sr_tt
gslpp::matrix< double > MadGraph_pp_Sr_tt
Definition: THDMWcache.h:468
THDMWcache::B00_MZ2_MZ2_mSp2_mSp2_cache
gslpp::complex B00_MZ2_MZ2_mSp2_mSp2_cache[3][CacheSize]
Definition: THDMWcache.h:376
THDMWcache::ATLAS13_pp_H_hh_bbbb
gslpp::matrix< double > ATLAS13_pp_H_hh_bbbb
Definition: THDMWcache.h:452
THDMWcache::A_HH_U_cache
gslpp::complex A_HH_U_cache[6][CacheSize]
Definition: THDMWcache.h:352
QCD::TOP
Definition: QCD.h:328
THDMWcache::ip_ex_pp_Hp_tb_ATLAS13
double ip_ex_pp_Hp_tb_ATLAS13(double mass)
Interpolating function for the observed ATLAS upper limit on a singly charged scalar resonance decayi...
Definition: THDMWcache.cpp:2294
THDMWcache::I_H_W
gslpp::complex I_H_W(const double mH, const double MW) const
Amplitude for a CP-even Higgs boson decay to diphotons including the W boson in the loop.
Definition: THDMWcache.cpp:499
THDMWcache::ip_th_pp_Sr_bb
double ip_th_pp_Sr_bb(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr -> b bbar.
Definition: THDMWcache.cpp:2554
THDMWcache::I_A_D_cache
gslpp::complex I_A_D_cache[4][CacheSize]
Definition: THDMWcache.h:344
StandardModel::computeGammaHTotal
double computeGammaHTotal() const
The Higgs total width in the Standard Model.
Definition: StandardModel.h:2311
THDMWcache::CacheCheckReal
int CacheCheckReal(const double cache[][CacheSize], const int NumPar, const double params[]) const
Check whether for the latest set of parameters a value is in the cache.
Definition: THDMWcache.cpp:97
THDMWcache::g_func
gslpp::complex g_func(const double x) const
Definition: THDMWcache.cpp:758
gslpp::pow
complex pow(const complex &z1, const complex &z2)
Definition: gslpp_complex.cpp:395
THDMWcache::ip_ex_bb_phi_bb_CMS8_e
double ip_ex_bb_phi_bb_CMS8_e(double mass)
Interpolating function for the expected CMS upper limit on a bottom quark produced scalar resonance d...
Definition: THDMWcache.cpp:2018
gslpp::sqrt
complex sqrt(const complex &z)
Definition: gslpp_complex.cpp:385
THDMW::getTHDMW_kappa3
double getTHDMW_kappa3() const
A getter for .
Definition: THDMW.h:688
THDMW::getTHDMW_cosa
double getTHDMW_cosa() const
A getter for .
Definition: THDMW.h:393
THDMWcache::ip_th_pp_Stb_tbtb_cache
double ip_th_pp_Stb_tbtb_cache[4][CacheSize]
Definition: THDMWcache.h:390
gslpp::complex::i
static const complex & i()
Definition: gslpp_complex.cpp:154
THDMWcache::ip_ex_pp_phi_bb_CMS13_cache_e
double ip_ex_pp_phi_bb_CMS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:409
THDMWcache::CMS8_pp_H_hh_bbbb_e
gslpp::matrix< double > CMS8_pp_H_hh_bbbb_e
Definition: THDMWcache.h:450
THDMWcache::mSsq
double mSsq
Definition: THDMWcache.h:845
THDMWcache::A_HH_D
gslpp::complex A_HH_D(const double mHh2, const double cW2, const double Ms, const double Mb, const double MZ) const
Amplitude for a heavy CP-even Higgs boson decay to a photon and a Z boson including the strange and b...
Definition: THDMWcache.cpp:612
THDMWcache::THoEX_pp_Sibb_bbbb_8TeV
double THoEX_pp_Sibb_bbbb_8TeV
Definition: THDMWcache.h:112
THDMWcache::PV
const PVfunctions PV
Definition: THDMWcache.h:166
THDMWcache::pp_Sr_tt_TH13
double pp_Sr_tt_TH13
Definition: THDMWcache.h:88
THDMWcache::I_A_U
gslpp::complex I_A_U(const double mA2, const double Mc, const double Mt) const
Amplitude for a CP-odd Higgs boson decay to diphotons including the charm and top quarks in the loop.
Definition: THDMWcache.cpp:380
THDMWcache::unitarityeigenvalues
gslpp::vector< gslpp::complex > unitarityeigenvalues
Definition: THDMWcache.h:141
THDMWcache::I_HH_U_cache
gslpp::complex I_HH_U_cache[4][CacheSize]
Definition: THDMWcache.h:340
THDMWcache::A_H_W
gslpp::complex A_H_W(const double mH, const double cW2, const double MW, const double MZ) const
Amplitude for a CP-even Higgs boson decay to a photon and a Z boson including the W boson in the loop...
Definition: THDMWcache.cpp:713
THDMW::getTHDMW_sinb
double getTHDMW_sinb() const
A getter for .
Definition: THDMW.h:361
THDMWcache::ip_ex_pp_Hp_tb_CMS8_cache
double ip_ex_pp_Hp_tb_CMS8_cache[2][CacheSize]
Definition: THDMWcache.h:414
THDMW::getRpepsTHDMW
double getRpepsTHDMW() const
A getter for the minimal R' value.
Definition: THDMW.h:747
THDMWcache::rh_VV
double rh_VV
Definition: THDMWcache.h:145
THDMWcache::mu5_at_Q
double mu5_at_Q
Definition: THDMWcache.h:72
THDMWcache::ip_ex_pp_H_hh_bbbb_ATLAS13_cache_e
double ip_ex_pp_H_hh_bbbb_ATLAS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:406
THDMWcache::MadGraph_pp_Srbb_bbbb_8TeV
gslpp::matrix< double > MadGraph_pp_Srbb_bbbb_8TeV
Definition: THDMWcache.h:475
THDMW::getTHDMW_lambda2
double getTHDMW_lambda2() const
A getter for .
Definition: THDMW.h:417
THDMWcache::ip_th_pp_Sibb_bbbb_cache
double ip_th_pp_Sibb_bbbb_cache[4][CacheSize]
Definition: THDMWcache.h:385
THDMWcache::THoEX_pp_Sitt_tttt
double THoEX_pp_Sitt_tttt
Definition: THDMWcache.h:108
THDMWcache::omega1_at_Q
double omega1_at_Q
Definition: THDMWcache.h:62
THDMWcache::A_HH_L
gslpp::complex A_HH_L(const double mHh2, const double cW2, const double Mmu, const double Mtau, const double MZ) const
Amplitude for a heavy CP-even Higgs boson decay to a photon and a Z boson including muons and taus in...
Definition: THDMWcache.cpp:674
THDMWcache::B00_MZ2_MZ2_mSp2_mSp2
gslpp::complex B00_MZ2_MZ2_mSp2_mSp2(const double MZ2, const double mSp2) const
Definition: THDMWcache.cpp:282
THDMWcache::ip_ex_pp_SS_jjjj_ATLAS13
double ip_ex_pp_SS_jjjj_ATLAS13(double mass)
Interpolating function for the expected ATLAS upper limit on pp -> coloron coloron -> j j j j.
Definition: THDMWcache.cpp:2369
THDMWcache.h
THDMWcache::A_HH_U
gslpp::complex A_HH_U(const double mHh2, const double cW2, const double Mc, const double Mt, const double MZ) const
Amplitude for a heavy CP-even Higgs boson decay to a photon and a Z boson including the charm and top...
Definition: THDMWcache.cpp:551
lambda2
An observable class for the quartic Higgs potential coupling .
Definition: THDMquantities.h:405
THDMWcache::kappa1
double kappa1
Definition: THDMWcache.h:861
THDMWcache::A_A_U
gslpp::complex A_A_U(const double mA2, const double cW2, const double Mc, const double Mt, const double MZ) const
Amplitude for a CP-odd Higgs boson decay to a photon and a Z boson including the charm and top quarks...
Definition: THDMWcache.cpp:571
THDMWcache::kappa1_at_Q
double kappa1_at_Q
Definition: THDMWcache.h:63
QCD::getQuarks
Particle getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:534
THDMWcache::ip_ex_tt_phi_tt_ATLAS13_cache_e
double ip_ex_tt_phi_tt_ATLAS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:404
THDMWcache::THoEX_pp_Srbb_bbbb_8TeV
double THoEX_pp_Srbb_bbbb_8TeV
Definition: THDMWcache.h:110
gslpp::matrix< double >::size_i
size_t size_i() const
Definition: gslpp_matrix_double.cpp:132
THDMWcache::I_HH_D_cache
gslpp::complex I_HH_D_cache[4][CacheSize]
Definition: THDMWcache.h:343
THDMW::getRGEorderflag
std::string getRGEorderflag() const
A getter for the switch for NLO RGE and approximate NLO RGE.
Definition: THDMW.h:337
THDMWcache::sinb
double sinb
Definition: THDMWcache.h:835
gslpp::vector< double >
A class for constructing and defining operations on real vectors.
Definition: gslpp_vector_double.h:33
THDMWcache::MadGraph_pp_Stb_tbtb
gslpp::matrix< double > MadGraph_pp_Stb_tbtb
Definition: THDMWcache.h:472
THDMWcache::lambda3_at_Q
double lambda3_at_Q
Definition: THDMWcache.h:56
THDMWcache::A_HH_L_cache
gslpp::complex A_HH_L_cache[6][CacheSize]
Definition: THDMWcache.h:358
THDMW::getTHDMW_omega3
double getTHDMW_omega3() const
A getter for .
Definition: THDMW.h:617
THDMWcache::pp_Sibb_bbbb_TH8
double pp_Sibb_bbbb_TH8
Definition: THDMWcache.h:97
THDMW::getTHDMW_tanb
double getTHDMW_tanb() const
A getter for .
Definition: THDMW.h:353
THDMWcache::I_HH_L
gslpp::complex I_HH_L(const double mHh2, const double Mmu, const double Mtau) const
Amplitude for a heavy CP-even Higgs boson decay to diphotons including muons and taus in the loop.
Definition: THDMWcache.cpp:466
THDMWcache::setOtherParameters
double setOtherParameters()
Definition: THDMWcache.cpp:2737
THDMWcache::ip_ex_tt_phi_tt_ATLAS13_e
double ip_ex_tt_phi_tt_ATLAS13_e(double mass)
Interpolating function for the expected ATLAS upper limit on a tt associated scalar resonance decayin...
Definition: THDMWcache.cpp:2110
THDMWcache::lambda4
double lambda4
Definition: THDMWcache.h:843
THDMWcache::ip_ex_bb_phi_tt_ATLAS13
double ip_ex_bb_phi_tt_ATLAS13(double mass)
Interpolating function for the observed ATLAS upper limit on a bb associated scalar resonance decayin...
Definition: THDMWcache.cpp:2062
THDMWcache::ip_ex_pp_Hp_tb_CMS8
double ip_ex_pp_Hp_tb_CMS8(double mass)
Interpolating function for the observed CMS upper limit on a singly charged scalar resonance decaying...
Definition: THDMWcache.cpp:2264
THDMW::getTHDMW_S_b
double getTHDMW_S_b() const
A getter for .
Definition: THDMW.h:729
RunnerTHDMW
An RGE running algorithm for the THDMW parameters.
Definition: RunnerTHDMW.h:33
THDMWcache::MZ
double MZ
Definition: THDMWcache.h:832
PVfunctions::B00
gslpp::complex B00(const double mu2, const double p2, const double m02, const double m12) const
.
Definition: PVfunctions.cpp:208
THDMWcache::MadGraph_pp_Si_bb_8TeV
gslpp::matrix< double > MadGraph_pp_Si_bb_8TeV
Definition: THDMWcache.h:479
THDMWcache::mu1_at_Q
double mu1_at_Q
Definition: THDMWcache.h:58
THDMWcache::computeHHlimits
void computeHHlimits()
Definition: THDMWcache.cpp:2639
THDMWcache::ip_th_pp_SrSr_jjjj
double ip_th_pp_SrSr_jjjj(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr Sr ->j j j j.
Definition: THDMWcache.cpp:2443
THDMWcache::pp_Sibb_bbbb_TH13
double pp_Sibb_bbbb_TH13
Definition: THDMWcache.h:96
THDMWcache::A_h_L_cache
gslpp::complex A_h_L_cache[7][CacheSize]
Definition: THDMWcache.h:357
THDMWcache::ip_ex_pp_H_hh_bbbb_CMS13_cache_e
double ip_ex_pp_H_hh_bbbb_CMS13_cache_e[2][CacheSize]
Definition: THDMWcache.h:411
THDMW::Mw
virtual double Mw() const
Definition: THDMW.cpp:493
THDMWcache::ATLAS8_pp_Hpm_tb_e
gslpp::matrix< double > ATLAS8_pp_Hpm_tb_e
Definition: THDMWcache.h:459
THDMW::getTHDMW_mu3
double getTHDMW_mu3() const
A getter for .
Definition: THDMW.h:501
THDMWcache::A_A_D
gslpp::complex A_A_D(const double mA2, const double cW2, const double Ms, const double Mb, const double MZ) const
Amplitude for a CP-odd Higgs boson decay to a photon and a Z boson including the strange and bottom q...
Definition: THDMWcache.cpp:632
THDMWcache::A_h_U
gslpp::complex A_h_U(const double mHl2, const double cW2, const double Mu, const double Mc, const double Mt, const double MZ) const
Amplitude for the SM Higgs boson decay to a photon and a Z boson including the up-type quarks in the ...
Definition: THDMWcache.cpp:529
THDMWcache::A_A_U_cache
gslpp::complex A_A_U_cache[6][CacheSize]
Definition: THDMWcache.h:353
THDMWcache::B0_MZ2_0_mSp2_mSp2
gslpp::complex B0_MZ2_0_mSp2_mSp2(const double MZ2, const double mSp2) const
Definition: THDMWcache.cpp:183
StandardModel::getMz
double getMz() const
A get method to access the mass of the boson .
Definition: StandardModel.h:718
THDMWcache::ATLAS13_tt_phi_tt_e
gslpp::matrix< double > ATLAS13_tt_phi_tt_e
Definition: THDMWcache.h:453
THDMWcache::Gamma_h
double Gamma_h
Definition: THDMWcache.h:153
THDMWcache::I_H_Hp_cache
gslpp::complex I_H_Hp_cache[3][CacheSize]
Definition: THDMWcache.h:349
THDMWcache::lambda2_at_Q
double lambda2_at_Q
Definition: THDMWcache.h:55
THDMWcache::I_A_L_cache
gslpp::complex I_A_L_cache[4][CacheSize]
Definition: THDMWcache.h:347
THDMWcache::B00_MZ2_MZ2_mSr2_mSi2_cache
gslpp::complex B00_MZ2_MZ2_mSr2_mSi2_cache[4][CacheSize]
Definition: THDMWcache.h:374
THDMWcache::mu6
double mu6
Definition: THDMWcache.h:851
THDMWcache::A0_MZ2_mSi2
gslpp::complex A0_MZ2_mSi2(const double MZ2, const double mSr2) const
Definition: THDMWcache.cpp:169
THDMWcache::ip_ex_bb_H_bb_CMS13
double ip_ex_bb_H_bb_CMS13(double mass)
Interpolating function for the expected CMS upper limit on pp -> H b bbar -> b bbar b bbar.
Definition: THDMWcache.cpp:2383
THDMWcache::ip_ex_pp_R_gg_CMS13
double ip_ex_pp_R_gg_CMS13(double mass)
Interpolating function for the expected CMS upper limit for resonances decaying to gluons.
Definition: THDMWcache.cpp:2355
THDMWcache::I_H_Hp
gslpp::complex I_H_Hp(const double mHp2, const double mH) const
Amplitude for a CP-even Higgs boson decay to diphotons including the charged Higgs boson in the loop.
Definition: THDMWcache.cpp:514
THDMWcache::ip_th_pp_Srbb_bbbb
double ip_th_pp_Srbb_bbbb(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr b bbar -> b bbar b bbar.
Definition: THDMWcache.cpp:2488
THDMWcache::ip_ex_pp_Hp_tb_CMS8_cache_e
double ip_ex_pp_Hp_tb_CMS8_cache_e[2][CacheSize]
Definition: THDMWcache.h:415
gslpp::log10
complex log10(const complex &z)
Definition: gslpp_complex.cpp:351
THDMWcache::ip_th_pp_Srtt_tttt
double ip_th_pp_Srtt_tttt(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr t tbar -> t tbar t tbar.
Definition: THDMWcache.cpp:2415
THDMWcache::m11sq
double m11sq
Definition: THDMWcache.h:75
THDMW::getTHDMW_nu1
double getTHDMW_nu1() const
A getter for .
Definition: THDMW.h:542
THDMWcache::MadGraph_pp_SrSr_jjjj
gslpp::matrix< double > MadGraph_pp_SrSr_jjjj
Definition: THDMWcache.h:471
THDMWcache::CMS13_pp_H_hh_bbbb
gslpp::matrix< double > CMS13_pp_H_hh_bbbb
Definition: THDMWcache.h:454
THDMWcache::ip_ex_pp_Hpm_tb_ATLAS8
double ip_ex_pp_Hpm_tb_ATLAS8(double mass)
Interpolating function for the observed ATLAS upper limit on a singly charged scalar resonance decayi...
Definition: THDMWcache.cpp:2232
THDMWcache::ip_ex_ggF_H_hh_bbbb_CMS13
double ip_ex_ggF_H_hh_bbbb_CMS13(double mass)
Interpolating function for the expected ATLAS upper limit on a singly charged scalar resonance decayi...
Definition: THDMWcache.cpp:2311
THDMWcache::pp_Sr_bb_TH13
double pp_Sr_bb_TH13
Definition: THDMWcache.h:98
THDMWcache::A_h_U_cache
gslpp::complex A_h_U_cache[7][CacheSize]
Definition: THDMWcache.h:351
THDMWcache::pp_Srbb_bbbb_TH13
double pp_Srbb_bbbb_TH13
Definition: THDMWcache.h:94
THDMWcache::read
void read()
Fills all required arrays with the values read from the tables.
Definition: THDMWcache.cpp:1801
THDMWcache::ip_ex_pp_Hpm_tb_ATLAS8_cache
double ip_ex_pp_Hpm_tb_ATLAS8_cache[2][CacheSize]
Definition: THDMWcache.h:412
THDMW::getTHDMW_omega1
double getTHDMW_omega1() const
A getter for .
Definition: THDMW.h:591
QCD::STRANGE
Definition: QCD.h:327
THDMWcache::ATLAS13_pp_H_hh_bbbb_e
gslpp::matrix< double > ATLAS13_pp_H_hh_bbbb_e
Definition: THDMWcache.h:453
THDMWcache::ip_th_pp_Sitt_tttt_cache
double ip_th_pp_Sitt_tttt_cache[4][CacheSize]
Definition: THDMWcache.h:389
lambda5
An observable class for the quartic Higgs potential coupling .
Definition: THDMquantities.h:474
THDMWcache::rh_Zga
double rh_Zga
Definition: THDMWcache.h:150
THDMWcache::omega4_at_Q
double omega4_at_Q
Definition: THDMWcache.h:68
THDMWcache::CacheShift
void CacheShift(gslpp::complex cache[][CacheSize], const int NumPar, const double params[], const gslpp::complex newResult) const
Adds a new result and its parameters into the cache.
Definition: THDMWcache.cpp:109
THDMWcache::ip_th_pp_Sr_tt
double ip_th_pp_Sr_tt(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr -> t tbar.
Definition: THDMWcache.cpp:2401
THDMWcache::ATLAS13_tt_phi_tt
gslpp::matrix< double > ATLAS13_tt_phi_tt
Definition: THDMWcache.h:452
THDMWcache::m22sq
double m22sq
Definition: THDMWcache.h:76
THDMWcache::THoEX_pp_Sr_jj
double THoEX_pp_Sr_jj
Definition: THDMWcache.h:105
THDMWcache::ip_ex_pp_phi_bb_CMS8
double ip_ex_pp_phi_bb_CMS8(double mass)
Interpolating function for the observed CMS upper limit on a scalar resonance decaying to a b quark p...
Definition: THDMWcache.cpp:2169
THDMWcache::ip_ex_bb_phi_bb_CMS8_cache_e
double ip_ex_bb_phi_bb_CMS8_cache_e[2][CacheSize]
Definition: THDMWcache.h:398
THDMWcache::mu6_at_Q
double mu6_at_Q
Definition: THDMWcache.h:73
THDMW::getTHDMW_mu5
double getTHDMW_mu5() const
A getter for .
Definition: THDMW.h:516
THDMWcache::~THDMWcache
~THDMWcache()
THDMWcache destructor.
Definition: THDMWcache.cpp:78
THDMWcache::ip_th_pp_Stb_tbtb
double ip_th_pp_Stb_tbtb(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> S+ tbar b -> t bbar tbar b.
Definition: THDMWcache.cpp:2458
THDMWcache::ip_ex_pp_H_hh_bbbb_CMS13_cache
double ip_ex_pp_H_hh_bbbb_CMS13_cache[2][CacheSize]
Definition: THDMWcache.h:410
THDMW::getTHDMW_omega4
double getTHDMW_omega4() const
A getter for .
Definition: THDMW.h:633
THDMWcache::ip_ex_pp_H_hh_bbbb_ATLAS13_e
double ip_ex_pp_H_hh_bbbb_ATLAS13_e(double mass)
Interpolating function for the expected ATLAS upper limit on a spin-2 resonance decaying to two boso...
Definition: THDMWcache.cpp:2140
THDMWcache::cosa
double cosa
Definition: THDMWcache.h:839
THDMWcache::updateCache
void updateCache()
Definition: THDMWcache.cpp:2807
THDMWcache::MadGraph_pp_Sibb_bbbb
gslpp::matrix< double > MadGraph_pp_Sibb_bbbb
Definition: THDMWcache.h:476
THDMWcache::ip_ex_pp_phi_bb_CMS13_e
double ip_ex_pp_phi_bb_CMS13_e(double mass)
Interpolating function for the expected CMS upper limit on a scalar resonance decaying to a b quark p...
Definition: THDMWcache.cpp:2187
THDMWcache::A_HH_D_cache
gslpp::complex A_HH_D_cache[6][CacheSize]
Definition: THDMWcache.h:355
THDMWcache::ip_ex_pp_Hp_tb_CMS8_e
double ip_ex_pp_Hp_tb_CMS8_e(double mass)
Interpolating function for the expected CMS upper limit on a singly charged scalar resonance decaying...
Definition: THDMWcache.cpp:2280
THDMWcache::ATLAS13_pp_Gkk_tt
gslpp::matrix< double > ATLAS13_pp_Gkk_tt
Definition: THDMWcache.h:466
THDMWcache::B00_MZ2_MZ2_mSr2_mSi2
gslpp::complex B00_MZ2_MZ2_mSr2_mSi2(const double MZ2, const double mSr2, const double mSi2) const
Definition: THDMWcache.cpp:266
THDMWcache::ip_ex_bb_phi_tt_ATLAS13_cache
double ip_ex_bb_phi_tt_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:401
THDMWcache::CMS13_pp_H_hh_bbbb_e
gslpp::matrix< double > CMS13_pp_H_hh_bbbb_e
Definition: THDMWcache.h:456
THDMWcache::Int2
gslpp::complex Int2(const double tau, const double lambda) const
Definition: THDMWcache.cpp:776
THDMWcache::ip_ex_gg_phi_tt_ATLAS8_e
double ip_ex_gg_phi_tt_ATLAS8_e(double mass)
Interpolating function for the expected ATLAS upper limit on a gluon-gluon produced scalar resonance ...
Definition: THDMWcache.cpp:2048
THDMWcache::ip_ex_tt_phi_tt_ATLAS13_cache
double ip_ex_tt_phi_tt_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:403
THDMWcache::A_H_W_cache
gslpp::complex A_H_W_cache[5][CacheSize]
Definition: THDMWcache.h:360
THDMWcache::A_h_D
gslpp::complex A_h_D(const double mHl2, const double cW2, const double Md, const double Ms, const double Mb, const double MZ) const
Amplitude for the SM Higgs boson decay to a photon and a Z boson including the down-type quarks in th...
Definition: THDMWcache.cpp:590
PVfunctions::B0
gslpp::complex B0(const double mu2, const double p2, const double m02, const double m12) const
.
Definition: PVfunctions.cpp:41
THDMWcache::ATLAS13_pp_SS_jjjj
gslpp::matrix< double > ATLAS13_pp_SS_jjjj
Definition: THDMWcache.h:467
THDMWcache::THoEX_pp_Sibb_bbbb
double THoEX_pp_Sibb_bbbb
Definition: THDMWcache.h:111
THDMWcache::mHpsq
double mHpsq
Definition: THDMWcache.h:82
THDMWcache::ATLAS8_gg_phi_tt
gslpp::matrix< double > ATLAS8_gg_phi_tt
Definition: THDMWcache.h:446
THDMWcache::MadGraph_pp_Sitt_tttt
gslpp::matrix< double > MadGraph_pp_Sitt_tttt
Definition: THDMWcache.h:473
THDMWcache::arraybsgamma
gslpp::matrix< double > arraybsgamma
Definition: THDMWcache.h:482
THDMWcache::kappa2
double kappa2
Definition: THDMWcache.h:862
THDMWcache::etaD
double etaD
Definition: THDMWcache.h:865
THDMWcache::rho_b
double rho_b
Definition: THDMWcache.h:866
THDMWcache::ip_th_pp_Srbb_bbbb_8TeV
double ip_th_pp_Srbb_bbbb_8TeV(double etaD, double etaU, double Lambda4, double mSr)
Interpolating function for the theoretical value of p p -> Sr b bbar -> b bbar b bbar.
Definition: THDMWcache.cpp:2503
THDMWcache::sina
double sina
Definition: THDMWcache.h:838
THDMWcache::ip_ex_gg_phi_tt_ATLAS8
double ip_ex_gg_phi_tt_ATLAS8(double mass)
Interpolating function for the observed ATLAS upper limit on a gluon-gluon produced scalar resonance ...
Definition: THDMWcache.cpp:2032
THDMWcache::CMS8_bb_phi_bb_e
gslpp::matrix< double > CMS8_bb_phi_bb_e
Definition: THDMWcache.h:450
THDMWcache::B0_MZ2_0_mSp2_mSp2_cache
gslpp::complex B0_MZ2_0_mSp2_mSp2_cache[3][CacheSize]
Definition: THDMWcache.h:369
THDMWcache::A_h_D_cache
gslpp::complex A_h_D_cache[7][CacheSize]
Definition: THDMWcache.h:354
THDMWcache::A0_MZ2_mSr2
gslpp::complex A0_MZ2_mSr2(const double MZ2, const double mSr2) const
Definition: THDMWcache.cpp:155
THDMWcache::pp_Sr_jj_TH13
double pp_Sr_jj_TH13
Definition: THDMWcache.h:90
THDMW::getTHDMW_bma
double getTHDMW_bma() const
A getter for .
Definition: THDMW.h:377
THDMW::getQ_THDMW
double getQ_THDMW() const
A getter for the THDMW scale.
Definition: THDMW.h:739
THDMWcache::B00_MZ2_MZ2_mSr2_mSp2_cache
gslpp::complex B00_MZ2_MZ2_mSr2_mSp2_cache[4][CacheSize]
Definition: THDMWcache.h:373
THDMWcache::lambda1_at_Q
double lambda1_at_Q
Definition: THDMWcache.h:54
THDMW::getTHDMW_mu1
double getTHDMW_mu1() const
A getter for .
Definition: THDMW.h:480
THDMWcache::THDMWcache
THDMWcache(const StandardModel &SM_i)
THDMWcache constructor.
Definition: THDMWcache.cpp:14
QCD::DOWN
Definition: QCD.h:325
THDMWcache::nu4_at_Q
double nu4_at_Q
Definition: THDMWcache.h:67
THDMWcache::CacheShiftReal
void CacheShiftReal(double cache[][CacheSize], const int NumPar, const double params[], const double newResult) const
Adds a new result and its parameters into the cache.
Definition: THDMWcache.cpp:123
THDMWcache::lambda1
double lambda1
Definition: THDMWcache.h:840
THDMWcache::I_A_L
gslpp::complex I_A_L(const double mA2, const double Mmu, const double Mtau) const
Amplitude for a CP-odd Higgs boson decay to diphotons including muons and taus in the loop.
Definition: THDMWcache.cpp:483
THDMWcache::mSRsq
double mSRsq
Definition: THDMWcache.h:80
THDMW::getNLOuniscaleTHDMW
double getNLOuniscaleTHDMW() const
A getter for the minimal NLO unitarity check scale.
Definition: THDMW.h:755
THDMWcache::I_h_L_cache
gslpp::complex I_h_L_cache[5][CacheSize]
Definition: THDMWcache.h:345
THDMWcache::ATLAS13_pp_Hp_tb
gslpp::matrix< double > ATLAS13_pp_Hp_tb
Definition: THDMWcache.h:463
THDMWcache::ip_th_pp_Sibb_bbbb_8TeV
double ip_th_pp_Sibb_bbbb_8TeV(double etaD, double etaU, double mS)
Interpolating function for the theoretical value of p p -> Si bbar b -> b bbar bbar b.
Definition: THDMWcache.cpp:2535
gslpp::vector< gslpp::complex >
THDMWcache::ip_ex_gg_phi_tt_ATLAS8_cache_e
double ip_ex_gg_phi_tt_ATLAS8_cache_e[2][CacheSize]
Definition: THDMWcache.h:400
THDMWcache::etaU
double etaU
Definition: THDMWcache.h:864
THDMWcache::MadGraph_pp_Srbb_bbbb
gslpp::matrix< double > MadGraph_pp_Srbb_bbbb
Definition: THDMWcache.h:474
THDMW::getTHDMW_cosb
double getTHDMW_cosb() const
A getter for .
Definition: THDMW.h:369
THDMWcache::S_b
double S_b
Definition: THDMWcache.h:867
QCD::MU
Definition: QCD.h:314
THDMWcache::ip_ex_pp_Gkk_tt_ATLAS13_cache
double ip_ex_pp_Gkk_tt_ATLAS13_cache[2][CacheSize]
Definition: THDMWcache.h:422
THDMWcache::ip_ex_bb_phi_tt_ATLAS13_e
double ip_ex_bb_phi_tt_ATLAS13_e(double mass)
Interpolating function for the expected ATLAS upper limit on a bb associated scalar resonance decayin...
Definition: THDMWcache.cpp:2078
THDMWcache::ip_ex_gg_phi_tt_ATLAS8_cache
double ip_ex_gg_phi_tt_ATLAS8_cache[2][CacheSize]
Definition: THDMWcache.h:399
THDMWcache::THoEX_pp_SrSr_jjjj
double THoEX_pp_SrSr_jjjj
Definition: THDMWcache.h:106
THDMWcache::ip_ex_bb_phi_bb_CMS8
double ip_ex_bb_phi_bb_CMS8(double mass)
Interpolating function for the observed CMS upper limit on a bottom quark produced scalar resonance d...
Definition: THDMWcache.cpp:2002
StandardModel::getLeptons
Particle getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
Definition: StandardModel.h:709
THDMWcache::A0_MZ2_mSi2_cache
gslpp::complex A0_MZ2_mSi2_cache[3][CacheSize]
Definition: THDMWcache.h:368