8 #ifndef Pythia8_DireSplittingsU1new_H 9 #define Pythia8_DireSplittingsU1new_H 11 #define DIRE_SPLITTINGSU1NEW_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" 18 #include "Pythia8/StandardModel.h" 20 #include "Pythia8/DireSplittingsQCD.h" 35 beamB, coupSM, info, direInfo) {
init(); }
42 bool doU1NEWshowerByQ, doU1NEWshowerByL;
48 double aem2Pi (
double pT2,
int = 0);
50 bool useFastFunctions() {
return true; }
54 virtual int nEmissions() {
return 1; }
55 virtual bool isPartial() {
return true; }
57 virtual bool canUseForBranching() {
return true; }
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 (ax0 / (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>()) {
82 beamB, coupSM, info, direInfo){}
84 bool canRadiate (
const Event&, pair<int,int>,
85 unordered_map<string,bool> = unordered_map<string,bool>(),
87 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
99 int radBefID(
int idRadAfter,
int idEmtAfter);
102 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
103 int colEmtAfter,
int acolEmtAfter);
111 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
115 double pT2Old,
double m2dip,
int order = -1);
135 beamB, coupSM, info, direInfo){}
137 bool canRadiate (
const Event&, pair<int,int>,
138 unordered_map<string,bool> = unordered_map<string,bool>(),
140 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
152 int radBefID(
int idRadAfter,
int idEmtAfter);
155 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
156 int colEmtAfter,
int acolEmtAfter);
164 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
168 double pT2Old,
double m2dip,
int order = -1);
188 beamB, coupSM, info, direInfo){}
190 bool canRadiate (
const Event&, pair<int,int>,
191 unordered_map<string,bool> = unordered_map<string,bool>(),
193 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
198 vector<pair<int,int> > radAndEmtCols(
int iRad,
int,
Event state) {
199 vector< pair<int,int> > ret
201 if (particleDataPtr->colType(state[iRad].id()) != 0) {
202 ret[0].first = state[iRad].col();
203 ret[0].second = state[iRad].acol();
217 int radBefID(
int idRadAfter,
int idEmtAfter);
220 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
221 int colEmtAfter,
int acolEmtAfter);
229 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
233 double pT2Old,
double m2dip,
int order = -1);
253 beamB, coupSM, info, direInfo){}
255 bool canRadiate (
const Event&, pair<int,int>,
256 unordered_map<string,bool> = unordered_map<string,bool>(),
258 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
263 vector<pair<int,int> > radAndEmtCols(
int iRad,
int,
Event state) {
264 vector< pair<int,int> > ret
266 if (particleDataPtr->colType(state[iRad].id()) != 0) {
267 ret[0].first = state[iRad].col();
268 ret[0].second = state[iRad].acol();
282 int radBefID(
int idRadAfter,
int idEmtAfter);
285 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
286 int colEmtAfter,
int acolEmtAfter);
294 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
298 double pT2Old,
double m2dip,
int order = -1);
322 softRS, settings, particleData, rndm, beamA, beamB, coupSM, info,
324 idRadAfterSave(idRadAfterIn), nchSaved(1) {}
325 bool canRadiate (
const Event& state, pair<int,int> ints,
326 unordered_map<string,bool> = unordered_map<string,bool>(),
328 return ( state[ints.first].isFinal()
329 && state[ints.first].id() == 900032
330 && (state[ints.second].isLepton()
331 || state[ints.second].idAbs() == 900012));
333 bool canRadiate (
const Event& state,
int iRadBef,
int iRecBef,
335 return ( state[iRadBef].isFinal()
336 && state[iRadBef].
id() == 900032
337 && (state[iRecBef].isLepton()
338 || state[iRecBef].idAbs() == 900012));
342 bool isPartial() {
return false; }
344 vector<pair<int,int> > radAndEmtCols(
int iRad,
int,
Event state) {
345 vector< pair<int,int> > ret;
346 if (state[iRad].
id() != 900032)
return ret;
348 if (particleDataPtr->colType(idRadAfterSave) != 0) {
349 int sign = (idRadAfterSave > 0) ? 1 : -1;
350 int newCol = state.nextColTag();
352 ret[0].first = newCol;
355 ret[1].second = newCol;
358 ret[0].second = newCol;
359 ret[1].first = newCol;
369 {
return idRadAfterSave; }
371 {
return -idRadAfterSave; }
378 {
return 1./double(nchSaved); }
381 if ( idRadAfter == idRadAfterSave
382 && particleDataPtr->isQuark(idRadAfter)
383 && particleDataPtr->isQuark(idEmtAfter))
return 900032;
387 pair<int,int>
radBefCols(
int,
int,
int,
int) {
return make_pair(0,0); }
391 if ( state[iRad].isFinal() || state[iRad].
id() != idRadAfterSave
392 || state[iEmt].
id() != -idRadAfterSave)
return vector<int>();
397 for (
int i=0; i < state.
size(); ++i) {
398 if ( find(iExc.begin(), iExc.end(), i) != iExc.end() )
continue;
399 if ( state[i].isLepton() || state[i].idAbs() == 900012) {
400 if (state[i].isFinal())
402 if (state[i].mother1() == 1 && state[i].mother2() == 0)
404 if (state[i].mother1() == 2 && state[i].mother2() == 0)
416 for (
int i=0; i < state.
size(); ++i) {
417 if ( state[i].isLepton() || state[i].idAbs() == 900012 ) {
418 if (state[i].isFinal()) nch++;
419 if (state[i].mother1() == 1 && state[i].mother2() == 0) nch++;
420 if (state[i].mother1() == 2 && state[i].mother2() == 0) nch++;
429 double zSplit(
double zMinAbs,
double zMaxAbs,
double ) {
430 return (zMinAbs + rndmPtr->flat() * (zMaxAbs - zMinAbs));
435 double ,
double ,
int = -1) {
437 double wt = 2. *enhance * preFac * 0.5 * ( zMaxAbs - zMinAbs);
444 double wt = 2. *enhance * preFac * 0.5;
452 if (
false) cout << state[0].e() << orderNow << endl;
455 double z(splitInfo.kinematics()->z), pT2(splitInfo.kinematics()->pT2),
456 m2dip(splitInfo.kinematics()->m2Dip),
457 m2Rad(splitInfo.kinematics()->m2RadAft),
458 m2Rec(splitInfo.kinematics()->m2Rec),
459 m2Emt(splitInfo.kinematics()->m2EmtAft);
460 int splitType(splitInfo.type);
467 double kappa2 = pT2/m2dip;
469 * (pow(1.-z,2.) + pow(z,2.));
472 bool doMassive = (abs(splitType) == 2);
476 double vijk = 1., pipj = 0.;
479 if (splitType == 2) {
481 double yCS = kappa2 / (1.-z);
482 double nu2Rad = m2Rad/m2dip;
483 double nu2Emt = m2Emt/m2dip;
484 double nu2Rec = m2Rec/m2dip;
485 vijk =
pow2(1.-yCS) - 4.*(yCS+nu2Rad+nu2Emt)*nu2Rec;
486 vijk = sqrt(vijk) / (1-yCS);
487 pipj = m2dip * yCS /2.;
490 }
else if (splitType ==-2) {
492 double xCS = 1 - kappa2/(1.-z);
494 pipj = m2dip/2. * (1-xCS)/xCS;
498 wt = preFac * 1. / vijk * (
pow2(1.-z) +
pow2(z)
499 + m2Emt / ( pipj + m2Emt) );
503 if (idRadAfterSave > 0) wt *= z;
507 unordered_map<string,double> wts;
508 wts.insert( make_pair(
"base", wt ));
511 if (settingsPtr->parm(
"Variations:muRfsrDown") != 1.)
512 wts.insert( make_pair(
"Variations:muRfsrDown", wt ));
513 if (settingsPtr->parm(
"Variations:muRfsrUp") != 1.)
514 wts.insert( make_pair(
"Variations:muRfsrUp", wt ));
519 for ( unordered_map<string,double>::iterator it = wts.begin();
520 it != wts.end(); ++it )
521 kernelVals.insert(make_pair( it->first, it->second ));
539 rndm, beamA, beamB, coupSM, info, direInfo) {}
553 beamB, coupSM, info, direInfo){}
555 bool canRadiate (
const Event&, pair<int,int>,
556 unordered_map<string,bool> = unordered_map<string,bool>(),
558 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
570 int radBefID(
int idRadAfter,
int idEmtAfter);
573 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
574 int colEmtAfter,
int acolEmtAfter);
582 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
586 double pT2Old,
double m2dip,
int order = -1);
604 beamB, coupSM, info, direInfo){}
606 bool canRadiate (
const Event&, pair<int,int>,
607 unordered_map<string,bool> = unordered_map<string,bool>(),
609 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
621 int radBefID(
int idRadAfter,
int idEmtAfter);
624 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
625 int colEmtAfter,
int acolEmtAfter);
631 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
635 double pT2Old,
double m2dip,
int order = -1);
653 beamB, coupSM, info, direInfo){}
655 bool canRadiate (
const Event&, pair<int,int>,
656 unordered_map<string,bool> = unordered_map<string,bool>(),
658 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
670 int radBefID(
int idRadAfter,
int idEmtAfter);
673 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
674 int colEmtAfter,
int acolEmtAfter);
680 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
684 double pT2Old,
double m2dip,
int order = -1);
702 beamB, coupSM, info, direInfo){}
704 bool canRadiate (
const Event&, pair<int,int>,
705 unordered_map<string,bool> = unordered_map<string,bool>(),
707 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
719 int radBefID(
int idRadAfter,
int idEmtAfter);
722 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
723 int colEmtAfter,
int acolEmtAfter);
731 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
735 double pT2Old,
double m2dip,
int order = -1);
753 beamB, coupSM, info, direInfo){}
755 bool canRadiate (
const Event&, pair<int,int>,
756 unordered_map<string,bool> = unordered_map<string,bool>(),
758 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
770 int radBefID(
int idRadAfter,
int idEmtAfter);
773 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
774 int colEmtAfter,
int acolEmtAfter);
780 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
784 double pT2Old,
double m2dip,
int order = -1);
802 beamB, coupSM, info, direInfo){}
804 bool canRadiate (
const Event&, pair<int,int>,
805 unordered_map<string,bool> = unordered_map<string,bool>(),
807 bool canRadiate (
const Event&,
int iRadBef,
int iRecBef,
819 int radBefID(
int idRadAfter,
int idEmtAfter);
822 pair<int,int>
radBefCols(
int colRadAfter,
int acolRadAfter,
823 int colEmtAfter,
int acolEmtAfter);
829 double zSplit(
double zMinAbs,
double zMaxAbs,
double m2dip);
833 double pT2Old,
double m2dip,
int order = -1);
constexpr double pow2(const double &x)
Powers of small integers - for balance speed/code clarity.
Definition: PythiaStdlib.h:173
Definition: DireSplittingsU1new.h:745
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: DireSplittingsU1new.h:794
Definition: DireSplittingsU1new.h:545
double zSplit(double zMinAbs, double zMaxAbs, double)
Pick z for new splitting.
Definition: DireSplittingsU1new.h:429
The Event class holds all info on the generated event.
Definition: Event.h:408
virtual double coupling(double=0., double=0., double=0., double=-1., pair< int, bool >=pair< int, bool >(), pair< int, bool >=pair< int, bool >())
Definition: DireSplittingsU1new.h:60
Definition: DireSplittingsU1new.h:694
Definition: DireSplittingsQCD.h:27
int set_nCharged(const Event &state)
All charged particles are potential recoilers.
Definition: DireSplittingsU1new.h:413
virtual double gaugeFactor(int, int)
Return color factor for splitting.
Definition: DireSplittings.h:157
double symmetryFactor(int=0, int=0)
Return symmetry factor for splitting.
Definition: DireSplittingsU1new.h:377
virtual double overestimateInt(double, double, double, double, int=-1)
New overestimates, z-integrated versions.
Definition: DireSplittings.h:189
double aem2Pi(double pT2, int=0)
Definition: DireSplittingsU1new.cc:58
Definition: DireSplittingsU1new.h:245
Definition: DireBasics.h:374
Definition: DireSplittingsU1new.h:596
Definition: StandardModel.h:106
int motherID(int)
Return id of mother after splitting.
Definition: DireSplittingsU1new.h:368
double sumCharge2Tot
VARIABLES.
Definition: DireSplittingsU1new.h:41
Definition: DireSplittingsU1new.h:180
Definition: DireSplittingsU1new.h:26
vector< int > recPositions(const Event &state, int iRad, int iEmt)
All charged particles are potential recoilers.
Definition: DireSplittingsU1new.h:390
virtual bool calc(const Event &=Event(), int=-1)
Functions to calculate the kernel from SplitInfo information.
Definition: DireSplittings.h:203
Definition: DireSplittingsU1new.h:127
Definition: DireSplittingsU1new.h:530
double gaugeFactor(int=0, int=0)
{ return createvector<int>(1)(-1); }
Definition: DireSplittingsU1new.h:375
virtual int kinMap()
Definition: DireSplittings.h:123
vector< int > radAndEmt(int, int)
Definition: DireSplittingsU1new.h:372
void init()
The SplittingU1new class.
Definition: DireSplittingsU1new.cc:21
double overestimateInt(double zMinAbs, double zMaxAbs, double, double, int=-1)
New overestimates, z-integrated versions.
Definition: DireSplittingsU1new.h:434
Definition: StandardModel.h:135
int size() const
Event record size.
Definition: Event.h:459
virtual int couplingType(int, int)
Definition: DireSplittingsU1new.h:59
virtual double overestimateDiff(double, double, int=-1)
Return kernel for new splitting.
Definition: DireSplittings.h:193
DireSplittingU1new(string idIn, int softRS, Settings *settings, ParticleData *particleData, Rndm *rndm, BeamParticlePtr beamA, BeamParticlePtr beamB, CoupSM *coupSM, Info *info, DireInfo *direInfo)
Constructor and destructor.
Definition: DireSplittingsU1new.h:31
int radBefID(int idRadAfter, int idEmtAfter)
Return id of recombined radiator (before splitting!)
Definition: DireSplittingsU1new.h:380
virtual vector< int > radAndEmt(int idDaughter, int)
Definition: DireSplittingsU1new.h:52
Definition: DireSplittingsU1new.h:645
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
Definition: DireSplittingsU1new.h:74
bool calc(const Event &state, int orderNow)
Functions to calculate the kernel from SplitInfo information.
Definition: DireSplittingsU1new.h:449
double overestimateDiff(double, double, int=-1)
Return kernel for new splitting.
Definition: DireSplittingsU1new.h:442
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
virtual pair< int, int > radBefCols(int, int, int, int)
Return colours of recombined radiator (before splitting!)
Definition: DireSplittings.h:153
int kinMap()
Definition: DireSplittingsU1new.h:341
Definition: DireBasics.h:82
virtual int sisterID(int)
Return id of emission.
Definition: DireSplittings.h:129
Definition: DireSplittingsU1new.h:310
Definition: Settings.h:196
virtual double zSplit(double, double, double)
Pick z for new splitting.
Definition: DireSplittings.h:186
pair< int, int > radBefCols(int, int, int, int)
Return colours of recombined radiator (before splitting!)
Definition: DireSplittingsU1new.h:387
int sisterID(int)
Return id of emission.
Definition: DireSplittingsU1new.h:370
virtual int motherID(int)
Return id of mother after splitting.
Definition: DireSplittings.h:126