source: HiSusy/trunk/Pythia8/pythia8170/src/SigmaGeneric.cc @ 1

Last change on this file since 1 was 1, checked in by zerwas, 11 years ago

first import of structure, PYTHIA8 and DELPHES

File size: 13.9 KB
Line 
1// SigmaGeneric.cc is a part of the PYTHIA event generator.
2// Copyright (C) 2012 Johan Bijnens, Torbjorn Sjostrand.
3// PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4// Please respect the MCnet Guidelines, see GUIDELINES for details.
5
6// Function definitions (not found in the header) for various generic
7// production processes, to be used as building blocks for some BSM processes.
8// Currently represented by QCD pair production of colour triplet objects,
9// with spin either 0, 1/2 or 1.
10
11// Cross sections are only provided for fixed m3 = m4, so do some gymnastics:
12// i) s34Avg picked so that beta34 same when s3, s4 -> s34Avg.
13// ii) tHQ = tH - mQ^2 = -0.5 sH (1 - beta34 cos(thetaH)) for m3 = m4 = mQ,
14//     but tH - uH = sH beta34 cos(thetaH) also for m3 != m4, so use
15//     tH, uH selected for m3 != m4 to derive tHQ, uHQ valid for m3 = m4.   
16
17#include "SigmaGeneric.h"
18
19namespace Pythia8 {
20
21//==========================================================================
22
23// Sigma2gg2qGqGbar class.
24// Cross section for g g -> qG qGbar (generic quark of spin 0, 1/2 or 1).
25
26//--------------------------------------------------------------------------
27
28// Initialize process.
29 
30void Sigma2gg2qGqGbar::initProc() {
31
32  // Number of colours. Anomalous coupling kappa - 1 used for vector state.
33  nCHV         = settingsPtr->mode("HiddenValley:Ngauge");
34  kappam1      = settingsPtr->parm("HiddenValley:kappa") - 1.;
35  hasKappa     = (abs(kappam1) > 1e-8);
36
37  // Secondary open width fraction.
38  openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
39 
40} 
41
42//--------------------------------------------------------------------------
43
44// Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
45
46void Sigma2gg2qGqGbar::sigmaKin() { 
47
48  // Modified Mandelstam variables for massive kinematics with m3 = m4.
49  double delta  = 0.25 * pow2(s3 - s4) / sH;
50  double s34Avg = 0.5 * (s3 + s4) - delta; 
51  double tHavg  = tH - delta;
52  double uHavg  = uH - delta;
53  double tHQ    = -0.5 * (sH - tH + uH);
54  double uHQ    = -0.5 * (sH + tH - uH); 
55  double tHQ2   = tHQ * tHQ;
56  double uHQ2   = uHQ * uHQ;
57
58  //  Evaluate cross section for spin 0 colour triplet.
59  if (spinSave == 0) {   
60    sigSum = 0.5 * ( 7. / 48. + 3. * pow2(uHavg - tHavg) / (16. * sH2) )
61      * ( 1. + 2. * s34Avg * tHavg / pow2(tHavg - s34Avg) 
62      + 2. * s34Avg * uHavg / pow2(uHavg - s34Avg)
63      + 4. * pow2(s34Avg) / ((tHavg - s34Avg) * (uHavg - s34Avg)) );
64
65    // Equal probability for two possible colour flows.
66    sigTS = 0.5 * sigSum;
67    sigUS = sigTS;
68  }
69
70  //  Evaluate cross section for spin 1/2 colour triplet.
71  else if (spinSave == 1) {   
72    double tumHQ = tHQ * uHQ - s34Avg * sH;
73    sigTS = ( uHQ / tHQ - 2.25 * uHQ2 / sH2 + 4.5 * s34Avg * tumHQ
74      / ( sH * tHQ2) + 0.5 * s34Avg * (tHQ + s34Avg) / tHQ2
75      - s34Avg*s34Avg / (sH * tHQ) ) / 6.;
76    sigUS = ( tHQ / uHQ - 2.25 * tHQ2 / sH2 + 4.5 * s34Avg * tumHQ
77      / ( sH * uHQ2) + 0.5 * s34Avg * (uHQ + s34Avg) / uHQ2
78      - s34Avg*s34Avg / (sH * uHQ) ) / 6.;
79    sigSum = sigTS + sigUS;
80  }
81
82  //  Evaluate cross section for spin 1 colour triplet.
83  else { 
84    double tmu      = tHavg - uHavg;
85    double s34Pos   = s34Avg / sH;
86    double s34Pos2  = s34Pos * s34Pos;
87    double s34Neg   = sH / s34Avg;
88    double s34Neg2  = s34Neg * s34Neg;
89    sigSum = pow2(tmu) * sH2 * (241./1536. - 1./32. * s34Pos
90        + 9./16. * s34Pos2)
91      + pow4(tmu) * (37./512. + 9./64. * s34Pos)
92      + pow6(tmu) * (9./512. / sH2) 
93      + sH2 * sH2 * (133./1536. - 7./64. * s34Pos + 7./16. * s34Pos2); 
94
95    // Anomalous coupling.
96    if (hasKappa) 
97    sigSum += pow2(tmu) * sH2 * (kappam1 * (143./384. - 7./3072 * s34Neg) 
98      + pow2(kappam1) * (- 1./768. * s34Neg + 185./768.)
99      + pow3(kappam1) * (- 7./3072. *  s34Neg2
100        - 25./3072. * s34Neg + 67./1536.) 
101      + pow4(kappam1) * (- 37./49152. * s34Neg2
102        - 25./6144. * s34Neg + 5./1536.) )
103      + pow4(tmu) * (kappam1 * 3./32. 
104      + pow2(kappam1) * (7./6144. * s34Neg2 - 7./768. * s34Neg + 3./128.) 
105      + pow3(kappam1) * (7./6144. * s34Neg2 - 7./1536. * s34Neg)
106      + pow4(kappam1) * (- 1./49152. * s34Neg2 + 5./6144. * s34Neg) )
107      + pow6(tmu) * pow4(kappam1) * 13./49152. / pow2(s34Avg)
108      + sH2 * sH2 * ( kappam1 * 77./384. 
109      + pow2(kappam1) * (7./6144. * s34Neg2 + 1./96.* s34Neg + 39./256.) 
110      + pow3(kappam1) * (7./6144. * s34Neg2 + 13./1024. * s34Neg + 61./1536.)
111      + pow4(kappam1) * (25./49152. * s34Neg2 + 5./1536. * s34Neg + 1./512.) 
112      );
113
114    // Equal probability for two possible colour flows.
115    sigSum /= pow2( (uHavg-s34Avg) * (tHavg-s34Avg) );
116    sigTS = 0.5 * sigSum;
117    sigUS = sigTS;
118  }
119
120  // Final answer, with common factors.
121  sigma = (M_PI / sH2) * pow2(alpS) * sigSum * nCHV * openFracPair; 
122
123}
124
125//--------------------------------------------------------------------------
126
127// Select identity, colour and anticolour.
128
129void Sigma2gg2qGqGbar::setIdColAcol() {
130
131  // Flavours trivial.
132  setId( 21, 21, idNew, -idNew);
133
134  // Two colour flow topologies.
135  double sigRand = sigSum * rndmPtr->flat();
136  if (sigRand < sigTS) setColAcol( 1, 2, 2, 3, 1, 0, 0, 3);
137  else                 setColAcol( 1, 2, 3, 1, 3, 0, 0, 2); 
138
139}
140
141//==========================================================================
142
143// Sigma2qqbar2qGqGbar class.
144// Cross section for q qbar -> qG qGbar (generic quark of spin 0, 1/2 or 1).
145
146//--------------------------------------------------------------------------
147
148// Initialize process.
149 
150void Sigma2qqbar2qGqGbar::initProc() {
151
152  // Number of colours. Coupling kappa used for vector state.
153  nCHV         = settingsPtr->mode("HiddenValley:Ngauge");
154  kappa        = settingsPtr->parm("HiddenValley:kappa");
155
156   // Secondary open width fraction.
157  openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
158
159} 
160
161//--------------------------------------------------------------------------
162
163// Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
164
165void Sigma2qqbar2qGqGbar::sigmaKin() { 
166
167  // Modified Mandelstam variables for massive kinematics with m3 = m4.
168  double delta  = 0.25 * pow2(s3 - s4) / sH;
169  double s34Avg = 0.5 * (s3 + s4) - delta; 
170  double tHavg  = tH - delta;
171  double uHavg  = uH - delta;
172  double tHQ    = -0.5 * (sH - tH + uH);
173  double uHQ    = -0.5 * (sH + tH - uH); 
174  double tHQ2   = tHQ * tHQ;
175  double uHQ2   = uHQ * uHQ;
176
177  //  Evaluate cross section for spin 0 colour triplet.
178  if (spinSave == 0) {   
179    sigSum = (1./9.) * (sH * (sH - 4. * s34Avg) 
180      - pow2(uHavg - tHavg)) / sH2;
181  }
182
183  //  Evaluate cross section for spin 1/2 colour triplet.
184  else if (spinSave == 1) {   
185    sigSum = (4./9.) * ((tHQ2 + uHQ2) / sH2 + 2. * s34Avg / sH); 
186  }
187
188  //  Evaluate cross section for spin 1 colour triplet.
189  else { 
190    double tuH34 = (tHavg + uHavg) / s34Avg; 
191    sigSum = (1./9.) * ( 
192      pow2(1. + kappa) * sH * s34Avg * (pow2(tuH34) - 4.)
193      + (tHavg * uHavg - pow2(s34Avg)) * (8. + 2. * (1. - pow2(kappa)) * tuH34
194      + pow2(kappa) * pow2(tuH34)) ) / sH2;
195  }
196
197  // Final answer, with common factors.
198  sigma = (M_PI / sH2) * pow2(alpS) * sigSum * nCHV * openFracPair; 
199
200}
201
202//--------------------------------------------------------------------------
203
204// Select identity, colour and anticolour.
205
206void Sigma2qqbar2qGqGbar::setIdColAcol() {
207
208  // Flavours trivial.
209  setId( id1, id2, idNew, -idNew);
210
211  // tH defined between f and qG: must swap tHat <-> uHat if qbar q in.
212  swapTU = (id1 < 0); 
213
214  // Colour flow topologies.
215  if (id1 > 0) setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
216  else         setColAcol( 0, 2, 1, 0, 1, 0, 0, 2);
217
218}
219
220//==========================================================================
221
222// Sigma2ffbar2fGfGbar class.
223// Cross section for f fbar -> qG qGbar (generic quark of spin 0, 1/2 or 1)
224// via gamma^*/Z^* s-channel exchange. Still under development!! ?? 
225
226//--------------------------------------------------------------------------
227
228// Initialize process.
229 
230void Sigma2ffbar2fGfGbar::initProc() {
231
232  // Charge and number of colours. Coupling kappa used for vector state.
233  if (settingsPtr->flag("HiddenValley:doKinMix"))
234    eQHV2      = pow2(settingsPtr->parm("HiddenValley:kinMix"));
235  else
236    eQHV2      = pow2( particleDataPtr->charge(idNew) ); 
237  nCHV         = settingsPtr->mode("HiddenValley:Ngauge");
238  kappa        = settingsPtr->parm("HiddenValley:kappa");
239
240  // Coloured or uncoloured particle.
241  hasColour    = (particleDataPtr->colType(idNew) != 0);
242  colFac       = (hasColour) ? 3. : 1.;
243
244   // Secondary open width fraction.
245  openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
246
247} 
248
249//--------------------------------------------------------------------------
250
251// Evaluate d(sigmaHat)/d(tHat), part independent of incoming flavour.
252
253void Sigma2ffbar2fGfGbar::sigmaKin() { 
254
255  // Modified Mandelstam variables for massive kinematics with m3 = m4.
256  double delta  = 0.25 * pow2(s3 - s4) / sH;
257  double s34Avg = 0.5 * (s3 + s4) - delta; 
258  double tHavg  = tH - delta;
259  double uHavg  = uH - delta;
260  double tHQ    = -0.5 * (sH - tH + uH);
261  double uHQ    = -0.5 * (sH + tH - uH); 
262  double tHQ2   = tHQ * tHQ;
263  double uHQ2   = uHQ * uHQ;
264
265  //  Evaluate cross section for spin 0 colour triplet.
266  if (spinSave == 0) {   
267    sigSum = 0.5 * (sH * (sH - 4. * s34Avg) - pow2(uHavg - tHavg)) / sH2;
268  }
269
270  //  Evaluate cross section for spin 1/2 colour triplet.
271  else if (spinSave == 1) {   
272    sigSum = 2. * ((tHQ2 + uHQ2) / sH2 + 2. * s34Avg / sH); 
273  }
274
275  //  Evaluate cross section for spin 1 colour triplet.
276  else { 
277    double tuH34 = (tHavg + uHavg) / s34Avg; 
278    sigSum = 0.5 * ( pow2(1. + kappa) * sH * s34Avg * (pow2(tuH34) - 4.)
279      + (tHavg * uHavg - pow2(s34Avg)) * (8. + 2. * (1. - pow2(kappa)) * tuH34
280      + pow2(kappa) * pow2(tuH34)) ) / sH2;
281  }
282
283  // Final-state charge factors.
284  sigSum *= colFac * eQHV2 * (1. + alpS / M_PI);
285
286  // Final answer, except for initial-state weight
287  sigma0 = (M_PI / sH2) * pow2(alpEM) * sigSum * nCHV * openFracPair; 
288
289}
290
291//--------------------------------------------------------------------------
292
293// Evaluate d(sigmaHat)/d(tHat), including incoming flavour dependence.
294
295double Sigma2ffbar2fGfGbar::sigmaHat() { 
296
297  // Charge and colour factors.
298  double eNow  = couplingsPtr->ef( abs(id1) );   
299  double sigma = sigma0 * pow2(eNow);
300  if (abs(id1) < 9) sigma /= 3.;
301
302  // Answer.
303  return sigma;   
304
305}
306
307//--------------------------------------------------------------------------
308
309// Select identity, colour and anticolour.
310
311void Sigma2ffbar2fGfGbar::setIdColAcol() {
312
313  // Flavours trivial.
314  setId( id1, id2, idNew, -idNew);
315
316  // tH defined between f and qG: must swap tHat <-> uHat if fbar f in.
317  swapTU = (id1 < 0); 
318
319  // Colour flow topologies.
320  if (hasColour) {
321    if (id1 > 0 && id1 < 7)       setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
322    else if (id1 > -7 && id1 < 0) setColAcol( 0, 1, 1, 0, 2, 0, 0, 2);
323    else                          setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
324  } else {
325    if (id1 > 0 && id1 < 7)       setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
326    else if (id1 > -7 && id1 < 0) setColAcol( 0, 1, 1, 0, 0, 0, 0, 0);
327    else                          setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
328  }
329
330}
331
332//==========================================================================
333
334// Sigma1ffbar2Zv class.
335// Cross section for f fbar -> Zv, where Zv couples both to the SM and
336// to a hidden sector. Primitive coupling structure.
337
338//--------------------------------------------------------------------------
339
340// Initialize process.
341 
342void Sigma1ffbar2Zv::initProc() {
343
344  // Store Zv mass and width for propagator.
345  idZv     = 4900023;
346  mRes     = particleDataPtr->m0(idZv);
347  GammaRes = particleDataPtr->mWidth(idZv);
348  m2Res    = mRes*mRes;
349  GamMRat  = GammaRes / mRes;
350
351  // Set pointer to particle properties and decay table.
352  particlePtr = particleDataPtr->particleDataEntryPtr(idZv);
353 
354} 
355
356//--------------------------------------------------------------------------
357
358// Evaluate sigmaHat(sHat); first step when inflavours unknown.
359
360void Sigma1ffbar2Zv::sigmaKin() { 
361
362  // Breit-Wigner, including some (guessed) spin factors.
363  double sigBW    = 12. * M_PI / ( pow2(sH - m2Res) + pow2(sH * GamMRat) ); 
364
365  // Outgoing width: only includes channels left open.
366  double widthOut = particlePtr->resWidthOpen(663, mH);   
367
368  // Temporary answer.
369  sigOut = sigBW * widthOut;
370
371}
372
373//--------------------------------------------------------------------------
374
375// Evaluate sigmaHat(sHat); second step when inflavours known.
376
377double Sigma1ffbar2Zv::sigmaHat() { 
378
379  // Incoming quark or lepton; for former need two 1/3 colour factors.
380  int id1Abs     = abs(id1);
381  double widthIn = particlePtr->resWidthChan( mH, id1Abs, -id1Abs);
382  if (id1Abs < 6) widthIn /= 9.;
383  return widthIn * sigOut;
384
385}
386
387//--------------------------------------------------------------------------
388
389// Select identity, colour and anticolour.
390
391void Sigma1ffbar2Zv::setIdColAcol() {
392
393  // Flavours trivial.
394  setId( id1, id2, idZv);
395
396  // Colour flow topologies. Swap when antiquarks.
397  if (abs(id1) < 6) setColAcol( 1, 0, 0, 1, 0, 0);
398  else              setColAcol( 0, 0, 0, 0, 0, 0);
399  if (id1 < 0) swapColAcol();
400
401}
402
403//--------------------------------------------------------------------------
404
405// Evaluate weight for decay angles.
406
407double Sigma1ffbar2Zv::weightDecay( Event& process, int iResBeg,
408  int iResEnd) {
409
410  // Identity of mother of decaying resonance(s).
411  int idMother = process[process[iResBeg].mother1()].idAbs();
412
413  // For Z' itself angular distribution as if gamma*.
414  if (iResBeg == 5 && iResEnd == 5) {
415    double mr     = 4. * pow2(process[6].m()) / sH;
416    double cosThe = (process[3].p() - process[4].p()) 
417      * (process[7].p() - process[6].p()) / (sH * sqrtpos(1. - mr));
418    double wt     = 1. + pow2(cosThe) + mr * (1. - pow2(cosThe));
419    return 0.5 * wt;
420  } 
421
422  // For top decay hand over to standard routine.
423  if (idMother == 6) 
424    return weightTopDecay( process, iResBeg, iResEnd);
425
426  // Else done.
427  return 1.; 
428
429}
430
431//==========================================================================
432
433} // end namespace Pythia8
Note: See TracBrowser for help on using the repository browser.