Line data Source code
1 : // HiddenValleyFragmentation.h is a part of the PYTHIA event generator.
2 : // Copyright (C) 2015 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 "Pythia8/Basics.h"
12 : #include "Pythia8/Event.h"
13 : #include "Pythia8/FragmentationFlavZpT.h"
14 : #include "Pythia8/FragmentationSystems.h"
15 : #include "Pythia8/Info.h"
16 : #include "Pythia8/MiniStringFragmentation.h"
17 : #include "Pythia8/ParticleData.h"
18 : #include "Pythia8/PythiaStdlib.h"
19 : #include "Pythia8/Settings.h"
20 : #include "Pythia8/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 0 : HVStringFlav() {}
34 :
35 : // Destructor.
36 0 : ~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 0 : HVStringPT() {}
65 :
66 : // Destructor.
67 0 : ~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 0 : HVStringZ() {}
84 :
85 : // Destructor.
86 0 : ~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 0 : virtual double stopMass() {return 1.5 * mhvMeson;}
96 0 : virtual double stopNewFlav() {return 2.0;}
97 0 : 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 0 : HiddenValleyFragmentation() : doHVfrag(false), hvFlavSelPtr(NULL),
117 0 : hvPTSelPtr(NULL), hvZSelPtr(NULL) {}
118 :
119 : // Destructor.
120 0 : ~HiddenValleyFragmentation() { if (doHVfrag) {
121 0 : if (hvZSelPtr) delete hvZSelPtr; if (hvPTSelPtr) delete hvPTSelPtr;
122 0 : 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
|