10 #ifndef Pythia8_History_H
11 #define Pythia8_History_H
14 #include "BeamParticle.h"
17 #include "ParticleData.h"
18 #include "PythiaStdlib.h"
20 #include "PartonLevel.h"
59 emitted = inSystem.emitted;
60 emittor = inSystem.emittor;
61 recoiler = inSystem.recoiler;
62 partner = inSystem.partner;
63 pTscale = inSystem.pTscale;
67 Clustering(
int emtIn,
int radIn,
int recIn,
int partnerIn,
77 double pT()
const {
return pTscale; }
124 bool isStronglyOrdered,
130 for (
int i = 0, N = children.size(); i < N; ++i )
delete children[i];
146 void getStartingConditions(
const double RN,
Event& outState );
149 Event lowestMultProc(
const double RN) {
151 return (select(RN)->state);
155 double getPDFratio(
int side,
bool forSudakov,
156 int flavNum,
double xNum,
double muNum,
157 int flavDen,
double xDen,
double muDen);
163 void setScalesInHistory();
172 void findPath(vector<int>& out);
192 void setScales( vector<int> index,
bool forward);
201 void scaleCopies(
int iPart,
const Event& refEvent,
double rho);
207 void setEventScales();
210 if( mother ) mother->printScales();
211 cout <<
" scale " << scale
212 <<
" clusterIn " << clusterIn.pT()
213 <<
" state.scale() " << state.scale()
255 double weightTree(
PartonLevel* trial,
double as0,
double maxscale,
268 double doTrialShower(
PartonLevel* trial,
double maxscale);
273 bool onlyOrderedPaths();
278 bool onlyStronglyOrderedPaths();
286 bool registerPath(
History & l,
bool isOrdered,
bool isStronglyOrdered,
293 vector<Clustering> getAllClusterings();
298 vector<Clustering> getClusterings(
const Event& event);
309 vector<Clustering> findTriple (
int EmtTagIn,
int colTopIn,
311 vector<int> PosFinalPartn,
312 vector <int> PosInitPartn );
333 double pdfForSudakov();
347 int getRadBeforeFlav(
const int RadAfter,
const int EmtAfter,
356 int getRadBeforeCol(
const int RadAfter,
const int EmtAfter,
365 int getRadBeforeAcol(
const int RadAfter,
const int EmtAfter,
373 int getColPartner(
const int in,
const Event& event);
380 int getAcolPartner(
const int in,
const Event& event);
390 vector<int> getReclusteredPartners(
const int rad,
const int emt,
409 bool getColSinglet(
const int flavType,
const int iParton,
410 const Event& event, vector<int>& exclude,
411 vector<int>& colSinglet);
417 bool isColSinglet(
const Event& event, vector<int> system);
424 bool isFlavSinglet(
const Event& event,
425 vector<int> system,
int flav=0);
436 bool connectRadiator(
Particle& Radiator,
const int RadType,
437 const Particle& Recoiler,
const int RecType,
438 const Event& event );
454 int FindCol(
int col,
int iExclude1,
int iExclude2,
455 const Event& event,
int type,
bool isHardIn);
463 int FindParticle(
const Particle& particle,
const Event& event);
470 bool allowedClustering(
int rad,
int emt,
int rec,
int partner,
471 const Event& event );
478 bool isSinglett(
int rad,
int emt,
int rec,
const Event& event );
486 bool validEvent(
const Event& event );
495 double choseHardScale(
const Event& event )
const;
499 int getCurrentFlav(
const int)
const;
503 double getCurrentX(
const int)
const;
505 double getCurrentZ(
const int rad,
const int rec,
const int emt)
const;
508 double pTLund(
const Particle& RadAfterBranch,
const Particle& EmtAfterBranch,
509 const Particle& RecAfterBranch,
int ShowerType);
524 vector<History *> children;
529 map<double,History *> paths;
537 bool foundOrderedPath;
541 bool foundStronglyOrderedPath;
545 bool foundCompletePath;
591 #endif // end Pythia8_History_H