9 #ifndef Pythia8_VinciaQED_H 10 #define Pythia8_VinciaQED_H 13 #include "Pythia8/BeamParticle.h" 14 #include "Pythia8/Event.h" 15 #include "Pythia8/StandardModel.h" 16 #include "Pythia8/PartonSystems.h" 19 #include "Pythia8/VinciaCommon.h" 20 #include "Pythia8/VinciaWeights.h" 37 zetaSav(0.), phiSav(0.), sxjSav(0.), syjSav(0.), alpha(0.), c(0.),
38 hasTrial(false), x(0), y(0), idx(0), idy(0), mx2(0.), my2(0.),
39 ex(0.), ey(0.), m2Ant(0.), sAnt(0.), QQ(0.), isII(false), isIF(false),
40 isFF(false), isRF(false), isIA(true), isDip(false), shh(0.),
41 isInitPtr(false), isInit(false), verbose(1) {;}
46 void init(
Event &event,
int xIn,
int yIn,
double shhIn,
49 void init(
Event &event,
int xIn, vector<int> iRecoilIn,
double shhIn,
53 double alphaIn,
double cIn);
64 double q2Sav, zetaSav, phiSav, sxjSav, syjSav, alpha, c;
74 int spinTypex, spinTypey;
87 bool isII, isIF, isFF, isRF, isIA, isDip;
93 bool isInitPtr, isInit;
107 QEDsystem() : infoPtr(nullptr), partonSystemsPtr(nullptr),
108 particleDataPtr(nullptr), rndmPtr(nullptr), settingsPtr(nullptr),
109 loggerPtr(nullptr), vinComPtr(nullptr), isInitPtr(false), iSys(-1),
110 verbose(0), jNew(0), shat(0.) {;}
121 virtual void init(BeamParticlePtr beamAPtrIn, BeamParticlePtr beamBPtrIn,
123 virtual void setVerbose(
int verboseIn) { verbose = verboseIn; }
125 virtual void prepare(
const int iSysIn,
Event &event,
const double q2CutIn,
126 const int scaleRegionIn,
const vector<double> evolutionWindowsIn,
129 virtual void buildSystem(
Event &event) = 0;
131 virtual double q2Next(
Event &event,
double q2Start) = 0 ;
133 virtual bool acceptTrial(
Event &event) = 0;
135 virtual void updateEvent(
Event &event) = 0;
137 virtual void updatePartonSystems();
139 virtual void print() = 0;
143 virtual bool isInitial() {
return false;};
166 map<int,int> iReplace;
179 QEDemitSystem() : shh(-1.), cMat(0.), trialIsVec(
false), beamAPtr(
nullptr),
180 beamBPtr(
nullptr), qedMode(-1), qedModeMPI(-1),
181 scaleRegion(0), emitBelowHad(
false), q2Cut(-1.), isInit(
false),
182 TINYPDF(-1.), kMapTypeFinal(0) {;}
185 void init(BeamParticlePtr beamAPtrIn, BeamParticlePtr beamBPtrIn,
186 int verboseIn)
override;
188 void prepare(
const int iSysIn,
Event &event,
const double q2CutIn,
189 const int scaleRegionIn,
const vector<double> evolutionWindowsIn,
192 void buildSystem(
Event &event)
override;
194 double q2Next(
Event &event,
double q2Start)
override;
196 bool acceptTrial(
Event &event)
override;
198 void updateEvent(
Event &event)
override;
200 bool isInitial()
override {
return eleTrial->isII || eleTrial->isIF;}
202 void print()
override;
209 double pdfRatio(
bool isA,
double eOld,
double eNew,
int id,
double Qt2);
217 vector<vector<QEDemitElemental> > eleMat;
220 vector<QEDemitElemental> eleVec;
226 vector<double> evolutionWindows;
233 BeamParticlePtr beamAPtr{}, beamBPtr{};
236 int qedMode, qedModeMPI;
237 vector<bool> useSpinsQEDNow, useSpinsQED, useSpinsQEDHadDec;
238 int scaleRegion, emitBelowHad, isHadronDecay;
270 iPhot(iPhotIn), iSpec(iSpecIn), ariWeight(0) {
271 m2Ant = max(VinciaConstants::PICO,
272 m2(event[iPhotIn], event[iSpecIn]));
273 sAnt = max(VinciaConstants::PICO,
274 2.*event[iPhotIn].p()*event[iSpecIn].p());
275 m2Spec = max(0., event[iSpecIn].
m2());
285 double m2Spec, m2Ant, sAnt;
299 totIdWeight(-1.), hasTrial(false),
300 q2Trial(-1.), zTrial(-1.), phiTrial(-1.), idTrial(0), nQuark(-1),
301 nLepton(-1), q2Max(-1.), q2Cut(-1.), scaleRegion(0),
302 beamAPtr(nullptr), beamBPtr(nullptr), isInit(false), kMapTypeFinal(0) {;}
305 void init(BeamParticlePtr beamAPtrIn, BeamParticlePtr beamBPtrIn,
306 int verboseIn)
override;
308 void prepare(
const int iSysIn,
Event &event,
const double q2CutIn,
309 const int scaleRegionIn,
const vector<double> evolutionWindowsIn,
312 void buildSystem(
Event &event)
override;
314 double q2Next(
Event &event,
double q2Start)
override;
316 bool acceptTrial(
Event &event)
override;
318 void updateEvent(
Event &event)
override;
322 void print()
override;
330 vector<double> evolutionWindows;
334 vector<double> idWeights;
338 vector<QEDsplitElemental> eleVec;
342 double q2Trial, zTrial, phiTrial, idTrial;
351 BeamParticlePtr beamAPtr;
352 BeamParticlePtr beamBPtr;
372 iA(-1), iB(-1), isAPhot(false), isBPhot(false), hasTrial(false),
373 iPhotTrial(-1), iSpecTrial(-1), q2Trial(-1.), zTrial(-1.), phiTrial(-1.),
374 idTrial(-1), nQuark(-1), q2Cut(-1.),
375 scaleRegion(0), beamAPtr(nullptr), beamBPtr(nullptr),isInit(false),
379 void init(BeamParticlePtr beamAPtrIn, BeamParticlePtr beamBPtrIn,
380 int verboseIn)
override;
382 void prepare(
const int iSysIn,
Event &event,
const double q2CutIn,
383 const int scaleRegionIn,
const vector<double> evolutionWindowsIn,
386 void buildSystem(
Event &event)
override;
388 double q2Next(
Event &event,
double q2Start)
override;
390 bool acceptTrial(
Event &event)
override;
392 void updateEvent(
Event &event)
override;
396 void print()
override;
401 map<int,double> Rhat;
407 vector<double> evolutionWindows;
411 vector<double> idWeights;
412 double totIdWeight, maxIdWeight;
418 bool isAPhot, isBPhot;
422 int iPhotTrial, iSpecTrial;
423 double q2Trial, zTrial, phiTrial, idTrial;
436 BeamParticlePtr beamAPtr;
437 BeamParticlePtr beamBPtr;
472 virtual void init(BeamParticlePtr beamAPtrIn =
nullptr,
473 BeamParticlePtr beamBPtrIn =
nullptr) = 0;
474 bool isInit() {
return isInitSav;}
477 virtual bool polarise(vector<Particle>&) {
return false;}
480 virtual bool prepare(
int iSysIn,
Event &event,
int scaleRegionIn) = 0;
483 virtual void update(
Event &event,
int iSys) = 0;
486 virtual void setVerbose(
int verboseIn) {verbose = verboseIn;}
489 virtual void clear(
int iSys = -1) = 0;
492 virtual double q2Next(
Event &event,
double q2Start,
double q2End) = 0;
495 virtual int sysWin() = 0;
498 virtual bool lastIsSplitting() = 0;
499 virtual bool lastIsInitial() = 0;
500 virtual bool lastIsResonanceDecay() {
return false;}
503 virtual bool acceptTrial(
Event &event) = 0;
506 virtual void updateEvent(
Event &event) = 0;
509 virtual void updatePartonSystems(
Event &event) = 0;
512 virtual double q2minColoured() = 0;
513 virtual double q2min() = 0;
516 virtual unsigned int nBranchers() = 0;
517 virtual unsigned int nResDec() = 0;
520 BeamParticlePtr beamAPtr{};
521 BeamParticlePtr beamBPtr{};
533 bool isInitPtr, isInitSav;
554 void init(BeamParticlePtr beamAPtrIn = 0, BeamParticlePtr beamBPtrIn = 0)
557 bool prepare(
int iSysIn,
Event& event,
int scaleRegionIn)
override;
559 void update(
Event& event,
int iSys)
override;
563 emptyQEDemitSystem.setVerbose(verboseIn);
564 emptyQEDsplitSystem.setVerbose(verboseIn);
565 emptyQEDconvSystem.setVerbose(verboseIn);
568 void clear(
int iSys = -1)
override {
569 if (iSys < 0) {emitSystems.clear(); splitSystems.clear();
570 convSystems.clear();}
571 else {emitSystems.erase(iSys); splitSystems.erase(iSys);
572 convSystems.erase(iSys);}
573 qedTrialSysPtr =
nullptr;}
576 double q2Next(
Event& event,
double q2Start,
double)
override;
578 int sysWin()
override {
return iSysTrial;}
581 if (qedTrialSysPtr !=
nullptr)
return qedTrialSysPtr->isSplitting();
583 bool lastIsInitial()
override {
584 if (qedTrialSysPtr !=
nullptr)
return qedTrialSysPtr->isInitial();
587 bool acceptTrial(
Event &event)
override;
589 void updateEvent(
Event &event)
override;
591 void updatePartonSystems(
Event &event)
override;
594 double q2min()
override {
return q2minSav;}
598 int sizeNow = emitSystems.size();
599 sizeNow = max(sizeNow, (
int)splitSystems.size());
600 sizeNow = max(sizeNow, (
int)convSystems.size());
610 void q2NextSystem(map<int, T>& QEDsystemList,
Event& event,
double q2Start);
616 map< int, QEDemitSystem> emitSystems;
617 map< int, QEDsplitSystem> splitSystems;
618 map< int, QEDconvSystem> convSystems;
621 bool doQED, doEmission;
622 int nGammaToLepton, nGammaToQuark;
623 bool doConvertGamma, doConvertQuark;
626 double q2minSav, q2minColouredSav;
637 vector<double> evolutionWindows;
bool isInitial() override
Branching type.
Definition: VinciaQED.h:200
virtual bool isSplitting()
Methods to tell which type of brancher this is.
Definition: VinciaQED.h:142
int jNew
Information for partonSystems.
Definition: VinciaQED.h:165
Class for a QED emission system.
Definition: VinciaQED.h:175
bool isSplitting() override
Branching type: isSplitting() = true.
Definition: VinciaQED.h:320
The Event class holds all info on the generated event.
Definition: Event.h:408
int iSys
Event system.
Definition: VinciaQED.h:158
bool isInitial() override
Branching type: isInitial() = true.
Definition: VinciaQED.h:394
QEDsplitSystem()
Constructor.
Definition: VinciaQED.h:298
unsigned int nResDec() override
This module does not implement resonance decays.
Definition: VinciaQED.h:604
void init(Event &event, int xIn, int yIn, double shhIn, double verboseIn)
Initialize.
Definition: VinciaQED.cc:35
unsigned int nBranchers() override
Getter for number of systems.
Definition: VinciaQED.h:597
Base class for Vincia's QED and EW shower modules.
Definition: VinciaQED.h:455
virtual bool polarise(vector< Particle > &)
Select helicities for a system of particles.
Definition: VinciaQED.h:477
friend class QEDemitSystem
Friends for internal private members.
Definition: VinciaQED.h:33
double generateTrial(Event &event, double q2Start, double q2Low, double alphaIn, double cIn)
Generate a trial point.
Definition: VinciaQED.cc:133
virtual void setVerbose(int verboseIn) override
Set or change verbosity level, and propagate to QED systems.
Definition: VinciaQED.h:561
Class for a QED conversion system.
Definition: VinciaQED.h:366
Definition: StandardModel.h:106
Class for performing QED showers.
Definition: VinciaQED.h:541
QEDconvSystem()
Constructor.
Definition: VinciaQED.h:371
virtual void load()
Some early initialisation (needed for EW shower).
Definition: VinciaQED.h:469
VinciaModule()
Default constructor.
Definition: VinciaQED.h:460
VinciaQED()
Constructor.
Definition: VinciaQED.h:549
Definition: VinciaFSR.h:582
Definition: VinciaCommon.h:494
QEDsplitElemental(Event &event, int iPhotIn, int iSpecIn)
Constructor.
Definition: VinciaQED.h:269
Base class for QED systems.
Definition: VinciaQED.h:102
double q2minColoured() override
Return scales.
Definition: VinciaQED.h:593
QEDemitElemental()
Constuctor.
Definition: VinciaQED.h:36
bool lastIsSplitting() override
Information about last branching.
Definition: VinciaQED.h:580
Class for trial QED splittings.
Definition: VinciaQED.h:261
Class for QED emissions.
Definition: VinciaQED.h:28
double m2(const Vec4 &v1)
The squared invariant mass of one or more four-vectors.
Definition: Basics.cc:598
void clear(int iSys=-1) override
Clear everything, or specific system.
Definition: VinciaQED.h:568
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
void initPtr(Rndm *rndmPtrIn, PartonSystems *partonSystemsPtrIn)
Initialize the pointers.
Definition: VinciaQED.cc:24
double getKallen()
Kallen function.
Definition: VinciaQED.h:279
This class holds a map of all ParticleDataEntries.
Definition: ParticleData.h:422
int verbose
Verbose setting.
Definition: VinciaQED.h:162
virtual void setVerbose(int verboseIn)
Set verbosity level.
Definition: VinciaQED.h:486
int sysWin() override
Return the system window.
Definition: VinciaQED.h:578
Definition: Settings.h:196
QEDsystem()
Constructor.
Definition: VinciaQED.h:107
Class for a QED splitting system.
Definition: VinciaQED.h:293