File indexing completed on 2025-09-18 09:25:26
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef Pythia8_DireSplittingsU1new_H
0009 #define Pythia8_DireSplittingsU1new_H
0010
0011 #define DIRE_SPLITTINGSU1NEW_VERSION "2.002"
0012
0013 #include "Pythia8/Basics.h"
0014 #include "Pythia8/BeamParticle.h"
0015 #include "Pythia8/ParticleData.h"
0016 #include "Pythia8/PythiaStdlib.h"
0017 #include "Pythia8/Settings.h"
0018 #include "Pythia8/StandardModel.h"
0019
0020 #include "Pythia8/DireSplittingsQCD.h"
0021
0022 namespace Pythia8 {
0023
0024
0025
0026 class DireSplittingU1new : public DireSplittingQCD {
0027
0028 public:
0029
0030
0031 DireSplittingU1new(string idIn, int softRS, Settings* settings,
0032 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0033 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo)
0034 : DireSplittingQCD(idIn, softRS, settings, particleData, rndm, beamA,
0035 beamB, coupSM, info, direInfo) { init(); }
0036 virtual ~DireSplittingU1new() {}
0037
0038 void init();
0039
0040
0041 double sumCharge2Tot, sumCharge2L, sumCharge2Q, ax0, enhance;
0042 bool doU1NEWshowerByQ, doU1NEWshowerByL;
0043
0044 AlphaEM alphaEM;
0045
0046
0047
0048 double aem2Pi ( double pT2, int = 0);
0049
0050 bool useFastFunctions() { return true; }
0051
0052 virtual vector <int> radAndEmt(int idDaughter, int)
0053 { return createvector<int>(motherID(idDaughter))(sisterID(idDaughter)); }
0054 virtual int nEmissions() { return 1; }
0055 virtual bool isPartial() { return true; }
0056
0057 virtual bool canUseForBranching() { return true; }
0058
0059 virtual int couplingType (int, int) { return 2; }
0060 virtual double coupling (double = 0., double = 0., double = 0., double = -1.,
0061 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>()) {
0062 return (ax0 / (2.*M_PI));
0063 }
0064 virtual double couplingScale2 (double = 0., double = 0., double = 0.,
0065 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>()) {
0066 return -1.;
0067 }
0068
0069
0070 };
0071
0072
0073
0074 class Dire_fsr_u1new_Q2QA : public DireSplittingU1new {
0075
0076 public:
0077
0078 Dire_fsr_u1new_Q2QA(string idIn, int softRS, Settings* settings,
0079 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0080 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0081 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0082 beamB, coupSM, info, direInfo){}
0083
0084 bool canRadiate ( const Event&, pair<int,int>,
0085 unordered_map<string,bool> = unordered_map<string,bool>(),
0086 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0087 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0088 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0089
0090 int kinMap ();
0091
0092
0093 int motherID(int idDaughter);
0094
0095
0096 int sisterID(int idDaughter);
0097
0098
0099 int radBefID(int idRadAfter, int idEmtAfter);
0100
0101
0102 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0103 int colEmtAfter, int acolEmtAfter);
0104
0105 double gaugeFactor ( int=0, int=0 );
0106 double symmetryFactor ( int=0, int=0 );
0107
0108 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0109
0110
0111 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0112
0113
0114 double overestimateInt(double zMinAbs,double zMaxAbs,
0115 double pT2Old, double m2dip, int order = -1);
0116
0117
0118 double overestimateDiff(double z, double m2dip, int order = -1);
0119
0120
0121 bool calc(const Event& state = Event(), int order = -1);
0122
0123 };
0124
0125
0126
0127 class Dire_fsr_u1new_Q2AQ : public DireSplittingU1new {
0128
0129 public:
0130
0131 Dire_fsr_u1new_Q2AQ(string idIn, int softRS, Settings* settings,
0132 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0133 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0134 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0135 beamB, coupSM, info, direInfo){}
0136
0137 bool canRadiate ( const Event&, pair<int,int>,
0138 unordered_map<string,bool> = unordered_map<string,bool>(),
0139 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0140 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0141 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0142
0143 int kinMap ();
0144
0145
0146 int motherID(int idDaughter);
0147
0148
0149 int sisterID(int idDaughter);
0150
0151
0152 int radBefID(int idRadAfter, int idEmtAfter);
0153
0154
0155 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0156 int colEmtAfter, int acolEmtAfter);
0157
0158 double gaugeFactor ( int=0, int=0 );
0159 double symmetryFactor ( int=0, int=0 );
0160
0161 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0162
0163
0164 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0165
0166
0167 double overestimateInt(double zMinAbs,double zMaxAbs,
0168 double pT2Old, double m2dip, int order = -1);
0169
0170
0171 double overestimateDiff(double z, double m2dip, int order = -1);
0172
0173
0174 bool calc(const Event& state = Event(), int order = -1);
0175
0176 };
0177
0178
0179
0180 class Dire_fsr_u1new_L2LA : public DireSplittingU1new {
0181
0182 public:
0183
0184 Dire_fsr_u1new_L2LA(string idIn, int softRS, Settings* settings,
0185 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0186 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0187 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0188 beamB, coupSM, info, direInfo){}
0189
0190 bool canRadiate ( const Event&, pair<int,int>,
0191 unordered_map<string,bool> = unordered_map<string,bool>(),
0192 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0193 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0194 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0195
0196 int kinMap ();
0197
0198 vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state) {
0199 vector< pair<int,int> > ret
0200 = createvector<pair<int,int> >(make_pair(0, 0))(make_pair(0, 0));
0201 if (particleDataPtr->colType(state[iRad].id()) != 0) {
0202 ret[0].first = state[iRad].col();
0203 ret[0].second = state[iRad].acol();
0204 ret[1].first = 0;
0205 ret[1].second = 0;
0206 }
0207 return ret;
0208 }
0209
0210
0211 int motherID(int idDaughter);
0212
0213
0214 int sisterID(int idDaughter);
0215
0216
0217 int radBefID(int idRadAfter, int idEmtAfter);
0218
0219
0220 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0221 int colEmtAfter, int acolEmtAfter);
0222
0223 double gaugeFactor ( int=0, int=0 );
0224 double symmetryFactor ( int=0, int=0 );
0225
0226 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0227
0228
0229 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0230
0231
0232 double overestimateInt(double zMinAbs,double zMaxAbs,
0233 double pT2Old, double m2dip, int order = -1);
0234
0235
0236 double overestimateDiff(double z, double m2dip, int order = -1);
0237
0238
0239 bool calc(const Event& state = Event(), int order = -1);
0240
0241 };
0242
0243
0244
0245 class Dire_fsr_u1new_L2AL : public DireSplittingU1new {
0246
0247 public:
0248
0249 Dire_fsr_u1new_L2AL(string idIn, int softRS, Settings* settings,
0250 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0251 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0252 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0253 beamB, coupSM, info, direInfo){}
0254
0255 bool canRadiate ( const Event&, pair<int,int>,
0256 unordered_map<string,bool> = unordered_map<string,bool>(),
0257 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0258 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0259 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0260
0261 int kinMap ();
0262
0263 vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state) {
0264 vector< pair<int,int> > ret
0265 = createvector<pair<int,int> >(make_pair(0, 0))(make_pair(0, 0));
0266 if (particleDataPtr->colType(state[iRad].id()) != 0) {
0267 ret[0].first = state[iRad].col();
0268 ret[0].second = state[iRad].acol();
0269 ret[1].first = 0;
0270 ret[1].second = 0;
0271 }
0272 return ret;
0273 }
0274
0275
0276 int motherID(int idDaughter);
0277
0278
0279 int sisterID(int idDaughter);
0280
0281
0282 int radBefID(int idRadAfter, int idEmtAfter);
0283
0284
0285 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0286 int colEmtAfter, int acolEmtAfter);
0287
0288 double gaugeFactor ( int=0, int=0 );
0289 double symmetryFactor ( int=0, int=0 );
0290
0291 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0292
0293
0294 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0295
0296
0297 double overestimateInt(double zMinAbs,double zMaxAbs,
0298 double pT2Old, double m2dip, int order = -1);
0299
0300
0301 double overestimateDiff(double z, double m2dip, int order = -1);
0302
0303
0304 bool calc(const Event& state = Event(), int order = -1);
0305
0306 };
0307
0308
0309
0310 class Dire_fsr_u1new_A2FF : public DireSplittingU1new {
0311
0312 public:
0313
0314 int idRadAfterSave;
0315 double nchSaved;
0316
0317 Dire_fsr_u1new_A2FF(int idRadAfterIn, string idIn, int softRS,
0318 Settings* settings,
0319 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0320 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0321 DireSplittingU1new(idIn,
0322 softRS, settings, particleData, rndm, beamA, beamB, coupSM, info,
0323 direInfo),
0324 idRadAfterSave(idRadAfterIn), nchSaved(1) {}
0325 bool canRadiate ( const Event& state, pair<int,int> ints,
0326 unordered_map<string,bool> = unordered_map<string,bool>(),
0327 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr) {
0328 return ( state[ints.first].isFinal()
0329 && state[ints.first].id() == 900032
0330 && (state[ints.second].isLepton()
0331 || state[ints.second].idAbs() == 900012));
0332 }
0333 bool canRadiate ( const Event& state, int iRadBef, int iRecBef,
0334 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr) {
0335 return ( state[iRadBef].isFinal()
0336 && state[iRadBef].id() == 900032
0337 && (state[iRecBef].isLepton()
0338 || state[iRecBef].idAbs() == 900012));
0339 }
0340
0341 int kinMap () { return 1;};
0342 bool isPartial() { return false; }
0343
0344 vector<pair<int,int> > radAndEmtCols(int iRad, int, Event state) {
0345 vector< pair<int,int> > ret;
0346 if (state[iRad].id() != 900032) return ret;
0347 ret = createvector<pair<int,int> >(make_pair(0, 0))(make_pair(0, 0));
0348 if (particleDataPtr->colType(idRadAfterSave) != 0) {
0349 int sign = (idRadAfterSave > 0) ? 1 : -1;
0350 int newCol = state.nextColTag();
0351 if (sign> 0) {
0352 ret[0].first = newCol;
0353 ret[0].second = 0;
0354 ret[1].first = 0;
0355 ret[1].second = newCol;
0356 } else {
0357 ret[0].first = 0;
0358 ret[0].second = newCol;
0359 ret[1].first = newCol;
0360 ret[1].second = 0;
0361 }
0362
0363 }
0364 return ret;
0365 }
0366
0367
0368 int motherID(int)
0369 { return idRadAfterSave; }
0370 int sisterID(int)
0371 { return -idRadAfterSave; }
0372 vector <int> radAndEmt(int, int)
0373 { return createvector<int>(idRadAfterSave)(-idRadAfterSave); }
0374
0375 double gaugeFactor ( int=0, int=0 )
0376 { return 1.; }
0377 double symmetryFactor ( int=0, int=0 )
0378 { return 1./double(nchSaved); }
0379
0380 int radBefID(int idRadAfter, int idEmtAfter) {
0381 if ( idRadAfter == idRadAfterSave
0382 && particleDataPtr->isQuark(idRadAfter)
0383 && particleDataPtr->isQuark(idEmtAfter)) return 900032;
0384 return 0;
0385 }
0386
0387 pair<int,int> radBefCols(int, int, int, int) { return make_pair(0,0); }
0388
0389
0390 vector <int> recPositions( const Event& state, int iRad, int iEmt) {
0391 if ( state[iRad].isFinal() || state[iRad].id() != idRadAfterSave
0392 || state[iEmt].id() != -idRadAfterSave) return vector<int>();
0393
0394 vector<int> iExc(createvector<int>(iRad)(iEmt));
0395
0396 vector<int> recs;
0397 for (int i=0; i < state.size(); ++i) {
0398 if ( find(iExc.begin(), iExc.end(), i) != iExc.end() ) continue;
0399 if ( state[i].isLepton() || state[i].idAbs() == 900012) {
0400 if (state[i].isFinal())
0401 recs.push_back(i);
0402 if (state[i].mother1() == 1 && state[i].mother2() == 0)
0403 recs.push_back(i);
0404 if (state[i].mother1() == 2 && state[i].mother2() == 0)
0405 recs.push_back(i);
0406 }
0407 }
0408
0409 return recs;
0410 }
0411
0412
0413 int set_nCharged( const Event& state) {
0414
0415 int nch=0;
0416 for (int i=0; i < state.size(); ++i) {
0417 if ( state[i].isLepton() || state[i].idAbs() == 900012 ) {
0418 if (state[i].isFinal()) nch++;
0419 if (state[i].mother1() == 1 && state[i].mother2() == 0) nch++;
0420 if (state[i].mother1() == 2 && state[i].mother2() == 0) nch++;
0421 }
0422 }
0423
0424 nchSaved = nch;
0425 return nch;
0426 }
0427
0428
0429 double zSplit(double zMinAbs, double zMaxAbs, double ) {
0430 return (zMinAbs + rndmPtr->flat() * (zMaxAbs - zMinAbs));
0431 }
0432
0433
0434 double overestimateInt(double zMinAbs,double zMaxAbs,
0435 double , double , int = -1) {
0436 double preFac = symmetryFactor() * gaugeFactor();
0437 double wt = 2. *enhance * preFac * 0.5 * ( zMaxAbs - zMinAbs);
0438 return wt;
0439 }
0440
0441
0442 double overestimateDiff(double , double , int = -1) {
0443 double preFac = symmetryFactor() * gaugeFactor();
0444 double wt = 2. *enhance * preFac * 0.5;
0445 return wt;
0446 }
0447
0448
0449 bool calc(const Event& state, int orderNow) {
0450
0451
0452 if (false) cout << state[0].e() << orderNow << endl;
0453
0454
0455 double z(splitInfo.kinematics()->z), pT2(splitInfo.kinematics()->pT2),
0456 m2dip(splitInfo.kinematics()->m2Dip),
0457 m2Rad(splitInfo.kinematics()->m2RadAft),
0458 m2Rec(splitInfo.kinematics()->m2Rec),
0459 m2Emt(splitInfo.kinematics()->m2EmtAft);
0460 int splitType(splitInfo.type);
0461
0462
0463 set_nCharged(state);
0464
0465 double wt = 0.;
0466 double preFac = symmetryFactor() * gaugeFactor();
0467 double kappa2 = pT2/m2dip;
0468 wt = preFac
0469 * (pow(1.-z,2.) + pow(z,2.));
0470
0471
0472 bool doMassive = (abs(splitType) == 2);
0473
0474 if (doMassive) {
0475
0476 double vijk = 1., pipj = 0.;
0477
0478
0479 if (splitType == 2) {
0480
0481 double yCS = kappa2 / (1.-z);
0482 double nu2Rad = m2Rad/m2dip;
0483 double nu2Emt = m2Emt/m2dip;
0484 double nu2Rec = m2Rec/m2dip;
0485 vijk = pow2(1.-yCS) - 4.*(yCS+nu2Rad+nu2Emt)*nu2Rec;
0486 vijk = sqrt(vijk) / (1-yCS);
0487 pipj = m2dip * yCS /2.;
0488
0489
0490 } else if (splitType ==-2) {
0491
0492 double xCS = 1 - kappa2/(1.-z);
0493 vijk = 1.;
0494 pipj = m2dip/2. * (1-xCS)/xCS;
0495 }
0496
0497
0498 wt = preFac * 1. / vijk * ( pow2(1.-z) + pow2(z)
0499 + m2Emt / ( pipj + m2Emt) );
0500 }
0501
0502
0503 if (idRadAfterSave > 0) wt *= z;
0504 else wt *= 1.-z;
0505
0506
0507 unordered_map<string,double> wts;
0508 wts.insert( make_pair("base", wt ));
0509 if (doVariations) {
0510
0511 if (settingsPtr->parm("Variations:muRfsrDown") != 1.)
0512 wts.insert( make_pair("Variations:muRfsrDown", wt ));
0513 if (settingsPtr->parm("Variations:muRfsrUp") != 1.)
0514 wts.insert( make_pair("Variations:muRfsrUp", wt ));
0515 }
0516
0517
0518 clearKernels();
0519 for ( unordered_map<string,double>::iterator it = wts.begin();
0520 it != wts.end(); ++it )
0521 kernelVals.insert(make_pair( it->first, it->second ));
0522
0523 return true;
0524 }
0525
0526 };
0527
0528
0529
0530 class Dire_fsr_u1new_A2SS : public Dire_fsr_u1new_A2FF {
0531
0532 public:
0533
0534 Dire_fsr_u1new_A2SS(int idRadAfterIn, string idIn, int softRS,
0535 Settings* settings,
0536 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0537 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo)
0538 : Dire_fsr_u1new_A2FF(idRadAfterIn, idIn, softRS, settings, particleData,
0539 rndm, beamA, beamB, coupSM, info, direInfo) {}
0540
0541 };
0542
0543
0544
0545 class Dire_isr_u1new_Q2QA : public DireSplittingU1new {
0546
0547 public:
0548
0549 Dire_isr_u1new_Q2QA(string idIn, int softRS, Settings* settings,
0550 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0551 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0552 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0553 beamB, coupSM, info, direInfo){}
0554
0555 bool canRadiate ( const Event&, pair<int,int>,
0556 unordered_map<string,bool> = unordered_map<string,bool>(),
0557 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0558 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0559 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0560
0561 int kinMap ();
0562
0563
0564 int motherID(int idDaughter);
0565
0566
0567 int sisterID(int idDaughter);
0568
0569
0570 int radBefID(int idRadAfter, int idEmtAfter);
0571
0572
0573 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0574 int colEmtAfter, int acolEmtAfter);
0575
0576 double gaugeFactor ( int=0, int=0 );
0577 double symmetryFactor ( int=0, int=0 );
0578
0579 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0580
0581
0582 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0583
0584
0585 double overestimateInt(double zMinAbs,double zMaxAbs,
0586 double pT2Old, double m2dip, int order = -1);
0587
0588
0589 double overestimateDiff(double z, double m2dip, int order = -1);
0590
0591
0592 bool calc(const Event& state = Event(), int order = -1);
0593
0594 };
0595
0596 class Dire_isr_u1new_A2QQ : public DireSplittingU1new {
0597
0598 public:
0599
0600 Dire_isr_u1new_A2QQ(string idIn, int softRS, Settings* settings,
0601 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0602 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0603 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0604 beamB, coupSM, info, direInfo){}
0605
0606 bool canRadiate ( const Event&, pair<int,int>,
0607 unordered_map<string,bool> = unordered_map<string,bool>(),
0608 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0609 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0610 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0611
0612 int kinMap ();
0613
0614
0615 int motherID(int idDaughter);
0616
0617
0618 int sisterID(int idDaughter);
0619
0620
0621 int radBefID(int idRadAfter, int idEmtAfter);
0622
0623
0624 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0625 int colEmtAfter, int acolEmtAfter);
0626
0627 double gaugeFactor ( int=0, int=0 );
0628 double symmetryFactor ( int=0, int=0 );
0629
0630
0631 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0632
0633
0634 double overestimateInt(double zMinAbs,double zMaxAbs,
0635 double pT2Old, double m2dip, int order = -1);
0636
0637
0638 double overestimateDiff(double z, double m2dip, int order = -1);
0639
0640
0641 bool calc(const Event& state = Event(), int order = -1);
0642
0643 };
0644
0645 class Dire_isr_u1new_Q2AQ : public DireSplittingU1new {
0646
0647 public:
0648
0649 Dire_isr_u1new_Q2AQ(string idIn, int softRS, Settings* settings,
0650 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0651 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0652 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0653 beamB, coupSM, info, direInfo){}
0654
0655 bool canRadiate ( const Event&, pair<int,int>,
0656 unordered_map<string,bool> = unordered_map<string,bool>(),
0657 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0658 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0659 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0660
0661 int kinMap ();
0662
0663
0664 int motherID(int idDaughter);
0665
0666
0667 int sisterID(int idDaughter);
0668
0669
0670 int radBefID(int idRadAfter, int idEmtAfter);
0671
0672
0673 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0674 int colEmtAfter, int acolEmtAfter);
0675
0676 double gaugeFactor ( int=0, int=0 );
0677 double symmetryFactor ( int=0, int=0 );
0678
0679
0680 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0681
0682
0683 double overestimateInt(double zMinAbs,double zMaxAbs,
0684 double pT2Old, double m2dip, int order = -1);
0685
0686
0687 double overestimateDiff(double z, double m2dip, int order = -1);
0688
0689
0690 bool calc(const Event& state = Event(), int order = -1);
0691
0692 };
0693
0694 class Dire_isr_u1new_L2LA : public DireSplittingU1new {
0695
0696 public:
0697
0698 Dire_isr_u1new_L2LA(string idIn, int softRS, Settings* settings,
0699 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0700 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0701 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0702 beamB, coupSM, info, direInfo){}
0703
0704 bool canRadiate ( const Event&, pair<int,int>,
0705 unordered_map<string,bool> = unordered_map<string,bool>(),
0706 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0707 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0708 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0709
0710 int kinMap ();
0711
0712
0713 int motherID(int idDaughter);
0714
0715
0716 int sisterID(int idDaughter);
0717
0718
0719 int radBefID(int idRadAfter, int idEmtAfter);
0720
0721
0722 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0723 int colEmtAfter, int acolEmtAfter);
0724
0725 double gaugeFactor ( int=0, int=0 );
0726 double symmetryFactor ( int=0, int=0 );
0727
0728 vector <int> recPositions( const Event& state, int iRad, int iEmt);
0729
0730
0731 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0732
0733
0734 double overestimateInt(double zMinAbs,double zMaxAbs,
0735 double pT2Old, double m2dip, int order = -1);
0736
0737
0738 double overestimateDiff(double z, double m2dip, int order = -1);
0739
0740
0741 bool calc(const Event& state = Event(), int order = -1);
0742
0743 };
0744
0745 class Dire_isr_u1new_A2LL : public DireSplittingU1new {
0746
0747 public:
0748
0749 Dire_isr_u1new_A2LL(string idIn, int softRS, Settings* settings,
0750 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0751 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0752 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0753 beamB, coupSM, info, direInfo){}
0754
0755 bool canRadiate ( const Event&, pair<int,int>,
0756 unordered_map<string,bool> = unordered_map<string,bool>(),
0757 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0758 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0759 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0760
0761 int kinMap ();
0762
0763
0764 int motherID(int idDaughter);
0765
0766
0767 int sisterID(int idDaughter);
0768
0769
0770 int radBefID(int idRadAfter, int idEmtAfter);
0771
0772
0773 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0774 int colEmtAfter, int acolEmtAfter);
0775
0776 double gaugeFactor ( int=0, int=0 );
0777 double symmetryFactor ( int=0, int=0 );
0778
0779
0780 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0781
0782
0783 double overestimateInt(double zMinAbs,double zMaxAbs,
0784 double pT2Old, double m2dip, int order = -1);
0785
0786
0787 double overestimateDiff(double z, double m2dip, int order = -1);
0788
0789
0790 bool calc(const Event& state = Event(), int order = -1);
0791
0792 };
0793
0794 class Dire_isr_u1new_L2AL : public DireSplittingU1new {
0795
0796 public:
0797
0798 Dire_isr_u1new_L2AL(string idIn, int softRS, Settings* settings,
0799 ParticleData* particleData, Rndm* rndm, BeamParticle* beamA,
0800 BeamParticle* beamB, CoupSM* coupSM, Info* info, DireInfo* direInfo) :
0801 DireSplittingU1new(idIn, softRS, settings, particleData, rndm, beamA,
0802 beamB, coupSM, info, direInfo){}
0803
0804 bool canRadiate ( const Event&, pair<int,int>,
0805 unordered_map<string,bool> = unordered_map<string,bool>(),
0806 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0807 bool canRadiate ( const Event&, int iRadBef, int iRecBef,
0808 Settings* = nullptr, PartonSystems* = nullptr, BeamParticle* = nullptr);
0809
0810 int kinMap ();
0811
0812
0813 int motherID(int idDaughter);
0814
0815
0816 int sisterID(int idDaughter);
0817
0818
0819 int radBefID(int idRadAfter, int idEmtAfter);
0820
0821
0822 pair<int,int> radBefCols(int colRadAfter, int acolRadAfter,
0823 int colEmtAfter, int acolEmtAfter);
0824
0825 double gaugeFactor ( int=0, int=0 );
0826 double symmetryFactor ( int=0, int=0 );
0827
0828
0829 double zSplit(double zMinAbs, double zMaxAbs, double m2dip);
0830
0831
0832 double overestimateInt(double zMinAbs,double zMaxAbs,
0833 double pT2Old, double m2dip, int order = -1);
0834
0835
0836 double overestimateDiff(double z, double m2dip, int order = -1);
0837
0838
0839 bool calc(const Event& state = Event(), int order = -1);
0840
0841 };
0842
0843
0844
0845 }
0846
0847 #endif