File indexing completed on 2025-01-18 10:06:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef Pythia8_Merging_H
0011 #define Pythia8_Merging_H
0012
0013 #include "Pythia8/Basics.h"
0014 #include "Pythia8/BeamParticle.h"
0015 #include "Pythia8/Event.h"
0016 #include "Pythia8/History.h"
0017 #include "Pythia8/Info.h"
0018 #include "Pythia8/MergingHooks.h"
0019 #include "Pythia8/ParticleData.h"
0020 #include "Pythia8/PartonLevel.h"
0021 #include "Pythia8/PhysicsBase.h"
0022 #include "Pythia8/PythiaStdlib.h"
0023 #include "Pythia8/Settings.h"
0024 #include "Pythia8/StandardModel.h"
0025
0026 namespace Pythia8 {
0027
0028
0029
0030
0031
0032
0033 class Merging : public PhysicsBase {
0034
0035 public:
0036
0037
0038 Merging() : PhysicsBase(), lhaPtr(nullptr), trialPartonLevelPtr(),
0039 mergingHooksPtr(), tmsNowMin() {}
0040
0041
0042 virtual ~Merging(){}
0043
0044
0045 void initPtrs( MergingHooksPtr mergingHooksPtrIn,
0046 PartonLevel* trialPartonLevelPtrIn) {
0047 trialPartonLevelPtr = trialPartonLevelPtrIn;
0048 mergingHooksPtr = mergingHooksPtrIn;
0049 }
0050
0051
0052 virtual void init();
0053
0054
0055 virtual void statistics();
0056
0057
0058 virtual int mergeProcess( Event& process);
0059
0060
0061
0062
0063 virtual void getStoppingInfo(double scales[100][100],
0064 double masses[100][100]);
0065
0066
0067
0068 virtual void getDeadzones(bool dzone[100][100]);
0069
0070
0071 virtual double generateSingleSudakov (double pTbegAll, double pTendAll,
0072 double m2dip, int idA, int type, double s = -1., double x = -1.);
0073
0074 LHEF3FromPythia8Ptr lhaPtr;
0075 void setLHAPtr(LHEF3FromPythia8Ptr lhaUpIn) { lhaPtr = lhaUpIn; }
0076
0077 protected:
0078
0079
0080 friend class Pythia;
0081
0082
0083 PartonLevel* trialPartonLevelPtr;
0084
0085
0086 MergingHooksPtr mergingHooksPtr;
0087
0088
0089 double tmsNowMin;
0090 static const double TMSMISMATCH;
0091
0092
0093 static const double MINWGT;
0094
0095
0096 int mergeProcessCKKWL( Event& process);
0097
0098
0099 int mergeProcessUMEPS( Event& process);
0100
0101
0102 int mergeProcessNL3( Event& process);
0103
0104
0105 int mergeProcessUNLOPS( Event& process);
0106
0107
0108 bool cutOnProcess( Event& process);
0109
0110
0111 void clearInfos() {
0112 stoppingScalesSave.clear();
0113 mDipSave.clear();
0114 radSave.clear();
0115 emtSave.clear();
0116 recSave.clear();
0117 isInDeadzone.clear();
0118 }
0119
0120
0121 int clusterAndStore(Event& process);
0122
0123
0124
0125 void getDipoles( int iRad, int colTag, int colSign,
0126 const Event& event, vector<pair<int,int> >& dipEnds);
0127
0128
0129
0130
0131 vector<double> stoppingScalesSave, mDipSave;
0132 vector<int> radSave, emtSave, recSave;
0133 vector<bool> isInDeadzone;
0134
0135 };
0136
0137
0138
0139 }
0140
0141 #endif