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