]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA8/pythia8175/include/RHadrons.h
5e971b638ea417fb5c9233b62917cc4ec4fbe732
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8175 / include / RHadrons.h
1 // RHadrons.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2013 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 "Basics.h"
13 #include "Event.h"
14 #include "FragmentationFlavZpT.h"
15 #include "FragmentationSystems.h"
16 #include "Info.h"
17 #include "ParticleData.h"
18 #include "PythiaStdlib.h"
19 #include "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