StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SigmaExtraDim.cc
1 // SigmaExtraDim.cc is a part of the PYTHIA event generator.
2 // Copyright (C) 2014 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Author: Stefan Ask for the *LED* routines.
7 // Function definitions (not found in the header) for the
8 // extra-dimensional simulation classes.
9 
10 #include "Pythia8/SigmaExtraDim.h"
11 
12 namespace Pythia8 {
13 
14 //==========================================================================
15 
16 // ampLedS (amplitude) method for LED graviton tree level exchange.
17 // Based on Eq. (8) in JHEP 1105 (2011) 092, arXiv:1101.4919.
18 
19 complex ampLedS(double x, double n, double L, double M) {
20 
21  complex cS(0., 0.);
22  if (n <= 0) return cS;
23 
24  // Constants.
25  double exp1 = n - 2;
26  double exp2 = n + 2;
27  double rC = sqrt(pow(M_PI,n)) * pow(L,exp1)
28  / (GammaReal(n/2.) * pow(M,exp2));
29 
30  // Base functions, F1 and F2.
31  complex I(0., 1.);
32  if (x < 0) {
33  double sqrX = sqrt(-x);
34  if (int(n) % 2 == 0) {
35  cS = -log(fabs(1 - 1/x));
36  } else {
37  cS = (2.*atan(sqrX) - M_PI)/sqrX;
38  }
39  } else if ((x > 0) && (x < 1)) {
40  double sqrX = sqrt(x);
41  if (int(n) % 2 == 0) {
42  cS = -log(fabs(1 - 1/x)) - M_PI*I;
43  } else {
44  double rat = (sqrX + 1)/(sqrX - 1);
45  cS = log(fabs(rat))/sqrX - M_PI*I/sqrX;
46  }
47  } else if (x > 1){
48  double sqrX = sqrt(x);
49  if (int(n) % 2 == 0) {
50  cS = -log(fabs(1 - 1/x));
51  } else {
52  double rat = (sqrX + 1)/(sqrX - 1);
53  cS = log(fabs(rat))/sqrX;
54  }
55  }
56 
57  // Recursive part.
58  int nL;
59  int nD;
60  if (int(n) % 2 == 0) {
61  nL = int(n/2.);
62  nD = 2;
63  } else {
64  nL = int((n + 1)/2.);
65  nD = 1;
66  }
67  for (int i=1; i<nL; ++i) {
68  cS = x*cS - 2./nD;
69  nD += 2;
70  }
71 
72  return rC*cS;
73 }
74 
75 //--------------------------------------------------------------------------
76 
77 // Common method, "Mandelstam polynomial", for LED dijet processes.
78 
79 double funLedG(double x, double y) {
80  double ret = pow(x,4) + 10. * pow(x,3) * y + 42. * pow2(x) * pow2(y)
81  + 64. * x * pow(y,3) + 32. * pow(y,4);
82  return ret;
83 }
84 
85 //==========================================================================
86 
87 // Sigma1gg2GravitonStar class.
88 // Cross section for g g -> G* (excited graviton state).
89 
90 //--------------------------------------------------------------------------
91 
92 // Initialize process.
93 
94 void Sigma1gg2GravitonStar::initProc() {
95 
96  // Store G* mass and width for propagator.
97  idGstar = 5100039;
98  mRes = particleDataPtr->m0(idGstar);
99  GammaRes = particleDataPtr->mWidth(idGstar);
100  m2Res = mRes*mRes;
101  GamMRat = GammaRes / mRes;
102 
103  // SMinBulk = off/on, use universal coupling (kappaMG)
104  // or individual (Gxx) between graviton and SM particles.
105  eDsmbulk = settingsPtr->flag("ExtraDimensionsG*:SMinBulk");
106  eDvlvl = false;
107  if (eDsmbulk) eDvlvl = settingsPtr->flag("ExtraDimensionsG*:VLVL");
108  kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
109  for (int i = 0; i < 27; ++i) eDcoupling[i] = 0.;
110  double tmPcoup = settingsPtr->parm("ExtraDimensionsG*:Gqq");
111  for (int i = 1; i <= 4; ++i) eDcoupling[i] = tmPcoup;
112  eDcoupling[5] = settingsPtr->parm("ExtraDimensionsG*:Gbb");
113  eDcoupling[6] = settingsPtr->parm("ExtraDimensionsG*:Gtt");
114  tmPcoup = settingsPtr->parm("ExtraDimensionsG*:Gll");
115  for (int i = 11; i <= 16; ++i) eDcoupling[i] = tmPcoup;
116  eDcoupling[21] = settingsPtr->parm("ExtraDimensionsG*:Ggg");
117  eDcoupling[22] = settingsPtr->parm("ExtraDimensionsG*:Ggmgm");
118  eDcoupling[23] = settingsPtr->parm("ExtraDimensionsG*:GZZ");
119  eDcoupling[24] = settingsPtr->parm("ExtraDimensionsG*:GWW");
120  eDcoupling[25] = settingsPtr->parm("ExtraDimensionsG*:Ghh");
121 
122  // Set pointer to particle properties and decay table.
123  gStarPtr = particleDataPtr->particleDataEntryPtr(idGstar);
124 
125 }
126 
127 //--------------------------------------------------------------------------
128 
129 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
130 
131 void Sigma1gg2GravitonStar::sigmaKin() {
132 
133  // Incoming width for gluons.
134  double widthIn = mH / (160. * M_PI);
135 
136  // RS graviton coupling
137  if (eDsmbulk) widthIn *= 2. * pow2(eDcoupling[21] * mH);
138  else widthIn *= pow2(kappaMG * mH / mRes);
139 
140  // Set up Breit-Wigner. Width out only includes open channels.
141  double sigBW = 5. * M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
142  double widthOut = gStarPtr->resWidthOpen(idGstar, mH);
143 
144  // Modify cross section in wings of peak. Done.
145  sigma = widthIn * sigBW * widthOut;
146 
147 }
148 
149 //--------------------------------------------------------------------------
150 
151 // Select identity, colour and anticolour.
152 
153 void Sigma1gg2GravitonStar::setIdColAcol() {
154 
155  // Flavours trivial.
156  setId( 21, 21, idGstar);
157 
158  // Colour flow topology.
159  setColAcol( 1, 2, 2, 1, 0, 0);
160 
161 }
162 
163 //--------------------------------------------------------------------------
164 
165 // Evaluate weight for G* decay angle.
166 // SA: Angle dist. for decay G* -> W/Z/h, based on
167 // Phys.Rev. D65 (2002) 075008, [arXiv:hep-ph/0103308v3]
168 
169 double Sigma1gg2GravitonStar::weightDecay( Event& process, int iResBeg,
170  int iResEnd) {
171 
172  // Identity of mother of decaying reseonance(s).
173  int idMother = process[process[iResBeg].mother1()].idAbs();
174 
175  // For top decay hand over to standard routine.
176  if (idMother == 6)
177  return weightTopDecay( process, iResBeg, iResEnd);
178 
179  // G* should sit in entry 5.
180  if (iResBeg != 5 || iResEnd != 5) return 1.;
181 
182  // Phase space factors. Reconstruct decay angle.
183  double mr1 = pow2(process[6].m()) / sH;
184  double mr2 = pow2(process[7].m()) / sH;
185  double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
186  double cosThe = (process[3].p() - process[4].p())
187  * (process[7].p() - process[6].p()) / (sH * betaf);
188 
189  // Default is isotropic decay.
190  double wt = 1.;
191 
192  // Angular weight for g + g -> G* -> f + fbar.
193  if (process[6].idAbs() < 19) {
194  wt = 1. - pow4(cosThe);
195 
196  // Angular weight for g + g -> G* -> g + g or gamma + gamma.
197  } else if (process[6].id() == 21 || process[6].id() == 22) {
198  wt = (1. + 6. * pow2(cosThe) + pow4(cosThe)) / 8.;
199 
200  // Angular weight for g + g -> G* -> Z + Z or W + W.
201  } else if (process[6].id() == 23 || process[6].id() == 24) {
202  double beta2 = pow2(betaf);
203  double cost2 = pow2(cosThe);
204  double cost4 = pow2(cost2);
205  wt = pow2(beta2 - 2.)*(1. - 2.*cost2 + cost4);
206  // Longitudinal W/Z only.
207  if(eDvlvl) {
208  wt /= 4.;
209  // Transverse W/Z contributions as well.
210  } else {
211  double beta4 = pow2(beta2);
212  double beta8 = pow2(beta4);
213  wt += 2.*pow2(beta4 - 1.)*beta4*cost4;
214  wt += 2.*pow2(beta2 - 1.)*(1. - 2.*beta4*cost2 + beta8*cost4);
215  wt += 2.*(1. + 6.*beta4*cost2 + beta8*cost4);
216  wt += 8.*(1. - beta2)*(1. - cost4);
217  wt /= 18.;
218  }
219 
220  // Angular weight for g + g -> G* -> h + h
221  } else if (process[6].id() == 25) {
222  double beta2 = pow2(betaf);
223  double cost2 = pow2(cosThe);
224  double cost4 = pow2(cost2);
225  wt = pow2(beta2 - 2.)*(1. - 2.*cost2 + cost4);
226  wt /= 4.;
227  }
228 
229  // Done.
230  return wt;
231 
232 }
233 
234 //==========================================================================
235 
236 // Sigma1ffbar2GravitonStar class.
237 // Cross section for f fbar -> G* (excited graviton state).
238 
239 //--------------------------------------------------------------------------
240 
241 // Initialize process.
242 
243 void Sigma1ffbar2GravitonStar::initProc() {
244 
245  // Store G* mass and width for propagator.
246  idGstar = 5100039;
247  mRes = particleDataPtr->m0(idGstar);
248  GammaRes = particleDataPtr->mWidth(idGstar);
249  m2Res = mRes*mRes;
250  GamMRat = GammaRes / mRes;
251 
252  // SMinBulk = off/on, use universal coupling (kappaMG)
253  // or individual (Gxx) between graviton and SM particles.
254  eDsmbulk = settingsPtr->flag("ExtraDimensionsG*:SMinBulk");
255  eDvlvl = false;
256  if (eDsmbulk) eDvlvl = settingsPtr->flag("ExtraDimensionsG*:VLVL");
257  kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
258  for (int i = 0; i < 27; ++i) eDcoupling[i] = 0.;
259  double tmPcoup = settingsPtr->parm("ExtraDimensionsG*:Gqq");
260  for (int i = 1; i <= 4; ++i) eDcoupling[i] = tmPcoup;
261  eDcoupling[5] = settingsPtr->parm("ExtraDimensionsG*:Gbb");
262  eDcoupling[6] = settingsPtr->parm("ExtraDimensionsG*:Gtt");
263  tmPcoup = settingsPtr->parm("ExtraDimensionsG*:Gll");
264  for (int i = 11; i <= 16; ++i) eDcoupling[i] = tmPcoup;
265  eDcoupling[21] = settingsPtr->parm("ExtraDimensionsG*:Ggg");
266  eDcoupling[22] = settingsPtr->parm("ExtraDimensionsG*:Ggmgm");
267  eDcoupling[23] = settingsPtr->parm("ExtraDimensionsG*:GZZ");
268  eDcoupling[24] = settingsPtr->parm("ExtraDimensionsG*:GWW");
269  eDcoupling[25] = settingsPtr->parm("ExtraDimensionsG*:Ghh");
270 
271  // Set pointer to particle properties and decay table.
272  gStarPtr = particleDataPtr->particleDataEntryPtr(idGstar);
273 
274 }
275 
276 //--------------------------------------------------------------------------
277 
278 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
279 
280 void Sigma1ffbar2GravitonStar::sigmaKin() {
281 
282  // Incoming width for fermions, disregarding colour factor.
283  double widthIn = mH / (80. * M_PI);
284 
285  // Set up Breit-Wigner. Width out only includes open channels.
286  double sigBW = 5. * M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
287  double widthOut = gStarPtr->resWidthOpen(idGstar, mH);
288 
289  // Modify cross section in wings of peak. Done.
290  sigma0 = widthIn * sigBW * widthOut * sH / m2Res;
291 }
292 
293 //--------------------------------------------------------------------------
294 
295 // Evaluate sigmaHat(sHat), part dependent of incoming flavour.
296 
297 double Sigma1ffbar2GravitonStar::sigmaHat() {
298 
299  double sigma = sigma0;
300 
301  // RS graviton coupling
302  if (eDsmbulk) sigma *= 2. * pow2(eDcoupling[min( abs(id1), 26)] * mH);
303  else sigma *= pow2(kappaMG * mH / mRes);
304 
305  // If initial quarks, 1/N_C
306  if (abs(id1) < 9) sigma /= 3.;
307 
308  return sigma;
309 }
310 
311 //--------------------------------------------------------------------------
312 
313 // Select identity, colour and anticolour.
314 
315 void Sigma1ffbar2GravitonStar::setIdColAcol() {
316 
317  // Flavours trivial.
318  setId( id1, id2, idGstar);
319 
320  // Colour flow topologies. Swap when antiquarks.
321  if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
322  else setColAcol( 0, 0, 0, 0, 0, 0);
323  if (id1 < 0) swapColAcol();
324 
325 }
326 
327 //--------------------------------------------------------------------------
328 
329 // Evaluate weight for G* decay angle.
330 // SA: Angle dist. for decay G* -> W/Z/h, based on
331 // Phys.Rev. D65 (2002) 075008, [arXiv:hep-ph/0103308v3]
332 
333 double Sigma1ffbar2GravitonStar::weightDecay( Event& process, int iResBeg,
334  int iResEnd) {
335 
336  // Identity of mother of decaying reseonance(s).
337  int idMother = process[process[iResBeg].mother1()].idAbs();
338 
339  // For top decay hand over to standard routine.
340  if (idMother == 6)
341  return weightTopDecay( process, iResBeg, iResEnd);
342 
343  // G* should sit in entry 5.
344  if (iResBeg != 5 || iResEnd != 5) return 1.;
345 
346  // Phase space factors. Reconstruct decay angle.
347  double mr1 = pow2(process[6].m()) / sH;
348  double mr2 = pow2(process[7].m()) / sH;
349  double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
350  double cosThe = (process[3].p() - process[4].p())
351  * (process[7].p() - process[6].p()) / (sH * betaf);
352 
353  // Default is isotropic decay.
354  double wt = 1.;
355 
356  // Angular weight for f + fbar -> G* -> f + fbar.
357  if (process[6].idAbs() < 19) {
358  wt = (1. - 3. * pow2(cosThe) + 4. * pow4(cosThe)) / 2.;
359 
360  // Angular weight for f + fbar -> G* -> g + g or gamma + gamma.
361  } else if (process[6].id() == 21 || process[6].id() == 22) {
362  wt = 1. - pow4(cosThe);
363 
364  // Angular weight for f + fbar -> G* -> Z + Z or W + W.
365  } else if (process[6].id() == 23 || process[6].id() == 24) {
366  double beta2 = pow2(betaf);
367  double cost2 = pow2(cosThe);
368  double cost4 = pow2(cost2);
369  wt = pow2(beta2 - 2.)*cost2*(1. - cost2);
370  // Longitudinal W/Z only.
371  if (eDvlvl) {
372  wt /= 4.;
373  // Transverse W/Z contributions as well.
374  } else {
375  wt += pow2(beta2 - 1.)*cost2*(1. - cost2);
376  wt += 2.*(1. - cost4);
377  wt += (1. - beta2)*(1. - 3.*cost2 + 4.*cost4);
378  wt /= 8.;
379  }
380 
381  // Angular weight for f + fbar -> G* -> h + h
382  } else if (process[6].id() == 25) {
383  double beta2 = pow2(betaf);
384  double cost2 = pow2(cosThe);
385  wt = pow2(beta2 - 2.)*cost2*(1. - cost2);
386  wt /= 4.;
387  }
388 
389  // Done.
390  return wt;
391 
392 }
393 
394 //==========================================================================
395 
396 // Sigma1qqbar2KKgluonStar class.
397 // Cross section for q qbar -> g^*/KK-gluon^* (excited KK-gluon state).
398 
399 //--------------------------------------------------------------------------
400 
401 // Initialize process.
402 
403 void Sigma1qqbar2KKgluonStar::initProc() {
404 
405  // Store kk-gluon* mass and width for propagator.
406  idKKgluon = 5100021;
407  mRes = particleDataPtr->m0(idKKgluon);
408  GammaRes = particleDataPtr->mWidth(idKKgluon);
409  m2Res = mRes*mRes;
410  GamMRat = GammaRes / mRes;
411 
412  // KK-gluon gv/ga couplings and interference.
413  for (int i = 0; i < 10; ++i) { eDgv[i] = 0.; eDga[i] = 0.; }
414  double tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgqL");
415  double tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgqR");
416  for (int i = 1; i <= 4; ++i) {
417  eDgv[i] = 0.5 * (tmPgL + tmPgR);
418  eDga[i] = 0.5 * (tmPgL - tmPgR);
419  }
420  tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgbL");
421  tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgbR");
422  eDgv[5] = 0.5 * (tmPgL + tmPgR); eDga[5] = 0.5 * (tmPgL - tmPgR);
423  tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgtL");
424  tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgtR");
425  eDgv[6] = 0.5 * (tmPgL + tmPgR); eDga[6] = 0.5 * (tmPgL - tmPgR);
426  interfMode = settingsPtr->mode("ExtraDimensionsG*:KKintMode");
427 
428  // Set pointer to particle properties and decay table.
429  gStarPtr = particleDataPtr->particleDataEntryPtr(idKKgluon);
430 
431 }
432 
433 //--------------------------------------------------------------------------
434 
435 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
436 
437 void Sigma1qqbar2KKgluonStar::sigmaKin() {
438 
439  // Incoming width for fermions.
440  double widthIn = alpS * mH * 4 / 27;
441  double widthOut = alpS * mH / 6;
442 
443  // Loop over all decay channels.
444  sumSM = 0.;
445  sumInt = 0.;
446  sumKK = 0.;
447 
448  for (int i = 0; i < gStarPtr->sizeChannels(); ++i) {
449  int idAbs = abs( gStarPtr->channel(i).product(0) );
450 
451  // Only contributions quarks.
452  if ( idAbs > 0 && idAbs <= 6 ) {
453  double mf = particleDataPtr->m0(idAbs);
454 
455  // Check that above threshold. Phase space.
456  if (mH > 2. * mf + MASSMARGIN) {
457  double mr = pow2(mf / mH);
458  double beta = sqrtpos(1. - 4. * mr);
459 
460  // Store sum of combinations. For outstate only open channels.
461  int onMode = gStarPtr->channel(i).onMode();
462  if (onMode == 1 || onMode == 2) {
463  sumSM += beta * (1. + 2. * mr);
464  sumInt += beta * eDgv[min(idAbs, 9)] * (1. + 2. * mr);
465  sumKK += beta * (pow2(eDgv[min(idAbs, 9)]) * (1. + 2.*mr)
466  + pow2(eDga[min(idAbs, 9)]) * (1. - 4.*mr));
467  }
468  }
469  }
470  }
471 
472  // Set up Breit-Wigner. Width out only includes open channels.
473  sigSM = widthIn * 12. * M_PI * widthOut / sH2;
474  sigInt = 2. * sigSM * sH * (sH - m2Res)
475  / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
476  sigKK = sigSM * sH2 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
477 
478  // Optionally only keep g* or gKK term.
479  if (interfMode == 1) {sigInt = 0.; sigKK = 0.;}
480  if (interfMode == 2) {sigSM = 0.; sigInt = 0.;}
481 
482 }
483 
484 //--------------------------------------------------------------------------
485 
486 // Evaluate sigmaHat(sHat), part dependent of incoming flavour.
487 
488 double Sigma1qqbar2KKgluonStar::sigmaHat() {
489 
490  // RS graviton coupling.
491  double sigma = sigSM * sumSM
492  + eDgv[min(abs(id1), 9)] * sigInt * sumInt
493  + ( pow2(eDgv[min(abs(id1), 9)])
494  + pow2(eDga[min(abs(id1), 9)]) ) * sigKK * sumKK;
495 
496  return sigma;
497 }
498 
499 //--------------------------------------------------------------------------
500 
501 // Select identity, colour and anticolour.
502 
503 void Sigma1qqbar2KKgluonStar::setIdColAcol() {
504 
505  // Flavours trivial.
506  setId( id1, id2, idKKgluon);
507 
508  // Colour flow topologies. Swap when antiquarks.
509  setColAcol( 1, 0, 0, 2, 1, 2);
510  if (id1 < 0) swapColAcol();
511 
512 }
513 
514 //--------------------------------------------------------------------------
515 
516 // Evaluate weight for KK-gluon* decay angle (based on ffbar2gmZ).
517 
518 double Sigma1qqbar2KKgluonStar::weightDecay( Event& process, int iResBeg,
519  int iResEnd) {
520 
521  // Identity of mother of decaying reseonance(s).
522  int idMother = process[process[iResBeg].mother1()].idAbs();
523 
524  // For top decay hand over to standard routine.
525  if (idMother == 6)
526  return weightTopDecay( process, iResBeg, iResEnd);
527 
528  // g* should sit in entry 5.
529  if (iResBeg != 5 || iResEnd != 5) return 1.;
530 
531  // Couplings for in- and out-flavours (alpS already included).
532  int idInAbs = process[3].idAbs();
533  double vi = eDgv[min(idInAbs, 9)];
534  double ai = eDga[min(idInAbs, 9)];
535  int idOutAbs = process[6].idAbs();
536  double vf = eDgv[min(idOutAbs, 9)];
537  double af = eDga[min(idOutAbs, 9)];
538 
539  // Phase space factors. (One power of beta left out in formulae.)
540  double mf = process[6].m();
541  double mr = mf*mf / sH;
542  double betaf = sqrtpos(1. - 4. * mr);
543 
544  // Coefficients of angular expression.
545  double coefTran = sigSM + vi * sigInt * vf
546  + (vi*vi + ai*ai) * sigKK * (vf*vf + pow2(betaf) * af*af);
547  double coefLong = 4. * mr * ( sigSM + vi * sigInt * vf
548  + (vi*vi + ai*ai) * sigKK * vf*vf );
549  double coefAsym = betaf * ( ai * sigInt * af
550  + 4. * vi * ai * sigKK * vf * af );
551 
552  // Flip asymmetry for in-fermion + out-antifermion.
553  if (process[3].id() * process[6].id() < 0) coefAsym = -coefAsym;
554 
555  // Reconstruct decay angle and weight for it.
556  double cosThe = (process[3].p() - process[4].p())
557  * (process[7].p() - process[6].p()) / (sH * betaf);
558  double wtMax = 2. * (coefTran + abs(coefAsym));
559  double wt = coefTran * (1. + pow2(cosThe))
560  + coefLong * (1. - pow2(cosThe)) + 2. * coefAsym * cosThe;
561 
562  // Done.
563  return (wt / wtMax);
564 }
565 
566 //==========================================================================
567 
568 // Sigma2gg2GravitonStarg class.
569 // Cross section for g g -> G* g (excited graviton state).
570 
571 //--------------------------------------------------------------------------
572 
573 // Initialize process.
574 
575 void Sigma2gg2GravitonStarg::initProc() {
576 
577  // Store G* mass and width for propagator.
578  idGstar = 5100039;
579  mRes = particleDataPtr->m0(idGstar);
580  GammaRes = particleDataPtr->mWidth(idGstar);
581  m2Res = mRes*mRes;
582  GamMRat = GammaRes / mRes;
583 
584  // Overall coupling strength kappa * m_G*.
585  kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
586 
587  // Secondary open width fraction.
588  openFrac = particleDataPtr->resOpenFrac(idGstar);
589 
590 }
591 
592 //--------------------------------------------------------------------------
593 
594 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
595 
596 void Sigma2gg2GravitonStarg::sigmaKin() {
597 
598  // Evaluate cross section. Secondary width for G*.
599  sigma = (3. * pow2(kappaMG) * alpS) / (32. * sH * m2Res)
600  * ( pow2(tH2 + tH * uH + uH2) / (sH2 * tH * uH)
601  + 2. * (tH2 / uH + uH2 / tH) / sH + 3. * (tH / uH + uH / tH)
602  + 2. * (sH / uH + sH/tH) + sH2 / (tH * uH) );
603  sigma *= openFrac;
604 
605 }
606 
607 //--------------------------------------------------------------------------
608 
609 // Select identity, colour and anticolour.
610 
611 void Sigma2gg2GravitonStarg::setIdColAcol() {
612 
613  // Flavours trivial.
614  setId( 21, 21, idGstar, 21);
615 
616  // Colour flow topologies: random choice between two mirrors.
617  if (rndmPtr->flat() < 0.5) setColAcol( 1, 2, 2, 3, 0, 0, 1, 3);
618  else setColAcol( 1, 2, 3, 1, 0, 0, 3, 2);
619 
620 }
621 
622 //--------------------------------------------------------------------------
623 
624 // Evaluate weight for decay angles: currently G* assumed isotropic.
625 
626 double Sigma2gg2GravitonStarg::weightDecay( Event& process, int iResBeg,
627  int iResEnd) {
628 
629  // Identity of mother of decaying reseonance(s).
630  int idMother = process[process[iResBeg].mother1()].idAbs();
631 
632  // For top decay hand over to standard routine.
633  if (idMother == 6)
634  return weightTopDecay( process, iResBeg, iResEnd);
635 
636  // No equations for G* decay so assume isotropic.
637  return 1.;
638 
639 }
640 
641 //==========================================================================
642 
643 // Sigma2qg2GravitonStarq class.
644 // Cross section for q g -> G* q (excited graviton state).
645 
646 //--------------------------------------------------------------------------
647 
648 // Initialize process.
649 
650 void Sigma2qg2GravitonStarq::initProc() {
651 
652  // Store G* mass and width for propagator.
653  idGstar = 5100039;
654  mRes = particleDataPtr->m0(idGstar);
655  GammaRes = particleDataPtr->mWidth(idGstar);
656  m2Res = mRes*mRes;
657  GamMRat = GammaRes / mRes;
658 
659  // Overall coupling strength kappa * m_G*.
660  kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
661 
662  // Secondary open width fraction.
663  openFrac = particleDataPtr->resOpenFrac(idGstar);
664 
665 }
666 
667 //--------------------------------------------------------------------------
668 
669 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
670 
671 void Sigma2qg2GravitonStarq::sigmaKin() {
672 
673  // Evaluate cross section. Secondary width for G*.
674  sigma = -(pow2(kappaMG) * alpS) / (192. * sH * m2Res )
675  * ( 4. * (sH2 + uH2) / (tH * sH) + 9. * (sH + uH) / sH + sH / uH
676  + uH2 / sH2 + 3. * tH * (4. + sH / uH + uH / sH) / sH
677  + 4. * tH2 * (1. / uH + 1. / sH) / sH + 2. * tH2 * tH / (uH * sH2) );
678  sigma *= openFrac;
679 
680 }
681 
682 //--------------------------------------------------------------------------
683 
684 // Select identity, colour and anticolour.
685 
686 void Sigma2qg2GravitonStarq::setIdColAcol() {
687 
688  // Flavour set up for q g -> H q.
689  int idq = (id2 == 21) ? id1 : id2;
690  setId( id1, id2, idGstar, idq);
691 
692  // tH defined between f and f': must swap tHat <-> uHat if q g in.
693  swapTU = (id2 == 21);
694 
695  // Colour flow topologies. Swap when antiquarks.
696  if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
697  else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
698  if (idq < 0) swapColAcol();
699 
700 }
701 
702 //--------------------------------------------------------------------------
703 
704 // Evaluate weight for decay angles: currently G* assumed isotropic.
705 
706 double Sigma2qg2GravitonStarq::weightDecay( Event& process, int iResBeg,
707  int iResEnd) {
708 
709  // Identity of mother of decaying reseonance(s).
710  int idMother = process[process[iResBeg].mother1()].idAbs();
711 
712  // For top decay hand over to standard routine.
713  if (idMother == 6)
714  return weightTopDecay( process, iResBeg, iResEnd);
715 
716  // No equations for G* decay so assume isotropic.
717  return 1.;
718 
719 }
720 
721 //==========================================================================
722 
723 // Sigma2qqbar2GravitonStarg class.
724 // Cross section for q qbar -> G* g (excited graviton state).
725 
726 //--------------------------------------------------------------------------
727 
728 // Initialize process.
729 
730 void Sigma2qqbar2GravitonStarg::initProc() {
731 
732  // Store G* mass and width for propagator.
733  idGstar = 5100039;
734  mRes = particleDataPtr->m0(idGstar);
735  GammaRes = particleDataPtr->mWidth(idGstar);
736  m2Res = mRes*mRes;
737  GamMRat = GammaRes / mRes;
738 
739  // Overall coupling strength kappa * m_G*.
740  kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
741 
742  // Secondary open width fraction.
743  openFrac = particleDataPtr->resOpenFrac(idGstar);
744 
745 }
746 
747 //--------------------------------------------------------------------------
748 
749 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
750 
751 void Sigma2qqbar2GravitonStarg::sigmaKin() {
752 
753  // Evaluate cross section. Secondary width for G*.
754  sigma = (pow2(kappaMG) * alpS) / (72. * sH * m2Res)
755  * ( 4. * (tH2 + uH2) / sH2 + 9. * (tH + uH) / sH
756  + (tH2 / uH + uH2 / tH) / sH + 3. * (4. + tH / uH + uH/ tH)
757  + 4. * (sH / uH + sH / tH) + 2. * sH2 / (tH * uH) );
758  sigma *= openFrac;
759 
760 }
761 
762 //--------------------------------------------------------------------------
763 
764 // Select identity, colour and anticolour.
765 
766 void Sigma2qqbar2GravitonStarg::setIdColAcol() {
767 
768  // Flavours trivial.
769  setId( id1, id2, idGstar, 21);
770 
771  // Colour flow topologies. Swap when antiquarks.
772  setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
773  if (id1 < 0) swapColAcol();
774 
775 }
776 
777 //--------------------------------------------------------------------------
778 
779 // Evaluate weight for decay angles: currently G* assumed isotropic.
780 
781 double Sigma2qqbar2GravitonStarg::weightDecay( Event& process, int iResBeg,
782  int iResEnd) {
783 
784  // Identity of mother of decaying reseonance(s).
785  int idMother = process[process[iResBeg].mother1()].idAbs();
786 
787  // For top decay hand over to standard routine.
788  if (idMother == 6)
789  return weightTopDecay( process, iResBeg, iResEnd);
790 
791  // No equations for G* decay so assume isotropic.
792  return 1.;
793 
794 }
795 
796 //==========================================================================
797 
798 // NOAM: Sigma2ffbar2TEVffbar class.
799 // Cross section for, f fbar -> gammaKK/ZKK -> F Fbar.
800 // Process provided by N. Hod et al. and is described in arXiv:XXXX.YYYY
801 
802 //--------------------------------------------------------------------------
803 
804 // Initialize process.
805 
806 void Sigma2ffbar2TEVffbar::initProc() {
807 
808  // Process name.
809  if (idNew == 1) nameSave = "f fbar -> d dbar (s-channel gamma_KK/Z_KK)";
810  if (idNew == 2) nameSave = "f fbar -> u ubar (s-channel gamma_KK/Z_KK)";
811  if (idNew == 3) nameSave = "f fbar -> s sbar (s-channel gamma_KK/Z_KK)";
812  if (idNew == 4) nameSave = "f fbar -> c cbar (s-channel gamma_KK/Z_KK)";
813  if (idNew == 5) nameSave = "f fbar -> b bbar (s-channel gamma_KK/Z_KK)";
814  if (idNew == 6) nameSave = "f fbar -> t tbar (s-channel gamma_KK/Z_KK)";
815  if (idNew == 11) nameSave = "f fbar -> e+ e- (s-channel gamma_KK/Z_KK)";
816  if (idNew == 12) nameSave = "f fbar -> nue nuebar (s-channel gamma_KK/Z_KK)";
817  if (idNew == 13) nameSave = "f fbar -> mu+ mu- (s-channel gamma_KK/Z_KK)";
818  if (idNew == 14) nameSave
819  = "f fbar -> numu numubar (s-channel gamma_KK/Z_KK)";
820  if (idNew == 15) nameSave = "f fbar -> tau+ tau- (s-channel gamma_KK/Z_KK)";
821  if (idNew == 16) nameSave
822  = "f fbar -> nutau nutaubar (s-channel gamma_KK/Z_KK)";
823 
824  // Allow to pick only gamma* or Z0 part of full gamma*/Z0 expression.
825  gmZmode = settingsPtr->mode("ExtraDimensionsTEV:gmZmode");
826 
827  // Pick number of KK excitations
828  nexcitationmax = (int)settingsPtr->parm("ExtraDimensionsTEV:nMax");
829 
830  // Initialize the widths of the KK propogators.
831  // partial width of the KK photon
832  wgmKKFactor = 0.;
833  // total width of the KK photon
834  wgmKKn = 0.;
835  // will be proportional to "wZ0" + ttbar addition
836  wZKKn = 0.;
837 
838  // Store Z0 mass and width for propagator.
839  wZ0 = particleDataPtr->mWidth(23);
840  mRes = particleDataPtr->m0(23);
841  m2Res = mRes*mRes;
842 
843  // Store the top mass for the ttbar width calculations
844  mTop = particleDataPtr->m0(6);
845  m2Top = mTop*mTop;
846 
847  // Store the KK mass parameter, equivalent to the mass of the first KK
848  // excitation: particleDataPtr->m0(5000023);
849  mStar = (double)settingsPtr->parm("ExtraDimensionsTEV:mStar");
850 
851  // Get alphaEM - relevant for the calculation of the widths
852  alphaemfixed = settingsPtr->parm("StandardModel:alphaEM0");
853 
854  // initialize imaginari number
855  mI = complex(0.,1.);
856 
857  // Sum all partial widths of the KK photon except for the ttbar channel
858  // which is handeled afterwards seperately
859  if (gmZmode>=0 && gmZmode<=5) {
860  for (int i=1 ; i<17 ; i++) {
861  if (i==7) { i=11; }
862  // skip the ttbar decay and add its contribution later
863  if (i==6) { continue; }
864  if (i<9) {
865  wgmKKFactor += ( (alphaemfixed / 6.) * 4.
866  * couplingsPtr->ef(i) * couplingsPtr->ef(i) * 3. );
867  }
868  else {
869  wgmKKFactor += (alphaemfixed / 6.) * 4.
870  * couplingsPtr->ef(i) * couplingsPtr->ef(i);
871  }
872  }
873  }
874 
875  // Get the helicity-couplings of the Z0 to all the fermions except top
876  gMinusF = ( couplingsPtr->t3f(idNew) - couplingsPtr->ef(idNew)
877  * couplingsPtr->sin2thetaW() )
878  / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
879  gPlusF = -1. * couplingsPtr->ef(idNew) * couplingsPtr->sin2thetaW()
880  / sqrt( couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW() );
881  // Get the helicity-couplings of the Z0 to the top quark
882  gMinusTop = ( couplingsPtr->t3f(6) - couplingsPtr->ef(6)
883  * couplingsPtr->sin2thetaW() )
884  / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
885 
886  gPlusTop = -1. * couplingsPtr->ef(6) * couplingsPtr->sin2thetaW()
887  / sqrt( couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW() );
888  // calculate the constant factor of the unique ttbar decay width
889  ttbarwFactorA = pow2(gMinusTop) + pow2(gPlusTop);
890  ttbarwFactorB = 6.*gMinusTop*gPlusTop - pow2(gMinusTop) - pow2(gPlusTop);
891 
892  // Secondary open width fraction, relevant for top (or heavier).
893  openFracPair = 1.;
894  if ((idNew >=6 && idNew <=8) || idNew == 17 || idNew == 18)
895  openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
896 
897 }
898 
899 //--------------------------------------------------------------------------
900 
901 // For improving the phase-space sampling (there can be 2 resonances)
902 
903 int Sigma2ffbar2TEVffbar::resonanceB() {
904 
905  return 23;
906 
907 }
908 
909 //--------------------------------------------------------------------------
910 
911 // For improving the phase-space sampling (there can be 2 resonances)
912 
913 int Sigma2ffbar2TEVffbar::resonanceA() {
914 
915  if (gmZmode>=3) {
916  phaseSpacemHatMin = settingsPtr->parm("PhaseSpace:mHatMin");
917  phaseSpacemHatMax = settingsPtr->parm("PhaseSpace:mHatMax");
918  double mResFirstKKMode = sqrt(pow2(particleDataPtr->m0(23)) + pow2(mStar));
919  if (mResFirstKKMode/2. <= phaseSpacemHatMax
920  || 3*mResFirstKKMode/2. >= phaseSpacemHatMin) { return 5000023; }
921  else { return 23; }
922  // no KK terms at all
923  } else { return 23; }
924 
925 }
926 
927 //--------------------------------------------------------------------------
928 
929 // Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
930 
931 void Sigma2ffbar2TEVffbar::sigmaKin() {
932 
933  // Check that above threshold.
934  isPhysical = true;
935  if (mH < m3 + m4 + MASSMARGIN) {
936  isPhysical = false;
937  return;
938  }
939 
940  // Define average F, Fbar mass so same beta. Phase space.
941  double s34Avg = 0.5 * (s3 + s4) - 0.25 * pow2(s3 - s4) / sH;
942  mr = s34Avg / sH;
943  betaf = sqrtpos(1. - 4. * mr);
944 
945  // Reconstruct decay angle so can reuse 2 -> 1 cross section.
946  cosThe = (tH - uH) / (betaf * sH);
947 
948 }
949 
950 //--------------------------------------------------------------------------
951 
952 // Evaluate d(sigmaHat)/d(tHat), including incoming flavour dependence.
953 
954 double Sigma2ffbar2TEVffbar::sigmaHat() {
955 
956  // Fail if below threshold.
957  if (!isPhysical) return 0.;
958 
959  // Couplings for in/out-flavours.
960  int idAbs = abs(id1);
961 
962  // The couplings of the Z0 to the fermions for in/out flavors
963  gMinusf = ( couplingsPtr->t3f(idAbs) - couplingsPtr->ef(idAbs)
964  * couplingsPtr->sin2thetaW() )
965  / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
966  gPlusf = -1. * couplingsPtr->ef(idAbs)*couplingsPtr->sin2thetaW()
967  / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
968 
969  // Initialize the some values
970  helicityME2 = 0.;
971  coefAngular = 0.;
972  gf=0.;
973  gF=0.;
974  gammaProp = complex(0.,0.);
975  resProp = complex(0.,0.);
976  gmPropKK = complex(0.,0.);
977  ZPropKK = complex(0.,0.);
978  totalProp = complex(0.,0.);
979 
980  // Sum all initial and final helicity states this corresponds to an
981  // unpolarized beams and unmeasured polarization final-state
982  for (double helicityf=-0.5 ; helicityf<=0.5 ; helicityf++) {
983  for (double helicityF=-0.5 ; helicityF<=0.5 ; helicityF++) {
984  // the couplings for the initial-final helicity configuration
985  gF = (helicityF == +0.5) ? gMinusF : gPlusF;
986  gf = (helicityf == +0.5) ? gMinusf : gPlusf;
987  // 0=SM gmZ, 1=SM gm, 2=SM Z, 3=SM+KK gmZ, 4=KK gm, 5=KK Z
988  switch(gmZmode) {
989  // SM photon and Z0 only
990  case 0:
991  gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
992  resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
993  break;
994  // SM photon only
995  case 1:
996  gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
997  break;
998  // SM Z0 only
999  case 2:
1000  resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1001  break;
1002  // KK photon and Z
1003  case 3:
1004  gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1005  resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1006  ZPropKK = complex(0.,0.);
1007  gmPropKK = complex(0.,0.);
1008  // Sum all KK excitations contributions
1009  for(int nexcitation = 1; nexcitation <= nexcitationmax;
1010  nexcitation++) {
1011  mZKKn = sqrt(m2Res + pow2(mStar * nexcitation));
1012  m2ZKKn = m2Res + pow2(mStar * nexcitation);
1013  mgmKKn = mStar * nexcitation;
1014  m2gmKKn = (mStar*nexcitation)*(mStar*nexcitation);
1015  // calculate the width of the n'th excitation of the KK Z
1016  // (proportional to the Z0 width + ttbar partial width)
1017  ttbarwZKKn = 2.*(alphaemfixed*3./6.)*mZKKn
1018  * sqrt(1.-4.*m2Top/m2ZKKn)
1019  * (ttbarwFactorA+(m2Top/m2ZKKn)*ttbarwFactorB);
1020  wZKKn = 2.*wZ0*mZKKn/mRes+ttbarwZKKn;
1021  // calculate the width of the n'th excitation of the
1022  // KK photon
1023  ttbarwgmKKn = 2.*(alphaemfixed*3./6.)*mgmKKn
1024  * sqrt(1.-4.*m2Top/m2gmKKn)
1025  * 2.*pow2(couplingsPtr->ef(6))*(1.+2.*(m2Top/m2gmKKn));
1026  wgmKKn = wgmKKFactor*mgmKKn+ttbarwgmKKn;
1027  // the propogators
1028  gmPropKK += (2.*couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew))
1029  / (sH-m2gmKKn+mI*sH*wgmKKn/mgmKKn);
1030  ZPropKK += (2.*gf*gF)/(sH-m2ZKKn+mI*sH*wZKKn/mZKKn );
1031  }
1032  break;
1033  // SM photon and Z0 with KK photon only
1034  case 4:
1035  gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1036  resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1037  gmPropKK = complex(0.,0.);
1038  for (int nexcitation = 1; nexcitation <= nexcitationmax;
1039  nexcitation++ ) {
1040  mgmKKn = mStar * nexcitation;
1041  m2gmKKn = (mStar*nexcitation)*(mStar*nexcitation);
1042 
1043  ttbarwgmKKn = 2.*(alphaemfixed*3./6.)*mgmKKn
1044  * sqrt(1.-4.*m2Top/m2gmKKn)
1045  * 2.*pow2(couplingsPtr->ef(6))
1046  * (1.+2.*(m2Top/m2gmKKn));
1047  wgmKKn = wgmKKFactor*mgmKKn+ttbarwgmKKn;
1048  gmPropKK += (2.*couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew))
1049  / (sH-m2gmKKn+mI*sH*wgmKKn/mgmKKn);
1050  }
1051  break;
1052  // SM photon and Z0 with KK Z only
1053  case 5:
1054  gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1055  resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1056  ZPropKK = complex(0.,0.);
1057  for (int nexcitation = 1; nexcitation <= nexcitationmax;
1058  nexcitation++ ) {
1059  mZKKn = sqrt(m2Res + pow2(mStar * nexcitation));
1060  m2ZKKn = m2Res + pow2(mStar * nexcitation);
1061 
1062  ttbarwZKKn = 2.*(alphaemfixed*3./6.)*mZKKn
1063  * sqrt(1.-4.*m2Top/m2ZKKn)
1064  * (ttbarwFactorA+(m2Top/m2ZKKn)*ttbarwFactorB);
1065  wZKKn = 2.*wZ0*mZKKn/mRes+ttbarwZKKn;
1066  ZPropKK += (2.*gf*gF)/(sH-m2ZKKn+mI*sH*wZKKn/mZKKn );
1067  }
1068  break;
1069  default: break;
1070  // end run over initial and final helicity states
1071  }
1072 
1073  // sum all contributing amplitudes
1074  totalProp = gammaProp + resProp + ZPropKK + gmPropKK;
1075 
1076  // angular distribution for the helicity configuration
1077  coefAngular = 1. + 4. * helicityF * helicityf * cosThe;
1078 
1079  // the squared helicity matrix element
1080  helicityME2 += real(totalProp*conj(totalProp))*pow2(coefAngular);
1081  }
1082  }
1083 
1084  // calculate the coefficient of the squared helicity matrix element.
1085  coefTot = (2./sH) * 2*M_PI * pow2(alpEM)/(4.*sH) * pow2(sH)/4.;
1086 
1087  // the full squared helicity matrix element.
1088  double sigma = helicityME2 * coefTot;
1089 
1090  // Top: corrections for closed decay channels.
1091  sigma *= openFracPair;
1092 
1093  // Initial-state colour factor. Answer.
1094  if (idAbs < 9) sigma /= 3.;
1095 
1096  // Final-state colour factor. Answer.
1097  if (idNew < 9) sigma *= 3.*(1.+alpS/M_PI);
1098 
1099  return sigma;
1100 }
1101 
1102 //--------------------------------------------------------------------------
1103 
1104 // Select identity, colour and anticolour.
1105 
1106 void Sigma2ffbar2TEVffbar::setIdColAcol() {
1107 
1108  // Set outgoing flavours.
1109  id3 = (id1 > 0) ? idNew : -idNew;
1110  setId( id1, id2, id3, -id3);
1111 
1112  // Colour flow topologies. Swap when antiquarks.
1113  if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1114  else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1115  else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1116  else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1117  if (id1 < 0) swapColAcol();
1118 
1119 }
1120 
1121 //--------------------------------------------------------------------------
1122 
1123 // Evaluate weight for decay angles of W in top decay.
1124 
1125 double Sigma2ffbar2TEVffbar::weightDecay( Event& process, int iResBeg,
1126  int iResEnd) {
1127 
1128  // For top decay hand over to standard routine, else done.
1129  if (idNew == 6 && process[process[iResBeg].mother1()].idAbs() == 6)
1130  return weightTopDecay( process, iResBeg, iResEnd);
1131  else return 1.;
1132 
1133 }
1134 
1135 //==========================================================================
1136 
1137 // Sigma2gg2LEDUnparticleg class.
1138 // Cross section for g g -> U/G g (real graviton emission in
1139 // large extra dimensions or unparticle emission).
1140 
1141 //--------------------------------------------------------------------------
1142 
1143 void Sigma2gg2LEDUnparticleg::initProc() {
1144 
1145  // Init model parameters.
1146  eDidG = 5000039;
1147  if (eDgraviton) {
1148  eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1149  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1150  eDdU = 0.5 * eDnGrav + 1;
1151  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1152  eDlambda = 1;
1153  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1154  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1155  eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1156  } else {
1157  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1158  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1159  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1160  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1161  eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1162  }
1163 
1164  // The A(dU) or S'(n) value.
1165  double tmpAdU = 0;
1166  if (eDgraviton) {
1167  tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1168  / GammaReal(0.5 * eDnGrav);
1169  if (eDspin == 0) { // Scalar graviton
1170  tmpAdU *= sqrt( pow(2., double(eDnGrav)) );
1171  eDcf *= eDcf;
1172  }
1173  } else {
1174  tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1175  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1176  }
1177 
1178  // Cross section related constants
1179  // and ME dependent powers of lambda / LambdaU.
1180  double tmpExp = eDdU - 2;
1181  double tmpLS = pow2(eDLambdaU);
1182  eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1183  if (eDgraviton) {
1184  eDconstantTerm /= tmpLS;
1185  } else if (eDspin == 0) {
1186  eDconstantTerm *= pow2(eDlambda) / tmpLS;
1187  } else {
1188  eDconstantTerm = 0;
1189  infoPtr->errorMsg("Error in Sigma2gg2LEDUnparticleg::initProc: "
1190  "Incorrect spin value (turn process off)!");
1191  }
1192 
1193 }
1194 
1195 //--------------------------------------------------------------------------
1196 
1197 void Sigma2gg2LEDUnparticleg::sigmaKin() {
1198 
1199  // Set graviton mass.
1200  mG = m3;
1201  mGS = mG*mG;
1202 
1203  // Set mandelstam variables and ME expressions.
1204  if (eDgraviton) {
1205 
1206  double A0 = 1/sH;
1207  if (eDspin == 0) { // Scalar graviton
1208  double tmpTerm1 = uH + tH;
1209  double tmpTerm2 = uH + sH;
1210  double tmpTerm3 = tH + sH;
1211  double T0 = pow(tmpTerm1,4) + pow(tmpTerm2,4) + pow(tmpTerm3,4)
1212  + 12. * sH * tH * uH * mGS;
1213  eDsigma0 = eDcf * A0 * T0 / (sH2 * tH * uH);
1214  } else {
1215  double xH = tH/sH;
1216  double yH = mGS/sH;
1217  double xHS = pow2(xH);
1218  double yHS = pow2(yH);
1219  double xHC = pow(xH,3);
1220  double yHC = pow(yH,3);
1221  double xHQ = pow(xH,4);
1222  double yHQ = pow(yH,4);
1223 
1224  double T0 = 1/(xH*(yH-1-xH));
1225  double T1 = 1 + 2*xH + 3*xHS + 2*xHC + xHQ;
1226  double T2 = -2*yH*(1 + xHC);
1227  double T3 = 3*yHS*(1 + xHS);
1228  double T4 = -2*yHC*(1 + xH);
1229  double T5 = yHQ;
1230 
1231  eDsigma0 = A0 * T0 *( T1 + T2 + T3 + T4 + T5 );
1232  }
1233 
1234  } else if (eDspin == 0) {
1235 
1236  double A0 = 1/pow2(sH);
1237  double sHQ = pow(sH,4);
1238  double tHQ = pow(tH,4);
1239  double uHQ = pow(uH,4);
1240 
1241  eDsigma0 = A0 * (pow(mGS,4) + sHQ + tHQ + uHQ) / (sH * tH * uH);
1242 
1243  }
1244 
1245  // Mass measure, (m^2)^(d-2).
1246  double tmpExp = eDdU - 2;
1247  eDsigma0 *= pow(mGS, tmpExp);
1248 
1249  // Constants.
1250  eDsigma0 *= eDconstantTerm;
1251 
1252 }
1253 
1254 //--------------------------------------------------------------------------
1255 
1256 double Sigma2gg2LEDUnparticleg::sigmaHat() {
1257 
1258  // Mass spectrum weighting.
1259  double sigma = eDsigma0 / runBW3;
1260 
1261  // SM couplings...
1262  if (eDgraviton) {
1263  sigma *= 16 * M_PI * alpS * 3 / 16;
1264  } else if (eDspin == 0) {
1265  sigma *= 6 * M_PI * alpS;
1266  }
1267 
1268  // Truncate sH region or use form factor.
1269  // Form factor uses either pythia8 renormScale2
1270  // or E_jet in cms.
1271  if (eDcutoff == 1) {
1272  if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1273  } else if ( (eDgraviton && (eDspin == 2))
1274  && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1275  double tmPmu = sqrt(Q2RenSave);
1276  if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1277  double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1278  double tmPexp = double(eDnGrav) + 2;
1279  sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1280  }
1281 
1282  return sigma;
1283 }
1284 
1285 //--------------------------------------------------------------------------
1286 
1287 void Sigma2gg2LEDUnparticleg::setIdColAcol() {
1288 
1289  // Flavours trivial.
1290  setId( 21, 21, eDidG, 21);
1291 
1292  // Colour flow topologies: random choice between two mirrors.
1293  if (rndmPtr->flat() < 0.5) setColAcol( 1, 2, 2, 3, 0, 0, 1, 3);
1294  else setColAcol( 1, 2, 3, 1, 0, 0, 3, 2);
1295 
1296 }
1297 
1298 //==========================================================================
1299 
1300 // Sigma2qg2LEDUnparticleq class.
1301 // Cross section for q g -> U/G q (real graviton emission in
1302 // large extra dimensions or unparticle emission).
1303 
1304 //--------------------------------------------------------------------------
1305 
1306 void Sigma2qg2LEDUnparticleq::initProc() {
1307 
1308  // Init model parameters.
1309  eDidG = 5000039;
1310  if (eDgraviton) {
1311  eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1312  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1313  eDdU = 0.5 * eDnGrav + 1;
1314  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1315  eDlambda = 1;
1316  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1317  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1318  eDgf = settingsPtr->parm("ExtraDimensionsLED:g");
1319  eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1320  } else {
1321  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1322  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1323  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1324  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1325  eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1326  }
1327 
1328  // The A(dU) or S'(n) value.
1329  double tmpAdU = 0;
1330  if (eDgraviton) {
1331  tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1332  / GammaReal(0.5 * eDnGrav);
1333  // Scalar graviton
1334  if (eDspin == 0) {
1335  tmpAdU *= 2. * sqrt( pow(2., double(eDnGrav)) );
1336  eDcf *= 4. * eDcf / pow2(eDLambdaU);
1337  double tmpExp = 2. * double(eDnGrav) / (double(eDnGrav) + 2.);
1338  eDgf *= eDgf / pow(2. * M_PI, tmpExp);
1339  }
1340  } else {
1341  tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1342  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1343  }
1344 
1345  // Cross section related constants
1346  // and ME dependent powers of lambda / LambdaU.
1347  double tmpExp = eDdU - 2;
1348  double tmpLS = pow2(eDLambdaU);
1349  eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1350  if (eDgraviton && (eDspin == 2)) {
1351  eDconstantTerm /= tmpLS;
1352  } else if (eDspin == 1) {
1353  eDconstantTerm *= pow2(eDlambda);
1354  } else if (eDspin == 0) {
1355  eDconstantTerm *= pow2(eDlambda);
1356  } else {
1357  eDconstantTerm = 0;
1358  infoPtr->errorMsg("Error in Sigma2qg2LEDUnparticleq::initProc: "
1359  "Incorrect spin value (turn process off)!");
1360  }
1361 
1362 
1363 }
1364 
1365 //--------------------------------------------------------------------------
1366 
1367 void Sigma2qg2LEDUnparticleq::sigmaKin() {
1368 
1369  // Set graviton mass.
1370  mG = m3;
1371  mGS = mG*mG;
1372 
1373  // Set mandelstam variables and ME expressions.
1374  if (eDgraviton) {
1375 
1376  double A0 = 1/sH;
1377  // Scalar graviton
1378  if (eDspin == 0) {
1379  A0 /= sH;
1380  double T0 = -(uH2 + pow2(mGS)) / (sH * tH);
1381  double T1 = -(tH2 + sH2)/ uH;
1382  eDsigma0 = A0 * (eDgf * T0 + eDcf * T1);
1383  } else {
1384  double xH = tH/sH;
1385  double yH = mGS/sH;
1386  double x2H = xH/(yH - 1 - xH);
1387  double y2H = yH/(yH - 1 - xH);
1388  double x2HS = pow2(x2H);
1389  double y2HS = pow2(y2H);
1390  double x2HC = pow(x2H,3);
1391  double y2HC = pow(y2H,3);
1392 
1393  double T0 = -(yH - 1 - xH);
1394  double T20 = 1/(x2H*(y2H-1-x2H));
1395  double T21 = -4*x2H*(1 + x2H)*(1 + 2*x2H + 2*x2HS);
1396  double T22 = y2H*(1 + 6*x2H + 18*x2HS + 16*x2HC);
1397  double T23 = -6*y2HS*x2H*(1+2*x2H);
1398  double T24 = y2HC*(1 + 4*x2H);
1399 
1400  eDsigma0 = A0 * T0 * T20 * ( T21 + T22 + T23 + T24 );
1401  }
1402 
1403  } else if (eDspin == 1) {
1404 
1405  double A0 = 1/pow2(sH);
1406  double tmpTerm1 = tH - mGS;
1407  double tmpTerm2 = sH - mGS;
1408 
1409  eDsigma0 = A0 * (pow2(tmpTerm1) + pow2(tmpTerm2)) / (sH*tH);
1410 
1411  } else if (eDspin == 0) {
1412 
1413  double A0 = 1/pow2(sH);
1414  // Sign correction by Tom
1415  eDsigma0 = A0 * (pow2(tH) + pow2(mGS)) / (sH*uH);
1416 
1417  }
1418 
1419  // Mass measure, (m^2)^(d-2).
1420  double tmpExp = eDdU - 2;
1421  eDsigma0 *= pow(mGS, tmpExp);
1422 
1423  // Constants.
1424  eDsigma0 *= eDconstantTerm;
1425 
1426 }
1427 
1428 //--------------------------------------------------------------------------
1429 
1430 double Sigma2qg2LEDUnparticleq::sigmaHat() {
1431 
1432  // Mass spactrum weighting.
1433  double sigma = eDsigma0 /runBW3;
1434 
1435  // SM couplings...
1436  if (eDgraviton) {
1437  sigma *= 16 * M_PI * alpS / 96;
1438  } else if (eDspin == 1) {
1439  sigma *= - 4 * M_PI * alpS / 3;
1440  } else if (eDspin == 0) {
1441  sigma *= - 2 * M_PI * alpS / 3;
1442  }
1443 
1444  // Truncate sH region or use form factor.
1445  // Form factor uses either pythia8 renormScale2
1446  // or E_jet in cms.
1447  if (eDcutoff == 1) {
1448  if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1449  } else if ( (eDgraviton && (eDspin == 2))
1450  && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1451  double tmPmu = sqrt(Q2RenSave);
1452  if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1453  double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1454  double tmPexp = double(eDnGrav) + 2;
1455  sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1456  }
1457 
1458  return sigma;
1459 }
1460 
1461 //--------------------------------------------------------------------------
1462 
1463 void Sigma2qg2LEDUnparticleq::setIdColAcol() {
1464 
1465  // Flavour set up for q g -> G* q.
1466  int idq = (id2 == 21) ? id1 : id2;
1467  setId( id1, id2, eDidG, idq);
1468 
1469  // tH defined between f and f': must swap tHat <-> uHat if q g in.
1470  swapTU = (id2 == 21);
1471 
1472  // Colour flow topologies. Swap when antiquarks.
1473  if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
1474  else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
1475  if (idq < 0) swapColAcol();
1476 
1477 }
1478 
1479 //==========================================================================
1480 
1481 // Sigma2qqbar2LEDUnparticleg class.
1482 // Cross section for q qbar -> U/G g (real graviton emission in
1483 // large extra dimensions or unparticle emission).
1484 
1485 //--------------------------------------------------------------------------
1486 
1487 void Sigma2qqbar2LEDUnparticleg::initProc() {
1488 
1489  // Init model parameters.
1490  eDidG = 5000039;
1491  if (eDgraviton) {
1492  eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1493  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1494  eDdU = 0.5 * eDnGrav + 1;
1495  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1496  eDlambda = 1;
1497  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1498  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1499  eDgf = settingsPtr->parm("ExtraDimensionsLED:g");
1500  eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1501  } else {
1502  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1503  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1504  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1505  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1506  eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1507  }
1508 
1509  // The A(dU) or S'(n) value.
1510  double tmpAdU = 0;
1511  if (eDgraviton) {
1512  tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1513  / GammaReal(0.5 * eDnGrav);
1514  // Scalar graviton
1515  if (eDspin == 0) {
1516  tmpAdU *= 2. * sqrt( pow(2., double(eDnGrav)) );
1517  eDcf *= 4. * eDcf / pow2(eDLambdaU);
1518  double tmpExp = 2. * double(eDnGrav) / (double(eDnGrav) + 2.);
1519  eDgf *= eDgf / pow(2. * M_PI, tmpExp);
1520  }
1521  } else {
1522  tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1523  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1524  }
1525 
1526  // Cross section related constants
1527  // and ME dependent powers of lambda / LambdaU.
1528  double tmpExp = eDdU - 2;
1529  double tmpLS = pow2(eDLambdaU);
1530  eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1531  if (eDgraviton && (eDspin == 2)) {
1532  eDconstantTerm /= tmpLS;
1533  } else if (eDspin == 1) {
1534  eDconstantTerm *= pow2(eDlambda);
1535  } else if (eDspin == 0) {
1536  eDconstantTerm *= pow2(eDlambda);
1537  } else {
1538  eDconstantTerm = 0;
1539  infoPtr->errorMsg("Error in Sigma2qqbar2LEDUnparticleg::initProc: "
1540  "Incorrect spin value (turn process off)!");
1541  }
1542 
1543 }
1544 
1545 //--------------------------------------------------------------------------
1546 
1547 void Sigma2qqbar2LEDUnparticleg::sigmaKin() {
1548 
1549  // Set graviton mass.
1550  mG = m3;
1551  mGS = mG*mG;
1552 
1553  // Set mandelstam variables and ME expressions.
1554  if (eDgraviton) {
1555 
1556  double A0 = 1/sH;
1557  // Scalar graviton
1558  if (eDspin == 0) {
1559  A0 /= sH;
1560  double tmpTerm1 = uH + tH;
1561  double T0 = (2. * mGS * sH + pow2(tmpTerm1)) / (uH * tH);
1562  double T1 = (tH2 + uH2) / sH;
1563  eDsigma0 = A0 * (eDgf * T0 + eDcf * T1);
1564  } else {
1565  double xH = tH/sH;
1566  double yH = mGS/sH;
1567  double xHS = pow2(xH);
1568  double yHS = pow2(yH);
1569  double xHC = pow(xH,3);
1570  double yHC = pow(yH,3);
1571 
1572  double T0 = 1/(xH*(yH-1-xH));
1573  double T1 = -4*xH*(1 + xH)*(1 + 2*xH + 2*xHS);
1574  double T2 = yH*(1 + 6*xH + 18*xHS + 16*xHC);
1575  double T3 = -6*yHS*xH*(1+2*xH);
1576  double T4 = yHC*(1 + 4*xH);
1577 
1578  eDsigma0 = A0 * T0 *( T1 + T2 + T3 + T4 );
1579  }
1580 
1581  } else if (eDspin == 1) {
1582 
1583  double A0 = 1/pow2(sH);
1584  double tmpTerm1 = tH - mGS;
1585  double tmpTerm2 = uH - mGS;
1586 
1587  eDsigma0 = A0 * (pow2(tmpTerm1) + pow2(tmpTerm2)) / (tH * uH);
1588 
1589  } else if (eDspin == 0) {
1590 
1591  double A0 = 1/pow2(sH);
1592 
1593  eDsigma0 = A0 * (pow2(sH) - pow2(mGS)) / (tH * uH);
1594 
1595  }
1596 
1597  // Mass measure, (m^2)^(d-2).
1598  double tmpExp = eDdU - 2;
1599  eDsigma0 *= pow(mGS, tmpExp);
1600 
1601  // Constants.
1602  eDsigma0 *= eDconstantTerm;
1603 
1604 }
1605 
1606 //--------------------------------------------------------------------------
1607 
1608 double Sigma2qqbar2LEDUnparticleg::sigmaHat() {
1609 
1610  // Mass spactrum weighting.
1611  double sigma = eDsigma0 /runBW3;
1612 
1613  // SM couplings...
1614  if (eDgraviton) {
1615  sigma *= 16 * M_PI * alpS / 36;
1616  } else if (eDspin == 1) {
1617  sigma *= 4 * M_PI * 8 * alpS / 9;
1618  } else if (eDspin == 0) {
1619  sigma *= 4 * M_PI * 4 * alpS / 9;
1620  }
1621 
1622  // Truncate sH region or use form factor.
1623  // Form factor uses either pythia8 renormScale2
1624  // or E_jet in cms.
1625  if (eDcutoff == 1) {
1626  if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1627  } else if ( (eDgraviton && (eDspin == 2))
1628  && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1629  double tmPmu = sqrt(Q2RenSave);
1630  if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1631  double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1632  double tmPexp = double(eDnGrav) + 2;
1633  sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1634  }
1635 
1636  return sigma;
1637 }
1638 
1639 //--------------------------------------------------------------------------
1640 
1641 void Sigma2qqbar2LEDUnparticleg::setIdColAcol() {
1642 
1643  // Flavours trivial.
1644  setId( id1, id2, eDidG, 21);
1645 
1646  // Colour flow topologies. Swap when antiquarks.
1647  if (abs(id1) < 9) setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
1648  if (id1 < 0) swapColAcol();
1649 
1650 }
1651 
1652 //==========================================================================
1653 
1654 // Sigma2ffbar2LEDUnparticleZ class.
1655 // Cross section for f fbar -> U/G Z (real LED graviton or unparticle
1656 // emission).
1657 
1658 //--------------------------------------------------------------------------
1659 
1660 // Constants: could be changed here if desired, but normally should not.
1661 // These are of technical nature, as described for each.
1662 
1663 // FIXRATIO:
1664 // Ratio between the two possible coupling constants of the spin-2 ME.
1665 // A value different from one give rise to an IR divergence which makes
1666 // the event generation very slow, so this values is fixed to 1 until
1667 // investigated further.
1668 const double Sigma2ffbar2LEDUnparticleZ::FIXRATIO = 1.;
1669 
1670 //--------------------------------------------------------------------------
1671 
1672 void Sigma2ffbar2LEDUnparticleZ::initProc() {
1673 
1674  // Init model parameters.
1675  eDidG = 5000039;
1676  if (eDgraviton) {
1677  eDspin = 2;
1678  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1679  eDdU = 0.5 * eDnGrav + 1;
1680  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1681  eDlambda = 1;
1682  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1683  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1684  } else {
1685  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1686  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1687  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1688  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1689  eDratio = FIXRATIO;
1690  // = settingsPtr->parm("ExtraDimensionsUnpart:ratio");
1691  eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1692  }
1693 
1694  // Store Z0 mass and width for propagator.
1695  mZ = particleDataPtr->m0(23);
1696  widZ = particleDataPtr->mWidth(23);
1697  mZS = mZ*mZ;
1698  mwZS = pow2(mZ * widZ);
1699 
1700  // Init spin-2 parameters
1701  if ( eDspin != 2 ){
1702  eDgraviton = false;
1703  eDlambdaPrime = 0;
1704  } else if (eDgraviton) {
1705  eDlambda = 1;
1706  eDratio = 1;
1707  eDlambdaPrime = eDlambda;
1708  } else {
1709  eDlambdaPrime = eDratio * eDlambda;
1710  }
1711 
1712  // The A(dU) or S'(n) value
1713  double tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1714  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1715 
1716  if (eDgraviton) {
1717  tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1718  / GammaReal(0.5 * eDnGrav);
1719  }
1720 
1721  // Standard 2 to 2 cross section related constants
1722  double tmpTerm1 = 1/(2 * 16 * pow2(M_PI));
1723  double tmpLS = pow2(eDLambdaU);
1724 
1725  // Spin dependent constants from ME.
1726  double tmpTerm2 = 0;
1727  if ( eDspin == 0 ) {
1728  tmpTerm2 = 2 * pow2(eDlambda);
1729  } else if (eDspin == 1) {
1730  tmpTerm2 = 4 * pow2(eDlambda);
1731  } else if (eDspin == 2) {
1732  tmpTerm2 = pow2(eDlambda)/(4 * 3 * tmpLS);
1733  }
1734 
1735  // Unparticle phase space related
1736  double tmpExp2 = eDdU - 2;
1737  double tmpTerm3 = tmpAdU / (tmpLS * pow(tmpLS, tmpExp2));
1738 
1739  // All in total
1740  eDconstantTerm = tmpTerm1 * tmpTerm2 * tmpTerm3;
1741 
1742 }
1743 
1744 //--------------------------------------------------------------------------
1745 
1746 void Sigma2ffbar2LEDUnparticleZ::sigmaKin() {
1747 
1748  // Set graviton mass and some powers of mandelstam variables
1749  mU = m3;
1750  mUS = mU*mU;
1751 
1752  sHS = pow2(sH);
1753  tHS = pow2(tH);
1754  uHS = pow2(uH);
1755  tHC = pow(tH,3);
1756  uHC = pow(uH,3);
1757  tHQ = pow(tH,4);
1758  uHQ = pow(uH,4);
1759  tHuH = tH+uH;
1760 
1761  // Evaluate (m**2, t, u) part of differential cross section.
1762  // Extra 1/sHS comes from standard 2 to 2 cross section
1763  // phase space factors.
1764 
1765  if ( eDspin == 0 ) {
1766 
1767  double A0 = 1/sHS;
1768  double T1 = - sH/tH - sH/uH;
1769  double T2 = - (1 - mZS/tH)*(1 - mUS/tH);
1770  double T3 = - (1 - mZS/uH)*(1 - mUS/uH);
1771  double T4 = 2*(1 - mUS/tH)*(1 - mUS/uH);
1772 
1773  eDsigma0 = A0 * ( T1 + T2 + T3 + T4);
1774 
1775  } else if ( eDspin == 1 ) {
1776 
1777  double A0 = 1/sHS;
1778  double T1 = 0.5 * (tH/uH + uH/tH);
1779  double T2 = pow2(mZS + mUS)/(tH * uH);
1780  double T3 = - 0.5 * mUS * (mZS/tHS + mZS/uHS) ;
1781  double T4 = - (mZS+mUS)*(1/tH + 1/uH);
1782 
1783  eDsigma0 = A0 * ( T1 + T2 + T3 + T4 );
1784 
1785  } else if ( eDspin == 2 ) {
1786 
1787  double A0 = 1 / ( sHS * uHS * tHS * pow2(sH-mZS) );
1788  double F0 = 2*tHS*uHS*( 16*pow(mZS,3) + mUS*(7*tHS + 12*tH*uH + 7*uHS)
1789  - 3*(3*tHC + 11*tHS*uH + 11*tH*uHS + 3*uHC)
1790  + 6*pow(mZS,2)*(7*mUS - 2*tHuH) + mZS*(14*pow(mUS,2)
1791  - 15*tHS - 44*tH*uH - 15*uHS + 2*mUS*tHuH) );
1792  double F2 = 2*tHS*uHS*tHuH*( -8*pow(mZS,2)*tHuH
1793  + 4*mZS*(tHS + 3*tH*uH + uHS)
1794  + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
1795  double F4 = -2*tHS*uHS*pow(tHuH,3)*(tHS + uHS - mZS*tHuH);
1796 
1797  double G0 = 4*tH*uH*( 6*pow(mZS,3)*(mUS - tH - uH)*tHuH
1798  + pow(mZS,2)*( 9*tHC + 7*tHS*uH + 7*tH*uHS + 9*uHC
1799  + 15*pow2(mUS)*tHuH - 2*mUS*(12*tHS + 19*tH*uH + 12*uHS) )
1800  + tH*uH*( 6*pow(mUS,3) - 9*pow(mUS,2)*tHuH - mUS*(tHS
1801  + 12*tH*uH + uHS) + 6*(tHC + 6*tHS*uH + 6*tH*uHS + uHC) )
1802  + mZS*(-3*tHQ + 25*tHC*uH + 58*tHS*uHS + 25*tH*uHC
1803  - 3*uHQ + 6*pow(mUS,3)*tHuH
1804  - pow(mUS,2)*(15*tHS + 2*tH*uH + 15*uHS) + 2*mUS*(6*tHC
1805  - 11*tHS*uH - 11*tH*uHS + 6*uHC)) );
1806  double G2 = -4*tHS*uHS*tHuH*( -10*pow2(mZS)*tHuH + 2*mZS*(3*tHS
1807  + 7*tH*uH + 3*uHS) + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
1808  double G4 = -2*F4;
1809 
1810  double H0 = 24*pow(mZS,3)*tH*uH*pow2(-mUS + tHuH)
1811  - 6*pow(mZS,2)*tH*uH*( -9*pow(mUS,3) + 24*pow(mUS,2)*tHuH
1812  - mUS*(21*tHS + 38*tH*uH + 21*uHS)
1813  + 2*(3*tHC + 5*tHS*uH + 5*tH*uHS + 3*uHC) )
1814  - mZS*( 3*pow(mUS,4)*(tHS - 12*tH*uH + uHS)
1815  - 2*tH*uH*pow2(tHuH)*(6*tHS - 29*tH*uH + 6*uHS)
1816  - 6*pow(mUS,3)*(tHC - 16*tHS*uH - 16*tH*uHS + uHC)
1817  + 54*mUS*tH*uH*(tHC + tHS*uH + tH*uHS + uHC)
1818  + pow2(mUS)*(3*tHQ - 102*tHC*uH - 166*tHS*uHS
1819  - 102*tH*uHC + 3*uHQ) )
1820  + tH*uH*( 6*pow(mUS,5) - 18*pow(mUS,4)*tHuH
1821  - 12*pow(mUS,2)*pow(tHuH,3)
1822  + 3*pow(mUS,3)*(7*tHS + 12*tH*uH + 7*uHS)
1823  - 18*tH*uH*(tHC + 5*tHS*uH + 5*tH*uHS + uHC)
1824  + mUS*(3*tHQ + 32*tHC*uH + 78*tHS*uHS + 32*tH*uHC + 3*uHQ) );
1825  double H2 = 2*tHS*uHS*pow2(tHuH)*( -12*pow2(mZS) + 8*mZS*tHuH
1826  + 3*(tHS + 4*tH*uH + uHS) );
1827  double H4 = F4;
1828 
1829  eDsigma0 = A0*( F0 + 1/mUS*F2 + 1/pow2(mUS)*F4
1830  + eDratio*(G0 + 1/mUS*G2 + 1/pow2(mUS)*G4)
1831  + pow2(eDratio)*(H0 + 1/mUS*H2 + 1/pow2(mUS)*H4) );
1832 
1833  } else {
1834 
1835  eDsigma0 = 0;
1836 
1837  }
1838 
1839 }
1840 
1841 //--------------------------------------------------------------------------
1842 
1843 double Sigma2ffbar2LEDUnparticleZ::sigmaHat() {
1844 
1845  // Electroweak couplings.
1846  int idAbs = abs(id1);
1847  // Note: 1/2 * (g_L^2 + g_R^2) = (g_v^2 + g_a^2)
1848  double facEWS = 4 * M_PI * alpEM
1849  / (couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW())
1850  * ( 0.25 * 0.25 * couplingsPtr->vf2af2(idAbs) );
1851 
1852  // Mass Spectrum, (m^2)^(d-2)
1853  double tmpExp = eDdU - 2;
1854  double facSpect = pow(mUS, tmpExp);
1855 
1856  // Total cross section
1857  double sigma = eDconstantTerm * facEWS * facSpect * eDsigma0;
1858 
1859  // If f fbar are quarks (1/N_c)
1860  if (idAbs < 9) sigma /= 3.;
1861 
1862  // Related to mass spactrum weighting.
1863  sigma /= runBW3;
1864 
1865  // Truncate sH region or use form factor.
1866  // Form factor uses either pythia8 renormScale2
1867  // or E_jet in cms.
1868  if (eDcutoff == 1) {
1869  if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1870  } else if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
1871  double tmPmu = sqrt(Q2RenSave);
1872  if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1873  double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1874  double tmPexp = double(eDnGrav) + 2;
1875  sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1876  }
1877 
1878  return sigma;
1879 
1880 }
1881 
1882 //--------------------------------------------------------------------------
1883 
1884 void Sigma2ffbar2LEDUnparticleZ::setIdColAcol() {
1885 
1886  // Flavours trivial.
1887  setId( id1, id2, eDidG, 23);
1888 
1889  // Colour flow topologies. Swap when antiquarks.
1890  if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
1891  else setColAcol( 0, 0, 0, 0, 0, 0);
1892  if (id1 < 0) swapColAcol();
1893 
1894 }
1895 
1896 //==========================================================================
1897 
1898 // Sigma2ffbar2LEDUnparticlegamma class.
1899 // Cross section for f fbar -> U/G gamma (real LED graviton or unparticle
1900 // emission).
1901 
1902 //--------------------------------------------------------------------------
1903 
1904 // Constants: could be changed here if desired, but normally should not.
1905 // These are of technical nature, as described for each.
1906 
1907 // FIXRATIO:
1908 // Ratio between the two possible coupling constants of the spin-2 ME.
1909 // A value different from one give rise to an IR divergence which makes
1910 // the event generation very slow, so this values is fixed to 1 until
1911 // investigated further.
1912 const double Sigma2ffbar2LEDUnparticlegamma::FIXRATIO = 1.;
1913 
1914 //--------------------------------------------------------------------------
1915 
1916 void Sigma2ffbar2LEDUnparticlegamma::initProc() {
1917 
1918  // WARNING: Keep in mind that this class uses the photon limit
1919  // of the Z+G/U ME code. This might give rise to some
1920  // confusing things, e.g. mZ = particleDataPtr->m0(22);
1921 
1922  // Init model parameters.
1923  eDidG = 5000039;
1924  if (eDgraviton) {
1925  eDspin = 2;
1926  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1927  eDdU = 0.5 * eDnGrav + 1;
1928  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1929  eDlambda = 1;
1930  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1931  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1932  } else {
1933  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1934  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1935  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1936  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1937  eDratio = FIXRATIO;
1938  // = settingsPtr->parm("ExtraDimensionsUnpart:ratio");
1939  eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1940  }
1941 
1942  // Store Z0 mass.
1943  mZ = particleDataPtr->m0(22);
1944  mZS = mZ*mZ;
1945 
1946  // Init spin-2 parameters
1947  if ( eDspin != 2 ){
1948  eDgraviton = false;
1949  eDlambdaPrime = 0;
1950  } else if (eDgraviton) {
1951  eDlambda = 1;
1952  eDratio = 1;
1953  eDlambdaPrime = eDlambda;
1954  } else {
1955  eDlambdaPrime = eDratio * eDlambda;
1956  }
1957 
1958  // The A(dU) or S'(n) value
1959  double tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1960  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1961 
1962  if (eDgraviton) {
1963  tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1964  / GammaReal(0.5 * eDnGrav);
1965  }
1966 
1967  // Standard 2 to 2 cross section related constants
1968  double tmpTerm1 = 1/(2 * 16 * pow2(M_PI));
1969  double tmpLS = pow2(eDLambdaU);
1970 
1971  // Spin dependent constants from ME.
1972  double tmpTerm2 = 0;
1973  if ( eDspin == 0 ) {
1974  tmpTerm2 = 2 * pow2(eDlambda);
1975  } else if (eDspin == 1) {
1976  tmpTerm2 = 4 * pow2(eDlambda);
1977  } else if (eDspin == 2) {
1978  tmpTerm2 = pow2(eDlambda)/(4 * 3 * tmpLS);
1979  }
1980 
1981  // Unparticle phase space related
1982  double tmpExp2 = eDdU - 2;
1983  double tmpTerm3 = tmpAdU / (tmpLS * pow(tmpLS, tmpExp2));
1984 
1985  // All in total
1986  eDconstantTerm = tmpTerm1 * tmpTerm2 * tmpTerm3;
1987 
1988 }
1989 
1990 //--------------------------------------------------------------------------
1991 
1992 void Sigma2ffbar2LEDUnparticlegamma::sigmaKin() {
1993 
1994  // Set graviton mass and some powers of mandelstam variables
1995  mU = m3;
1996  mUS = mU*mU;
1997 
1998  sHS = pow2(sH);
1999  tHS = pow2(tH);
2000  uHS = pow2(uH);
2001  tHC = pow(tH,3);
2002  uHC = pow(uH,3);
2003  tHQ = pow(tH,4);
2004  uHQ = pow(uH,4);
2005  tHuH = tH+uH;
2006 
2007  // Evaluate (m**2, t, u) part of differential cross section.
2008  // Extra 1/sHS comes from standard 2 to 2 cross section
2009  // phase space factors.
2010 
2011  if ( eDspin == 0 ) {
2012 
2013  double A0 = 1/sHS;
2014  double T1 = - sH/tH - sH/uH;
2015  double T2 = - (1 - mZS/tH)*(1 - mUS/tH);
2016  double T3 = - (1 - mZS/uH)*(1 - mUS/uH);
2017  double T4 = 2*(1 - mUS/tH)*(1 - mUS/uH);
2018 
2019  eDsigma0 = A0 * ( T1 + T2 + T3 + T4);
2020 
2021  } else if ( eDspin == 1 ) {
2022 
2023  double A0 = 1/sHS;
2024  double T1 = 0.5 * (tH/uH + uH/tH);
2025  double T2 = pow2(mZS + mUS)/(tH * uH);
2026  double T3 = - 0.5 * mUS * (mZS/tHS + mZS/uHS) ;
2027  double T4 = - (mZS+mUS)*(1/tH + 1/uH);
2028 
2029  eDsigma0 = A0 * ( T1 + T2 + T3 + T4 );
2030 
2031  } else if ( eDspin == 2 ) {
2032 
2033  double A0 = 1 / ( sHS * uHS * tHS * pow2(sH-mZS) );
2034  double F0 = 2*tHS*uHS*( 16*pow(mZS,3) + mUS*(7*tHS + 12*tH*uH + 7*uHS)
2035  - 3*(3*tHC + 11*tHS*uH + 11*tH*uHS + 3*uHC)
2036  + 6*pow(mZS,2)*(7*mUS - 2*tHuH) + mZS*(14*pow(mUS,2)
2037  - 15*tHS - 44*tH*uH - 15*uHS + 2*mUS*tHuH) );
2038  double F2 = 2*tHS*uHS*tHuH*( -8*pow(mZS,2)*tHuH
2039  + 4*mZS*(tHS + 3*tH*uH + uHS)
2040  + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
2041  double F4 = -2*tHS*uHS*pow(tHuH,3)*(tHS + uHS - mZS*tHuH);
2042 
2043  double G0 = 4*tH*uH*( 6*pow(mZS,3)*(mUS - tH - uH)*tHuH
2044  + pow(mZS,2)*( 9*tHC + 7*tHS*uH + 7*tH*uHS + 9*uHC
2045  + 15*pow2(mUS)*tHuH - 2*mUS*(12*tHS + 19*tH*uH + 12*uHS) )
2046  + tH*uH*( 6*pow(mUS,3) - 9*pow(mUS,2)*tHuH
2047  - mUS*(tHS + 12*tH*uH + uHS)
2048  + 6*(tHC + 6*tHS*uH + 6*tH*uHS + uHC) )
2049  + mZS*(-3*tHQ + 25*tHC*uH + 58*tHS*uHS + 25*tH*uHC
2050  - 3*uHQ + 6*pow(mUS,3)*tHuH
2051  - pow(mUS,2)*(15*tHS + 2*tH*uH + 15*uHS)
2052  + 2*mUS*(6*tHC - 11*tHS*uH - 11*tH*uHS + 6*uHC)) );
2053  double G2 = -4*tHS*uHS*tHuH*( -10*pow2(mZS)*tHuH
2054  + 2*mZS*(3*tHS + 7*tH*uH + 3*uHS)
2055  + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
2056  double G4 = -2*F4;
2057 
2058  double H0 = 24*pow(mZS,3)*tH*uH*pow2(-mUS + tHuH)
2059  - 6*pow(mZS,2)*tH*uH*( -9*pow(mUS,3) + 24*pow(mUS,2)*tHuH
2060  - mUS*(21*tHS + 38*tH*uH + 21*uHS)
2061  + 2*(3*tHC + 5*tHS*uH + 5*tH*uHS + 3*uHC) )
2062  - mZS*( 3*pow(mUS,4)*(tHS - 12*tH*uH + uHS)
2063  - 2*tH*uH*pow2(tHuH)*(6*tHS - 29*tH*uH + 6*uHS)
2064  - 6*pow(mUS,3)*(tHC - 16*tHS*uH - 16*tH*uHS + uHC)
2065  + 54*mUS*tH*uH*(tHC + tHS*uH + tH*uHS + uHC)
2066  + pow2(mUS)*(3*tHQ - 102*tHC*uH - 166*tHS*uHS
2067  - 102*tH*uHC + 3*uHQ) )
2068  + tH*uH*( 6*pow(mUS,5) - 18*pow(mUS,4)*tHuH
2069  - 12*pow(mUS,2)*pow(tHuH,3)
2070  + 3*pow(mUS,3)*(7*tHS + 12*tH*uH + 7*uHS)
2071  - 18*tH*uH*(tHC + 5*tHS*uH + 5*tH*uHS + uHC)
2072  + mUS*(3*tHQ + 32*tHC*uH + 78*tHS*uHS + 32*tH*uHC + 3*uHQ) );
2073  double H2 = 2*tHS*uHS*pow2(tHuH)*( -12*pow2(mZS) + 8*mZS*tHuH
2074  + 3*(tHS + 4*tH*uH + uHS) );
2075  double H4 = F4;
2076 
2077  eDsigma0 = A0*( F0 + 1/mUS*F2 + 1/pow2(mUS)*F4
2078  + eDratio*(G0 + 1/mUS*G2 + 1/pow2(mUS)*G4)
2079  + pow2(eDratio)*(H0 + 1/mUS*H2 + 1/pow2(mUS)*H4) );
2080 
2081  } else {
2082 
2083  eDsigma0 = 0;
2084 
2085  }
2086 
2087 }
2088 
2089 //--------------------------------------------------------------------------
2090 
2091 double Sigma2ffbar2LEDUnparticlegamma::sigmaHat() {
2092 
2093  // Electroweak couplings..
2094  int idAbs = abs(id1);
2095  double facEWS = 4 * M_PI * alpEM * couplingsPtr->ef2(idAbs);
2096 
2097  // Mass Spectrum, (m^2)^(d-2)
2098  double tmpExp = eDdU - 2;
2099  double facSpect = pow(mUS, tmpExp);
2100 
2101  // Total cross section
2102  double sigma = eDconstantTerm * facEWS * facSpect * eDsigma0;
2103 
2104  // If f fbar are quarks
2105  if (idAbs < 9) sigma /= 3.;
2106 
2107  // Related to mass spactrum weighting.
2108  sigma /= runBW3;
2109 
2110  // Truncate sH region or use form factor.
2111  // Form factor uses either pythia8 renormScale2
2112  // or E_jet in cms.
2113  if (eDcutoff == 1) {
2114  if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
2115  } else if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2116  double tmPmu = sqrt(Q2RenSave);
2117  if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
2118  double tmPformfact = tmPmu / (eDtff * eDLambdaU);
2119  double tmPexp = double(eDnGrav) + 2;
2120  sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
2121  }
2122 
2123  return sigma;
2124 
2125 }
2126 
2127 //--------------------------------------------------------------------------
2128 
2129 void Sigma2ffbar2LEDUnparticlegamma::setIdColAcol() {
2130 
2131  // Flavours trivial.
2132  setId( id1, id2, eDidG, 22);
2133 
2134  // Colour flow topologies. Swap when antiquarks.
2135  if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
2136  else setColAcol( 0, 0, 0, 0, 0, 0);
2137  if (id1 < 0) swapColAcol();
2138 
2139 }
2140 
2141 //==========================================================================
2142 
2143 // Sigma2ffbar2LEDgammagamma class.
2144 // Cross section for f fbar -> (LED G*/U*) -> gamma gamma
2145 // (virtual graviton/unparticle exchange).
2146 
2147 //--------------------------------------------------------------------------
2148 
2149 void Sigma2ffbar2LEDgammagamma::initProc() {
2150 
2151  // Init model parameters.
2152  if (eDgraviton) {
2153  eDspin = 2;
2154  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2155  eDdU = 2;
2156  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2157  eDlambda = 1;
2158  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2159  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2160  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2161  } else {
2162  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2163  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2164  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2165  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2166  eDnegInt = 0;
2167  }
2168 
2169  // Model dependent constants.
2170  if (eDgraviton) {
2171  eDlambda2chi = 4*M_PI;
2172  if (eDnegInt == 1) eDlambda2chi *= -1.;
2173  } else {
2174  double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2175  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2176  double tmPdUpi = eDdU * M_PI;
2177  eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2178  }
2179 
2180  // Model parameter check (if not applicable, sigma = 0).
2181  // Note: SM contribution still generated.
2182  if ( !(eDspin==0 || eDspin==2) ) {
2183  eDlambda2chi = 0;
2184  infoPtr->errorMsg("Error in Sigma2ffbar2LEDgammagamma::initProc: "
2185  "Incorrect spin value (turn process off)!");
2186  } else if ( !eDgraviton && (eDdU >= 2)) {
2187  eDlambda2chi = 0;
2188  infoPtr->errorMsg("Error in Sigma2ffbar2LEDgammagamma::initProc: "
2189  "This process requires dU < 2 (turn process off)!");
2190  }
2191 
2192 }
2193 
2194 //--------------------------------------------------------------------------
2195 
2196 void Sigma2ffbar2LEDgammagamma::sigmaKin() {
2197 
2198  // Mandelstam variables.
2199  double sHS = pow2(sH);
2200  double sHQ = pow(sH, 4);
2201  double tHS = pow2(tH);
2202  double uHS = pow2(uH);
2203 
2204  // Form factor.
2205  double tmPeffLambdaU = eDLambdaU;
2206  if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2207  double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2208  double tmPexp = double(eDnGrav) + 2;
2209  double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2210  tmPeffLambdaU *= pow(tmPformfact,0.25);
2211  }
2212 
2213  // ME from spin-0 and spin-2 unparticles
2214  // including extra 1/sHS from 2-to-2 phase space.
2215  if (eDspin == 0) {
2216  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2217  double tmPexp = 2 * eDdU - 1;
2218  eDterm1 = pow(tmPsLambda2,tmPexp);
2219  eDterm1 /= sHS;
2220  } else {
2221  eDterm1 = (uH / tH + tH / uH);
2222  eDterm1 /= sHS;
2223  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2224  double tmPexp = eDdU;
2225  eDterm2 = pow(tmPsLambda2,tmPexp) * (uHS + tHS) / sHS;
2226  eDterm2 /= sHS;
2227  tmPexp = 2 * eDdU;
2228  eDterm3 = pow(tmPsLambda2,tmPexp) * tH * uH * (uHS + tHS) / sHQ;
2229  eDterm3 /= sHS;
2230  }
2231 
2232 }
2233 
2234 //--------------------------------------------------------------------------
2235 
2236 double Sigma2ffbar2LEDgammagamma::sigmaHat() {
2237 
2238  // Incoming fermion flavor.
2239  int idAbs = abs(id1);
2240 
2241  // Couplings and constants.
2242  // Note: ME already contain 1/2 for identical
2243  // particles in the final state.
2244  double sigma = 0;
2245  if (eDspin == 0) {
2246  sigma = pow2(eDlambda2chi) * eDterm1 / 8;
2247  } else {
2248  double tmPe2Q2 = 4 * M_PI * alpEM * couplingsPtr->ef2(idAbs);
2249  double tmPdUpi = eDdU * M_PI;
2250  sigma = pow2(tmPe2Q2) * eDterm1
2251  - tmPe2Q2 * eDlambda2chi * cos(tmPdUpi) * eDterm2
2252  + pow2(eDlambda2chi) * eDterm3 / 4;
2253  }
2254 
2255  // dsigma/dt, 2-to-2 phase space factors.
2256  sigma /= 16 * M_PI;
2257 
2258  // If f fbar are quarks.
2259  if (idAbs < 9) sigma /= 3.;
2260 
2261  return sigma;
2262 }
2263 
2264 //--------------------------------------------------------------------------
2265 
2266 void Sigma2ffbar2LEDgammagamma::setIdColAcol() {
2267 
2268  // Flavours trivial.
2269  setId( id1, id2, 22, 22);
2270 
2271  // Colour flow topologies. Swap when antiquarks.
2272  if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2273  else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2274  if (id1 < 0) swapColAcol();
2275 
2276 }
2277 
2278 //==========================================================================
2279 
2280 // Sigma2gg2LEDgammagamma class.
2281 // Cross section for g g -> (LED G*/U*) -> gamma gamma
2282 // (virtual graviton/unparticle exchange).
2283 
2284 //--------------------------------------------------------------------------
2285 
2286 void Sigma2gg2LEDgammagamma::initProc() {
2287 
2288  // Init model parameters.
2289  if (eDgraviton) {
2290  eDspin = 2;
2291  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2292  eDdU = 2;
2293  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2294  eDlambda = 1;
2295  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2296  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2297  } else {
2298  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2299  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2300  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2301  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2302  }
2303 
2304  // Model dependent constants.
2305  if (eDgraviton) {
2306  eDlambda2chi = 4 * M_PI;
2307 
2308  } else {
2309  double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2310  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2311  double tmPdUpi = eDdU * M_PI;
2312  eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2313  }
2314 
2315  // Model parameter check (if not applicable, sigma = 0).
2316  if ( !(eDspin==0 || eDspin==2) ) {
2317  eDlambda2chi = 0;
2318  infoPtr->errorMsg("Error in Sigma2gg2LEDgammagamma::initProc: "
2319  "Incorrect spin value (turn process off)!");
2320  } else if ( !eDgraviton && (eDdU >= 2)) {
2321  eDlambda2chi = 0;
2322  infoPtr->errorMsg("Error in Sigma2gg2LEDgammagamma::initProc: "
2323  "This process requires dU < 2 (turn process off)!");
2324  }
2325 
2326 }
2327 
2328 //--------------------------------------------------------------------------
2329 
2330 void Sigma2gg2LEDgammagamma::sigmaKin() {
2331 
2332  // Mandelstam variables.
2333  double sHS = pow2(sH);
2334  double sHQ = pow(sH, 4);
2335  double tHQ = pow(tH, 4);
2336  double uHQ = pow(uH, 4);
2337 
2338  // Form factor.
2339  double tmPeffLambdaU = eDLambdaU;
2340  if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2341  double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2342  double tmPexp = double(eDnGrav) + 2;
2343  double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2344  tmPeffLambdaU *= pow(tmPformfact,0.25);
2345  }
2346 
2347  // ME from spin-0 and spin-2 unparticles.
2348  if (eDspin == 0) {
2349  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2350  double tmPexp = 2 * eDdU;
2351  eDsigma0 = pow(tmPsLambda2,tmPexp);
2352  } else {
2353  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2354  double tmPexp = 2 * eDdU;
2355  eDsigma0 = pow(tmPsLambda2,tmPexp) * (uHQ + tHQ) / sHQ;
2356  }
2357 
2358  // extra 1/sHS from 2-to-2 phase space.
2359  eDsigma0 /= sHS;
2360 
2361 }
2362 
2363 //--------------------------------------------------------------------------
2364 
2365 double Sigma2gg2LEDgammagamma::sigmaHat() {
2366 
2367  // Couplings and constants.
2368  // Note: ME already contain 1/2 for identical
2369  // particles in the final state.
2370  double sigma = eDsigma0;
2371  if (eDspin == 0) {
2372  sigma *= pow2(eDlambda2chi) / 256;
2373  } else {
2374  sigma *= pow2(eDlambda2chi) / 32;
2375  }
2376 
2377  // dsigma/dt, 2-to-2 phase space factors.
2378  sigma /= 16 * M_PI;
2379 
2380  return sigma;
2381 }
2382 
2383 //--------------------------------------------------------------------------
2384 
2385 void Sigma2gg2LEDgammagamma::setIdColAcol() {
2386 
2387  // Flavours trivial.
2388  setId( 21, 21, 22, 22);
2389 
2390  // Colour flow topologies.
2391  setColAcol( 1, 2, 2, 1, 0, 0, 0, 0);
2392 
2393 }
2394 
2395 //==========================================================================
2396 
2397 // Sigma2ffbar2LEDllbar class.
2398 // Cross section for f fbar -> (LED G*/U*) -> l lbar
2399 // (virtual graviton/unparticle exchange).
2400 // Does not include t-channel contributions relevant for e^+e^- to e^+e^-
2401 
2402 //--------------------------------------------------------------------------
2403 
2404 void Sigma2ffbar2LEDllbar::initProc() {
2405 
2406  // Init model parameters.
2407  if (eDgraviton) {
2408  eDspin = 2;
2409  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2410  eDdU = 2;
2411  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2412  eDlambda = 1;
2413  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2414  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2415  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2416  } else {
2417  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2418  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2419  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2420  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2421  eDnxx = settingsPtr->mode("ExtraDimensionsUnpart:gXX");
2422  eDnxy = settingsPtr->mode("ExtraDimensionsUnpart:gXY");
2423  eDnegInt = 0;
2424  }
2425 
2426  eDmZ = particleDataPtr->m0(23);
2427  eDmZS = eDmZ * eDmZ;
2428  eDGZ = particleDataPtr->mWidth(23);
2429  eDGZS = eDGZ * eDGZ;
2430 
2431  // Model dependent constants.
2432  if (eDgraviton) {
2433  eDlambda2chi = 4*M_PI;
2434  if (eDnegInt == 1) eDlambda2chi *= -1.;
2435  } else {
2436  double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2437  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2438  double tmPdUpi = eDdU * M_PI;
2439  eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2440  }
2441 
2442  // Model parameter check (if not applicable, sigma = 0).
2443  // Note: SM contribution still generated.
2444  if ( !(eDspin==1 || eDspin==2) ) {
2445  eDlambda2chi = 0;
2446  infoPtr->errorMsg("Error in Sigma2ffbar2LEDllbar::initProc: "
2447  "Incorrect spin value (turn process off)!");
2448  } else if ( !eDgraviton && (eDdU >= 2)) {
2449  eDlambda2chi = 0;
2450  infoPtr->errorMsg("Error in Sigma2ffbar2LEDllbar::initProc: "
2451  "This process requires dU < 2 (turn process off)!");
2452  }
2453 
2454 }
2455 
2456 //--------------------------------------------------------------------------
2457 
2458 void Sigma2ffbar2LEDllbar::sigmaKin() {
2459 
2460  // Mandelstam variables.
2461  double tHS = pow2(tH);
2462  double uHS = pow2(uH);
2463  double tHC = pow(tH,3);
2464  double uHC = pow(uH,3);
2465  double tHQ = pow(tH,4);
2466  double uHQ = pow(uH,4);
2467 
2468  // Form factor.
2469  double tmPeffLambdaU = eDLambdaU;
2470  if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2471  double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2472  double tmPexp = double(eDnGrav) + 2;
2473  double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2474  tmPeffLambdaU *= pow(tmPformfact,0.25);
2475  }
2476 
2477  // ME from spin-1 and spin-2 unparticles
2478  eDdenomPropZ = pow2(sH - eDmZS) + eDmZS * eDGZS;
2479  eDrePropZ = (sH - eDmZS) / eDdenomPropZ;
2480  eDimPropZ = -eDmZ * eDGZ / eDdenomPropZ;
2481  eDrePropGamma = 1 / sH;
2482  if (eDspin == 1) {
2483  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2484  double tmPexp = eDdU - 2;
2485  eDabsMeU = eDlambda2chi * pow(tmPsLambda2,tmPexp)
2486  / pow2(tmPeffLambdaU);
2487  } else {
2488  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2489  double tmPexp = eDdU - 2;
2490  double tmPA = -eDlambda2chi * pow(tmPsLambda2,tmPexp)
2491  / (8 * pow(tmPeffLambdaU,4));
2492  eDabsAS = pow2(tmPA);
2493  eDreA = tmPA * cos(M_PI * eDdU);
2494  eDreABW = tmPA * ((sH - eDmZS) * cos(M_PI * eDdU) + eDmZ * eDGZ
2495  * sin(M_PI * eDdU)) / eDdenomPropZ;
2496  eDpoly1 = tHQ + uHQ - 6*tHC*uH - 6*tH*uHC + 18*tHS*uHS;
2497  double tmPdiffUT = uH - tH;
2498  eDpoly2 = pow(tmPdiffUT,3);
2499  eDpoly3 = tHC - 3*tHS*uH - 3*tH*uHS + uHC;
2500  }
2501 
2502 }
2503 
2504 //--------------------------------------------------------------------------
2505 
2506 double Sigma2ffbar2LEDllbar::sigmaHat() {
2507 
2508  // Incoming fermion flavor.
2509  int idAbs = abs(id1);
2510 
2511  // Couplings and constants.
2512  // Qq = couplingsPtr->ef(idAbs), quark, i.e. id > 0.
2513  // Ql = couplingsPtr->ef(11), electron.
2514  double tmPe2QfQl = 4 * M_PI * alpEM * couplingsPtr->ef(idAbs)
2515  * couplingsPtr->ef(11);
2516  double tmPgvq = 0.25 * couplingsPtr->vf(idAbs);
2517  double tmPgaq = 0.25 * couplingsPtr->af(idAbs);
2518  double tmPgLq = tmPgvq + tmPgaq;
2519  double tmPgRq = tmPgvq - tmPgaq;
2520  double tmPgvl = 0.25 * couplingsPtr->vf(11);
2521  double tmPgal = 0.25 * couplingsPtr->af(11);
2522  double tmPgLl = tmPgvl + tmPgal;
2523  double tmPgRl = tmPgvl - tmPgal;
2524  double tmPe2s2c2 = 4 * M_PI * alpEM
2525  / (couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW());
2526 
2527  // LL, RR, LR, RL couplings.
2528  vector<double> tmPcoupZ;
2529  tmPcoupZ.push_back(tmPe2s2c2 * tmPgLq * tmPgLl);
2530  tmPcoupZ.push_back(tmPe2s2c2 * tmPgRq * tmPgRl);
2531  tmPcoupZ.push_back(tmPe2s2c2 * tmPgRq * tmPgLl);
2532  tmPcoupZ.push_back(tmPe2s2c2 * tmPgLq * tmPgRl);
2533  vector<double> tmPcoupU;
2534  if (eDnxx == 1) {
2535  // LL
2536  tmPcoupU.push_back(-1);
2537  // RR
2538  tmPcoupU.push_back(-1);
2539  } else if (eDnxx == 2) {
2540  // LL
2541  tmPcoupU.push_back(0);
2542  // RR
2543  tmPcoupU.push_back(0);
2544  } else {
2545  // LL
2546  tmPcoupU.push_back(1);
2547  // RR
2548  tmPcoupU.push_back(1);
2549  }
2550  if (eDnxy == 1) {
2551  // RL
2552  tmPcoupU.push_back(-1);
2553  // LR
2554  tmPcoupU.push_back(-1);
2555  } else if (eDnxy == 2) {
2556  // RL
2557  tmPcoupU.push_back(0);
2558  // LR
2559  tmPcoupU.push_back(0);
2560  } else {
2561  // RL
2562  tmPcoupU.push_back(1);
2563  // LR
2564  tmPcoupU.push_back(1);
2565  }
2566 
2567  // Matrix elements
2568  double tmPMES = 0;
2569  if (eDspin == 1) {
2570 
2571  for (unsigned int i = 0; i<tmPcoupZ.size(); ++i) {
2572  double tmPMS = pow2(tmPcoupU[i] * eDabsMeU)
2573  + pow2(tmPe2QfQl * eDrePropGamma)
2574  + pow2(tmPcoupZ[i]) / eDdenomPropZ
2575  + 2 * cos(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2576  * tmPe2QfQl * eDrePropGamma
2577  + 2 * cos(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2578  * tmPcoupZ[i] * eDrePropZ
2579  + 2 * tmPe2QfQl * eDrePropGamma
2580  * tmPcoupZ[i] * eDrePropZ
2581  - 2 * sin(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2582  * tmPcoupZ[i] * eDimPropZ;
2583 
2584  if (i<2) { tmPMES += 4 * pow2(uH) * tmPMS; }
2585  else if (i<4) { tmPMES += 4 * pow2(tH) * tmPMS; }
2586  }
2587 
2588  } else {
2589 
2590  for (unsigned int i = 0; i<tmPcoupZ.size(); ++i) {
2591  double tmPMS = pow2(tmPe2QfQl * eDrePropGamma)
2592  + pow2(tmPcoupZ[i]) / eDdenomPropZ
2593  + 2 * tmPe2QfQl * eDrePropGamma * tmPcoupZ[i] * eDrePropZ;
2594 
2595  if (i<2) { tmPMES += 4 * pow2(uH) * tmPMS; }
2596  else if (i<4) { tmPMES += 4 * pow2(tH) * tmPMS; }
2597  }
2598  tmPMES += 8 * eDabsAS * eDpoly1;
2599  tmPMES += 16 * tmPe2QfQl * eDrePropGamma * eDreA * eDpoly2;
2600  tmPMES += 16 * tmPe2s2c2 * eDreABW * (tmPgaq * tmPgal * eDpoly3
2601  + tmPgvq * tmPgvl * eDpoly2);
2602 
2603  }
2604 
2605  // dsigma/dt, 2-to-2 phase space factors.
2606  double sigma = 0.25 * tmPMES; // 0.25, is the spin average
2607  sigma /= 16 * M_PI * pow2(sH);
2608 
2609  // If f fbar are quarks.
2610  if (idAbs < 9) sigma /= 3.;
2611 
2612  // sigma(ffbar->llbar) = 3 * sigma(ffbar->eebar)
2613  sigma *= 3.;
2614 
2615  return sigma;
2616 }
2617 
2618 //--------------------------------------------------------------------------
2619 
2620 void Sigma2ffbar2LEDllbar::setIdColAcol() {
2621 
2622  double tmPrand = rndmPtr->flat();
2623  // Flavours trivial.
2624  if (tmPrand < 0.33333333) { setId( id1, id2, 11, -11); }
2625  else if (tmPrand < 0.66666667) { setId( id1, id2, 13, -13); }
2626  else { setId( id1, id2, 15, -15); }
2627 
2628  // tH defined between f and f': must swap tHat <-> uHat if id1 is fbar.
2629  swapTU = (id2 > 0);
2630 
2631  // Colour flow topologies. Swap when antiquarks.
2632  if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2633  else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2634  if (id1 < 0) swapColAcol();
2635 
2636 }
2637 
2638 //==========================================================================
2639 
2640 // Sigma2gg2LEDllbar class.
2641 // Cross section for g g -> (LED G*/U*) -> l lbar
2642 // (virtual graviton/unparticle exchange).
2643 
2644 //--------------------------------------------------------------------------
2645 
2646 void Sigma2gg2LEDllbar::initProc() {
2647 
2648  // Init model parameters.
2649  if (eDgraviton) {
2650  eDspin = 2;
2651  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2652  eDdU = 2;
2653  eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2654  eDlambda = 1;
2655  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2656  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2657  } else {
2658  eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2659  eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2660  eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2661  eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2662  }
2663 
2664  // Model dependent constants.
2665  if (eDgraviton) {
2666  eDlambda2chi = 4 * M_PI;
2667 
2668  } else {
2669  double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2670  * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2671  double tmPdUpi = eDdU * M_PI;
2672  eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2673  }
2674 
2675  // Model parameter check (if not applicable, sigma = 0).
2676  if ( !(eDspin==2) ) {
2677  eDlambda2chi = 0;
2678  infoPtr->errorMsg("Error in Sigma2gg2LEDllbar::initProc: "
2679  "Incorrect spin value (turn process off)!");
2680  } else if ( !eDgraviton && (eDdU >= 2)) {
2681  eDlambda2chi = 0;
2682  infoPtr->errorMsg("Error in Sigma2gg2LEDllbar::initProc: "
2683  "This process requires dU < 2 (turn process off)!");
2684  }
2685 
2686 }
2687 
2688 //--------------------------------------------------------------------------
2689 
2690 void Sigma2gg2LEDllbar::sigmaKin() {
2691 
2692  // Form factor.
2693  double tmPeffLambdaU = eDLambdaU;
2694  if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2695  double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2696  double tmPexp = double(eDnGrav) + 2;
2697  double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2698  tmPeffLambdaU *= pow(tmPformfact,0.25);
2699  }
2700 
2701  // ME from spin-2 unparticle.
2702  double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2703  double tmPexp = eDdU - 2;
2704  double tmPA = -eDlambda2chi * pow(tmPsLambda2,tmPexp)
2705  / (8 * pow(tmPeffLambdaU,4));
2706  eDsigma0 = 4 * pow2(tmPA) * uH * tH * (pow2(uH) + pow2(tH));
2707 
2708  // extra 1/sHS from 2-to-2 phase space.
2709  eDsigma0 /= 16 * M_PI * pow2(sH);
2710 
2711  // sigma(ffbar->llbar) = 3 * sigma(ffbar->eebar)
2712  eDsigma0 *= 3.;
2713 
2714 }
2715 
2716 //--------------------------------------------------------------------------
2717 
2718 void Sigma2gg2LEDllbar::setIdColAcol() {
2719 
2720  double tmPrand = rndmPtr->flat();
2721  // Flavours trivial.
2722  if (tmPrand < 0.33333333) { setId( 21, 21, 11, -11); }
2723  else if (tmPrand < 0.66666667) { setId( 21, 21, 13, -13); }
2724  else { setId( 21, 21, 15, -15); }
2725 
2726  // Colour flow topologies.
2727  setColAcol( 1, 2, 2, 1, 0, 0, 0, 0);
2728 
2729 }
2730 
2731 //==========================================================================
2732 
2733 // Sigma2gg2LEDgg class.
2734 // Cross section for g g -> (LED G*) -> g g.
2735 
2736 //--------------------------------------------------------------------------
2737 
2738 // Initialize process.
2739 
2740 void Sigma2gg2LEDgg::initProc() {
2741 
2742  // Read model parameters.
2743  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2744  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2745  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2746  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2747  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2748  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2749  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2750 
2751 }
2752 
2753 //--------------------------------------------------------------------------
2754 
2755 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2756 
2757 void Sigma2gg2LEDgg::sigmaKin() {
2758 
2759  // Get S(x) values for G amplitude.
2760  complex sS(0., 0.);
2761  complex sT(0., 0.);
2762  complex sU(0., 0.);
2763  if (eDopMode == 0) {
2764  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2765  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2766  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2767  } else {
2768  // Form factor.
2769  double effLambda = eDLambdaT;
2770  if ((eDcutoff == 2) || (eDcutoff == 3)) {
2771  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2772  double exp = double(eDnGrav) + 2.;
2773  double formfa = 1. + pow(ffterm, exp);
2774  effLambda *= pow(formfa,0.25);
2775  }
2776  sS = 4.*M_PI/pow(effLambda,4);
2777  sT = 4.*M_PI/pow(effLambda,4);
2778  sU = 4.*M_PI/pow(effLambda,4);
2779  if (eDnegInt == 1) {
2780  sS *= -1.;
2781  sT *= -1.;
2782  sU *= -1.;
2783  }
2784  }
2785 
2786  // Calculate kinematics dependence.
2787  double sH3 = sH*sH2;
2788  double tH3 = tH*tH2;
2789  double uH3 = uH*uH2;
2790 
2791  sigTS = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2792  * (tH2 / sH2 + 2. * tH / sH + 3. + 2. * sH / tH + sH2 / tH2)
2793  + 24.*M_PI*alpS*( (sH3/tH + tH2 + 3.*(sH*tH + sH2))*sS.real()
2794  + (tH3/sH + sH2 + 3.*(tH*sH + tH2))*sT.real())
2795  + pow2(uH2)*( 4.*real(sS*conj(sS)) + sS.real()*sT.real()
2796  + sS.imag()*sT.imag() + 4.*real(sT*conj(sT)));
2797 
2798 
2799  sigUS = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2800  * (uH2 / sH2 + 2. * uH / sH + 3. + 2. * sH / uH + sH2 / uH2)
2801  + 24.*M_PI*alpS*( (sH3/uH + uH2 + 3.*(sH*uH + sH2))*sS.real()
2802  + (uH3/sH + sH2 + 3.*(uH*sH + uH2))*sU.real())
2803  + pow2(tH2)*( 4.*real(sS*conj(sS)) + sS.real()*sU.real()
2804  + sS.imag()*sU.imag() + 4.*real(sU*conj(sU)));
2805 
2806  sigTU = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2807  * (tH2 / uH2 + 2. * tH / uH + 3. + 2. * uH / tH + uH2 / tH2)
2808  + 24.*M_PI*alpS*( (tH3/uH + uH2 + 3.*(tH*uH + tH2))*sT.real()
2809  + (uH3/tH + tH2 + 3.*(uH*tH + uH2))*sU.real())
2810  + pow2(sH2)*( 4.*real(sT*conj(sT)) + sT.real()*sU.real()
2811  + sT.imag()*sU.imag() + 4.*real(sU*conj(sU)));
2812 
2813  sigSum = sigTS + sigUS + sigTU;
2814 
2815  // Answer contains factor 1/2 from identical gluons.
2816  sigma = 0.5 * sigSum / (128. * M_PI * sH2);
2817 
2818 }
2819 
2820 //--------------------------------------------------------------------------
2821 
2822 // Select identity, colour and anticolour.
2823 
2824 void Sigma2gg2LEDgg::setIdColAcol() {
2825 
2826  // Flavours are trivial.
2827  setId( id1, id2, 21, 21);
2828 
2829  // Three colour flow topologies, each with two orientations.
2830  double sigRand = sigSum * rndmPtr->flat();
2831  if (sigRand < sigTS) setColAcol( 1, 2, 2, 3, 1, 4, 4, 3);
2832  else if (sigRand < sigTS + sigUS)
2833  setColAcol( 1, 2, 3, 1, 3, 4, 4, 2);
2834  else setColAcol( 1, 2, 3, 4, 1, 4, 3, 2);
2835  if (rndmPtr->flat() > 0.5) swapColAcol();
2836 
2837 }
2838 
2839 //==========================================================================
2840 
2841 // Sigma2gg2LEDqqbar class.
2842 // Cross section for g g -> (LED G*) -> q qbar.
2843 
2844 //--------------------------------------------------------------------------
2845 
2846 // Initialize process.
2847 
2848 void Sigma2gg2LEDqqbar::initProc() {
2849 
2850  // Read number of quarks to be considered in massless approximation
2851  // as well as model parameters.
2852  nQuarkNew = settingsPtr->mode("ExtraDimensionsLED:nQuarkNew");
2853  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2854  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2855  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2856  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2857  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2858  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2859  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2860 
2861 }
2862 
2863 //--------------------------------------------------------------------------
2864 
2865 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2866 
2867 void Sigma2gg2LEDqqbar::sigmaKin() {
2868 
2869  // Get S(x) values for G amplitude.
2870  complex sS(0., 0.);
2871  complex sT(0., 0.);
2872  complex sU(0., 0.);
2873  if (eDopMode == 0) {
2874  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2875  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2876  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2877  } else {
2878  // Form factor.
2879  double effLambda = eDLambdaT;
2880  if ((eDcutoff == 2) || (eDcutoff == 3)) {
2881  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2882  double exp = double(eDnGrav) + 2.;
2883  double formfa = 1. + pow(ffterm, exp);
2884  effLambda *= pow(formfa,0.25);
2885  }
2886  sS = 4.*M_PI/pow(effLambda,4);
2887  sT = 4.*M_PI/pow(effLambda,4);
2888  sU = 4.*M_PI/pow(effLambda,4);
2889  if (eDnegInt == 1) {
2890  sS *= -1.;
2891  sT *= -1.;
2892  sU *= -1.;
2893  }
2894  }
2895 
2896  // Pick new flavour.
2897  idNew = 1 + int( nQuarkNew * rndmPtr->flat() );
2898  mNew = particleDataPtr->m0(idNew);
2899  m2New = mNew*mNew;
2900 
2901  // Calculate kinematics dependence.
2902  sigTS = 0.;
2903  sigUS = 0.;
2904  if (sH > 4. * m2New) {
2905  double tH3 = tH*tH2;
2906  double uH3 = uH*uH2;
2907  sigTS = (16. * pow2(M_PI) * pow2(alpS))
2908  * ((1./6.) * uH / tH - (3./8.) * uH2 / sH2)
2909  - 0.5 * M_PI * alpS * uH2 * sS.real()
2910  + (3./16.) * uH3 * tH * real(sS*conj(sS));
2911  sigUS = (16. * pow2(M_PI) * pow2(alpS))
2912  * ((1./6.) * tH / uH - (3./8.) * tH2 / sH2)
2913  - 0.5 * M_PI * alpS * tH2 * sS.real()
2914  + (3./16.) * tH3 * uH * real(sS*conj(sS));
2915  }
2916  sigSum = sigTS + sigUS;
2917 
2918  // Answer is proportional to number of outgoing flavours.
2919  sigma = nQuarkNew * sigSum / (16. * M_PI * sH2);
2920 
2921 }
2922 
2923 //--------------------------------------------------------------------------
2924 
2925 // Select identity, colour and anticolour.
2926 
2927 void Sigma2gg2LEDqqbar::setIdColAcol() {
2928 
2929  // Flavours are trivial.
2930  setId( id1, id2, idNew, -idNew);
2931 
2932  // Two colour flow topologies.
2933  double sigRand = sigSum * rndmPtr->flat();
2934  if (sigRand < sigTS) setColAcol( 1, 2, 2, 3, 1, 0, 0, 3);
2935  else setColAcol( 1, 2, 3, 1, 3, 0, 0, 2);
2936 
2937 }
2938 
2939 //==========================================================================
2940 
2941 // Sigma2qg2LEDqg class.
2942 // Cross section for q g -> (LED G*) -> q g.
2943 
2944 //--------------------------------------------------------------------------
2945 
2946 // Initialize process.
2947 
2948 void Sigma2qg2LEDqg::initProc() {
2949 
2950  // Read model parameters.
2951  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2952  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2953  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2954  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2955  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2956  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2957  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2958 
2959 }
2960 
2961 //--------------------------------------------------------------------------
2962 
2963 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2964 
2965 void Sigma2qg2LEDqg::sigmaKin() {
2966 
2967  // Get S(x) values for G amplitude.
2968  complex sS(0., 0.);
2969  complex sT(0., 0.);
2970  complex sU(0., 0.);
2971  if (eDopMode == 0) {
2972  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2973  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2974  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2975  } else {
2976  // Form factor.
2977  double effLambda = eDLambdaT;
2978  if ((eDcutoff == 2) || (eDcutoff == 3)) {
2979  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2980  double exp = double(eDnGrav) + 2.;
2981  double formfa = 1. + pow(ffterm, exp);
2982  effLambda *= pow(formfa,0.25);
2983  }
2984  sS = 4.*M_PI/pow(effLambda,4);
2985  sT = 4.*M_PI/pow(effLambda,4);
2986  sU = 4.*M_PI/pow(effLambda,4);
2987  if (eDnegInt == 1) {
2988  sS *= -1.;
2989  sT *= -1.;
2990  sU *= -1.;
2991  }
2992  }
2993 
2994  // Calculate kinematics dependence.
2995  double sH3 = sH*sH2;
2996  double uH3 = uH*uH2;
2997  sigTS = (16. * pow2(M_PI) * pow2(alpS))
2998  * (uH2 / tH2 - (4./9.) * uH / sH)
2999  + (4./3.) * M_PI * alpS * uH2 * sT.real()
3000  - 0.5 * uH3 * sH * real(sT*conj(sT));
3001  sigTU = (16. * pow2(M_PI) * pow2(alpS))
3002  * (sH2 / tH2 - (4./9.) * sH / uH)
3003  + (4./3.) * M_PI * alpS * sH2 * sT.real()
3004  - 0.5 * sH3 * uH * real(sT*conj(sT));
3005  sigSum = sigTS + sigTU;
3006 
3007  // Answer.
3008  sigma = sigSum / (16. * M_PI * sH2);
3009 
3010 }
3011 
3012 //--------------------------------------------------------------------------
3013 
3014 // Select identity, colour and anticolour.
3015 
3016 void Sigma2qg2LEDqg::setIdColAcol() {
3017 
3018  // Outgoing = incoming flavours.
3019  setId( id1, id2, id1, id2);
3020 
3021  // Two colour flow topologies. Swap if first is gluon, or when antiquark.
3022  double sigRand = sigSum * rndmPtr->flat();
3023  if (sigRand < sigTS) setColAcol( 1, 0, 2, 1, 3, 0, 2, 3);
3024  else setColAcol( 1, 0, 2, 3, 2, 0, 1, 3);
3025  if (id1 == 21) swapCol1234();
3026  if (id1 < 0 || id2 < 0) swapColAcol();
3027 
3028 }
3029 
3030 //==========================================================================
3031 
3032 // Sigma2qq2LEDqq class.
3033 // Cross section for q q(bar)' -> (LED G*) -> q q(bar)'
3034 
3035 //--------------------------------------------------------------------------
3036 
3037 // Initialize process.
3038 
3039 void Sigma2qq2LEDqq::initProc() {
3040 
3041  // Read model parameters.
3042  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3043  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3044  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3045  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3046  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
3047  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3048  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3049 
3050 }
3051 
3052 //--------------------------------------------------------------------------
3053 
3054 // Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
3055 
3056 void Sigma2qq2LEDqq::sigmaKin() {
3057 
3058  // Get S(x) values for G amplitude.
3059  complex sS(0., 0.);
3060  complex sT(0., 0.);
3061  complex sU(0., 0.);
3062  if (eDopMode == 0) {
3063  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3064  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3065  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3066  } else {
3067  // Form factor.
3068  double effLambda = eDLambdaT;
3069  if ((eDcutoff == 2) || (eDcutoff == 3)) {
3070  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3071  double exp = double(eDnGrav) + 2.;
3072  double formfa = 1. + pow(ffterm, exp);
3073  effLambda *= pow(formfa,0.25);
3074  }
3075  sS = 4.*M_PI/pow(effLambda,4);
3076  sT = 4.*M_PI/pow(effLambda,4);
3077  sU = 4.*M_PI/pow(effLambda,4);
3078  if (eDnegInt == 1) {
3079  sS *= -1.;
3080  sT *= -1.;
3081  sU *= -1.;
3082  }
3083  }
3084 
3085  // Calculate kinematics dependence for different terms.
3086  sigT = (4./9.) * (sH2 + uH2) / tH2;
3087  sigU = (4./9.) * (sH2 + tH2) / uH2;
3088  sigTU = - (8./27.) * sH2 / (tH * uH);
3089  sigST = - (8./27.) * uH2 / (sH * tH);
3090  // Graviton terms.
3091  sigGrT1 = funLedG(tH, uH) * real(sT*conj(sT)) / 8.;
3092  sigGrT2 = funLedG(tH, sH) * real(sT*conj(sT)) / 8.;
3093  sigGrU = funLedG(uH, tH) * real(sU*conj(sU)) / 8.;
3094  sigGrTU = (8./9.) * M_PI * alpS * sH2
3095  * ((4.*uH + tH)*sT.real()/uH + (4.*tH + uH)*sU.real()/tH)
3096  + (sT.real()*sU.real() + sT.imag()*sU.imag())
3097  * (4.*tH + uH)*(4.*uH + tH) * sH2 / 48.;
3098  sigGrST = (8./9.) * M_PI * alpS * uH2
3099  * ((4.*tH + sH)*sS.real()/tH + (4.*sH + tH)*sT.real()/sH)
3100  + (sS.real()*sT.real() + sS.imag()*sT.imag())
3101  * (4.*sH + tH)*(4.*tH + sH) * uH2 / 48.;
3102 
3103 }
3104 
3105 //--------------------------------------------------------------------------
3106 
3107 // Evaluate d(sigmaHat)/d(tHat), including incoming flavour dependence.
3108 
3109 double Sigma2qq2LEDqq::sigmaHat() {
3110 
3111  // Combine cross section terms; factor 1/2 when identical quarks.
3112  if (id2 == id1) {
3113  sigSum = (16. * pow2(M_PI) * pow2(alpS)) * (sigT + sigU + sigTU)
3114  + sigGrT1 + sigGrU + sigGrTU;
3115  sigSum *= 0.5;
3116  } else if (id2 == -id1) {
3117  sigSum = (16. * pow2(M_PI) * pow2(alpS)) * (sigT + sigST)
3118  + sigGrT2 + sigGrST;
3119  } else {
3120  sigSum = 16. * pow2(M_PI) * pow2(alpS) * sigT + sigGrT1;
3121  }
3122 
3123  // Answer.
3124  return sigSum / (16. * M_PI * sH2);
3125 
3126 }
3127 
3128 //--------------------------------------------------------------------------
3129 
3130 // Select identity, colour and anticolour.
3131 
3132 void Sigma2qq2LEDqq::setIdColAcol() {
3133 
3134  // Outgoing = incoming flavours.
3135  setId( id1, id2, id1, id2);
3136 
3137  // Colour flow topologies. Swap when antiquarks.
3138  double sigTtot = sigT + sigGrT2;
3139  double sigUtot = sigU + sigGrU;
3140  if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
3141  else setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
3142  if (id2 == id1 && (sigTtot + sigUtot) * rndmPtr->flat() > sigTtot)
3143  setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
3144  if (id1 < 0) swapColAcol();
3145 
3146 }
3147 
3148 //==========================================================================
3149 
3150 // Sigma2qqbar2LEDgg class.
3151 // Cross section for q qbar -> (LED G*) -> g g.
3152 
3153 //--------------------------------------------------------------------------
3154 
3155 // Initialize process.
3156 
3157 void Sigma2qqbar2LEDgg::initProc() {
3158 
3159  // Read model parameters.
3160  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3161  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3162  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3163  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3164  eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
3165  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3166  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3167 
3168 }
3169 
3170 //--------------------------------------------------------------------------
3171 
3172 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
3173 
3174 void Sigma2qqbar2LEDgg::sigmaKin() {
3175 
3176  // Get S(x) values for G amplitude.
3177  complex sS(0., 0.);
3178  complex sT(0., 0.);
3179  complex sU(0., 0.);
3180  if (eDopMode == 0) {
3181  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3182  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3183  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3184  } else {
3185  // Form factor.
3186  double effLambda = eDLambdaT;
3187  if ((eDcutoff == 2) || (eDcutoff == 3)) {
3188  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3189  double exp = double(eDnGrav) + 2.;
3190  double formfa = 1. + pow(ffterm, exp);
3191  effLambda *= pow(formfa,0.25);
3192  }
3193  sS = 4.*M_PI/pow(effLambda,4);
3194  sT = 4.*M_PI/pow(effLambda,4);
3195  sU = 4.*M_PI/pow(effLambda,4);
3196  if (eDnegInt == 1) {
3197  sS *= -1.;
3198  sT *= -1.;
3199  sU *= -1.;
3200  }
3201  }
3202 
3203  // Calculate kinematics dependence.
3204  double tH3 = tH*tH2;
3205  double uH3 = uH*uH2;
3206  sigTS = (16. * pow2(M_PI) * pow2(alpS))
3207  * ((1./6.) * uH / tH - (3./8.) * uH2 / sH2)
3208  - 0.5 * M_PI * alpS * uH2 * sS.real()
3209  + (3./16.) * uH3 * tH * real(sS*conj(sS));
3210  sigUS = (16. * pow2(M_PI) * pow2(alpS))
3211  * ((1./6.) * tH / uH - (3./8.) * tH2 / sH2)
3212  - 0.5 * M_PI * alpS * tH2 * sS.real()
3213  + (3./16.) * tH3 * uH * real(sS*conj(sS));
3214 
3215  sigSum = sigTS + sigUS;
3216 
3217  // Answer contains factor 1/2 from identical gluons.
3218  sigma = (64./9.) * 0.5 * sigSum / (16. * M_PI * sH2);
3219 
3220 }
3221 
3222 //--------------------------------------------------------------------------
3223 
3224 // Select identity, colour and anticolour.
3225 
3226 void Sigma2qqbar2LEDgg::setIdColAcol() {
3227 
3228  // Outgoing flavours trivial.
3229  setId( id1, id2, 21, 21);
3230 
3231  // Two colour flow topologies. Swap if first is antiquark.
3232  double sigRand = sigSum * rndmPtr->flat();
3233  if (sigRand < sigTS) setColAcol( 1, 0, 0, 2, 1, 3, 3, 2);
3234  else setColAcol( 1, 0, 0, 2, 3, 2, 1, 3);
3235  if (id1 < 0) swapColAcol();
3236 
3237 }
3238 
3239 //==========================================================================
3240 
3241 // Sigma2qqbar2LEDqqbarNew class.
3242 // Cross section q qbar -> (LED G*) -> q' qbar'.
3243 
3244 //--------------------------------------------------------------------------
3245 
3246 // Initialize process.
3247 
3248 void Sigma2qqbar2LEDqqbarNew::initProc() {
3249 
3250  // Read number of quarks to be considered in massless approximation
3251  // as well as model parameters.
3252  nQuarkNew = settingsPtr->mode("ExtraDimensionsLED:nQuarkNew");
3253  eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3254  eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3255  eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3256  eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3257  eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3258  eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3259 
3260 }
3261 
3262 //--------------------------------------------------------------------------
3263 
3264 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
3265 
3266 void Sigma2qqbar2LEDqqbarNew::sigmaKin() {
3267 
3268  // Get S(x) values for G amplitude.
3269  complex sS(0., 0.);
3270  complex sT(0., 0.);
3271  complex sU(0., 0.);
3272  if (eDopMode == 0) {
3273  sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3274  sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3275  sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3276  } else {
3277  // Form factor.
3278  double effLambda = eDLambdaT;
3279  if ((eDcutoff == 2) || (eDcutoff == 3)) {
3280  double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3281  double exp = double(eDnGrav) + 2.;
3282  double formfa = 1. + pow(ffterm, exp);
3283  effLambda *= pow(formfa,0.25);
3284  }
3285  sS = 4.*M_PI/pow(effLambda,4);
3286  sT = 4.*M_PI/pow(effLambda,4);
3287  sU = 4.*M_PI/pow(effLambda,4);
3288  }
3289 
3290  // Pick new flavour.
3291  idNew = 1 + int( nQuarkNew * rndmPtr->flat() );
3292  mNew = particleDataPtr->m0(idNew);
3293  m2New = mNew*mNew;
3294 
3295  // Calculate kinematics dependence.
3296  sigS = 0.;
3297  if (sH > 4. * m2New) {
3298  sigS = (16. * pow2(M_PI) * pow2(alpS))
3299  * (4./9.) * (tH2 + uH2) / sH2
3300  + funLedG(sH, tH) * real(sS*conj(sS)) / 8.;
3301  }
3302  // Answer is proportional to number of outgoing flavours.
3303  sigma = nQuarkNew * sigS / (16. * M_PI * sH2);
3304 
3305 }
3306 
3307 //--------------------------------------------------------------------------
3308 
3309 // Select identity, colour and anticolour.
3310 
3311 void Sigma2qqbar2LEDqqbarNew::setIdColAcol() {
3312 
3313  // Set outgoing flavours ones.
3314  id3 = (id1 > 0) ? idNew : -idNew;
3315  setId( id1, id2, id3, -id3);
3316 
3317  // Colour flow topologies. Swap when antiquarks.
3318  setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
3319  if (id1 < 0) swapColAcol();
3320 
3321 }
3322 
3323 //==========================================================================
3324 
3325 } // end namespace Pythia8
Definition: AgUStep.h:26