Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FTFParameters.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//
27//
28#ifndef G4FTFParameters_h
29#define G4FTFParameters_h 1
30
32#include <vector>
33#include "G4Types.hh"
34#include "G4Exp.hh"
35#include "G4FTFTunings.hh"
36
40
41
43 public:
46
47 void InitForInteraction( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
48
49 // Set geometrical parameteres
50 void SethNcmsEnergy( const G4double s );
51 void SetTotalCrossSection( const G4double Xtotal );
52 void SetElastisCrossSection( const G4double Xelastic );
53 void SetInelasticCrossSection( const G4double Xinelastic );
54 void SetProbabilityOfElasticScatt( const G4double Xtotal, const G4double Xelastic );
55 void SetProbabilityOfElasticScatt( const G4double aValue );
56 void SetProbabilityOfAnnihilation( const G4double aValue );
57 void SetRadiusOfHNinteractions2( const G4double Radius2 );
58
59 void SetSlope( const G4double Slope );
60 void SetGamma0( const G4double Gamma0 );
61 G4double GammaElastic( const G4double impactsquare );
62
63 // Set parameters of elastic scattering
65
66 // Set parameters of excitations
67 void SetParams( const G4int ProcN,
68 const G4double A1, const G4double B1, const G4double A2, const G4double B2,
69 const G4double A3, const G4double Atop, const G4double Ymin );
70
71 void SetDeltaProbAtQuarkExchange( const G4double aValue );
72 void SetProbOfSameQuarkExchange( const G4double aValue );
73
74 void SetProjMinDiffMass( const G4double aValue );
75 void SetProjMinNonDiffMass( const G4double aValue );
76 //void SetProbabilityOfProjDiff( const G4double aValue );
77 void SetProbLogDistrPrD( const G4double aValue );
78
79 void SetTarMinDiffMass( const G4double aValue );
80 void SetTarMinNonDiffMass( const G4double aValue );
81 //void SetProbabilityOfTarDiff( const G4double aValue );
82
83 void SetAveragePt2( const G4double aValue );
84 void SetProbLogDistr( const G4double aValue );
85
86 // Set parameters of a string kink
87 void SetPt2Kink( const G4double aValue );
88 void SetQuarkProbabilitiesAtGluonSplitUp( const G4double Puubar, const G4double Pddbar,
89 const G4double Pssbar );
90
91 // Set parameters of nuclear destruction
92 void SetMaxNumberOfCollisions( const G4double aValue, const G4double bValue );
93 void SetProbOfInteraction( const G4double aValue );
94
95 void SetCofNuclearDestructionPr( const G4double aValue );
96 void SetCofNuclearDestruction( const G4double aValue );
97 void SetR2ofNuclearDestruction( const G4double aValue );
98
100
101 void SetDofNuclearDestruction( const G4double aValue );
102 void SetPt2ofNuclearDestruction( const G4double aValue );
103 void SetMaxPt2ofNuclearDestruction( const G4double aValue );
104
105 // Get geometrical parameteres
109
110 G4double GetProbabilityOfInteraction( const G4double impactsquare );
111 G4double GetInelasticProbability( const G4double impactsquare );
115
116 // Get parameters of elastic scattering
118
119 // Get parameters of excitations
120 G4double GetProcProb( const G4int ProcN, const G4double y );
121
124
128
131
134
135 // Get parameters of a string kink
137 std::vector< G4double > GetQuarkProbabilitiesAtGluonSplitUp();
138
139 // Get parameters of nuclear destruction
142
146
148
152
153 // JVY, July 31, 2017: Is there any reason for NOT making
154 // all the members data private ???
155 //
156 // private:
157
158 // Initial energy of hN interactions
159 G4double FTFhNcmsEnergy; // Initial hN CMS energy
160
161 // Geometrical parameteres
162 G4double FTFXtotal; // Total X in mb
163 G4double FTFXelastic; // Elastic X in mb
164 G4double FTFXinelastic; // Inelastic X in mb
165 G4double FTFXannihilation; // Annihilation X in mb
169 G4double FTFSlope; // in fm^-1
172
173 // Parameters of excitations
175
178
184
187
188 // Parameters of kink
190 std::vector< G4double > QuarkProbabilitiesAtGluonSplitUp;
191
192 // Parameters of nuclear destruction
195
196 G4double CofNuclearDestructionPr; // Cnd of nuclear destruction of projectile nucleus
197 G4double CofNuclearDestruction; // Cnd of nuclear destruction
199
201
202 G4double DofNuclearDestruction; // Dispersion for momentum sampling
205
206 G4bool EnableDiffDissociationForBGreater10; ///< Control over whether to do nucleon-hadron diffractive dissociation or not.
207
208 private:
209 G4LundStringFragmentation* StringMass;
210 G4double GetMinMass( const G4ParticleDefinition* aParticle );
211
212 void Reset();
213
214 // Different sets of parameters (called "tunes") of the FTF model are possible.
215 // These tunes are kept as std::array - instead of std::vector - members of this class,
216 // because their size is fixed during a run, and expected to be small.
217 // For the time being, separate parameters are kept for "baryons", "pions", and
218 // the rest of "mesons"; if in the future we make more distinctions between
219 // projectile types (e.g. kaons, anti-baryon, hyperons, etc.), then corresponding
220 // new arrays will be introduced. In all cases, the size of these arrays is the
221 // same (and kept as a static constant in the singleton G4FTFTunings).
222 std::array< G4FTFParamCollBaryonProj, G4FTFTunings::sNumberOfTunes > fArrayParCollBaryonProj;
223 std::array< G4FTFParamCollMesonProj, G4FTFTunings::sNumberOfTunes > fArrayParCollMesonProj;
224 std::array< G4FTFParamCollPionProj, G4FTFTunings::sNumberOfTunes > fArrayParCollPionProj;
225
226 // Glauber-Gribov hN x-section
227 G4VComponentCrossSection* csGGinstance;
228};
229
230
231inline G4double G4FTFParameters::GammaElastic( const G4double impactsquare ) {
232 return ( FTFGamma0 * G4Exp( -FTFSlope * impactsquare ) );
233}
234
237}
238
239// Set geometrical parameteres
240
242 FTFXtotal = Xtotal;
243}
244
246 FTFXelastic = Xelastic;
247}
248
250 FTFXinelastic = Xinelastic;
251}
252
254 const G4double Xelastic ) {
255 if ( Xtotal == 0.0 ) {
257 } else {
258 ProbabilityOfElasticScatt = Xelastic / Xtotal;
259 }
260}
261
264}
265
268}
269
271 RadiusOfHNinteractions2 = Radius2;
272}
273
274inline void G4FTFParameters::SetSlope( const G4double Slope ) {
275 FTFSlope = 12.84 / Slope; // Slope is in GeV^-2, FTFSlope in fm^-2
276}
277
278inline void G4FTFParameters::SetGamma0( const G4double Gamma0 ) {
279 FTFGamma0 = Gamma0;
280}
281
282// Set parameters of elastic scattering
285}
286
287// Set parameters of excitations
288
289inline void G4FTFParameters::SetParams( const G4int ProcN,
290 const G4double A1, const G4double B1, const G4double A2,
291 const G4double B2, const G4double A3, const G4double Atop,
292 const G4double Ymin ) {
293 ProcParams[ProcN][0] = A1; ProcParams[ProcN][1] = B1;
294 ProcParams[ProcN][2] = A2; ProcParams[ProcN][3] = B2;
295 ProcParams[ProcN][4] = A3;
296 ProcParams[ProcN][5] = Atop; ProcParams[ProcN][6] = Ymin;
297}
298
301}
302
305}
306
308 ProjMinDiffMass = aValue*CLHEP::GeV;
309}
310
312 ProjMinNonDiffMass = aValue*CLHEP::GeV;
313}
314
315inline void G4FTFParameters::SetTarMinDiffMass( const G4double aValue ) {
316 TarMinDiffMass = aValue*CLHEP::GeV;
317}
318
320 TarMinNonDiffMass = aValue*CLHEP::GeV;
321}
322
323inline void G4FTFParameters::SetAveragePt2( const G4double aValue ) {
324 AveragePt2 = aValue*CLHEP::GeV*CLHEP::GeV;
325}
326
328 ProbLogDistrPrD = aValue;
329}
330
331inline void G4FTFParameters::SetProbLogDistr( const G4double aValue ) {
332 ProbLogDistr = aValue;
333}
334
335// Set parameters of a string kink
336
337inline void G4FTFParameters::SetPt2Kink( const G4double aValue ) {
338 Pt2kink = aValue;
339}
340
342 const G4double Pddbar,
343 const G4double Pssbar ) {
344 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar );
345 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar );
346 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar + Pssbar );
347}
348
349// Set parameters of nuclear destruction
351 const G4double Pbound ) {
352 if ( Plab > Pbound ) {
353 MaxNumberOfCollisions = Plab/Pbound;
354 SetProbOfInteraction( -1.0 );
355 } else {
356 //MaxNumberOfCollisions = -1.0;
357 //SetProbOfInteraction( G4Exp( 0.25*(Plab-Pbound) ) );
359 SetProbOfInteraction( -1.0 );
360 }
361}
362
364 ProbOfInelInteraction = aValue;
365}
366
369}
370
372 CofNuclearDestruction = aValue;
373}
374
376 R2ofNuclearDestruction = aValue;
377}
378
381}
382
384 DofNuclearDestruction = aValue;
385}
386
389}
390
393}
394
395// Get geometrical parameteres
397 return FTFXtotal;
398}
399
401 return FTFXelastic;
402}
403
405 return FTFXinelastic;
406}
407
409 return FTFSlope;
410}
411
413 if ( RadiusOfHNinteractions2 > impactsquare ) {
414 return 1.0;
415 } else {
416 return 0.0;
417 }
418}
419
422}
423
425 G4double Gamma = GammaElastic( impactsquare );
426 return 2*Gamma - Gamma*Gamma;
427}
428
431}
432
433// Get parameters of elastic scattering
436}
437
438// Get parameters of excitations
439
442}
443
446}
447
449 return ProjMinDiffMass;
450}
451
453 return ProjMinNonDiffMass;
454}
455
457 return TarMinDiffMass;
458}
459
461 return TarMinNonDiffMass;
462}
463
465 return AveragePt2;
466}
467
469 return ProbLogDistrPrD;
470}
471
473 return ProbLogDistr;
474}
475
476// Get parameters of a string kink
477
479 return Pt2kink;
480}
481
484}
485
486// Get parameters of nuclear destruction
487
490}
491
494}
495
498}
499
502}
503
506}
507
510}
511
514}
515
518}
519
522}
523
524#endif
525
G4double S(G4double temp)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void SetTarMinNonDiffMass(const G4double aValue)
G4double R2ofNuclearDestruction
void SetProjMinDiffMass(const G4double aValue)
G4double GetProbLogDistrPrD()
G4double GetCofNuclearDestructionPr()
void SetTotalCrossSection(const G4double Xtotal)
void SetExcitationEnergyPerWoundedNucleon(const G4double aValue)
G4double GetProbabilityOfAnnihilation()
G4double ExcitationEnergyPerWoundedNucleon
G4double GetAveragePt2()
G4double GetMaxNumberOfCollisions()
void SetProbabilityOfElasticScatt(const G4double Xtotal, const G4double Xelastic)
void SetElastisCrossSection(const G4double Xelastic)
void SetQuarkProbabilitiesAtGluonSplitUp(const G4double Puubar, const G4double Pddbar, const G4double Pssbar)
G4double GetPt2ofNuclearDestruction()
G4double GetProbLogDistr()
G4double GetMaxPt2ofNuclearDestruction()
void SetMaxPt2ofNuclearDestruction(const G4double aValue)
G4double GetProjMinNonDiffMass()
G4double ProcParams[5][7]
G4double GetProbabilityOfElasticScatt()
G4double ProbOfSameQuarkExchange
G4double GetAvaragePt2ofElasticScattering()
G4double TarMinNonDiffMass
G4double GetElasticCrossSection()
G4double ProbOfInelInteraction
void SetPt2Kink(const G4double aValue)
void SetSlope(const G4double Slope)
G4double GetTarMinDiffMass()
G4double RadiusOfHNinteractions2
void SetDeltaProbAtQuarkExchange(const G4double aValue)
G4double GetInelasticProbability(const G4double impactsquare)
G4double MaxPt2ofNuclearDestruction
G4double GetTarMinNonDiffMass()
G4double GetTotalCrossSection()
void SetAvaragePt2ofElasticScattering(const G4double aPt2)
G4double DeltaProbAtQuarkExchange
G4double GetProcProb(const G4int ProcN, const G4double y)
G4double CofNuclearDestruction
void SetTarMinDiffMass(const G4double aValue)
void SetProjMinNonDiffMass(const G4double aValue)
void SetCofNuclearDestructionPr(const G4double aValue)
void SethNcmsEnergy(const G4double s)
G4double GetPt2Kink()
std::vector< G4double > QuarkProbabilitiesAtGluonSplitUp
void SetR2ofNuclearDestruction(const G4double aValue)
G4double GammaElastic(const G4double impactsquare)
void SetProbLogDistrPrD(const G4double aValue)
G4double CofNuclearDestructionPr
void SetGamma0(const G4double Gamma0)
void SetAveragePt2(const G4double aValue)
G4double GetDeltaProbAtQuarkExchange()
G4double DofNuclearDestruction
G4double GetInelasticCrossSection()
G4double GetExcitationEnergyPerWoundedNucleon()
void SetProbabilityOfAnnihilation(const G4double aValue)
G4double GetProbOfInteraction()
void SetProbOfInteraction(const G4double aValue)
void InitForInteraction(const G4ParticleDefinition *, G4int theA, G4int theZ, G4double s)
void SetDofNuclearDestruction(const G4double aValue)
G4double ProbabilityOfAnnihilation
G4double GetProjMinDiffMass()
G4double GetProbOfSameQuarkExchange()
G4double ProbabilityOfElasticScatt
G4double GetDofNuclearDestruction()
void SetRadiusOfHNinteractions2(const G4double Radius2)
void SetParams(const G4int ProcN, const G4double A1, const G4double B1, const G4double A2, const G4double B2, const G4double A3, const G4double Atop, const G4double Ymin)
G4double Pt2ofNuclearDestruction
G4bool EnableDiffDissociationForBGreater10
Control over whether to do nucleon-hadron diffractive dissociation or not.
G4double ProbLogDistrPrD
G4double GetProbabilityOfInteraction(const G4double impactsquare)
void SetPt2ofNuclearDestruction(const G4double aValue)
G4double GetR2ofNuclearDestruction()
G4double GetCofNuclearDestruction()
void SetProbLogDistr(const G4double aValue)
void SetCofNuclearDestruction(const G4double aValue)
G4double ProjMinNonDiffMass
void SetMaxNumberOfCollisions(const G4double aValue, const G4double bValue)
std::vector< G4double > GetQuarkProbabilitiesAtGluonSplitUp()
G4double ProjMinDiffMass
G4double AvaragePt2ofElasticScattering
void SetProbOfSameQuarkExchange(const G4double aValue)
G4double MaxNumberOfCollisions
G4double FTFXannihilation
void SetInelasticCrossSection(const G4double Xinelastic)