8 #ifndef Pythia8_DireSplittingsEW_H
9 #define Pythia8_DireSplittingsEW_H
11 #define DIRE_SPLITTINGSEW_VERSION "2.002"
13 #include "Pythia8/Basics.h"
14 #include "Pythia8/BeamParticle.h"
15 #include "Pythia8/ParticleData.h"
16 #include "Pythia8/PythiaStdlib.h"
17 #include "Pythia8/Settings.h"
19 #include "Pythia8/DireSplittingsQCD.h"
34 softRS,settings,particleData,rndm,beamA,beamB,coupSM,info, direInfo)
41 double mZ, gammaZ, thetaW, mW, gammaW, aem0, enhance;
42 bool doQEDshowerByQ, doQEDshowerByL;
48 double aem2Pi (
double pT2);
50 bool useFastFunctions() {
return true; }
52 virtual vector <int> radAndEmt(
int idDaughter,
int)
54 virtual int nEmissions() {
return 1; }
55 virtual bool isPartial() {
return true; }
57 virtual bool canUseForBranching() {
return true; }
59 virtual int couplingType (
int,
int) {
return 2; }
60 virtual double coupling (
double = 0.,
double = 0.,
double = 0.,
double = -1.,
61 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>()) {
62 return (aem0 / (2.*M_PI));
64 virtual double couplingScale2 (
double = 0.,
double = 0.,
double = 0.,
65 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>()) {
80 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
81 coupSM, info, direInfo){}
83 bool canRadiate (
const Event&, pair<int,int>,
84 unordered_map<string,bool> = unordered_map<string,bool>(),
86 bool canRadiate (
const Event&,
int,
int,
93 int motherID(
int idDaughter);
96 int sisterID(
int idDaughter);
99 int radBefID(
int idRadAfter,
int idEmtAfter);
102 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
103 int colEmtAfter,
int acolEmtAfter);
105 double gaugeFactor (
int=0,
int=0);
106 double symmetryFactor (
int=0,
int=0);
109 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
112 double overestimateInt(
double zMinAbs,
double zMaxAbs,
113 double pT2Old,
double m2dip,
int order = -1);
116 double overestimateDiff(
double z,
double m2dip,
int order = -1);
119 bool calc(
const Event& state =
Event(),
int order = -1);
130 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
131 coupSM, info, direInfo){}
133 bool canRadiate (
const Event&, pair<int,int>,
134 unordered_map<string,bool> = unordered_map<string,bool>(),
136 bool canRadiate (
const Event&,
int,
int,
143 int motherID(
int idDaughter);
146 int sisterID(
int idDaughter);
149 int radBefID(
int idRadAfter,
int idEmtAfter);
152 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
153 int colEmtAfter,
int acolEmtAfter);
155 double gaugeFactor (
int=0,
int=0);
156 double symmetryFactor (
int=0,
int=0);
159 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
162 double overestimateInt(
double zMinAbs,
double zMaxAbs,
163 double pT2Old,
double m2dip,
int order = -1);
166 double overestimateDiff(
double z,
double m2dip,
int order = -1);
169 bool calc(
const Event& state =
Event(),
int order = -1);
180 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
181 coupSM, info, direInfo){}
183 bool canRadiate (
const Event&, pair<int,int>,
184 unordered_map<string,bool> = unordered_map<string,bool>(),
186 bool canRadiate (
const Event&,
int,
int,
193 int motherID(
int idDaughter);
196 int sisterID(
int idDaughter);
199 int radBefID(
int idRadAfter,
int idEmtAfter);
202 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
203 int colEmtAfter,
int acolEmtAfter);
205 double gaugeFactor (
int=0,
int=0);
206 double symmetryFactor (
int=0,
int=0);
209 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
212 double overestimateInt(
double zMinAbs,
double zMaxAbs,
213 double pT2Old,
double m2dip,
int order = -1);
216 double overestimateDiff(
double z,
double m2dip,
int order = -1);
219 bool calc(
const Event& state =
Event(),
int order = -1);
230 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
231 coupSM, info, direInfo){}
233 bool canRadiate (
const Event&, pair<int,int>,
234 unordered_map<string,bool> = unordered_map<string,bool>(),
236 bool canRadiate (
const Event&,
int,
int,
243 int motherID(
int idDaughter);
246 int sisterID(
int idDaughter);
249 int radBefID(
int idRadAfter,
int idEmtAfter);
252 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
253 int colEmtAfter,
int acolEmtAfter);
255 double gaugeFactor (
int=0,
int=0);
256 double symmetryFactor (
int=0,
int=0);
259 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
262 double overestimateInt(
double zMinAbs,
double zMaxAbs,
263 double pT2Old,
double m2dip,
int order = -1);
266 double overestimateDiff(
double z,
double m2dip,
int order = -1);
269 bool calc(
const Event& state =
Event(),
int order = -1);
280 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
281 coupSM, info, direInfo){}
283 bool canRadiate (
const Event&, pair<int,int>,
284 unordered_map<string,bool> = unordered_map<string,bool>(),
286 bool canRadiate (
const Event&,
int,
int,
293 int motherID(
int idDaughter);
296 int sisterID(
int idDaughter);
299 int radBefID(
int idRadAfter,
int idEmtAfter);
302 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
303 int colEmtAfter,
int acolEmtAfter);
305 double gaugeFactor (
int=0,
int=0);
306 double symmetryFactor (
int=0,
int=0);
309 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
312 double overestimateInt(
double zMinAbs,
double zMaxAbs,
313 double pT2Old,
double m2dip,
int order = -1);
316 double overestimateDiff(
double z,
double m2dip,
int order = -1);
319 bool calc(
const Event& state =
Event(),
int order = -1);
330 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
331 coupSM, info, direInfo){}
333 bool canRadiate (
const Event&, pair<int,int>,
334 unordered_map<string,bool> = unordered_map<string,bool>(),
336 bool canRadiate (
const Event&,
int,
int,
343 int motherID(
int idDaughter);
346 int sisterID(
int idDaughter);
349 int radBefID(
int idRadAfter,
int idEmtAfter);
352 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
353 int colEmtAfter,
int acolEmtAfter);
355 double gaugeFactor (
int=0,
int=0);
356 double symmetryFactor (
int=0,
int=0);
359 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
362 double overestimateInt(
double zMinAbs,
double zMaxAbs,
363 double pT2Old,
double m2dip,
int order = -1);
366 double overestimateDiff(
double z,
double m2dip,
int order = -1);
369 bool calc(
const Event& state =
Event(),
int order = -1);
382 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
383 coupSM, info, direInfo){}
385 bool canRadiate (
const Event&, pair<int,int>,
386 unordered_map<string,bool> = unordered_map<string,bool>(),
388 bool canRadiate (
const Event&,
int,
int,
395 int motherID(
int idDaughter);
398 int sisterID(
int idDaughter);
401 int radBefID(
int idRadAfter,
int idEmtAfter);
404 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
405 int colEmtAfter,
int acolEmtAfter);
407 double gaugeFactor (
int=0,
int=0);
408 double symmetryFactor (
int=0,
int=0);
411 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
414 double overestimateInt(
double zMinAbs,
double zMaxAbs,
415 double pT2Old,
double m2dip,
int order = -1);
418 double overestimateDiff(
double z,
double m2dip,
int order = -1);
421 bool calc(
const Event& state =
Event(),
int order = -1);
434 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
435 coupSM, info, direInfo) {
436 widthToAA = particleDataPtr->particleDataEntryPtr(25)->resWidthChan(
437 particleDataPtr->m0(25), 22, 22);
438 widthTot = settings->parm(
"MEM:WidthH");
441 bool canRadiate (
const Event&, pair<int,int>,
442 unordered_map<string,bool> = unordered_map<string,bool>(),
444 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
446 bool isPartial() {
return false; }
449 if (rad->id() == 22 && emt->id() == 22)
return true;
453 int couplingType (
int,
int);
454 double coupling (
double = 0.,
double = 0.,
double = 0.,
double = -1.,
455 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>());
460 int motherID(
int idDaughter);
463 int sisterID(
int idDaughter);
466 int radBefID(
int idRadAfter,
int idEmtAfter);
468 vector <int> recPositions(
const Event& state,
int iRad,
int iEmt);
471 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
472 int colEmtAfter,
int acolEmtAfter);
474 double gaugeFactor (
int=0,
int=0);
475 double symmetryFactor (
int=0,
int=0);
478 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
481 double overestimateInt(
double zMinAbs,
double zMaxAbs,
482 double pT2Old,
double m2dip,
int order = -1);
485 double overestimateDiff(
double z,
double m2dip,
int order = -1);
488 bool calc(
const Event& state =
Event(),
int order = -1);
490 double widthToAA, widthTot;
503 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
504 coupSM, info, direInfo) {
505 widthToGG = particleDataPtr->particleDataEntryPtr(25)->resWidthChan(
506 particleDataPtr->m0(25), 21, 21);
507 widthTot = settings->parm(
"MEM:WidthH");
510 bool canRadiate (
const Event&, pair<int,int>,
511 unordered_map<string,bool> = unordered_map<string,bool>(),
513 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
515 bool isPartial() {
return false; }
518 if (rad->id() == 21 && emt->id() == 21)
return true;
522 int couplingType (
int,
int);
523 double coupling (
double = 0.,
double = 0.,
double = 0.,
double = -1.,
524 pair<int,bool> = pair<int,bool>(), pair<int,bool> = pair<int,bool>());
529 int motherID(
int idDaughter);
532 int sisterID(
int idDaughter);
535 int radBefID(
int idRadAfter,
int idEmtAfter);
537 vector <int> recPositions(
const Event& state,
int iRad,
int iEmt);
540 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
541 int colEmtAfter,
int acolEmtAfter);
543 double gaugeFactor (
int=0,
int=0);
544 double symmetryFactor (
int=0,
int=0);
547 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
550 double overestimateInt(
double zMinAbs,
double zMaxAbs,
551 double pT2Old,
double m2dip,
int order = -1);
554 double overestimateDiff(
double z,
double m2dip,
int order = -1);
557 bool calc(
const Event& state =
Event(),
int order = -1);
559 double widthToGG, widthTot;
572 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
573 coupSM, info, direInfo){}
575 bool canRadiate (
const Event&, pair<int,int>,
576 unordered_map<string,bool> = unordered_map<string,bool>(),
578 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
584 int motherID(
int idDaughter);
587 int sisterID(
int idDaughter);
590 int radBefID(
int idRadAfter,
int idEmtAfter);
592 vector <int> recPositions(
const Event& state,
int iRad,
int iEmt);
595 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
596 int colEmtAfter,
int acolEmtAfter);
598 vector<pair<int,int> > radAndEmtCols(
int iRad,
int,
Event state) {
599 vector< pair<int,int> > ret;
600 if (state[iRad].idAbs() != 24)
return ret;
605 double gaugeFactor (
int=0,
int=0);
606 double symmetryFactor (
int=0,
int=0);
609 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
612 double overestimateInt(
double zMinAbs,
double zMaxAbs,
613 double pT2Old,
double m2dip,
int order = -1);
616 double overestimateDiff(
double z,
double m2dip,
int order = -1);
619 bool calc(
const Event& state =
Event(),
int order = -1);
632 DireSplittingEW(idIn, softRS, settings, particleData, rndm, beamA, beamB,
633 coupSM, info, direInfo){}
635 bool canRadiate (
const Event&, pair<int,int>,
636 unordered_map<string,bool> = unordered_map<string,bool>(),
638 bool canRadiate (
const Event&,
int,
int,
645 int motherID(
int idDaughter);
648 int sisterID(
int idDaughter);
651 int radBefID(
int idRadAfter,
int idEmtAfter);
654 pair<int,int> radBefCols(
int colRadAfter,
int acolRadAfter,
655 int colEmtAfter,
int acolEmtAfter);
657 double gaugeFactor (
int=0,
int=0);
658 double symmetryFactor (
int=0,
int=0);
661 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
664 double overestimateInt(
double zMinAbs,
double zMaxAbs,
665 double pT2Old,
double m2dip,
int order = -1);
668 double overestimateDiff(
double z,
double m2dip,
int order = -1);
671 bool calc(
const Event& state =
Event(),
int order = -1);
677 #endif // end Pythia8_DireSplittingLibrary_H