Geant4-11
G4QGSParticipants.hh
Go to the documentation of this file.
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"
35#include "G4PartonPair.hh"
37#include "G4V3DNucleus.hh"
38
39#include "G4VSplitableHadron.hh"
40
41#include "G4Reggeons.hh"
42#include "G4QuarkExchange.hh"
43
45{
46 public:
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);
65
66 private:
69
70 void PrepareInitialState( const G4ReactionProduct& thePrimary );
71 void GetList( const G4ReactionProduct& thePrimary );
72
74 void ReggeonCascade();
76 void GetResiduals();
77
78 G4ThreeVector GaussianPt( G4double AveragePt2, G4double maxPtSquare ) const;
79
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
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();
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
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
258}
259
262}
263
264// Get parameters of nuclear destruction
267}
268
271}
272
275}
276
279}
280
283}
284
287}
288//Uzhi End copy from FTFparameters
289#endif
290
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4double ThresholdParameter
G4V3DNucleus * GetTargetNucleus() const
G4double GetExcitationEnergyPerWoundedNucleon()
G4double GetMaxPt2ofNuclearDestruction()
G4LorentzVector ProjectileResidual4Momentum
G4double ExcitationEnergyPerWoundedNucleon
G4double ProjectileResidualExcitationEnergy
G4bool SamplingNucleonKinematics(G4double averagePt2, const G4double maxPt2, G4double dCor, G4V3DNucleus *nucleus, const G4LorentzVector &pResidual, const G4double residualMass, const G4int residualMassNumber, const G4int numberOfInvolvedNucleons, G4Nucleon *involvedNucleons[], G4double &mass2)
void SetR2ofNuclearDestruction(const G4double aValue)
G4double GetDofNuclearDestruction()
G4double SampleX(G4double anXmin, G4int nSea, G4int theTotalSea, G4double aBeta)
G4ThreeVector theCurrentVelocity
void SetDofNuclearDestruction(const G4double aValue)
G4QuarkExchange theQuarkExchange
G4SingleDiffractiveExcitation theSingleDiffExcitation
void SetExcitationEnergyPerWoundedNucleon(const G4double aValue)
virtual void DoLorentzBoost(G4ThreeVector aBoost)
G4ThreeVector theBoost
std::vector< G4InteractionContent * > theInteractions
G4double GetR2ofNuclearDestruction()
G4Nucleon * TheInvolvedNucleonsOfTarget[250]
G4PartonPair * GetNextPartonPair()
void SetMaxPt2ofNuclearDestruction(const G4double aValue)
virtual G4VSplitableHadron * SelectInteractions(const G4ReactionProduct &thePrimary)
G4bool CheckKinematics(const G4double sValue, const G4double sqrtS, const G4double projectileMass2, const G4double targetMass2, const G4double nucleusY, const G4bool isProjectileNucleus, const G4int numberOfInvolvedNucleons, G4Nucleon *involvedNucleons[], G4double &targetWminus, G4double &projectileWplus, G4bool &success)
G4bool operator!=(const G4QGSParticipants &right) const
G4bool FinalizeKinematics(const G4double w, const G4bool isProjectileNucleus, const G4LorentzRotation &boostFromCmsToLab, const G4double residualMass, const G4int residualMassNumber, const G4int numberOfInvolvedNucleons, G4Nucleon *involvedNucleons[], G4LorentzVector &residual4Momentum)
G4ThreeVector GaussianPt(G4double AveragePt2, G4double maxPtSquare) const
void SetPt2ofNuclearDestruction(const G4double aValue)
G4double TargetResidualExcitationEnergy
G4bool GenerateDeltaIsobar(const G4double sqrtS, const G4int numberOfInvolvedNucleons, G4Nucleon *involvedNucleons[], G4double &sumMasses)
G4QGSDiffractiveExcitation theDiffExcitaton
G4bool ComputeNucleusProperties(G4V3DNucleus *nucleus, G4LorentzVector &nucleusMomentum, G4LorentzVector &residualMomentum, G4double &sumMasses, G4double &residualExcitationEnergy, G4double &residualMass, G4int &residualMassNumber, G4int &residualCharge)
G4QGSMSplitableHadron * theProjectileSplitable
G4Nucleon * TheInvolvedNucleonsOfProjectile[250]
void GetList(const G4ReactionProduct &thePrimary)
void PrepareInitialState(const G4ReactionProduct &thePrimary)
G4ReactionProduct theProjectile
void SetCofNuclearDestruction(const G4double aValue)
const G4double QGSMThreshold
G4bool operator==(const G4QGSParticipants &right) const
G4double MaxPt2ofNuclearDestruction
G4LorentzVector TargetResidual4Momentum
G4V3DNucleus * GetProjectileNucleus() const
G4int NumberOfInvolvedNucleonsOfProjectile
const G4double theNucleonRadius
G4double GetPt2ofNuclearDestruction()
void BuildInteractions(const G4ReactionProduct &thePrimary)
G4double Pt2ofNuclearDestruction
const G4QGSParticipants & operator=(const G4QGSParticipants &right)
std::vector< G4PartonPair * > thePartonPairs
std::vector< G4VSplitableHadron * > theTargets
G4int NumberOfInvolvedNucleonsOfTarget
G4double GetCofNuclearDestruction()
virtual void DoLorentzBoost(const G4LorentzVector &theBoost)=0
G4V3DNucleus * theNucleus
void operator()(G4InteractionContent *aC)
void operator()(G4VSplitableHadron *aS)