StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Merging.h
1 // Merging.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2014 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // This file is written by Stefan Prestel.
7 // Merging: Wpapper class to interface matrix element merging schemes with
8 // Pythia
9 
10 #ifndef Pythia8_Merging_H
11 #define Pythia8_Merging_H
12 
13 #include "Pythia8/Basics.h"
14 #include "Pythia8/BeamParticle.h"
15 #include "Pythia8/Event.h"
16 #include "Pythia8/Info.h"
17 #include "Pythia8/ParticleData.h"
18 #include "Pythia8/PythiaStdlib.h"
19 #include "Pythia8/Settings.h"
20 #include "Pythia8/PartonLevel.h"
21 #include "Pythia8/MergingHooks.h"
22 #include "Pythia8/History.h"
23 
24 namespace Pythia8 {
25 
26 //==========================================================================
27 
28 // Merging is a wrapper class for the interface of matrix element merging and
29 // Pythia8.
30 
31 class Merging {
32 
33 public:
34 
35  // Constructor.
36  Merging() { settingsPtr = 0; infoPtr = 0; particleDataPtr = 0;
37  rndmPtr = 0; beamAPtr = 0; beamBPtr = 0; trialPartonLevelPtr = 0;
38  mergingHooksPtr = 0; }
39 
40  // Make Pythia class friend
41  friend class Pythia;
42 
43  // Destructor.
44  ~Merging(){}
45 
46 protected:
47 
48  //----------------------------------------------------------------------//
49  // The members
50  //----------------------------------------------------------------------//
51 
52 
53  // Settings: databases of flags/modes/parms/words to control run.
54  Settings* settingsPtr;
55 
56  // Pointer to various information on the generation.
57  Info* infoPtr;
58 
59  // Pointer to the particle data table.
60  ParticleData* particleDataPtr;
61 
62  // Pointer to random number generator.
63  Rndm* rndmPtr;
64 
65  // Pointer to trial PartonLevel object
66  PartonLevel* trialPartonLevelPtr;
67 
68  // Pointer to trial MergingHooks object
69  MergingHooks* mergingHooksPtr;
70 
71  // Pointers to beam particles.
72  BeamParticle* beamAPtr;
73  BeamParticle* beamBPtr;
74 
75  // Minimal value found for the merging scale in events.
76  double tmsNowMin;
77  static const double TMSMISMATCH;
78 
79  // Initialisation function for internal use inside Pythia source code
80  void init( Settings* settingsPtrIn, Info* infoPtrIn,
81  ParticleData* particleDataPtrIn, Rndm* rndmPtrIn,
82  BeamParticle* beamAPtrIn, BeamParticle* beamBPtrIn,
83  MergingHooks* mergingHooksPtrIn, PartonLevel* trialPartonLevelPtrIn );
84 
85  // Function to print statistics.
86  void statistics(ostream& os = cout);
87 
88  //----------------------------------------------------------------------//
89  // Functions that implement matrix element merging.
90  //----------------------------------------------------------------------//
91 
92  // Function to steer different merging prescriptions.
93  int mergeProcess( Event& process);
94 
95  // Function to perform CKKW-L merging on the event.
96  int mergeProcessCKKWL( Event& process);
97 
98  // Function to perform UMEPS merging on the event.
99  int mergeProcessUMEPS( Event& process);
100 
101  // Function to perform NL3 NLO merging on the event.
102  int mergeProcessNL3( Event& process);
103 
104  // Function to perform UNLOPS merging on the event.
105  int mergeProcessUNLOPS( Event& process);
106 
107  // Function to apply the merging scale cut on an input event.
108  bool cutOnProcess( Event& process);
109 
110 };
111 
112 //==========================================================================
113 
114 } // end namespace Pythia8
115 
116 #endif // Pythia8_Merging_H