PYTHIA  8.314
DireSplittingsQCD.h
1 // DireSplittingsQCD.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2025 Stefan Prestel, Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Header file of QCD splittings for the Dire parton shower.
7 
8 #ifndef Pythia8_DireSplittingsQCD_H
9 #define Pythia8_DireSplittingsQCD_H
10 
11 #define ZETA3 1.202056903159594
12 #define DIRE_SPLITTINGSQCD_VERSION "2.002"
13 
14 #include "Pythia8/Basics.h"
15 #include "Pythia8/BeamParticle.h"
16 #include "Pythia8/ParticleData.h"
17 #include "Pythia8/PythiaStdlib.h"
18 #include "Pythia8/Settings.h"
19 #include "Pythia8/StandardModel.h"
20 
21 #include "Pythia8/DireSplittings.h"
22 
23 namespace Pythia8 {
24 
25 //==========================================================================
26 
28 
29 public:
30 
31  // Constructor and destructor.
32  DireSplittingQCD(string idIn, int softRS, Settings* settings,
33  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
34  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
35  DireSplitting(idIn, softRS, settings, particleData, rndm, beamA, beamB,
36  coupSM, info, direInfo) {
37  init();
38  asSchemeISR=settingsPtr->mode("DireSpace:alphasScheme");
39  asSchemeFSR=settingsPtr->mode("DireTimes:alphasScheme");}
40  virtual ~DireSplittingQCD() {}
41 
42  void init();
43 
44  // VARIABLES
45  double CA, TR, CF, pTmin, pT2minVariations;
46  int NF_qcd_fsr, orderSave;
47  bool usePDFalphas, doVariations, doCorrelations, doMECs;
48  double alphaSorder, alphaS2pi;
49 
50  AlphaStrong alphaS;
51 
52  static const double SMALL_TEVOL;
53 
54  // AUXILIARY FUNCTIONS
55  double getNF(double pT2);
56  double GammaQCD2(double NF=5.);
57  double GammaQCD3(double NF=5.);
58  double betaQCD0(double NF=5.);
59  double betaQCD1(double NF=5.);
60  double betaQCD2(double NF=5.);
61 
62  // Function to calculate the correct running coupling/2*Pi value, including
63  // renormalisation scale variations + threshold matching.
64  double as2Pi(double pT2, int orderNow = -1, double renormMultFacNow = -1.);
65 
66  double softRescaleInt(int order);
67  double softRescaleDiff(int order, double pT2, double renormMultFacNow = -1.);
68  double beta0Endpoint(int order, double m2dip, double pT2, double z,
69  double renormMultFacNow = -1.);
70 
71  double polevl(double x,double* coef,int N );
72  double DiLog(double x);
73 
74  vector<int> sharedColor(const Event& event, int iRad, int iRec);
75  bool hasSharedColor(const Event& event, int iRad, int iRec);
76 
77  int findCol(int col, vector<int> iExc, const Event&, int type);
78 
79  bool useFastFunctions() { return true; }
80 
81  virtual vector <int> radAndEmt(int idDaughter, int)
82  { return createvector<int>(motherID(idDaughter))(sisterID(idDaughter)); }
83  virtual bool isPartial() { return true; }
84 
85  virtual int couplingType (int, int) { return 1; }
86  virtual double coupling (double z, double pT2, double m2dip,
87  double renormMultFacNow = -1.,
88  pair<int,bool> radBef = pair<int,bool>(),
89  pair<int,bool> recBef = pair<int,bool>()) {
90  if (!usePDFalphas && alphaSorder == 0) return alphaS2pi;
91  double scale2 = couplingScale2 ( z, pT2, m2dip, radBef, recBef);
92  if (scale2 < 0.) scale2 = pT2;
93  if (z < 0.) scale2 = pT2;
94  // Return coupling. Set up such the argument is NOT RESCALED in as2Pi
95  // function - rather guarantee that INPUT pT2/scale has desired value.
96  double fac = (renormMultFacNow > 0.) ? renormMultFacNow : renormMultFac;
97  return as2Pi(scale2, orderSave, fac);
98  }
99 
100  // Function determining the argument of the running coupling based on the
101  // splitting variables. Current default: Evolution variable.
102  // DireTimes:alphasScheme = 0 : default
103  // DireTimes:alphasScheme = 1 : collinear kinematic kT for all splittings
104  // involving incoming particles.
105  // DireTimes:alphasScheme = 2 : eikonal factor sij*sjk/sik
106  int asSchemeISR, asSchemeFSR;
107  virtual double couplingScale2 (double z, double pT2, double m2dip,
108  pair<int,bool> radBef, pair<int,bool> recBef) {
109  if ( radBef.second && recBef.second) {
110  if (asSchemeFSR == 0) return pT2;
111  if (asSchemeFSR == 1) return pT2;
112  if (asSchemeFSR == 2) {
113  double ycs = pT2/m2dip/(1.-z);
114  double sij = ycs*m2dip;
115  double sjk = (1.-z)*m2dip;
116  double sik = m2dip - sij - sjk;
117  return sij*sjk/sik;
118  }
119  } else if ( radBef.second && !recBef.second) {
120  if (asSchemeFSR == 0) return pT2;
121  if (asSchemeFSR == 1) {
122  double zcs = z;
123  double xcs = m2dip * zcs * (1.-zcs) / (pT2 + m2dip * zcs * (1.-zcs));
124  double kt2 = m2dip * (1.-xcs) / xcs * zcs * (1.-zcs);
125  return kt2;
126  }
127  if (asSchemeFSR == 2) {
128  double zcs = z;
129  double xcs = m2dip * zcs * (1.-zcs) / (pT2 + m2dip * zcs * (1.-zcs));
130  return (1-zcs)*(1-xcs)/xcs/zcs*m2dip;
131  }
132  } else if (!radBef.second && recBef.second) {
133  if (asSchemeISR == 0) return pT2;
134  if (asSchemeISR == 1) {
135  double xcs = z;
136  double ucs = pT2/m2dip / (1.-z);
137  double kt2 = m2dip * (1-xcs) / xcs * ucs * (1.-ucs);
138  return kt2;
139  }
140  if (asSchemeISR == 2) {
141  double xcs = z;
142  double ucs = pT2/m2dip / (1.-z);
143  return (1-xcs)/xcs*ucs/(1-ucs)*m2dip;
144  }
145  } else if (!radBef.second && !recBef.second) {
146  if (asSchemeISR == 0) return pT2;
147  if (asSchemeISR == 1) {
148  double xcs = ( z * (1.-z) - pT2/m2dip) / (1.-z);
149  double vcs = pT2/m2dip / (1.-z);
150  double kt2 = m2dip * vcs * (1.-xcs-vcs) / xcs;
151  return kt2;
152  }
153  if (asSchemeISR == 2) {
154  double xcs = ( z * (1.-z) - pT2/m2dip) / (1.-z);
155  double vcs = pT2/m2dip / (1.-z);
156  double sab = m2dip/xcs;
157  double saj = vcs*sab;
158  double sjb = sab-saj-m2dip;
159  return abs(saj*sjb/sab);
160  }
161  }
162  return -1.;
163  }
164 
165  // Functions that allow different ordering variables for emissions.
166  // Note: Only works after splitInfo has been properly filled.
167  virtual double getJacobian( const Event& = Event(),
168  PartonSystems* partonSystems = 0);
169  virtual unordered_map<string, double> getPhasespaceVars(
170  const Event& = Event(), PartonSystems* = 0);
171 
172  bool useBackboneGluons, doGeneralizedKernel;
173  double sCoef(int powz) { vector<double> tmp
174  = settingsPtr->pvec("DireGeneralizedKernel:softCoeffs:" + name());
175  return tmp[powz+1]; }
176  double sExp(int powz) { vector<double> tmp
177  = settingsPtr->pvec("DireGeneralizedKernel:softExps:" + name());
178  return tmp[powz+1]; }
179  double kCoef(int powz) { vector<double> tmp
180  = settingsPtr->pvec("DireGeneralizedKernel:kappaCoeffs:" + name());
181  return tmp[powz+1]; }
182  double kExp(int powz){ vector<double> tmp
183  = settingsPtr->pvec("DireGeneralizedKernel:kappaExps:" + name());
184  return tmp[powz+1]; }
185  double cCoef(int powz) { vector<double> tmp
186  = settingsPtr->pvec("DireGeneralizedKernel:collCoeffs:" + name());
187  return tmp[powz+1]; }
188  double cExp(int powz) { vector<double> tmp
189  = settingsPtr->pvec("DireGeneralizedKernel:collExps:" + name());
190  return tmp[powz+1]; }
191  double fCoef() { double tmp
192  = settingsPtr->parm("DireGeneralizedKernel:finCoeffs:" + name());
193  return tmp; }
194 
195  bool hasMECBef(const Event& state, double pT2);
196  bool hasMECAft(const Event& state, double pT2);
197 
198 };
199 
200 //==========================================================================
201 
203 
204 public:
205 
206  Dire_fsr_qcd_Q2QGG(string idIn, int softRS, Settings* settings,
207  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
208  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
209  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
210  coupSM, info, direInfo), is_sai_endpoint_save(false) {}
211 
212  bool canRadiate ( const Event&, pair<int,int>,
213  unordered_map<string,bool> = unordered_map<string,bool>(),
214  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
215 
216  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
217  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
218 
219  vector <int> radAndEmt(int idDaughter, int) {
220  return createvector<int>(idDaughter)(21)(21);}
221  int nEmissions() { return 2; }
222  int kinMap() { return 2;}
223  bool canUseForBranching() { return true; }
224 
225  vector<pair<int,int> > radAndEmtCols(int iRad, int colType, Event state);
226 
227  // Return colours of recombined radiator (before splitting!)
228  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
229  int colEmtAfter, int acolEmtAfter);
230 
231  // Return id of recombined radiator (before splitting!)
232  int radBefID(int idRadAfter, int idEmtAfter);
233 
234  double gaugeFactor ( int=0, int=0 );
235  double symmetryFactor ( int=0, int=0 );
236 
237  // Pick z for new splitting.
238  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
239 
240  // New overestimates, z-integrated versions.
241  double overestimateInt(double zMinAbs,double zMaxAbs,
242  double pT2Old, double m2dip, int order = -1);
243 
244  // Return kernel for new splitting.
245  double overestimateDiff(double z, double m2dip, int order = -1);
246 
247  // Functions to calculate the kernel from SplitInfo information.
248  bool calc(const Event& state = Event(), int order = -1);
249 
250  double counterTerm(double si1, double si2, double sj1,
251  double sj2, double sij, double s12);
252 
253  // Treatment of additional virtual corrections.
254  bool allow_sai_endpoint_for_kinematics() { return true; }
255  bool allow_xa_endpoint_for_kinematics() { return false; }
256  // Functions to set if kernel should contribute to a kinematical endpoint.
257  void try_sai_endpoint() { is_sai_endpoint_save = (rndmPtr->flat() < 0.5); }
258  void try_xa_endpoint() { return; }
259  // Return endpoint information.
260  bool is_sai_endpoint() { return is_sai_endpoint_save; }
261  bool is_xa_endpoint() { return false; }
262  bool is_sai_endpoint_save;
263 
264 };
265 
266 //==========================================================================
267 
269 
270 public:
271 
272  Dire_fsr_qcd_G2GGG(string idIn, int softRS, Settings* settings,
273  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
274  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
275  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
276  coupSM, info, direInfo), is_sai_endpoint_save(false) {}
277 
278  bool canRadiate ( const Event&, pair<int,int>,
279  unordered_map<string,bool> = unordered_map<string,bool>(),
280  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
281 
282  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
283  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
284 
285  vector <int> radAndEmt(int,int) { return createvector<int>(21)(21)(21);}
286  int nEmissions() { return 2; }
287  int kinMap() { return 2;}
288  bool canUseForBranching() { return true; }
289 
290  vector<pair<int,int> > radAndEmtCols(int iRad, int colType, Event state);
291 
292  // Return colours of recombined radiator (before splitting!)
293  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
294  int colEmtAfter, int acolEmtAfter);
295 
296  // Return id of recombined radiator (before splitting!)
297  int radBefID(int idRadAfter, int idEmtAfter);
298 
299  double gaugeFactor ( int=0, int=0 );
300  double symmetryFactor ( int=0, int=0 );
301 
302  // Pick z for new splitting.
303  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
304 
305  // New overestimates, z-integrated versions.
306  double overestimateInt(double zMinAbs,double zMaxAbs,
307  double pT2Old, double m2dip, int order = -1);
308 
309  // Return kernel for new splitting.
310  double overestimateDiff(double z, double m2dip, int order = -1);
311 
312  // Functions to calculate the kernel from SplitInfo information.
313  bool calc(const Event& state = Event(), int order = -1);
314 
315  double counterTerm(double si1, double si2, double sj1,
316  double sj2, double sij, double s12);
317 
318  // Treatment of additional virtual corrections.
319  bool allow_sai_endpoint_for_kinematics() { return true; }
320  bool allow_xa_endpoint_for_kinematics() { return false; }
321  // Functions to set if kernel should contribute to a kinematical endpoint.
322  void try_sai_endpoint() { is_sai_endpoint_save = (rndmPtr->flat() < 0.5); }
323  void try_xa_endpoint() { return; }
324  // Return endpoint information.
325  bool is_sai_endpoint() { return is_sai_endpoint_save; }
326  bool is_xa_endpoint() { return false; }
327  bool is_sai_endpoint_save;
328 
329 };
330 
331 //==========================================================================
332 
334 
335 public:
336 
337  Dire_fsr_qcd_Q2Qqqbar(int idEmtAfterIn, string idIn, int softRS,
338  Settings* settings,
339  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
340  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
341  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
342  coupSM, info, direInfo), idEmtAfterSave(idEmtAfterIn),
343  is_sai_endpoint_save(false)
344  { nGluonToQuark = settingsPtr->mode("TimeShower:nGluonToQuark"); }
345 
346  bool canRadiate ( const Event&, pair<int,int>,
347  unordered_map<string,bool> = unordered_map<string,bool>(),
348  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
349 
350  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
351  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
352 
353  virtual vector <int> radAndEmt(int idRadBef, int) {
354  return createvector<int>(idRadBef)(idEmtAfterSave)(-idEmtAfterSave);
355  }
356 
357  int nEmissions() { return 2;}
358  int kinMap() { return 2;}
359  bool canUseForBranching() { return true; }
360 
361  vector<pair<int,int> > radAndEmtCols(int iRad, int colType, Event state);
362 
363  // Return colours of recombined radiator (before splitting!)
364  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
365  int colEmtAfter, int acolEmtAfter);
366 
367  // Return id of recombined radiator (before splitting!)
368  int radBefID(int idRadAfter, int idEmtAfter);
369 
370  double gaugeFactor ( int=0, int=0 );
371  double symmetryFactor ( int=0, int=0 );
372 
373  // Pick z for new splitting.
374  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
375 
376  // New overestimates, z-integrated versions.
377  double overestimateInt(double zMinAbs,double zMaxAbs,
378  double pT2Old, double m2dip, int order = -1);
379 
380  // Return kernel for new splitting.
381  double overestimateDiff(double z, double m2dip, int order = -1);
382 
383  // Functions to calculate the kernel from SplitInfo information.
384  bool calc(const Event& state = Event(), int order = -1);
385 
386  int nGluonToQuark, idEmtAfterSave;
387 
388  double counterTerm(double si1, double si2, double sj1,
389  double sj2, double sij, double s12);
390 
391  // Treatment of additional virtual corrections.
392  bool allow_sai_endpoint_for_kinematics() { return true; }
393  bool allow_xa_endpoint_for_kinematics() { return false; }
394  // Functions to set if kernel should contribute to a kinematical endpoint.
395  void try_sai_endpoint() { is_sai_endpoint_save = (rndmPtr->flat() < 0.5); }
396  void try_xa_endpoint() { return; }
397  // Return endpoint information.
398  bool is_sai_endpoint() { return is_sai_endpoint_save; }
399  bool is_xa_endpoint() { return false; }
400  bool is_sai_endpoint_save;
401 
402 };
403 
404 //==========================================================================
405 
407 
408 public:
409 
410  Dire_fsr_qcd_G2Gqqbar(int idEmtAfterIn, string idIn, int softRS,
411  Settings* settings, ParticleData* particleData, Rndm* rndm,
412  BeamParticlePtr beamA, BeamParticlePtr beamB, CoupSM* coupSM, Info* info,
413  DireInfo* direInfo) :
414  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
415  coupSM, info, direInfo),
416  idEmtAfterSave(idEmtAfterIn), is_sai_endpoint_save(false)
417  { nGluonToQuark = settingsPtr->mode("TimeShower:nGluonToQuark"); }
418 
419  bool canRadiate ( const Event&, pair<int,int>,
420  unordered_map<string,bool> = unordered_map<string,bool>(),
421  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
422 
423  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
424  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
425 
426  virtual vector <int> radAndEmt(int, int colType) {
427  int sign = (colType > 0) ? 1 : -1;
428  int idEmtAft = sign * idEmtAfterSave;
429  return createvector<int>(21)(idEmtAft)(-idEmtAft);
430  }
431 
432  int nEmissions() { return 2; }
433  int kinMap() { return 2;}
434  bool canUseForBranching() { return true; }
435 
436  vector<pair<int,int> > radAndEmtCols(int iRad, int colType, Event state);
437 
438  // Return colours of recombined radiator (before splitting!)
439  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
440  int colEmtAfter, int acolEmtAfter);
441 
442  // Return id of recombined radiator (before splitting!)
443  int radBefID(int idRadAfter, int idEmtAfter);
444 
445  double gaugeFactor ( int=0, int=0 );
446  double symmetryFactor ( int=0, int=0 );
447 
448  // Pick z for new splitting.
449  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
450 
451  // New overestimates, z-integrated versions.
452  double overestimateInt(double zMinAbs,double zMaxAbs,
453  double pT2Old, double m2dip, int order = -1);
454 
455  // Return kernel for new splitting.
456  double overestimateDiff(double z, double m2dip, int order = -1);
457 
458  // Functions to calculate the kernel from SplitInfo information.
459  bool calc(const Event& state = Event(), int order = -1);
460 
461  int nGluonToQuark, idEmtAfterSave;
462 
463  double counterTerm(double si1, double si2, double sj1,
464  double sj2, double sij, double s12);
465 
466  // Treatment of additional virtual corrections.
467  bool allow_sai_endpoint_for_kinematics() { return true; }
468  bool allow_xa_endpoint_for_kinematics() { return false; }
469  // Functions to set if kernel should contribute to a kinematical endpoint.
470  void try_sai_endpoint() { is_sai_endpoint_save = (rndmPtr->flat() < 0.5); }
471  void try_xa_endpoint() { return; }
472  // Return endpoint information.
473  bool is_sai_endpoint() { return is_sai_endpoint_save; }
474  bool is_xa_endpoint() { return false; }
475  bool is_sai_endpoint_save;
476 
477 };
478 
479 //==========================================================================
480 
482 
483 public:
484 
485  Dire_fsr_qcd_Q2QG(string idIn, int softRS, Settings* settings,
486  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
487  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
488  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
489  coupSM, info, direInfo){}
490 
491  bool canRadiate ( const Event&, pair<int,int>,
492  unordered_map<string,bool> = unordered_map<string,bool>(),
493  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
494  int nEmissions() { return 1; }
495 
496  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
497  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
498 
499  int kinMap ();
500 
501  // Return id of mother after splitting.
502  int motherID(int idDaughter);
503 
504  // Return id of emission.
505  int sisterID(int idDaughter);
506 
507  // Return id of recombined radiator (before splitting!)
508  int radBefID(int idRadAfter, int idEmtAfter);
509 
510  vector <int> recPositions( const Event&, int, int);
511 
512  // Return colours of recombined radiator (before splitting!)
513  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
514  int colEmtAfter, int acolEmtAfter);
515 
516  double gaugeFactor ( int=0, int=0 );
517  double symmetryFactor ( int=0, int=0 );
518 
519  // Pick z for new splitting.
520  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
521 
522  // New overestimates, z-integrated versions.
523  double overestimateInt(double zMinAbs,double zMaxAbs,
524  double pT2Old, double m2dip, int order = -1);
525 
526  // Return kernel for new splitting.
527  double overestimateDiff(double z, double m2dip, int order = -1);
528 
529  // Functions to calculate the kernel from SplitInfo information.
530  bool calc(const Event& state = Event(), int order = -1);
531 
532 };
533 
534 //==========================================================================
535 
537 
538 public:
539 
540  Dire_fsr_qcd_Q2GQ(string idIn, int softRS, Settings* settings,
541  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
542  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
543  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
544  coupSM, info, direInfo){}
545 
546  bool canRadiate ( const Event&, pair<int,int>,
547  unordered_map<string,bool> = unordered_map<string,bool>(),
548  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
549 
550  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
551  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
552 
553  int nEmissions() { return 1; }
554 
555  int kinMap ();
556 
557  // Return id of mother after splitting.
558  int motherID(int idDaughter);
559 
560  // Return id of emission.
561  int sisterID(int idDaughter);
562 
563  // Return id of recombined radiator (before splitting!)
564  int radBefID(int idRadAfter, int idEmtAfter);
565 
566  vector <int> recPositions( const Event&, int, int);
567 
568  // Return colours of recombined radiator (before splitting!)
569  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
570  int colEmtAfter, int acolEmtAfter);
571 
572  double gaugeFactor ( int=0, int=0 );
573  double symmetryFactor ( int=0, int=0 );
574 
575  // Pick z for new splitting.
576  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
577 
578  // New overestimates, z-integrated versions.
579  double overestimateInt(double zMinAbs,double zMaxAbs,
580  double pT2Old, double m2dip, int order = -1);
581 
582  // Return kernel for new splitting.
583  double overestimateDiff(double z, double m2dip, int order = -1);
584 
585  // Functions to calculate the kernel from SplitInfo information.
586  bool calc(const Event& state = Event(), int order = -1);
587 
588 };
589 
590 //==========================================================================
591 
593 
594 public:
595 
596  Dire_fsr_qcd_G2GG1(string idIn, int softRS, Settings* settings,
597  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
598  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
599  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
600  coupSM, info, direInfo){}
601 
602  bool canRadiate ( const Event&, pair<int,int>,
603  unordered_map<string,bool> = unordered_map<string,bool>(),
604  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
605 
606  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
607  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
608 
609  int nEmissions() { return 1; }
610 
611  int kinMap ();
612 
613  // Return id of mother after splitting.
614  int motherID(int idDaughter);
615 
616  // Return id of emission.
617  int sisterID(int idDaughter);
618 
619  // Return id of recombined radiator (before splitting!)
620  int radBefID(int idRadAfter, int idEmtAfter);
621 
622  vector <int> recPositions( const Event&, int, int);
623 
624  // Return colours of recombined radiator (before splitting!)
625  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
626  int colEmtAfter, int acolEmtAfter);
627 
628  double gaugeFactor ( int=0, int=0 );
629  double symmetryFactor ( int=0, int=0 );
630 
631  // Pick z for new splitting.
632  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
633 
634  // New overestimates, z-integrated versions.
635  double overestimateInt(double zMinAbs,double zMaxAbs,
636  double pT2Old, double m2dip, int order = -1);
637 
638  // Return kernel for new splitting.
639  double overestimateDiff(double z, double m2dip, int order = -1);
640 
641  // Functions to calculate the kernel from SplitInfo information.
642  bool calc(const Event& state = Event(), int order = -1);
643 
644 };
645 
646 //==========================================================================
647 
649 
650 public:
651 
652  Dire_fsr_qcd_G2GG2(string idIn, int softRS, Settings* settings,
653  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
654  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
655  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
656  coupSM, info, direInfo){}
657 
658  bool canRadiate ( const Event&, pair<int,int>,
659  unordered_map<string,bool> = unordered_map<string,bool>(),
660  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
661 
662  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
663  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
664 
665  int nEmissions() { return 1; }
666 
667  int kinMap ();
668 
669  // Return id of mother after splitting.
670  int motherID(int idDaughter);
671 
672  // Return id of emission.
673  int sisterID(int idDaughter);
674 
675  // Return id of recombined radiator (before splitting!)
676  int radBefID(int idRadAfter, int idEmtAfter);
677 
678  vector <int> recPositions( const Event&, int, int);
679 
680  // Return colours of recombined radiator (before splitting!)
681  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
682  int colEmtAfter, int acolEmtAfter);
683 
684  double gaugeFactor ( int=0, int=0 );
685  double symmetryFactor ( int=0, int=0 );
686 
687  // Pick z for new splitting.
688  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
689 
690  // New overestimates, z-integrated versions.
691  double overestimateInt(double zMinAbs,double zMaxAbs,
692  double pT2Old, double m2dip, int order = -1);
693 
694  // Return kernel for new splitting.
695  double overestimateDiff(double z, double m2dip, int order = -1);
696 
697  // Functions to calculate the kernel from SplitInfo information.
698  bool calc(const Event& state = Event(), int order = -1);
699 
700 };
701 
702 //==========================================================================
703 
705 
706 public:
707 
708  Dire_fsr_qcd_G2QQ1(string idIn, int softRS, Settings* settings,
709  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
710  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
711  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
712  coupSM, info, direInfo){}
713 
714  bool canRadiate ( const Event&, pair<int,int>,
715  unordered_map<string,bool> = unordered_map<string,bool>(),
716  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
717 
718  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
719  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
720 
721  int nEmissions() { return 1; }
722  bool isPartial() { return false; }
723  int kinMap ();
724 
725  // Return id of mother after splitting.
726  int motherID(int idDaughter);
727 
728  // Return id of emission.
729  int sisterID(int idDaughter);
730 
731  // Return id of recombined radiator (before splitting!)
732  int radBefID(int idRadAfter, int idEmtAfter);
733 
734  vector <int> recPositions( const Event&, int, int);
735 
736  // Return colours of recombined radiator (before splitting!)
737  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
738  int colEmtAfter, int acolEmtAfter);
739 
740  double gaugeFactor ( int=0, int=0 );
741  double symmetryFactor ( int=0, int=0 );
742 
743  // Pick z for new splitting.
744  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
745 
746  // New overestimates, z-integrated versions.
747  double overestimateInt(double zMinAbs,double zMaxAbs,
748  double pT2Old, double m2dip, int order = -1);
749 
750  // Return kernel for new splitting.
751  double overestimateDiff(double z, double m2dip, int order = -1);
752 
753  // Functions to calculate the kernel from SplitInfo information.
754  bool calc(const Event& state = Event(), int order = -1);
755 
756 };
757 
758 //==========================================================================
759 
761 
762 public:
763 
764  Dire_fsr_qcd_G2QQ2(string idIn, int softRS, Settings* settings,
765  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
766  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
767  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
768  coupSM, info, direInfo){}
769 
770  bool canRadiate ( const Event&, pair<int,int>,
771  unordered_map<string,bool> = unordered_map<string,bool>(),
772  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
773 
774  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
775  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
776 
777  int nEmissions() { return 1; }
778  bool isPartial() { return false; }
779 
780  int kinMap ();
781 
782  // Return id of mother after splitting.
783  int motherID(int idDaughter);
784 
785  // Return id of emission.
786  int sisterID(int idDaughter);
787 
788  // Return id of recombined radiator (before splitting!)
789  int radBefID(int idRadAfter, int idEmtAfter);
790 
791  vector <int> recPositions( const Event&, int, int);
792 
793  // Return colours of recombined radiator (before splitting!)
794  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
795  int colEmtAfter, int acolEmtAfter);
796 
797  double gaugeFactor ( int=0, int=0 );
798  double symmetryFactor ( int=0, int=0 );
799 
800  // Pick z for new splitting.
801  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
802 
803  // New overestimates, z-integrated versions.
804  double overestimateInt(double zMinAbs,double zMaxAbs,
805  double pT2Old, double m2dip, int order = -1);
806 
807  // Return kernel for new splitting.
808  double overestimateDiff(double z, double m2dip, int order = -1);
809 
810  // Functions to calculate the kernel from SplitInfo information.
811  bool calc(const Event& state = Event(), int order = -1);
812 
813 };
814 
815 //==========================================================================
816 
818 
819 public:
820 
821  Dire_fsr_qcd_Q2qQqbarDist(string idIn, int softRS, Settings* settings,
822  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
823  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
824  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
825  coupSM, info, direInfo){}
826 
827  bool canRadiate ( const Event&, pair<int,int>,
828  unordered_map<string,bool> = unordered_map<string,bool>(),
829  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
830 
831  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
832  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
833 
834  int nEmissions() { return 2; }
835  bool isPartial() { return false; }
836 
837  int kinMap ();
838 
839  // Return id of mother after splitting.
840  int motherID(int idDaughter);
841 
842  // Return id of emission.
843  int sisterID(int idDaughter);
844 
845  // Return id of recombined radiator (before splitting!)
846  int radBefID(int idRadAfter, int idEmtAfter);
847 
848  // Return colours of recombined radiator (before splitting!)
849  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
850  int colEmtAfter, int acolEmtAfter);
851 
852  double gaugeFactor ( int=0, int=0 );
853  double symmetryFactor ( int=0, int=0 );
854 
855  // Pick z for new splitting.
856  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
857 
858  // New overestimates, z-integrated versions.
859  double overestimateInt(double zMinAbs,double zMaxAbs,
860  double pT2Old, double m2dip, int order = -1);
861 
862  // Return kernel for new splitting.
863  double overestimateDiff(double z, double m2dip, int order = -1);
864 
865  // Functions to calculate the kernel from SplitInfo information.
866  bool calc(const Event& state = Event(), int order = -1);
867 
868 };
869 
870 //==========================================================================
871 
873 
874 public:
875 
876  Dire_fsr_qcd_Q2QbarQQId(string idIn, int softRS, Settings* settings,
877  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
878  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
879  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
880  coupSM, info, direInfo){}
881 
882  bool canRadiate ( const Event&, pair<int,int>,
883  unordered_map<string,bool> = unordered_map<string,bool>(),
884  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
885 
886  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
887  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
888 
889  int nEmissions() { return 2; }
890  bool isPartial() { return false; }
891 
892  int kinMap ();
893 
894  // Return id of mother after splitting.
895  int motherID(int idDaughter);
896 
897  // Return id of emission.
898  int sisterID(int idDaughter);
899 
900  // Return id of recombined radiator (before splitting!)
901  int radBefID(int idRadAfter, int idEmtAfter);
902 
903  // Return colours of recombined radiator (before splitting!)
904  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
905  int colEmtAfter, int acolEmtAfter);
906 
907  double gaugeFactor ( int=0, int=0 );
908  double symmetryFactor ( int=0, int=0 );
909 
910  // Pick z for new splitting.
911  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
912 
913  // New overestimates, z-integrated versions.
914  double overestimateInt(double zMinAbs,double zMaxAbs,
915  double pT2Old, double m2dip, int order = -1);
916 
917  // Return kernel for new splitting.
918  double overestimateDiff(double z, double m2dip, int order = -1);
919 
920  // Functions to calculate the kernel from SplitInfo information.
921  bool calc(const Event& state = Event(), int order = -1);
922 
923 };
924 
925 //==========================================================================
926 
928 
929 public:
930 
931  Dire_isr_qcd_Q2QG(string idIn, int softRS, Settings* settings,
932  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
933  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
934  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
935  coupSM, info, direInfo){}
936 
937  bool canRadiate ( const Event&, pair<int,int>,
938  unordered_map<string,bool> = unordered_map<string,bool>(),
939  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
940 
941  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
942  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
943 
944  int nEmissions() { return 1; }
945 
946  int kinMap ();
947 
948  // Return id of mother after splitting.
949  int motherID(int idDaughter);
950 
951  // Return id of emission.
952  int sisterID(int idDaughter);
953 
954  // Return id of recombined radiator (before splitting!)
955  int radBefID(int idRadAfter, int idEmtAfter);
956 
957  vector <int> recPositions( const Event&, int, int);
958 
959  // Return colours of recombined radiator (before splitting!)
960  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
961  int colEmtAfter, int acolEmtAfter);
962 
963  double gaugeFactor ( int=0, int=0 );
964  double symmetryFactor ( int=0, int=0 );
965 
966  // Pick z for new splitting.
967  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
968 
969  // New overestimates, z-integrated versions.
970  double overestimateInt(double zMinAbs,double zMaxAbs,
971  double pT2Old, double m2dip, int order = -1);
972 
973  // Return kernel for new splitting.
974  double overestimateDiff(double z, double m2dip, int order = -1);
975 
976  // Functions to calculate the kernel from SplitInfo information.
977  bool calc(const Event& state = Event(), int order = -1);
978 
979 };
980 
981 //==========================================================================
982 
984 
985 public:
986 
987  Dire_isr_qcd_G2GG1(string idIn, int softRS, Settings* settings,
988  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
989  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
990  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
991  coupSM, info, direInfo){}
992 
993  bool canRadiate ( const Event&, pair<int,int>,
994  unordered_map<string,bool> = unordered_map<string,bool>(),
995  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
996 
997  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
998  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
999 
1000  int nEmissions() { return 1; }
1001 
1002  int kinMap ();
1003 
1004  // Return id of mother after splitting.
1005  int motherID(int idDaughter);
1006 
1007  // Return id of emission.
1008  int sisterID(int idDaughter);
1009 
1010  // Return id of recombined radiator (before splitting!)
1011  int radBefID(int idRadAfter, int idEmtAfter);
1012 
1013  vector <int> recPositions( const Event&, int, int);
1014 
1015  // Return colours of recombined radiator (before splitting!)
1016  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1017  int colEmtAfter, int acolEmtAfter);
1018 
1019  double gaugeFactor ( int=0, int=0 );
1020  double symmetryFactor ( int=0, int=0 );
1021 
1022  // Pick z for new splitting.
1023  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1024 
1025  // New overestimates, z-integrated versions.
1026  double overestimateInt(double zMinAbs,double zMaxAbs,
1027  double pT2Old, double m2dip, int order = -1);
1028 
1029  // Return kernel for new splitting.
1030  double overestimateDiff(double z, double m2dip, int order = -1);
1031 
1032  // Functions to calculate the kernel from SplitInfo information.
1033  bool calc(const Event& state = Event(), int order = -1);
1034 
1035 };
1036 
1037 //==========================================================================
1038 
1040 
1041 public:
1042 
1043  Dire_isr_qcd_G2GG2(string idIn, int softRS, Settings* settings,
1044  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1045  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1046  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1047  coupSM, info, direInfo){}
1048 
1049  bool canRadiate ( const Event&, pair<int,int>,
1050  unordered_map<string,bool> = unordered_map<string,bool>(),
1051  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1052 
1053  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1054  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1055 
1056  int nEmissions() { return 1; }
1057 
1058  int kinMap ();
1059 
1060  // Return id of mother after splitting.
1061  int motherID(int idDaughter);
1062 
1063  // Return id of emission.
1064  int sisterID(int idDaughter);
1065 
1066  // Return id of recombined radiator (before splitting!)
1067  int radBefID(int idRadAfter, int idEmtAfter);
1068 
1069  vector <int> recPositions( const Event&, int, int);
1070 
1071  // Return colours of recombined radiator (before splitting!)
1072  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1073  int colEmtAfter, int acolEmtAfter);
1074 
1075  double gaugeFactor ( int=0, int=0 );
1076  double symmetryFactor ( int=0, int=0 );
1077 
1078  // Pick z for new splitting.
1079  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1080 
1081  // New overestimates, z-integrated versions.
1082  double overestimateInt(double zMinAbs,double zMaxAbs,
1083  double pT2Old, double m2dip, int order = -1);
1084 
1085  // Return kernel for new splitting.
1086  double overestimateDiff(double z, double m2dip, int order = -1);
1087 
1088  // Functions to calculate the kernel from SplitInfo information.
1089  bool calc(const Event& state = Event(), int order = -1);
1090 
1091 };
1092 
1093 //==========================================================================
1094 
1096 
1097 public:
1098 
1099  Dire_isr_qcd_G2QQ(string idIn, int softRS, Settings* settings,
1100  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1101  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1102  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1103  coupSM, info, direInfo){}
1104 
1105  bool canRadiate ( const Event&, pair<int,int>,
1106  unordered_map<string,bool> = unordered_map<string,bool>(),
1107  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1108 
1109  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1110  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1111 
1112  int nEmissions() { return 1; }
1113  bool isPartial() { return false; }
1114 
1115  int kinMap ();
1116 
1117  // Return id of mother after splitting.
1118  int motherID(int idDaughter);
1119 
1120  // Return id of emission.
1121  int sisterID(int idDaughter);
1122 
1123  // Return id of recombined radiator (before splitting!)
1124  int radBefID(int idRadAfter, int idEmtAfter);
1125 
1126  vector <int> recPositions( const Event&, int, int);
1127 
1128  // Return colours of recombined radiator (before splitting!)
1129  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1130  int colEmtAfter, int acolEmtAfter);
1131 
1132  double gaugeFactor ( int=0, int=0 );
1133  double symmetryFactor ( int=0, int=0 );
1134 
1135  // Pick z for new splitting.
1136  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1137 
1138  // New overestimates, z-integrated versions.
1139  double overestimateInt(double zMinAbs,double zMaxAbs,
1140  double pT2Old, double m2dip, int order = -1);
1141 
1142  // Return kernel for new splitting.
1143  double overestimateDiff(double z, double m2dip, int order = -1);
1144 
1145  // Functions to calculate the kernel from SplitInfo information.
1146  bool calc(const Event& state = Event(), int order = -1);
1147 
1148 };
1149 
1150 //==========================================================================
1151 
1153 
1154 public:
1155 
1156  Dire_isr_qcd_Q2GQ(string idIn, int softRS, Settings* settings,
1157  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1158  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1159  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1160  coupSM, info, direInfo){}
1161 
1162  bool canRadiate ( const Event&, pair<int,int>,
1163  unordered_map<string,bool> = unordered_map<string,bool>(),
1164  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1165 
1166  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1167  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1168 
1169  int nEmissions() { return 1; }
1170  bool isPartial() { return false; }
1171 
1172  int kinMap ();
1173 
1174  // Return id of mother after splitting.
1175  int motherID(int idDaughter);
1176 
1177  // Return id of emission.
1178  int sisterID(int idDaughter);
1179 
1180  // Return id of recombined radiator (before splitting!)
1181  int radBefID(int idRadAfter, int idEmtAfter);
1182 
1183  vector <int> recPositions( const Event&, int, int);
1184 
1185  // Return colours of recombined radiator (before splitting!)
1186  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1187  int colEmtAfter, int acolEmtAfter);
1188 
1189  double gaugeFactor ( int=0, int=0 );
1190  double symmetryFactor ( int=0, int=0 );
1191 
1192  // Pick z for new splitting.
1193  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1194 
1195  // New overestimates, z-integrated versions.
1196  double overestimateInt(double zMinAbs,double zMaxAbs,
1197  double pT2Old, double m2dip, int order = -1);
1198 
1199  // Return kernel for new splitting.
1200  double overestimateDiff(double z, double m2dip, int order = -1);
1201 
1202  // Functions to calculate the kernel from SplitInfo information.
1203  bool calc(const Event& state = Event(), int order = -1);
1204 
1205 };
1206 
1207 //==========================================================================
1208 
1209 // Class inheriting from SplittingQCD class.
1211 
1212 public:
1213 
1214  Dire_isr_qcd_Q2qQqbarDist(string idIn, int softRS, Settings* settings,
1215  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1216  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1217  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1218  coupSM, info, direInfo){}
1219 
1220  bool canRadiate ( const Event&, pair<int,int>,
1221  unordered_map<string,bool> = unordered_map<string,bool>(),
1222  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1223 
1224  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1225  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1226 
1227  int nEmissions() { return 2; }
1228  bool isPartial() { return false; }
1229 
1230  int kinMap ();
1231 
1232  // Return id of mother after splitting.
1233  int motherID(int idDaughter);
1234 
1235  // Return id of emission.
1236  int sisterID(int idDaughter);
1237 
1238  // Return id of recombined radiator (before splitting!)
1239  int radBefID(int idRadAfter, int idEmtAfter);
1240 
1241  // Return colours of recombined radiator (before splitting!)
1242  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1243  int colEmtAfter, int acolEmtAfter);
1244 
1245  double gaugeFactor ( int=0, int=0 );
1246  double symmetryFactor ( int=0, int=0 );
1247 
1248  // Pick z for new splitting.
1249  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1250 
1251  // New overestimates, z-integrated versions.
1252  double overestimateInt(double zMinAbs,double zMaxAbs,
1253  double pT2Old, double m2dip, int order = -1);
1254 
1255  // Return kernel for new splitting.
1256  double overestimateDiff(double z, double m2dip, int order = -1);
1257 
1258  // Functions to calculate the kernel from SplitInfo information.
1259  bool calc(const Event& state = Event(), int order = -1);
1260 
1261 };
1262 
1263 //==========================================================================
1264 
1266 
1267 public:
1268 
1269  Dire_isr_qcd_Q2QbarQQId(string idIn, int softRS, Settings* settings,
1270  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1271  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1272  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1273  coupSM, info, direInfo){}
1274 
1275  bool canRadiate ( const Event&, pair<int,int>,
1276  unordered_map<string,bool> = unordered_map<string,bool>(),
1277  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1278 
1279  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1280  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1281 
1282  int nEmissions() { return 2; }
1283  bool isPartial() { return false; }
1284 
1285  int kinMap ();
1286 
1287  // Return id of mother after splitting.
1288  int motherID(int idDaughter);
1289 
1290  // Return id of emission.
1291  int sisterID(int idDaughter);
1292 
1293  // Return id of recombined radiator (before splitting!)
1294  int radBefID(int idRadAfter, int idEmtAfter);
1295 
1296  // Return colours of recombined radiator (before splitting!)
1297  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1298  int colEmtAfter, int acolEmtAfter);
1299 
1300  double gaugeFactor ( int=0, int=0 );
1301  double symmetryFactor ( int=0, int=0 );
1302 
1303  // Pick z for new splitting.
1304  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1305 
1306  // New overestimates, z-integrated versions.
1307  double overestimateInt(double zMinAbs,double zMaxAbs,
1308  double pT2Old, double m2dip, int order = -1);
1309 
1310  // Return kernel for new splitting.
1311  double overestimateDiff(double z, double m2dip, int order = -1);
1312 
1313  // Functions to calculate the kernel from SplitInfo information.
1314  bool calc(const Event& state = Event(), int order = -1);
1315 
1316 };
1317 
1318 //==========================================================================
1319 
1321 
1322 public:
1323 
1324  Dire_fsr_qcd_Q2QG_notPartial(string idIn, int softRS, Settings* settings,
1325  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1326  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1327  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1328  coupSM, info, direInfo){}
1329 
1330  bool canRadiate ( const Event&, pair<int,int>,
1331  unordered_map<string,bool> = unordered_map<string,bool>(),
1332  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1333 
1334  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1335  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1336 
1337  int nEmissions() { return 1; }
1338 
1339  int kinMap ();
1340  bool canUseForBranching() { return true; }
1341  bool isPartial() { return false; }
1342  vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state);
1343 
1344  // Return id of mother after splitting.
1345  int motherID(int idDaughter);
1346 
1347  // Return id of emission.
1348  int sisterID(int idDaughter);
1349 
1350  // Return id of recombined radiator (before splitting!)
1351  int radBefID(int idRadAfter, int idEmtAfter);
1352 
1353  vector <int> recPositions( const Event&, int, int);
1354 
1355  // Return colours of recombined radiator (before splitting!)
1356  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1357  int colEmtAfter, int acolEmtAfter);
1358 
1359  double gaugeFactor ( int=0, int=0 );
1360  double symmetryFactor ( int=0, int=0 );
1361 
1362  // Pick z for new splitting.
1363  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1364 
1365  // New overestimates, z-integrated versions.
1366  double overestimateInt(double zMinAbs,double zMaxAbs,
1367  double pT2Old, double m2dip, int order = -1);
1368 
1369  // Return kernel for new splitting.
1370  double overestimateDiff(double z, double m2dip, int order = -1);
1371 
1372  // Functions to calculate the kernel from SplitInfo information.
1373  bool calc(const Event& state = Event(), int order = -1);
1374 
1375 };
1376 
1377 
1378 //==========================================================================
1379 
1381 
1382 public:
1383 
1384  Dire_fsr_qcd_G2GG_notPartial(string idIn, int softRS, Settings* settings,
1385  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1386  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1387  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1388  coupSM, info, direInfo){}
1389 
1390  bool canRadiate ( const Event&, pair<int,int>,
1391  unordered_map<string,bool> = unordered_map<string,bool>(),
1392  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1393 
1394  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1395  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1396 
1397  int nEmissions() { return 1; }
1398 
1399  int kinMap ();
1400  bool canUseForBranching() { return true; }
1401  bool isPartial() { return false; }
1402  vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state);
1403 
1404  // Return id of mother after splitting.
1405  int motherID(int idDaughter);
1406 
1407  // Return id of emission.
1408  int sisterID(int idDaughter);
1409 
1410  // Return id of recombined radiator (before splitting!)
1411  int radBefID(int idRadAfter, int idEmtAfter);
1412 
1413  vector <int> recPositions( const Event&, int, int);
1414 
1415  // Return colours of recombined radiator (before splitting!)
1416  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1417  int colEmtAfter, int acolEmtAfter);
1418 
1419  double gaugeFactor ( int=0, int=0 );
1420  double symmetryFactor ( int=0, int=0 );
1421 
1422  // Pick z for new splitting.
1423  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1424 
1425  // New overestimates, z-integrated versions.
1426  double overestimateInt(double zMinAbs,double zMaxAbs,
1427  double pT2Old, double m2dip, int order = -1);
1428 
1429  // Return kernel for new splitting.
1430  double overestimateDiff(double z, double m2dip, int order = -1);
1431 
1432  // Functions to calculate the kernel from SplitInfo information.
1433  bool calc(const Event& state = Event(), int order = -1);
1434 
1435 };
1436 
1437 //==========================================================================
1438 
1440 
1441 public:
1442 
1443  Dire_fsr_qcd_G2QQ_notPartial(string idIn, int softRS, Settings* settings,
1444  ParticleData* particleData, Rndm* rndm, BeamParticlePtr beamA,
1445  BeamParticlePtr beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
1446  DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA, beamB,
1447  coupSM, info, direInfo){}
1448 
1449  bool canRadiate ( const Event&, pair<int,int>,
1450  unordered_map<string,bool> = unordered_map<string,bool>(),
1451  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1452 
1453  bool canRadiate ( const Event&, int iRadBef, int iRecBef,
1454  Settings* = nullptr, PartonSystems* = nullptr, BeamParticlePtr = nullptr);
1455 
1456  int nEmissions() { return 1; }
1457 
1458  int kinMap ();
1459  bool canUseForBranching() { return true; }
1460  bool isPartial() { return false; }
1461  vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state);
1462 
1463  // Return id of mother after splitting.
1464  int motherID(int idDaughter);
1465 
1466  // Return id of emission.
1467  int sisterID(int idDaughter);
1468 
1469  // Return id of recombined radiator (before splitting!)
1470  int radBefID(int idRadAfter, int idEmtAfter);
1471 
1472  vector <int> recPositions( const Event&, int, int);
1473 
1474  // Return colours of recombined radiator (before splitting!)
1475  pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
1476  int colEmtAfter, int acolEmtAfter);
1477 
1478  double gaugeFactor ( int=0, int=0 );
1479  double symmetryFactor ( int=0, int=0 );
1480 
1481  // Pick z for new splitting.
1482  double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
1483 
1484  // New overestimates, z-integrated versions.
1485  double overestimateInt(double zMinAbs,double zMaxAbs,
1486  double pT2Old, double m2dip, int order = -1);
1487 
1488  // Return kernel for new splitting.
1489  double overestimateDiff(double z, double m2dip, int order = -1);
1490 
1491  // Functions to calculate the kernel from SplitInfo information.
1492  bool calc(const Event& state = Event(), int order = -1);
1493 
1494 };
1495 
1496 //==========================================================================
1497 
1498 } // end namespace Pythia8
1499 
1500 #endif // Pythia8_DireSplittingsQCD_H
double getNF(double pT2)
AUXILIARY FUNCTIONS.
Definition: DireSplittingsQCD.cc:131
Definition: DireSplittingsQCD.h:983
Definition: DireSplittingsQCD.h:592
virtual vector< int > recPositions(const Event &, int, int)
Definition: DireSplittings.h:146
virtual double symmetryFactor(int, int)
Return symmetry factor for splitting.
Definition: DireSplittings.h:160
Definition: StandardModel.h:23
void try_sai_endpoint()
Functions to set if kernel should contribute to a kinematical endpoint.
Definition: DireSplittingsQCD.h:470
double beta0Endpoint(int order, double m2dip, double pT2, double z, double renormMultFacNow=-1.)
Definition: DireSplittingsQCD.cc:387
void init()
Definition: DireSplittingsQCD.cc:23
double softRescaleInt(int order)
Definition: DireSplittingsQCD.cc:356
Definition: Info.h:45
bool allow_sai_endpoint_for_kinematics()
Treatment of additional virtual corrections.
Definition: DireSplittingsQCD.h:392
The Event class holds all info on the generated event.
Definition: Event.h:408
void try_sai_endpoint()
Functions to set if kernel should contribute to a kinematical endpoint.
Definition: DireSplittingsQCD.h:395
static const double SMALL_TEVOL
The SplittingQCD class.
Definition: DireSplittingsQCD.h:52
Definition: DireSplittingsQCD.h:927
Definition: DireSplittingsQCD.h:1265
Definition: DireSplittingsQCD.h:27
Definition: DireSplittingsQCD.h:333
virtual int couplingType(int, int)
Definition: DireSplittingsQCD.h:85
virtual double gaugeFactor(int, int)
Return color factor for splitting.
Definition: DireSplittings.h:157
Definition: DireSplittingsQCD.h:202
Definition: DireSplittingsQCD.h:1039
virtual double overestimateInt(double, double, double, double, int=-1)
New overestimates, z-integrated versions.
Definition: DireSplittings.h:189
virtual vector< int > radAndEmt(int idDaughter, int)
Definition: DireSplittingsQCD.h:81
Definition: DireSplittingsQCD.h:648
bool allow_sai_endpoint_for_kinematics()
Treatment of additional virtual corrections.
Definition: DireSplittingsQCD.h:467
Definition: DireBasics.h:374
double DiLog(double x)
Function to calculate dilogarithm.
Definition: DireSplittingsQCD.cc:285
Definition: DireSplittingsQCD.h:536
Definition: DireSplittingsQCD.h:1320
int kinMap()
Definition: DireSplittingsQCD.h:433
int kinMap()
Definition: DireSplittingsQCD.h:222
Definition: DireSplittingsQCD.h:817
double CA
VARIABLES.
Definition: DireSplittingsQCD.h:45
double polevl(double x, double *coef, int N)
Helper function to calculate dilogarithm.
Definition: DireSplittingsQCD.cc:265
Definition: DireSplittingsQCD.h:1380
Definition: DireSplittingsQCD.h:704
Definition: DireSplittingsQCD.h:1152
double softRescaleDiff(int order, double pT2, double renormMultFacNow=-1.)
Definition: DireSplittingsQCD.cc:369
void try_sai_endpoint()
Functions to set if kernel should contribute to a kinematical endpoint.
Definition: DireSplittingsQCD.h:257
Definition: Basics.h:388
DireSplittingQCD(string idIn, int softRS, Settings *settings, ParticleData *particleData, Rndm *rndm, BeamParticlePtr beamA, BeamParticlePtr beamB, CoupSM *coupSM, Info *info, DireInfo *direInfo)
Constructor and destructor.
Definition: DireSplittingsQCD.h:32
virtual bool calc(const Event &=Event(), int=-1)
Functions to calculate the kernel from SplitInfo information.
Definition: DireSplittings.h:203
Definition: DireSplittingsQCD.h:872
Definition: DireSplittings.h:53
virtual double coupling(double z, double pT2, double m2dip, double renormMultFacNow=-1., pair< int, bool > radBef=pair< int, bool >(), pair< int, bool > recBef=pair< int, bool >())
Definition: DireSplittingsQCD.h:86
bool is_sai_endpoint()
Return endpoint information.
Definition: DireSplittingsQCD.h:260
bool is_sai_endpoint()
Return endpoint information.
Definition: DireSplittingsQCD.h:325
virtual int kinMap()
Definition: DireSplittings.h:123
virtual vector< int > radAndEmt(int, int colType)
Definition: DireSplittingsQCD.h:426
Definition: DireSplittingsQCD.h:760
Definition: StandardModel.h:135
virtual unordered_map< string, double > getPhasespaceVars(const Event &=Event(), PartonSystems *=0)
Definition: DireSplittingsQCD.cc:507
void try_sai_endpoint()
Functions to set if kernel should contribute to a kinematical endpoint.
Definition: DireSplittingsQCD.h:322
vector< int > radAndEmt(int idDaughter, int)
Definition: DireSplittingsQCD.h:219
virtual double overestimateDiff(double, double, int=-1)
Return kernel for new splitting.
Definition: DireSplittings.h:193
double as2Pi(double pT2, int orderNow=-1, double renormMultFacNow=-1.)
Definition: DireSplittingsQCD.cc:198
int kinMap()
Definition: DireSplittingsQCD.h:287
Class inheriting from SplittingQCD class.
Definition: DireSplittingsQCD.h:1210
Definition: DireSplittingsQCD.h:268
bool allow_sai_endpoint_for_kinematics()
Treatment of additional virtual corrections.
Definition: DireSplittingsQCD.h:254
The PartonSystems class describes the whole set of subcollisions.
Definition: PartonSystems.h:42
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
int findCol(int col, vector< int > iExc, const Event &, int type)
Definition: DireSplittingsQCD.cc:451
int kinMap()
Definition: DireSplittingsQCD.h:358
Definition: DireSplittingsQCD.h:1439
bool is_sai_endpoint()
Return endpoint information.
Definition: DireSplittingsQCD.h:398
int asSchemeISR
Definition: DireSplittingsQCD.h:106
bool allow_sai_endpoint_for_kinematics()
Treatment of additional virtual corrections.
Definition: DireSplittingsQCD.h:319
vector< int > radAndEmt(int, int)
Definition: DireSplittingsQCD.h:285
virtual int radBefID(int, int)
Return id of recombined radiator (before splitting!)
Definition: DireSplittings.h:150
This class holds a map of all ParticleDataEntries.
Definition: ParticleData.h:422
Definition: DireSplittingsQCD.h:481
virtual pair< int, int > radBefCols(int, int, int, int)
Return colours of recombined radiator (before splitting!)
Definition: DireSplittings.h:153
Definition: DireSplittingsQCD.h:1095
virtual double getJacobian(const Event &=Event(), PartonSystems *partonSystems=0)
Definition: DireSplittingsQCD.cc:591
virtual vector< int > radAndEmt(int idRadBef, int)
Definition: DireSplittingsQCD.h:353
Definition: DireBasics.h:82
virtual int sisterID(int)
Return id of emission.
Definition: DireSplittings.h:129
Definition: Settings.h:196
virtual double zSplit(double, double, double)
Pick z for new splitting.
Definition: DireSplittings.h:186
bool is_sai_endpoint()
Return endpoint information.
Definition: DireSplittingsQCD.h:473
virtual int motherID(int)
Return id of mother after splitting.
Definition: DireSplittings.h:126
Definition: DireSplittingsQCD.h:406