Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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:
67 G4V3DNucleus* GetTargetNucleus() const;
68 G4V3DNucleus* GetProjectileNucleus() const;
69
70 void PrepareInitialState( const G4ReactionProduct& thePrimary );
71 void GetList( const G4ReactionProduct& thePrimary );
72
73 void StoreInvolvedNucleon();
74 void ReggeonCascade();
75 G4bool PutOnMassShell();
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
123 G4double GetCofNuclearDestruction();
124 G4double GetR2ofNuclearDestruction();
125
126 G4double GetExcitationEnergyPerWoundedNucleon();
127
128 G4double GetDofNuclearDestruction();
129 G4double GetPt2ofNuclearDestruction();
130 G4double GetMaxPt2ofNuclearDestruction();
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:
170 G4ReactionProduct theProjectile;
171
172 G4Reggeons* Regge;
173 G4int InteractionMode;
174
175 G4double alpha;
176 G4double beta;
177
178 G4double sigmaPt;
179
180 G4Nucleon* TheInvolvedNucleonsOfTarget[250];
181 G4int NumberOfInvolvedNucleonsOfTarget;
182
183 G4Nucleon* TheInvolvedNucleonsOfProjectile[250];
184 G4int NumberOfInvolvedNucleonsOfProjectile;
185
186 G4LorentzVector ProjectileResidual4Momentum;
187 G4int ProjectileResidualMassNumber;
188 G4int ProjectileResidualCharge;
189 G4double ProjectileResidualExcitationEnergy;
190
191 G4LorentzVector TargetResidual4Momentum;
192 G4int TargetResidualMassNumber;
193 G4int TargetResidualCharge;
194 G4double TargetResidualExcitationEnergy;
195
196 private:
197 // Parameters of nuclear destruction
198 G4double CofNuclearDestruction; // Cnd of nuclear destruction
199 G4double R2ofNuclearDestruction; // R2nd
200
201 G4double ExcitationEnergyPerWoundedNucleon;
202
203 G4double DofNuclearDestruction; // D for momentum sampling
204 G4double Pt2ofNuclearDestruction; // Pt2
205 G4double MaxPt2ofNuclearDestruction; // Max Pt2
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
229inline G4V3DNucleus* G4QGSParticipants::GetTargetNucleus() const {
230 return theNucleus;
231}
232
233inline G4V3DNucleus* G4QGSParticipants::GetProjectileNucleus() const {
234 return 0;
235}
236
237// Uzhi Start copy from FTFparameters
238// Set parameters of nuclear destruction
239
240inline void G4QGSParticipants::SetCofNuclearDestruction( const G4double aValue ) {
241 CofNuclearDestruction = aValue;
242}
243
244inline void G4QGSParticipants::SetR2ofNuclearDestruction( const G4double aValue ) {
245 R2ofNuclearDestruction = aValue;
246}
247
248inline void G4QGSParticipants::SetExcitationEnergyPerWoundedNucleon( const G4double aValue ) {
249 ExcitationEnergyPerWoundedNucleon = aValue;
250}
251
252inline void G4QGSParticipants::SetDofNuclearDestruction( const G4double aValue ) {
253 DofNuclearDestruction = aValue;
254}
255
256inline void G4QGSParticipants::SetPt2ofNuclearDestruction( const G4double aValue ) {
257 Pt2ofNuclearDestruction = aValue;
258}
259
260inline void G4QGSParticipants::SetMaxPt2ofNuclearDestruction( const G4double aValue ) {
261 MaxPt2ofNuclearDestruction = aValue;
262}
263
264// Get parameters of nuclear destruction
265inline G4double G4QGSParticipants::GetCofNuclearDestruction() {
266 return CofNuclearDestruction;
267}
268
269inline G4double G4QGSParticipants::GetR2ofNuclearDestruction() {
270 return R2ofNuclearDestruction;
271}
272
273inline G4double G4QGSParticipants::GetExcitationEnergyPerWoundedNucleon() {
274 return ExcitationEnergyPerWoundedNucleon;
275}
276
277inline G4double G4QGSParticipants::GetDofNuclearDestruction() {
278 return DofNuclearDestruction;
279}
280
281inline G4double G4QGSParticipants::GetPt2ofNuclearDestruction() {
282 return Pt2ofNuclearDestruction;
283}
284
285inline G4double G4QGSParticipants::GetMaxPt2ofNuclearDestruction() {
286 return MaxPt2ofNuclearDestruction;
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
G4double SampleX(G4double anXmin, G4int nSea, G4int theTotalSea, G4double aBeta)
G4ThreeVector theCurrentVelocity
G4QuarkExchange theQuarkExchange
G4SingleDiffractiveExcitation theSingleDiffExcitation
virtual void DoLorentzBoost(G4ThreeVector aBoost)
G4ThreeVector theBoost
std::vector< G4InteractionContent * > theInteractions
G4PartonPair * GetNextPartonPair()
virtual G4VSplitableHadron * SelectInteractions(const G4ReactionProduct &thePrimary)
G4bool operator!=(const G4QGSParticipants &right) const
G4QGSDiffractiveExcitation theDiffExcitaton
G4QGSMSplitableHadron * theProjectileSplitable
const G4double QGSMThreshold
G4bool operator==(const G4QGSParticipants &right) const
const G4double theNucleonRadius
void BuildInteractions(const G4ReactionProduct &thePrimary)
const G4QGSParticipants & operator=(const G4QGSParticipants &right)
std::vector< G4PartonPair * > thePartonPairs
std::vector< G4VSplitableHadron * > theTargets
virtual void DoLorentzBoost(const G4LorentzVector &theBoost)=0
G4V3DNucleus * theNucleus
void operator()(G4InteractionContent *aC)
void operator()(G4VSplitableHadron *aS)