Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/parton_string/hadronization/include/G4VLongitudinalStringDecay.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //
 27 //
 28 // -----------------------------------------------------------------------------
 29 //      GEANT 4 class implementation file
 30 // -----------------------------------------------------------------------------
 31 #ifndef G4VLongitudinalStringDecay_h
 32 #define G4VLongitudinalStringDecay_h 1
 33 
 34 #include "G4HadronicInteraction.hh"
 35 #include "G4VStringFragmentation.hh"
 36 #include "G4DynamicParticle.hh"
 37 #include "G4KineticTrack.hh"
 38 #include "G4KineticTrackVector.hh"
 39 #include "G4HadronBuilder.hh"
 40 #include <vector>
 41 
 42 //*****************************************************************************
 43 
 44 class G4FragmentingString;
 45 
 46 class G4VLongitudinalStringDecay : public G4HadronicInteraction
 47 {
 48   public:
 49 
 50     G4VLongitudinalStringDecay(const G4String& name = "StringDecay");
 51     virtual ~G4VLongitudinalStringDecay();
 52 
 53     G4HadFinalState *ApplyYourself(const G4HadProjectile&, G4Nucleus&) final;
 54 
 55   private:
 56     // not implemented to protect/forbid use
 57     G4VLongitudinalStringDecay(const G4VLongitudinalStringDecay &right);
 58     const G4VLongitudinalStringDecay & operator=(const G4VLongitudinalStringDecay &right);
 59     G4bool operator==(const G4VLongitudinalStringDecay &right) const;
 60     G4bool operator!=(const G4VLongitudinalStringDecay &right) const;
 61 
 62   public:
 63     virtual G4KineticTrackVector* FragmentString(const G4ExcitedString& theString)=0;
 64 
 65     void AddNewParticles();
 66     void EraseNewParticles();
 67     //struct DeleteString { void operator()(G4ExcitedString* aS){delete aS;} };
 68 
 69     // To set minimal mass of a string. The string with mass above the minimal mass can fragment.
 70     void SetMinMasses();
 71     void SetMinimalStringMass(const G4FragmentingString  * const string);
 72     void SetMinimalStringMass2(const G4double aValue);
 73 
 74   protected: 
 75     // For changing Mass Cut used for selection of very small mass strings
 76     virtual void SetMassCut(G4double aValue);
 77     G4double GetMassCut();
 78 
 79     // For handling a string with very low mass
 80     G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString * const theString);
 81 
 82     // To store created quarks or 2 last hadrons
 83     typedef std::pair<G4ParticleDefinition*, G4ParticleDefinition*> pDefPair;
 84 
 85     // For creation of hadrons from given quark pair 
 86     typedef G4ParticleDefinition * (G4HadronBuilder::*Pcreate)
 87                (G4ParticleDefinition*, G4ParticleDefinition*);
 88 
 89     // Used by ProduceOneHadron method for estimation of lowest possible mass of
 90     // given quark system -- string.
 91     G4double PossibleHadronMass(const G4FragmentingString * const string,
 92                    Pcreate build=0, pDefPair * pdefs=0);
 93 
 94     G4ParticleDefinition* FindParticle(G4int Encoding); 
 95 
 96     // For decision on continue or stop string fragmentation
 97     virtual G4bool StopFragmenting(const G4FragmentingString  * const string)=0;
 98     virtual G4bool IsItFragmentable(const G4FragmentingString * const string)=0;
 99 
100     // If a string can not fragment, make last break into 2 hadrons
101     virtual G4bool SplitLast(G4FragmentingString * string, 
102                    G4KineticTrackVector * LeftVector,
103                  G4KineticTrackVector * RightVector)=0;
104 
105     virtual void Sample4Momentum(G4LorentzVector* Mom,     G4double Mass, 
106                                  G4LorentzVector* AntiMom, G4double AntiMass, 
107                                  G4double InitialMass)=0; 
108 
109     // If a string can fragment, do the following:
110 
111     // Make a copy of a string
112     G4ExcitedString *CopyExcited(const G4ExcitedString& string);
113 
114     // Produce a hadron at Splitup of the string
115     virtual G4KineticTrack * Splitup(G4FragmentingString *string,
116                                      G4FragmentingString *&newString)=0;
117 
118     // The hadron can be producet at QuarkSplitup or DiQuarkSplitup
119     virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition* decay,
120                           G4ParticleDefinition *&created);
121 
122     virtual G4ParticleDefinition * DiQuarkSplitup(G4ParticleDefinition* decay,
123                       G4ParticleDefinition *&created)=0;
124 
125     // All of them are going through quak-antiquark pair creation         
126     pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true);
127 
128   public:
129     // For a pair it is needed:
130     G4int SampleQuarkFlavor(void);
131     G4ThreeVector SampleQuarkPt(G4double ptMax=-1.); // -1. no limit on maxpt.
132 
133   protected:
134     // For determination of kinematical properties of the created hadron
135     virtual G4LorentzVector * SplitEandP(G4ParticleDefinition * pHadron,      
136                                          G4FragmentingString * string,        
137                                          G4FragmentingString * newString  )=0;
138 
139     virtual G4double GetLightConeZ(G4double zmin, G4double zmax, 
140                                    G4int PartonEncoding,  
141                                    G4ParticleDefinition* pHadron, 
142                                    G4double Px, G4double Py       ) = 0;      
143 
144     void CalculateHadronTimePosition(G4double theInitialStringMass, 
145                                      G4KineticTrackVector *);
146 
147     // Used for some test purposes 
148     void ConstructParticle();
149 
150     G4ParticleDefinition* CreateHadron(G4int id1, G4int id2, 
151                                        G4bool theGivenSpin, G4int theSpin); 
152 
153   public:
154     void SetSigmaTransverseMomentum(G4double aQT);
155     void SetStrangenessSuppression(G4double aValue);
156     void SetDiquarkSuppression(G4double aValue);
157     void SetDiquarkBreakProbability(G4double aValue);
158 
159     void SetSpinThreeHalfBarionProbability(G4double aValue);
160    
161     void SetScalarMesonMixings( std::vector<G4double> aVector);
162     void SetVectorMesonMixings( std::vector<G4double> aVector);
163 
164     void SetStringTensionParameter(G4double aValue);            
165 
166     void SetProbCCbar(G4double aValue);
167     void SetProbEta_c(G4double aValue);
168     void SetProbBBbar(G4double aValue);
169     void SetProbEta_b(G4double aValue);
170 
171   protected:  
172     G4double GetDiquarkSuppress() {return DiquarkSuppress;};
173     G4double GetDiquarkBreakProb()  {return DiquarkBreakProb;};
174     G4double GetStrangeSuppress() {return StrangeSuppress;};
175     G4int    GetClusterLoopInterrupt()   {return ClusterLoopInterrupt;};
176 
177     G4double GetProbCCbar(){return ProbCCbar;};
178     G4double GetProbEta_c(){return ProbEta_c;};
179     G4double GetProbBBbar(){return ProbBBbar;};
180     G4double GetProbEta_b(){return ProbEta_b;};
181 
182     G4double GetStringTensionParameter() {return Kappa;};
183 
184   protected:  
185     G4double  MassCut;
186     G4double  SigmaQT;          // sigma_q_t of quark/hadron transverse momentum distribution parameter 
187     G4double  DiquarkSuppress;  // Diquark suppression parameter  
188     G4double  DiquarkBreakProb; // Diquark breaking probability, qq->h+qq'
189     G4double  StrangeSuppress ;
190     G4int     StringLoopInterrupt;
191     G4int     ClusterLoopInterrupt;
192 
193     G4HadronBuilder *hadronizer;
194 
195     std::vector<G4double> pspin_meson;
196     G4double pspin_barion;
197     std::vector<G4double> vectorMesonMix;
198     std::vector<G4double> scalarMesonMix;
199    
200     G4double ProbCCbar;  // Probability of C-Cbar pair creation
201     G4double ProbEta_c;  // Mixing of Eta_c and J/Psi
202 
203     G4double ProbBBbar;  // Probability of B-Bbar pair creation
204     G4double ProbEta_b;  // Mixing of Eta_b and Ipsilon_b
205 
206     G4double ProbCB;     // = ProbCCbar + ProbBBbar
207 
208     G4double MaxMass;
209 
210     G4bool   PastInitPhase;
211 
212     G4double Kappa;      // String tension parameter
213 
214     std::vector<G4ParticleDefinition *> NewParticles;
215 
216   public:
217     // ------ For estimation of a minimal string mass ---------------
218     G4double Mass_of_light_quark;
219     G4double Mass_of_s_quark;
220     G4double Mass_of_c_quark;
221     G4double Mass_of_b_quark;
222     G4double Mass_of_string_junction;
223 
224     G4double minMassQQbarStr[5][5];
225     G4double minMassQDiQStr[5][5][5];
226 
227     // ------ An estimated minimal string mass ----------------------
228     G4double MinimalStringMass;
229     G4double MinimalStringMass2;
230 
231     G4int Qcharge[5];  // quark charges
232     G4int          Meson[5][5][7];
233     G4double MesonWeight[5][5][7];
234 
235     G4int          Baryon[5][5][5][4];
236     G4double BaryonWeight[5][5][5][4];
237 
238     G4double Prob_QQbar[5];
239 
240     G4int DecayQuark;
241     G4int NewQuark;
242     /*
243     G4double FFq2q[5][5][2];
244     G4double FFq2qq[5][15][2];
245     G4double FFqq2q[15][5][2];
246     G4double FFqq2qq[15][5][2];
247     */
248 
249     // ------ To improve the code structure
250     G4ParticleDefinition * FS_LeftHadron[350], * FS_RightHadron[350];
251     G4double FS_Weight[350];
252     G4int NumberOf_FS;
253 };
254 
255 //******************************************************************************
256 // Class G4VLongitudinalStringDecay 
257 
258 #endif
259 
260