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