File indexing completed on 2025-11-03 09:56:22
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 #ifndef Pythia8_RHadrons_H
0010 #define Pythia8_RHadrons_H
0011 
0012 #include "Pythia8/FragmentationModel.h"
0013 
0014 namespace Pythia8 {
0015 
0016 
0017 
0018 
0019 
0020 
0021 class RHadrons : public FragmentationModel {
0022 
0023 public:
0024 
0025   
0026   RHadrons() : FragmentationModel(), allowRH(), allowRSb(), allowRSt(),
0027     allowRGo(), allowSomeR(), setMassesRH(), idRSb(), idRSt(), idRGo(),
0028     maxWidthRH(), probGluinoballRH(), mOffsetCloudRH(), mCollapseRH(),
0029     diquarkSpin1RH(), m0Sb(), m0St(), m0Go(), nRHad(0), iRHad(), iBef(),
0030     iSys(), systemPtr() {}
0031 
0032   
0033   bool init(StringFlav* flavSelPtrIn = nullptr, StringPT* pTSelPtrIn = nullptr,
0034     StringZ* zSelPtrIn = nullptr, FragModPtr fragModPtrIn = nullptr) override;
0035 
0036   
0037   bool fragment(int iSub, ColConfig& colConfig, Event& event,
0038     bool isDiff = false, bool systemRecoil = true) override;
0039 
0040   
0041   bool decay( Event& event);
0042 
0043   
0044   bool givesRHadron(int id);
0045 
0046   
0047   bool exist() {return (nRHad > 0);}
0048 
0049   
0050   int trace(int i) {
0051     for (int iR = 0; iR < nRHad; ++iR)
0052       if (iBefRHad[iR] == i || iCreRHad[iR] == i) return iAftRHad[iR];
0053     return 0;}
0054 
0055 private:
0056 
0057   
0058   static const int    IDRHADSB[14], IDRHADST[14], IDRHADGO[38], NTRYMAX;
0059   static const double MSAFETY, EGBORROWMAX;
0060 
0061   
0062   bool   allowRH, allowRSb, allowRSt, allowRGo, allowSomeR, setMassesRH;
0063   int    idRSb, idRSt, idRGo;
0064   double maxWidthRH, probGluinoballRH, mOffsetCloudRH, mCollapseRH,
0065          diquarkSpin1RH, m0Sb, m0St, m0Go;
0066 
0067   
0068   vector<int>  iBefRHad, iCreRHad, iRHadron, iAftRHad;
0069   vector<bool> isTriplet;
0070   int          nRHad, iRHad, iBef, iSys;
0071   ColSinglet*  systemPtr;
0072 
0073   
0074   bool splitOffJunction( ColConfig& colConfig, Event& event);
0075 
0076   
0077   bool openClosedLoop( ColConfig& colConfig, Event& event);
0078 
0079   
0080   bool splitSystem( ColConfig& colConfig, Event& event);
0081 
0082   
0083   bool produceSquark( ColConfig& colConfig, Event& event);
0084 
0085   
0086   bool produceGluino( ColConfig& colConfig, Event& event);
0087 
0088   
0089   int toIdWithSquark( int id1, int id2);
0090 
0091   
0092   pair<int,int> fromIdWithSquark( int idRHad);
0093 
0094   
0095   int toIdWithGluino( int id1, int id2);
0096 
0097   
0098   pair<int,int> fromIdWithGluino( int idRHad);
0099 
0100   
0101   bool newKin( Vec4 pOld1, Vec4 pOld2, double mNew1, double mNew2,
0102     Vec4& pNew1, Vec4& pNew2, bool checkMargin = true);
0103 
0104 };
0105 
0106 
0107 
0108 } 
0109 
0110 #endif