StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ProcessContainer.cc
1 // ProcessContainer.cc is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 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 the
7 // ProcessContainer and SetupContainers classes.
8 
9 #include "ProcessContainer.h"
10 
11 // Internal headers for special processes.
12 #include "SigmaCompositeness.h"
13 #include "SigmaEW.h"
14 #include "SigmaExtraDim.h"
15 #include "SigmaGeneric.h"
16 #include "SigmaHiggs.h"
17 #include "SigmaLeftRightSym.h"
18 #include "SigmaLeptoquark.h"
19 #include "SigmaNewGaugeBosons.h"
20 #include "SigmaOnia.h"
21 #include "SigmaQCD.h"
22 #include "SigmaSUSY.h"
23 
24 namespace Pythia8 {
25 
26 //==========================================================================
27 
28 // ProcessContainer class.
29 // Information allowing the generation of a specific process.
30 
31 //--------------------------------------------------------------------------
32 
33 // Constants: could be changed here if desired, but normally should not.
34 // These are of technical nature, as described for each.
35 
36 // Number of event tries to check maximization finding reliability.
37 const int ProcessContainer::N12SAMPLE = 100;
38 
39 // Ditto, but increased for 2 -> 3 processes.
40 const int ProcessContainer::N3SAMPLE = 1000;
41 
42 //--------------------------------------------------------------------------
43 
44 // Initialize phase space and counters.
45 // Argument isFirst distinguishes two hard processes in same event.
46 
47 bool ProcessContainer::init(bool isFirst, Info* infoPtrIn,
48  Settings& settings, ParticleData* particleDataPtrIn, Rndm* rndmPtrIn,
49  BeamParticle* beamAPtr, BeamParticle* beamBPtr, Couplings* couplingsPtr,
50  SigmaTotal* sigmaTotPtr, ResonanceDecays* resDecaysPtrIn,
51  SusyLesHouches* slhaPtr, UserHooks* userHooksPtr) {
52 
53  // Extract info about current process from SigmaProcess object.
54  isLHA = sigmaProcessPtr->isLHA();
55  isMinBias = sigmaProcessPtr->isMinBias();
56  isResolved = sigmaProcessPtr->isResolved();
57  isDiffA = sigmaProcessPtr->isDiffA();
58  isDiffB = sigmaProcessPtr->isDiffB();
59  isQCD3body = sigmaProcessPtr->isQCD3body();
60  int nFin = sigmaProcessPtr->nFinal();
61  lhaStrat = (isLHA) ? lhaUpPtr->strategy() : 0;
62  lhaStratAbs = abs(lhaStrat);
63  allowNegSig = sigmaProcessPtr->allowNegativeSigma();
64 
65  // Flag for maximum violation handling.
66  increaseMaximum = settings.flag("PhaseSpace:increaseMaximum");
67 
68  // Pick and create phase space generator. Send pointers where required.
69  if (isLHA) phaseSpacePtr = new PhaseSpaceLHA();
70  else if (isMinBias) phaseSpacePtr = new PhaseSpace2to2minbias();
71  else if (!isResolved && !isDiffA && !isDiffB )
72  phaseSpacePtr = new PhaseSpace2to2elastic();
73  else if (!isResolved) phaseSpacePtr = new PhaseSpace2to2diffractive(
74  isDiffA, isDiffB);
75  else if (nFin == 1) phaseSpacePtr = new PhaseSpace2to1tauy();
76  else if (nFin == 2) phaseSpacePtr = new PhaseSpace2to2tauyz();
77  else if (isQCD3body) phaseSpacePtr = new PhaseSpace2to3yyycyl();
78  else phaseSpacePtr = new PhaseSpace2to3tauycyl();
79 
80  // Store pointers and perform simple initialization.
81  infoPtr = infoPtrIn;
82  particleDataPtr = particleDataPtrIn;
83  rndmPtr = rndmPtrIn;
84  resDecaysPtr = resDecaysPtrIn;
85  if (isLHA) {
86  sigmaProcessPtr->setLHAPtr(lhaUpPtr);
87  phaseSpacePtr->setLHAPtr(lhaUpPtr);
88  }
89  sigmaProcessPtr->init(infoPtr, &settings, particleDataPtr, rndmPtr,
90  beamAPtr, beamBPtr, couplingsPtr, sigmaTotPtr, slhaPtr);
91  phaseSpacePtr->init( isFirst, sigmaProcessPtr, infoPtr, &settings,
92  particleDataPtr, rndmPtr, beamAPtr, beamBPtr, couplingsPtr, sigmaTotPtr,
93  userHooksPtr);
94 
95  // Reset cross section statistics.
96  nTry = 0;
97  nSel = 0;
98  nAcc = 0;
99  nTryStat = 0;
100  sigmaMx = 0.;
101  sigmaSum = 0.;
102  sigma2Sum = 0.;
103  sigmaNeg = 0.;
104  sigmaAvg = 0.;
105  sigmaFin = 0.;
106  deltaFin = 0.;
107  wtAccSum = 0.;
108 
109  // Initialize process and allowed incoming partons.
110  sigmaProcessPtr->initProc();
111  if (!sigmaProcessPtr->initFlux()) return false;
112 
113  // Find maximum of differential cross section * phasespace.
114  bool physical = phaseSpacePtr->setupSampling();
115  sigmaMx = phaseSpacePtr->sigmaMax();
116  double sigmaHalfWay = sigmaMx;
117 
118  // Separate signed maximum needed for LHA with negative weight.
119  sigmaSgn = phaseSpacePtr->sigmaSumSigned();
120 
121  // Check maximum by a few events, and extrapolate a further increase.
122  if (physical & !isLHA) {
123  int nSample = (nFin < 3) ? N12SAMPLE : N3SAMPLE;
124  for (int iSample = 0; iSample < nSample; ++iSample) {
125  bool test = false;
126  while (!test) test = phaseSpacePtr->trialKin(false);
127  if (iSample == nSample/2) sigmaHalfWay = phaseSpacePtr->sigmaMax();
128  }
129  sigmaMx = pow2(phaseSpacePtr->sigmaMax()) / sigmaHalfWay;
130  phaseSpacePtr->setSigmaMax(sigmaMx);
131  }
132 
133  // Done.
134  return physical;
135 }
136 
137 //--------------------------------------------------------------------------
138 
139 // Generate a trial event; selected or not.
140 
141 bool ProcessContainer::trialProcess() {
142 
143  // Loop over tries only occurs for Les Houches strategy = +-2.
144  for (int iTry = 0; ; ++iTry) {
145 
146  // Generate a trial phase space point, if meaningful.
147  if (sigmaMx == 0.) return false;
148  infoPtr->setEndOfFile(false);
149  bool repeatSame = (iTry > 0);
150  bool physical = phaseSpacePtr->trialKin(true, repeatSame);
151 
152  // Possibly fail, e.g. if at end of Les Houches file, else cross section.
153  if (isLHA && !physical) infoPtr->setEndOfFile(true);
154  else ++nTry;
155  if (!physical) return false;
156  double sigmaNow = phaseSpacePtr->sigmaNow();
157 
158  // Tell if this event comes with weight from cross section.
159  double sigmaWeight = 1.;
160  if (!isLHA && !increaseMaximum && sigmaNow > sigmaMx)
161  sigmaWeight = sigmaNow / sigmaMx;
162  if ( lhaStrat < 0 && sigmaNow < 0.) sigmaWeight = -1.;
163  if ( lhaStratAbs == 4) sigmaWeight = sigmaNow;
164 
165  // Also compensating weight from biased phase-space selection.
166  double biasWeight = phaseSpacePtr->biasSelectionWeight();
167  weightNow = sigmaWeight * biasWeight;
168  infoPtr->setWeight( weightNow, lhaStrat);
169 
170  // Check that not negative cross section when not allowed.
171  if (!allowNegSig) {
172  if (sigmaNow < sigmaNeg) {
173  infoPtr->errorMsg("Warning in ProcessContainer::trialProcess: neg"
174  "ative cross section set 0", "for " + sigmaProcessPtr->name() );
175  sigmaNeg = sigmaNow;
176  }
177  if (sigmaNow < 0.) sigmaNow = 0.;
178  }
179 
180  // Cross section of process may come with a weight. Update sum.
181  double sigmaAdd = sigmaNow * biasWeight;
182  if (lhaStratAbs == 2 || lhaStratAbs == 3) sigmaAdd = sigmaSgn;
183  sigmaSum += sigmaAdd;
184  sigma2Sum += pow2(sigmaAdd);
185 
186  // Check if maximum violated.
187  newSigmaMx = phaseSpacePtr->newSigmaMax();
188  if (newSigmaMx) sigmaMx = phaseSpacePtr->sigmaMax();
189 
190  // Select or reject trial point.
191  bool select = true;
192  if (lhaStratAbs < 3) select
193  = (newSigmaMx || rndmPtr->flat() * abs(sigmaMx) < abs(sigmaNow));
194  if (select) ++nSel;
195  if (select || lhaStratAbs != 2) return select;
196  }
197 
198 }
199 
200 
201 //--------------------------------------------------------------------------
202 
203 // Give the hard subprocess.
204 
205 bool ProcessContainer::constructProcess( Event& process, bool isHardest) {
206 
207  // Construct flavour and colours for selected event.
208  if (isResolved && !isMinBias) sigmaProcessPtr->pickInState();
209  sigmaProcessPtr->setIdColAcol();
210 
211  // Construct kinematics from selected phase space point.
212  if (!phaseSpacePtr->finalKin()) return false;
213  int nFin = sigmaProcessPtr->nFinal();
214 
215  // Basic info on process.
216  if (isHardest) infoPtr->setType( name(), code(), nFin, isMinBias,
217  isResolved, isDiffA, isDiffB, isLHA);
218 
219  // Let hard process record begin with the event as a whole and
220  // the two incoming beam particles.
221  process.append( 90, -11, 0, 0, 0, 0, 0, 0,
222  Vec4(0., 0., 0., infoPtr->eCM()), infoPtr->eCM(), 0. );
223  process.append( infoPtr->idA(), -12, 0, 0, 0, 0, 0, 0,
224  Vec4(0., 0., infoPtr->pzA(), infoPtr->eA()), infoPtr->mA(), 0. );
225  process.append( infoPtr->idB(), -12, 0, 0, 0, 0, 0, 0,
226  Vec4(0., 0., infoPtr->pzB(), infoPtr->eB()), infoPtr->mB(), 0. );
227 
228  // For minbias process no interaction selected so far, so done.
229  if (isMinBias) return true;
230 
231  // Entries 3 and 4, now to be added, come from 1 and 2.
232  process[1].daughter1(3);
233  process[2].daughter1(4);
234  double scale = 0.;
235 
236  // Insert the subprocess partons - resolved processes.
237  int idRes = sigmaProcessPtr->idSChannel();
238  if (isResolved && !isLHA) {
239 
240  // NOAM: Mothers and daughters without/with intermediate state.
241  int m_M1 = 3;
242  int m_M2 = 4;
243  int m_D1 = 5;
244  int m_D2 = 4 + nFin;
245  if (idRes != 0) {
246  m_M1 = 5;
247  m_M2 = 0;
248  m_D1 = 5;
249  m_D2 = 0;
250  }
251 
252  // Find scale from which to begin MPI/ISR/FSR evolution.
253  scale = sqrt(Q2Fac());
254  process.scale( scale );
255 
256  // Loop over incoming and outgoing partons.
257  int colOffset = process.lastColTag();
258  for (int i = 1; i <= 2 + nFin; ++i) {
259 
260  // Read out particle info from SigmaProcess object.
261  int id = sigmaProcessPtr->id(i);
262  int status = (i <= 2) ? -21 : 23;
263  int mother1 = (i <= 2) ? i : m_M1 ;
264  int mother2 = (i <= 2) ? 0 : m_M2 ;
265  int daughter1 = (i <= 2) ? m_D1 : 0;
266  int daughter2 = (i <= 2) ? m_D2 : 0;
267  int col = sigmaProcessPtr->col(i);
268  if (col > 0) col += colOffset;
269  else if (col < 0) col -= colOffset;
270  int acol = sigmaProcessPtr->acol(i);
271  if (acol > 0) acol += colOffset;
272  else if (acol < 0) acol -= colOffset;
273 
274  // Append to process record.
275  int iNow = process.append( id, status, mother1, mother2,
276  daughter1, daughter2, col, acol, phaseSpacePtr->p(i),
277  phaseSpacePtr->m(i), scale);
278 
279  // NOAM: If there is an intermediate state, insert the it in
280  // the process record after the two incoming particles.
281  if (i == 2 && idRes != 0) {
282 
283  // Sign of intermediate state: go by charge.
284  if (particleDataPtr->hasAnti(idRes)
285  && process[3].chargeType() + process[4].chargeType() < 0)
286  idRes *= -1;
287 
288  // The colour configuration of the intermediate state has to be
289  // resolved separately.
290  col = 0;
291  acol = 0;
292  int m_col1 = sigmaProcessPtr->col(1);
293  int m_acol1 = sigmaProcessPtr->acol(1);
294  int m_col2 = sigmaProcessPtr->col(2);
295  int m_acol2 = sigmaProcessPtr->acol(2);
296  if (m_col1 == m_acol2 && m_col2 != m_acol1) {
297  col = m_col2;
298  acol = m_acol1;
299  } else if (m_col2 == m_acol1 && m_col1 != m_acol2) {
300  col = m_col1;
301  acol = m_acol2;
302  }
303  if ( col > 0) col += colOffset;
304  else if ( col < 0) col -= colOffset;
305  if (acol > 0) acol += colOffset;
306  else if (acol < 0) acol -= colOffset;
307 
308  // Insert the intermediate state into the event record.
309  Vec4 pIntMed = phaseSpacePtr->p(1) + phaseSpacePtr->p(2);
310  process.append( idRes, -22, 3, 4, 6, 5 + nFin, col, acol,
311  pIntMed, pIntMed.mCalc(), scale);
312  }
313 
314  // Pick lifetime where relevant, else not.
315  if (process[iNow].tau0() > 0.) process[iNow].tau(
316  process[iNow].tau0() * rndmPtr->exp() );
317  }
318  }
319 
320  // Insert the outgoing particles - unresolved processes.
321  else if (!isLHA) {
322  int id3 = sigmaProcessPtr->id(3);
323  int status3 = (id3 == process[1].id()) ? 14 : 15;
324  process.append( id3, status3, 1, 0, 0, 0, 0, 0,
325  phaseSpacePtr->p(3), phaseSpacePtr->m(3));
326  int id4 = sigmaProcessPtr->id(4);
327  int status4 = (id4 == process[2].id()) ? 14 : 15;
328  process.append( id4, status4, 2, 0, 0, 0, 0, 0,
329  phaseSpacePtr->p(4), phaseSpacePtr->m(4));
330  }
331 
332  // Insert the outgoing particles - Les Houches Accord processes.
333  else {
334 
335  // Since LHA partons may be out of order, determine correct one.
336  // (Recall that zeroth particle is empty.)
337  vector<int> newPos;
338  newPos.reserve(lhaUpPtr->sizePart());
339  newPos.push_back(0);
340  for (int iNew = 0; iNew < lhaUpPtr->sizePart(); ++iNew) {
341  // For iNew == 0 look for the two incoming partons, then for
342  // partons having them as mothers, and so on layer by layer.
343  for (int i = 1; i < lhaUpPtr->sizePart(); ++i)
344  if (lhaUpPtr->mother1(i) == newPos[iNew]) newPos.push_back(i);
345  if (int(newPos.size()) <= iNew) break;
346  }
347 
348  // Find scale from which to begin MPI/ISR/FSR evolution.
349  scale = lhaUpPtr->scale();
350  double scalePr = (scale < 0.) ? sqrt(Q2Fac()) : scale;
351  process.scale( scalePr);
352 
353  // Copy over info from LHA event to process, in proper order.
354  for (int i = 1; i < lhaUpPtr->sizePart(); ++i) {
355  int iOld = newPos[i];
356  int id = lhaUpPtr->id(iOld);
357 
358  // Translate from LHA status codes.
359  int lhaStatus = lhaUpPtr->status(iOld);
360  int status = -21;
361  if (lhaStatus == 2 || lhaStatus == 3) status = -22;
362  if (lhaStatus == 1) status = 23;
363 
364  // Find where mothers have been moved by reordering.
365  int mother1Old = lhaUpPtr->mother1(iOld);
366  int mother2Old = lhaUpPtr->mother2(iOld);
367  int mother1 = 0;
368  int mother2 = 0;
369  for (int im = 1; im < i; ++im) {
370  if (mother1Old == newPos[im]) mother1 = im + 2;
371  if (mother2Old == newPos[im]) mother2 = im + 2;
372  }
373  if (i <= 2) mother1 = i;
374 
375  // Ensure that second mother = 0 except for bona fide carbon copies.
376  if (mother1 > 0 && mother2 == mother1) {
377  int sister1 = process[mother1].daughter1();
378  int sister2 = process[mother1].daughter2();
379  if (sister2 != sister1 && sister2 != 0) mother2 = 0;
380  }
381 
382  // Find daughters and where they have been moved by reordering.
383  // (Values shifted two steps to account for inserted beams.)
384  int daughter1 = 0;
385  int daughter2 = 0;
386  for (int im = i + 1; im < lhaUpPtr->sizePart(); ++im) {
387  if (lhaUpPtr->mother1(newPos[im]) == iOld
388  || lhaUpPtr->mother2(newPos[im]) == iOld) {
389  if (daughter1 == 0 || im + 2 < daughter1) daughter1 = im + 2;
390  if (daughter2 == 0 || im + 2 > daughter2) daughter2 = im + 2;
391  }
392  }
393  // For 2 -> 1 hard scatterings reset second daughter to 0.
394  if (daughter2 == daughter1) daughter2 = 0;
395 
396  // Colour trivial, except reset irrelevant colour indices.
397  int colType = particleDataPtr->colType(id);
398  int col1 = (colType == 1 || colType == 2 || abs(colType) == 3)
399  ? lhaUpPtr->col1(iOld) : 0;
400  int col2 = (colType == -1 || colType == 2 || abs(colType) == 3)
401  ? lhaUpPtr->col2(iOld) : 0;
402 
403  // Momentum trivial.
404  double px = lhaUpPtr->px(iOld);
405  double py = lhaUpPtr->py(iOld);
406  double pz = lhaUpPtr->pz(iOld);
407  double e = lhaUpPtr->e(iOld);
408  double m = lhaUpPtr->m(iOld);
409 
410  // Polarization
411  double pol = lhaUpPtr->spin(iOld);
412 
413  // For resonance decay products use resonance mass as scale.
414  double scaleNow = scalePr;
415  if (mother1 > 4) scaleNow = process[mother1].m();
416 
417  // Store Les Houches Accord partons.
418  int iNow = process.append( id, status, mother1, mother2, daughter1,
419  daughter2, col1, col2, Vec4(px, py, pz, e), m, scaleNow, pol);
420 
421  // Check if need to store lifetime.
422  double tau = lhaUpPtr->tau(iOld);
423  if (tau > 0.) process[iNow].tau(tau);
424  }
425  }
426 
427  // Loop through decay chains and set secondary vertices when needed.
428  for (int i = 3; i < process.size(); ++i) {
429  int iMother = process[i].mother1();
430 
431  // If sister to already assigned vertex then assign same.
432  if ( process[i - 1].mother1() == iMother && process[i - 1].hasVertex() )
433  process[i].vProd( process[i - 1].vProd() );
434 
435  // Else if mother already has vertex and/or lifetime then assign.
436  else if ( process[iMother].hasVertex() || process[iMother].tau() > 0.)
437  process[i].vProd( process[iMother].vDec() );
438  }
439 
440  // Further info on process. Reset quantities that may or may not be known.
441  int id1Now = process[3].id();
442  int id2Now = process[4].id();
443  double pdf1 = 0.;
444  double pdf2 = 0.;
445  double tHat = 0.;
446  double uHat = 0.;
447  double pTHatL = 0.;
448  double m3 = 0.;
449  double m4 = 0.;
450  double theta = 0.;
451  double phi = 0.;
452  double Q2FacNow, alphaEM, alphaS, Q2Ren, x1Now, x2Now, sHat;
453 
454  // Internally generated and stored information.
455  if (!isLHA) {
456  pdf1 = sigmaProcessPtr->pdf1();
457  pdf2 = sigmaProcessPtr->pdf2();
458  Q2FacNow = sigmaProcessPtr->Q2Fac();
459  alphaEM = sigmaProcessPtr->alphaEMRen();
460  alphaS = sigmaProcessPtr->alphaSRen();
461  Q2Ren = sigmaProcessPtr->Q2Ren();
462  x1Now = phaseSpacePtr->x1();
463  x2Now = phaseSpacePtr->x2();
464  sHat = phaseSpacePtr->sHat();
465  tHat = phaseSpacePtr->tHat();
466  uHat = phaseSpacePtr->uHat();
467  pTHatL = phaseSpacePtr->pTHat();
468  m3 = phaseSpacePtr->m(3);
469  m4 = phaseSpacePtr->m(4);
470  theta = phaseSpacePtr->thetaHat();
471  phi = phaseSpacePtr->phiHat();
472  }
473 
474  // Les Houches Accord process partly available, partly to be constructed.
475  else {
476  Q2FacNow = (scale < 0.) ? sigmaProcessPtr->Q2Fac() : pow2(scale);
477  alphaEM = lhaUpPtr->alphaQED();
478  if (alphaEM < 0.001) alphaEM = sigmaProcessPtr->alphaEMRen();
479  alphaS = lhaUpPtr->alphaQCD();
480  if (alphaS < 0.001) alphaS = sigmaProcessPtr->alphaSRen();
481  Q2Ren = (scale < 0.) ? sigmaProcessPtr->Q2Ren() : pow2(scale);
482  x1Now = 2. * process[3].e() / infoPtr->eCM();
483  x2Now = 2. * process[4].e() / infoPtr->eCM();
484  Vec4 pSum = process[3].p() + process[4].p();
485  sHat = pSum * pSum;
486 
487  // Read info on parton densities if provided.
488  if (lhaUpPtr->pdfIsSet()) {
489  pdf1 = lhaUpPtr->xpdf1();
490  pdf2 = lhaUpPtr->xpdf2();
491  Q2FacNow = pow2(lhaUpPtr->scalePDF());
492  x1Now = lhaUpPtr->x1();
493  x2Now = lhaUpPtr->x2();
494  }
495 
496  // Reconstruct kinematics of 2 -> 2 processes from momenta.
497  if (nFin == 2) {
498  Vec4 pDifT = process[3].p() - process[5].p();
499  tHat = pDifT * pDifT;
500  Vec4 pDifU = process[3].p() - process[6].p();
501  uHat = pDifU * pDifU;
502  pTHatL = process[5].pT();
503  m3 = process[5].m();
504  m4 = process[6].m();
505  Vec4 p5 = process[5].p();
506  p5.bstback(pSum);
507  theta = p5.theta();
508  phi = process[5].phi();
509  }
510  }
511 
512  // Store information.
513  if (isHardest) {
514  infoPtr->setPDFalpha( id1Now, id2Now, pdf1, pdf2, Q2FacNow,
515  alphaEM, alphaS, Q2Ren);
516  infoPtr->setKin( x1Now, x2Now, sHat, tHat, uHat, pTHatL, m3, m4,
517  theta, phi);
518  }
519  infoPtr->setTypeMPI( code(), pTHatL);
520 
521  // For Les Houches event store subprocess classification.
522  if (isLHA) {
523  int codeSub = lhaUpPtr->idProcess();
524  ostringstream nameSub;
525  nameSub << "user process " << codeSub;
526  infoPtr->setSubType( nameSub.str(), codeSub, nFin);
527  }
528 
529  // Done.
530  return true;
531 
532 }
533 
534 //--------------------------------------------------------------------------
535 
536 // Handle resonance decays.
537 
538 bool ProcessContainer::decayResonances( Event& process) {
539 
540  // Save current event-record size.
541  process.saveSize();
542  bool physical = true;
543  bool newFlavours = false;
544 
545  // Do sequential chain of uncorrelated isotropic decays.
546  do {
547  physical = resDecaysPtr->next( process);
548  if (!physical) return false;
549 
550  // Check whether flavours should be correlated.
551  // (Currently only relevant for f fbar -> gamma*/Z0 gamma*/Z0.)
552  newFlavours = ( sigmaProcessPtr->weightDecayFlav( process)
553  < rndmPtr->flat() );
554 
555  // Reset the decay chains if have to redo.
556  if (newFlavours) {
557  process.restoreSize();
558  for (int i = 5; i < process.size(); ++i) process[i].statusPos();
559  }
560 
561  // Loop back where required to generate new decays with new flavours.
562  } while (newFlavours);
563 
564  // Correct to nonisotropic decays.
565  phaseSpacePtr->decayKinematics( process);
566 
567  // Done.
568  return true;
569 
570 }
571 
572 //--------------------------------------------------------------------------
573 
574 // Reset event generation statistics; but NOT maximum of cross section.
575 
576 void ProcessContainer::reset() {
577 
578  nTry = 0;
579  nSel = 0;
580  nAcc = 0;
581  nTryStat = 0;
582  sigmaSum = 0.;
583  sigma2Sum = 0.;
584  sigmaNeg = 0.;
585  sigmaAvg = 0.;
586  sigmaFin = 0.;
587  deltaFin = 0.;
588  wtAccSum = 0.;
589 
590 }
591 
592 //--------------------------------------------------------------------------
593 
594 // Estimate integrated cross section and its uncertainty.
595 
596 void ProcessContainer::sigmaDelta() {
597 
598  // Initial values. No analysis meaningful unless accepted events.
599  nTryStat = nTry;
600  sigmaAvg = 0.;
601  sigmaFin = 0.;
602  deltaFin = 0.;
603  if (nAcc == 0) return;
604 
605  // Average value. No error analysis unless at least two events.
606  double nTryInv = 1. / nTry;
607  double nSelInv = 1. / nSel;
608  double nAccInv = 1. / nAcc;
609  sigmaAvg = sigmaSum * nTryInv;
610  double fracAcc = nAcc * nSelInv;
611  sigmaFin = sigmaAvg * fracAcc;
612  deltaFin = sigmaFin;
613  if (nAcc == 1) return;
614 
615  // Estimated error. Quadratic sum of cross section term and
616  // binomial from accept/reject step.
617  double delta2Sig = (sigma2Sum * nTryInv - pow2(sigmaAvg)) * nTryInv
618  / pow2(sigmaAvg);
619  double delta2Veto = (nSel - nAcc) * nAccInv * nSelInv;
620  double delta2Sum = delta2Sig + delta2Veto;
621  deltaFin = sqrtpos(delta2Sum) * sigmaFin;
622 
623 }
624 
625 //==========================================================================
626 
627 // SetupContainer class.
628 // Turns list of user-desired processes into a vector of containers.
629 
630 //--------------------------------------------------------------------------
631 
632 // Main routine to initialize list of processes.
633 
634 bool SetupContainers::init(vector<ProcessContainer*>& containerPtrs,
635  Settings& settings, ParticleData* particleDataPtr, Couplings* couplings) {
636 
637  // Reset process list, if filled in previous subrun.
638  if (containerPtrs.size() > 0) {
639  for (int i = 0; i < int(containerPtrs.size()); ++i)
640  delete containerPtrs[i];
641  containerPtrs.clear();
642  }
643  SigmaProcess* sigmaPtr;
644 
645  // Set up requested objects for soft QCD processes.
646  bool softQCD = settings.flag("SoftQCD:all");
647  if (softQCD || settings.flag("SoftQCD:minBias")) {
648  sigmaPtr = new Sigma0minBias;
649  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
650  }
651  if (softQCD || settings.flag("SoftQCD:elastic")) {
652  sigmaPtr = new Sigma0AB2AB;
653  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
654  }
655  if (softQCD || settings.flag("SoftQCD:singleDiffractive")) {
656  sigmaPtr = new Sigma0AB2XB;
657  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
658  sigmaPtr = new Sigma0AB2AX;
659  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
660  }
661  if (softQCD || settings.flag("SoftQCD:doubleDiffractive")) {
662  sigmaPtr = new Sigma0AB2XX;
663  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
664  }
665 
666  // Set up requested objects for hard QCD processes.
667  bool hardQCD = settings.flag("HardQCD:all");
668  if (hardQCD || settings.flag("HardQCD:gg2gg")) {
669  sigmaPtr = new Sigma2gg2gg;
670  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
671  }
672  if (hardQCD || settings.flag("HardQCD:gg2qqbar")) {
673  sigmaPtr = new Sigma2gg2qqbar;
674  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
675  }
676  if (hardQCD || settings.flag("HardQCD:qg2qg")) {
677  sigmaPtr = new Sigma2qg2qg;
678  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
679  }
680  if (hardQCD || settings.flag("HardQCD:qq2qq")) {
681  sigmaPtr = new Sigma2qq2qq;
682  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
683  }
684  if (hardQCD || settings.flag("HardQCD:qqbar2gg")) {
685  sigmaPtr = new Sigma2qqbar2gg;
686  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
687  }
688  if (hardQCD || settings.flag("HardQCD:qqbar2qqbarNew")) {
689  sigmaPtr = new Sigma2qqbar2qqbarNew;
690  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
691  }
692 
693  // Set up requested objects for c cbar and b bbar, also hard QCD.
694  if (hardQCD || settings.flag("HardQCD:gg2ccbar")) {
695  sigmaPtr = new Sigma2gg2QQbar(4, 121);
696  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
697  }
698  if (hardQCD || settings.flag("HardQCD:qqbar2ccbar")) {
699  sigmaPtr = new Sigma2qqbar2QQbar(4, 122);
700  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
701  }
702  if (hardQCD || settings.flag("HardQCD:gg2bbbar")) {
703  sigmaPtr = new Sigma2gg2QQbar(5, 123);
704  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
705  }
706  if (hardQCD || settings.flag("HardQCD:qqbar2bbbar")) {
707  sigmaPtr = new Sigma2qqbar2QQbar(5, 124);
708  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
709  }
710 
711  // Set up requested objects for hard QCD 2 -> 3 processes.
712  bool hardQCD3parton = settings.flag("HardQCD:3parton");
713  if (hardQCD3parton || settings.flag("HardQCD:gg2ggg")) {
714  sigmaPtr = new Sigma3gg2ggg;
715  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
716  }
717  if (hardQCD3parton || settings.flag("HardQCD:qqbar2ggg")) {
718  sigmaPtr = new Sigma3qqbar2ggg;
719  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
720  }
721  if (hardQCD3parton || settings.flag("HardQCD:qg2qgg")) {
722  sigmaPtr = new Sigma3qg2qgg;
723  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
724  }
725  if (hardQCD3parton || settings.flag("HardQCD:qq2qqgDiff")) {
726  sigmaPtr = new Sigma3qq2qqgDiff;
727  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
728  }
729  if (hardQCD3parton || settings.flag("HardQCD:qq2qqgSame")) {
730  sigmaPtr = new Sigma3qq2qqgSame;
731  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
732  }
733  if (hardQCD3parton || settings.flag("HardQCD:qqbar2qqbargDiff")) {
734  sigmaPtr = new Sigma3qqbar2qqbargDiff;
735  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
736  }
737  if (hardQCD3parton || settings.flag("HardQCD:qqbar2qqbargSame")) {
738  sigmaPtr = new Sigma3qqbar2qqbargSame;
739  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
740  }
741  if (hardQCD3parton || settings.flag("HardQCD:gg2qqbarg")) {
742  sigmaPtr = new Sigma3gg2qqbarg;
743  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
744  }
745  if (hardQCD3parton || settings.flag("HardQCD:qg2qqqbarDiff")) {
746  sigmaPtr = new Sigma3qg2qqqbarDiff;
747  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
748  }
749  if (hardQCD3parton || settings.flag("HardQCD:qg2qqqbarSame")) {
750  sigmaPtr = new Sigma3qg2qqqbarSame;
751  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
752  }
753 
754  // Set up requested objects for prompt photon processes.
755  bool promptPhotons = settings.flag("PromptPhoton:all");
756  if (promptPhotons
757  || settings.flag("PromptPhoton:qg2qgamma")) {
758  sigmaPtr = new Sigma2qg2qgamma;
759  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
760  }
761  if (promptPhotons
762  || settings.flag("PromptPhoton:qqbar2ggamma")) {
763  sigmaPtr = new Sigma2qqbar2ggamma;
764  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
765  }
766  if (promptPhotons
767  || settings.flag("PromptPhoton:gg2ggamma")) {
768  sigmaPtr = new Sigma2gg2ggamma;
769  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
770  }
771  if (promptPhotons
772  || settings.flag("PromptPhoton:ffbar2gammagamma")) {
773  sigmaPtr = new Sigma2ffbar2gammagamma;
774  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
775  }
776  if (promptPhotons
777  || settings.flag("PromptPhoton:gg2gammagamma")) {
778  sigmaPtr = new Sigma2gg2gammagamma;
779  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
780  }
781 
782  // Set up requested objects for weak gauge boson t-channel exchange.
783  bool weakBosonExchanges = settings.flag("WeakBosonExchange:all");
784  if (weakBosonExchanges
785  || settings.flag("WeakBosonExchange:ff2ff(t:gmZ)")) {
786  sigmaPtr = new Sigma2ff2fftgmZ;
787  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
788  }
789  if (weakBosonExchanges
790  || settings.flag("WeakBosonExchange:ff2ff(t:W)")) {
791  sigmaPtr = new Sigma2ff2fftW;
792  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
793  }
794 
795  // Set up requested objects for weak gauge boson processes.
796  bool weakSingleBosons = settings.flag("WeakSingleBoson:all");
797  if (weakSingleBosons
798  || settings.flag("WeakSingleBoson:ffbar2gmZ")) {
799  sigmaPtr = new Sigma1ffbar2gmZ;
800  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
801  }
802  if (weakSingleBosons
803  || settings.flag("WeakSingleBoson:ffbar2W")) {
804  sigmaPtr = new Sigma1ffbar2W;
805  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
806  }
807 
808  // Set up requested object for s-channel gamma exchange.
809  // Subset of gamma*/Z0 above, intended for multiparton interactions.
810  if (settings.flag("WeakSingleBoson:ffbar2ffbar(s:gm)")) {
811  sigmaPtr = new Sigma2ffbar2ffbarsgm;
812  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
813  }
814 
815  // Set up requested objects for weak gauge boson pair processes.
816  bool weakDoubleBosons = settings.flag("WeakDoubleBoson:all");
817  if (weakDoubleBosons
818  || settings.flag("WeakDoubleBoson:ffbar2gmZgmZ")) {
819  sigmaPtr = new Sigma2ffbar2gmZgmZ;
820  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
821  }
822  if (weakDoubleBosons
823  || settings.flag("WeakDoubleBoson:ffbar2ZW")) {
824  sigmaPtr = new Sigma2ffbar2ZW;
825  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
826  }
827  if (weakDoubleBosons
828  || settings.flag("WeakDoubleBoson:ffbar2WW")) {
829  sigmaPtr = new Sigma2ffbar2WW;
830  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
831  }
832 
833  // Set up requested objects for weak gauge boson + parton processes.
834  bool weakBosonAndPartons = settings.flag("WeakBosonAndParton:all");
835  if (weakBosonAndPartons
836  || settings.flag("WeakBosonAndParton:qqbar2gmZg")) {
837  sigmaPtr = new Sigma2qqbar2gmZg;
838  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
839  }
840  if (weakBosonAndPartons
841  || settings.flag("WeakBosonAndParton:qg2gmZq")) {
842  sigmaPtr = new Sigma2qg2gmZq;
843  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
844  }
845  if (weakBosonAndPartons
846  || settings.flag("WeakBosonAndParton:ffbar2gmZgm")) {
847  sigmaPtr = new Sigma2ffbar2gmZgm;
848  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
849  }
850  if (weakBosonAndPartons
851  || settings.flag("WeakBosonAndParton:fgm2gmZf")) {
852  sigmaPtr = new Sigma2fgm2gmZf;
853  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
854  }
855  if (weakBosonAndPartons
856  || settings.flag("WeakBosonAndParton:qqbar2Wg")) {
857  sigmaPtr = new Sigma2qqbar2Wg;
858  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
859  }
860  if (weakBosonAndPartons
861  || settings.flag("WeakBosonAndParton:qg2Wq")) {
862  sigmaPtr = new Sigma2qg2Wq;
863  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
864  }
865  if (weakBosonAndPartons
866  || settings.flag("WeakBosonAndParton:ffbar2Wgm")) {
867  sigmaPtr = new Sigma2ffbar2Wgm;
868  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
869  }
870  if (weakBosonAndPartons
871  || settings.flag("WeakBosonAndParton:fgm2Wf")) {
872  sigmaPtr = new Sigma2fgm2Wf;
873  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
874  }
875 
876  // Set up requested objects for photon collision processes.
877  bool photonCollisions = settings.flag("PhotonCollision:all");
878  if (photonCollisions || settings.flag("PhotonCollision:gmgm2qqbar")) {
879  sigmaPtr = new Sigma2gmgm2ffbar(1, 261);
880  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
881  }
882  if (photonCollisions || settings.flag("PhotonCollision:gmgm2ccbar")) {
883  sigmaPtr = new Sigma2gmgm2ffbar(4, 262);
884  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
885  }
886  if (photonCollisions || settings.flag("PhotonCollision:gmgm2bbbar")) {
887  sigmaPtr = new Sigma2gmgm2ffbar(5, 263);
888  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
889  }
890  if (photonCollisions || settings.flag("PhotonCollision:gmgm2ee")) {
891  sigmaPtr = new Sigma2gmgm2ffbar(11, 264);
892  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
893  }
894  if (photonCollisions || settings.flag("PhotonCollision:gmgm2mumu")) {
895  sigmaPtr = new Sigma2gmgm2ffbar(13, 265);
896  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
897  }
898  if (photonCollisions || settings.flag("PhotonCollision:gmgm2tautau")) {
899  sigmaPtr = new Sigma2gmgm2ffbar(15, 266);
900  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
901  }
902 
903  // Set up requested objects for charmonium production
904  bool charmoniums = settings.flag("Charmonium:all");
905  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3S1(1)]g")) {
906  sigmaPtr = new Sigma2gg2QQbar3S11g(4, 401);
907  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
908  }
909  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P0(1)]g")) {
910  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 0, 402);
911  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
912  }
913  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P1(1)]g")) {
914  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 1, 403);
915  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
916  }
917  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P2(1)]g")) {
918  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 2, 404);
919  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
920  }
921  if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P0(1)]q")) {
922  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 0, 405);
923  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
924  }
925  if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P1(1)]q")) {
926  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 1, 406);
927  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
928  }
929  if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P2(1)]q")) {
930  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 2, 407);
931  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
932  }
933  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P0(1)]g")) {
934  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 0, 408);
935  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
936  }
937  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P1(1)]g")) {
938  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 1, 409);
939  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
940  }
941  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P2(1)]g")) {
942  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 2, 410);
943  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
944  }
945  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3S1(8)]g")) {
946  sigmaPtr = new Sigma2gg2QQbarX8g(4, 0, 411);
947  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
948  }
949  if (charmoniums || settings.flag("Charmonium:gg2QQbar[1S0(8)]g")) {
950  sigmaPtr = new Sigma2gg2QQbarX8g(4, 1, 412);
951  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
952  }
953  if (charmoniums || settings.flag("Charmonium:gg2QQbar[3PJ(8)]g")) {
954  sigmaPtr = new Sigma2gg2QQbarX8g(4, 2, 413);
955  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
956  }
957  if (charmoniums || settings.flag("Charmonium:qg2QQbar[3S1(8)]q")) {
958  sigmaPtr = new Sigma2qg2QQbarX8q(4, 0, 414);
959  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
960  }
961  if (charmoniums || settings.flag("Charmonium:qg2QQbar[1S0(8)]q")) {
962  sigmaPtr = new Sigma2qg2QQbarX8q(4, 1, 415);
963  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
964  }
965  if (charmoniums || settings.flag("Charmonium:qg2QQbar[3PJ(8)]q")) {
966  sigmaPtr = new Sigma2qg2QQbarX8q(4, 2, 416);
967  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
968  }
969  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3S1(8)]g")) {
970  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 0, 417);
971  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
972  }
973  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[1S0(8)]g")) {
974  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 1, 418);
975  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
976  }
977  if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3PJ(8)]g")) {
978  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 2, 419);
979  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
980  }
981 
982  // Set up requested objects for bottomonium production
983  bool bottomoniums = settings.flag("Bottomonium:all");
984  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3S1(1)]g")) {
985  sigmaPtr = new Sigma2gg2QQbar3S11g(5, 501);
986  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
987  }
988  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P0(1)]g")) {
989  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 0, 502);
990  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
991  }
992  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P1(1)]g")) {
993  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 1, 503);
994  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
995  }
996  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P2(1)]g")) {
997  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 2, 504);
998  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
999  }
1000  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P0(1)]q")) {
1001  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 0, 505);
1002  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1003  }
1004  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P1(1)]q")) {
1005  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 1, 506);
1006  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1007  }
1008  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P2(1)]q")) {
1009  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 2, 507);
1010  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1011  }
1012  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P0(1)]g")) {
1013  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 0, 508);
1014  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1015  }
1016  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P1(1)]g")) {
1017  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 1, 509);
1018  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1019  }
1020  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P2(1)]g")) {
1021  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 2, 510);
1022  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1023  }
1024  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3S1(8)]g")) {
1025  sigmaPtr = new Sigma2gg2QQbarX8g(5, 0, 511);
1026  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1027  }
1028  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[1S0(8)]g")) {
1029  sigmaPtr = new Sigma2gg2QQbarX8g(5, 1, 512);
1030  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1031  }
1032  if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3PJ(8)]g")) {
1033  sigmaPtr = new Sigma2gg2QQbarX8g(5, 2, 513);
1034  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1035  }
1036  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3S1(8)]q")) {
1037  sigmaPtr = new Sigma2qg2QQbarX8q(5, 0, 514);
1038  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1039  }
1040  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[1S0(8)]q")) {
1041  sigmaPtr = new Sigma2qg2QQbarX8q(5, 1, 515);
1042  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1043  }
1044  if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3PJ(8)]q")) {
1045  sigmaPtr = new Sigma2qg2QQbarX8q(5, 2, 516);
1046  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1047  }
1048  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3S1(8)]g")) {
1049  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 0, 517);
1050  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1051  }
1052  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[1S0(8)]g")) {
1053  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 1, 518);
1054  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1055  }
1056  if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3PJ(8)]g")) {
1057  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 2, 519);
1058  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1059  }
1060 
1061  // Set up requested objects for top production
1062  bool tops = settings.flag("Top:all");
1063  if (tops || settings.flag("Top:gg2ttbar")) {
1064  sigmaPtr = new Sigma2gg2QQbar(6, 601);
1065  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1066  }
1067  if (tops || settings.flag("Top:qqbar2ttbar")) {
1068  sigmaPtr = new Sigma2qqbar2QQbar(6, 602);
1069  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1070  }
1071  if (tops || settings.flag("Top:qq2tq(t:W)")) {
1072  sigmaPtr = new Sigma2qq2QqtW(6, 603);
1073  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1074  }
1075  if (tops || settings.flag("Top:ffbar2ttbar(s:gmZ)")) {
1076  sigmaPtr = new Sigma2ffbar2FFbarsgmZ(6, 604);
1077  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1078  }
1079  if (tops || settings.flag("Top:ffbar2tqbar(s:W)")) {
1080  sigmaPtr = new Sigma2ffbar2FfbarsW(6, 0, 605);
1081  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1082  }
1083  if (tops || settings.flag("Top:gmgm2ttbar")) {
1084  sigmaPtr = new Sigma2gmgm2ffbar(6, 606);
1085  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1086  }
1087 
1088  // Set up requested objects for fourth-generation b' production
1089  bool bPrimes = settings.flag("FourthBottom:all");
1090  if (bPrimes || settings.flag("FourthBottom:gg2bPrimebPrimebar")) {
1091  sigmaPtr = new Sigma2gg2QQbar(7, 801);
1092  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1093  }
1094  if (bPrimes || settings.flag("FourthBottom:qqbar2bPrimebPrimebar")) {
1095  sigmaPtr = new Sigma2qqbar2QQbar(7, 802);
1096  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1097  }
1098  if (bPrimes || settings.flag("FourthBottom:qq2bPrimeq(t:W)")) {
1099  sigmaPtr = new Sigma2qq2QqtW(7, 803);
1100  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1101  }
1102  if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimebPrimebar(s:gmZ)")) {
1103  sigmaPtr = new Sigma2ffbar2FFbarsgmZ(7, 804);
1104  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1105  }
1106  if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimeqbar(s:W)")) {
1107  sigmaPtr = new Sigma2ffbar2FfbarsW(7, 0, 805);
1108  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1109  }
1110  if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimetbar(s:W)")) {
1111  sigmaPtr = new Sigma2ffbar2FfbarsW(7, 6, 806);
1112  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1113  }
1114 
1115  // Set up requested objects for fourth-generation t' production
1116  bool tPrimes = settings.flag("FourthTop:all");
1117  if (tPrimes || settings.flag("FourthTop:gg2tPrimetPrimebar")) {
1118  sigmaPtr = new Sigma2gg2QQbar(8, 821);
1119  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1120  }
1121  if (tPrimes || settings.flag("FourthTop:qqbar2tPrimetPrimebar")) {
1122  sigmaPtr = new Sigma2qqbar2QQbar(8, 822);
1123  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1124  }
1125  if (tPrimes || settings.flag("FourthTop:qq2tPrimeq(t:W)")) {
1126  sigmaPtr = new Sigma2qq2QqtW(8, 823);
1127  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1128  }
1129  if (tPrimes || settings.flag("FourthTop:ffbar2tPrimetPrimebar(s:gmZ)")) {
1130  sigmaPtr = new Sigma2ffbar2FFbarsgmZ(8, 824);
1131  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1132  }
1133  if (tPrimes || settings.flag("FourthTop:ffbar2tPrimeqbar(s:W)")) {
1134  sigmaPtr = new Sigma2ffbar2FfbarsW(8, 0, 825);
1135  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1136  }
1137 
1138  // Set up requested objects for two different fourth-generation fermions.
1139  if (bPrimes || tPrimes
1140  || settings.flag("FourthPair:ffbar2tPrimebPrimebar(s:W)")) {
1141  sigmaPtr = new Sigma2ffbar2FfbarsW(8, 7, 841);
1142  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1143  }
1144  if (settings.flag("FourthPair:ffbar2tauPrimenuPrimebar(s:W)")) {
1145  sigmaPtr = new Sigma2ffbar2FfbarsW(17, 18, 842);
1146  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1147  }
1148 
1149  // Flag for global choice between SM and BSM Higgses.
1150  bool useBSMHiggses = settings.flag("Higgs:useBSM");
1151 
1152  // Set up requested objects for Standard-Model Higgs production.
1153  if (!useBSMHiggses) {
1154  bool HiggsesSM = settings.flag("HiggsSM:all");
1155  if (HiggsesSM || settings.flag("HiggsSM:ffbar2H")) {
1156  sigmaPtr = new Sigma1ffbar2H(0);
1157  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1158  }
1159  if (HiggsesSM || settings.flag("HiggsSM:gg2H")) {
1160  sigmaPtr = new Sigma1gg2H(0);
1161  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1162  }
1163  if (HiggsesSM || settings.flag("HiggsSM:gmgm2H")) {
1164  sigmaPtr = new Sigma1gmgm2H(0);
1165  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1166  }
1167  if (HiggsesSM || settings.flag("HiggsSM:ffbar2HZ")) {
1168  sigmaPtr = new Sigma2ffbar2HZ(0);
1169  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1170  }
1171  if (HiggsesSM || settings.flag("HiggsSM:ffbar2HW")) {
1172  sigmaPtr = new Sigma2ffbar2HW(0);
1173  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1174  }
1175  if (HiggsesSM || settings.flag("HiggsSM:ff2Hff(t:ZZ)")) {
1176  sigmaPtr = new Sigma3ff2HfftZZ(0);
1177  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1178  }
1179  if (HiggsesSM || settings.flag("HiggsSM:ff2Hff(t:WW)")) {
1180  sigmaPtr = new Sigma3ff2HfftWW(0);
1181  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1182  }
1183  if (HiggsesSM || settings.flag("HiggsSM:gg2Httbar")) {
1184  sigmaPtr = new Sigma3gg2HQQbar(6,0);
1185  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1186  }
1187  if (HiggsesSM || settings.flag("HiggsSM:qqbar2Httbar")) {
1188  sigmaPtr = new Sigma3qqbar2HQQbar(6,0);
1189  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1190  }
1191 
1192  // Further Standard-Model Higgs processes, not included in "all".
1193  if (settings.flag("HiggsSM:qg2Hq")) {
1194  sigmaPtr = new Sigma2qg2Hq(4,0);
1195  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1196  sigmaPtr = new Sigma2qg2Hq(5,0);
1197  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1198  }
1199  if (settings.flag("HiggsSM:gg2Hbbbar")) {
1200  sigmaPtr = new Sigma3gg2HQQbar(5,0);
1201  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1202  }
1203  if (settings.flag("HiggsSM:qqbar2Hbbbar")) {
1204  sigmaPtr = new Sigma3qqbar2HQQbar(5,0);
1205  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1206  }
1207  if (settings.flag("HiggsSM:gg2Hg(l:t)")) {
1208  sigmaPtr = new Sigma2gg2Hglt(0);
1209  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1210  }
1211  if (settings.flag("HiggsSM:qg2Hq(l:t)")) {
1212  sigmaPtr = new Sigma2qg2Hqlt(0);
1213  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1214  }
1215  if (settings.flag("HiggsSM:qqbar2Hg(l:t)")) {
1216  sigmaPtr = new Sigma2qqbar2Hglt(0);
1217  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1218  }
1219  }
1220 
1221  // Common switch for the group of Higgs production BSM.
1222  if (useBSMHiggses) {
1223  bool HiggsesBSM = settings.flag("HiggsBSM:all");
1224 
1225  // Set up requested objects for BSM H1 production.
1226  bool HiggsesH1 = settings.flag("HiggsBSM:allH1");
1227  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ffbar2H1")) {
1228  sigmaPtr = new Sigma1ffbar2H(1);
1229  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1230  }
1231  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gg2H1")) {
1232  sigmaPtr = new Sigma1gg2H(1);
1233  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1234  }
1235  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gmgm2H1")) {
1236  sigmaPtr = new Sigma1gmgm2H(1);
1237  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1238  }
1239  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ffbar2H1Z")) {
1240  sigmaPtr = new Sigma2ffbar2HZ(1);
1241  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1242  }
1243  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ffbar2H1W")) {
1244  sigmaPtr = new Sigma2ffbar2HW(1);
1245  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1246  }
1247  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ff2H1ff(t:ZZ)")) {
1248  sigmaPtr = new Sigma3ff2HfftZZ(1);
1249  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1250  }
1251  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ff2H1ff(t:WW)")) {
1252  sigmaPtr = new Sigma3ff2HfftWW(1);
1253  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1254  }
1255  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gg2H1ttbar")) {
1256  sigmaPtr = new Sigma3gg2HQQbar(6,1);
1257  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1258  }
1259  if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:qqbar2H1ttbar")) {
1260  sigmaPtr = new Sigma3qqbar2HQQbar(6,1);
1261  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1262  }
1263 
1264  // Further BSM H1 processes, not included in "all".
1265  if (settings.flag("HiggsBSM:qg2H1q")) {
1266  sigmaPtr = new Sigma2qg2Hq(4,1);
1267  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1268  sigmaPtr = new Sigma2qg2Hq(5,1);
1269  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1270  }
1271  if (settings.flag("HiggsBSM:gg2H1bbbar")) {
1272  sigmaPtr = new Sigma3gg2HQQbar(5,1);
1273  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1274  }
1275  if (settings.flag("HiggsBSM:qqbar2H1bbbar")) {
1276  sigmaPtr = new Sigma3qqbar2HQQbar(5,1);
1277  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1278  }
1279  if (settings.flag("HiggsBSM:gg2H1g(l:t)")) {
1280  sigmaPtr = new Sigma2gg2Hglt(1);
1281  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1282  }
1283  if (settings.flag("HiggsBSM:qg2H1q(l:t)")) {
1284  sigmaPtr = new Sigma2qg2Hqlt(1);
1285  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1286  }
1287  if (settings.flag("HiggsBSM:qqbar2H1g(l:t)")) {
1288  sigmaPtr = new Sigma2qqbar2Hglt(1);
1289  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1290  }
1291 
1292  // Set up requested objects for BSM H2 production.
1293  bool HiggsesH2 = settings.flag("HiggsBSM:allH2");
1294  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ffbar2H2")) {
1295  sigmaPtr = new Sigma1ffbar2H(2);
1296  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1297  }
1298  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gg2H2")) {
1299  sigmaPtr = new Sigma1gg2H(2);
1300  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1301  }
1302  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gmgm2H2")) {
1303  sigmaPtr = new Sigma1gmgm2H(2);
1304  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1305  }
1306  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ffbar2H2Z")) {
1307  sigmaPtr = new Sigma2ffbar2HZ(2);
1308  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1309  }
1310  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ffbar2H2W")) {
1311  sigmaPtr = new Sigma2ffbar2HW(2);
1312  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1313  }
1314  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ff2H2ff(t:ZZ)")) {
1315  sigmaPtr = new Sigma3ff2HfftZZ(2);
1316  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1317  }
1318  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ff2H2ff(t:WW)")) {
1319  sigmaPtr = new Sigma3ff2HfftWW(2);
1320  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1321  }
1322  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gg2H2ttbar")) {
1323  sigmaPtr = new Sigma3gg2HQQbar(6,2);
1324  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1325  }
1326  if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:qqbar2H2ttbar")) {
1327  sigmaPtr = new Sigma3qqbar2HQQbar(6,2);
1328  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1329  }
1330 
1331  // Further BSM H2 processes, not included in "all".
1332  if (settings.flag("HiggsBSM:qg2H2q")) {
1333  sigmaPtr = new Sigma2qg2Hq(4,2);
1334  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1335  sigmaPtr = new Sigma2qg2Hq(5,2);
1336  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1337  }
1338  if (settings.flag("HiggsBSM:gg2H2bbbar")) {
1339  sigmaPtr = new Sigma3gg2HQQbar(5,2);
1340  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1341  }
1342  if (settings.flag("HiggsBSM:qqbar2H2bbbar")) {
1343  sigmaPtr = new Sigma3qqbar2HQQbar(5,2);
1344  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1345  }
1346  if (settings.flag("HiggsBSM:gg2H2g(l:t)")) {
1347  sigmaPtr = new Sigma2gg2Hglt(2);
1348  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1349  }
1350  if (settings.flag("HiggsBSM:qg2H2q(l:t)")) {
1351  sigmaPtr = new Sigma2qg2Hqlt(2);
1352  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1353  }
1354  if (settings.flag("HiggsBSM:qqbar2H2g(l:t)")) {
1355  sigmaPtr = new Sigma2qqbar2Hglt(2);
1356  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1357  }
1358 
1359  // Set up requested objects for BSM A3 production.
1360  bool HiggsesA3 = settings.flag("HiggsBSM:allA3");
1361  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ffbar2A3")) {
1362  sigmaPtr = new Sigma1ffbar2H(3);
1363  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1364  }
1365  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gg2A3")) {
1366  sigmaPtr = new Sigma1gg2H(3);
1367  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1368  }
1369  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gmgm2A3")) {
1370  sigmaPtr = new Sigma1gmgm2H(3);
1371  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1372  }
1373  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ffbar2A3Z")) {
1374  sigmaPtr = new Sigma2ffbar2HZ(3);
1375  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1376  }
1377  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ffbar2A3W")) {
1378  sigmaPtr = new Sigma2ffbar2HW(3);
1379  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1380  }
1381  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ff2A3ff(t:ZZ)")) {
1382  sigmaPtr = new Sigma3ff2HfftZZ(3);
1383  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1384  }
1385  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ff2A3ff(t:WW)")) {
1386  sigmaPtr = new Sigma3ff2HfftWW(3);
1387  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1388  }
1389  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gg2A3ttbar")) {
1390  sigmaPtr = new Sigma3gg2HQQbar(6,3);
1391  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1392  }
1393  if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:qqbar2A3ttbar")) {
1394  sigmaPtr = new Sigma3qqbar2HQQbar(6,3);
1395  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1396  }
1397 
1398  // Further BSM A3 processes, not included in "all".
1399  if (settings.flag("HiggsBSM:qg2A3q")) {
1400  sigmaPtr = new Sigma2qg2Hq(4,3);
1401  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1402  sigmaPtr = new Sigma2qg2Hq(5,3);
1403  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1404  }
1405  if (settings.flag("HiggsBSM:gg2A3bbbar")) {
1406  sigmaPtr = new Sigma3gg2HQQbar(5,3);
1407  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1408  }
1409  if (settings.flag("HiggsBSM:qqbar2A3bbbar")) {
1410  sigmaPtr = new Sigma3qqbar2HQQbar(5,3);
1411  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1412  }
1413  if (settings.flag("HiggsBSM:gg2A3g(l:t)")) {
1414  sigmaPtr = new Sigma2gg2Hglt(3);
1415  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1416  }
1417  if (settings.flag("HiggsBSM:qg2A3q(l:t)")) {
1418  sigmaPtr = new Sigma2qg2Hqlt(3);
1419  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1420  }
1421  if (settings.flag("HiggsBSM:qqbar2A3g(l:t)")) {
1422  sigmaPtr = new Sigma2qqbar2Hglt(3);
1423  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1424  }
1425 
1426  // Set up requested objects for Charged Higgs production
1427  bool HiggsesChg = settings.flag("HiggsBSM:allH+-");
1428  if (HiggsesBSM || HiggsesChg || settings.flag("HiggsBSM:ffbar2H+-")) {
1429  sigmaPtr = new Sigma1ffbar2Hchg;
1430  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1431  }
1432  if (HiggsesBSM || HiggsesChg || settings.flag("HiggsBSM:bg2H+-t")) {
1433  sigmaPtr = new Sigma2qg2Hchgq(6, 1062, "b g -> H+- t");
1434  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1435  }
1436 
1437  // Set up requested objects for Higgs pair-production
1438  bool HiggsesPairs = settings.flag("HiggsBSM:allHpair");
1439  if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2A3H1")) {
1440  sigmaPtr = new Sigma2ffbar2A3H12(1);
1441  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1442  }
1443  if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2A3H2")) {
1444  sigmaPtr = new Sigma2ffbar2A3H12(2);
1445  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1446  }
1447  if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+-H1")) {
1448  sigmaPtr = new Sigma2ffbar2HchgH12(1);
1449  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1450  }
1451  if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+-H2")) {
1452  sigmaPtr = new Sigma2ffbar2HchgH12(2);
1453  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1454  }
1455  if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+H-")) {
1456  sigmaPtr = new Sigma2ffbar2HposHneg();
1457  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1458  }
1459  }
1460 
1461  // Set up requested objects for SUSY pair processes.
1462  if(couplings->isSUSY){
1463  CoupSUSY* coupSUSY = (CoupSUSY *) couplings;
1464 
1465  bool SUSYs = settings.flag("SUSY:all");
1466  bool nmssm = settings.flag("SLHA:NMSSM");
1467 
1468  // Preselected SUSY codes
1469  int codeA = max( abs(settings.mode("SUSY:idA")),
1470  abs(settings.mode("SUSY:idB")));
1471  int codeB = min( abs(settings.mode("SUSY:idA")),
1472  abs(settings.mode("SUSY:idB")));
1473 
1474  // MSSM: 4 neutralinos
1475  int nNeut = 4;
1476  if (nmssm) nNeut = 5;
1477 
1478  // Gluino-gluino
1479  if (SUSYs || settings.flag("SUSY:gg2gluinogluino")) {
1480  // Skip if specific codes not asked for
1481  if (codeA == 0 || codeA == 1000021) {
1482  if (codeB == 0 || codeB == 1000021 ) {
1483  sigmaPtr = new Sigma2gg2gluinogluino();
1484  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1485  }
1486  }
1487  }
1488  if (SUSYs || settings.flag("SUSY:qqbar2gluinogluino")) {
1489  // Skip if specific codes not asked for
1490  if (codeA == 0 || codeA == 1000021) {
1491  if (codeB == 0 || codeB == 1000021 ) {
1492  sigmaPtr = new Sigma2qqbar2gluinogluino();
1493  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1494  }
1495  }
1496  }
1497 
1498  // Gluino-squark
1499  if (SUSYs || settings.flag("SUSY:qg2squarkgluino")) {
1500  int iproc = 1202;
1501  for (int idx = 1; idx <= 6; ++idx) {
1502  for (int iso = 1; iso <= 2; ++iso) {
1503  iproc++;
1504  int id3 = iso + ((idx <= 3)
1505  ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1506  int id4 = 1000021;
1507  // Skip if specific codes not asked for
1508  if (codeA != 0 && codeA != abs(id3) && codeA != abs(id4)) continue;
1509  if (codeB != 0 && ( codeA != max(abs(id3),abs(id4))
1510  || codeB != min(abs(id3),abs(id4)) ) ) continue;
1511  sigmaPtr = new Sigma2qg2squarkgluino(id3,iproc);
1512  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1513  }
1514  }
1515  }
1516 
1517  // Squark-antisquark (gg initiated)
1518  if (SUSYs || settings.flag("SUSY:gg2squarkantisquark")) {
1519  int iproc = 1214;
1520  for (int idx = 1; idx <= 6; ++idx) {
1521  for (int iso = 1; iso <= 2; ++iso) {
1522  iproc++;
1523  int id = iso + ((idx <= 3)
1524  ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1525  // Skip if specific codes not asked for
1526  if (codeA != 0 && codeA != abs(id)) continue;
1527  if (codeA != 0 && codeB != 0 && codeB != abs(id)) continue;
1528  sigmaPtr = new Sigma2gg2squarkantisquark(id,iproc);
1529  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1530  }
1531  }
1532  }
1533 
1534  // Squark-antisquark (qqbar initiated)
1535  if (SUSYs || settings.flag("SUSY:qqbar2squarkantisquark")) {
1536  int iproc = 1230;
1537  for (int idx = 1; idx <= 6; ++idx) {
1538  for (int iso = 1; iso <= 2; ++iso) {
1539  for (int jso = iso; jso >= 1; --jso) {
1540  for (int jdx = 1; jdx <= 6; ++jdx) {
1541  if (iso == jso && jdx < idx) continue;
1542  int id1 = iso + ((idx <= 3) ? 1000000+2*(idx-1)
1543  : 2000000+2*(idx-4));
1544  int id2 = jso + ((jdx <= 3) ? 1000000+2*(jdx-1)
1545  : 2000000+2*(jdx-4));
1546  // Update process number counter (for ~q~q, +2 if not self-conj)
1547  //if (iproc == 1302) iproc=1310;
1548  iproc++;
1549  if (iso == jso && id1 != id2) iproc++;
1550  // Skip if specific codes not asked for
1551  if (codeA != 0 && codeA != abs(id1)
1552  && codeA != abs(id2)) continue;
1553  if (codeB != 0 && ( codeA != max(abs(id1),abs(id2))
1554  || codeB != min(abs(id1),abs(id2)) ) ) continue;
1555  if (iso == jso && id1 != id2) {
1556  sigmaPtr = new Sigma2qqbar2squarkantisquark(id1,-id2,iproc-1);
1557  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1558  sigmaPtr = new Sigma2qqbar2squarkantisquark(id2,-id1,iproc);
1559  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1560  } else {
1561  sigmaPtr = new Sigma2qqbar2squarkantisquark(id1,-id2,iproc);
1562  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1563  }
1564  }
1565  }
1566  }
1567  }
1568  }
1569 
1570  // Squark-squark
1571  if (SUSYs || settings.flag("SUSY:qq2squarksquark")) {
1572  int iproc = 1350;
1573  for (int idx = 1; idx <= 6; ++idx) {
1574  for (int iso = 1; iso <= 2; ++iso) {
1575  for (int jso = iso; jso >= 1; jso--) {
1576  for (int jdx = 1; jdx <= 6; ++jdx) {
1577  if (iso == jso && jdx < idx) continue;
1578  iproc++;
1579  int id1 = iso + ((idx <= 3)
1580  ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1581  int id2 = jso + ((jdx <= 3)
1582  ? 1000000+2*(jdx-1) : 2000000+2*(jdx-4));
1583  // Skip if specific codes not asked for
1584  if (codeA != 0 && codeA != abs(id1) && codeA != abs(id2))
1585  continue;
1586  if (codeB != 0 && ( codeA != max(abs(id1),abs(id2))
1587  || codeB != min(abs(id1),abs(id2)) ) ) continue;
1588  sigmaPtr = new Sigma2qq2squarksquark(id1,id2,iproc);
1589  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1590  }
1591  }
1592  }
1593  }
1594  }
1595 
1596  // Neutralino + squark
1597  if (SUSYs || settings.flag("SUSY:qg2chi0squark")) {
1598  int iproc = 1430;
1599  for (int iNeut= 1; iNeut <= nNeut; iNeut++) {
1600  for (int idx = 1; idx <= 6; idx++) {
1601  bool isUp = false;
1602  for (int iso = 1; iso <= 2; iso++) {
1603  if (iso == 2) isUp = true;
1604  iproc++;
1605  int id3 = coupSUSY->idNeut(iNeut);
1606  int id4 = iso + ((idx <= 3)
1607  ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1608  // Skip if specific codes not asked for
1609  if (codeA != 0 && codeA != abs(id3) && codeA != abs(id4)) continue;
1610  if (codeB != 0 && codeB != min(abs(id3),abs(id4)) ) continue;
1611  if (codeA != 0 && codeA == codeB) continue;
1612  sigmaPtr = new Sigma2qg2chi0squark(iNeut,idx,isUp,iproc);
1613  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1614  }
1615  }
1616  }
1617  }
1618 
1619  // Chargino + squark
1620  if (SUSYs || settings.flag("SUSY:qg2chi+-squark")) {
1621  int iproc = 1490;
1622  for (int iChar = 1; iChar <= 2; iChar++) {
1623  for (int idx = 1; idx <= 6; idx++) {
1624  bool isUp = false;
1625  for (int iso = 1; iso <= 2; iso++) {
1626  if (iso == 2) isUp = true;
1627  iproc++;
1628  int id3 = coupSUSY->idChar(iChar);
1629  int id4 = iso + ((idx <= 3)
1630  ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1631  // Skip if specific codes not asked for
1632  if (codeA != 0 && codeA != abs(id3) && codeA != abs(id4)) continue;
1633  if (codeB != 0 && codeB != min(abs(id3),abs(id4)) ) continue;
1634  if (codeA != 0 && codeA == codeB) continue;
1635  sigmaPtr = new Sigma2qg2charsquark(iChar,idx,isUp,iproc);
1636  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1637  }
1638  }
1639  }
1640  }
1641 
1642  // Neutralino pairs
1643  if (SUSYs || settings.flag("SUSY:qqbar2chi0chi0")) {
1644  int iproc = 1550;
1645  for (int iNeut2 = 1; iNeut2 <= nNeut; iNeut2++) {
1646  for (int iNeut1 = 1; iNeut1 <= iNeut2; iNeut1++) {
1647  iproc++;
1648  if (codeA != 0 && codeA != abs(coupSUSY->idNeut(iNeut1)) &&
1649  codeA != abs(coupSUSY->idNeut(iNeut2))) continue;
1650  if (codeB != 0 && (codeA != max(abs(coupSUSY->idNeut(iNeut1)),
1651  abs(coupSUSY->idNeut(iNeut2)))
1652  || codeB != min(abs(coupSUSY->idNeut(iNeut1)),
1653  abs(coupSUSY->idNeut(iNeut2)))) ) continue;
1654  sigmaPtr = new Sigma2qqbar2chi0chi0(iNeut1, iNeut2,iproc);
1655  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1656  }
1657  }
1658  }
1659 
1660  // Neutralino-Chargino
1661  if (SUSYs || settings.flag("SUSY:qqbar2chi+-chi0")) {
1662  int iproc = 1570;
1663  for (int iNeut = 1; iNeut <= nNeut; iNeut++) {
1664  for (int iChar = 1; iChar <= 2; ++iChar) {
1665  iproc += 2;
1666  if (codeA != 0 && codeA != coupSUSY->idNeut(iNeut)
1667  && codeA != coupSUSY->idChar(iChar)) continue;
1668  if (codeB != 0
1669  && ( codeA != max(coupSUSY->idNeut(iNeut),coupSUSY->idChar(iChar))
1670  || codeB != min(coupSUSY->idNeut(iNeut),coupSUSY->idChar(iChar))
1671  ) ) continue;
1672  sigmaPtr = new Sigma2qqbar2charchi0( iChar, iNeut, iproc-1);
1673  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1674  sigmaPtr = new Sigma2qqbar2charchi0(-iChar, iNeut, iproc);
1675  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1676  }
1677  }
1678  }
1679 
1680  // Chargino-Chargino
1681  if (SUSYs || settings.flag("SUSY:qqbar2chi+chi-")) {
1682  int iproc = 1590;
1683  for (int i = 1; i <= 2; ++i) {
1684  for (int j = 1; j <= 2; ++j) {
1685  iproc++;
1686  if (codeA != 0 && codeA != abs(coupSUSY->idChar(i))
1687  && codeA != abs(coupSUSY->idChar(j))) continue;
1688  if (codeB != 0
1689  && ( codeA != max(coupSUSY->idChar(i),coupSUSY->idChar(j))
1690  || codeB != min(coupSUSY->idChar(i),coupSUSY->idChar(j)) ) )
1691  continue;
1692  sigmaPtr = new Sigma2qqbar2charchar( i,-j, iproc);
1693  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1694  }
1695  }
1696  }
1697 
1698  // RPV squark production
1699  if(SUSYs || settings.flag("SUSY:qq2antisquark")) {
1700  for (int idx = 1; idx <= 6; ++idx) {
1701  for (int iso = 1; iso <= 2; ++iso) {
1702  int id1 = iso + ((idx <= 3) ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
1703  if(codeA !=0 && codeA != abs(id1)) continue;
1704  sigmaPtr = new Sigma1qq2antisquark(id1);
1705  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1706  }
1707  }
1708  }
1709 
1710  }
1711 
1712  // Set up requested objects for New-Gauge-Boson processes.
1713  if (settings.flag("NewGaugeBoson:ffbar2gmZZprime")) {
1714  sigmaPtr = new Sigma1ffbar2gmZZprime();
1715  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1716  }
1717  if (settings.flag("NewGaugeBoson:ffbar2Wprime")) {
1718  sigmaPtr = new Sigma1ffbar2Wprime();
1719  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1720  }
1721  if (settings.flag("NewGaugeBoson:ffbar2R0")) {
1722  sigmaPtr = new Sigma1ffbar2Rhorizontal();
1723  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1724  }
1725 
1726  // Set up requested objects for Left-Right-Symmetry processes.
1727  bool leftrights = settings.flag("LeftRightSymmmetry:all");
1728  if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2ZR")) {
1729  sigmaPtr = new Sigma1ffbar2ZRight();
1730  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1731  }
1732  if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2WR")) {
1733  sigmaPtr = new Sigma1ffbar2WRight();
1734  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1735  }
1736  if (leftrights || settings.flag("LeftRightSymmmetry:ll2HL")) {
1737  sigmaPtr = new Sigma1ll2Hchgchg(1);
1738  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1739  }
1740  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLe")) {
1741  sigmaPtr = new Sigma2lgm2Hchgchgl(1, 11);
1742  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1743  }
1744  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLmu")) {
1745  sigmaPtr = new Sigma2lgm2Hchgchgl(1, 13);
1746  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1747  }
1748  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLtau")) {
1749  sigmaPtr = new Sigma2lgm2Hchgchgl(1, 15);
1750  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1751  }
1752  if (leftrights || settings.flag("LeftRightSymmmetry:ff2HLff")) {
1753  sigmaPtr = new Sigma3ff2HchgchgfftWW(1);
1754  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1755  }
1756  if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2HLHL")) {
1757  sigmaPtr = new Sigma2ffbar2HchgchgHchgchg(1);
1758  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1759  }
1760  if (leftrights || settings.flag("LeftRightSymmmetry:ll2HR")) {
1761  sigmaPtr = new Sigma1ll2Hchgchg(2);
1762  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1763  }
1764  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRe")) {
1765  sigmaPtr = new Sigma2lgm2Hchgchgl(2, 11);
1766  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1767  }
1768  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRmu")) {
1769  sigmaPtr = new Sigma2lgm2Hchgchgl(2, 13);
1770  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1771  }
1772  if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRtau")) {
1773  sigmaPtr = new Sigma2lgm2Hchgchgl(2, 15);
1774  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1775  }
1776  if (leftrights || settings.flag("LeftRightSymmmetry:ff2HRff")) {
1777  sigmaPtr = new Sigma3ff2HchgchgfftWW(2);
1778  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1779  }
1780  if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2HRHR")) {
1781  sigmaPtr = new Sigma2ffbar2HchgchgHchgchg(2);
1782  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1783  }
1784 
1785  // Set up requested objects for leptoquark LQ processes.
1786  bool leptoquarks = settings.flag("LeptoQuark:all");
1787  if (leptoquarks || settings.flag("LeptoQuark:ql2LQ")) {
1788  sigmaPtr = new Sigma1ql2LeptoQuark;
1789  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1790  }
1791  if (leptoquarks || settings.flag("LeptoQuark:qg2LQl")) {
1792  sigmaPtr = new Sigma2qg2LeptoQuarkl;
1793  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1794  }
1795  if (leptoquarks || settings.flag("LeptoQuark:gg2LQLQbar")) {
1796  sigmaPtr = new Sigma2gg2LQLQbar;
1797  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1798  }
1799  if (leptoquarks || settings.flag("LeptoQuark:qqbar2LQLQbar")) {
1800  sigmaPtr = new Sigma2qqbar2LQLQbar;
1801  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1802  }
1803 
1804  // Set up requested objects for excited-fermion processes.
1805  bool excitedfermions = settings.flag("ExcitedFermion:all");
1806  if (excitedfermions || settings.flag("ExcitedFermion:dg2dStar")) {
1807  sigmaPtr = new Sigma1qg2qStar(1);
1808  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1809  }
1810  if (excitedfermions || settings.flag("ExcitedFermion:ug2uStar")) {
1811  sigmaPtr = new Sigma1qg2qStar(2);
1812  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1813  }
1814  if (excitedfermions || settings.flag("ExcitedFermion:sg2sStar")) {
1815  sigmaPtr = new Sigma1qg2qStar(3);
1816  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1817  }
1818  if (excitedfermions || settings.flag("ExcitedFermion:cg2cStar")) {
1819  sigmaPtr = new Sigma1qg2qStar(4);
1820  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1821  }
1822  if (excitedfermions || settings.flag("ExcitedFermion:bg2bStar")) {
1823  sigmaPtr = new Sigma1qg2qStar(5);
1824  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1825  }
1826  if (excitedfermions || settings.flag("ExcitedFermion:egm2eStar")) {
1827  sigmaPtr = new Sigma1lgm2lStar(11);
1828  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1829  }
1830  if (excitedfermions || settings.flag("ExcitedFermion:mugm2muStar")) {
1831  sigmaPtr = new Sigma1lgm2lStar(13);
1832  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1833  }
1834  if (excitedfermions || settings.flag("ExcitedFermion:taugm2tauStar")) {
1835  sigmaPtr = new Sigma1lgm2lStar(15);
1836  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1837  }
1838  if (excitedfermions || settings.flag("ExcitedFermion:qq2dStarq")) {
1839  sigmaPtr = new Sigma2qq2qStarq(1);
1840  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1841  }
1842  if (excitedfermions || settings.flag("ExcitedFermion:qq2uStarq")) {
1843  sigmaPtr = new Sigma2qq2qStarq(2);
1844  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1845  }
1846  if (excitedfermions || settings.flag("ExcitedFermion:qq2sStarq")) {
1847  sigmaPtr = new Sigma2qq2qStarq(3);
1848  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1849  }
1850  if (excitedfermions || settings.flag("ExcitedFermion:qq2cStarq")) {
1851  sigmaPtr = new Sigma2qq2qStarq(4);
1852  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1853  }
1854  if (excitedfermions || settings.flag("ExcitedFermion:qq2bStarq")) {
1855  sigmaPtr = new Sigma2qq2qStarq(5);
1856  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1857  }
1858  if (excitedfermions || settings.flag("ExcitedFermion:qqbar2eStare")) {
1859  sigmaPtr = new Sigma2qqbar2lStarlbar(11);
1860  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1861  }
1862  if (excitedfermions || settings.flag("ExcitedFermion:qqbar2nueStarnue")) {
1863  sigmaPtr = new Sigma2qqbar2lStarlbar(12);
1864  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1865  }
1866  if (excitedfermions || settings.flag("ExcitedFermion:qqbar2muStarmu")) {
1867  sigmaPtr = new Sigma2qqbar2lStarlbar(13);
1868  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1869  }
1870  if (excitedfermions || settings.flag("ExcitedFermion:qqbar2numuStarnumu")) {
1871  sigmaPtr = new Sigma2qqbar2lStarlbar(14);
1872  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1873  }
1874  if (excitedfermions || settings.flag("ExcitedFermion:qqbar2tauStartau")) {
1875  sigmaPtr = new Sigma2qqbar2lStarlbar(15);
1876  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1877  }
1878  if (excitedfermions
1879  || settings.flag("ExcitedFermion:qqbar2nutauStarnutau")) {
1880  sigmaPtr = new Sigma2qqbar2lStarlbar(16);
1881  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1882  }
1883 
1884  // Set up requested objects for contact interaction processes.
1885  if (settings.flag("ContactInteractions:QCqq2qq")) {
1886  sigmaPtr = new Sigma2QCqq2qq();
1887  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1888  }
1889  if (settings.flag("ContactInteractions:QCqqbar2qqbar")) {
1890  sigmaPtr = new Sigma2QCqqbar2qqbar();
1891  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1892  }
1893  if (settings.flag("ContactInteractions:QCffbar2eebar")) {
1894  sigmaPtr = new Sigma2QCffbar2llbar(11, 4003);
1895  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1896  }
1897  if (settings.flag("ContactInteractions:QCffbar2mumubar")) {
1898  sigmaPtr = new Sigma2QCffbar2llbar(13, 4004);
1899  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1900  }
1901  if (settings.flag("ContactInteractions:QCffbar2tautaubar")) {
1902  sigmaPtr = new Sigma2QCffbar2llbar(15, 4005);
1903  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1904  }
1905 
1906  // Set spin of particles in the Hidden Valley scenario.
1907  int spinFv = settings.mode("HiddenValley:spinFv");
1908  for (int i = 1; i < 7; ++i) {
1909  if (particleDataPtr->spinType( 4900000 + i) != spinFv + 1)
1910  particleDataPtr->spinType( 4900000 + i, spinFv + 1);
1911  if (particleDataPtr->spinType( 4900010 + i) != spinFv + 1)
1912  particleDataPtr->spinType( 4900010 + i, spinFv + 1);
1913  }
1914  if (spinFv != 1) {
1915  if (particleDataPtr->spinType( 4900101) != 2)
1916  particleDataPtr->spinType( 4900101, 2);
1917  } else {
1918  int spinqv = settings.mode("HiddenValley:spinqv");
1919  if (particleDataPtr->spinType( 4900101) != 2 * spinqv + 1)
1920  particleDataPtr->spinType( 4900101, 2 * spinqv + 1);
1921  }
1922 
1923  // Set up requested objects for HiddenValley processes.
1924  bool hiddenvalleys = settings.flag("HiddenValley:all");
1925  if (hiddenvalleys || settings.flag("HiddenValley:gg2DvDvbar")) {
1926  sigmaPtr = new Sigma2gg2qGqGbar( 4900001, 4901, spinFv,
1927  "g g -> Dv Dvbar");
1928  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1929  }
1930  if (hiddenvalleys || settings.flag("HiddenValley:gg2UvUvbar")) {
1931  sigmaPtr = new Sigma2gg2qGqGbar( 4900002, 4902, spinFv,
1932  "g g -> Uv Uvbar");
1933  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1934  }
1935  if (hiddenvalleys || settings.flag("HiddenValley:gg2SvSvbar")) {
1936  sigmaPtr = new Sigma2gg2qGqGbar( 4900003, 4903, spinFv,
1937  "g g -> Sv Svbar");
1938  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1939  }
1940  if (hiddenvalleys || settings.flag("HiddenValley:gg2CvCvbar")) {
1941  sigmaPtr = new Sigma2gg2qGqGbar( 4900004, 4904, spinFv,
1942  "g g -> Cv Cvbar");
1943  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1944  }
1945  if (hiddenvalleys || settings.flag("HiddenValley:gg2BvBvbar")) {
1946  sigmaPtr = new Sigma2gg2qGqGbar( 4900005, 4905, spinFv,
1947  "g g -> Bv Bvbar");
1948  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1949  }
1950  if (hiddenvalleys || settings.flag("HiddenValley:gg2TvTvbar")) {
1951  sigmaPtr = new Sigma2gg2qGqGbar( 4900006, 4906, spinFv,
1952  "g g -> Tv Tvbar");
1953  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1954  }
1955  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2DvDvbar")) {
1956  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900001, 4911, spinFv,
1957  "q qbar -> Dv Dvbar");
1958  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1959  }
1960  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2UvUvbar")) {
1961  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900002, 4912, spinFv,
1962  "q qbar -> Uv Uvbar");
1963  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1964  }
1965  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2SvSvbar")) {
1966  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900003, 4913, spinFv,
1967  "q qbar -> Sv Svbar");
1968  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1969  }
1970  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2CvCvbar")) {
1971  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900004, 4914, spinFv,
1972  "q qbar -> Cv Cvbar");
1973  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1974  }
1975  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2BvBvbar")) {
1976  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900005, 4915, spinFv,
1977  "q qbar -> Bv Bvbar");
1978  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1979  }
1980  if (hiddenvalleys || settings.flag("HiddenValley:qqbar2TvTvbar")) {
1981  sigmaPtr = new Sigma2qqbar2qGqGbar( 4900006, 4916, spinFv,
1982  "q qbar -> Tv Tvbar");
1983  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1984  }
1985  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2DvDvbar")) {
1986  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900001, 4921, spinFv,
1987  "f fbar -> Dv Dvbar");
1988  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1989  }
1990  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2UvUvbar")) {
1991  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900002, 4922, spinFv,
1992  "f fbar -> Uv Uvbar");
1993  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1994  }
1995  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2SvSvbar")) {
1996  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900003, 4923, spinFv,
1997  "f fbar -> Sv Svbar");
1998  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1999  }
2000  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2CvCvbar")) {
2001  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900004, 4924, spinFv,
2002  "f fbar -> Cv Cvbar");
2003  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2004  }
2005  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2BvBvbar")) {
2006  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900005, 4925, spinFv,
2007  "f fbar -> Bv Bvbar");
2008  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2009  }
2010  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2TvTvbar")) {
2011  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900006, 4926, spinFv,
2012  "f fbar -> Tv Tvbar");
2013  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2014  }
2015  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2EvEvbar")) {
2016  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900011, 4931, spinFv,
2017  "f fbar -> Ev Evbar");
2018  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2019  }
2020  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2nuEvnuEvbar")) {
2021  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900012, 4932, spinFv,
2022  "f fbar -> nuEv nuEvbar");
2023  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2024  }
2025  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2MUvMUvbar")) {
2026  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900013, 4933, spinFv,
2027  "f fbar -> MUv MUvbar");
2028  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2029  }
2030  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2nuMUvnuMUvbar")) {
2031  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900014, 4934, spinFv,
2032  "f fbar -> nuMUv nuMUvbar");
2033  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2034  }
2035  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2TAUvTAUvbar")) {
2036  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900015, 4935, spinFv,
2037  "f fbar -> TAUv TAUvbar");
2038  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2039  }
2040  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2nuTAUvnuTAUvbar")) {
2041  sigmaPtr = new Sigma2ffbar2fGfGbar( 4900016, 4936, spinFv,
2042  "f fbar -> nuTAUv nuTAUvbar");
2043  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2044  }
2045  if (hiddenvalleys || settings.flag("HiddenValley:ffbar2Zv")) {
2046  sigmaPtr = new Sigma1ffbar2Zv();
2047  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2048  }
2049 
2050  // Set up requested objects for RS extra-dimensional G* processes.
2051  bool extraDimGstars = settings.flag("ExtraDimensionsG*:all");
2052  if (extraDimGstars || settings.flag("ExtraDimensionsG*:gg2G*")) {
2053  sigmaPtr = new Sigma1gg2GravitonStar;
2054  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2055  }
2056  if (extraDimGstars || settings.flag("ExtraDimensionsG*:ffbar2G*")) {
2057  sigmaPtr = new Sigma1ffbar2GravitonStar;
2058  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2059  }
2060  if (settings.flag("ExtraDimensionsG*:gg2G*g")) {
2061  sigmaPtr = new Sigma2gg2GravitonStarg;
2062  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2063  }
2064  if (settings.flag("ExtraDimensionsG*:qg2G*q")) {
2065  sigmaPtr = new Sigma2qg2GravitonStarq;
2066  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2067  }
2068  if (settings.flag("ExtraDimensionsG*:qqbar2G*g")) {
2069  sigmaPtr = new Sigma2qqbar2GravitonStarg;
2070  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2071  }
2072 
2073  // Set up requested objects for RS extra-dimensional KKgluon processes.
2074  if (settings.flag("ExtraDimensionsG*:qqbar2KKgluon*")) {
2075  sigmaPtr = new Sigma1qqbar2KKgluonStar;
2076  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2077  }
2078 
2079  // NOAM: Set up requested objects for TEV extra-dimensional processes.
2080  if (settings.flag("ExtraDimensionsTEV:ffbar2ddbar")) {
2081  sigmaPtr = new Sigma2ffbar2TEVffbar(1, 5061);
2082  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2083  }
2084  if (settings.flag("ExtraDimensionsTEV:ffbar2uubar")) {
2085  sigmaPtr = new Sigma2ffbar2TEVffbar(2, 5062);
2086  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2087  }
2088  if (settings.flag("ExtraDimensionsTEV:ffbar2ssbar")) {
2089  sigmaPtr = new Sigma2ffbar2TEVffbar(3, 5063);
2090  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2091  }
2092  if (settings.flag("ExtraDimensionsTEV:ffbar2ccbar")) {
2093  sigmaPtr = new Sigma2ffbar2TEVffbar(4, 5064);
2094  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2095  }
2096  if (settings.flag("ExtraDimensionsTEV:ffbar2bbbar")) {
2097  sigmaPtr = new Sigma2ffbar2TEVffbar(5, 5065);
2098  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2099  }
2100  if (settings.flag("ExtraDimensionsTEV:ffbar2ttbar")) {
2101  sigmaPtr = new Sigma2ffbar2TEVffbar(6, 5066);
2102  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2103  }
2104  if (settings.flag("ExtraDimensionsTEV:ffbar2e+e-")) {
2105  sigmaPtr = new Sigma2ffbar2TEVffbar(11, 5071);
2106  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2107  }
2108  if (settings.flag("ExtraDimensionsTEV:ffbar2nuenuebar")) {
2109  sigmaPtr = new Sigma2ffbar2TEVffbar(12, 5072);
2110  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2111  }
2112  if (settings.flag("ExtraDimensionsTEV:ffbar2mu+mu-")) {
2113  sigmaPtr = new Sigma2ffbar2TEVffbar(13, 5073);
2114  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2115  }
2116  if (settings.flag("ExtraDimensionsTEV:ffbar2numunumubar")) {
2117  sigmaPtr = new Sigma2ffbar2TEVffbar(14, 5074);
2118  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2119  }
2120  if (settings.flag("ExtraDimensionsTEV:ffbar2tau+tau-")) {
2121  sigmaPtr = new Sigma2ffbar2TEVffbar(15, 5075);
2122  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2123  }
2124  if (settings.flag("ExtraDimensionsTEV:ffbar2nutaunutaubar")) {
2125  sigmaPtr = new Sigma2ffbar2TEVffbar(16, 5076);
2126  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2127  }
2128 
2129  // Set up requested objects for large extra-dimensional G processes.
2130  bool extraDimLEDmono = settings.flag("ExtraDimensionsLED:monojet");
2131  if (extraDimLEDmono || settings.flag("ExtraDimensionsLED:gg2Gg")) {
2132  sigmaPtr = new Sigma2gg2LEDUnparticleg( true );
2133  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2134  }
2135  if (extraDimLEDmono || settings.flag("ExtraDimensionsLED:qg2Gq")) {
2136  sigmaPtr = new Sigma2qg2LEDUnparticleq( true );
2137  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2138  }
2139  if (extraDimLEDmono || settings.flag("ExtraDimensionsLED:qqbar2Gg")) {
2140  sigmaPtr = new Sigma2qqbar2LEDUnparticleg( true );
2141  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2142  }
2143  if (settings.flag("ExtraDimensionsLED:ffbar2GZ")) {
2144  sigmaPtr = new Sigma2ffbar2LEDUnparticleZ( true );
2145  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2146  }
2147  if (settings.flag("ExtraDimensionsLED:ffbar2Ggamma")) {
2148  sigmaPtr = new Sigma2ffbar2LEDUnparticlegamma( true );
2149  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2150  }
2151  if (settings.flag("ExtraDimensionsLED:ffbar2gammagamma")) {
2152  sigmaPtr = new Sigma2ffbar2LEDgammagamma( true );
2153  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2154  }
2155  if (settings.flag("ExtraDimensionsLED:gg2gammagamma")) {
2156  sigmaPtr = new Sigma2gg2LEDgammagamma( true );
2157  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2158  }
2159  if (settings.flag("ExtraDimensionsLED:ffbar2llbar")) {
2160  sigmaPtr = new Sigma2ffbar2LEDllbar( true );
2161  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2162  }
2163  if (settings.flag("ExtraDimensionsLED:gg2llbar")) {
2164  sigmaPtr = new Sigma2gg2LEDllbar( true );
2165  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2166  }
2167  bool extraDimLEDdij = settings.flag("ExtraDimensionsLED:dijets");
2168  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:gg2DJgg")) {
2169  sigmaPtr = new Sigma2gg2LEDgg;
2170  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2171  }
2172  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:gg2DJqqbar")) {
2173  sigmaPtr = new Sigma2gg2LEDqqbar;
2174  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2175  }
2176  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:qg2DJqg")) {
2177  sigmaPtr = new Sigma2qg2LEDqg;
2178  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2179  }
2180  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:qq2DJqq")) {
2181  sigmaPtr = new Sigma2qq2LEDqq;
2182  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2183  }
2184  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:qqbar2DJgg")) {
2185  sigmaPtr = new Sigma2qqbar2LEDgg;
2186  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2187  }
2188  if (extraDimLEDdij || settings.flag("ExtraDimensionsLED:qqbar2DJqqbarNew")) {
2189  sigmaPtr = new Sigma2qqbar2LEDqqbarNew;
2190  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2191  }
2192 
2193  // Set up requested objects for unparticle processes.
2194  bool extraDimUnpartmono = settings.flag("ExtraDimensionsUnpart:monojet");
2195  if (extraDimUnpartmono || settings.flag("ExtraDimensionsUnpart:gg2Ug")) {
2196  sigmaPtr = new Sigma2gg2LEDUnparticleg( false );
2197  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2198  }
2199  if (extraDimUnpartmono || settings.flag("ExtraDimensionsUnpart:qg2Uq")) {
2200  sigmaPtr = new Sigma2qg2LEDUnparticleq( false );
2201  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2202  }
2203  if (extraDimUnpartmono || settings.flag("ExtraDimensionsUnpart:qqbar2Ug")) {
2204  sigmaPtr = new Sigma2qqbar2LEDUnparticleg( false );
2205  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2206  }
2207  if (settings.flag("ExtraDimensionsUnpart:ffbar2UZ")) {
2208  sigmaPtr = new Sigma2ffbar2LEDUnparticleZ( false );
2209  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2210  }
2211  if (settings.flag("ExtraDimensionsUnpart:ffbar2Ugamma")) {
2212  sigmaPtr = new Sigma2ffbar2LEDUnparticlegamma( false );
2213  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2214  }
2215  if (settings.flag("ExtraDimensionsUnpart:ffbar2gammagamma")) {
2216  sigmaPtr = new Sigma2ffbar2LEDgammagamma( false );
2217  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2218  }
2219  if (settings.flag("ExtraDimensionsUnpart:gg2gammagamma")) {
2220  sigmaPtr = new Sigma2gg2LEDgammagamma( false );
2221  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2222  }
2223  if (settings.flag("ExtraDimensionsUnpart:ffbar2llbar")) {
2224  sigmaPtr = new Sigma2ffbar2LEDllbar( false );
2225  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2226  }
2227  if (settings.flag("ExtraDimensionsUnpart:gg2llbar")) {
2228  sigmaPtr = new Sigma2gg2LEDllbar( false );
2229  containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2230  }
2231 
2232  // Done.
2233  return true;
2234 
2235 }
2236 
2237 //--------------------------------------------------------------------------
2238 
2239 // Routine to initialize list of second hard processes.
2240 
2241 bool SetupContainers::init2(vector<ProcessContainer*>& container2Ptrs,
2242  Settings& settings) {
2243 
2244  // Reset process list, if filled in previous subrun.
2245  if (container2Ptrs.size() > 0) {
2246  for (int i = 0; i < int(container2Ptrs.size()); ++i)
2247  delete container2Ptrs[i];
2248  container2Ptrs.clear();
2249  }
2250  SigmaProcess* sigmaPtr;
2251 
2252  // Two hard QCD jets.
2253  if (settings.flag("SecondHard:TwoJets")) {
2254  sigmaPtr = new Sigma2gg2gg;
2255  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2256  sigmaPtr = new Sigma2gg2qqbar;
2257  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2258  sigmaPtr = new Sigma2qg2qg;
2259  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2260  sigmaPtr = new Sigma2qq2qq;
2261  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2262  sigmaPtr = new Sigma2qqbar2gg;
2263  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2264  sigmaPtr = new Sigma2qqbar2qqbarNew;
2265  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2266  sigmaPtr = new Sigma2gg2QQbar(4, 121);
2267  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2268  sigmaPtr = new Sigma2qqbar2QQbar(4, 122);
2269  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2270  sigmaPtr = new Sigma2gg2QQbar(5, 123);
2271  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2272  sigmaPtr = new Sigma2qqbar2QQbar(5, 124);
2273  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2274  }
2275 
2276  // A prompt photon and a hard jet.
2277  if (settings.flag("SecondHard:PhotonAndJet")) {
2278  sigmaPtr = new Sigma2qg2qgamma;
2279  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2280  sigmaPtr = new Sigma2qqbar2ggamma;
2281  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2282  sigmaPtr = new Sigma2gg2ggamma;
2283  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2284  }
2285 
2286  // Two prompt photons.
2287  if (settings.flag("SecondHard:TwoPhotons")) {
2288  sigmaPtr = new Sigma2ffbar2gammagamma;
2289  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2290  sigmaPtr = new Sigma2gg2gammagamma;
2291  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2292  }
2293 
2294  // Charmonium production.
2295  if (settings.flag("SecondHard:Charmonium")) {
2296  sigmaPtr = new Sigma2gg2QQbar3S11g(4, 401);
2297  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2298  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 0, 402);
2299  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2300  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 1, 403);
2301  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2302  sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 2, 404);
2303  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2304  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 0, 405);
2305  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2306  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 1, 406);
2307  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2308  sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 2, 407);
2309  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2310  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 0, 408);
2311  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2312  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 1, 409);
2313  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2314  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 2, 410);
2315  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2316  sigmaPtr = new Sigma2gg2QQbarX8g(4, 0, 411);
2317  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2318  sigmaPtr = new Sigma2gg2QQbarX8g(4, 1, 412);
2319  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2320  sigmaPtr = new Sigma2gg2QQbarX8g(4, 2, 413);
2321  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2322  sigmaPtr = new Sigma2qg2QQbarX8q(4, 0, 414);
2323  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2324  sigmaPtr = new Sigma2qg2QQbarX8q(4, 1, 415);
2325  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2326  sigmaPtr = new Sigma2qg2QQbarX8q(4, 2, 416);
2327  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2328  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 0, 417);
2329  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2330  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 1, 418);
2331  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2332  sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 2, 419);
2333  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2334  }
2335 
2336  // Bottomonium production.
2337  if (settings.flag("SecondHard:Bottomonium")) {
2338  sigmaPtr = new Sigma2gg2QQbar3S11g(5, 501);
2339  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2340  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 0, 502);
2341  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2342  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 1, 503);
2343  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2344  sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 2, 504);
2345  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2346  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 0, 505);
2347  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2348  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 1, 506);
2349  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2350  sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 2, 507);
2351  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2352  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 0, 508);
2353  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2354  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 1, 509);
2355  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2356  sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 2, 510);
2357  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2358  sigmaPtr = new Sigma2gg2QQbarX8g(5, 0, 511);
2359  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2360  sigmaPtr = new Sigma2gg2QQbarX8g(5, 1, 512);
2361  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2362  sigmaPtr = new Sigma2gg2QQbarX8g(5, 2, 513);
2363  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2364  sigmaPtr = new Sigma2qg2QQbarX8q(5, 0, 514);
2365  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2366  sigmaPtr = new Sigma2qg2QQbarX8q(5, 1, 515);
2367  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2368  sigmaPtr = new Sigma2qg2QQbarX8q(5, 2, 516);
2369  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2370  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 0, 517);
2371  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2372  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 1, 518);
2373  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2374  sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 2, 519);
2375  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2376  }
2377 
2378  // A single gamma*/Z0.
2379  if (settings.flag("SecondHard:SingleGmZ")) {
2380  sigmaPtr = new Sigma1ffbar2gmZ;
2381  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2382  }
2383 
2384  // A single W+-.
2385  if (settings.flag("SecondHard:SingleW")) {
2386  sigmaPtr = new Sigma1ffbar2W;
2387  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2388  }
2389 
2390  // A gamma*/Z0 and a hard jet.
2391  if (settings.flag("SecondHard:GmZAndJet")) {
2392  sigmaPtr = new Sigma2qqbar2gmZg;
2393  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2394  sigmaPtr = new Sigma2qg2gmZq;
2395  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2396  }
2397 
2398  // A W+- and a hard jet.
2399  if (settings.flag("SecondHard:WAndJet")) {
2400  sigmaPtr = new Sigma2qqbar2Wg;
2401  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2402  sigmaPtr = new Sigma2qg2Wq;
2403  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2404  }
2405 
2406  // Top pair production.
2407  if (settings.flag("SecondHard:TopPair")) {
2408  sigmaPtr = new Sigma2gg2QQbar(6, 601);
2409  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2410  sigmaPtr = new Sigma2qqbar2QQbar(6, 602);
2411  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2412  sigmaPtr = new Sigma2ffbar2FFbarsgmZ(6, 604);
2413  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2414  }
2415 
2416  // Single top production.
2417  if (settings.flag("SecondHard:SingleTop")) {
2418  sigmaPtr = new Sigma2qq2QqtW(6, 603);
2419  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2420  sigmaPtr = new Sigma2ffbar2FfbarsW(6, 0, 605);
2421  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2422  }
2423 
2424  // Two b jets - already part of TwoJets sample above.
2425  if (settings.flag("SecondHard:TwoBJets")) {
2426  sigmaPtr = new Sigma2gg2QQbar(5, 123);
2427  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2428  sigmaPtr = new Sigma2qqbar2QQbar(5, 124);
2429  container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2430  }
2431 
2432  // Done.
2433  return true;
2434 
2435 }
2436 
2437 //==========================================================================
2438 
2439 } // end namespace Pythia8
Definition: AgUStep.h:26