File indexing completed on 2025-01-18 09:58:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifndef G4FTFParameters_h
0029 #define G4FTFParameters_h 1
0030
0031 #include <CLHEP/Units/SystemOfUnits.h>
0032 #include <vector>
0033 #include "G4Types.hh"
0034 #include "G4Exp.hh"
0035 #include "G4FTFTunings.hh"
0036
0037 class G4ParticleDefinition;
0038 class G4VComponentCrossSection;
0039 class G4LundStringFragmentation;
0040
0041
0042 class G4FTFParameters {
0043 public:
0044 G4FTFParameters();
0045 ~G4FTFParameters();
0046
0047 void InitForInteraction( const G4ParticleDefinition* , G4int theA, G4int theZ, G4double s );
0048
0049
0050 void SethNcmsEnergy( const G4double s );
0051 void SetTotalCrossSection( const G4double Xtotal );
0052 void SetElastisCrossSection( const G4double Xelastic );
0053 void SetInelasticCrossSection( const G4double Xinelastic );
0054 void SetProbabilityOfElasticScatt( const G4double Xtotal, const G4double Xelastic );
0055 void SetProbabilityOfElasticScatt( const G4double aValue );
0056 void SetProbabilityOfAnnihilation( const G4double aValue );
0057 void SetRadiusOfHNinteractions2( const G4double Radius2 );
0058
0059 void SetSlope( const G4double Slope );
0060 void SetGamma0( const G4double Gamma0 );
0061 G4double GammaElastic( const G4double impactsquare );
0062
0063
0064 void SetAvaragePt2ofElasticScattering( const G4double aPt2 );
0065
0066
0067 void SetParams( const G4int ProcN,
0068 const G4double A1, const G4double B1, const G4double A2, const G4double B2,
0069 const G4double A3, const G4double Atop, const G4double Ymin );
0070
0071 void SetDeltaProbAtQuarkExchange( const G4double aValue );
0072 void SetProbOfSameQuarkExchange( const G4double aValue );
0073
0074 void SetProjMinDiffMass( const G4double aValue );
0075 void SetProjMinNonDiffMass( const G4double aValue );
0076
0077 void SetProbLogDistrPrD( const G4double aValue );
0078
0079 void SetTarMinDiffMass( const G4double aValue );
0080 void SetTarMinNonDiffMass( const G4double aValue );
0081
0082
0083 void SetAveragePt2( const G4double aValue );
0084 void SetProbLogDistr( const G4double aValue );
0085
0086
0087 void SetPt2Kink( const G4double aValue );
0088 void SetQuarkProbabilitiesAtGluonSplitUp( const G4double Puubar, const G4double Pddbar,
0089 const G4double Pssbar );
0090
0091
0092 void SetMaxNumberOfCollisions( const G4double aValue, const G4double bValue );
0093 void SetProbOfInteraction( const G4double aValue );
0094
0095 void SetCofNuclearDestructionPr( const G4double aValue );
0096 void SetCofNuclearDestruction( const G4double aValue );
0097 void SetR2ofNuclearDestruction( const G4double aValue );
0098
0099 void SetExcitationEnergyPerWoundedNucleon( const G4double aValue );
0100
0101 void SetDofNuclearDestruction( const G4double aValue );
0102 void SetPt2ofNuclearDestruction( const G4double aValue );
0103 void SetMaxPt2ofNuclearDestruction( const G4double aValue );
0104
0105
0106 G4double GetTotalCrossSection();
0107 G4double GetElasticCrossSection();
0108 G4double GetInelasticCrossSection();
0109
0110 G4double GetProbabilityOfInteraction( const G4double impactsquare );
0111 G4double GetInelasticProbability( const G4double impactsquare );
0112 G4double GetProbabilityOfElasticScatt();
0113 G4double GetSlope();
0114 G4double GetProbabilityOfAnnihilation();
0115
0116
0117 G4double GetAvaragePt2ofElasticScattering();
0118
0119
0120 G4double GetProcProb( const G4int ProcN, const G4double y );
0121
0122 G4double GetDeltaProbAtQuarkExchange();
0123 G4double GetProbOfSameQuarkExchange();
0124
0125 G4double GetProjMinDiffMass();
0126 G4double GetProjMinNonDiffMass();
0127 G4double GetProbLogDistrPrD();
0128
0129 G4double GetTarMinDiffMass();
0130 G4double GetTarMinNonDiffMass();
0131
0132 G4double GetAveragePt2();
0133 G4double GetProbLogDistr();
0134
0135
0136 G4double GetPt2Kink();
0137 std::vector< G4double > GetQuarkProbabilitiesAtGluonSplitUp();
0138
0139
0140 G4double GetMaxNumberOfCollisions();
0141 G4double GetProbOfInteraction();
0142
0143 G4double GetCofNuclearDestructionPr();
0144 G4double GetCofNuclearDestruction();
0145 G4double GetR2ofNuclearDestruction();
0146
0147 G4double GetExcitationEnergyPerWoundedNucleon();
0148
0149 G4double GetDofNuclearDestruction();
0150 G4double GetPt2ofNuclearDestruction();
0151 G4double GetMaxPt2ofNuclearDestruction();
0152
0153
0154
0155
0156
0157
0158
0159 G4double FTFhNcmsEnergy;
0160
0161
0162 G4double FTFXtotal;
0163 G4double FTFXelastic;
0164 G4double FTFXinelastic;
0165 G4double FTFXannihilation;
0166 G4double ProbabilityOfAnnihilation;
0167 G4double ProbabilityOfElasticScatt;
0168 G4double RadiusOfHNinteractions2;
0169 G4double FTFSlope;
0170 G4double AvaragePt2ofElasticScattering;
0171 G4double FTFGamma0;
0172
0173
0174 G4double ProcParams[5][7];
0175
0176 G4double DeltaProbAtQuarkExchange;
0177 G4double ProbOfSameQuarkExchange;
0178
0179 G4double ProjMinDiffMass;
0180 G4double ProjMinNonDiffMass;
0181 G4double ProbLogDistrPrD;
0182 G4double TarMinDiffMass;
0183 G4double TarMinNonDiffMass;
0184
0185 G4double AveragePt2;
0186 G4double ProbLogDistr;
0187
0188
0189 G4double Pt2kink;
0190 std::vector< G4double > QuarkProbabilitiesAtGluonSplitUp;
0191
0192
0193 G4double MaxNumberOfCollisions;
0194 G4double ProbOfInelInteraction;
0195
0196 G4double CofNuclearDestructionPr;
0197 G4double CofNuclearDestruction;
0198 G4double R2ofNuclearDestruction;
0199
0200 G4double ExcitationEnergyPerWoundedNucleon;
0201
0202 G4double DofNuclearDestruction;
0203 G4double Pt2ofNuclearDestruction;
0204 G4double MaxPt2ofNuclearDestruction;
0205
0206 G4bool EnableDiffDissociationForBGreater10;
0207
0208 private:
0209 G4LundStringFragmentation* StringMass;
0210 G4double GetMinMass( const G4ParticleDefinition* aParticle );
0211
0212 void Reset();
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222 std::array< G4FTFParamCollBaryonProj, G4FTFTunings::sNumberOfTunes > fArrayParCollBaryonProj;
0223 std::array< G4FTFParamCollMesonProj, G4FTFTunings::sNumberOfTunes > fArrayParCollMesonProj;
0224 std::array< G4FTFParamCollPionProj, G4FTFTunings::sNumberOfTunes > fArrayParCollPionProj;
0225
0226
0227 G4VComponentCrossSection* csGGinstance;
0228 };
0229
0230
0231 inline G4double G4FTFParameters::GammaElastic( const G4double impactsquare ) {
0232 return ( FTFGamma0 * G4Exp( -FTFSlope * impactsquare ) );
0233 }
0234
0235 inline void G4FTFParameters::SethNcmsEnergy( const G4double S ) {
0236 FTFhNcmsEnergy = S;
0237 }
0238
0239
0240
0241 inline void G4FTFParameters::SetTotalCrossSection( const G4double Xtotal ) {
0242 FTFXtotal = Xtotal;
0243 }
0244
0245 inline void G4FTFParameters::SetElastisCrossSection( const G4double Xelastic ) {
0246 FTFXelastic = Xelastic;
0247 }
0248
0249 inline void G4FTFParameters::SetInelasticCrossSection( const G4double Xinelastic ) {
0250 FTFXinelastic = Xinelastic;
0251 }
0252
0253 inline void G4FTFParameters::SetProbabilityOfElasticScatt( const G4double Xtotal,
0254 const G4double Xelastic ) {
0255 if ( Xtotal == 0.0 ) {
0256 ProbabilityOfElasticScatt = 0.0;
0257 } else {
0258 ProbabilityOfElasticScatt = Xelastic / Xtotal;
0259 }
0260 }
0261
0262 inline void G4FTFParameters::SetProbabilityOfElasticScatt( const G4double aValue ) {
0263 ProbabilityOfElasticScatt = aValue;
0264 }
0265
0266 inline void G4FTFParameters::SetProbabilityOfAnnihilation( const G4double aValue ) {
0267 ProbabilityOfAnnihilation = aValue;
0268 }
0269
0270 inline void G4FTFParameters::SetRadiusOfHNinteractions2( const G4double Radius2 ) {
0271 RadiusOfHNinteractions2 = Radius2;
0272 }
0273
0274 inline void G4FTFParameters::SetSlope( const G4double Slope ) {
0275 FTFSlope = 12.84 / Slope;
0276 }
0277
0278 inline void G4FTFParameters::SetGamma0( const G4double Gamma0 ) {
0279 FTFGamma0 = Gamma0;
0280 }
0281
0282
0283 inline void G4FTFParameters::SetAvaragePt2ofElasticScattering( const G4double aPt2 ) {
0284 AvaragePt2ofElasticScattering = aPt2;
0285 }
0286
0287
0288
0289 inline void G4FTFParameters::SetParams( const G4int ProcN,
0290 const G4double A1, const G4double B1, const G4double A2,
0291 const G4double B2, const G4double A3, const G4double Atop,
0292 const G4double Ymin ) {
0293 ProcParams[ProcN][0] = A1; ProcParams[ProcN][1] = B1;
0294 ProcParams[ProcN][2] = A2; ProcParams[ProcN][3] = B2;
0295 ProcParams[ProcN][4] = A3;
0296 ProcParams[ProcN][5] = Atop; ProcParams[ProcN][6] = Ymin;
0297 }
0298
0299 inline void G4FTFParameters::SetDeltaProbAtQuarkExchange( const G4double aValue ) {
0300 DeltaProbAtQuarkExchange = aValue;
0301 }
0302
0303 inline void G4FTFParameters::SetProbOfSameQuarkExchange( const G4double aValue ) {
0304 ProbOfSameQuarkExchange = aValue;
0305 }
0306
0307 inline void G4FTFParameters::SetProjMinDiffMass( const G4double aValue ) {
0308 ProjMinDiffMass = aValue*CLHEP::GeV;
0309 }
0310
0311 inline void G4FTFParameters::SetProjMinNonDiffMass( const G4double aValue ) {
0312 ProjMinNonDiffMass = aValue*CLHEP::GeV;
0313 }
0314
0315 inline void G4FTFParameters::SetTarMinDiffMass( const G4double aValue ) {
0316 TarMinDiffMass = aValue*CLHEP::GeV;
0317 }
0318
0319 inline void G4FTFParameters::SetTarMinNonDiffMass( const G4double aValue ) {
0320 TarMinNonDiffMass = aValue*CLHEP::GeV;
0321 }
0322
0323 inline void G4FTFParameters::SetAveragePt2( const G4double aValue ) {
0324 AveragePt2 = aValue*CLHEP::GeV*CLHEP::GeV;
0325 }
0326
0327 inline void G4FTFParameters::SetProbLogDistrPrD( const G4double aValue ) {
0328 ProbLogDistrPrD = aValue;
0329 }
0330
0331 inline void G4FTFParameters::SetProbLogDistr( const G4double aValue ) {
0332 ProbLogDistr = aValue;
0333 }
0334
0335
0336
0337 inline void G4FTFParameters::SetPt2Kink( const G4double aValue ) {
0338 Pt2kink = aValue;
0339 }
0340
0341 inline void G4FTFParameters::SetQuarkProbabilitiesAtGluonSplitUp( const G4double Puubar,
0342 const G4double Pddbar,
0343 const G4double Pssbar ) {
0344 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar );
0345 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar );
0346 QuarkProbabilitiesAtGluonSplitUp.push_back( Puubar + Pddbar + Pssbar );
0347 }
0348
0349
0350 inline void G4FTFParameters::SetMaxNumberOfCollisions( const G4double Plab,
0351 const G4double Pbound ) {
0352 if ( Plab > Pbound ) {
0353 MaxNumberOfCollisions = Plab/Pbound;
0354 SetProbOfInteraction( -1.0 );
0355 } else {
0356
0357
0358 MaxNumberOfCollisions = 1;
0359 SetProbOfInteraction( -1.0 );
0360 }
0361 }
0362
0363 inline void G4FTFParameters::SetProbOfInteraction( const G4double aValue ) {
0364 ProbOfInelInteraction = aValue;
0365 }
0366
0367 inline void G4FTFParameters::SetCofNuclearDestructionPr( const G4double aValue ) {
0368 CofNuclearDestructionPr = aValue;
0369 }
0370
0371 inline void G4FTFParameters::SetCofNuclearDestruction( const G4double aValue ) {
0372 CofNuclearDestruction = aValue;
0373 }
0374
0375 inline void G4FTFParameters::SetR2ofNuclearDestruction( const G4double aValue ) {
0376 R2ofNuclearDestruction = aValue;
0377 }
0378
0379 inline void G4FTFParameters::SetExcitationEnergyPerWoundedNucleon( const G4double aValue ) {
0380 ExcitationEnergyPerWoundedNucleon = aValue;
0381 }
0382
0383 inline void G4FTFParameters::SetDofNuclearDestruction( const G4double aValue ) {
0384 DofNuclearDestruction = aValue;
0385 }
0386
0387 inline void G4FTFParameters::SetPt2ofNuclearDestruction( const G4double aValue ) {
0388 Pt2ofNuclearDestruction = aValue;
0389 }
0390
0391 inline void G4FTFParameters::SetMaxPt2ofNuclearDestruction( const G4double aValue ) {
0392 MaxPt2ofNuclearDestruction = aValue;
0393 }
0394
0395
0396 inline G4double G4FTFParameters::GetTotalCrossSection() {
0397 return FTFXtotal;
0398 }
0399
0400 inline G4double G4FTFParameters::GetElasticCrossSection() {
0401 return FTFXelastic;
0402 }
0403
0404 inline G4double G4FTFParameters::GetInelasticCrossSection() {
0405 return FTFXinelastic;
0406 }
0407
0408 inline G4double G4FTFParameters::GetSlope() {
0409 return FTFSlope;
0410 }
0411
0412 inline G4double G4FTFParameters::GetProbabilityOfInteraction( const G4double impactsquare ) {
0413 if ( RadiusOfHNinteractions2 > impactsquare ) {
0414 return 1.0;
0415 } else {
0416 return 0.0;
0417 }
0418 }
0419
0420 inline G4double G4FTFParameters::GetProbabilityOfElasticScatt() {
0421 return ProbabilityOfElasticScatt;
0422 }
0423
0424 inline G4double G4FTFParameters::GetInelasticProbability( const G4double impactsquare ) {
0425 G4double Gamma = GammaElastic( impactsquare );
0426 return 2*Gamma - Gamma*Gamma;
0427 }
0428
0429 inline G4double G4FTFParameters::GetProbabilityOfAnnihilation() {
0430 return ProbabilityOfAnnihilation;
0431 }
0432
0433
0434 inline G4double G4FTFParameters::GetAvaragePt2ofElasticScattering() {
0435 return AvaragePt2ofElasticScattering;
0436 }
0437
0438
0439
0440 inline G4double G4FTFParameters::GetDeltaProbAtQuarkExchange() {
0441 return DeltaProbAtQuarkExchange;
0442 }
0443
0444 inline G4double G4FTFParameters::GetProbOfSameQuarkExchange() {
0445 return ProbOfSameQuarkExchange;
0446 }
0447
0448 inline G4double G4FTFParameters::GetProjMinDiffMass() {
0449 return ProjMinDiffMass;
0450 }
0451
0452 inline G4double G4FTFParameters::GetProjMinNonDiffMass() {
0453 return ProjMinNonDiffMass;
0454 }
0455
0456 inline G4double G4FTFParameters::GetTarMinDiffMass() {
0457 return TarMinDiffMass;
0458 }
0459
0460 inline G4double G4FTFParameters::GetTarMinNonDiffMass() {
0461 return TarMinNonDiffMass;
0462 }
0463
0464 inline G4double G4FTFParameters::GetAveragePt2() {
0465 return AveragePt2;
0466 }
0467
0468 inline G4double G4FTFParameters::GetProbLogDistrPrD() {
0469 return ProbLogDistrPrD;
0470 }
0471
0472 inline G4double G4FTFParameters::GetProbLogDistr() {
0473 return ProbLogDistr;
0474 }
0475
0476
0477
0478 inline G4double G4FTFParameters::GetPt2Kink() {
0479 return Pt2kink;
0480 }
0481
0482 inline std::vector< G4double > G4FTFParameters::GetQuarkProbabilitiesAtGluonSplitUp() {
0483 return QuarkProbabilitiesAtGluonSplitUp;
0484 }
0485
0486
0487
0488 inline G4double G4FTFParameters::GetMaxNumberOfCollisions() {
0489 return MaxNumberOfCollisions;
0490 }
0491
0492 inline G4double G4FTFParameters::GetProbOfInteraction() {
0493 return ProbOfInelInteraction;
0494 }
0495
0496 inline G4double G4FTFParameters::GetCofNuclearDestructionPr() {
0497 return CofNuclearDestructionPr;
0498 }
0499
0500 inline G4double G4FTFParameters::GetCofNuclearDestruction() {
0501 return CofNuclearDestruction;
0502 }
0503
0504 inline G4double G4FTFParameters::GetR2ofNuclearDestruction() {
0505 return R2ofNuclearDestruction;
0506 }
0507
0508 inline G4double G4FTFParameters::GetExcitationEnergyPerWoundedNucleon() {
0509 return ExcitationEnergyPerWoundedNucleon;
0510 }
0511
0512 inline G4double G4FTFParameters::GetDofNuclearDestruction() {
0513 return DofNuclearDestruction;
0514 }
0515
0516 inline G4double G4FTFParameters::GetPt2ofNuclearDestruction() {
0517 return Pt2ofNuclearDestruction;
0518 }
0519
0520 inline G4double G4FTFParameters::GetMaxPt2ofNuclearDestruction() {
0521 return MaxPt2ofNuclearDestruction;
0522 }
0523
0524 #endif
0525