StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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 
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