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