1 // SigmaExtraDim.cc is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 Torbjorn Sjostrand.
3 // Copyright (C) 2012 Stefan Ask for the *LED* routines.
4 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
7 // Function definitions (not found in the header) for the
8 // extra-dimensional simulation classes.
10 #include "SigmaExtraDim.h"
14 //==========================================================================
16 // ampLedS (amplitude) method for LED graviton tree level exchange.
17 // Based on Eq. (8) in JHEP 1105 (2011) 092, arXiv:1101.4919.
19 complex ampLedS(double x, double n, double L, double M) {
22 if (n <= 0) return cS;
27 double rC = sqrt(pow(M_PI,n)) * pow(L,exp1)
28 / (GammaReal(n/2.) * pow(M,exp2));
30 // Base functions, F1 and F2.
33 double sqrX = sqrt(-x);
34 if (int(n) % 2 == 0) {
35 cS = -log(fabs(1 - 1/x));
37 cS = (2.*atan(sqrX) - M_PI)/sqrX;
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;
44 double rat = (sqrX + 1)/(sqrX - 1);
45 cS = log(fabs(rat))/sqrX - M_PI*I/sqrX;
48 double sqrX = sqrt(x);
49 if (int(n) % 2 == 0) {
50 cS = -log(fabs(1 - 1/x));
52 double rat = (sqrX + 1)/(sqrX - 1);
53 cS = log(fabs(rat))/sqrX;
60 if (int(n) % 2 == 0) {
67 for (int i=1; i<nL; ++i) {
75 //--------------------------------------------------------------------------
77 // Common method, "Mandelstam polynomial", for LED dijet processes.
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);
85 //==========================================================================
87 // Sigma1gg2GravitonStar class.
88 // Cross section for g g -> G* (excited graviton state).
90 //--------------------------------------------------------------------------
92 // Initialize process.
94 void Sigma1gg2GravitonStar::initProc() {
96 // Store G* mass and width for propagator.
98 mRes = particleDataPtr->m0(idGstar);
99 GammaRes = particleDataPtr->mWidth(idGstar);
101 GamMRat = GammaRes / mRes;
103 // SMinBulk = off/on, use universal coupling (kappaMG)
104 // or individual (Gxx) between graviton and SM particles.
105 eDsmbulk = settingsPtr->flag("ExtraDimensionsG*:SMinBulk");
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");
122 // Set pointer to particle properties and decay table.
123 gStarPtr = particleDataPtr->particleDataEntryPtr(idGstar);
127 //--------------------------------------------------------------------------
129 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
131 void Sigma1gg2GravitonStar::sigmaKin() {
133 // Incoming width for gluons.
134 double widthIn = mH / (160. * M_PI);
136 // RS graviton coupling
137 if (eDsmbulk) widthIn *= 2. * pow2(eDcoupling[21] * mH);
138 else widthIn *= pow2(kappaMG);
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);
144 // Modify cross section in wings of peak. Done.
145 sigma = widthIn * sigBW * widthOut * pow2(sH / m2Res);
149 //--------------------------------------------------------------------------
151 // Select identity, colour and anticolour.
153 void Sigma1gg2GravitonStar::setIdColAcol() {
156 setId( 21, 21, idGstar);
158 // Colour flow topology.
159 setColAcol( 1, 2, 2, 1, 0, 0);
163 //--------------------------------------------------------------------------
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]
169 double Sigma1gg2GravitonStar::weightDecay( Event& process, int iResBeg,
172 // Identity of mother of decaying reseonance(s).
173 int idMother = process[process[iResBeg].mother1()].idAbs();
175 // For top decay hand over to standard routine.
177 return weightTopDecay( process, iResBeg, iResEnd);
179 // G* should sit in entry 5.
180 if (iResBeg != 5 || iResEnd != 5) return 1.;
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);
189 // Default is isotropic decay.
192 // Angular weight for g + g -> G* -> f + fbar.
193 if (process[6].idAbs() < 19) {
194 wt = 1. - pow4(cosThe);
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.;
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.
209 // Transverse W/Z contributions as well.
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);
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);
234 //==========================================================================
236 // Sigma1ffbar2GravitonStar class.
237 // Cross section for f fbar -> G* (excited graviton state).
239 //--------------------------------------------------------------------------
241 // Initialize process.
243 void Sigma1ffbar2GravitonStar::initProc() {
245 // Store G* mass and width for propagator.
247 mRes = particleDataPtr->m0(idGstar);
248 GammaRes = particleDataPtr->mWidth(idGstar);
250 GamMRat = GammaRes / mRes;
252 // SMinBulk = off/on, use universal coupling (kappaMG)
253 // or individual (Gxx) between graviton and SM particles.
254 eDsmbulk = settingsPtr->flag("ExtraDimensionsG*:SMinBulk");
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");
271 // Set pointer to particle properties and decay table.
272 gStarPtr = particleDataPtr->particleDataEntryPtr(idGstar);
276 //--------------------------------------------------------------------------
278 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
280 void Sigma1ffbar2GravitonStar::sigmaKin() {
282 // Incoming width for fermions, disregarding colour factor.
283 double widthIn = mH / (80. * M_PI);
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);
289 // Modify cross section in wings of peak. Done.
290 sigma0 = widthIn * sigBW * widthOut * pow2(sH / m2Res);
294 //--------------------------------------------------------------------------
296 // Evaluate sigmaHat(sHat), part dependent of incoming flavour.
298 double Sigma1ffbar2GravitonStar::sigmaHat() {
300 double sigma = sigma0;
302 // RS graviton coupling
303 if (eDsmbulk) sigma *= 2. * pow2(eDcoupling[min( abs(id1), 26)] * mH);
304 else sigma *= pow2(kappaMG);
306 // If initial quarks, 1/N_C
307 if (abs(id1) < 9) sigma /= 3.;
312 //--------------------------------------------------------------------------
314 // Select identity, colour and anticolour.
316 void Sigma1ffbar2GravitonStar::setIdColAcol() {
319 setId( id1, id2, idGstar);
321 // Colour flow topologies. Swap when antiquarks.
322 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
323 else setColAcol( 0, 0, 0, 0, 0, 0);
324 if (id1 < 0) swapColAcol();
328 //--------------------------------------------------------------------------
330 // Evaluate weight for G* decay angle.
331 // SA: Angle dist. for decay G* -> W/Z/h, based on
332 // Phys.Rev. D65 (2002) 075008, [arXiv:hep-ph/0103308v3]
334 double Sigma1ffbar2GravitonStar::weightDecay( Event& process, int iResBeg,
337 // Identity of mother of decaying reseonance(s).
338 int idMother = process[process[iResBeg].mother1()].idAbs();
340 // For top decay hand over to standard routine.
342 return weightTopDecay( process, iResBeg, iResEnd);
344 // G* should sit in entry 5.
345 if (iResBeg != 5 || iResEnd != 5) return 1.;
347 // Phase space factors. Reconstruct decay angle.
348 double mr1 = pow2(process[6].m()) / sH;
349 double mr2 = pow2(process[7].m()) / sH;
350 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
351 double cosThe = (process[3].p() - process[4].p())
352 * (process[7].p() - process[6].p()) / (sH * betaf);
354 // Default is isotropic decay.
357 // Angular weight for f + fbar -> G* -> f + fbar.
358 if (process[6].idAbs() < 19) {
359 wt = (1. - 3. * pow2(cosThe) + 4. * pow4(cosThe)) / 2.;
361 // Angular weight for f + fbar -> G* -> g + g or gamma + gamma.
362 } else if (process[6].id() == 21 || process[6].id() == 22) {
363 wt = 1. - pow4(cosThe);
365 // Angular weight for f + fbar -> G* -> Z + Z or W + W.
366 } else if (process[6].id() == 23 || process[6].id() == 24) {
367 double beta2 = pow2(betaf);
368 double cost2 = pow2(cosThe);
369 double cost4 = pow2(cost2);
370 wt = pow2(beta2 - 2.)*cost2*(1. - cost2);
371 // Longitudinal W/Z only.
374 // Transverse W/Z contributions as well.
376 wt += pow2(beta2 - 1.)*cost2*(1. - cost2);
377 wt += 2.*(1. - cost4);
378 wt += (1. - beta2)*(1. - 3.*cost2 + 4.*cost4);
382 // Angular weight for f + fbar -> G* -> h + h
383 } else if (process[6].id() == 25) {
384 double beta2 = pow2(betaf);
385 double cost2 = pow2(cosThe);
386 wt = pow2(beta2 - 2.)*cost2*(1. - cost2);
395 //==========================================================================
397 // Sigma1qqbar2KKgluonStar class.
398 // Cross section for q qbar -> g^*/KK-gluon^* (excited KK-gluon state).
400 //--------------------------------------------------------------------------
402 // Initialize process.
404 void Sigma1qqbar2KKgluonStar::initProc() {
406 // Store kk-gluon* mass and width for propagator.
408 mRes = particleDataPtr->m0(idKKgluon);
409 GammaRes = particleDataPtr->mWidth(idKKgluon);
411 GamMRat = GammaRes / mRes;
413 // KK-gluon gv/ga couplings and interference.
414 for (int i = 0; i < 10; ++i) { eDgv[i] = 0.; eDga[i] = 0.; }
415 double tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgqL");
416 double tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgqR");
417 for (int i = 1; i <= 4; ++i) {
418 eDgv[i] = 0.5 * (tmPgL + tmPgR);
419 eDga[i] = 0.5 * (tmPgL - tmPgR);
421 tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgbL");
422 tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgbR");
423 eDgv[5] = 0.5 * (tmPgL + tmPgR); eDga[5] = 0.5 * (tmPgL - tmPgR);
424 tmPgL = settingsPtr->parm("ExtraDimensionsG*:KKgtL");
425 tmPgR = settingsPtr->parm("ExtraDimensionsG*:KKgtR");
426 eDgv[6] = 0.5 * (tmPgL + tmPgR); eDga[6] = 0.5 * (tmPgL - tmPgR);
427 interfMode = settingsPtr->mode("ExtraDimensionsG*:KKintMode");
429 // Set pointer to particle properties and decay table.
430 gStarPtr = particleDataPtr->particleDataEntryPtr(idKKgluon);
434 //--------------------------------------------------------------------------
436 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
438 void Sigma1qqbar2KKgluonStar::sigmaKin() {
440 // Incoming width for fermions.
441 double widthIn = alpS * mH * 4 / 27;
442 double widthOut = alpS * mH / 6;
444 // Loop over all decay channels.
449 for (int i = 0; i < gStarPtr->sizeChannels(); ++i) {
450 int idAbs = abs( gStarPtr->channel(i).product(0) );
452 // Only contributions quarks.
453 if ( idAbs > 0 && idAbs <= 6 ) {
454 double mf = particleDataPtr->m0(idAbs);
456 // Check that above threshold. Phase space.
457 if (mH > 2. * mf + MASSMARGIN) {
458 double mr = pow2(mf / mH);
459 double beta = sqrtpos(1. - 4. * mr);
461 // Store sum of combinations. For outstate only open channels.
462 int onMode = gStarPtr->channel(i).onMode();
463 if (onMode == 1 || onMode == 2) {
464 sumSM += beta * (1. + 2. * mr);
465 sumInt += beta * eDgv[min(idAbs, 9)] * (1. + 2. * mr);
466 sumKK += beta * (pow2(eDgv[min(idAbs, 9)]) * (1. + 2.*mr)
467 + pow2(eDga[min(idAbs, 9)]) * (1. - 4.*mr));
473 // Set up Breit-Wigner. Width out only includes open channels.
474 sigSM = widthIn * 12. * M_PI * widthOut / sH2;
475 sigInt = 2. * sigSM * sH * (sH - m2Res)
476 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
477 sigKK = sigSM * sH2 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
479 // Optionally only keep g* or gKK term.
480 if (interfMode == 1) {sigInt = 0.; sigKK = 0.;}
481 if (interfMode == 2) {sigSM = 0.; sigInt = 0.;}
485 //--------------------------------------------------------------------------
487 // Evaluate sigmaHat(sHat), part dependent of incoming flavour.
489 double Sigma1qqbar2KKgluonStar::sigmaHat() {
491 // RS graviton coupling.
492 double sigma = sigSM * sumSM
493 + eDgv[min(abs(id1), 9)] * sigInt * sumInt
494 + ( pow2(eDgv[min(abs(id1), 9)])
495 + pow2(eDga[min(abs(id1), 9)]) ) * sigKK * sumKK;
500 //--------------------------------------------------------------------------
502 // Select identity, colour and anticolour.
504 void Sigma1qqbar2KKgluonStar::setIdColAcol() {
507 setId( id1, id2, idKKgluon);
509 // Colour flow topologies. Swap when antiquarks.
510 setColAcol( 1, 0, 0, 2, 1, 2);
511 if (id1 < 0) swapColAcol();
515 //--------------------------------------------------------------------------
517 // Evaluate weight for KK-gluon* decay angle (based on ffbar2gmZ).
519 double Sigma1qqbar2KKgluonStar::weightDecay( Event& process, int iResBeg,
522 // Identity of mother of decaying reseonance(s).
523 int idMother = process[process[iResBeg].mother1()].idAbs();
525 // For top decay hand over to standard routine.
527 return weightTopDecay( process, iResBeg, iResEnd);
529 // g* should sit in entry 5.
530 if (iResBeg != 5 || iResEnd != 5) return 1.;
532 // Couplings for in- and out-flavours (alpS already included).
533 int idInAbs = process[3].idAbs();
534 double vi = eDgv[min(idInAbs, 9)];
535 double ai = eDga[min(idInAbs, 9)];
536 int idOutAbs = process[6].idAbs();
537 double vf = eDgv[min(idOutAbs, 9)];
538 double af = eDga[min(idOutAbs, 9)];
540 // Phase space factors. (One power of beta left out in formulae.)
541 double mf = process[6].m();
542 double mr = mf*mf / sH;
543 double betaf = sqrtpos(1. - 4. * mr);
545 // Coefficients of angular expression.
546 double coefTran = sigSM + vi * sigInt * vf
547 + (vi*vi + ai*ai) * sigKK * (vf*vf + pow2(betaf) * af*af);
548 double coefLong = 4. * mr * ( sigSM + vi * sigInt * vf
549 + (vi*vi + ai*ai) * sigKK * vf*vf );
550 double coefAsym = betaf * ( ai * sigInt * af
551 + 4. * vi * ai * sigKK * vf * af );
553 // Flip asymmetry for in-fermion + out-antifermion.
554 if (process[3].id() * process[6].id() < 0) coefAsym = -coefAsym;
556 // Reconstruct decay angle and weight for it.
557 double cosThe = (process[3].p() - process[4].p())
558 * (process[7].p() - process[6].p()) / (sH * betaf);
559 double wtMax = 2. * (coefTran + abs(coefAsym));
560 double wt = coefTran * (1. + pow2(cosThe))
561 + coefLong * (1. - pow2(cosThe)) + 2. * coefAsym * cosThe;
567 //==========================================================================
569 // Sigma2gg2GravitonStarg class.
570 // Cross section for g g -> G* g (excited graviton state).
572 //--------------------------------------------------------------------------
574 // Initialize process.
576 void Sigma2gg2GravitonStarg::initProc() {
578 // Store G* mass and width for propagator.
580 mRes = particleDataPtr->m0(idGstar);
581 GammaRes = particleDataPtr->mWidth(idGstar);
583 GamMRat = GammaRes / mRes;
585 // Overall coupling strength kappa * m_G*.
586 kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
588 // Secondary open width fraction.
589 openFrac = particleDataPtr->resOpenFrac(idGstar);
593 //--------------------------------------------------------------------------
595 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
597 void Sigma2gg2GravitonStarg::sigmaKin() {
599 // Evaluate cross section. Secondary width for G*.
600 sigma = (3. * pow2(kappaMG) * alpS) / (32. * sH * s3)
601 * ( pow2(tH2 + tH * uH + uH2) / (sH2 * tH * uH)
602 + 2. * (tH2 / uH + uH2 / tH) / sH + 3. * (tH / uH + uH / tH)
603 + 2. * (sH / uH + sH/tH) + sH2 / (tH * uH) );
608 //--------------------------------------------------------------------------
610 // Select identity, colour and anticolour.
612 void Sigma2gg2GravitonStarg::setIdColAcol() {
615 setId( 21, 21, idGstar, 21);
617 // Colour flow topologies: random choice between two mirrors.
618 if (rndmPtr->flat() < 0.5) setColAcol( 1, 2, 2, 3, 0, 0, 1, 3);
619 else setColAcol( 1, 2, 3, 1, 0, 0, 3, 2);
623 //--------------------------------------------------------------------------
625 // Evaluate weight for decay angles: currently G* assumed isotropic.
627 double Sigma2gg2GravitonStarg::weightDecay( Event& process, int iResBeg,
630 // Identity of mother of decaying reseonance(s).
631 int idMother = process[process[iResBeg].mother1()].idAbs();
633 // For top decay hand over to standard routine.
635 return weightTopDecay( process, iResBeg, iResEnd);
637 // No equations for G* decay so assume isotropic.
642 //==========================================================================
644 // Sigma2qg2GravitonStarq class.
645 // Cross section for q g -> G* q (excited graviton state).
647 //--------------------------------------------------------------------------
649 // Initialize process.
651 void Sigma2qg2GravitonStarq::initProc() {
653 // Store G* mass and width for propagator.
655 mRes = particleDataPtr->m0(idGstar);
656 GammaRes = particleDataPtr->mWidth(idGstar);
658 GamMRat = GammaRes / mRes;
660 // Overall coupling strength kappa * m_G*.
661 kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
663 // Secondary open width fraction.
664 openFrac = particleDataPtr->resOpenFrac(idGstar);
668 //--------------------------------------------------------------------------
670 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
672 void Sigma2qg2GravitonStarq::sigmaKin() {
674 // Evaluate cross section. Secondary width for G*.
675 sigma = -(pow2(kappaMG) * alpS) / (192. * sH * s3)
676 * ( 4. * (sH2 + uH2) / (tH * sH) + 9. * (sH + uH) / sH + sH / uH
677 + uH2 / sH2 + 3. * tH * (4. + sH / uH + uH / sH) / sH
678 + 4. * tH2 * (1. / uH + 1. / sH) / sH + 2. * tH2 * tH / (uH * sH2) );
683 //--------------------------------------------------------------------------
685 // Select identity, colour and anticolour.
687 void Sigma2qg2GravitonStarq::setIdColAcol() {
689 // Flavour set up for q g -> H q.
690 int idq = (id2 == 21) ? id1 : id2;
691 setId( id1, id2, idGstar, idq);
693 // tH defined between f and f': must swap tHat <-> uHat if q g in.
694 swapTU = (id2 == 21);
696 // Colour flow topologies. Swap when antiquarks.
697 if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
698 else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
699 if (idq < 0) swapColAcol();
703 //--------------------------------------------------------------------------
705 // Evaluate weight for decay angles: currently G* assumed isotropic.
707 double Sigma2qg2GravitonStarq::weightDecay( Event& process, int iResBeg,
710 // Identity of mother of decaying reseonance(s).
711 int idMother = process[process[iResBeg].mother1()].idAbs();
713 // For top decay hand over to standard routine.
715 return weightTopDecay( process, iResBeg, iResEnd);
717 // No equations for G* decay so assume isotropic.
722 //==========================================================================
724 // Sigma2qqbar2GravitonStarg class.
725 // Cross section for q qbar -> G* g (excited graviton state).
727 //--------------------------------------------------------------------------
729 // Initialize process.
731 void Sigma2qqbar2GravitonStarg::initProc() {
733 // Store G* mass and width for propagator.
735 mRes = particleDataPtr->m0(idGstar);
736 GammaRes = particleDataPtr->mWidth(idGstar);
738 GamMRat = GammaRes / mRes;
740 // Overall coupling strength kappa * m_G*.
741 kappaMG = settingsPtr->parm("ExtraDimensionsG*:kappaMG");
743 // Secondary open width fraction.
744 openFrac = particleDataPtr->resOpenFrac(idGstar);
748 //--------------------------------------------------------------------------
750 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
752 void Sigma2qqbar2GravitonStarg::sigmaKin() {
754 // Evaluate cross section. Secondary width for G*.
755 sigma = (pow2(kappaMG) * alpS) / (72. * sH * s3)
756 * ( 4. * (tH2 + uH2) / sH2 + 9. * (tH + uH) / sH
757 + (tH2 / uH + uH2 / tH) / sH + 3. * (4. + tH / uH + uH/ tH)
758 + 4. * (sH / uH + sH / tH) + 2. * sH2 / (tH * uH) );
763 //--------------------------------------------------------------------------
765 // Select identity, colour and anticolour.
767 void Sigma2qqbar2GravitonStarg::setIdColAcol() {
770 setId( id1, id2, idGstar, 21);
772 // Colour flow topologies. Swap when antiquarks.
773 setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
774 if (id1 < 0) swapColAcol();
778 //--------------------------------------------------------------------------
780 // Evaluate weight for decay angles: currently G* assumed isotropic.
782 double Sigma2qqbar2GravitonStarg::weightDecay( Event& process, int iResBeg,
785 // Identity of mother of decaying reseonance(s).
786 int idMother = process[process[iResBeg].mother1()].idAbs();
788 // For top decay hand over to standard routine.
790 return weightTopDecay( process, iResBeg, iResEnd);
792 // No equations for G* decay so assume isotropic.
797 //==========================================================================
799 // NOAM: Sigma2ffbar2TEVffbar class.
800 // Cross section for, f fbar -> gammaKK/ZKK -> F Fbar.
801 // Process provided by N. Hod et al. and is described in arXiv:XXXX.YYYY
803 //--------------------------------------------------------------------------
805 // Initialize process.
807 void Sigma2ffbar2TEVffbar::initProc() {
810 if (idNew == 1) nameSave = "f fbar -> d dbar (s-channel gamma_KK/Z_KK)";
811 if (idNew == 2) nameSave = "f fbar -> u ubar (s-channel gamma_KK/Z_KK)";
812 if (idNew == 3) nameSave = "f fbar -> s sbar (s-channel gamma_KK/Z_KK)";
813 if (idNew == 4) nameSave = "f fbar -> c cbar (s-channel gamma_KK/Z_KK)";
814 if (idNew == 5) nameSave = "f fbar -> b bbar (s-channel gamma_KK/Z_KK)";
815 if (idNew == 6) nameSave = "f fbar -> t tbar (s-channel gamma_KK/Z_KK)";
816 if (idNew == 11) nameSave = "f fbar -> e+ e- (s-channel gamma_KK/Z_KK)";
817 if (idNew == 12) nameSave = "f fbar -> nue nuebar (s-channel gamma_KK/Z_KK)";
818 if (idNew == 13) nameSave = "f fbar -> mu+ mu- (s-channel gamma_KK/Z_KK)";
819 if (idNew == 14) nameSave
820 = "f fbar -> numu numubar (s-channel gamma_KK/Z_KK)";
821 if (idNew == 15) nameSave = "f fbar -> tau+ tau- (s-channel gamma_KK/Z_KK)";
822 if (idNew == 16) nameSave
823 = "f fbar -> nutau nutaubar (s-channel gamma_KK/Z_KK)";
825 // Allow to pick only gamma* or Z0 part of full gamma*/Z0 expression.
826 gmZmode = settingsPtr->mode("ExtraDimensionsTEV:gmZmode");
828 // Pick number of KK excitations
829 nexcitationmax = (int)settingsPtr->parm("ExtraDimensionsTEV:nMax");
831 // Initialize the widths of the KK propogators.
832 // partial width of the KK photon
834 // total width of the KK photon
836 // will be proportional to "wZ0" + ttbar addition
839 // Store Z0 mass and width for propagator.
840 wZ0 = particleDataPtr->mWidth(23);
841 mRes = particleDataPtr->m0(23);
844 // Store the top mass for the ttbar width calculations
845 mTop = particleDataPtr->m0(6);
848 // Store the KK mass parameter, equivalent to the mass of the first KK
849 // excitation: particleDataPtr->m0(5000023);
850 mStar = (double)settingsPtr->parm("ExtraDimensionsTEV:mStar");
852 // Get alphaEM - relevant for the calculation of the widths
853 alphaemfixed = settingsPtr->parm("StandardModel:alphaEM0");
855 // initialize imaginari number
858 // Sum all partial widths of the KK photon except for the ttbar channel
859 // which is handeled afterwards seperately
860 if (gmZmode>=0 && gmZmode<=5) {
861 for (int i=1 ; i<17 ; i++) {
863 // skip the ttbar decay and add its contribution later
864 if (i==6) { continue; }
866 wgmKKFactor += ( (alphaemfixed / 6.) * 4.
867 * couplingsPtr->ef(i) * couplingsPtr->ef(i) * 3. );
870 wgmKKFactor += (alphaemfixed / 6.) * 4.
871 * couplingsPtr->ef(i) * couplingsPtr->ef(i);
876 // Get the helicity-couplings of the Z0 to all the fermions except top
877 gMinusF = ( couplingsPtr->t3f(idNew) - couplingsPtr->ef(idNew)
878 * couplingsPtr->sin2thetaW() )
879 / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
880 gPlusF = -1. * couplingsPtr->ef(idNew) * couplingsPtr->sin2thetaW()
881 / sqrt( couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW() );
882 // Get the helicity-couplings of the Z0 to the top quark
883 gMinusTop = ( couplingsPtr->t3f(6) - couplingsPtr->ef(6)
884 * couplingsPtr->sin2thetaW() )
885 / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
887 gPlusTop = -1. * couplingsPtr->ef(6) * couplingsPtr->sin2thetaW()
888 / sqrt( couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW() );
889 // calculate the constant factor of the unique ttbar decay width
890 ttbarwFactorA = pow2(gMinusTop) + pow2(gPlusTop);
891 ttbarwFactorB = 6.*gMinusTop*gPlusTop - pow2(gMinusTop) - pow2(gPlusTop);
893 // Secondary open width fraction, relevant for top (or heavier).
895 if ((idNew >=6 && idNew <=8) || idNew == 17 || idNew == 18)
896 openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
900 //--------------------------------------------------------------------------
902 // For improving the phase-space sampling (there can be 2 resonances)
904 int Sigma2ffbar2TEVffbar::resonanceB() {
910 //--------------------------------------------------------------------------
912 // For improving the phase-space sampling (there can be 2 resonances)
914 int Sigma2ffbar2TEVffbar::resonanceA() {
917 phaseSpacemHatMin = settingsPtr->parm("PhaseSpace:mHatMin");
918 phaseSpacemHatMax = settingsPtr->parm("PhaseSpace:mHatMax");
919 double mResFirstKKMode = sqrt(pow2(particleDataPtr->m0(23)) + pow2(mStar));
920 if (mResFirstKKMode/2. <= phaseSpacemHatMax
921 || 3*mResFirstKKMode/2. >= phaseSpacemHatMin) { return 5000023; }
923 // no KK terms at all
924 } else { return 23; }
928 //--------------------------------------------------------------------------
930 // Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
932 void Sigma2ffbar2TEVffbar::sigmaKin() {
934 // Check that above threshold.
936 if (mH < m3 + m4 + MASSMARGIN) {
941 // Define average F, Fbar mass so same beta. Phase space.
942 double s34Avg = 0.5 * (s3 + s4) - 0.25 * pow2(s3 - s4) / sH;
944 betaf = sqrtpos(1. - 4. * mr);
946 // Reconstruct decay angle so can reuse 2 -> 1 cross section.
947 cosThe = (tH - uH) / (betaf * sH);
951 //--------------------------------------------------------------------------
953 // Evaluate d(sigmaHat)/d(tHat), including incoming flavour dependence.
955 double Sigma2ffbar2TEVffbar::sigmaHat() {
957 // Fail if below threshold.
958 if (!isPhysical) return 0.;
960 // Couplings for in/out-flavours.
961 int idAbs = abs(id1);
963 // The couplings of the Z0 to the fermions for in/out flavors
964 gMinusf = ( couplingsPtr->t3f(idAbs) - couplingsPtr->ef(idAbs)
965 * couplingsPtr->sin2thetaW() )
966 / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
967 gPlusf = -1. * couplingsPtr->ef(idAbs)*couplingsPtr->sin2thetaW()
968 / sqrt( couplingsPtr->sin2thetaW()*couplingsPtr->cos2thetaW() );
970 // Initialize the some values
975 gammaProp = complex(0.,0.);
976 resProp = complex(0.,0.);
977 gmPropKK = complex(0.,0.);
978 ZPropKK = complex(0.,0.);
979 totalProp = complex(0.,0.);
981 // Sum all initial and final helicity states this corresponds to an
982 // unpolarized beams and unmeasured polarization final-state
983 for (double helicityf=-0.5 ; helicityf<=0.5 ; helicityf++) {
984 for (double helicityF=-0.5 ; helicityF<=0.5 ; helicityF++) {
985 // the couplings for the initial-final helicity configuration
986 gF = (helicityF == +0.5) ? gMinusF : gPlusF;
987 gf = (helicityf == +0.5) ? gMinusf : gPlusf;
988 // 0=SM gmZ, 1=SM gm, 2=SM Z, 3=SM+KK gmZ, 4=KK gm, 5=KK Z
990 // SM photon and Z0 only
992 gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
993 resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
997 gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1001 resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1005 gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1006 resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1007 ZPropKK = complex(0.,0.);
1008 gmPropKK = complex(0.,0.);
1009 // Sum all KK excitations contributions
1010 for(int nexcitation = 1; nexcitation <= nexcitationmax;
1012 mZKKn = sqrt(m2Res + pow2(mStar * nexcitation));
1013 m2ZKKn = m2Res + pow2(mStar * nexcitation);
1014 mgmKKn = mStar * nexcitation;
1015 m2gmKKn = (mStar*nexcitation)*(mStar*nexcitation);
1016 // calculate the width of the n'th excitation of the KK Z
1017 // (proportional to the Z0 width + ttbar partial width)
1018 ttbarwZKKn = 2.*(alphaemfixed*3./6.)*mZKKn
1019 * sqrt(1.-4.*m2Top/m2ZKKn)
1020 * (ttbarwFactorA+(m2Top/m2ZKKn)*ttbarwFactorB);
1021 wZKKn = 2.*wZ0*mZKKn/mRes+ttbarwZKKn;
1022 // calculate the width of the n'th excitation of the
1024 ttbarwgmKKn = 2.*(alphaemfixed*3./6.)*mgmKKn
1025 * sqrt(1.-4.*m2Top/m2gmKKn)
1026 * 2.*pow2(couplingsPtr->ef(6))*(1.+2.*(m2Top/m2gmKKn));
1027 wgmKKn = wgmKKFactor*mgmKKn+ttbarwgmKKn;
1029 gmPropKK += (2.*couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew))
1030 / (sH-m2gmKKn+mI*sH*wgmKKn/mgmKKn);
1031 ZPropKK += (2.*gf*gF)/(sH-m2ZKKn+mI*sH*wZKKn/mZKKn );
1034 // SM photon and Z0 with KK photon only
1036 gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1037 resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1038 gmPropKK = complex(0.,0.);
1039 for (int nexcitation = 1; nexcitation <= nexcitationmax;
1041 mgmKKn = mStar * nexcitation;
1042 m2gmKKn = (mStar*nexcitation)*(mStar*nexcitation);
1044 ttbarwgmKKn = 2.*(alphaemfixed*3./6.)*mgmKKn
1045 * sqrt(1.-4.*m2Top/m2gmKKn)
1046 * 2.*pow2(couplingsPtr->ef(6))
1047 * (1.+2.*(m2Top/m2gmKKn));
1048 wgmKKn = wgmKKFactor*mgmKKn+ttbarwgmKKn;
1049 gmPropKK += (2.*couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew))
1050 / (sH-m2gmKKn+mI*sH*wgmKKn/mgmKKn);
1053 // SM photon and Z0 with KK Z only
1055 gammaProp = couplingsPtr->ef(idAbs)*couplingsPtr->ef(idNew)/sH;
1056 resProp = gf*gF/( sH - m2Res + mI*sH*(wZ0/mRes) );
1057 ZPropKK = complex(0.,0.);
1058 for (int nexcitation = 1; nexcitation <= nexcitationmax;
1060 mZKKn = sqrt(m2Res + pow2(mStar * nexcitation));
1061 m2ZKKn = m2Res + pow2(mStar * nexcitation);
1063 ttbarwZKKn = 2.*(alphaemfixed*3./6.)*mZKKn
1064 * sqrt(1.-4.*m2Top/m2ZKKn)
1065 * (ttbarwFactorA+(m2Top/m2ZKKn)*ttbarwFactorB);
1066 wZKKn = 2.*wZ0*mZKKn/mRes+ttbarwZKKn;
1067 ZPropKK += (2.*gf*gF)/(sH-m2ZKKn+mI*sH*wZKKn/mZKKn );
1071 // end run over initial and final helicity states
1074 // sum all contributing amplitudes
1075 totalProp = gammaProp + resProp + ZPropKK + gmPropKK;
1077 // angular distribution for the helicity configuration
1078 coefAngular = 1. + 4. * helicityF * helicityf * cosThe;
1080 // the squared helicity matrix element
1081 helicityME2 += real(totalProp*conj(totalProp))*pow2(coefAngular);
1085 // calculate the coefficient of the squared helicity matrix element.
1086 coefTot = (2./sH) * 2*M_PI * pow2(alpEM)/(4.*sH) * pow2(sH)/4.;
1088 // the full squared helicity matrix element.
1089 double sigma = helicityME2 * coefTot;
1091 // Top: corrections for closed decay channels.
1092 sigma *= openFracPair;
1094 // Initial-state colour factor. Answer.
1095 if (idAbs < 9) sigma /= 3.;
1097 // Final-state colour factor. Answer.
1098 if (idNew < 9) sigma *= 3.*(1.+alpS/M_PI);
1103 //--------------------------------------------------------------------------
1105 // Select identity, colour and anticolour.
1107 void Sigma2ffbar2TEVffbar::setIdColAcol() {
1109 // Set outgoing flavours.
1110 id3 = (id1 > 0) ? idNew : -idNew;
1111 setId( id1, id2, id3, -id3);
1113 // Colour flow topologies. Swap when antiquarks.
1114 if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1115 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1116 else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1117 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1118 if (id1 < 0) swapColAcol();
1122 //--------------------------------------------------------------------------
1124 // Evaluate weight for decay angles of W in top decay.
1126 double Sigma2ffbar2TEVffbar::weightDecay( Event& process, int iResBeg,
1129 // For top decay hand over to standard routine, else done.
1130 if (idNew == 6 && process[process[iResBeg].mother1()].idAbs() == 6)
1131 return weightTopDecay( process, iResBeg, iResEnd);
1136 //==========================================================================
1138 // Sigma2gg2LEDUnparticleg class.
1139 // Cross section for g g -> U/G g (real graviton emission in
1140 // large extra dimensions or unparticle emission).
1142 //--------------------------------------------------------------------------
1144 void Sigma2gg2LEDUnparticleg::initProc() {
1146 // Init model parameters.
1149 eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1150 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1151 eDdU = 0.5 * eDnGrav + 1;
1152 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1154 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1155 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1156 eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1158 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1159 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1160 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1161 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1162 eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1165 // The A(dU) or S'(n) value.
1168 tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1169 / GammaReal(0.5 * eDnGrav);
1170 if (eDspin == 0) { // Scalar graviton
1171 tmpAdU *= sqrt( pow(2., double(eDnGrav)) );
1175 tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1176 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1179 // Cross section related constants
1180 // and ME dependent powers of lambda / LambdaU.
1181 double tmpExp = eDdU - 2;
1182 double tmpLS = pow2(eDLambdaU);
1183 eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1185 eDconstantTerm /= tmpLS;
1186 } else if (eDspin == 0) {
1187 eDconstantTerm *= pow2(eDlambda) / tmpLS;
1190 infoPtr->errorMsg("Error in Sigma2gg2LEDUnparticleg::initProc: "
1191 "Incorrect spin value (turn process off)!");
1196 //--------------------------------------------------------------------------
1198 void Sigma2gg2LEDUnparticleg::sigmaKin() {
1200 // Set graviton mass.
1204 // Set mandelstam variables and ME expressions.
1208 if (eDspin == 0) { // Scalar graviton
1209 double tmpTerm1 = uH + tH;
1210 double tmpTerm2 = uH + sH;
1211 double tmpTerm3 = tH + sH;
1212 double T0 = pow(tmpTerm1,4) + pow(tmpTerm2,4) + pow(tmpTerm3,4)
1213 + 12. * sH * tH * uH * mGS;
1214 eDsigma0 = eDcf * A0 * T0 / (sH2 * tH * uH);
1218 double xHS = pow2(xH);
1219 double yHS = pow2(yH);
1220 double xHC = pow(xH,3);
1221 double yHC = pow(yH,3);
1222 double xHQ = pow(xH,4);
1223 double yHQ = pow(yH,4);
1225 double T0 = 1/(xH*(yH-1-xH));
1226 double T1 = 1 + 2*xH + 3*xHS + 2*xHC + xHQ;
1227 double T2 = -2*yH*(1 + xHC);
1228 double T3 = 3*yHS*(1 + xHS);
1229 double T4 = -2*yHC*(1 + xH);
1232 eDsigma0 = A0 * T0 *( T1 + T2 + T3 + T4 + T5 );
1235 } else if (eDspin == 0) {
1237 double A0 = 1/pow2(sH);
1238 double sHQ = pow(sH,4);
1239 double tHQ = pow(tH,4);
1240 double uHQ = pow(uH,4);
1242 eDsigma0 = A0 * (pow(mGS,4) + sHQ + tHQ + uHQ) / (sH * tH * uH);
1246 // Mass measure, (m^2)^(d-2).
1247 double tmpExp = eDdU - 2;
1248 eDsigma0 *= pow(mGS, tmpExp);
1251 eDsigma0 *= eDconstantTerm;
1255 //--------------------------------------------------------------------------
1257 double Sigma2gg2LEDUnparticleg::sigmaHat() {
1259 // Mass spectrum weighting.
1260 double sigma = eDsigma0 / runBW3;
1264 sigma *= 16 * M_PI * alpS * 3 / 16;
1265 } else if (eDspin == 0) {
1266 sigma *= 6 * M_PI * alpS;
1269 // Truncate sH region or use form factor.
1270 // Form factor uses either pythia8 renormScale2
1272 if (eDcutoff == 1) {
1273 if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1274 } else if ( (eDgraviton && (eDspin == 2))
1275 && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1276 double tmPmu = sqrt(Q2RenSave);
1277 if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1278 double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1279 double tmPexp = double(eDnGrav) + 2;
1280 sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1286 //--------------------------------------------------------------------------
1288 void Sigma2gg2LEDUnparticleg::setIdColAcol() {
1290 // Flavours trivial.
1291 setId( 21, 21, eDidG, 21);
1293 // Colour flow topologies: random choice between two mirrors.
1294 if (rndmPtr->flat() < 0.5) setColAcol( 1, 2, 2, 3, 0, 0, 1, 3);
1295 else setColAcol( 1, 2, 3, 1, 0, 0, 3, 2);
1299 //==========================================================================
1301 // Sigma2qg2LEDUnparticleq class.
1302 // Cross section for q g -> U/G q (real graviton emission in
1303 // large extra dimensions or unparticle emission).
1305 //--------------------------------------------------------------------------
1307 void Sigma2qg2LEDUnparticleq::initProc() {
1309 // Init model parameters.
1312 eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1313 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1314 eDdU = 0.5 * eDnGrav + 1;
1315 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1317 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1318 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1319 eDgf = settingsPtr->parm("ExtraDimensionsLED:g");
1320 eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1322 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1323 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1324 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1325 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1326 eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1329 // The A(dU) or S'(n) value.
1332 tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1333 / GammaReal(0.5 * eDnGrav);
1336 tmpAdU *= 2. * sqrt( pow(2., double(eDnGrav)) );
1337 eDcf *= 4. * eDcf / pow2(eDLambdaU);
1338 double tmpExp = 2. * double(eDnGrav) / (double(eDnGrav) + 2.);
1339 eDgf *= eDgf / pow(2. * M_PI, tmpExp);
1342 tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1343 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1346 // Cross section related constants
1347 // and ME dependent powers of lambda / LambdaU.
1348 double tmpExp = eDdU - 2;
1349 double tmpLS = pow2(eDLambdaU);
1350 eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1351 if (eDgraviton && (eDspin == 2)) {
1352 eDconstantTerm /= tmpLS;
1353 } else if (eDspin == 1) {
1354 eDconstantTerm *= pow2(eDlambda);
1355 } else if (eDspin == 0) {
1356 eDconstantTerm *= pow2(eDlambda);
1359 infoPtr->errorMsg("Error in Sigma2qg2LEDUnparticleq::initProc: "
1360 "Incorrect spin value (turn process off)!");
1366 //--------------------------------------------------------------------------
1368 void Sigma2qg2LEDUnparticleq::sigmaKin() {
1370 // Set graviton mass.
1374 // Set mandelstam variables and ME expressions.
1381 double T0 = -(uH2 + pow2(mGS)) / (sH * tH);
1382 double T1 = -(tH2 + sH2)/ uH;
1383 eDsigma0 = A0 * (eDgf * T0 + eDcf * T1);
1387 double x2H = xH/(yH - 1 - xH);
1388 double y2H = yH/(yH - 1 - xH);
1389 double x2HS = pow2(x2H);
1390 double y2HS = pow2(y2H);
1391 double x2HC = pow(x2H,3);
1392 double y2HC = pow(y2H,3);
1394 double T0 = -(yH - 1 - xH);
1395 double T20 = 1/(x2H*(y2H-1-x2H));
1396 double T21 = -4*x2H*(1 + x2H)*(1 + 2*x2H + 2*x2HS);
1397 double T22 = y2H*(1 + 6*x2H + 18*x2HS + 16*x2HC);
1398 double T23 = -6*y2HS*x2H*(1+2*x2H);
1399 double T24 = y2HC*(1 + 4*x2H);
1401 eDsigma0 = A0 * T0 * T20 * ( T21 + T22 + T23 + T24 );
1404 } else if (eDspin == 1) {
1406 double A0 = 1/pow2(sH);
1407 double tmpTerm1 = tH - mGS;
1408 double tmpTerm2 = sH - mGS;
1410 eDsigma0 = A0 * (pow2(tmpTerm1) + pow2(tmpTerm2)) / (sH*tH);
1412 } else if (eDspin == 0) {
1414 double A0 = 1/pow2(sH);
1415 // Sign correction by Tom
1416 eDsigma0 = A0 * (pow2(tH) + pow2(mGS)) / (sH*uH);
1420 // Mass measure, (m^2)^(d-2).
1421 double tmpExp = eDdU - 2;
1422 eDsigma0 *= pow(mGS, tmpExp);
1425 eDsigma0 *= eDconstantTerm;
1429 //--------------------------------------------------------------------------
1431 double Sigma2qg2LEDUnparticleq::sigmaHat() {
1433 // Mass spactrum weighting.
1434 double sigma = eDsigma0 /runBW3;
1438 sigma *= 16 * M_PI * alpS / 96;
1439 } else if (eDspin == 1) {
1440 sigma *= - 4 * M_PI * alpS / 3;
1441 } else if (eDspin == 0) {
1442 sigma *= - 2 * M_PI * alpS / 3;
1445 // Truncate sH region or use form factor.
1446 // Form factor uses either pythia8 renormScale2
1448 if (eDcutoff == 1) {
1449 if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1450 } else if ( (eDgraviton && (eDspin == 2))
1451 && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1452 double tmPmu = sqrt(Q2RenSave);
1453 if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1454 double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1455 double tmPexp = double(eDnGrav) + 2;
1456 sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1462 //--------------------------------------------------------------------------
1464 void Sigma2qg2LEDUnparticleq::setIdColAcol() {
1466 // Flavour set up for q g -> G* q.
1467 int idq = (id2 == 21) ? id1 : id2;
1468 setId( id1, id2, eDidG, idq);
1470 // tH defined between f and f': must swap tHat <-> uHat if q g in.
1471 swapTU = (id2 == 21);
1473 // Colour flow topologies. Swap when antiquarks.
1474 if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
1475 else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
1476 if (idq < 0) swapColAcol();
1480 //==========================================================================
1482 // Sigma2qqbar2LEDUnparticleg class.
1483 // Cross section for q qbar -> U/G g (real graviton emission in
1484 // large extra dimensions or unparticle emission).
1486 //--------------------------------------------------------------------------
1488 void Sigma2qqbar2LEDUnparticleg::initProc() {
1490 // Init model parameters.
1493 eDspin = (settingsPtr->flag("ExtraDimensionsLED:GravScalar")) ? 0 : 2;
1494 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1495 eDdU = 0.5 * eDnGrav + 1;
1496 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1498 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1499 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1500 eDgf = settingsPtr->parm("ExtraDimensionsLED:g");
1501 eDcf = settingsPtr->parm("ExtraDimensionsLED:c");
1503 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1504 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1505 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1506 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1507 eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1510 // The A(dU) or S'(n) value.
1513 tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1514 / GammaReal(0.5 * eDnGrav);
1517 tmpAdU *= 2. * sqrt( pow(2., double(eDnGrav)) );
1518 eDcf *= 4. * eDcf / pow2(eDLambdaU);
1519 double tmpExp = 2. * double(eDnGrav) / (double(eDnGrav) + 2.);
1520 eDgf *= eDgf / pow(2. * M_PI, tmpExp);
1523 tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1524 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1527 // Cross section related constants
1528 // and ME dependent powers of lambda / LambdaU.
1529 double tmpExp = eDdU - 2;
1530 double tmpLS = pow2(eDLambdaU);
1531 eDconstantTerm = tmpAdU / (2 * 16 * pow2(M_PI) * tmpLS * pow(tmpLS,tmpExp));
1532 if (eDgraviton && (eDspin == 2)) {
1533 eDconstantTerm /= tmpLS;
1534 } else if (eDspin == 1) {
1535 eDconstantTerm *= pow2(eDlambda);
1536 } else if (eDspin == 0) {
1537 eDconstantTerm *= pow2(eDlambda);
1540 infoPtr->errorMsg("Error in Sigma2qqbar2LEDUnparticleg::initProc: "
1541 "Incorrect spin value (turn process off)!");
1546 //--------------------------------------------------------------------------
1548 void Sigma2qqbar2LEDUnparticleg::sigmaKin() {
1550 // Set graviton mass.
1554 // Set mandelstam variables and ME expressions.
1561 double tmpTerm1 = uH + tH;
1562 double T0 = (2. * mGS * sH + pow2(tmpTerm1)) / (uH * tH);
1563 double T1 = (tH2 + uH2) / sH;
1564 eDsigma0 = A0 * (eDgf * T0 + eDcf * T1);
1568 double xHS = pow2(xH);
1569 double yHS = pow2(yH);
1570 double xHC = pow(xH,3);
1571 double yHC = pow(yH,3);
1573 double T0 = 1/(xH*(yH-1-xH));
1574 double T1 = -4*xH*(1 + xH)*(1 + 2*xH + 2*xHS);
1575 double T2 = yH*(1 + 6*xH + 18*xHS + 16*xHC);
1576 double T3 = -6*yHS*xH*(1+2*xH);
1577 double T4 = yHC*(1 + 4*xH);
1579 eDsigma0 = A0 * T0 *( T1 + T2 + T3 + T4 );
1582 } else if (eDspin == 1) {
1584 double A0 = 1/pow2(sH);
1585 double tmpTerm1 = tH - mGS;
1586 double tmpTerm2 = uH - mGS;
1588 eDsigma0 = A0 * (pow2(tmpTerm1) + pow2(tmpTerm2)) / (tH * uH);
1590 } else if (eDspin == 0) {
1592 double A0 = 1/pow2(sH);
1594 eDsigma0 = A0 * (pow2(sH) - pow2(mGS)) / (tH * uH);
1598 // Mass measure, (m^2)^(d-2).
1599 double tmpExp = eDdU - 2;
1600 eDsigma0 *= pow(mGS, tmpExp);
1603 eDsigma0 *= eDconstantTerm;
1607 //--------------------------------------------------------------------------
1609 double Sigma2qqbar2LEDUnparticleg::sigmaHat() {
1611 // Mass spactrum weighting.
1612 double sigma = eDsigma0 /runBW3;
1616 sigma *= 16 * M_PI * alpS / 36;
1617 } else if (eDspin == 1) {
1618 sigma *= 4 * M_PI * 8 * alpS / 9;
1619 } else if (eDspin == 0) {
1620 sigma *= 4 * M_PI * 4 * alpS / 9;
1623 // Truncate sH region or use form factor.
1624 // Form factor uses either pythia8 renormScale2
1626 if (eDcutoff == 1) {
1627 if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1628 } else if ( (eDgraviton && (eDspin == 2))
1629 && ((eDcutoff == 2) || (eDcutoff == 3)) ) {
1630 double tmPmu = sqrt(Q2RenSave);
1631 if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1632 double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1633 double tmPexp = double(eDnGrav) + 2;
1634 sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1640 //--------------------------------------------------------------------------
1642 void Sigma2qqbar2LEDUnparticleg::setIdColAcol() {
1644 // Flavours trivial.
1645 setId( id1, id2, eDidG, 21);
1647 // Colour flow topologies. Swap when antiquarks.
1648 if (abs(id1) < 9) setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
1649 if (id1 < 0) swapColAcol();
1653 //==========================================================================
1655 // Sigma2ffbar2LEDUnparticleZ class.
1656 // Cross section for f fbar -> U/G Z (real LED graviton or unparticle
1659 //--------------------------------------------------------------------------
1661 // Constants: could be changed here if desired, but normally should not.
1662 // These are of technical nature, as described for each.
1665 // Ratio between the two possible coupling constants of the spin-2 ME.
1666 // A value different from one give rise to an IR divergence which makes
1667 // the event generation very slow, so this values is fixed to 1 until
1668 // investigated further.
1669 const double Sigma2ffbar2LEDUnparticleZ::FIXRATIO = 1.;
1671 //--------------------------------------------------------------------------
1673 void Sigma2ffbar2LEDUnparticleZ::initProc() {
1675 // Init model parameters.
1679 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1680 eDdU = 0.5 * eDnGrav + 1;
1681 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1683 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1684 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1686 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1687 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1688 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1689 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1691 // = settingsPtr->parm("ExtraDimensionsUnpart:ratio");
1692 eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1695 // Store Z0 mass and width for propagator.
1696 mZ = particleDataPtr->m0(23);
1697 widZ = particleDataPtr->mWidth(23);
1699 mwZS = pow2(mZ * widZ);
1701 // Init spin-2 parameters
1705 } else if (eDgraviton) {
1708 eDlambdaPrime = eDlambda;
1710 eDlambdaPrime = eDratio * eDlambda;
1713 // The A(dU) or S'(n) value
1714 double tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1715 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1718 tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1719 / GammaReal(0.5 * eDnGrav);
1722 // Standard 2 to 2 cross section related constants
1723 double tmpTerm1 = 1/(2 * 16 * pow2(M_PI));
1724 double tmpLS = pow2(eDLambdaU);
1726 // Spin dependent constants from ME.
1727 double tmpTerm2 = 0;
1728 if ( eDspin == 0 ) {
1729 tmpTerm2 = 2 * pow2(eDlambda);
1730 } else if (eDspin == 1) {
1731 tmpTerm2 = 4 * pow2(eDlambda);
1732 } else if (eDspin == 2) {
1733 tmpTerm2 = pow2(eDlambda)/(4 * 3 * tmpLS);
1736 // Unparticle phase space related
1737 double tmpExp2 = eDdU - 2;
1738 double tmpTerm3 = tmpAdU / (tmpLS * pow(tmpLS, tmpExp2));
1741 eDconstantTerm = tmpTerm1 * tmpTerm2 * tmpTerm3;
1745 //--------------------------------------------------------------------------
1747 void Sigma2ffbar2LEDUnparticleZ::sigmaKin() {
1749 // Set graviton mass and some powers of mandelstam variables
1762 // Evaluate (m**2, t, u) part of differential cross section.
1763 // Extra 1/sHS comes from standard 2 to 2 cross section
1764 // phase space factors.
1766 if ( eDspin == 0 ) {
1769 double T1 = - sH/tH - sH/uH;
1770 double T2 = - (1 - mZS/tH)*(1 - mUS/tH);
1771 double T3 = - (1 - mZS/uH)*(1 - mUS/uH);
1772 double T4 = 2*(1 - mUS/tH)*(1 - mUS/uH);
1774 eDsigma0 = A0 * ( T1 + T2 + T3 + T4);
1776 } else if ( eDspin == 1 ) {
1779 double T1 = 0.5 * (tH/uH + uH/tH);
1780 double T2 = pow2(mZS + mUS)/(tH * uH);
1781 double T3 = - 0.5 * mUS * (mZS/tHS + mZS/uHS) ;
1782 double T4 = - (mZS+mUS)*(1/tH + 1/uH);
1784 eDsigma0 = A0 * ( T1 + T2 + T3 + T4 );
1786 } else if ( eDspin == 2 ) {
1788 double A0 = 1 / ( sHS * uHS * tHS * pow2(sH-mZS) );
1789 double F0 = 2*tHS*uHS*( 16*pow(mZS,3) + mUS*(7*tHS + 12*tH*uH + 7*uHS)
1790 - 3*(3*tHC + 11*tHS*uH + 11*tH*uHS + 3*uHC)
1791 + 6*pow(mZS,2)*(7*mUS - 2*tHuH) + mZS*(14*pow(mUS,2)
1792 - 15*tHS - 44*tH*uH - 15*uHS + 2*mUS*tHuH) );
1793 double F2 = 2*tHS*uHS*tHuH*( -8*pow(mZS,2)*tHuH
1794 + 4*mZS*(tHS + 3*tH*uH + uHS)
1795 + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
1796 double F4 = -2*tHS*uHS*pow(tHuH,3)*(tHS + uHS - mZS*tHuH);
1798 double G0 = 4*tH*uH*( 6*pow(mZS,3)*(mUS - tH - uH)*tHuH
1799 + pow(mZS,2)*( 9*tHC + 7*tHS*uH + 7*tH*uHS + 9*uHC
1800 + 15*pow2(mUS)*tHuH - 2*mUS*(12*tHS + 19*tH*uH + 12*uHS) )
1801 + tH*uH*( 6*pow(mUS,3) - 9*pow(mUS,2)*tHuH - mUS*(tHS
1802 + 12*tH*uH + uHS) + 6*(tHC + 6*tHS*uH + 6*tH*uHS + uHC) )
1803 + mZS*(-3*tHQ + 25*tHC*uH + 58*tHS*uHS + 25*tH*uHC
1804 - 3*uHQ + 6*pow(mUS,3)*tHuH
1805 - pow(mUS,2)*(15*tHS + 2*tH*uH + 15*uHS) + 2*mUS*(6*tHC
1806 - 11*tHS*uH - 11*tH*uHS + 6*uHC)) );
1807 double G2 = -4*tHS*uHS*tHuH*( -10*pow2(mZS)*tHuH + 2*mZS*(3*tHS
1808 + 7*tH*uH + 3*uHS) + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
1811 double H0 = 24*pow(mZS,3)*tH*uH*pow2(-mUS + tHuH)
1812 - 6*pow(mZS,2)*tH*uH*( -9*pow(mUS,3) + 24*pow(mUS,2)*tHuH
1813 - mUS*(21*tHS + 38*tH*uH + 21*uHS)
1814 + 2*(3*tHC + 5*tHS*uH + 5*tH*uHS + 3*uHC) )
1815 - mZS*( 3*pow(mUS,4)*(tHS - 12*tH*uH + uHS)
1816 - 2*tH*uH*pow2(tHuH)*(6*tHS - 29*tH*uH + 6*uHS)
1817 - 6*pow(mUS,3)*(tHC - 16*tHS*uH - 16*tH*uHS + uHC)
1818 + 54*mUS*tH*uH*(tHC + tHS*uH + tH*uHS + uHC)
1819 + pow2(mUS)*(3*tHQ - 102*tHC*uH - 166*tHS*uHS
1820 - 102*tH*uHC + 3*uHQ) )
1821 + tH*uH*( 6*pow(mUS,5) - 18*pow(mUS,4)*tHuH
1822 - 12*pow(mUS,2)*pow(tHuH,3)
1823 + 3*pow(mUS,3)*(7*tHS + 12*tH*uH + 7*uHS)
1824 - 18*tH*uH*(tHC + 5*tHS*uH + 5*tH*uHS + uHC)
1825 + mUS*(3*tHQ + 32*tHC*uH + 78*tHS*uHS + 32*tH*uHC + 3*uHQ) );
1826 double H2 = 2*tHS*uHS*pow2(tHuH)*( -12*pow2(mZS) + 8*mZS*tHuH
1827 + 3*(tHS + 4*tH*uH + uHS) );
1830 eDsigma0 = A0*( F0 + 1/mUS*F2 + 1/pow2(mUS)*F4
1831 + eDratio*(G0 + 1/mUS*G2 + 1/pow2(mUS)*G4)
1832 + pow2(eDratio)*(H0 + 1/mUS*H2 + 1/pow2(mUS)*H4) );
1842 //--------------------------------------------------------------------------
1844 double Sigma2ffbar2LEDUnparticleZ::sigmaHat() {
1846 // Electroweak couplings.
1847 int idAbs = abs(id1);
1848 // Note: 1/2 * (g_L^2 + g_R^2) = (g_v^2 + g_a^2)
1849 double facEWS = 4 * M_PI * alpEM
1850 / (couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW())
1851 * ( 0.25 * 0.25 * couplingsPtr->vf2af2(idAbs) );
1853 // Mass Spectrum, (m^2)^(d-2)
1854 double tmpExp = eDdU - 2;
1855 double facSpect = pow(mUS, tmpExp);
1857 // Total cross section
1858 double sigma = eDconstantTerm * facEWS * facSpect * eDsigma0;
1860 // If f fbar are quarks (1/N_c)
1861 if (idAbs < 9) sigma /= 3.;
1863 // Related to mass spactrum weighting.
1866 // Truncate sH region or use form factor.
1867 // Form factor uses either pythia8 renormScale2
1869 if (eDcutoff == 1) {
1870 if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
1871 } else if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
1872 double tmPmu = sqrt(Q2RenSave);
1873 if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
1874 double tmPformfact = tmPmu / (eDtff * eDLambdaU);
1875 double tmPexp = double(eDnGrav) + 2;
1876 sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
1883 //--------------------------------------------------------------------------
1885 void Sigma2ffbar2LEDUnparticleZ::setIdColAcol() {
1887 // Flavours trivial.
1888 setId( id1, id2, eDidG, 23);
1890 // Colour flow topologies. Swap when antiquarks.
1891 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
1892 else setColAcol( 0, 0, 0, 0, 0, 0);
1893 if (id1 < 0) swapColAcol();
1897 //==========================================================================
1899 // Sigma2ffbar2LEDUnparticlegamma class.
1900 // Cross section for f fbar -> U/G gamma (real LED graviton or unparticle
1903 //--------------------------------------------------------------------------
1905 // Constants: could be changed here if desired, but normally should not.
1906 // These are of technical nature, as described for each.
1909 // Ratio between the two possible coupling constants of the spin-2 ME.
1910 // A value different from one give rise to an IR divergence which makes
1911 // the event generation very slow, so this values is fixed to 1 until
1912 // investigated further.
1913 const double Sigma2ffbar2LEDUnparticlegamma::FIXRATIO = 1.;
1915 //--------------------------------------------------------------------------
1917 void Sigma2ffbar2LEDUnparticlegamma::initProc() {
1919 // WARNING: Keep in mind that this class uses the photon limit
1920 // of the Z+G/U ME code. This might give rise to some
1921 // confusing things, e.g. mZ = particleDataPtr->m0(22);
1923 // Init model parameters.
1927 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
1928 eDdU = 0.5 * eDnGrav + 1;
1929 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:MD");
1931 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
1932 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
1934 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
1935 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
1936 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
1937 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
1939 // = settingsPtr->parm("ExtraDimensionsUnpart:ratio");
1940 eDcutoff = settingsPtr->mode("ExtraDimensionsUnpart:CutOffMode");
1944 mZ = particleDataPtr->m0(22);
1947 // Init spin-2 parameters
1951 } else if (eDgraviton) {
1954 eDlambdaPrime = eDlambda;
1956 eDlambdaPrime = eDratio * eDlambda;
1959 // The A(dU) or S'(n) value
1960 double tmpAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
1961 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
1964 tmpAdU = 2 * M_PI * sqrt( pow(M_PI, double(eDnGrav)) )
1965 / GammaReal(0.5 * eDnGrav);
1968 // Standard 2 to 2 cross section related constants
1969 double tmpTerm1 = 1/(2 * 16 * pow2(M_PI));
1970 double tmpLS = pow2(eDLambdaU);
1972 // Spin dependent constants from ME.
1973 double tmpTerm2 = 0;
1974 if ( eDspin == 0 ) {
1975 tmpTerm2 = 2 * pow2(eDlambda);
1976 } else if (eDspin == 1) {
1977 tmpTerm2 = 4 * pow2(eDlambda);
1978 } else if (eDspin == 2) {
1979 tmpTerm2 = pow2(eDlambda)/(4 * 3 * tmpLS);
1982 // Unparticle phase space related
1983 double tmpExp2 = eDdU - 2;
1984 double tmpTerm3 = tmpAdU / (tmpLS * pow(tmpLS, tmpExp2));
1987 eDconstantTerm = tmpTerm1 * tmpTerm2 * tmpTerm3;
1991 //--------------------------------------------------------------------------
1993 void Sigma2ffbar2LEDUnparticlegamma::sigmaKin() {
1995 // Set graviton mass and some powers of mandelstam variables
2008 // Evaluate (m**2, t, u) part of differential cross section.
2009 // Extra 1/sHS comes from standard 2 to 2 cross section
2010 // phase space factors.
2012 if ( eDspin == 0 ) {
2015 double T1 = - sH/tH - sH/uH;
2016 double T2 = - (1 - mZS/tH)*(1 - mUS/tH);
2017 double T3 = - (1 - mZS/uH)*(1 - mUS/uH);
2018 double T4 = 2*(1 - mUS/tH)*(1 - mUS/uH);
2020 eDsigma0 = A0 * ( T1 + T2 + T3 + T4);
2022 } else if ( eDspin == 1 ) {
2025 double T1 = 0.5 * (tH/uH + uH/tH);
2026 double T2 = pow2(mZS + mUS)/(tH * uH);
2027 double T3 = - 0.5 * mUS * (mZS/tHS + mZS/uHS) ;
2028 double T4 = - (mZS+mUS)*(1/tH + 1/uH);
2030 eDsigma0 = A0 * ( T1 + T2 + T3 + T4 );
2032 } else if ( eDspin == 2 ) {
2034 double A0 = 1 / ( sHS * uHS * tHS * pow2(sH-mZS) );
2035 double F0 = 2*tHS*uHS*( 16*pow(mZS,3) + mUS*(7*tHS + 12*tH*uH + 7*uHS)
2036 - 3*(3*tHC + 11*tHS*uH + 11*tH*uHS + 3*uHC)
2037 + 6*pow(mZS,2)*(7*mUS - 2*tHuH) + mZS*(14*pow(mUS,2)
2038 - 15*tHS - 44*tH*uH - 15*uHS + 2*mUS*tHuH) );
2039 double F2 = 2*tHS*uHS*tHuH*( -8*pow(mZS,2)*tHuH
2040 + 4*mZS*(tHS + 3*tH*uH + uHS)
2041 + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
2042 double F4 = -2*tHS*uHS*pow(tHuH,3)*(tHS + uHS - mZS*tHuH);
2044 double G0 = 4*tH*uH*( 6*pow(mZS,3)*(mUS - tH - uH)*tHuH
2045 + pow(mZS,2)*( 9*tHC + 7*tHS*uH + 7*tH*uHS + 9*uHC
2046 + 15*pow2(mUS)*tHuH - 2*mUS*(12*tHS + 19*tH*uH + 12*uHS) )
2047 + tH*uH*( 6*pow(mUS,3) - 9*pow(mUS,2)*tHuH
2048 - mUS*(tHS + 12*tH*uH + uHS)
2049 + 6*(tHC + 6*tHS*uH + 6*tH*uHS + uHC) )
2050 + mZS*(-3*tHQ + 25*tHC*uH + 58*tHS*uHS + 25*tH*uHC
2051 - 3*uHQ + 6*pow(mUS,3)*tHuH
2052 - pow(mUS,2)*(15*tHS + 2*tH*uH + 15*uHS)
2053 + 2*mUS*(6*tHC - 11*tHS*uH - 11*tH*uHS + 6*uHC)) );
2054 double G2 = -4*tHS*uHS*tHuH*( -10*pow2(mZS)*tHuH
2055 + 2*mZS*(3*tHS + 7*tH*uH + 3*uHS)
2056 + 3*(tHC + 5*tHS*uH + 5*tH*uHS + uHC) );
2059 double H0 = 24*pow(mZS,3)*tH*uH*pow2(-mUS + tHuH)
2060 - 6*pow(mZS,2)*tH*uH*( -9*pow(mUS,3) + 24*pow(mUS,2)*tHuH
2061 - mUS*(21*tHS + 38*tH*uH + 21*uHS)
2062 + 2*(3*tHC + 5*tHS*uH + 5*tH*uHS + 3*uHC) )
2063 - mZS*( 3*pow(mUS,4)*(tHS - 12*tH*uH + uHS)
2064 - 2*tH*uH*pow2(tHuH)*(6*tHS - 29*tH*uH + 6*uHS)
2065 - 6*pow(mUS,3)*(tHC - 16*tHS*uH - 16*tH*uHS + uHC)
2066 + 54*mUS*tH*uH*(tHC + tHS*uH + tH*uHS + uHC)
2067 + pow2(mUS)*(3*tHQ - 102*tHC*uH - 166*tHS*uHS
2068 - 102*tH*uHC + 3*uHQ) )
2069 + tH*uH*( 6*pow(mUS,5) - 18*pow(mUS,4)*tHuH
2070 - 12*pow(mUS,2)*pow(tHuH,3)
2071 + 3*pow(mUS,3)*(7*tHS + 12*tH*uH + 7*uHS)
2072 - 18*tH*uH*(tHC + 5*tHS*uH + 5*tH*uHS + uHC)
2073 + mUS*(3*tHQ + 32*tHC*uH + 78*tHS*uHS + 32*tH*uHC + 3*uHQ) );
2074 double H2 = 2*tHS*uHS*pow2(tHuH)*( -12*pow2(mZS) + 8*mZS*tHuH
2075 + 3*(tHS + 4*tH*uH + uHS) );
2078 eDsigma0 = A0*( F0 + 1/mUS*F2 + 1/pow2(mUS)*F4
2079 + eDratio*(G0 + 1/mUS*G2 + 1/pow2(mUS)*G4)
2080 + pow2(eDratio)*(H0 + 1/mUS*H2 + 1/pow2(mUS)*H4) );
2090 //--------------------------------------------------------------------------
2092 double Sigma2ffbar2LEDUnparticlegamma::sigmaHat() {
2094 // Electroweak couplings..
2095 int idAbs = abs(id1);
2096 double facEWS = 4 * M_PI * alpEM * couplingsPtr->ef2(idAbs);
2098 // Mass Spectrum, (m^2)^(d-2)
2099 double tmpExp = eDdU - 2;
2100 double facSpect = pow(mUS, tmpExp);
2102 // Total cross section
2103 double sigma = eDconstantTerm * facEWS * facSpect * eDsigma0;
2105 // If f fbar are quarks
2106 if (idAbs < 9) sigma /= 3.;
2108 // Related to mass spactrum weighting.
2111 // Truncate sH region or use form factor.
2112 // Form factor uses either pythia8 renormScale2
2114 if (eDcutoff == 1) {
2115 if (sH > pow2(eDLambdaU) ) { sigma *= pow(eDLambdaU,4)/pow2(sH); }
2116 } else if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2117 double tmPmu = sqrt(Q2RenSave);
2118 if (eDcutoff == 3) tmPmu = (sH + s4 - s3) / (2 * mH);
2119 double tmPformfact = tmPmu / (eDtff * eDLambdaU);
2120 double tmPexp = double(eDnGrav) + 2;
2121 sigma *= 1 / (1 + pow(tmPformfact, tmPexp));
2128 //--------------------------------------------------------------------------
2130 void Sigma2ffbar2LEDUnparticlegamma::setIdColAcol() {
2132 // Flavours trivial.
2133 setId( id1, id2, eDidG, 22);
2135 // Colour flow topologies. Swap when antiquarks.
2136 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
2137 else setColAcol( 0, 0, 0, 0, 0, 0);
2138 if (id1 < 0) swapColAcol();
2142 //==========================================================================
2144 // Sigma2ffbar2LEDgammagamma class.
2145 // Cross section for f fbar -> (LED G*/U*) -> gamma gamma
2146 // (virtual graviton/unparticle exchange).
2148 //--------------------------------------------------------------------------
2150 void Sigma2ffbar2LEDgammagamma::initProc() {
2152 // Init model parameters.
2155 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2157 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2159 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2160 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2161 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2163 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2164 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2165 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2166 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2170 // Model dependent constants.
2172 eDlambda2chi = 4*M_PI;
2173 if (eDnegInt == 1) eDlambda2chi *= -1.;
2175 double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2176 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2177 double tmPdUpi = eDdU * M_PI;
2178 eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2181 // Model parameter check (if not applicable, sigma = 0).
2182 // Note: SM contribution still generated.
2183 if ( !(eDspin==0 || eDspin==2) ) {
2185 infoPtr->errorMsg("Error in Sigma2ffbar2LEDgammagamma::initProc: "
2186 "Incorrect spin value (turn process off)!");
2187 } else if ( !eDgraviton && (eDdU >= 2)) {
2189 infoPtr->errorMsg("Error in Sigma2ffbar2LEDgammagamma::initProc: "
2190 "This process requires dU < 2 (turn process off)!");
2195 //--------------------------------------------------------------------------
2197 void Sigma2ffbar2LEDgammagamma::sigmaKin() {
2199 // Mandelstam variables.
2200 double sHS = pow2(sH);
2201 double sHQ = pow(sH, 4);
2202 double tHS = pow2(tH);
2203 double uHS = pow2(uH);
2206 double tmPeffLambdaU = eDLambdaU;
2207 if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2208 double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2209 double tmPexp = double(eDnGrav) + 2;
2210 double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2211 tmPeffLambdaU *= pow(tmPformfact,0.25);
2214 // ME from spin-0 and spin-2 unparticles
2215 // including extra 1/sHS from 2-to-2 phase space.
2217 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2218 double tmPexp = 2 * eDdU - 1;
2219 eDterm1 = pow(tmPsLambda2,tmPexp);
2222 eDterm1 = (uH / tH + tH / uH);
2224 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2225 double tmPexp = eDdU;
2226 eDterm2 = pow(tmPsLambda2,tmPexp) * (uHS + tHS) / sHS;
2229 eDterm3 = pow(tmPsLambda2,tmPexp) * tH * uH * (uHS + tHS) / sHQ;
2235 //--------------------------------------------------------------------------
2237 double Sigma2ffbar2LEDgammagamma::sigmaHat() {
2239 // Incoming fermion flavor.
2240 int idAbs = abs(id1);
2242 // Couplings and constants.
2243 // Note: ME already contain 1/2 for identical
2244 // particles in the final state.
2247 sigma = pow2(eDlambda2chi) * eDterm1 / 8;
2249 double tmPe2Q2 = 4 * M_PI * alpEM * couplingsPtr->ef2(idAbs);
2250 double tmPdUpi = eDdU * M_PI;
2251 sigma = pow2(tmPe2Q2) * eDterm1
2252 - tmPe2Q2 * eDlambda2chi * cos(tmPdUpi) * eDterm2
2253 + pow2(eDlambda2chi) * eDterm3 / 4;
2256 // dsigma/dt, 2-to-2 phase space factors.
2259 // If f fbar are quarks.
2260 if (idAbs < 9) sigma /= 3.;
2265 //--------------------------------------------------------------------------
2267 void Sigma2ffbar2LEDgammagamma::setIdColAcol() {
2269 // Flavours trivial.
2270 setId( id1, id2, 22, 22);
2272 // Colour flow topologies. Swap when antiquarks.
2273 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2274 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2275 if (id1 < 0) swapColAcol();
2279 //==========================================================================
2281 // Sigma2gg2LEDgammagamma class.
2282 // Cross section for g g -> (LED G*/U*) -> gamma gamma
2283 // (virtual graviton/unparticle exchange).
2285 //--------------------------------------------------------------------------
2287 void Sigma2gg2LEDgammagamma::initProc() {
2289 // Init model parameters.
2292 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2294 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2296 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2297 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2299 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2300 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2301 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2302 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2305 // Model dependent constants.
2307 eDlambda2chi = 4 * M_PI;
2310 double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2311 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2312 double tmPdUpi = eDdU * M_PI;
2313 eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2316 // Model parameter check (if not applicable, sigma = 0).
2317 if ( !(eDspin==0 || eDspin==2) ) {
2319 infoPtr->errorMsg("Error in Sigma2gg2LEDgammagamma::initProc: "
2320 "Incorrect spin value (turn process off)!");
2321 } else if ( !eDgraviton && (eDdU >= 2)) {
2323 infoPtr->errorMsg("Error in Sigma2gg2LEDgammagamma::initProc: "
2324 "This process requires dU < 2 (turn process off)!");
2329 //--------------------------------------------------------------------------
2331 void Sigma2gg2LEDgammagamma::sigmaKin() {
2333 // Mandelstam variables.
2334 double sHS = pow2(sH);
2335 double sHQ = pow(sH, 4);
2336 double tHQ = pow(tH, 4);
2337 double uHQ = pow(uH, 4);
2340 double tmPeffLambdaU = eDLambdaU;
2341 if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2342 double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2343 double tmPexp = double(eDnGrav) + 2;
2344 double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2345 tmPeffLambdaU *= pow(tmPformfact,0.25);
2348 // ME from spin-0 and spin-2 unparticles.
2350 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2351 double tmPexp = 2 * eDdU;
2352 eDsigma0 = pow(tmPsLambda2,tmPexp);
2354 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2355 double tmPexp = 2 * eDdU;
2356 eDsigma0 = pow(tmPsLambda2,tmPexp) * (uHQ + tHQ) / sHQ;
2359 // extra 1/sHS from 2-to-2 phase space.
2364 //--------------------------------------------------------------------------
2366 double Sigma2gg2LEDgammagamma::sigmaHat() {
2368 // Couplings and constants.
2369 // Note: ME already contain 1/2 for identical
2370 // particles in the final state.
2371 double sigma = eDsigma0;
2373 sigma *= pow2(eDlambda2chi) / 256;
2375 sigma *= pow2(eDlambda2chi) / 32;
2378 // dsigma/dt, 2-to-2 phase space factors.
2384 //--------------------------------------------------------------------------
2386 void Sigma2gg2LEDgammagamma::setIdColAcol() {
2388 // Flavours trivial.
2389 setId( 21, 21, 22, 22);
2391 // Colour flow topologies.
2392 setColAcol( 1, 2, 2, 1, 0, 0, 0, 0);
2396 //==========================================================================
2398 // Sigma2ffbar2LEDllbar class.
2399 // Cross section for f fbar -> (LED G*/U*) -> l lbar
2400 // (virtual graviton/unparticle exchange).
2401 // Does not include t-channel contributions relevant for e^+e^- to e^+e^-
2403 //--------------------------------------------------------------------------
2405 void Sigma2ffbar2LEDllbar::initProc() {
2407 // Init model parameters.
2410 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2412 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2414 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2415 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2416 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2418 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2419 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2420 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2421 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2422 eDnxx = settingsPtr->mode("ExtraDimensionsUnpart:gXX");
2423 eDnxy = settingsPtr->mode("ExtraDimensionsUnpart:gXY");
2427 eDmZ = particleDataPtr->m0(23);
2428 eDmZS = eDmZ * eDmZ;
2429 eDGZ = particleDataPtr->mWidth(23);
2430 eDGZS = eDGZ * eDGZ;
2432 // Model dependent constants.
2434 eDlambda2chi = 4*M_PI;
2435 if (eDnegInt == 1) eDlambda2chi *= -1.;
2437 double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2438 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2439 double tmPdUpi = eDdU * M_PI;
2440 eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2443 // Model parameter check (if not applicable, sigma = 0).
2444 // Note: SM contribution still generated.
2445 if ( !(eDspin==1 || eDspin==2) ) {
2447 infoPtr->errorMsg("Error in Sigma2ffbar2LEDllbar::initProc: "
2448 "Incorrect spin value (turn process off)!");
2449 } else if ( !eDgraviton && (eDdU >= 2)) {
2451 infoPtr->errorMsg("Error in Sigma2ffbar2LEDllbar::initProc: "
2452 "This process requires dU < 2 (turn process off)!");
2457 //--------------------------------------------------------------------------
2459 void Sigma2ffbar2LEDllbar::sigmaKin() {
2461 // Mandelstam variables.
2462 double tHS = pow2(tH);
2463 double uHS = pow2(uH);
2464 double tHC = pow(tH,3);
2465 double uHC = pow(uH,3);
2466 double tHQ = pow(tH,4);
2467 double uHQ = pow(uH,4);
2470 double tmPeffLambdaU = eDLambdaU;
2471 if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2472 double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2473 double tmPexp = double(eDnGrav) + 2;
2474 double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2475 tmPeffLambdaU *= pow(tmPformfact,0.25);
2478 // ME from spin-1 and spin-2 unparticles
2479 eDdenomPropZ = pow2(sH - eDmZS) + eDmZS * eDGZS;
2480 eDrePropZ = (sH - eDmZS) / eDdenomPropZ;
2481 eDimPropZ = -eDmZ * eDGZ / eDdenomPropZ;
2482 eDrePropGamma = 1 / sH;
2484 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2485 double tmPexp = eDdU - 2;
2486 eDabsMeU = eDlambda2chi * pow(tmPsLambda2,tmPexp)
2487 / pow2(tmPeffLambdaU);
2489 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2490 double tmPexp = eDdU - 2;
2491 double tmPA = -eDlambda2chi * pow(tmPsLambda2,tmPexp)
2492 / (8 * pow(tmPeffLambdaU,4));
2493 eDabsAS = pow2(tmPA);
2494 eDreA = tmPA * cos(M_PI * eDdU);
2495 eDreABW = tmPA * ((sH - eDmZS) * cos(M_PI * eDdU) + eDmZ * eDGZ
2496 * sin(M_PI * eDdU)) / eDdenomPropZ;
2497 eDpoly1 = tHQ + uHQ - 6*tHC*uH - 6*tH*uHC + 18*tHS*uHS;
2498 double tmPdiffUT = uH - tH;
2499 eDpoly2 = pow(tmPdiffUT,3);
2500 eDpoly3 = tHC - 3*tHS*uH - 3*tH*uHS + uHC;
2505 //--------------------------------------------------------------------------
2507 double Sigma2ffbar2LEDllbar::sigmaHat() {
2509 // Incoming fermion flavor.
2510 int idAbs = abs(id1);
2512 // Couplings and constants.
2513 // Qq = couplingsPtr->ef(idAbs), quark, i.e. id > 0.
2514 // Ql = couplingsPtr->ef(11), electron.
2515 double tmPe2QfQl = 4 * M_PI * alpEM * couplingsPtr->ef(idAbs)
2516 * couplingsPtr->ef(11);
2517 double tmPgvq = 0.25 * couplingsPtr->vf(idAbs);
2518 double tmPgaq = 0.25 * couplingsPtr->af(idAbs);
2519 double tmPgLq = tmPgvq + tmPgaq;
2520 double tmPgRq = tmPgvq - tmPgaq;
2521 double tmPgvl = 0.25 * couplingsPtr->vf(11);
2522 double tmPgal = 0.25 * couplingsPtr->af(11);
2523 double tmPgLl = tmPgvl + tmPgal;
2524 double tmPgRl = tmPgvl - tmPgal;
2525 double tmPe2s2c2 = 4 * M_PI * alpEM
2526 / (couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW());
2528 // LL, RR, LR, RL couplings.
2529 vector<double> tmPcoupZ;
2530 tmPcoupZ.push_back(tmPe2s2c2 * tmPgLq * tmPgLl);
2531 tmPcoupZ.push_back(tmPe2s2c2 * tmPgRq * tmPgRl);
2532 tmPcoupZ.push_back(tmPe2s2c2 * tmPgRq * tmPgLl);
2533 tmPcoupZ.push_back(tmPe2s2c2 * tmPgLq * tmPgRl);
2534 vector<double> tmPcoupU;
2537 tmPcoupU.push_back(-1);
2539 tmPcoupU.push_back(-1);
2540 } else if (eDnxx == 2) {
2542 tmPcoupU.push_back(0);
2544 tmPcoupU.push_back(0);
2547 tmPcoupU.push_back(1);
2549 tmPcoupU.push_back(1);
2553 tmPcoupU.push_back(-1);
2555 tmPcoupU.push_back(-1);
2556 } else if (eDnxy == 2) {
2558 tmPcoupU.push_back(0);
2560 tmPcoupU.push_back(0);
2563 tmPcoupU.push_back(1);
2565 tmPcoupU.push_back(1);
2572 for (unsigned int i = 0; i<tmPcoupZ.size(); ++i) {
2573 double tmPMS = pow2(tmPcoupU[i] * eDabsMeU)
2574 + pow2(tmPe2QfQl * eDrePropGamma)
2575 + pow2(tmPcoupZ[i]) / eDdenomPropZ
2576 + 2 * cos(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2577 * tmPe2QfQl * eDrePropGamma
2578 + 2 * cos(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2579 * tmPcoupZ[i] * eDrePropZ
2580 + 2 * tmPe2QfQl * eDrePropGamma
2581 * tmPcoupZ[i] * eDrePropZ
2582 - 2 * sin(M_PI * eDdU) * tmPcoupU[i] * eDabsMeU
2583 * tmPcoupZ[i] * eDimPropZ;
2585 if (i<2) { tmPMES += 4 * pow2(uH) * tmPMS; }
2586 else if (i<4) { tmPMES += 4 * pow2(tH) * tmPMS; }
2591 for (unsigned int i = 0; i<tmPcoupZ.size(); ++i) {
2592 double tmPMS = pow2(tmPe2QfQl * eDrePropGamma)
2593 + pow2(tmPcoupZ[i]) / eDdenomPropZ
2594 + 2 * tmPe2QfQl * eDrePropGamma * tmPcoupZ[i] * eDrePropZ;
2596 if (i<2) { tmPMES += 4 * pow2(uH) * tmPMS; }
2597 else if (i<4) { tmPMES += 4 * pow2(tH) * tmPMS; }
2599 tmPMES += 8 * eDabsAS * eDpoly1;
2600 tmPMES += 16 * tmPe2QfQl * eDrePropGamma * eDreA * eDpoly2;
2601 tmPMES += 16 * tmPe2s2c2 * eDreABW * (tmPgaq * tmPgal * eDpoly3
2602 + tmPgvq * tmPgvl * eDpoly2);
2606 // dsigma/dt, 2-to-2 phase space factors.
2607 double sigma = 0.25 * tmPMES; // 0.25, is the spin average
2608 sigma /= 16 * M_PI * pow2(sH);
2610 // If f fbar are quarks.
2611 if (idAbs < 9) sigma /= 3.;
2613 // sigma(ffbar->llbar) = 3 * sigma(ffbar->eebar)
2619 //--------------------------------------------------------------------------
2621 void Sigma2ffbar2LEDllbar::setIdColAcol() {
2623 double tmPrand = rndmPtr->flat();
2624 // Flavours trivial.
2625 if (tmPrand < 0.33333333) { setId( id1, id2, 11, -11); }
2626 else if (tmPrand < 0.66666667) { setId( id1, id2, 13, -13); }
2627 else { setId( id1, id2, 15, -15); }
2629 // tH defined between f and f': must swap tHat <-> uHat if id1 is fbar.
2632 // Colour flow topologies. Swap when antiquarks.
2633 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2634 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2635 if (id1 < 0) swapColAcol();
2639 //==========================================================================
2641 // Sigma2gg2LEDllbar class.
2642 // Cross section for g g -> (LED G*/U*) -> l lbar
2643 // (virtual graviton/unparticle exchange).
2645 //--------------------------------------------------------------------------
2647 void Sigma2gg2LEDllbar::initProc() {
2649 // Init model parameters.
2652 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2654 eDLambdaU = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2656 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2657 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2659 eDspin = settingsPtr->mode("ExtraDimensionsUnpart:spinU");
2660 eDdU = settingsPtr->parm("ExtraDimensionsUnpart:dU");
2661 eDLambdaU = settingsPtr->parm("ExtraDimensionsUnpart:LambdaU");
2662 eDlambda = settingsPtr->parm("ExtraDimensionsUnpart:lambda");
2665 // Model dependent constants.
2667 eDlambda2chi = 4 * M_PI;
2670 double tmPAdU = 16 * pow2(M_PI) * sqrt(M_PI) / pow(2. * M_PI, 2. * eDdU)
2671 * GammaReal(eDdU + 0.5) / (GammaReal(eDdU - 1.) * GammaReal(2. * eDdU));
2672 double tmPdUpi = eDdU * M_PI;
2673 eDlambda2chi = pow2(eDlambda) * tmPAdU / (2 * sin(tmPdUpi));
2676 // Model parameter check (if not applicable, sigma = 0).
2677 if ( !(eDspin==2) ) {
2679 infoPtr->errorMsg("Error in Sigma2gg2LEDllbar::initProc: "
2680 "Incorrect spin value (turn process off)!");
2681 } else if ( !eDgraviton && (eDdU >= 2)) {
2683 infoPtr->errorMsg("Error in Sigma2gg2LEDllbar::initProc: "
2684 "This process requires dU < 2 (turn process off)!");
2689 //--------------------------------------------------------------------------
2691 void Sigma2gg2LEDllbar::sigmaKin() {
2694 double tmPeffLambdaU = eDLambdaU;
2695 if (eDgraviton && ((eDcutoff == 2) || (eDcutoff == 3))) {
2696 double tmPffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaU);
2697 double tmPexp = double(eDnGrav) + 2;
2698 double tmPformfact = 1 + pow(tmPffterm, tmPexp);
2699 tmPeffLambdaU *= pow(tmPformfact,0.25);
2702 // ME from spin-2 unparticle.
2703 double tmPsLambda2 = sH / pow2(tmPeffLambdaU);
2704 double tmPexp = eDdU - 2;
2705 double tmPA = -eDlambda2chi * pow(tmPsLambda2,tmPexp)
2706 / (8 * pow(tmPeffLambdaU,4));
2707 eDsigma0 = 4 * pow2(tmPA) * uH * tH * (pow2(uH) + pow2(tH));
2709 // extra 1/sHS from 2-to-2 phase space.
2710 eDsigma0 /= 16 * M_PI * pow2(sH);
2712 // sigma(ffbar->llbar) = 3 * sigma(ffbar->eebar)
2717 //--------------------------------------------------------------------------
2719 void Sigma2gg2LEDllbar::setIdColAcol() {
2721 double tmPrand = rndmPtr->flat();
2722 // Flavours trivial.
2723 if (tmPrand < 0.33333333) { setId( 21, 21, 11, -11); }
2724 else if (tmPrand < 0.66666667) { setId( 21, 21, 13, -13); }
2725 else { setId( 21, 21, 15, -15); }
2727 // Colour flow topologies.
2728 setColAcol( 1, 2, 2, 1, 0, 0, 0, 0);
2732 //==========================================================================
2734 // Sigma2gg2LEDgg class.
2735 // Cross section for g g -> (LED G*) -> g g.
2737 //--------------------------------------------------------------------------
2739 // Initialize process.
2741 void Sigma2gg2LEDgg::initProc() {
2743 // Read model parameters.
2744 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2745 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2746 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2747 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2748 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2749 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2750 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2754 //--------------------------------------------------------------------------
2756 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2758 void Sigma2gg2LEDgg::sigmaKin() {
2760 // Get S(x) values for G amplitude.
2764 if (eDopMode == 0) {
2765 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2766 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2767 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2770 double effLambda = eDLambdaT;
2771 if ((eDcutoff == 2) || (eDcutoff == 3)) {
2772 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2773 double exp = double(eDnGrav) + 2.;
2774 double formfa = 1. + pow(ffterm, exp);
2775 effLambda *= pow(formfa,0.25);
2777 sS = 4.*M_PI/pow(effLambda,4);
2778 sT = 4.*M_PI/pow(effLambda,4);
2779 sU = 4.*M_PI/pow(effLambda,4);
2780 if (eDnegInt == 1) {
2787 // Calculate kinematics dependence.
2788 double sH3 = sH*sH2;
2789 double tH3 = tH*tH2;
2790 double uH3 = uH*uH2;
2792 sigTS = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2793 * (tH2 / sH2 + 2. * tH / sH + 3. + 2. * sH / tH + sH2 / tH2)
2794 + 24.*M_PI*alpS*( (sH3/tH + tH2 + 3.*(sH*tH + sH2))*sS.real()
2795 + (tH3/sH + sH2 + 3.*(tH*sH + tH2))*sT.real())
2796 + pow2(uH2)*( 4.*real(sS*conj(sS)) + sS.real()*sT.real()
2797 + sS.imag()*sT.imag() + 4.*real(sT*conj(sT)));
2800 sigUS = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2801 * (uH2 / sH2 + 2. * uH / sH + 3. + 2. * sH / uH + sH2 / uH2)
2802 + 24.*M_PI*alpS*( (sH3/uH + uH2 + 3.*(sH*uH + sH2))*sS.real()
2803 + (uH3/sH + sH2 + 3.*(uH*sH + uH2))*sU.real())
2804 + pow2(tH2)*( 4.*real(sS*conj(sS)) + sS.real()*sU.real()
2805 + sS.imag()*sU.imag() + 4.*real(sU*conj(sU)));
2807 sigTU = (128. * pow2(M_PI) * pow2(alpS)) * (9./4.)
2808 * (tH2 / uH2 + 2. * tH / uH + 3. + 2. * uH / tH + uH2 / tH2)
2809 + 24.*M_PI*alpS*( (tH3/uH + uH2 + 3.*(tH*uH + tH2))*sT.real()
2810 + (uH3/tH + tH2 + 3.*(uH*tH + uH2))*sU.real())
2811 + pow2(sH2)*( 4.*real(sT*conj(sT)) + sT.real()*sU.real()
2812 + sT.imag()*sU.imag() + 4.*real(sU*conj(sU)));
2814 sigSum = sigTS + sigUS + sigTU;
2816 // Answer contains factor 1/2 from identical gluons.
2817 sigma = 0.5 * sigSum / (128. * M_PI * sH2);
2821 //--------------------------------------------------------------------------
2823 // Select identity, colour and anticolour.
2825 void Sigma2gg2LEDgg::setIdColAcol() {
2827 // Flavours are trivial.
2828 setId( id1, id2, 21, 21);
2830 // Three colour flow topologies, each with two orientations.
2831 double sigRand = sigSum * rndmPtr->flat();
2832 if (sigRand < sigTS) setColAcol( 1, 2, 2, 3, 1, 4, 4, 3);
2833 else if (sigRand < sigTS + sigUS)
2834 setColAcol( 1, 2, 3, 1, 3, 4, 4, 2);
2835 else setColAcol( 1, 2, 3, 4, 1, 4, 3, 2);
2836 if (rndmPtr->flat() > 0.5) swapColAcol();
2840 //==========================================================================
2842 // Sigma2gg2LEDqqbar class.
2843 // Cross section for g g -> (LED G*) -> q qbar.
2845 //--------------------------------------------------------------------------
2847 // Initialize process.
2849 void Sigma2gg2LEDqqbar::initProc() {
2851 // Read number of quarks to be considered in massless approximation
2852 // as well as model parameters.
2853 nQuarkNew = settingsPtr->mode("ExtraDimensionsLED:nQuarkNew");
2854 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2855 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2856 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2857 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2858 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2859 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2860 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2864 //--------------------------------------------------------------------------
2866 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2868 void Sigma2gg2LEDqqbar::sigmaKin() {
2870 // Get S(x) values for G amplitude.
2874 if (eDopMode == 0) {
2875 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2876 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2877 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2880 double effLambda = eDLambdaT;
2881 if ((eDcutoff == 2) || (eDcutoff == 3)) {
2882 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2883 double exp = double(eDnGrav) + 2.;
2884 double formfa = 1. + pow(ffterm, exp);
2885 effLambda *= pow(formfa,0.25);
2887 sS = 4.*M_PI/pow(effLambda,4);
2888 sT = 4.*M_PI/pow(effLambda,4);
2889 sU = 4.*M_PI/pow(effLambda,4);
2890 if (eDnegInt == 1) {
2897 // Pick new flavour.
2898 idNew = 1 + int( nQuarkNew * rndmPtr->flat() );
2899 mNew = particleDataPtr->m0(idNew);
2902 // Calculate kinematics dependence.
2905 if (sH > 4. * m2New) {
2906 double tH3 = tH*tH2;
2907 double uH3 = uH*uH2;
2908 sigTS = (16. * pow2(M_PI) * pow2(alpS))
2909 * ((1./6.) * uH / tH - (3./8.) * uH2 / sH2)
2910 - 0.5 * M_PI * alpS * uH2 * sS.real()
2911 + (3./16.) * uH3 * tH * real(sS*conj(sS));
2912 sigUS = (16. * pow2(M_PI) * pow2(alpS))
2913 * ((1./6.) * tH / uH - (3./8.) * tH2 / sH2)
2914 - 0.5 * M_PI * alpS * tH2 * sS.real()
2915 + (3./16.) * tH3 * uH * real(sS*conj(sS));
2917 sigSum = sigTS + sigUS;
2919 // Answer is proportional to number of outgoing flavours.
2920 sigma = nQuarkNew * sigSum / (16. * M_PI * sH2);
2924 //--------------------------------------------------------------------------
2926 // Select identity, colour and anticolour.
2928 void Sigma2gg2LEDqqbar::setIdColAcol() {
2930 // Flavours are trivial.
2931 setId( id1, id2, idNew, -idNew);
2933 // Two colour flow topologies.
2934 double sigRand = sigSum * rndmPtr->flat();
2935 if (sigRand < sigTS) setColAcol( 1, 2, 2, 3, 1, 0, 0, 3);
2936 else setColAcol( 1, 2, 3, 1, 3, 0, 0, 2);
2940 //==========================================================================
2942 // Sigma2qg2LEDqg class.
2943 // Cross section for q g -> (LED G*) -> q g.
2945 //--------------------------------------------------------------------------
2947 // Initialize process.
2949 void Sigma2qg2LEDqg::initProc() {
2951 // Read model parameters.
2952 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
2953 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
2954 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
2955 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
2956 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
2957 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
2958 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
2962 //--------------------------------------------------------------------------
2964 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
2966 void Sigma2qg2LEDqg::sigmaKin() {
2968 // Get S(x) values for G amplitude.
2972 if (eDopMode == 0) {
2973 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2974 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2975 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
2978 double effLambda = eDLambdaT;
2979 if ((eDcutoff == 2) || (eDcutoff == 3)) {
2980 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
2981 double exp = double(eDnGrav) + 2.;
2982 double formfa = 1. + pow(ffterm, exp);
2983 effLambda *= pow(formfa,0.25);
2985 sS = 4.*M_PI/pow(effLambda,4);
2986 sT = 4.*M_PI/pow(effLambda,4);
2987 sU = 4.*M_PI/pow(effLambda,4);
2988 if (eDnegInt == 1) {
2995 // Calculate kinematics dependence.
2996 double sH3 = sH*sH2;
2997 double uH3 = uH*uH2;
2998 sigTS = (16. * pow2(M_PI) * pow2(alpS))
2999 * (uH2 / tH2 - (4./9.) * uH / sH)
3000 + (4./3.) * M_PI * alpS * uH2 * sT.real()
3001 - 0.5 * uH3 * sH * real(sT*conj(sT));
3002 sigTU = (16. * pow2(M_PI) * pow2(alpS))
3003 * (sH2 / tH2 - (4./9.) * sH / uH)
3004 + (4./3.) * M_PI * alpS * sH2 * sT.real()
3005 - 0.5 * sH3 * uH * real(sT*conj(sT));
3006 sigSum = sigTS + sigTU;
3009 sigma = sigSum / (16. * M_PI * sH2);
3013 //--------------------------------------------------------------------------
3015 // Select identity, colour and anticolour.
3017 void Sigma2qg2LEDqg::setIdColAcol() {
3019 // Outgoing = incoming flavours.
3020 setId( id1, id2, id1, id2);
3022 // Two colour flow topologies. Swap if first is gluon, or when antiquark.
3023 double sigRand = sigSum * rndmPtr->flat();
3024 if (sigRand < sigTS) setColAcol( 1, 0, 2, 1, 3, 0, 2, 3);
3025 else setColAcol( 1, 0, 2, 3, 2, 0, 1, 3);
3026 if (id1 == 21) swapCol1234();
3027 if (id1 < 0 || id2 < 0) swapColAcol();
3031 //==========================================================================
3033 // Sigma2qq2LEDqq class.
3034 // Cross section for q q(bar)' -> (LED G*) -> q q(bar)'
3036 //--------------------------------------------------------------------------
3038 // Initialize process.
3040 void Sigma2qq2LEDqq::initProc() {
3042 // Read model parameters.
3043 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3044 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3045 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3046 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3047 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
3048 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3049 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3053 //--------------------------------------------------------------------------
3055 // Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
3057 void Sigma2qq2LEDqq::sigmaKin() {
3059 // Get S(x) values for G amplitude.
3063 if (eDopMode == 0) {
3064 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3065 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3066 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3069 double effLambda = eDLambdaT;
3070 if ((eDcutoff == 2) || (eDcutoff == 3)) {
3071 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3072 double exp = double(eDnGrav) + 2.;
3073 double formfa = 1. + pow(ffterm, exp);
3074 effLambda *= pow(formfa,0.25);
3076 sS = 4.*M_PI/pow(effLambda,4);
3077 sT = 4.*M_PI/pow(effLambda,4);
3078 sU = 4.*M_PI/pow(effLambda,4);
3079 if (eDnegInt == 1) {
3086 // Calculate kinematics dependence for different terms.
3087 sigT = (4./9.) * (sH2 + uH2) / tH2;
3088 sigU = (4./9.) * (sH2 + tH2) / uH2;
3089 sigTU = - (8./27.) * sH2 / (tH * uH);
3090 sigST = - (8./27.) * uH2 / (sH * tH);
3092 sigGrT1 = funLedG(tH, uH) * real(sT*conj(sT)) / 8.;
3093 sigGrT2 = funLedG(tH, sH) * real(sT*conj(sT)) / 8.;
3094 sigGrU = funLedG(uH, tH) * real(sU*conj(sU)) / 8.;
3095 sigGrTU = (8./9.) * M_PI * alpS * sH2
3096 * ((4.*uH + tH)*sT.real()/uH + (4.*tH + uH)*sU.real()/tH)
3097 + (sT.real()*sU.real() + sT.imag()*sU.imag())
3098 * (4.*tH + uH)*(4.*uH + tH) * sH2 / 48.;
3099 sigGrST = (8./9.) * M_PI * alpS * uH2
3100 * ((4.*tH + sH)*sS.real()/tH + (4.*sH + tH)*sT.real()/sH)
3101 + (sS.real()*sT.real() + sS.imag()*sT.imag())
3102 * (4.*sH + tH)*(4.*tH + sH) * uH2 / 48.;
3106 //--------------------------------------------------------------------------
3108 // Evaluate d(sigmaHat)/d(tHat), including incoming flavour dependence.
3110 double Sigma2qq2LEDqq::sigmaHat() {
3112 // Combine cross section terms; factor 1/2 when identical quarks.
3114 sigSum = (16. * pow2(M_PI) * pow2(alpS)) * (sigT + sigU + sigTU)
3115 + sigGrT1 + sigGrU + sigGrTU;
3117 } else if (id2 == -id1) {
3118 sigSum = (16. * pow2(M_PI) * pow2(alpS)) * (sigT + sigST)
3119 + sigGrT2 + sigGrST;
3121 sigSum = 16. * pow2(M_PI) * pow2(alpS) * sigT + sigGrT1;
3125 return sigSum / (16. * M_PI * sH2);
3129 //--------------------------------------------------------------------------
3131 // Select identity, colour and anticolour.
3133 void Sigma2qq2LEDqq::setIdColAcol() {
3135 // Outgoing = incoming flavours.
3136 setId( id1, id2, id1, id2);
3138 // Colour flow topologies. Swap when antiquarks.
3139 double sigTtot = sigT + sigGrT2;
3140 double sigUtot = sigU + sigGrU;
3141 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
3142 else setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
3143 if (id2 == id1 && (sigTtot + sigUtot) * rndmPtr->flat() > sigTtot)
3144 setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
3145 if (id1 < 0) swapColAcol();
3149 //==========================================================================
3151 // Sigma2qqbar2LEDgg class.
3152 // Cross section for q qbar -> (LED G*) -> g g.
3154 //--------------------------------------------------------------------------
3156 // Initialize process.
3158 void Sigma2qqbar2LEDgg::initProc() {
3160 // Read model parameters.
3161 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3162 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3163 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3164 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3165 eDnegInt = settingsPtr->mode("ExtraDimensionsLED:NegInt");
3166 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3167 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3171 //--------------------------------------------------------------------------
3173 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
3175 void Sigma2qqbar2LEDgg::sigmaKin() {
3177 // Get S(x) values for G amplitude.
3181 if (eDopMode == 0) {
3182 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3183 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3184 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3187 double effLambda = eDLambdaT;
3188 if ((eDcutoff == 2) || (eDcutoff == 3)) {
3189 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3190 double exp = double(eDnGrav) + 2.;
3191 double formfa = 1. + pow(ffterm, exp);
3192 effLambda *= pow(formfa,0.25);
3194 sS = 4.*M_PI/pow(effLambda,4);
3195 sT = 4.*M_PI/pow(effLambda,4);
3196 sU = 4.*M_PI/pow(effLambda,4);
3197 if (eDnegInt == 1) {
3204 // Calculate kinematics dependence.
3205 double tH3 = tH*tH2;
3206 double uH3 = uH*uH2;
3207 sigTS = (16. * pow2(M_PI) * pow2(alpS))
3208 * ((1./6.) * uH / tH - (3./8.) * uH2 / sH2)
3209 - 0.5 * M_PI * alpS * uH2 * sS.real()
3210 + (3./16.) * uH3 * tH * real(sS*conj(sS));
3211 sigUS = (16. * pow2(M_PI) * pow2(alpS))
3212 * ((1./6.) * tH / uH - (3./8.) * tH2 / sH2)
3213 - 0.5 * M_PI * alpS * tH2 * sS.real()
3214 + (3./16.) * tH3 * uH * real(sS*conj(sS));
3216 sigSum = sigTS + sigUS;
3218 // Answer contains factor 1/2 from identical gluons.
3219 sigma = (64./9.) * 0.5 * sigSum / (16. * M_PI * sH2);
3223 //--------------------------------------------------------------------------
3225 // Select identity, colour and anticolour.
3227 void Sigma2qqbar2LEDgg::setIdColAcol() {
3229 // Outgoing flavours trivial.
3230 setId( id1, id2, 21, 21);
3232 // Two colour flow topologies. Swap if first is antiquark.
3233 double sigRand = sigSum * rndmPtr->flat();
3234 if (sigRand < sigTS) setColAcol( 1, 0, 0, 2, 1, 3, 3, 2);
3235 else setColAcol( 1, 0, 0, 2, 3, 2, 1, 3);
3236 if (id1 < 0) swapColAcol();
3240 //==========================================================================
3242 // Sigma2qqbar2LEDqqbarNew class.
3243 // Cross section q qbar -> (LED G*) -> q' qbar'.
3245 //--------------------------------------------------------------------------
3247 // Initialize process.
3249 void Sigma2qqbar2LEDqqbarNew::initProc() {
3251 // Read number of quarks to be considered in massless approximation
3252 // as well as model parameters.
3253 nQuarkNew = settingsPtr->mode("ExtraDimensionsLED:nQuarkNew");
3254 eDopMode = settingsPtr->mode("ExtraDimensionsLED:opMode");
3255 eDnGrav = settingsPtr->mode("ExtraDimensionsLED:n");
3256 eDMD = settingsPtr->parm("ExtraDimensionsLED:MD");
3257 eDLambdaT = settingsPtr->parm("ExtraDimensionsLED:LambdaT");
3258 eDcutoff = settingsPtr->mode("ExtraDimensionsLED:CutOffMode");
3259 eDtff = settingsPtr->parm("ExtraDimensionsLED:t");
3263 //--------------------------------------------------------------------------
3265 // Evaluate d(sigmaHat)/d(tHat) - no incoming flavour dependence.
3267 void Sigma2qqbar2LEDqqbarNew::sigmaKin() {
3269 // Get S(x) values for G amplitude.
3273 if (eDopMode == 0) {
3274 sS = ampLedS( sH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3275 sT = ampLedS( tH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3276 sU = ampLedS( uH/pow2(eDLambdaT), eDnGrav, eDLambdaT, eDMD);
3279 double effLambda = eDLambdaT;
3280 if ((eDcutoff == 2) || (eDcutoff == 3)) {
3281 double ffterm = sqrt(Q2RenSave) / (eDtff * eDLambdaT);
3282 double exp = double(eDnGrav) + 2.;
3283 double formfa = 1. + pow(ffterm, exp);
3284 effLambda *= pow(formfa,0.25);
3286 sS = 4.*M_PI/pow(effLambda,4);
3287 sT = 4.*M_PI/pow(effLambda,4);
3288 sU = 4.*M_PI/pow(effLambda,4);
3291 // Pick new flavour.
3292 idNew = 1 + int( nQuarkNew * rndmPtr->flat() );
3293 mNew = particleDataPtr->m0(idNew);
3296 // Calculate kinematics dependence.
3298 if (sH > 4. * m2New) {
3299 sigS = (16. * pow2(M_PI) * pow2(alpS))
3300 * (4./9.) * (tH2 + uH2) / sH2
3301 + funLedG(sH, tH) * real(sS*conj(sS)) / 8.;
3303 // Answer is proportional to number of outgoing flavours.
3304 sigma = nQuarkNew * sigS / (16. * M_PI * sH2);
3308 //--------------------------------------------------------------------------
3310 // Select identity, colour and anticolour.
3312 void Sigma2qqbar2LEDqqbarNew::setIdColAcol() {
3314 // Set outgoing flavours ones.
3315 id3 = (id1 > 0) ? idNew : -idNew;
3316 setId( id1, id2, id3, -id3);
3318 // Colour flow topologies. Swap when antiquarks.
3319 setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
3320 if (id1 < 0) swapColAcol();
3324 //==========================================================================
3326 } // end namespace Pythia8