Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4FTFParameters.cc
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 // $Id: G4FTFParameters.cc 101902 2016-12-07 08:40:04Z gcosmo $
28 // GEANT4 tag $Name: $
29 //
30 
31 #include <utility>
32 
33 #include "G4FTFParameters.hh"
34 
35 #include "G4ios.hh"
36 #include "G4PhysicalConstants.hh"
37 #include "G4SystemOfUnits.hh"
38 
39 #include "G4ParticleDefinition.hh"
40 
41 #include "G4Proton.hh"
42 #include "G4Neutron.hh"
43 
44 #include "G4PionPlus.hh"
45 #include "G4PionMinus.hh"
46 #include "G4KaonPlus.hh"
47 #include "G4KaonMinus.hh"
48 
49 #include "G4Exp.hh"
50 #include "G4Log.hh"
51 #include "G4Pow.hh"
52 
53 //============================================================================
54 
55 //#define debugFTFparams
56 
57 
58 //============================================================================
59 
61  FTFhNcmsEnergy( 0.0 ),
62  FTFxsManager( 0 ),
63  FTFXtotal( 0.0 ), FTFXelastic( 0.0 ), FTFXinelastic( 0.0 ), FTFXannihilation( 0.0 ),
64  ProbabilityOfAnnihilation( 0.0 ), ProbabilityOfElasticScatt( 0.0 ),
65  RadiusOfHNinteractions2( 0.0 ), FTFSlope( 0.0 ),
66  AvaragePt2ofElasticScattering( 0.0 ), FTFGamma0( 0.0 ),
67  DeltaProbAtQuarkExchange( 0.0 ), ProbOfSameQuarkExchange( 0.0 ),
68  ProjMinDiffMass( 0.0 ), ProjMinNonDiffMass( 0.0 ), ProbLogDistrPrD(0.0),
69  TarMinDiffMass( 0.0 ), TarMinNonDiffMass( 0.0 ),
70  AveragePt2( 0.0 ), ProbLogDistr( 0.0 ),
71  Pt2kink( 0.0 ),
72  MaxNumberOfCollisions( 0.0 ), ProbOfInelInteraction( 0.0 ),
73  CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
74  R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
75  DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 )
76 {
77  for ( G4int i = 0; i < 4; i++ ) {
78  for ( G4int j = 0; j < 7; j++ ) {
79  ProcParams[i][j] = 0.0;
80  }
81  }
82 }
83 
84 
85 //============================================================================
86 
88 
89 
90 //============================================================================
91 
92 G4ThreadLocal bool G4FTFParameters::chipsComponentXSisInitialized = false;
93 G4ThreadLocal G4ChipsComponentXS* G4FTFParameters::chipsComponentXSinstance = 0;
94 
95 
96 //============================================================================
97 
99  G4int theA, G4int theZ, G4double PlabPerParticle ) :
100  FTFhNcmsEnergy( 0.0 ),
101  FTFxsManager( 0 ),
102  FTFXtotal( 0.0 ), FTFXelastic( 0.0 ), FTFXinelastic( 0.0 ), FTFXannihilation( 0.0 ),
103  ProbabilityOfAnnihilation( 0.0 ), ProbabilityOfElasticScatt( 0.0 ),
104  RadiusOfHNinteractions2( 0.0 ), FTFSlope( 0.0 ),
105  AvaragePt2ofElasticScattering( 0.0 ), FTFGamma0( 0.0 ),
106  DeltaProbAtQuarkExchange( 0.0 ), ProbOfSameQuarkExchange( 0.0 ),
107  ProjMinDiffMass( 0.0 ), ProjMinNonDiffMass( 0.0 ), ProbLogDistrPrD(0.0),
108  TarMinDiffMass( 0.0 ), TarMinNonDiffMass( 0.0 ),
109  AveragePt2( 0.0 ), ProbLogDistr( 0.0 ),
110  Pt2kink( 0.0 ),
111  MaxNumberOfCollisions( 0.0 ), ProbOfInelInteraction( 0.0 ),
112  CofNuclearDestructionPr( 0.0 ), CofNuclearDestruction( 0.0 ),
113  R2ofNuclearDestruction( 0.0 ), ExcitationEnergyPerWoundedNucleon( 0.0 ),
114  DofNuclearDestruction( 0.0 ), Pt2ofNuclearDestruction( 0.0 ), MaxPt2ofNuclearDestruction( 0.0 )
115 {
116  for ( G4int i = 0; i < 4; i++ ) {
117  for ( G4int j = 0; j < 7; j++ ) {
118  ProcParams[i][j] = 0.0;
119  }
120  }
121 
122  G4int ProjectilePDGcode = particle->GetPDGEncoding();
123  G4int ProjectileabsPDGcode = std::abs( ProjectilePDGcode );
124  G4double ProjectileMass = particle->GetPDGMass();
125  G4double ProjectileMass2 = ProjectileMass * ProjectileMass;
126 
127  G4int ProjectileBaryonNumber( 0 ), AbsProjectileBaryonNumber( 0 ), AbsProjectileCharge( 0 );
128  G4bool ProjectileIsNucleus = false;
129 
130  if ( std::abs( particle->GetBaryonNumber() ) > 1 ) { // The projectile is a nucleus
131  ProjectileIsNucleus = true;
132  ProjectileBaryonNumber = particle->GetBaryonNumber();
133  AbsProjectileBaryonNumber = std::abs( ProjectileBaryonNumber );
134  AbsProjectileCharge = G4int( particle->GetPDGCharge() );
135  if ( ProjectileBaryonNumber > 1 ) {
136  ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212; // Proton
137  } else {
138  ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212; // Anti-Proton
139  }
140  ProjectileMass = G4Proton::Proton()->GetPDGMass();
141  ProjectileMass2 = sqr( ProjectileMass );
142  }
143 
144  G4double TargetMass = G4Proton::Proton()->GetPDGMass();
145  G4double TargetMass2 = TargetMass * TargetMass;
146 
147  G4double Plab = PlabPerParticle;
148  G4double Elab = std::sqrt( Plab*Plab + ProjectileMass2 );
149  G4double KineticEnergy = Elab - ProjectileMass;
150 
151  G4double S = ProjectileMass2 + TargetMass2 + 2.0*TargetMass*Elab;
152 
153  #ifdef debugFTFparams
154  G4cout << "--------- FTF Parameters --------------" << G4endl << "Proj Plab "
155  << ProjectilePDGcode << " " << Plab << G4endl << "Mass KinE " << ProjectileMass
156  << " " << KineticEnergy << G4endl << " A Z " << theA << " " << theZ << G4endl;
157  #endif
158 
159  G4double Ylab, Xtotal, Xelastic, Xannihilation;
160  G4int NumberOfTargetNucleons;
161 
162  Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Plab) );
163 
164  G4double ECMSsqr = S/GeV/GeV;
165  G4double SqrtS = std::sqrt( S )/GeV;
166 
167  #ifdef debugFTFparams
168  G4cout << "Sqrt(s) " << SqrtS << G4endl;
169  #endif
170 
171  TargetMass /= GeV; TargetMass2 /= (GeV*GeV);
172  ProjectileMass /= GeV; ProjectileMass2 /= (GeV*GeV);
173 
174  // Andrea Dotti (13Jan2013):
175  // The following lines are changed for G4MT. Originally the code was:
176  // static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
177  // Note the code could go back at original if _instance could be shared among threads
178  if ( ! chipsComponentXSisInitialized ) {
179  chipsComponentXSisInitialized = true;
180  chipsComponentXSinstance = new G4ChipsComponentXS();
181  }
182  G4ChipsComponentXS* _instance = chipsComponentXSinstance;
183  FTFxsManager = _instance;
184 
185  Plab /= GeV;
186  G4double Xftf = 0.0;
187 
188  G4int NumberOfTargetProtons = theZ;
189  G4int NumberOfTargetNeutrons = theA - theZ;
190  NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
191 
192  if ( ProjectilePDGcode == 2212 || ProjectilePDGcode == 2112 ) { // Projectile is nucleon
194  G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 ); //ALB
195 
197  G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 ); //ALB
198  G4double XelPP = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
199  G4double XelPN = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
200 
201  #ifdef debugFTFparams
202  G4cout << "XsPP " << XtotPP/millibarn << " " << XelPP/millibarn << G4endl
203  << "XsPN " << XtotPN/millibarn << " " << XelPN/millibarn << G4endl;
204  #endif
205 
206  if ( ! ProjectileIsNucleus ) { // Projectile is hadron
207  Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN ) /
208  NumberOfTargetNucleons;
209  Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN ) /
210  NumberOfTargetNucleons;
211  } else { // Projectile is a nucleus
212  Xtotal = (
213  AbsProjectileCharge * NumberOfTargetProtons * XtotPP +
214  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
215  NumberOfTargetNeutrons * XtotPP
216  +
217  ( AbsProjectileCharge * NumberOfTargetNeutrons +
218  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
219  NumberOfTargetProtons ) * XtotPN
220  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
221  Xelastic= (
222  AbsProjectileCharge * NumberOfTargetProtons * XelPP +
223  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
224  NumberOfTargetNeutrons * XelPP
225  +
226  ( AbsProjectileCharge * NumberOfTargetNeutrons +
227  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
228  NumberOfTargetProtons ) * XelPN
229  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
230  }
231 
232  Xannihilation = 0.0;
233  Xtotal /= millibarn;
234  Xelastic /= millibarn;
235 
236  } else if ( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
237 
238  G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
239  G4double MesonProdThreshold = ProjectileMass + TargetMass +
240  ( 2.0 * 0.14 + 0.016 ); // 2 Mpi + DeltaE;
241 
242  if ( PlabPerParticle < 40.0*MeV ) { // Low energy limits. Projectile at rest.
243  Xtotal = 1512.9; // mb
244  Xelastic = 473.2; // mb
245  X_a = 625.1; // mb
246  X_b = 9.780; // mb
247  X_c = 49.989; // mb
248  X_d = 6.614; // mb
249  } else { // Total and elastic cross section of PbarP interactions a'la Arkhipov
250  G4double LogS = G4Log( ECMSsqr / 33.0625 );
251  G4double Xasmpt = 36.04 + 0.304*LogS*LogS; // mb
252  LogS = G4Log( SqrtS / 20.74 );
253  G4double Basmpt = 11.92 + 0.3036*LogS*LogS; // GeV^(-2)
254  G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt ); // GeV^(-1)
255 
256  G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 +
257  TargetMass2*TargetMass2 - 2.0*ECMSsqr*ProjectileMass2
258  - 2.0*ECMSsqr*TargetMass2
259  - 2.0*ProjectileMass2*TargetMass2 );
260 
261  Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0*
262  (1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) ); // mb
263 
264  Xasmpt = 4.4 + 0.101*LogS*LogS; // mb
265  Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0*
266  (1.0 - 6.95/SqrtS + 23.54/ECMSsqr - 25.34/SqrtS/ECMSsqr ) ); // mb
267 
268  //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
269  // << "FlowF " << FlowF << " SqrtS " << SqrtS << G4endl
270  // << "Param Xelastic-NaN " << Xelastic << " "
271  // << 1.5*16.654/pow(ECMSsqr/2.176/2.176,2.2) << " " << ECMSsqr << G4endl;
272 
273  X_a = 25.0*FlowF; // mb, 3-shirts diagram
274 
275  if ( SqrtS < MesonProdThreshold ) {
276  X_b = 3.13 + 140.0*G4Pow::GetInstance()->powA( MesonProdThreshold - SqrtS, 2.5 ); // mb anti-quark-quark annihilation
277  Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar)
278  } else {
279  X_b = 6.8/SqrtS; // mb anti-quark-quark annihilation
280  Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar)
281  }
282 
283  X_c = 2.0*FlowF*sqr( ProjectileMass + TargetMass )/ECMSsqr; // mb rearrangement
284 
285  X_d = 23.3/ECMSsqr; // mb anti-quark-quark string creation
286  }
287 
288  //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
289  // << "Para a b c d " << X_a << " " << X_b << " " << X_c << " " << X_d << G4endl;
290  // << "Para a b c d " << X_a << " " << 5.*X_b << " " << 5.*X_c << " " << 6.*X_d
291  // << G4endl;
292 
293  G4double Xann_on_P( 0.0), Xann_on_N( 0.0 );
294 
295  if ( ProjectilePDGcode == -2212 ) { // Pbar+P/N
296  Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
297  Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
298  } else if ( ProjectilePDGcode == -2112 ) { // NeutrBar+P/N
299  Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
300  Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
301  } else if ( ProjectilePDGcode == -3122 ) { // LambdaBar+P/N
302  Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
303  Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
304  } else if ( ProjectilePDGcode == -3112 ) { // Sigma-Bar+P/N
305  Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
306  Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
307  } else if ( ProjectilePDGcode == -3212 ) { // Sigma0Bar+P/N
308  Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
309  Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
310  } else if ( ProjectilePDGcode == -3222 ) { // Sigma+Bar+P/N
311  Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
312  Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
313  } else if ( ProjectilePDGcode == -3312 ) { // Xi-Bar+P/N
314  Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
315  Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
316  } else if ( ProjectilePDGcode == -3322 ) { // Xi0Bar+P/N
317  Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
318  Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
319  } else if ( ProjectilePDGcode == -3334 ) { // Omega-Bar+P/N
320  Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
321  Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
322  } else {
323  G4cout << "Unknown anti-baryon for FTF annihilation" << G4endl;
324  }
325 
326  //G4cout << "Sum " << Xann_on_P << G4endl;
327 
328  if ( ! ProjectileIsNucleus ) { // Projectile is anti-baryon
329  Xannihilation = ( NumberOfTargetProtons * Xann_on_P + NumberOfTargetNeutrons * Xann_on_N )
330  / NumberOfTargetNucleons;
331  } else { // Projectile is a nucleus
332  Xannihilation = (
333  ( AbsProjectileCharge * NumberOfTargetProtons +
334  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
335  NumberOfTargetNeutrons ) * Xann_on_P
336  +
337  ( AbsProjectileCharge * NumberOfTargetNeutrons +
338  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
339  NumberOfTargetProtons ) * Xann_on_N
340  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
341  }
342 
343  //G4double Xftf = 0.0;
344  MesonProdThreshold = ProjectileMass + TargetMass + (0.14 + 0.08); // Mpi + DeltaE
345  if ( SqrtS > MesonProdThreshold ) {
346  Xftf = 36.0 * ( 1.0 - MesonProdThreshold/SqrtS );
347  }
348 
349  Xtotal = Xelastic + Xannihilation + Xftf;
350 
351  #ifdef debugFTFparams
352  G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic
353  << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl
354  << "Plab Xelastic/Xtotal, Xann/Xin " << Plab << " " << Xelastic/Xtotal << " "
355  << Xannihilation/(Xtotal - Xelastic) << G4endl;
356  #endif
357 
358  } else if ( ProjectilePDGcode == 211 ) { // Projectile is PionPlus
359 
360  G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
362  G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
363  G4double XelPiP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
364  G4double XelPiN = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
365  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
366  / NumberOfTargetNucleons;
367  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
368  / NumberOfTargetNucleons;
369  Xannihilation = 0.0;
370  Xtotal /= millibarn;
371  Xelastic /= millibarn;
372 
373  } else if ( ProjectilePDGcode == -211 ) { // Projectile is PionMinus
374 
375  G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
377  G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
378  G4double XelPiP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
379  G4double XelPiN = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
380  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
381  / NumberOfTargetNucleons;
382  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
383  / NumberOfTargetNucleons;
384  Xannihilation = 0.0;
385  Xtotal /= millibarn;
386  Xelastic /= millibarn;
387 
388  } else if ( ProjectilePDGcode == 111 ) { // Projectile is PionZero
389 
391  G4double XtotPipP = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
393  G4double XtotPimP = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
394  G4double XelPipP = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
395  G4double XelPimP = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
396  G4double XtotPiP = ( XtotPipP + XtotPimP ) / 2.0;
397  G4double XtotPiN = XtotPiP;
398  G4double XelPiP = ( XelPipP + XelPimP ) / 2.0;
399  G4double XelPiN = XelPiP;
400  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
401  / NumberOfTargetNucleons;
402  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
403  / NumberOfTargetNucleons;
404  Xannihilation = 0.0;
405  Xtotal /= millibarn;
406  Xelastic /= millibarn;
407 
408  } else if ( ProjectilePDGcode == 321 ) { // Projectile is KaonPlus
409 
410  G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
412  G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
413  G4double XelKP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
414  G4double XelKN = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
415  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
416  / NumberOfTargetNucleons;
417  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
418  / NumberOfTargetNucleons;
419  Xannihilation = 0.0;
420  Xtotal /= millibarn;
421  Xelastic /= millibarn;
422 
423  } else if ( ProjectilePDGcode == -321 ) { // Projectile is KaonMinus
424 
425  G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
427  G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
428  G4double XelKP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
429  G4double XelKN = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
430  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
431  / NumberOfTargetNucleons;
432  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
433  / NumberOfTargetNucleons;
434  Xannihilation = 0.0;
435  Xtotal /= millibarn;
436  Xelastic /= millibarn;
437 
438  } else if ( ProjectilePDGcode == 311 || ProjectilePDGcode == 130 ||
439  ProjectilePDGcode == 310 ) { // Projectile is KaonZero
440 
442  G4double XtotKpP = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
444  G4double XtotKmP = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
445  G4double XelKpP = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
446  G4double XelKmP = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
447  G4double XtotKP = ( XtotKpP + XtotKmP ) / 2.0;
448  G4double XtotKN = XtotKP;
449  G4double XelKP = ( XelKpP + XelKmP ) / 2.0;
450  G4double XelKN = XelKP;
451  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
452  / NumberOfTargetNucleons;
453  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
454  / NumberOfTargetNucleons;
455  Xannihilation = 0.0;
456  Xtotal /= millibarn;
457  Xelastic /= millibarn;
458 
459  } else { // Projectile is undefined, Nucleon assumed
460 
462  G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 );
464  G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 );
465  G4double XelPP = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
466  G4double XelPN = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
467  Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN )
468  / NumberOfTargetNucleons;
469  Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN )
470  / NumberOfTargetNucleons;
471  Xannihilation = 0.0;
472  Xtotal /= millibarn;
473  Xelastic /= millibarn;
474 
475  };
476 
477  // Geometrical parameters
478  SetTotalCrossSection( Xtotal );
479  SetElastisCrossSection( Xelastic );
480  SetInelasticCrossSection( Xtotal - Xelastic );
481 
482  //G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic
483  // << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl;
484  //if (Xtotal - Xelastic != 0.0 ) {
485  // G4cout << "Plab Xelastic/Xtotal, Xann/Xin " << Plab << " " << Xelastic/Xtotal
486  // << " " << Xannihilation / (Xtotal - Xelastic) << G4endl;
487  //} else {
488  // G4cout << "Plab Xelastic/Xtotal, Xann " << Plab << " " << Xelastic/Xtotal
489  // << " " << Xannihilation << G4endl;
490  //}
491  //G4int Uzhi; G4cin >> Uzhi;
492 
493  // Interactions with elastic and inelastic collisions
494  SetProbabilityOfElasticScatt( Xtotal, Xelastic );
495  SetRadiusOfHNinteractions2( Xtotal/pi/10.0 );
496  if ( Xtotal - Xelastic == 0.0 ) {
498  } else {
499  SetProbabilityOfAnnihilation( Xannihilation / (Xtotal - Xelastic) );
500  }
501 
502  // No elastic scattering
503  //SetProbabilityOfElasticScatt( Xtotal, 0.0 );
504  //SetRadiusOfHNinteractions2( (Xtotal - Xelastic)/pi/10.0 );
505  //SetProbabilityOfAnnihilation( 1.0 );
506  //SetProbabilityOfAnnihilation( 0.0 );
507 
508  SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 ); // Slope parameter of elastic scattering
509  // (GeV/c)^(-2))
510  //G4cout << "Slope " << GetSlope() << G4endl;
511  SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi );
512 
513  // Parameters of elastic scattering
514  // Gaussian parametrization of elastic scattering amplitude assumed
515  SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV );
516  //G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
517 
518  // Parameters of excitations
519 
520  G4double Xinel = Xtotal - Xelastic;
521  //G4cout << "Param ProjectilePDGcode " << ProjectilePDGcode << G4endl;
522 
523  if ( ProjectilePDGcode > 1000 ) { // Projectile is baryon
524  // Proc# A1 B1 A2 B2 A3 Atop Ymin
525  SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
526  SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
527  if( Xinel > 0.) {
528  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
529  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
530  SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
531  } else {
532  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
533  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
534  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
535  }
536 
537  if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
538  // It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions
539  SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
540  //SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
541  }
542 
544  if ( NumberOfTargetNucleons > 26 ) {
546  } else {
548  }
549  SetProjMinDiffMass( 1.16 ); // GeV
550  SetProjMinNonDiffMass( 1.16 ); // GeV
551  SetTarMinDiffMass( 1.16 ); // GeV
552  SetTarMinNonDiffMass( 1.16 ); // GeV
553  SetAveragePt2( 0.15 ); // GeV^2
554  SetProbLogDistrPrD( 0.3 ); // Before it was: 0.5
555  SetProbLogDistr(0.3 ); // Before it was: 0.5
556 
557  } else if( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
558 
559  // Proc# A1 B1 A2 B2 A3 Atop Ymin
560  SetParams( 0, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange without Exc.
561  SetParams( 1, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange with Exc.
562  if( Xinel > 0.) {
563  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
564  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction
565  SetParams( 4, 1.0, 0.0 , 0.0, 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply
566  } else {
567  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
568  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
569  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
570  }
571 
572  if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
573  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
574  //SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
575  }
576 
579  SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV
580  SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
581  SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
582  SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
583  SetAveragePt2( 0.15 ); // GeV^2
584  SetProbLogDistrPrD( 0.3 );
585  SetProbLogDistr( 0.3 );
586 
587  } else if ( ProjectileabsPDGcode == 211 || ProjectilePDGcode == 111 ) { // Projectile is Pion
588 
589  // Proc# A1 B1 A2 B2 A3 Atop Ymin
590  SetParams( 0, 720.0, 2.5 , 2.3 , 1.0, 0., 1. , 2.7 );
591  SetParams( 1, 12.87, 0.5 , -44.91, 1.0, 0., 0. , 2.5 );
592  SetParams( 2, 0.086, 0. , -0.3 , 0.5, 0., 0. , 2.5 );
593  SetParams( 3, 32.8, 1.0 , -114.5 , 1.5, 0.084, 0. , 2.5 );
594  SetParams( 4, 1.0, 0.0 , -3.49, 0.5, 0.0, 0. , 2.5 ); // Qexchange with Exc. Additional multiply
595 
596  if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
597  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
598  //SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
599  }
600 
601  SetDeltaProbAtQuarkExchange( 0.56 ); // (0.35)
602  SetProjMinDiffMass( 0.5 ); // (0.5) // GeV
603  SetProjMinNonDiffMass( 0.5 ); // (0.5) // GeV
604  SetTarMinDiffMass( 1.16 ); // GeV
605  SetTarMinNonDiffMass( 1.16 ); // GeV
606  SetAveragePt2( 0.15 ); // GeV^2
607  SetProbLogDistrPrD( 0.3 );
608  SetProbLogDistr( 0.3 );
609 
610  } else if ( ProjectileabsPDGcode == 321 || ProjectileabsPDGcode == 311 ||
611  ProjectilePDGcode == 130 || ProjectilePDGcode == 310 ) { // Projectile is Kaon
612 
613  // Proc# A1 B1 A2 B2 A3 Atop Ymin
614  SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Qexchange without Exc.
615  SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 ); // Qexchange with Exc.
616  SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 ); // Projectile diffraction
617  SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 ); // Target diffraction
618  SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply
619 
620  if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
621  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
622  //SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
623  }
624 
626  SetProjMinDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
627  SetProjMinNonDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
628  SetTarMinDiffMass( 1.16 ); // GeV
629  SetTarMinNonDiffMass( 1.16 ); // GeV
630  SetAveragePt2( 0.15 ); // GeV^2
631  SetProbLogDistrPrD( 0.5 );
632  SetProbLogDistr( 0.3 );
633 
634  } else { // Projectile is undefined, Nucleon assumed
635 
636  // Proc# A1 B1 A2 B2 A3 Atop Ymin
637  SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
638  SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
639  if( Xinel > 0.) {
640  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
641  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction
642  SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. Additional multiply
643  } else {
644  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
645  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
646  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
647  }
648  if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
649  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
650  //SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
651  }
652  SetDeltaProbAtQuarkExchange( 0.0 ); // 7 June 2011
654  SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV
655  SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
656  SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
657  SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
658  SetAveragePt2( 0.15 ); // GeV^2
659  SetProbLogDistrPrD( 0.3 );
660  SetProbLogDistr( 0.3 );
661 
662  }
663 
664  // Set parameters of a string kink
665  // SetPt2Kink( 6.0*GeV*GeV );
666  SetPt2Kink( 0.0*GeV*GeV ); // Uzhi Oct 2014 to switch off kinky strings
667  G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 ); // SU(3) symmetry
668  //G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 ); // Broken SU(3) symmetry
669  SetQuarkProbabilitiesAtGluonSplitUp( Puubar, Pddbar, Pssbar );
670 
671  // Set parameters of nuclear destruction
672  if ( ProjectileabsPDGcode < 1000 ) { // Meson projectile
673  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
674  //AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
675  SetCofNuclearDestruction( 1.0* // AR-18May2016
676  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
679  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
680  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
681  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
683  } else if ( ProjectilePDGcode < -1000 ) { // for anti-baryon projectile
684  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
685  //AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
686  SetCofNuclearDestruction( 1.0* // AR-18May2016
687  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
690  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
691  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
692  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
694  if ( Plab < 2.0 ) { // 2 GeV/c
695  // For slow anti-baryon we have to garanty putting on mass-shell
697  SetR2ofNuclearDestruction( 1.5*fermi*fermi );
698  SetDofNuclearDestruction( 0.01 );
699  SetPt2ofNuclearDestruction( 0.035*GeV*GeV );
700  SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV );
701  //SetExcitationEnergyPerWoundedNucleon( 0.0 ); // ?????
702  }
703  } else { // Projectile baryon assumed
704  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
705  //AR-18May2016 SetCofNuclearDestructionPr( 0.00481*G4double(AbsProjectileBaryonNumber)* // Uzhi 3.05.2015
706  SetCofNuclearDestructionPr( 1.0* // AR-18May2016
707  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
708  //AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
709  SetCofNuclearDestruction( 1.0* // AR-18May2016
710  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
713  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
714  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
715  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
717  }
718 
719  //SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) );
720  //SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV );
721 
722  //SetMagQuarkExchange( 120.0 ); // 210.0 PipP
723  //SetSlopeQuarkExchange( 2.0 );
724  //SetDeltaProbAtQuarkExchange( 0.6 );
725  //SetProjMinDiffMass( 0.7 ); // GeV 1.1
726  //SetProjMinNonDiffMass( 0.7 ); // GeV
727  //SetProbabilityOfProjDiff( 0.0); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
728  //SetTarMinDiffMass( 1.1 ); // GeV
729  //SetTarMinNonDiffMass( 1.1 ); // GeV
730  //SetProbabilityOfTarDiff( 0.0 ); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
731 
732  //SetAveragePt2( 0.0 ); // GeV^2 0.3
733  //------------------------------------
734  //SetProbabilityOfElasticScatt( 1.0, 1.0); //(Xtotal, Xelastic);
735  //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 0->1
736  //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 2->4
737  //SetAveragePt2( 0.3 ); // (0.15)
738  //SetAvaragePt2ofElasticScattering( 0.0 );
739 
740  //SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 );
741  //SetAveragePt2( 0.15 );
742  //SetCofNuclearDestruction(-1.);//( 0.75 ); // (0.25)
743  //SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV)
744  //SetDofNuclearDestruction(0.);//( 0.2 ); //0.4 // 0.3 0.5
745 
746  //SetPt2ofNuclearDestruction(0.);//(2.*0.075*GeV*GeV); //( 0.3*GeV*GeV ); // (0.168*GeV*GeV)
747  //SetMaxNumberOfCollisions( Plab, 78.0 ); // 3.0 )
748 
749  //G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl;
750  //G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl;
751  //G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl;
752  //G4int Uzhi; G4cin >> Uzhi;
753 }
754 
755 
756 //============================================================================
757 
759  G4double Prob( 0.0 );
760  if ( y < ProcParams[ProcN][6] ) {
761  Prob = ProcParams[ProcN][5];
762  if(Prob < 0.) Prob=0.;
763  return Prob;
764  }
765  Prob = ProcParams[ProcN][0] * G4Exp( -ProcParams[ProcN][1]*y ) +
766  ProcParams[ProcN][2] * G4Exp( -ProcParams[ProcN][3]*y ) +
767  ProcParams[ProcN][4];
768  if(Prob < 0.) Prob=0.;
769  return Prob;
770 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
void SetProbLogDistr(const G4double aValue)
double S(double temp)
void SetCofNuclearDestructionPr(const G4double aValue)
void SetProbLogDistrPrD(const G4double aValue)
#define G4ThreadLocal
Definition: tls.hh:89
void SetTarMinNonDiffMass(const G4double aValue)
void SetDofNuclearDestruction(const G4double aValue)
void SetSlope(const G4double Slope)
G4ChipsComponentXS * FTFxsManager
int G4int
Definition: G4Types.hh:78
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:113
void SetGamma0(const G4double Gamma0)
G4GLOB_DLL std::ostream G4cout
void SetAveragePt2(const G4double aValue)
void SetElastisCrossSection(const G4double Xelastic)
bool G4bool
Definition: G4Types.hh:79
void SetPt2Kink(const G4double aValue)
void SetRadiusOfHNinteractions2(const G4double Radius2)
void SetMaxNumberOfCollisions(const G4double aValue, const G4double bValue)
void SetExcitationEnergyPerWoundedNucleon(const G4double aValue)
static G4Proton * Proton()
Definition: G4Proton.cc:93
void SetProjMinNonDiffMass(const G4double aValue)
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
void SetQuarkProbabilitiesAtGluonSplitUp(const G4double Puubar, const G4double Pddbar, const G4double Pssbar)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double N)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4double GetProcProb(const G4int ProcN, const G4double y)
void SetInelasticCrossSection(const G4double Xinelastic)
void SetProbabilityOfElasticScatt(const G4double Xtotal, const G4double Xelastic)
void SetDeltaProbAtQuarkExchange(const G4double aValue)
void SetTotalCrossSection(const G4double Xtotal)
void SetProjMinDiffMass(const G4double aValue)
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4double GetPDGMass() const
void SetMaxPt2ofNuclearDestruction(const G4double aValue)
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)
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
G4double ProcParams[5][7]
void SetCofNuclearDestruction(const G4double aValue)
static constexpr double GeV
Definition: G4SIunits.hh:217
void SetProbOfSameQuarkExchange(const G4double aValue)
#define G4endl
Definition: G4ios.hh:61
static constexpr double MeV
Definition: G4SIunits.hh:214
static constexpr double pi
Definition: G4SIunits.hh:75
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double N)
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
void SetProbabilityOfAnnihilation(const G4double aValue)
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
static constexpr double fermi
Definition: G4SIunits.hh:103
G4double GetPDGCharge() const
void SetPt2ofNuclearDestruction(const G4double aValue)
void SetAvaragePt2ofElasticScattering(const G4double aPt2)
void SetTarMinDiffMass(const G4double aValue)
static constexpr double millibarn
Definition: G4SIunits.hh:106
void SetR2ofNuclearDestruction(const G4double aValue)