StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
RHadrons.h
1 // RHadrons.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 contains a class for the production and decay
7 // of long-lived heavy coloured particles, for now the gluino.
8 
9 #ifndef Pythia8_RHadrons_H
10 #define Pythia8_RHadrons_H
11 
12 #include "Pythia8/Basics.h"
13 #include "Pythia8/Event.h"
14 #include "Pythia8/FragmentationFlavZpT.h"
15 #include "Pythia8/FragmentationSystems.h"
16 #include "Pythia8/Info.h"
17 #include "Pythia8/ParticleData.h"
18 #include "Pythia8/PythiaStdlib.h"
19 #include "Pythia8/Settings.h"
20 
21 namespace Pythia8 {
22 
23 //==========================================================================
24 
25 // The RHadrons class contains the routines for the production and decay
26 // of long-lived heavy coloured particles.
27 
28 class RHadrons {
29 
30 public:
31 
32  // Constructor.
33  RHadrons() : nRHad(0) {}
34 
35  // Initialization of R-hadron handling.
36  bool init( Info* infoPtrIn, Settings& settings,
37  ParticleData* particleDataPtrIn, Rndm* rndmPtrIn);
38 
39  // Pointers to flavours and z sent from HadronLevel.
40  void fragPtrs( StringFlav* flavSelPtrIn, StringZ* zSelPtrIn)
41  { flavSelPtr = flavSelPtrIn; zSelPtr = zSelPtrIn;}
42 
43  // Produce R-hadrons.
44  bool produce( ColConfig& colConfig, Event& event);
45 
46  // Decay R-hadrons.
47  bool decay( Event& event);
48 
49  // Tell whether a given particle is supposed to form R-hadrons.
50  bool givesRHadron(int id);
51 
52  // Tell whether any R-hadrons have been formed.
53  bool exist() {return (nRHad > 0);}
54 
55  // Tell whether a R-hadron production+decay happened, and trace down.
56  int trace(int i) { for (int iR = 0; iR < nRHad; ++iR)
57  if (iBefRHad[iR] == i || iCreRHad[iR] == i) return iAftRHad[iR];
58  return 0;}
59 
60 private:
61 
62  // Constants: could only be changed in the code itself.
63  static const int IDRHADSB[14], IDRHADST[14], IDRHADGO[38], NTRYMAX;
64  static const double MSAFETY, EGBORROWMAX;
65 
66  // Initialization data, mainly read from Settings.
67  bool allowRH, allowRSb, allowRSt, allowRGo, allowSomeR, setMassesRH;
68  int idRSb, idRSt, idRGo;
69  double maxWidthRH, probGluinoballRH, mOffsetCloudRH, mCollapseRH,
70  diquarkSpin1RH, m0Sb, m0St, m0Go;
71 
72  // Current event properties.
73  vector<int> iBefRHad, iCreRHad, iRHadron, iAftRHad;
74  vector<bool> isTriplet;
75  int nRHad, iRHad, iBef, iSys;
76  ColSinglet* systemPtr;
77 
78  // Pointer to various information on the generation.
79  Info* infoPtr;
80 
81  // Pointer to the particle data table.
82  ParticleData* particleDataPtr;
83 
84  // Pointer to the random number generator.
85  Rndm* rndmPtr;
86 
87  // Pointers to classes for flavour and z generation.
88  StringFlav* flavSelPtr;
89  StringZ* zSelPtr;
90 
91  // Split a system that contains both a sparticle and a junction.
92  bool splitOffJunction( ColConfig& colConfig, Event& event);
93 
94  // Open up a closed gluon/gluino loop.
95  bool openClosedLoop( ColConfig& colConfig, Event& event);
96 
97  // Split a single colour singlet that contains two sparticles.
98  bool splitSystem( ColConfig& colConfig, Event& event);
99 
100  // Produce a R-hadron from a squark.
101  bool produceSquark( ColConfig& colConfig, Event& event);
102 
103  // Produce a R-hadron from a gluino.
104  bool produceGluino( ColConfig& colConfig, Event& event);
105 
106  // Construct R-hadron code from squark and (di)quark codes.
107  int toIdWithSquark( int id1, int id2);
108 
109  // Construct squark and (di)quark codes from R-hadron code.
110  pair<int,int> fromIdWithSquark( int idRHad);
111 
112  // Construct R-hadron code from endpoints and a gluino.
113  int toIdWithGluino( int id1, int id2);
114 
115  // Construct endpoint codes from R-hadron code with a gluino.
116  pair<int,int> fromIdWithGluino( int idRHad);
117 
118  // Construct modified four-vectors to match modified masses.
119  bool newKin( Vec4 pOld1, Vec4 pOld2, double mNew1, double mNew2,
120  Vec4& pNew1, Vec4& pNew2, bool checkMargin = true);
121 
122 };
123 
124 //==========================================================================
125 
126 } // end namespace Pythia8
127 
128 #endif // Pythia8_RHadrons_H
Definition: AgUStep.h:26