Update to pythi8.170
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / include / HiddenValleyFragmentation.h
1 // HiddenValleyFragmentation.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 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 contains the classes for Hidden-Valley fragmentation.
7
8 #ifndef Pythia8_HiddenValleyFragmentation_H
9 #define Pythia8_HiddenValleyFragmentation_H
10
11 #include "Basics.h"
12 #include "Event.h"
13 #include "FragmentationFlavZpT.h"
14 #include "FragmentationSystems.h"
15 #include "Info.h"
16 #include "MiniStringFragmentation.h"
17 #include "ParticleData.h"
18 #include "PythiaStdlib.h"
19 #include "Settings.h"
20 #include "StringFragmentation.h"
21
22 namespace Pythia8 {
23
24 //==========================================================================
25
26 // The HVStringFlav class is used to select HV-quark and HV-hadron flavours.
27
28 class HVStringFlav : public StringFlav {
29
30 public:
31
32   // Constructor. 
33   HVStringFlav() {}
34
35   // Destructor. 
36   ~HVStringFlav() {}
37
38   // Initialize data members.
39   void init(Settings& settings, Rndm* rndmPtrIn);
40
41   // Pick a new flavour (including diquarks) given an incoming one.
42   FlavContainer pick(FlavContainer& flavOld);
43
44   // Combine two flavours (including diquarks) to produce a hadron.
45   int combine(FlavContainer& flav1, FlavContainer& flav2);
46
47 private:
48
49   // Initialization data, to be read from Settings.
50   int    nFlav;
51   double probVector;
52
53 };
54  
55 //==========================================================================
56
57 // The HVStringPT class is used to select select HV transverse momenta.
58
59 class HVStringPT : public StringPT {
60
61 public:
62
63   // Constructor. 
64   HVStringPT() {}
65
66   // Destructor. 
67   ~HVStringPT() {}
68
69   // Initialize data members.
70   void init(Settings& settings, ParticleData& particleData, Rndm* rndmPtrIn);
71
72 };
73  
74 //==========================================================================
75
76 // The HVStringZ class is used to sample the HV fragmentation function f(z).
77
78 class HVStringZ : public StringZ {
79
80 public:
81
82   // Constructor. 
83   HVStringZ() {}
84
85   // Destructor. 
86   ~HVStringZ() {}
87
88   // Initialize data members.
89   void init(Settings& settings, ParticleData& particleData, Rndm* rndmPtrIn);
90   
91   // Fragmentation function: top-level to determine parameters.
92   double zFrag( int idOld, int idNew = 0, double mT2 = 1.);
93
94   // Parameters for stopping in the middle; for now hardcoded.
95   virtual double stopMass()    {return 1.5 * mhvMeson;} 
96   virtual double stopNewFlav() {return 2.0;} 
97   virtual double stopSmear()   {return 0.2;} 
98
99 private:
100
101   // Initialization data, to be read from Settings and ParticleData.
102   double mqv2, bmqv2, rFactqv, mhvMeson;
103
104 };
105
106 //==========================================================================
107
108 // The HiddenValleyFragmentation class contains the routines 
109 // to fragment a Hidden Valley partonic system.
110
111 class HiddenValleyFragmentation {
112
113 public:
114
115   // Constructor. 
116   HiddenValleyFragmentation() : hvFlavSelPtr(NULL), hvPTSelPtr(NULL),
117     hvZSelPtr(NULL) {}
118
119   // Destructor. 
120   ~HiddenValleyFragmentation() { if (doHVfrag) { 
121     if (hvZSelPtr) delete hvZSelPtr; if (hvPTSelPtr) delete hvPTSelPtr;
122     if (hvFlavSelPtr) delete hvFlavSelPtr;} }
123
124   // Initialize and save pointers.
125   bool init(Info* infoPtrIn, Settings& settings, 
126     ParticleData* particleDataPtrIn, Rndm* rndmPtrIn);
127
128   // Do the fragmentation: driver routine.
129   bool fragment(Event& event);
130
131 private: 
132
133   // Pointer to various information on the generation.
134   Info*         infoPtr;
135
136   // Pointer to the particle data table.
137   ParticleData* particleDataPtr;
138
139   // Pointer to the random number generator.
140   Rndm*         rndmPtr;
141
142   // Data mambers.
143   bool          doHVfrag;
144   int           nFlav, hvOldSize, hvNewSize; 
145   double        mhvMeson, mSys;
146   vector<int>   ihvParton;
147
148   // Configuration of colour-singlet systems.
149   ColConfig     hvColConfig;   
150
151   // Temporary event record for the Hidden Valley system.
152   Event         hvEvent;
153
154   // The generator class for Hidden Valley string fragmentation.
155   StringFragmentation hvStringFrag;
156
157   // The generator class for special low-mass HV string fragmentation.
158   MiniStringFragmentation hvMinistringFrag;
159
160   // Pointers to classes for flavour, pT and z generation in HV sector.
161   StringFlav*   hvFlavSelPtr;
162   StringPT*     hvPTSelPtr;
163   StringZ*      hvZSelPtr;
164
165   // Extract HV-particles from event to hvEvent. Assign HV-colours.
166   bool extractHVevent(Event& event);
167
168   // Collapse of low-mass system to one HV-meson.
169   bool collapseToMeson();
170
171   // Insert HV particles from hvEvent to event.
172   bool insertHVevent(Event& event);
173
174 };  
175  
176 //==========================================================================
177
178 } // end namespace Pythia8
179
180 #endif // Pythia8_HiddenValleyFragmentation_H