ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4QGSParticipants.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4QGSParticipants.hh
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 #ifndef G4QGSParticipants_h
27 #define G4QGSParticipants_h 1
28 
29 #include "Randomize.hh"
30 #include "G4VParticipants.hh"
31 #include "G4Nucleon.hh"
32 #include "G4InteractionContent.hh"
35 #include "G4PartonPair.hh"
36 #include "G4QGSMSplitableHadron.hh"
37 #include "G4V3DNucleus.hh"
38 
39 #include "G4VSplitableHadron.hh"
40 
41 #include "G4Reggeons.hh"
42 #include "G4QuarkExchange.hh"
43 
45 {
46  public:
49  const G4QGSParticipants & operator=(const G4QGSParticipants &right);
50  virtual ~G4QGSParticipants();
51 
52  G4bool operator==(const G4QGSParticipants &right) const;
53  G4bool operator!=(const G4QGSParticipants &right) const;
54 
55  virtual void DoLorentzBoost(G4ThreeVector aBoost)
56  {
57  theCurrentVelocity = -aBoost;
59  theBoost = aBoost;
60  }
61 
63  void BuildInteractions(const G4ReactionProduct &thePrimary);
64  void StartPartonPairLoop();
65 
66  private:
69 
70  void PrepareInitialState( const G4ReactionProduct& thePrimary );
71  void GetList( const G4ReactionProduct& thePrimary );
72 
73  void StoreInvolvedNucleon();
74  void ReggeonCascade();
76  void GetResiduals();
77 
78  G4ThreeVector GaussianPt( G4double AveragePt2, G4double maxPtSquare ) const;
79 
80  G4bool ComputeNucleusProperties( G4V3DNucleus* nucleus, G4LorentzVector& nucleusMomentum,
81  G4LorentzVector& residualMomentum, G4double& sumMasses,
82  G4double& residualExcitationEnergy, G4double& residualMass,
83  G4int& residualMassNumber, G4int& residualCharge );
84  // Utility methods used by PutOnMassShell.
85 
86  G4bool GenerateDeltaIsobar( const G4double sqrtS, const G4int numberOfInvolvedNucleons,
87  G4Nucleon* involvedNucleons[], G4double& sumMasses );
88 
89  G4bool SamplingNucleonKinematics( G4double averagePt2, const G4double maxPt2,
90  G4double dCor, G4V3DNucleus* nucleus,
91  const G4LorentzVector& pResidual,
92  const G4double residualMass, const G4int residualMassNumber,
93  const G4int numberOfInvolvedNucleons,
94  G4Nucleon* involvedNucleons[], G4double& mass2 );
95 
96  G4bool CheckKinematics( const G4double sValue, const G4double sqrtS,
97  const G4double projectileMass2, const G4double targetMass2,
98  const G4double nucleusY, const G4bool isProjectileNucleus,
99  const G4int numberOfInvolvedNucleons, G4Nucleon* involvedNucleons[],
100  G4double& targetWminus, G4double& projectileWplus, G4bool& success );
101 
102  G4bool FinalizeKinematics( const G4double w, const G4bool isProjectileNucleus,
103  const G4LorentzRotation& boostFromCmsToLab,
104  const G4double residualMass, const G4int residualMassNumber,
105  const G4int numberOfInvolvedNucleons,
106  G4Nucleon* involvedNucleons[],
107  G4LorentzVector& residual4Momentum );
108 
109  void CreateStrings();
110 
111  private:
112  // Set parameters of nuclear destruction
113  void SetCofNuclearDestruction( const G4double aValue );
114  void SetR2ofNuclearDestruction( const G4double aValue );
115 
116  void SetExcitationEnergyPerWoundedNucleon( const G4double aValue );
117 
118  void SetDofNuclearDestruction( const G4double aValue );
119  void SetPt2ofNuclearDestruction( const G4double aValue );
120  void SetMaxPt2ofNuclearDestruction( const G4double aValue );
121 
122  // Get parameters of nuclear destruction
125 
127 
131 
132  protected:
133  virtual G4VSplitableHadron* SelectInteractions(const G4ReactionProduct &thePrimary);
134  void SplitHadrons();
135  void PerformSoftCollisions();
138 
139  protected:
141  std::vector<G4InteractionContent*> theInteractions;
143  std::vector<G4VSplitableHadron*> theTargets;
144  struct DeletePartonPair{void operator()(G4PartonPair*aP){delete aP;}};
145  std::vector<G4PartonPair*> thePartonPairs;
146 
151 
153  G4double SampleX(G4double anXmin, G4int nSea, G4int theTotalSea, G4double aBeta);
154 
155  protected:
156  // model parameters HPW
157  enum { SOFT, DIFFRACTIVE };
158  enum { ALL, WITHOUT_R, NON_DIFF }; // Interaction modes
159  enum { PrD, TrD, DD, NonD, Qexc }; // Interaction types
160 
161  const G4int nCutMax;
165 
168 
169  private:
171 
174 
177 
179 
182 
185 
190 
195 
196  private:
197  // Parameters of nuclear destruction
198  G4double CofNuclearDestruction; // Cnd of nuclear destruction
200 
202 
203  G4double DofNuclearDestruction; // D for momentum sampling
206 };
207 
209 {
210 }
211 
213 {
214  if (thePartonPairs.empty()) return 0;
215  G4PartonPair * result = thePartonPairs.back();
216  thePartonPairs.pop_back();
217  return result;
218 }
219 
221 {
222  unsigned int i;
223  for(i = 0; i < theInteractions.size(); i++)
224  {
225  theInteractions[i]->SplitHadrons();
226  }
227 }
228 
230  return theNucleus;
231 }
232 
234  return 0;
235 }
236 
237 // Uzhi Start copy from FTFparameters
238 // Set parameters of nuclear destruction
239 
241  CofNuclearDestruction = aValue;
242 }
243 
245  R2ofNuclearDestruction = aValue;
246 }
247 
250 }
251 
253  DofNuclearDestruction = aValue;
254 }
255 
257  Pt2ofNuclearDestruction = aValue;
258 }
259 
262 }
263 
264 // Get parameters of nuclear destruction
266  return CofNuclearDestruction;
267 }
268 
270  return R2ofNuclearDestruction;
271 }
272 
275 }
276 
278  return DofNuclearDestruction;
279 }
280 
283 }
284 
287 }
288 //Uzhi End copy from FTFparameters
289 #endif
290