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.
6 // Function definitions (not found in the header) for the
7 // ProcessContainer and SetupContainers classes.
9 #include "ProcessContainer.h"
11 // Internal headers for special processes.
12 #include "SigmaCompositeness.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"
22 #include "SigmaSUSY.h"
26 //==========================================================================
28 // ProcessContainer class.
29 // Information allowing the generation of a specific process.
31 //--------------------------------------------------------------------------
33 // Constants: could be changed here if desired, but normally should not.
34 // These are of technical nature, as described for each.
36 // Number of event tries to check maximization finding reliability.
37 const int ProcessContainer::N12SAMPLE = 100;
39 // Ditto, but increased for 2 -> 3 processes.
40 const int ProcessContainer::N3SAMPLE = 1000;
42 //--------------------------------------------------------------------------
44 // Initialize phase space and counters.
45 // Argument isFirst distinguishes two hard processes in same event.
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) {
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();
65 // Flag for maximum violation handling.
66 increaseMaximum = settings.flag("PhaseSpace:increaseMaximum");
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(
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();
81 // Store pointers and perform simple initialization.
83 particleDataPtr = particleDataPtrIn;
85 resDecaysPtr = resDecaysPtrIn;
87 sigmaProcessPtr->setLHAPtr(lhaUpPtr);
88 phaseSpacePtr->setLHAPtr(lhaUpPtr);
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,
96 // Reset cross section statistics.
109 // Initialize process and allowed incoming partons.
110 sigmaProcessPtr->initProc();
111 if (!sigmaProcessPtr->initFlux()) return false;
113 // Find maximum of differential cross section * phasespace.
114 bool physical = phaseSpacePtr->setupSampling();
115 sigmaMx = phaseSpacePtr->sigmaMax();
116 double sigmaHalfWay = sigmaMx;
118 // Separate signed maximum needed for LHA with negative weight.
119 sigmaSgn = phaseSpacePtr->sigmaSumSigned();
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();
128 sigmaMx = pow2(phaseSpacePtr->sigmaMax()) / sigmaHalfWay;
129 phaseSpacePtr->setSigmaMax(sigmaMx);
136 //--------------------------------------------------------------------------
138 // Generate a trial event; selected or not.
140 bool ProcessContainer::trialProcess() {
142 // Loop over tries only occurs for Les Houches strategy = +-2.
143 for (int iTry = 0; ; ++iTry) {
145 // Generate a trial phase space point, if meaningful.
147 if (sigmaMx == 0.) return false;
148 infoPtr->setEndOfFile(false);
149 bool repeatSame = (iTry > 0);
150 bool physical = phaseSpacePtr->trialKin(true, repeatSame);
152 // Possibly fail, e.g. if at end of Les Houches file, else cross section.
153 if (isLHA && !physical) infoPtr->setEndOfFile(true);
155 if (!physical) return false;
156 double sigmaNow = phaseSpacePtr->sigmaNow();
158 // Tell if this event comes with negative weight, or weight at all.
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);
166 // Check that not negative cross section when not allowed.
168 if (sigmaNow < sigmaNeg) {
169 infoPtr->errorMsg("Warning in ProcessContainer::trialProcess: neg"
170 "ative cross section set 0", "for " + sigmaProcessPtr->name() );
173 if (sigmaNow < 0.) sigmaNow = 0.;
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();
184 // Select or reject trial point.
186 if (lhaStratAbs < 3) select
187 = (newSigmaMx || rndmPtr->flat() * abs(sigmaMx) < abs(sigmaNow));
190 if (select || lhaStratAbs != 2) return select;
196 //--------------------------------------------------------------------------
198 // Give the hard subprocess.
200 bool ProcessContainer::constructProcess( Event& process, bool isHardest) {
202 // Construct flavour and colours for selected event.
203 if (isResolved && !isMinBias) sigmaProcessPtr->pickInState();
204 sigmaProcessPtr->setIdColAcol();
206 // Construct kinematics from selected phase space point.
207 if (!phaseSpacePtr->finalKin()) return false;
208 int nFin = sigmaProcessPtr->nFinal();
210 // Basic info on process.
211 if (isHardest) infoPtr->setType( name(), code(), nFin, isMinBias,
212 isResolved, isDiffA, isDiffB, isLHA);
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. );
223 // For minbias process no interaction selected so far, so done.
224 if (isMinBias) return true;
226 // Entries 3 and 4, now to be added, come from 1 and 2.
227 process[1].daughter1(3);
228 process[2].daughter1(4);
231 // Insert the subprocess partons - resolved processes.
232 int idRes = sigmaProcessPtr->idSChannel();
233 if (isResolved && !isLHA) {
235 // NOAM: Mothers and daughters without/with intermediate state.
247 // Find scale from which to begin MI/ISR/FSR evolution.
248 scale = sqrt(Q2Fac());
249 process.scale( scale );
251 // Loop over incoming and outgoing partons.
252 int colOffset = process.lastColTag();
253 for (int i = 1; i <= 2 + nFin; ++i) {
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;
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);
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) {
276 // Sign of intermediate state: go by charge.
277 if (particleDataPtr->hasAnti(idRes)
278 && process[3].chargeType() + process[4].chargeType() < 0)
281 // The colour configuration of the intermediate state has to be
282 // resolved separately.
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) {
292 } else if (m_col2 == m_acol1 && m_col1 != m_acol2) {
296 if (col > 0) col += colOffset;
297 if (acol > 0) acol += colOffset;
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);
305 // Pick lifetime where relevant, else not.
306 if (process[iNow].tau0() > 0.) process[iNow].tau(
307 process[iNow].tau0() * rndmPtr->exp() );
311 // Insert the outgoing particles - unresolved processes.
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));
323 // Insert the outgoing particles - Les Houches Accord processes.
326 // Since LHA partons may be out of order, determine correct one.
327 // (Recall that zeroth particle is empty.)
329 newPos.reserve(lhaUpPtr->sizePart());
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;
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);
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);
349 // Translate from LHA status codes.
350 int lhaStatus = lhaUpPtr->status(iOld);
352 if (lhaStatus == 2 || lhaStatus == 3) status = -22;
353 if (lhaStatus == 1) status = 23;
355 // Find where mothers have been moved by reordering.
356 int mother1Old = lhaUpPtr->mother1(iOld);
357 int mother2Old = lhaUpPtr->mother2(iOld);
360 for (int im = 1; im < i; ++im) {
361 if (mother1Old == newPos[im]) mother1 = im + 2;
362 if (mother2Old == newPos[im]) mother2 = im + 2;
364 if (i <= 2) mother1 = i;
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;
373 // Find daughters and where they have been moved by reordering.
374 // (Values shifted two steps to account for inserted beams.)
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;
384 // For 2 -> 1 hard scatterings reset second daughter to 0.
385 if (daughter2 == daughter1) daughter2 = 0;
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;
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);
401 // For resonance decay products use resonance mass as scale.
402 double scaleNow = scalePr;
403 if (mother1 > 4) scaleNow = process[mother1].m();
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);
409 // Check if need to store lifetime.
410 double tau = lhaUpPtr->tau(iOld);
411 if (tau > 0.) process[iNow].tau(tau);
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();
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() );
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() );
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();
440 double Q2FacNow, alphaEM, alphaS, Q2Ren, x1Now, x2Now, sHat;
442 // Internally generated and stored information.
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();
462 // Les Houches Accord process partly available, partly to be constructed.
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();
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();
484 // Reconstruct kinematics of 2 -> 2 processes from momenta.
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();
493 Vec4 p5 = process[5].p();
496 phi = process[5].phi();
500 // Store information.
502 infoPtr->setPDFalpha( id1Now, id2Now, pdf1, pdf2, Q2FacNow,
503 alphaEM, alphaS, Q2Ren);
504 infoPtr->setKin( x1Now, x2Now, sHat, tHat, uHat, pTHatL, m3, m4,
507 infoPtr->setTypeMI( code(), pTHatL);
509 // For Les Houches event store subprocess classification.
511 int codeSub = lhaUpPtr->idProcess();
512 ostringstream nameSub;
513 nameSub << "user process " << codeSub;
514 infoPtr->setSubType( nameSub.str(), codeSub, nFin);
522 //--------------------------------------------------------------------------
524 // Handle resonance decays.
526 bool ProcessContainer::decayResonances( Event& process) {
528 // Save current event-record size.
530 bool physical = true;
531 bool newFlavours = false;
533 // Do sequential chain of uncorrelated isotropic decays.
535 physical = resDecaysPtr->next( process);
536 if (!physical) return false;
538 // Check whether flavours should be correlated.
539 // (Currently only relevant for f fbar -> gamma*/Z0 gamma*/Z0.)
540 newFlavours = ( sigmaProcessPtr->weightDecayFlav( process)
543 // Reset the decay chains if have to redo.
545 process.restoreSize();
546 for (int i = 5; i < process.size(); ++i) process[i].statusPos();
549 // Loop back where required to generate new decays with new flavours.
550 } while (newFlavours);
552 // Correct to nonisotropic decays.
553 phaseSpacePtr->decayKinematics( process);
560 //--------------------------------------------------------------------------
562 // Reset event generation statistics; but NOT maximum of cross section.
564 void ProcessContainer::reset() {
579 //--------------------------------------------------------------------------
581 // Estimate integrated cross section and its uncertainty.
583 void ProcessContainer::sigmaDelta() {
585 // Initial values. No analysis meaningful unless accepted events.
590 if (nAcc == 0) return;
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;
600 // Estimated error. Quadratic sum of cross section term and
601 // binomial from accept/reject step.
603 if (nAcc == 1) return;
604 double delta2Sig = (sigma2Sum *nTryInv - pow2(sigmaAvg)) * nTryInv
606 double delta2Veto = (nSel - nAcc) * nAccInv * nSelInv;
607 double delta2Sum = delta2Sig + delta2Veto;
608 deltaFin = sqrtpos(delta2Sum) * sigmaFin;
612 //==========================================================================
614 // SetupContainer class.
615 // Turns list of user-desired processes into a vector of containers.
617 //--------------------------------------------------------------------------
619 // Main routine to initialize list of processes.
621 bool SetupContainers::init(vector<ProcessContainer*>& containerPtrs,
622 Settings& settings, ParticleData* particleDataPtr, Couplings* couplings) {
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();
630 SigmaProcess* sigmaPtr;
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) );
638 if (softQCD || settings.flag("SoftQCD:elastic")) {
639 sigmaPtr = new Sigma0AB2AB;
640 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
648 if (softQCD || settings.flag("SoftQCD:doubleDiffractive")) {
649 sigmaPtr = new Sigma0AB2XX;
650 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
659 if (hardQCD || settings.flag("HardQCD:gg2qqbar")) {
660 sigmaPtr = new Sigma2gg2qqbar;
661 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
663 if (hardQCD || settings.flag("HardQCD:qg2qg")) {
664 sigmaPtr = new Sigma2qg2qg;
665 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
667 if (hardQCD || settings.flag("HardQCD:qq2qq")) {
668 sigmaPtr = new Sigma2qq2qq;
669 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
671 if (hardQCD || settings.flag("HardQCD:qqbar2gg")) {
672 sigmaPtr = new Sigma2qqbar2gg;
673 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
675 if (hardQCD || settings.flag("HardQCD:qqbar2qqbarNew")) {
676 sigmaPtr = new Sigma2qqbar2qqbarNew;
677 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
685 if (hardQCD || settings.flag("HardQCD:qqbar2ccbar")) {
686 sigmaPtr = new Sigma2qqbar2QQbar(4, 122);
687 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
689 if (hardQCD || settings.flag("HardQCD:gg2bbbar")) {
690 sigmaPtr = new Sigma2gg2QQbar(5, 123);
691 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
693 if (hardQCD || settings.flag("HardQCD:qqbar2bbbar")) {
694 sigmaPtr = new Sigma2qqbar2QQbar(5, 124);
695 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
704 if (hardQCD3parton || settings.flag("HardQCD:qqbar2ggg")) {
705 sigmaPtr = new Sigma3qqbar2ggg;
706 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
708 if (hardQCD3parton || settings.flag("HardQCD:qg2qgg")) {
709 sigmaPtr = new Sigma3qg2qgg;
710 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
712 if (hardQCD3parton || settings.flag("HardQCD:qq2qqgDiff")) {
713 sigmaPtr = new Sigma3qq2qqgDiff;
714 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
716 if (hardQCD3parton || settings.flag("HardQCD:qq2qqgSame")) {
717 sigmaPtr = new Sigma3qq2qqgSame;
718 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
720 if (hardQCD3parton || settings.flag("HardQCD:qqbar2qqbargDiff")) {
721 sigmaPtr = new Sigma3qqbar2qqbargDiff;
722 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
724 if (hardQCD3parton || settings.flag("HardQCD:qqbar2qqbargSame")) {
725 sigmaPtr = new Sigma3qqbar2qqbargSame;
726 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
728 if (hardQCD3parton || settings.flag("HardQCD:gg2qqbarg")) {
729 sigmaPtr = new Sigma3gg2qqbarg;
730 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
732 if (hardQCD3parton || settings.flag("HardQCD:qg2qqqbarDiff")) {
733 sigmaPtr = new Sigma3qg2qqqbarDiff;
734 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
736 if (hardQCD3parton || settings.flag("HardQCD:qg2qqqbarSame")) {
737 sigmaPtr = new Sigma3qg2qqqbarSame;
738 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
741 // Set up requested objects for prompt photon processes.
742 bool promptPhotons = settings.flag("PromptPhoton:all");
744 || settings.flag("PromptPhoton:qg2qgamma")) {
745 sigmaPtr = new Sigma2qg2qgamma;
746 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
749 || settings.flag("PromptPhoton:qqbar2ggamma")) {
750 sigmaPtr = new Sigma2qqbar2ggamma;
751 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
754 || settings.flag("PromptPhoton:gg2ggamma")) {
755 sigmaPtr = new Sigma2gg2ggamma;
756 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
759 || settings.flag("PromptPhoton:ffbar2gammagamma")) {
760 sigmaPtr = new Sigma2ffbar2gammagamma;
761 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
764 || settings.flag("PromptPhoton:gg2gammagamma")) {
765 sigmaPtr = new Sigma2gg2gammagamma;
766 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
776 if (weakBosonExchanges
777 || settings.flag("WeakBosonExchange:ff2ff(t:W)")) {
778 sigmaPtr = new Sigma2ff2fftW;
779 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
782 // Set up requested objects for weak gauge boson processes.
783 bool weakSingleBosons = settings.flag("WeakSingleBoson:all");
785 || settings.flag("WeakSingleBoson:ffbar2gmZ")) {
786 sigmaPtr = new Sigma1ffbar2gmZ;
787 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
790 || settings.flag("WeakSingleBoson:ffbar2W")) {
791 sigmaPtr = new Sigma1ffbar2W;
792 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
802 // Set up requested objects for weak gauge boson pair processes.
803 bool weakDoubleBosons = settings.flag("WeakDoubleBoson:all");
805 || settings.flag("WeakDoubleBoson:ffbar2gmZgmZ")) {
806 sigmaPtr = new Sigma2ffbar2gmZgmZ;
807 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
810 || settings.flag("WeakDoubleBoson:ffbar2ZW")) {
811 sigmaPtr = new Sigma2ffbar2ZW;
812 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
815 || settings.flag("WeakDoubleBoson:ffbar2WW")) {
816 sigmaPtr = new Sigma2ffbar2WW;
817 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
827 if (weakBosonAndPartons
828 || settings.flag("WeakBosonAndParton:qg2gmZq")) {
829 sigmaPtr = new Sigma2qg2gmZq;
830 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
832 if (weakBosonAndPartons
833 || settings.flag("WeakBosonAndParton:ffbar2gmZgm")) {
834 sigmaPtr = new Sigma2ffbar2gmZgm;
835 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
837 if (weakBosonAndPartons
838 || settings.flag("WeakBosonAndParton:fgm2gmZf")) {
839 sigmaPtr = new Sigma2fgm2gmZf;
840 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
842 if (weakBosonAndPartons
843 || settings.flag("WeakBosonAndParton:qqbar2Wg")) {
844 sigmaPtr = new Sigma2qqbar2Wg;
845 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
847 if (weakBosonAndPartons
848 || settings.flag("WeakBosonAndParton:qg2Wq")) {
849 sigmaPtr = new Sigma2qg2Wq;
850 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
852 if (weakBosonAndPartons
853 || settings.flag("WeakBosonAndParton:ffbar2Wgm")) {
854 sigmaPtr = new Sigma2ffbar2Wgm;
855 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
857 if (weakBosonAndPartons
858 || settings.flag("WeakBosonAndParton:fgm2Wf")) {
859 sigmaPtr = new Sigma2fgm2Wf;
860 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
869 if (photonCollisions || settings.flag("PhotonCollision:gmgm2ccbar")) {
870 sigmaPtr = new Sigma2gmgm2ffbar(4, 262);
871 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
873 if (photonCollisions || settings.flag("PhotonCollision:gmgm2bbbar")) {
874 sigmaPtr = new Sigma2gmgm2ffbar(5, 263);
875 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
877 if (photonCollisions || settings.flag("PhotonCollision:gmgm2ee")) {
878 sigmaPtr = new Sigma2gmgm2ffbar(11, 264);
879 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
881 if (photonCollisions || settings.flag("PhotonCollision:gmgm2mumu")) {
882 sigmaPtr = new Sigma2gmgm2ffbar(13, 265);
883 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
885 if (photonCollisions || settings.flag("PhotonCollision:gmgm2tautau")) {
886 sigmaPtr = new Sigma2gmgm2ffbar(15, 266);
887 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
896 if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P0(1)]g")) {
897 sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 0, 402);
898 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
900 if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P1(1)]g")) {
901 sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 1, 403);
902 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
904 if (charmoniums || settings.flag("Charmonium:gg2QQbar[3P2(1)]g")) {
905 sigmaPtr = new Sigma2gg2QQbar3PJ1g(4, 2, 404);
906 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
908 if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P0(1)]q")) {
909 sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 0, 405);
910 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
912 if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P1(1)]q")) {
913 sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 1, 406);
914 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
916 if (charmoniums || settings.flag("Charmonium:qg2QQbar[3P2(1)]q")) {
917 sigmaPtr = new Sigma2qg2QQbar3PJ1q(4, 2, 407);
918 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
920 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P0(1)]g")) {
921 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 0, 408);
922 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
924 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P1(1)]g")) {
925 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 1, 409);
926 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
928 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3P2(1)]g")) {
929 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(4, 2, 410);
930 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
932 if (charmoniums || settings.flag("Charmonium:gg2QQbar[3S1(8)]g")) {
933 sigmaPtr = new Sigma2gg2QQbarX8g(4, 0, 411);
934 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
936 if (charmoniums || settings.flag("Charmonium:gg2QQbar[1S0(8)]g")) {
937 sigmaPtr = new Sigma2gg2QQbarX8g(4, 1, 412);
938 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
940 if (charmoniums || settings.flag("Charmonium:gg2QQbar[3PJ(8)]g")) {
941 sigmaPtr = new Sigma2gg2QQbarX8g(4, 2, 413);
942 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
944 if (charmoniums || settings.flag("Charmonium:qg2QQbar[3S1(8)]q")) {
945 sigmaPtr = new Sigma2qg2QQbarX8q(4, 0, 414);
946 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
948 if (charmoniums || settings.flag("Charmonium:qg2QQbar[1S0(8)]q")) {
949 sigmaPtr = new Sigma2qg2QQbarX8q(4, 1, 415);
950 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
952 if (charmoniums || settings.flag("Charmonium:qg2QQbar[3PJ(8)]q")) {
953 sigmaPtr = new Sigma2qg2QQbarX8q(4, 2, 416);
954 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
956 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3S1(8)]g")) {
957 sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 0, 417);
958 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
960 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[1S0(8)]g")) {
961 sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 1, 418);
962 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
964 if (charmoniums || settings.flag("Charmonium:qqbar2QQbar[3PJ(8)]g")) {
965 sigmaPtr = new Sigma2qqbar2QQbarX8g(4, 2, 419);
966 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
975 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P0(1)]g")) {
976 sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 0, 502);
977 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
979 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P1(1)]g")) {
980 sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 1, 503);
981 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
983 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3P2(1)]g")) {
984 sigmaPtr = new Sigma2gg2QQbar3PJ1g(5, 2, 504);
985 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
987 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P0(1)]q")) {
988 sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 0, 505);
989 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
991 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P1(1)]q")) {
992 sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 1, 506);
993 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
995 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3P2(1)]q")) {
996 sigmaPtr = new Sigma2qg2QQbar3PJ1q(5, 2, 507);
997 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
999 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P0(1)]g")) {
1000 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 0, 508);
1001 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1003 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P1(1)]g")) {
1004 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 1, 509);
1005 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1007 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3P2(1)]g")) {
1008 sigmaPtr = new Sigma2qqbar2QQbar3PJ1g(5, 2, 510);
1009 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1011 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3S1(8)]g")) {
1012 sigmaPtr = new Sigma2gg2QQbarX8g(5, 0, 511);
1013 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1015 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[1S0(8)]g")) {
1016 sigmaPtr = new Sigma2gg2QQbarX8g(5, 1, 512);
1017 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1019 if (bottomoniums || settings.flag("Bottomonium:gg2QQbar[3PJ(8)]g")) {
1020 sigmaPtr = new Sigma2gg2QQbarX8g(5, 2, 513);
1021 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1023 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3S1(8)]q")) {
1024 sigmaPtr = new Sigma2qg2QQbarX8q(5, 0, 514);
1025 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1027 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[1S0(8)]q")) {
1028 sigmaPtr = new Sigma2qg2QQbarX8q(5, 1, 515);
1029 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1031 if (bottomoniums || settings.flag("Bottomonium:qg2QQbar[3PJ(8)]q")) {
1032 sigmaPtr = new Sigma2qg2QQbarX8q(5, 2, 516);
1033 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1035 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3S1(8)]g")) {
1036 sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 0, 517);
1037 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1039 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[1S0(8)]g")) {
1040 sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 1, 518);
1041 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1043 if (bottomoniums || settings.flag("Bottomonium:qqbar2QQbar[3PJ(8)]g")) {
1044 sigmaPtr = new Sigma2qqbar2QQbarX8g(5, 2, 519);
1045 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1054 if (tops || settings.flag("Top:qqbar2ttbar")) {
1055 sigmaPtr = new Sigma2qqbar2QQbar(6, 602);
1056 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1058 if (tops || settings.flag("Top:qq2tq(t:W)")) {
1059 sigmaPtr = new Sigma2qq2QqtW(6, 603);
1060 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1062 if (tops || settings.flag("Top:ffbar2ttbar(s:gmZ)")) {
1063 sigmaPtr = new Sigma2ffbar2FFbarsgmZ(6, 604);
1064 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1066 if (tops || settings.flag("Top:ffbar2tqbar(s:W)")) {
1067 sigmaPtr = new Sigma2ffbar2FfbarsW(6, 0, 605);
1068 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1070 if (tops || settings.flag("Top:gmgm2ttbar")) {
1071 sigmaPtr = new Sigma2gmgm2ffbar(6, 606);
1072 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1081 if (bPrimes || settings.flag("FourthBottom:qqbar2bPrimebPrimebar")) {
1082 sigmaPtr = new Sigma2qqbar2QQbar(7, 802);
1083 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1085 if (bPrimes || settings.flag("FourthBottom:qq2bPrimeq(t:W)")) {
1086 sigmaPtr = new Sigma2qq2QqtW(7, 803);
1087 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1089 if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimebPrimebar(s:gmZ)")) {
1090 sigmaPtr = new Sigma2ffbar2FFbarsgmZ(7, 804);
1091 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1093 if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimeqbar(s:W)")) {
1094 sigmaPtr = new Sigma2ffbar2FfbarsW(7, 0, 805);
1095 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1097 if (bPrimes || settings.flag("FourthBottom:ffbar2bPrimetbar(s:W)")) {
1098 sigmaPtr = new Sigma2ffbar2FfbarsW(7, 6, 806);
1099 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1108 if (tPrimes || settings.flag("FourthTop:qqbar2tPrimetPrimebar")) {
1109 sigmaPtr = new Sigma2qqbar2QQbar(8, 822);
1110 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1112 if (tPrimes || settings.flag("FourthTop:qq2tPrimeq(t:W)")) {
1113 sigmaPtr = new Sigma2qq2QqtW(8, 823);
1114 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1116 if (tPrimes || settings.flag("FourthTop:ffbar2tPrimetPrimebar(s:gmZ)")) {
1117 sigmaPtr = new Sigma2ffbar2FFbarsgmZ(8, 824);
1118 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1120 if (tPrimes || settings.flag("FourthTop:ffbar2tPrimeqbar(s:W)")) {
1121 sigmaPtr = new Sigma2ffbar2FfbarsW(8, 0, 825);
1122 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1131 if (settings.flag("FourthPair:ffbar2tauPrimenuPrimebar(s:W)")) {
1132 sigmaPtr = new Sigma2ffbar2FfbarsW(17, 18, 842);
1133 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1136 // Flag for global choice between SM and BSM Higgses.
1137 bool useBSMHiggses = settings.flag("Higgs:useBSM");
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) );
1146 if (HiggsesSM || settings.flag("HiggsSM:gg2H")) {
1147 sigmaPtr = new Sigma1gg2H(0);
1148 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1150 if (HiggsesSM || settings.flag("HiggsSM:gmgm2H")) {
1151 sigmaPtr = new Sigma1gmgm2H(0);
1152 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1154 if (HiggsesSM || settings.flag("HiggsSM:ffbar2HZ")) {
1155 sigmaPtr = new Sigma2ffbar2HZ(0);
1156 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1158 if (HiggsesSM || settings.flag("HiggsSM:ffbar2HW")) {
1159 sigmaPtr = new Sigma2ffbar2HW(0);
1160 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1162 if (HiggsesSM || settings.flag("HiggsSM:ff2Hff(t:ZZ)")) {
1163 sigmaPtr = new Sigma3ff2HfftZZ(0);
1164 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1166 if (HiggsesSM || settings.flag("HiggsSM:ff2Hff(t:WW)")) {
1167 sigmaPtr = new Sigma3ff2HfftWW(0);
1168 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1170 if (HiggsesSM || settings.flag("HiggsSM:gg2Httbar")) {
1171 sigmaPtr = new Sigma3gg2HQQbar(6,0);
1172 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1174 if (HiggsesSM || settings.flag("HiggsSM:qqbar2Httbar")) {
1175 sigmaPtr = new Sigma3qqbar2HQQbar(6,0);
1176 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1186 if (settings.flag("HiggsSM:gg2Hbbbar")) {
1187 sigmaPtr = new Sigma3gg2HQQbar(5,0);
1188 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1190 if (settings.flag("HiggsSM:qqbar2Hbbbar")) {
1191 sigmaPtr = new Sigma3qqbar2HQQbar(5,0);
1192 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1194 if (settings.flag("HiggsSM:gg2Hg(l:t)")) {
1195 sigmaPtr = new Sigma2gg2Hglt(0);
1196 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1198 if (settings.flag("HiggsSM:qg2Hq(l:t)")) {
1199 sigmaPtr = new Sigma2qg2Hqlt(0);
1200 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1202 if (settings.flag("HiggsSM:qqbar2Hg(l:t)")) {
1203 sigmaPtr = new Sigma2qqbar2Hglt(0);
1204 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1208 // Common switch for the group of Higgs production BSM.
1209 if (useBSMHiggses) {
1210 bool HiggsesBSM = settings.flag("HiggsBSM:all");
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) );
1218 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gg2H1")) {
1219 sigmaPtr = new Sigma1gg2H(1);
1220 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1222 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gmgm2H1")) {
1223 sigmaPtr = new Sigma1gmgm2H(1);
1224 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1226 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ffbar2H1Z")) {
1227 sigmaPtr = new Sigma2ffbar2HZ(1);
1228 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1230 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ffbar2H1W")) {
1231 sigmaPtr = new Sigma2ffbar2HW(1);
1232 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1234 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ff2H1ff(t:ZZ)")) {
1235 sigmaPtr = new Sigma3ff2HfftZZ(1);
1236 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1238 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:ff2H1ff(t:WW)")) {
1239 sigmaPtr = new Sigma3ff2HfftWW(1);
1240 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1242 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:gg2H1ttbar")) {
1243 sigmaPtr = new Sigma3gg2HQQbar(6,1);
1244 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1246 if (HiggsesBSM || HiggsesH1 || settings.flag("HiggsBSM:qqbar2H1ttbar")) {
1247 sigmaPtr = new Sigma3qqbar2HQQbar(6,1);
1248 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1258 if (settings.flag("HiggsBSM:gg2H1bbbar")) {
1259 sigmaPtr = new Sigma3gg2HQQbar(5,1);
1260 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1262 if (settings.flag("HiggsBSM:qqbar2H1bbbar")) {
1263 sigmaPtr = new Sigma3qqbar2HQQbar(5,1);
1264 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1266 if (settings.flag("HiggsBSM:gg2H1g(l:t)")) {
1267 sigmaPtr = new Sigma2gg2Hglt(1);
1268 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1270 if (settings.flag("HiggsBSM:qg2H1q(l:t)")) {
1271 sigmaPtr = new Sigma2qg2Hqlt(1);
1272 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1274 if (settings.flag("HiggsBSM:qqbar2H1g(l:t)")) {
1275 sigmaPtr = new Sigma2qqbar2Hglt(1);
1276 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1285 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gg2H2")) {
1286 sigmaPtr = new Sigma1gg2H(2);
1287 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1289 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gmgm2H2")) {
1290 sigmaPtr = new Sigma1gmgm2H(2);
1291 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1293 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ffbar2H2Z")) {
1294 sigmaPtr = new Sigma2ffbar2HZ(2);
1295 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1297 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ffbar2H2W")) {
1298 sigmaPtr = new Sigma2ffbar2HW(2);
1299 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1301 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ff2H2ff(t:ZZ)")) {
1302 sigmaPtr = new Sigma3ff2HfftZZ(2);
1303 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1305 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:ff2H2ff(t:WW)")) {
1306 sigmaPtr = new Sigma3ff2HfftWW(2);
1307 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1309 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:gg2H2ttbar")) {
1310 sigmaPtr = new Sigma3gg2HQQbar(6,2);
1311 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1313 if (HiggsesBSM || HiggsesH2 || settings.flag("HiggsBSM:qqbar2H2ttbar")) {
1314 sigmaPtr = new Sigma3qqbar2HQQbar(6,2);
1315 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1325 if (settings.flag("HiggsBSM:gg2H2bbbar")) {
1326 sigmaPtr = new Sigma3gg2HQQbar(5,2);
1327 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1329 if (settings.flag("HiggsBSM:qqbar2H2bbbar")) {
1330 sigmaPtr = new Sigma3qqbar2HQQbar(5,2);
1331 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1333 if (settings.flag("HiggsBSM:gg2H2g(l:t)")) {
1334 sigmaPtr = new Sigma2gg2Hglt(2);
1335 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1337 if (settings.flag("HiggsBSM:qg2H2q(l:t)")) {
1338 sigmaPtr = new Sigma2qg2Hqlt(2);
1339 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1341 if (settings.flag("HiggsBSM:qqbar2H2g(l:t)")) {
1342 sigmaPtr = new Sigma2qqbar2Hglt(2);
1343 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1352 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gg2A3")) {
1353 sigmaPtr = new Sigma1gg2H(3);
1354 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1356 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gmgm2A3")) {
1357 sigmaPtr = new Sigma1gmgm2H(3);
1358 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1360 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ffbar2A3Z")) {
1361 sigmaPtr = new Sigma2ffbar2HZ(3);
1362 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1364 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ffbar2A3W")) {
1365 sigmaPtr = new Sigma2ffbar2HW(3);
1366 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1368 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ff2A3ff(t:ZZ)")) {
1369 sigmaPtr = new Sigma3ff2HfftZZ(3);
1370 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1372 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:ff2A3ff(t:WW)")) {
1373 sigmaPtr = new Sigma3ff2HfftWW(3);
1374 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1376 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:gg2A3ttbar")) {
1377 sigmaPtr = new Sigma3gg2HQQbar(6,3);
1378 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1380 if (HiggsesBSM || HiggsesA3 || settings.flag("HiggsBSM:qqbar2A3ttbar")) {
1381 sigmaPtr = new Sigma3qqbar2HQQbar(6,3);
1382 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1392 if (settings.flag("HiggsBSM:gg2A3bbbar")) {
1393 sigmaPtr = new Sigma3gg2HQQbar(5,3);
1394 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1396 if (settings.flag("HiggsBSM:qqbar2A3bbbar")) {
1397 sigmaPtr = new Sigma3qqbar2HQQbar(5,3);
1398 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1400 if (settings.flag("HiggsBSM:gg2A3g(l:t)")) {
1401 sigmaPtr = new Sigma2gg2Hglt(3);
1402 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1404 if (settings.flag("HiggsBSM:qg2A3q(l:t)")) {
1405 sigmaPtr = new Sigma2qg2Hqlt(3);
1406 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1408 if (settings.flag("HiggsBSM:qqbar2A3g(l:t)")) {
1409 sigmaPtr = new Sigma2qqbar2Hglt(3);
1410 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
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) );
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) );
1430 if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2A3H2")) {
1431 sigmaPtr = new Sigma2ffbar2A3H12(2);
1432 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1434 if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+-H1")) {
1435 sigmaPtr = new Sigma2ffbar2HchgH12(1);
1436 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1438 if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+-H2")) {
1439 sigmaPtr = new Sigma2ffbar2HchgH12(2);
1440 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1442 if (HiggsesBSM || HiggsesPairs || settings.flag("HiggsBSM:ffbar2H+H-")) {
1443 sigmaPtr = new Sigma2ffbar2HposHneg();
1444 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1448 // Set up requested objects for SUSY pair processes.
1449 if(couplings->isSUSY){
1450 CoupSUSY* coupSUSY = (CoupSUSY *) couplings;
1452 bool SUSYs = settings.flag("SUSY:all");
1453 bool nmssm = settings.flag("SLHA:NMSSM");
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")));
1461 // MSSM: 4 neutralinos
1463 if (nmssm) nNeut = 5;
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) );
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) );
1486 if (SUSYs || settings.flag("SUSY:qg2squarkgluino")) {
1488 for (int idx = 1; idx <= 6; ++idx) {
1489 for (int iso = 1; iso <= 2; ++iso) {
1491 int id3 = iso + ((idx <= 3) ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
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) );
1503 // Squark-antisquark (gg initiated)
1504 if (SUSYs || settings.flag("SUSY:gg2squarkantisquark")) {
1506 for (int idx = 1; idx <= 6; ++idx) {
1507 for (int iso = 1; iso <= 2; ++iso) {
1509 int id = iso + ((idx <= 3) ? 1000000+2*(idx-1) : 2000000+2*(idx-4));
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) );
1520 // Squark-antisquark (qqbar initiated)
1521 if (SUSYs || settings.flag("SUSY:qqbar2squarkantisquark")) {
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;
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) );
1546 sigmaPtr = new Sigma2qqbar2squarkantisquark(id1,-id2,iproc);
1547 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1556 if (SUSYs || settings.flag("SUSY:qq2squarksquark")) {
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;
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) );
1578 // Neutralino + squark
1579 if (SUSYs || settings.flag("SUSY:qg2chi0squark")) {
1581 for (int iNeut= 1; iNeut <= nNeut; iNeut++) {
1582 for (int idx = 1; idx <= 6; idx++) {
1584 for (int iso = 1; iso <= 2; iso++) {
1585 if (iso == 2) isUp = true;
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) );
1600 // Chargino + squark
1601 if (SUSYs || settings.flag("SUSY:qg2chi+-squark")) {
1603 for (int iChar = 1; iChar <= 2; iChar++) {
1604 for (int idx = 1; idx <= 6; idx++) {
1606 for (int iso = 1; iso <= 2; iso++) {
1607 if (iso == 2) isUp = true;
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) );
1623 if (SUSYs || settings.flag("SUSY:qqbar2chi0chi0")) {
1625 for (int iNeut2 = 1; iNeut2 <= nNeut; iNeut2++) {
1626 for (int iNeut1 = 1; iNeut1 <= iNeut2; iNeut1++) {
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) );
1640 // Neutralino-Chargino
1641 if (SUSYs || settings.flag("SUSY:qqbar2chi+-chi0")) {
1643 for (int iNeut = 1; iNeut <= nNeut; iNeut++) {
1644 for (int iChar = 1; iChar <= 2; ++iChar) {
1646 if (codeA != 0 && codeA != coupSUSY->idNeut(iNeut)
1647 && codeA != coupSUSY->idChar(iChar)) continue;
1649 && ( codeA != max(coupSUSY->idNeut(iNeut),coupSUSY->idChar(iChar))
1650 || codeB != min(coupSUSY->idNeut(iNeut),coupSUSY->idChar(iChar)))
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) );
1660 // Chargino-Chargino
1661 if (SUSYs || settings.flag("SUSY:qqbar2chi+chi-")) {
1663 for (int i = 1; i <= 2; ++i) {
1664 for (int j = 1; j <= 2; ++j) {
1666 if (codeA != 0 && codeA != abs(coupSUSY->idChar(i))
1667 && codeA != abs(coupSUSY->idChar(j))) continue;
1669 && ( codeA != max(coupSUSY->idChar(i),coupSUSY->idChar(j))
1670 || codeB != min(coupSUSY->idChar(i),coupSUSY->idChar(j)) ) )
1672 sigmaPtr = new Sigma2qqbar2charchar( i,-j, iproc);
1673 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
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) );
1697 if (settings.flag("NewGaugeBoson:ffbar2Wprime")) {
1698 sigmaPtr = new Sigma1ffbar2Wprime();
1699 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1701 if (settings.flag("NewGaugeBoson:ffbar2R0")) {
1702 sigmaPtr = new Sigma1ffbar2Rhorizontal();
1703 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1712 if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2WR")) {
1713 sigmaPtr = new Sigma1ffbar2WRight();
1714 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1716 if (leftrights || settings.flag("LeftRightSymmmetry:ll2HL")) {
1717 sigmaPtr = new Sigma1ll2Hchgchg(1);
1718 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1720 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLe")) {
1721 sigmaPtr = new Sigma2lgm2Hchgchgl(1, 11);
1722 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1724 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLmu")) {
1725 sigmaPtr = new Sigma2lgm2Hchgchgl(1, 13);
1726 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1728 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HLtau")) {
1729 sigmaPtr = new Sigma2lgm2Hchgchgl(1, 15);
1730 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1732 if (leftrights || settings.flag("LeftRightSymmmetry:ff2HLff")) {
1733 sigmaPtr = new Sigma3ff2HchgchgfftWW(1);
1734 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1736 if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2HLHL")) {
1737 sigmaPtr = new Sigma2ffbar2HchgchgHchgchg(1);
1738 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1740 if (leftrights || settings.flag("LeftRightSymmmetry:ll2HR")) {
1741 sigmaPtr = new Sigma1ll2Hchgchg(2);
1742 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1744 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRe")) {
1745 sigmaPtr = new Sigma2lgm2Hchgchgl(2, 11);
1746 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1748 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRmu")) {
1749 sigmaPtr = new Sigma2lgm2Hchgchgl(2, 13);
1750 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1752 if (leftrights || settings.flag("LeftRightSymmmetry:lgm2HRtau")) {
1753 sigmaPtr = new Sigma2lgm2Hchgchgl(2, 15);
1754 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1756 if (leftrights || settings.flag("LeftRightSymmmetry:ff2HRff")) {
1757 sigmaPtr = new Sigma3ff2HchgchgfftWW(2);
1758 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1760 if (leftrights || settings.flag("LeftRightSymmmetry:ffbar2HRHR")) {
1761 sigmaPtr = new Sigma2ffbar2HchgchgHchgchg(2);
1762 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1771 if (leptoquarks || settings.flag("LeptoQuark:qg2LQl")) {
1772 sigmaPtr = new Sigma2qg2LeptoQuarkl;
1773 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1775 if (leptoquarks || settings.flag("LeptoQuark:gg2LQLQbar")) {
1776 sigmaPtr = new Sigma2gg2LQLQbar;
1777 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1779 if (leptoquarks || settings.flag("LeptoQuark:qqbar2LQLQbar")) {
1780 sigmaPtr = new Sigma2qqbar2LQLQbar;
1781 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1790 if (excitedfermions || settings.flag("ExcitedFermion:ug2uStar")) {
1791 sigmaPtr = new Sigma1qg2qStar(2);
1792 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1794 if (excitedfermions || settings.flag("ExcitedFermion:sg2sStar")) {
1795 sigmaPtr = new Sigma1qg2qStar(3);
1796 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1798 if (excitedfermions || settings.flag("ExcitedFermion:cg2cStar")) {
1799 sigmaPtr = new Sigma1qg2qStar(4);
1800 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1802 if (excitedfermions || settings.flag("ExcitedFermion:bg2bStar")) {
1803 sigmaPtr = new Sigma1qg2qStar(5);
1804 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1806 if (excitedfermions || settings.flag("ExcitedFermion:egm2eStar")) {
1807 sigmaPtr = new Sigma1lgm2lStar(11);
1808 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1810 if (excitedfermions || settings.flag("ExcitedFermion:mugm2muStar")) {
1811 sigmaPtr = new Sigma1lgm2lStar(13);
1812 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1814 if (excitedfermions || settings.flag("ExcitedFermion:taugm2tauStar")) {
1815 sigmaPtr = new Sigma1lgm2lStar(15);
1816 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1818 if (excitedfermions || settings.flag("ExcitedFermion:qq2dStarq")) {
1819 sigmaPtr = new Sigma2qq2qStarq(1);
1820 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1822 if (excitedfermions || settings.flag("ExcitedFermion:qq2uStarq")) {
1823 sigmaPtr = new Sigma2qq2qStarq(2);
1824 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1826 if (excitedfermions || settings.flag("ExcitedFermion:qq2sStarq")) {
1827 sigmaPtr = new Sigma2qq2qStarq(3);
1828 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1830 if (excitedfermions || settings.flag("ExcitedFermion:qq2cStarq")) {
1831 sigmaPtr = new Sigma2qq2qStarq(4);
1832 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1834 if (excitedfermions || settings.flag("ExcitedFermion:qq2bStarq")) {
1835 sigmaPtr = new Sigma2qq2qStarq(5);
1836 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1838 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2eStare")) {
1839 sigmaPtr = new Sigma2qqbar2lStarlbar(11);
1840 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1842 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2nueStarnue")) {
1843 sigmaPtr = new Sigma2qqbar2lStarlbar(12);
1844 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1846 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2muStarmu")) {
1847 sigmaPtr = new Sigma2qqbar2lStarlbar(13);
1848 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1850 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2numuStarnumu")) {
1851 sigmaPtr = new Sigma2qqbar2lStarlbar(14);
1852 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1854 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2tauStartau")) {
1855 sigmaPtr = new Sigma2qqbar2lStarlbar(15);
1856 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1858 if (excitedfermions || settings.flag("ExcitedFermion:qqbar2nutauStarnutau")) {
1859 sigmaPtr = new Sigma2qqbar2lStarlbar(16);
1860 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
1868 if (settings.flag("ContactInteractions:QCqqbar2qqbar")) {
1869 sigmaPtr = new Sigma2QCqqbar2qqbar();
1870 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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);
1882 if (particleDataPtr->spinType( 4900101) != 2)
1883 particleDataPtr->spinType( 4900101, 2);
1885 int spinqv = settings.mode("HiddenValley:spinqv");
1886 if (particleDataPtr->spinType( 4900101) != 2 * spinqv + 1)
1887 particleDataPtr->spinType( 4900101, 2 * spinqv + 1);
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,
1895 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1897 if (hiddenvalleys || settings.flag("HiddenValley:gg2UvUvbar")) {
1898 sigmaPtr = new Sigma2gg2qGqGbar( 4900002, 4902, spinFv,
1900 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1902 if (hiddenvalleys || settings.flag("HiddenValley:gg2SvSvbar")) {
1903 sigmaPtr = new Sigma2gg2qGqGbar( 4900003, 4903, spinFv,
1905 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1907 if (hiddenvalleys || settings.flag("HiddenValley:gg2CvCvbar")) {
1908 sigmaPtr = new Sigma2gg2qGqGbar( 4900004, 4904, spinFv,
1910 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1912 if (hiddenvalleys || settings.flag("HiddenValley:gg2BvBvbar")) {
1913 sigmaPtr = new Sigma2gg2qGqGbar( 4900005, 4905, spinFv,
1915 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
1917 if (hiddenvalleys || settings.flag("HiddenValley:gg2TvTvbar")) {
1918 sigmaPtr = new Sigma2gg2qGqGbar( 4900006, 4906, spinFv,
1920 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
2019 if (extraDimGstars || settings.flag("ExtraDimensionsG*:ffbar2G*")) {
2020 sigmaPtr = new Sigma1ffbar2GravitonStar;
2021 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2023 if (settings.flag("ExtraDimensionsG*:gg2G*g")) {
2024 sigmaPtr = new Sigma2gg2GravitonStarg;
2025 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2027 if (settings.flag("ExtraDimensionsG*:qg2G*q")) {
2028 sigmaPtr = new Sigma2qg2GravitonStarq;
2029 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2031 if (settings.flag("ExtraDimensionsG*:qqbar2G*g")) {
2032 sigmaPtr = new Sigma2qqbar2GravitonStarg;
2033 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
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) );
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) );
2054 if (extraDimLEDmono || settings.flag("ExtraDimensionsLED:qg2Gq")) {
2055 sigmaPtr = new Sigma2qg2LEDUnparticleq( true );
2056 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2058 if (extraDimLEDmono || settings.flag("ExtraDimensionsLED:qqbar2Gg")) {
2059 sigmaPtr = new Sigma2qqbar2LEDUnparticleg( true );
2060 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2062 if (settings.flag("ExtraDimensionsLED:ffbar2GZ")) {
2063 sigmaPtr = new Sigma2ffbar2LEDUnparticleZ( true );
2064 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2066 if (settings.flag("ExtraDimensionsLED:ffbar2Ggamma")) {
2067 sigmaPtr = new Sigma2ffbar2LEDUnparticlegamma( true );
2068 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2070 if (settings.flag("ExtraDimensionsLED:ffbar2gammagamma")) {
2071 sigmaPtr = new Sigma2ffbar2LEDgammagamma( true );
2072 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2074 if (settings.flag("ExtraDimensionsLED:gg2gammagamma")) {
2075 sigmaPtr = new Sigma2gg2LEDgammagamma( true );
2076 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2078 if (settings.flag("ExtraDimensionsLED:ffbar2llbar")) {
2079 sigmaPtr = new Sigma2ffbar2LEDllbar( true );
2080 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2082 if (settings.flag("ExtraDimensionsLED:gg2llbar")) {
2083 sigmaPtr = new Sigma2gg2LEDllbar( true );
2084 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
2093 if (extraDimUnpartmono || settings.flag("ExtraDimensionsUnpart:qg2Uq")) {
2094 sigmaPtr = new Sigma2qg2LEDUnparticleq( false );
2095 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2097 if (extraDimUnpartmono || settings.flag("ExtraDimensionsUnpart:qqbar2Ug")) {
2098 sigmaPtr = new Sigma2qqbar2LEDUnparticleg( false );
2099 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2101 if (settings.flag("ExtraDimensionsUnpart:ffbar2UZ")) {
2102 sigmaPtr = new Sigma2ffbar2LEDUnparticleZ( false );
2103 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2105 if (settings.flag("ExtraDimensionsUnpart:ffbar2Ugamma")) {
2106 sigmaPtr = new Sigma2ffbar2LEDUnparticlegamma( false );
2107 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2109 if (settings.flag("ExtraDimensionsUnpart:ffbar2gammagamma")) {
2110 sigmaPtr = new Sigma2ffbar2LEDgammagamma( false );
2111 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2113 if (settings.flag("ExtraDimensionsUnpart:gg2gammagamma")) {
2114 sigmaPtr = new Sigma2gg2LEDgammagamma( false );
2115 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2117 if (settings.flag("ExtraDimensionsUnpart:ffbar2llbar")) {
2118 sigmaPtr = new Sigma2ffbar2LEDllbar( false );
2119 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2121 if (settings.flag("ExtraDimensionsUnpart:gg2llbar")) {
2122 sigmaPtr = new Sigma2gg2LEDllbar( false );
2123 containerPtrs.push_back( new ProcessContainer(sigmaPtr) );
2131 //--------------------------------------------------------------------------
2133 // Routine to initialize list of second hard processes.
2135 bool SetupContainers::init2(vector<ProcessContainer*>& container2Ptrs,
2136 Settings& settings) {
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();
2144 SigmaProcess* sigmaPtr;
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) );
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) );
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) );
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) );
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) );
2272 // A single gamma*/Z0.
2273 if (settings.flag("SecondHard:SingleGmZ")) {
2274 sigmaPtr = new Sigma1ffbar2gmZ;
2275 container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
2279 if (settings.flag("SecondHard:SingleW")) {
2280 sigmaPtr = new Sigma1ffbar2W;
2281 container2Ptrs.push_back( new ProcessContainer(sigmaPtr) );
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) );
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) );
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) );
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) );
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) );
2331 //==========================================================================
2333 } // end namespace Pythia8