Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4FTFParameters.cc
이 파일의 문서화 페이지로 가기
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 109066 2018-03-23 12:59:45Z 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 
54 
57 {
58  public:
59  // ctor
61  //
62  // Cross sections for elementary processes
63  //
64  // these are for Inelastic interactions, i.e. Xinelastic=(Xtotal-Xelastix)>0.
65  // for elastic, all the A's & B's, Atop & Ymin are zeros
66  // general formula: Pp = A1*exp(B1*Y) + A2*exp(B2*Y) + A3
67  // but if Y<Ymin, then Pp=max(0.,Atop)
68  // for details, see also G4FTFParameters::GetProcProb( ProcN, y )
69  //
70  // Baryon projectile
71  //
72  /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
73  // Process=0 --> Qexchg w/o excitation
74  //
75  HDP.SetDefault( "FTF_BARYON_PROC0_A1", 13.71 );
76  HDP.SetDefault( "FTF_BARYON_PROC0_B1", 1.75 );
77  HDP.SetDefault( "FTF_BARYON_PROC0_A2",-214.5 );
78  HDP.SetDefault( "FTF_BARYON_PROC0_B2", 4.25 );
79  HDP.SetDefault( "FTF_BARYON_PROC0_A3", 0.0 );
80  HDP.SetDefault( "FTF_BARYON_PROC0_ATOP", 0.5 );
81  HDP.SetDefault( "FTF_BARYON_PROC0_YMIN", 1.1 );
82  //
83  // Process=1 --> Qexchg w/excitation
84  //
85  HDP.SetDefault( "FTF_BARYON_PROC1_A1", 25. );
86  HDP.SetDefault( "FTF_BARYON_PROC1_B1", 1. );
87  HDP.SetDefault( "FTF_BARYON_PROC1_A2", -50.34 );
88  HDP.SetDefault( "FTF_BARYON_PROC1_B2", 1.5 );
89  HDP.SetDefault( "FTF_BARYON_PROC1_A3", 0. );
90  HDP.SetDefault( "FTF_BARYON_PROC1_ATOP", 0. );
91  HDP.SetDefault( "FTF_BARYON_PROC1_YMIN", 1.4 );
92  */
93  //
94  // NOTE: Process #2 & 3 are projectile & target diffraction
95  // they have more complex definition of A1 & A2
96  // (see around line 540 or so)
97  // SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
98  // SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
99  //
100  // Also, for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
101  // projectile and/or target diffraction (dissociation) may be switched ON/OFF
102  //
103  HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_PROJ", false );
104  HDP.SetDefault( "FTF_BARYON_DIFF_DISSO_TGT", false ); // as in hadr-string-diff-V10-03-07
105  //
106  /* JVY, Oct. 31, 2017: Per Alberto R. & Vladimir U., keep this group of parameters FIXED
107  // Process=4 --> Qexchg w/additional multiplier in excitation
108  //
109  HDP.SetDefault( "FTF_BARYON_PROC4_A1", 1. );
110  HDP.SetDefault( "FTF_BARYON_PROC4_B1", 0. );
111  HDP.SetDefault( "FTF_BARYON_PROC4_A2", -2.01);
112  HDP.SetDefault( "FTF_BARYON_PROC4_B2", 0.5 );
113  HDP.SetDefault( "FTF_BARYON_PROC4_A3", 0. );
114  HDP.SetDefault( "FTF_BARYON_PROC4_ATOP",0. );
115  HDP.SetDefault( "FTF_BARYON_PROC4_YMIN",1.4 );
116  */
117  //
118  // Parameters of participating hadron (baryon) excitation
119  //
120  HDP.SetDefault( "FTF_BARYON_DELTA_PROB_QEXCHG", 0. );
121  HDP.SetDefault( "FTF_BARYON_PROB_SAME_QEXCHG", 0. );
122  HDP.SetDefault( "FTF_BARYON_DIFF_M_PROJ", 1.16, 1.16, 3. );
123  HDP.SetDefault( "FTF_BARYON_NONDIFF_M_PROJ", 1.16, 1.16, 3. );
124  HDP.SetDefault( "FTF_BARYON_DIFF_M_TGT", 1.16, 1.16, 3. );
125  HDP.SetDefault( "FTF_BARYON_NONDIFF_M_TGT", 1.16, 1.16, 3. );
126  HDP.SetDefault( "FTF_BARYON_AVRG_PT2", 0.3, 0.08, 1. );
127  //
128  // JVY, Oct. 6, 2017: Per Alberto R., keep these two settings fixed (for now)
129  //
130  // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_PROJ", 0.3 );
131  // HDP.SetDefault( "FTF_BARYON_PROB_DISTR_TGT", 0.3 );
132  //
133  // nuclear destruction - common parameters (with validity ranges, if applicable)
134  //
135  HDP.SetDefault( "FTF_NUCDESTR_P1_PROJ", 1., 0., 1. ); // in principle, it should be 1./NBRN - FIXME later !
136  HDP.SetDefault( "FTF_NUCDESTR_P1_NBRN_PROJ", false );
137  HDP.SetDefault( "FTF_NUCDESTR_P1_TGT", 1., 0., 1. );
138  HDP.SetDefault( "FTF_NUCDESTR_P1_ADEP_TGT", false );
139  // for now, keep fixed p2 & p3 for the tgt destruction
140  HDP.SetDefault( "FTF_NUCDESTR_P2_TGT", 4.0, 2., 16. );
141  HDP.SetDefault( "FTF_NUCDESTR_P3_TGT", 2.1, 0., 4. );
142  HDP.SetDefault( "FTF_PT2_NUCDESTR_P1", 0.035, 0., 0.25 );
143  HDP.SetDefault( "FTF_PT2_NUCDESTR_P2", 0.04, 0., 0.25 );
144  HDP.SetDefault( "FTF_PT2_NUCDESTR_P3", 4.0, 2., 16. );
145  HDP.SetDefault( "FTF_PT2_NUCDESTR_P4", 2.5, 0., 4. );
146  //
147  // nuclear desctruction - specific to baryon projectile
148  //
149  HDP.SetDefault( "FTF_BARYON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi, 0.5*CLHEP::fermi*CLHEP::fermi, 2.*CLHEP::fermi*CLHEP::fermi );
150  HDP.SetDefault( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", 40.*CLHEP::MeV, 0., 100.*CLHEP::MeV );
151  HDP.SetDefault( "FTF_BARYON_NUCDESTR_DOF", 0.3, 0.1, 0.4 );
152  //
153  // JVY, Oct. 6, 2017: Per Alberto R., this is just a technical parameter,
154  // and it should NOT be changed
155  //
156  // HDP.SetDefault( "FTF_BARYON_NUCDESTR_MAXPT2", 1. * CLHEP::GeV*CLHEP::GeV );
157  }
158 };
160 
161 //============================================================================
162 
163 //#define debugFTFparams
164 
165 //============================================================================
166 
168 {
169  Reset(); // zero out everything
170 
171  // general (i.e. for used for baryons,anti-baryons, and mesons)
172  //
173  HDP.DeveloperGet( "FTF_NUCDESTR_P1_PROJ", fNuclearProjDestructP1 );
174  HDP.DeveloperGet( "FTF_NUCDESTR_P1_NBRN_PROJ",fNuclearProjDestructP1_NBRNDEP );
175  HDP.DeveloperGet( "FTF_NUCDESTR_P1_TGT", fNuclearTgtDestructP1 );
176  HDP.DeveloperGet( "FTF_NUCDESTR_P1_ADEP_TGT", fNuclearTgtDestructP1_ADEP );
177  HDP.DeveloperGet( "FTF_NUCDESTR_P2_TGT", fNuclearTgtDestructP2 );
178  HDP.DeveloperGet( "FTF_NUCDESTR_P3_TGT", fNuclearTgtDestructP3 );
179  //
180  HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P1", fPt2NuclearDestructP1 );
181  HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P2", fPt2NuclearDestructP2 );
182  HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P3", fPt2NuclearDestructP3 );
183  HDP.DeveloperGet( "FTF_PT2_NUCDESTR_P4", fPt2NuclearDestructP4 );
184  //
185  // fNuclearProjDestructP1 = 1.; // in 10.2.p03 & 10.3.ref04-ref07/08/09 it's 0.00481; in 10.3.p01/p02/p03, etc. it's be 1. (fixed)
186  // fNuclearProjDestructP1_NBRNDEP = false;
187  // fNuclearTgtDestructP1 = 1.; // in 10.2.p03 & 10.3.ref04-ref07/08/09 it's 0.00481; in 10.3.p01/p02/p03, etc. it's be 1. (fixed)
188  // fNuclearTgtDestructP1_ADEP = false;
191  // fNuclearTgtDestructP2 = 4.0;
192  // fNuclearTgtDestructP3 = 2.1;
193  // fPt2NuclearDestructP1 = 0.035;
194  // fPt2NuclearDestructP2 = 0.04;
195  // fPt2NuclearDestructP3 = 4.0;
196  // fPt2NuclearDestructP4 = 2.5;
197 }
198 
200 {
201  // parameters of excitation
202 
203  // Proc=0 --> Qexchg w/o excitation
204  fProc0A1 = 0.;
205  fProc0B1 = 0.;
206  fProc0A2 = 0.;
207  fProc0B2 = 0.;
208  fProc0A3 = 0.;
209  fProc0Atop = 0.;
210  fProc0Ymin = 0.;
211 
212  // Proc=1 --> Qexchg w/excitation
213  fProc1A1 = 0.;
214  fProc1B1 = 0.;
215  fProc1A2 = 0.;
216  fProc1B2 = 0.;
217  fProc1A3 = 0.;
218  fProc1Atop = 0.;
219  fProc1Ymin = 0.;
220 
221  // Proc=2 & Proc=3 for ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
222  // Do NOT do anything as it's set once and for all !!!
223 
224  // Proc=4 --> Qexchg w/additional multiplier in excitation
225  fProc4A1 = 0.;
226  fProc4B1 = 0.;
227  fProc4A2 = 0.;
228  fProc4B2 = 0.;
229  fProc4A3 = 0.;
230  fProc4Atop = 0.;
231  fProc4Ymin = 0.;
232 
233  // parameters of participating baryon excitation
234 
237  fProjMinDiffMass = 0.;
238  fProjMinNonDiffMass = 0.;
239  fTgtMinDiffMass = 0.;
240  fTgtMinNonDiffMass = 0.;
241  fAveragePt2 = 0.;
242  fProbLogDistrPrD = 0.;
243  fProbLogDistr = 0.;
244 
245  // parameters of nuclear distruction
246 
247  // COMMONs
257  fPt2NuclearDestructP4 = 0.;
258 
259  // baryons
262  fDofNuclearDestruct = 0.;
264 
265  return;
266 }
267 
268 //============================================================================
269 
272 {
273 
274  // parameters of participating hadron (baryon) excitation
275  //
276  // baryons projectile
277  //
278  // Proc=0 --> Qexchg w/o excitation
279  //
280  /* As of Oct. 31, 2017 keep these fixed
281  HDP.DeveloperGet( "FTF_BARYON_PROC0_A1", fProc0A1 );
282  HDP.DeveloperGet( "FTF_BARYON_PROC0_B1", fProc0B1 );
283  HDP.DeveloperGet( "FTF_BARYON_PROC0_A2", fProc0A2 );
284  HDP.DeveloperGet( "FTF_BARYON_PROC0_B2", fProc0B2 );
285  HDP.DeveloperGet( "FTF_BARYON_PROC0_A3", fProc0A3 );
286  HDP.DeveloperGet( "FTF_BARYON_PROC0_ATOP", fProc0Atop );
287  HDP.DeveloperGet( "FTF_BARYON_PROC0_YMIN", fProc0Ymin );
288  */
289  //
290  fProc0A1 = 13.71;
291  fProc0B1 = 1.75;
292  fProc0A2 = -30.69; // (or -214.5 as in Doc ?)
293  fProc0B2 = 3.; // ( or 4. as in Doc ?)
294  fProc0A3 = 0.;
295  fProc0Atop = 1.; // ( or 0.5 as in Doc ?)
296  fProc0Ymin = 0.93; // (or 1.1 as in Doc ?)
297  //
298  // Proc=1 --> Qexchg w/excitation
299  //
300  /* As of Oct. 31, 2017 keep these fixed
301  HDP.DeveloperGet( "FTF_BARYON_PROC1_A1", fProc1A1 );
302  HDP.DeveloperGet( "FTF_BARYON_PROC1_B1", fProc1B1 );
303  HDP.DeveloperGet( "FTF_BARYON_PROC1_A2", fProc1A2 );
304  HDP.DeveloperGet( "FTF_BARYON_PROC1_B2", fProc1B2 );
305  HDP.DeveloperGet( "FTF_BARYON_PROC1_A3", fProc1A3 );
306  HDP.DeveloperGet( "FTF_BARYON_PROC1_ATOP", fProc1Atop );
307  HDP.DeveloperGet( "FTF_BARYON_PROC1_YMIN", fProc1Ymin );
308  */
309  //
310  fProc1A1 = 25.;
311  fProc1B1 = 1.;
312  fProc1A2 = -50.34;
313  fProc1B2 = 1.5;
314  fProc1A3 = 0.;
315  fProc1Atop = 0.;
316  fProc1Ymin = 1.4;
317  //
318  // Proc=2 & Proc=3 for the case ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 )
319  // (diffraction dissociation)
320  //
321  HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_PROJ", fProjDiffDissociation );
322  HDP.DeveloperGet( "FTF_BARYON_DIFF_DISSO_TGT", fTgtDiffDissociation );
323  //
324  // fProjDiffDissociation = false;
325  // fTgtDiffDissociation = true;
326  //
327  //
328  // Proc=4 --> Qexchg "w/additional multiplier" in excitation
329  //
330  /* As of Oct. 31, 2017 keep these fixed
331  HDP.DeveloperGet( "FTF_BARYON_PROC4_A1", fProc4A1 );
332  HDP.DeveloperGet( "FTF_BARYON_PROC4_B1", fProc4B1 );
333  HDP.DeveloperGet( "FTF_BARYON_PROC4_A2", fProc4A2 );
334  HDP.DeveloperGet( "FTF_BARYON_PROC4_B2", fProc4B2 );
335  HDP.DeveloperGet( "FTF_BARYON_PROC4_A3", fProc4A3 );
336  HDP.DeveloperGet( "FTF_BARYON_PROC4_ATOP", fProc4Atop );
337  HDP.DeveloperGet( "FTF_BARYON_PROC4_YMIN", fProc4Ymin );
338  */
339  //
340  fProc4A1 = 0.6; // (or 1. as in Doc ?)
341  fProc4B1 = 0.;
342  fProc4A2 = -1.2; // (or -2.01 as in Doc ?)
343  fProc4B2 = 0.5;
344  fProc4A3 = 0.;
345  fProc4Atop = 0.;
346  fProc4Ymin = 1.4;
347  //
348  //
349  HDP.DeveloperGet( "FTF_BARYON_DELTA_PROB_QEXCHG", fDeltaProbAtQuarkExchange );
350  HDP.DeveloperGet( "FTF_BARYON_PROB_SAME_QEXCHG", fProbOfSameQuarkExchange );
351  HDP.DeveloperGet( "FTF_BARYON_DIFF_M_PROJ", fProjMinDiffMass );
352  HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_PROJ", fProjMinNonDiffMass );
353  HDP.DeveloperGet( "FTF_BARYON_DIFF_M_TGT", fTgtMinDiffMass );
354  HDP.DeveloperGet( "FTF_BARYON_NONDIFF_M_TGT", fTgtMinNonDiffMass );
355  HDP.DeveloperGet( "FTF_BARYON_AVRG_PT2", fAveragePt2 );
356  //
357  // fDeltaProbAtQuarkExchange = 0.;
358  // fProbOfSameQuarkExchange = 0.;
359  // fProjMinDiffMass = 1.16; // it's supposed to be in GeV but do NOT do (*CLHEP::GeV)
360  // because it'll be done in the G4FTFParameters::SetProjMinDiffMass
361  // fProjMinNonDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
362  // fTgtMinDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
363  // fTgtMinNonDiffMass = 1.16; // do NOT (*CLHEP::GeV) - same as above
364  // fAveragePt2 = 0.15; // do NOT (*CLHEP::GeV*CLHEP::GeV)
365  //
366  // JVY - Per Alberto R., we're curretly keeping these two settings fixed,
367  // thus they're defined here explicitly, rather than via HDP
368  //
369  // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_PROJ", fProbLogDistrPrD );
370  // HDP.DeveloperGet( "FTF_BARYON_PROB_DISTR_TGT", fProbLogDistr );
371  fProbLogDistrPrD = 0.55;
372  fProbLogDistr = 0.55;
373 
374  // nuclear destruction
375  //
376  // baryons
377  //
378  // ---> LATER !!! ---> fBaryonMaxNumberOfCollisions = 2.;
379  //
380 
381  HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_R2", fR2ofNuclearDestruct );
382  HDP.DeveloperGet( "FTF_BARYON_EXCI_E_PER_WNDNUCLN", fExciEnergyPerWoundedNucleon );
383  HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_DOF", fDofNuclearDestruct );
384  //
385  // fR2ofNuclearDestruct = 1.5 * CLHEP::fermi*CLHEP::fermi;
386  // fExciEnergyPerWoundedNucleon = 40. * CLHEP::MeV;
387  // fDofNuclearDestruct = 0.3;
388  //
389  // NOTE-1: this parameter has changed from 1. to 9. between 10.2 and 10.3.ref07 !!!
390  // ... then it went back to 1. for the 10.4-candidate...
391  // NOTE-2: this is a "technical" parameter, it should not be changed; this is why
392  // it is defined explicitly rather than via HDP
393  // --> HDP.DeveloperGet( "FTF_BARYON_NUCDESTR_MAXPT2", fMaxPt2ofNuclearDestruct );
395 }
396 
397 //============================================================================
398 
401 
402 //============================================================================
403 
405 {
406 
407  FTFxsManager = 0;
408  Reset();
409 
410  // Andrea Dotti (13Jan2013):
411  // The following lines are changed for G4MT. Originally the code was:
412  // static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
413  // Note the code could go back at original if _instance could be shared among threads
417  }
419  FTFxsManager = _instance;
420 
421 }
422 
423 //============================================================================
424 
426 
427 //============================================================================
428 
430 {
431 
432  FTFhNcmsEnergy = 0.0;
433  FTFXtotal = 0.0;
434  FTFXelastic = 0.0;
435  FTFXinelastic = 0.0;
436  FTFXannihilation = 0.0;
440  FTFSlope = 0.0;
442  FTFGamma0 = 0.0;
445  ProjMinDiffMass = 0.0;
446  ProjMinNonDiffMass = 0.0;
447  ProbLogDistrPrD = 0.0;
448  TarMinDiffMass = 0.0;
449  TarMinNonDiffMass = 0.0;
450  AveragePt2 = 0.0;
451  ProbLogDistr = 0.0;
452  Pt2kink = 0.0;
453  MaxNumberOfCollisions = 0.0;
454  ProbOfInelInteraction = 0.0;
456  CofNuclearDestruction = 0.0;
457  R2ofNuclearDestruction = 0.0;
459  DofNuclearDestruction = 0.0;
462 
463  for ( G4int i = 0; i < 4; i++ ) {
464  for ( G4int j = 0; j < 7; j++ ) {
465  ProcParams[i][j] = 0.0;
466  }
467  }
468 
469  return;
470 
471 }
472 
473 //============================================================================
474 
476  G4int theA, G4int theZ, G4double PlabPerParticle )
477 {
478 
479  Reset();
480 
481  G4int ProjectilePDGcode = particle->GetPDGEncoding();
482  G4int ProjectileabsPDGcode = std::abs( ProjectilePDGcode );
483  G4double ProjectileMass = particle->GetPDGMass();
484  G4double ProjectileMass2 = ProjectileMass * ProjectileMass;
485 
486  G4int ProjectileBaryonNumber( 0 ), AbsProjectileBaryonNumber( 0 ), AbsProjectileCharge( 0 );
487  G4bool ProjectileIsNucleus = false;
488 
489  if ( std::abs( particle->GetBaryonNumber() ) > 1 ) { // The projectile is a nucleus
490  ProjectileIsNucleus = true;
491  ProjectileBaryonNumber = particle->GetBaryonNumber();
492  AbsProjectileBaryonNumber = std::abs( ProjectileBaryonNumber );
493  AbsProjectileCharge = G4int( particle->GetPDGCharge() );
494  if ( ProjectileBaryonNumber > 1 ) {
495  ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212; // Proton
496  } else {
497  ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212; // Anti-Proton
498  }
499  ProjectileMass = G4Proton::Proton()->GetPDGMass();
500  ProjectileMass2 = sqr( ProjectileMass );
501  }
502 
503  G4double TargetMass = G4Proton::Proton()->GetPDGMass();
504  G4double TargetMass2 = TargetMass * TargetMass;
505 
506  G4double Plab = PlabPerParticle;
507  G4double Elab = std::sqrt( Plab*Plab + ProjectileMass2 );
508  G4double KineticEnergy = Elab - ProjectileMass;
509 
510  G4double S = ProjectileMass2 + TargetMass2 + 2.0*TargetMass*Elab;
511 
512  #ifdef debugFTFparams
513  G4cout << "--------- FTF Parameters --------------" << G4endl << "Proj Plab "
514  << ProjectilePDGcode << " " << Plab << G4endl << "Mass KinE " << ProjectileMass
515  << " " << KineticEnergy << G4endl << " A Z " << theA << " " << theZ << G4endl;
516  #endif
517 
518  G4double Ylab, Xtotal, Xelastic, Xannihilation;
519  G4int NumberOfTargetNucleons;
520 
521  Ylab = 0.5 * G4Log( (Elab + Plab)/(Elab - Plab) );
522 
523  G4double ECMSsqr = S/GeV/GeV;
524  G4double SqrtS = std::sqrt( S )/GeV;
525 
526  #ifdef debugFTFparams
527  G4cout << "Sqrt(s) " << SqrtS << G4endl;
528  #endif
529 
530  TargetMass /= GeV; TargetMass2 /= (GeV*GeV);
531  ProjectileMass /= GeV; ProjectileMass2 /= (GeV*GeV);
532 
533  /* JYV, Oct. 31, 2017: Keep it in the ctor
534 
535  // Andrea Dotti (13Jan2013):
536  // The following lines are changed for G4MT. Originally the code was:
537  // static G4ChipsComponentXS* _instance = new G4ChipsComponentXS(); // Witek Pokorski
538  // Note the code could go back at original if _instance could be shared among threads
539  if ( ! chipsComponentXSisInitialized ) {
540  chipsComponentXSisInitialized = true;
541  chipsComponentXSinstance = new G4ChipsComponentXS();
542  }
543  G4ChipsComponentXS* _instance = chipsComponentXSinstance;
544  FTFxsManager = _instance;
545  */
546 
547  Plab /= GeV;
548  G4double Xftf = 0.0;
549 
550  G4int NumberOfTargetProtons = theZ;
551  G4int NumberOfTargetNeutrons = theA - theZ;
552  NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
553 
554  if ( ProjectilePDGcode == 2212 || ProjectilePDGcode == 2112 ) { // Projectile is nucleon
556  G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 ); //ALB
557 
559  G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 ); //ALB
560  G4double XelPP = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
561  G4double XelPN = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
562 
563  #ifdef debugFTFparams
564  G4cout << "XsPP " << XtotPP/millibarn << " " << XelPP/millibarn << G4endl
565  << "XsPN " << XtotPN/millibarn << " " << XelPN/millibarn << G4endl;
566  #endif
567 
568  if ( ! ProjectileIsNucleus ) { // Projectile is hadron
569  Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN ) /
570  NumberOfTargetNucleons;
571  Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN ) /
572  NumberOfTargetNucleons;
573  } else { // Projectile is a nucleus
574  Xtotal = (
575  AbsProjectileCharge * NumberOfTargetProtons * XtotPP +
576  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
577  NumberOfTargetNeutrons * XtotPP
578  +
579  ( AbsProjectileCharge * NumberOfTargetNeutrons +
580  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
581  NumberOfTargetProtons ) * XtotPN
582  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
583  Xelastic= (
584  AbsProjectileCharge * NumberOfTargetProtons * XelPP +
585  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
586  NumberOfTargetNeutrons * XelPP
587  +
588  ( AbsProjectileCharge * NumberOfTargetNeutrons +
589  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
590  NumberOfTargetProtons ) * XelPN
591  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
592  }
593 
594  Xannihilation = 0.0;
595  Xtotal /= millibarn;
596  Xelastic /= millibarn;
597 
598  } else if ( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
599 
600  G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
601  G4double MesonProdThreshold = ProjectileMass + TargetMass +
602  ( 2.0 * 0.14 + 0.016 ); // 2 Mpi + DeltaE;
603 
604  if ( PlabPerParticle < 40.0*MeV ) { // Low energy limits. Projectile at rest.
605  Xtotal = 1512.9; // mb
606  Xelastic = 473.2; // mb
607  X_a = 625.1; // mb
608  X_b = 9.780; // mb
609  X_c = 49.989; // mb
610  X_d = 6.614; // mb
611  } else { // Total and elastic cross section of PbarP interactions a'la Arkhipov
612  G4double LogS = G4Log( ECMSsqr / 33.0625 );
613  G4double Xasmpt = 36.04 + 0.304*LogS*LogS; // mb
614  LogS = G4Log( SqrtS / 20.74 );
615  G4double Basmpt = 11.92 + 0.3036*LogS*LogS; // GeV^(-2)
616  G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt ); // GeV^(-1)
617 
618  G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 +
619  TargetMass2*TargetMass2 - 2.0*ECMSsqr*ProjectileMass2
620  - 2.0*ECMSsqr*TargetMass2
621  - 2.0*ProjectileMass2*TargetMass2 );
622 
623  Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0*
624  (1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) ); // mb
625 
626  Xasmpt = 4.4 + 0.101*LogS*LogS; // mb
627  Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0*
628  (1.0 - 6.95/SqrtS + 23.54/ECMSsqr - 25.34/SqrtS/ECMSsqr ) ); // mb
629 
630  //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
631  // << "FlowF " << FlowF << " SqrtS " << SqrtS << G4endl
632  // << "Param Xelastic-NaN " << Xelastic << " "
633  // << 1.5*16.654/pow(ECMSsqr/2.176/2.176,2.2) << " " << ECMSsqr << G4endl;
634 
635  X_a = 25.0*FlowF; // mb, 3-shirts diagram
636 
637  if ( SqrtS < MesonProdThreshold ) {
638  X_b = 3.13 + 140.0*G4Pow::GetInstance()->powA( MesonProdThreshold - SqrtS, 2.5 ); // mb anti-quark-quark annihilation
639  Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar)
640  } else {
641  X_b = 6.8/SqrtS; // mb anti-quark-quark annihilation
642  Xelastic -= 3.0*X_b; // Xel-X(PbarP->NNbar)
643  }
644 
645  X_c = 2.0*FlowF*sqr( ProjectileMass + TargetMass )/ECMSsqr; // mb rearrangement
646 
647  X_d = 23.3/ECMSsqr; // mb anti-quark-quark string creation
648  }
649 
650  //G4cout << "Param Xtotal Xelastic " << Xtotal << " " << Xelastic << G4endl
651  // << "Para a b c d " << X_a << " " << X_b << " " << X_c << " " << X_d << G4endl;
652  // << "Para a b c d " << X_a << " " << 5.*X_b << " " << 5.*X_c << " " << 6.*X_d
653  // << G4endl;
654 
655  G4double Xann_on_P( 0.0), Xann_on_N( 0.0 );
656 
657  if ( ProjectilePDGcode == -2212 ) { // Pbar+P/N
658  Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
659  Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
660  } else if ( ProjectilePDGcode == -2112 ) { // NeutrBar+P/N
661  Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
662  Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
663  } else if ( ProjectilePDGcode == -3122 ) { // LambdaBar+P/N
664  Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
665  Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
666  } else if ( ProjectilePDGcode == -3112 ) { // Sigma-Bar+P/N
667  Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
668  Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
669  } else if ( ProjectilePDGcode == -3212 ) { // Sigma0Bar+P/N
670  Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
671  Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
672  } else if ( ProjectilePDGcode == -3222 ) { // Sigma+Bar+P/N
673  Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
674  Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
675  } else if ( ProjectilePDGcode == -3312 ) { // Xi-Bar+P/N
676  Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
677  Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
678  } else if ( ProjectilePDGcode == -3322 ) { // Xi0Bar+P/N
679  Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
680  Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
681  } else if ( ProjectilePDGcode == -3334 ) { // Omega-Bar+P/N
682  Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
683  Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
684  } else {
685  G4cout << "Unknown anti-baryon for FTF annihilation" << G4endl;
686  }
687 
688  //G4cout << "Sum " << Xann_on_P << G4endl;
689 
690  if ( ! ProjectileIsNucleus ) { // Projectile is anti-baryon
691  Xannihilation = ( NumberOfTargetProtons * Xann_on_P + NumberOfTargetNeutrons * Xann_on_N )
692  / NumberOfTargetNucleons;
693  } else { // Projectile is a nucleus
694  Xannihilation = (
695  ( AbsProjectileCharge * NumberOfTargetProtons +
696  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
697  NumberOfTargetNeutrons ) * Xann_on_P
698  +
699  ( AbsProjectileCharge * NumberOfTargetNeutrons +
700  ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
701  NumberOfTargetProtons ) * Xann_on_N
702  ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
703  }
704 
705  //G4double Xftf = 0.0;
706  MesonProdThreshold = ProjectileMass + TargetMass + (0.14 + 0.08); // Mpi + DeltaE
707  if ( SqrtS > MesonProdThreshold ) {
708  Xftf = 36.0 * ( 1.0 - MesonProdThreshold/SqrtS );
709  }
710 
711  Xtotal = Xelastic + Xannihilation + Xftf;
712 
713  #ifdef debugFTFparams
714  G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic
715  << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl
716  << "Plab Xelastic/Xtotal, Xann/Xin " << Plab << " " << Xelastic/Xtotal << " "
717  << Xannihilation/(Xtotal - Xelastic) << G4endl;
718  #endif
719 
720  } else if ( ProjectilePDGcode == 211 ) { // Projectile is PionPlus
721 
722  G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
724  G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
725  G4double XelPiP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
726  G4double XelPiN = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
727  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
728  / NumberOfTargetNucleons;
729  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
730  / NumberOfTargetNucleons;
731  Xannihilation = 0.0;
732  Xtotal /= millibarn;
733  Xelastic /= millibarn;
734 
735  } else if ( ProjectilePDGcode == -211 ) { // Projectile is PionMinus
736 
737  G4double XtotPiP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
739  G4double XtotPiN = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
740  G4double XelPiP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
741  G4double XelPiN = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
742  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
743  / NumberOfTargetNucleons;
744  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
745  / NumberOfTargetNucleons;
746  Xannihilation = 0.0;
747  Xtotal /= millibarn;
748  Xelastic /= millibarn;
749 
750  } else if ( ProjectilePDGcode == 111 ) { // Projectile is PionZero
751 
753  G4double XtotPipP = FTFxsManager->GetTotalElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
755  G4double XtotPimP = FTFxsManager->GetTotalElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
756  G4double XelPipP = FTFxsManager->GetElasticElementCrossSection( PionPlus, KineticEnergy, 1, 0 );
757  G4double XelPimP = FTFxsManager->GetElasticElementCrossSection( PionMinus, KineticEnergy, 1, 0 );
758  G4double XtotPiP = ( XtotPipP + XtotPimP ) / 2.0;
759  G4double XtotPiN = XtotPiP;
760  G4double XelPiP = ( XelPipP + XelPimP ) / 2.0;
761  G4double XelPiN = XelPiP;
762  Xtotal = ( NumberOfTargetProtons * XtotPiP + NumberOfTargetNeutrons * XtotPiN )
763  / NumberOfTargetNucleons;
764  Xelastic = ( NumberOfTargetProtons * XelPiP + NumberOfTargetNeutrons * XelPiN )
765  / NumberOfTargetNucleons;
766  Xannihilation = 0.0;
767  Xtotal /= millibarn;
768  Xelastic /= millibarn;
769 
770  } else if ( ProjectilePDGcode == 321 ) { // Projectile is KaonPlus
771 
772  G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
774  G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
775  G4double XelKP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
776  G4double XelKN = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
777  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
778  / NumberOfTargetNucleons;
779  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
780  / NumberOfTargetNucleons;
781  Xannihilation = 0.0;
782  Xtotal /= millibarn;
783  Xelastic /= millibarn;
784 
785  } else if ( ProjectilePDGcode == -321 ) { // Projectile is KaonMinus
786 
787  G4double XtotKP = FTFxsManager->GetTotalElementCrossSection( particle, KineticEnergy, 1, 0 );
789  G4double XtotKN = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
790  G4double XelKP = FTFxsManager->GetElasticElementCrossSection( particle, KineticEnergy, 1, 0 );
791  G4double XelKN = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
792  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
793  / NumberOfTargetNucleons;
794  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
795  / NumberOfTargetNucleons;
796  Xannihilation = 0.0;
797  Xtotal /= millibarn;
798  Xelastic /= millibarn;
799 
800  } else if ( ProjectilePDGcode == 311 || ProjectilePDGcode == 130 ||
801  ProjectilePDGcode == 310 ) { // Projectile is KaonZero
802 
804  G4double XtotKpP = FTFxsManager->GetTotalElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
806  G4double XtotKmP = FTFxsManager->GetTotalElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
807  G4double XelKpP = FTFxsManager->GetElasticElementCrossSection( KaonPlus, KineticEnergy, 1, 0 );
808  G4double XelKmP = FTFxsManager->GetElasticElementCrossSection( KaonMinus, KineticEnergy, 1, 0 );
809  G4double XtotKP = ( XtotKpP + XtotKmP ) / 2.0;
810  G4double XtotKN = XtotKP;
811  G4double XelKP = ( XelKpP + XelKmP ) / 2.0;
812  G4double XelKN = XelKP;
813  Xtotal = ( NumberOfTargetProtons * XtotKP + NumberOfTargetNeutrons * XtotKN )
814  / NumberOfTargetNucleons;
815  Xelastic = ( NumberOfTargetProtons * XelKP + NumberOfTargetNeutrons * XelKN )
816  / NumberOfTargetNucleons;
817  Xannihilation = 0.0;
818  Xtotal /= millibarn;
819  Xelastic /= millibarn;
820 
821  } else { // Projectile is undefined, Nucleon assumed
822 
824  G4double XtotPP = FTFxsManager->GetTotalElementCrossSection( Proton, KineticEnergy, 1, 0 );
826  G4double XtotPN = FTFxsManager->GetTotalElementCrossSection( Neutron, KineticEnergy, 1, 0 );
827  G4double XelPP = FTFxsManager->GetElasticElementCrossSection( Proton, KineticEnergy, 1, 0 );
828  G4double XelPN = FTFxsManager->GetElasticElementCrossSection( Neutron, KineticEnergy, 1, 0 );
829  Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN )
830  / NumberOfTargetNucleons;
831  Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN )
832  / NumberOfTargetNucleons;
833  Xannihilation = 0.0;
834  Xtotal /= millibarn;
835  Xelastic /= millibarn;
836 
837  };
838 
839  // Geometrical parameters
840  SetTotalCrossSection( Xtotal );
841  SetElastisCrossSection( Xelastic );
842  SetInelasticCrossSection( Xtotal - Xelastic );
843 
844  //G4cout << "Plab Xtotal, Xelastic Xinel Xftf " << Plab << " " << Xtotal << " " << Xelastic
845  // << " " << Xtotal - Xelastic << " " << Xtotal - Xelastic - Xannihilation << G4endl;
846  //if (Xtotal - Xelastic != 0.0 ) {
847  // G4cout << "Plab Xelastic/Xtotal, Xann/Xin " << Plab << " " << Xelastic/Xtotal
848  // << " " << Xannihilation / (Xtotal - Xelastic) << G4endl;
849  //} else {
850  // G4cout << "Plab Xelastic/Xtotal, Xann " << Plab << " " << Xelastic/Xtotal
851  // << " " << Xannihilation << G4endl;
852  //}
853  //G4int Uzhi; G4cin >> Uzhi;
854 
855  // Interactions with elastic and inelastic collisions
856  SetProbabilityOfElasticScatt( Xtotal, Xelastic );
857 
858 //G4cout<<"in PARAMS ProbabilityOfElasticScatt "<<GetProbabilityOfElasticScatt()<<G4endl; // Uzhi
859 //SetProbabilityOfElasticScatt(0. * GetProbabilityOfElasticScatt());
860 //G4cout<<"in PARAMS ProbabilityOfElasticScatt "<<GetProbabilityOfElasticScatt()<<G4endl;
861 //{G4int Uzhi; G4cin>>Uzhi;}
862 
863  SetRadiusOfHNinteractions2( Xtotal/pi/10.0 );
864  if ( Xtotal - Xelastic == 0.0 ) {
866  } else {
867  SetProbabilityOfAnnihilation( Xannihilation / (Xtotal - Xelastic) );
868  }
869 
870  // No elastic scattering
871  //SetProbabilityOfElasticScatt( Xtotal, 0.0 );
872  //SetRadiusOfHNinteractions2( (Xtotal - Xelastic)/pi/10.0 );
873  //SetProbabilityOfAnnihilation( 1.0 );
874  //SetProbabilityOfAnnihilation( 0.0 );
875 
876  SetSlope( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 ); // Slope parameter of elastic scattering
877  // (GeV/c)^(-2))
878  //G4cout << "Slope " << GetSlope() << G4endl;
879  SetGamma0( GetSlope()*Xtotal/10.0/2.0/pi );
880 
881  // Parameters of elastic scattering
882  // Gaussian parametrization of elastic scattering amplitude assumed
883  SetAvaragePt2ofElasticScattering( 1.0/( Xtotal*Xtotal/16.0/pi/Xelastic/0.3894 )*GeV*GeV );
884  //G4cout << "AvaragePt2ofElasticScattering " << GetAvaragePt2ofElasticScattering() << G4endl;
885 
886  // Parameters of excitations
887 
888  G4double Xinel = Xtotal - Xelastic;
889  //G4cout << "Param ProjectilePDGcode " << ProjectilePDGcode << G4endl;
890 
891  if ( ProjectilePDGcode > 1000 ) { // Projectile is baryon
892  // Proc# A1 B1 A2 B2 A3 Atop Ymin
893  /* original hadr-string-diff-V10-03-07 (similar to 10.3.x)
894  SetParams( 0, 13.71, 1.75, -214.5, 4.25, 0.0, 0.5 , 1.1 ); // Qexchange without Exc.
895  SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
896  */
897  // ---> JVY - update
898  //
905  fParCollBaryonProj.GetProc0Ymin() ); // Qexchange without Exc.
912  fParCollBaryonProj.GetProc1Ymin() ); // Qexchange with Exc.
913  // ---> end update
914  if( Xinel > 0.) {
915  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Projectile diffraction
916  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);// Target diffraction
917  /* original hadr-string-diff-V10-03-07
918  SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 );// Qexchange with Exc. Additional multiply
919  */
920  // JVY update
927  fParCollBaryonProj.GetProc4Ymin() ); // Qexchange with Exc. Additional multiply
928  // ---> end update
929  } else {
930  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
931  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
932  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
933  }
934 
935 //G4cout<<"fParCollBaryonProj.IsProjDiffDissociation() "<<fParCollBaryonProj.IsProjDiffDissociation()<<G4endl;
936 //G4cout<<"fParCollBaryonProj.IsTgtDiffDissociation() "<<fParCollBaryonProj.IsTgtDiffDissociation() <<G4endl;
937 //{G4int Uzhi; G4cin>>Uzhi;}
938 
939 // if ( AbsProjectileBaryonNumber > 1 || NumberOfTargetNucleons > 1 ) {
940  if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { // Uzhi Dec. 2017 12 -> 10
941  // It is not decided what to do with diffraction dissociation in Had-Nucl and Nucl-Nucl interactions
942 //
944  SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
946  SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction
947 //
948  }
949 
950  /* original hadr-string-diff-V10-03-07
951  SetDeltaProbAtQuarkExchange( 0.0 );
952  if ( NumberOfTargetNucleons > 26 ) {
953  SetProbOfSameQuarkExchange( 1.0);
954  } else {
955  SetProbOfSameQuarkExchange( 0.0 );
956  }
957  SetProjMinDiffMass( 1.16 ); // GeV
958  SetProjMinNonDiffMass( 1.16 ); // GeV
959  SetTarMinDiffMass( 1.16 ); // GeV
960  SetTarMinNonDiffMass( 1.16 ); // GeV
961  SetAveragePt2( 0.15 ); // GeV^2
962  SetProbLogDistrPrD( 0.3 ); // Before it was: 0.5
963  SetProbLogDistr(0.3 ); // Before it was: 0.5
964  */
965  // ---> JVY - update
966 
968  if ( NumberOfTargetNucleons > 26 ) {
970  } else {
972  }
980  // ---> end update
981 
982  } else if( ProjectilePDGcode < -1000 ) { // Projectile is anti_baryon
983 
984  // Proc# A1 B1 A2 B2 A3 Atop Ymin
985  SetParams( 0, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange without Exc.
986  SetParams( 1, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 ); // Qexchange with Exc.
987  if( Xinel > 0.) {
988  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
989  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction
990  SetParams( 4, 1.0, 0.0 , 0.0, 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply
991  } else {
992  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
993  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
994  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
995  }
996 
997  if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { // Uzhi Dec. 2017
998  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
999  SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction Uzhi Dec. 2017
1000  }
1001 
1004  SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV
1005  SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
1006  SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
1007  SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
1008  SetAveragePt2( 0.3 ); // GeV^2
1009  SetProbLogDistrPrD( 0.55 );
1010  SetProbLogDistr( 0.55 );
1011 
1012  } else if ( ProjectileabsPDGcode == 211 || ProjectilePDGcode == 111 ) { // Projectile is Pion
1013 
1014  // Proc# A1 B1 A2 B2 A3 Atop Ymin
1015  SetParams( 0, 150.0, 1.8 , -247.3, 2.3, 0., 1. , 2.3 ); // Uzhi July 2017
1016  SetParams( 1, 5.77, 0.6 , -5.77, 0.8, 0., 0. , 0.0 );
1017  SetParams( 2, 2.27, 0.5 , -98052.0, 4.0, 0., 0. , 3.0 );
1018  SetParams( 3, 7.0, 0.9, -85.28, 1.9, 0.08, 0. , 2.2 );
1019  SetParams( 4, 1.0, 0.0 , -11.02, 1.0, 0.0, 0. , 2.4 ); // Qexchange with Exc. Additional multiply
1020 
1021  if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { // Uzhi Dec. 2017
1022  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
1023  SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction Uzhi Dec. 2017-
1024  }
1025 
1026  SetDeltaProbAtQuarkExchange( 0.56 ); // (0.35)
1027  SetProjMinDiffMass( 1.0 ); // (0.5) // GeV Uzhi July 2017
1028  SetProjMinNonDiffMass( 1.0 ); // (0.5) // GeV Uzhi July 2017
1029  SetTarMinDiffMass( 1.16 ); // GeV
1030  SetTarMinNonDiffMass( 1.16 ); // GeV
1031  SetAveragePt2( 0.3 ); // GeV^2 Uzhi July 2017
1032  SetProbLogDistrPrD( 0.55 ); // Uzhi July 2017
1033  SetProbLogDistr( 0.55 ); // Uzhi July 2017
1034 
1035  } else if ( ProjectileabsPDGcode == 321 || ProjectileabsPDGcode == 311 ||
1036  ProjectilePDGcode == 130 || ProjectilePDGcode == 310 ) { // Projectile is Kaon
1037 
1038  // Proc# A1 B1 A2 B2 A3 Atop Ymin
1039  SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Qexchange without Exc.
1040  SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 ); // Qexchange with Exc.
1041  SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 ); // Projectile diffraction
1042  SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 ); // Target diffraction
1043  SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 ); // Qexchange with Exc. Additional multiply
1044 
1045  if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { // Uzhi Dec. 2017
1046  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
1047  SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction // Uzhi Dec. 2017
1048  }
1049 
1051  SetProjMinDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
1052  SetProjMinNonDiffMass( 0.7 ); // (1.4) // (0.7) // GeV
1053  SetTarMinDiffMass( 1.16 ); // GeV
1054  SetTarMinNonDiffMass( 1.16 ); // GeV
1055  SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Dec. 2017
1056  SetProbLogDistrPrD( 0.55 ); // Uzhi Dec. 2017
1057  SetProbLogDistr( 0.55 ); // Uzhi Dec. 2017
1058 
1059  } else { // Projectile is undefined, Nucleon assumed
1060 
1061  // Proc# A1 B1 A2 B2 A3 Atop Ymin
1062  SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 ); // Qexchange without Exc. // Uzhi Dec. 2017
1063  SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc.
1064  if( Xinel > 0.) {
1065  SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Projectile diffraction
1066  SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93); // Target diffraction
1067  SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 ); // Qexchange with Exc. Additional multiply
1068  } else {
1069  SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
1070  SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
1071  SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
1072  }
1073  if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) { // Uzhi Dec. 2017 12 -> 10
1074  SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Projectile diffraction
1075  SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 ); // Target diffraction // Uzhi Dec. 2017
1076  }
1077  SetDeltaProbAtQuarkExchange( 0.0 ); // 7 June 2011
1079  SetProjMinDiffMass( ProjectileMass + 0.22 ); // GeV
1080  SetProjMinNonDiffMass( ProjectileMass + 0.22 ); // GeV
1081  SetTarMinDiffMass( TargetMass + 0.22 ); // GeV
1082  SetTarMinNonDiffMass( TargetMass + 0.22 ); // GeV
1083  SetAveragePt2( 0.3 ); // GeV^2 // Uzhi Dec. 2017
1084  SetProbLogDistrPrD( 0.55 ); // Uzhi Dec. 2017
1085  SetProbLogDistr( 0.55 ); // Uzhi Dec. 2017
1086 
1087  }
1088 
1089  // Set parameters of a string kink
1090  // SetPt2Kink( 6.0*GeV*GeV );
1091  SetPt2Kink( 0.0*GeV*GeV ); // Uzhi Oct 2014 to switch off kinky strings
1092  G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 ); // SU(3) symmetry
1093  //G4double Puubar( 0.41 ), Pddbar( 0.41 ), Pssbar( 0.18 ); // Broken SU(3) symmetry
1094  SetQuarkProbabilitiesAtGluonSplitUp( Puubar, Pddbar, Pssbar );
1095 
1096  // Set parameters of nuclear destruction
1097  if ( ProjectileabsPDGcode < 1000 ) { // Meson projectile
1098  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
1099 // SetCofNuclearDestruction( 1.0* // AR-18May2016
1100  SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015 // Uzhi Dec. 2017
1101  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
1103  SetDofNuclearDestruction( 0.3 );
1104  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
1105  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
1106  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
1108  } else if ( ProjectilePDGcode < -1000 ) { // for anti-baryon projectile
1109  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
1110 // SetCofNuclearDestruction( 1.0* // AR-18May2016
1111  SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015 // Uzhi Dec. 2017
1112  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
1114  SetDofNuclearDestruction( 0.3 );
1115  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
1116  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
1117  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
1119  if ( Plab < 2.0 ) { // 2 GeV/c
1120  // For slow anti-baryon we have to garanty putting on mass-shell
1121  SetCofNuclearDestruction( 0.0 );
1122  SetR2ofNuclearDestruction( 1.5*fermi*fermi );
1123  SetDofNuclearDestruction( 0.01 );
1124  SetPt2ofNuclearDestruction( 0.035*GeV*GeV );
1125  SetMaxPt2ofNuclearDestruction( 0.04*GeV*GeV );
1126  //SetExcitationEnergyPerWoundedNucleon( 0.0 ); // ?????
1127  }
1128  } else { // Projectile baryon assumed
1129 
1130  // NOTE: FIXME !!! (JVY) Will decide later how/if to make this one configurable...
1131  //
1132  SetMaxNumberOfCollisions( Plab, 2.0 ); // 3.0 )
1133 
1134  /* original hadr-string-diff-V10-03-07
1135  //AR-18May2016 SetCofNuclearDestructionPr( 0.00481*G4double(AbsProjectileBaryonNumber)* // Uzhi 3.05.2015
1136  SetCofNuclearDestructionPr( 1.0* // AR-18May2016
1137  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
1138  //AR-18May2016 SetCofNuclearDestruction( 0.00481*G4double(NumberOfTargetNucleons)* // Uzhi 3.05.2015
1139  SetCofNuclearDestruction( 1.0* // AR-18May2016
1140  G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 + G4Exp( 4.0*(Ylab - 2.1) ) ) );
1141  SetR2ofNuclearDestruction( 1.5*fermi*fermi );
1142  SetDofNuclearDestruction( 0.3 );
1143  SetPt2ofNuclearDestruction( ( 0.035 + 0.04*G4Exp( 4.0*(Ylab - 2.5) )/
1144  ( 1.0 + G4Exp( 4.0*(Ylab - 2.5) ) ) )*GeV*GeV );
1145  SetMaxPt2ofNuclearDestruction( 1.0*GeV*GeV );
1146  SetExcitationEnergyPerWoundedNucleon( 40.0*MeV );
1147  */
1148 
1149  // ---> JVY - update
1150  //
1151  // projectile destruction - does NOT matter for particle projectile, only for a nucleus projectile
1152  //
1153  double coeff = 0.;
1155  //
1156  // NOTE (JVY): Set this switch to false/true on line 136
1157  //
1159  {
1160  coeff *= G4double(AbsProjectileBaryonNumber);
1161  }
1163  coeff *= exfactor;
1164  coeff /= ( 1.+ exfactor );
1165  SetCofNuclearDestructionPr( coeff );
1166  //
1167  // target desctruction
1169  //
1170  // NOTE (JVY): Set this switch to false/true on line 138
1171  //
1173  {
1174  coeff *= G4double(NumberOfTargetNucleons);
1175  }
1177  coeff *= exfactor;
1178  coeff /= ( 1.+ exfactor );
1179  SetCofNuclearDestruction( coeff );
1180  //
1183  //
1186  coeff *= exfactor;
1187  coeff /= ( 1. + exfactor );
1189  //
1192  // end of update
1193 
1194  }
1195 
1196  //SetCofNuclearDestruction( 0.47*G4Exp( 2.0*(Ylab - 2.5) )/( 1.0 + G4Exp( 2.0*(Ylab - 2.5) ) ) );
1197  //SetPt2ofNuclearDestruction( ( 0.035 + 0.1*G4Exp( 4.0*(Ylab - 3.0) )/( 1.0 + G4Exp( 4.0*(Ylab - 3.0) ) ) )*GeV*GeV );
1198 
1199  //SetMagQuarkExchange( 120.0 ); // 210.0 PipP
1200  //SetSlopeQuarkExchange( 2.0 );
1201  //SetDeltaProbAtQuarkExchange( 0.6 );
1202  //SetProjMinDiffMass( 0.7 ); // GeV 1.1
1203  //SetProjMinNonDiffMass( 0.7 ); // GeV
1204  //SetProbabilityOfProjDiff( 0.0); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
1205  //SetTarMinDiffMass( 1.1 ); // GeV
1206  //SetTarMinNonDiffMass( 1.1 ); // GeV
1207  //SetProbabilityOfTarDiff( 0.0 ); // 0.85*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.5 ) ); // 40/32 X-dif/X-inel
1208 
1209  //SetAveragePt2( 0.0 ); // GeV^2 0.3
1210  //------------------------------------
1211  //SetProbabilityOfElasticScatt( 1.0, 1.0); //(Xtotal, Xelastic);
1212  //SetProbabilityOfProjDiff( 1.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 0->1
1213  //SetProbabilityOfTarDiff( 4.0*0.62*G4Pow::GetInstance()->powA( s/GeV/GeV, -0.51 ) ); // 2->4
1214  //SetAveragePt2( 0.3 ); // (0.15)
1215  //SetAvaragePt2ofElasticScattering( 0.0 );
1216 
1217  //SetMaxNumberOfCollisions( Plab, 6.0 ); //(4.0*(Plab + 0.01), Plab); // 6.0 );
1218  //SetAveragePt2( 0.15 );
1219  //SetCofNuclearDestruction(-1.);//( 0.75 ); // (0.25)
1220  //SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV)
1221  //SetDofNuclearDestruction(0.);//( 0.2 ); //0.4 // 0.3 0.5
1222 
1223 /* Uzhi Nov. 20
1224 //SetAveragePt2(0.1);
1225 SetCofNuclearDestructionPr(0.);
1226 SetCofNuclearDestruction(0.);//( 0.5 ); // (0.25)
1227 //SetExcitationEnergyPerWoundedNucleon(0.);//( 30.0*MeV ); // (75.0*MeV)
1228 SetDofNuclearDestruction(0.);//( 0.2 ); //0.4 // 0.3 0.5
1229 SetPt2ofNuclearDestruction(0.);//(2.*0.075*GeV*GeV); //( 0.3*GeV*GeV ); // (0.168*GeV*GeV)
1230 */
1231 
1232 //SetMaxNumberOfCollisions( Plab, 4.0 ); // 3.0 )
1233 
1234 //SetRadiusOfHNinteractions2( Xtotal/pi/10.0 /2.);
1235 /*
1236 G4cout << "Pt2 " << GetAveragePt2()<<" "<<GetAveragePt2()/GeV/GeV<<G4endl;
1237 G4cout << "Cnd " << GetCofNuclearDestruction() << G4endl;
1238 G4cout << "Dnd " << GetDofNuclearDestruction() << G4endl;
1239 G4cout << "Pt2 " << GetPt2ofNuclearDestruction()/GeV/GeV << G4endl;
1240 G4int Uzhi; G4cin >> Uzhi;
1241 */
1242 
1243 }
1244 
1245 //============================================================================
1246 
1248  G4double Prob( 0.0 );
1249  if ( y < ProcParams[ProcN][6] ) {
1250  Prob = ProcParams[ProcN][5];
1251  if(Prob < 0.) Prob=0.;
1252  return Prob;
1253  }
1254  Prob = ProcParams[ProcN][0] * G4Exp( -ProcParams[ProcN][1]*y ) +
1255  ProcParams[ProcN][2] * G4Exp( -ProcParams[ProcN][3]*y ) +
1256  ProcParams[ProcN][4];
1257  if(Prob < 0.) Prob=0.;
1258  return Prob;
1259 }
G4double GetProcProb(const G4int ProcN, const G4double y)
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
void SetMaxNumberOfCollisions(const G4double aValue, const G4double bValue)
void SetSlope(const G4double Slope)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
double GetProc0A2() const
void SetCofNuclearDestructionPr(const G4double aValue)
G4double R2ofNuclearDestruction
bool IsProjDiffDissociation() const
double GetProc1B1() const
void SetElastisCrossSection(const G4double Xelastic)
double GetProc1Atop() const
void SetPt2Kink(const G4double aValue)
G4double ProbOfInelInteraction
double GetProbOfSameQuarkExchange() const
static constexpr double MeV
Definition: G4SIunits.hh:214
void SetProjMinNonDiffMass(const G4double aValue)
double GetProc0B2() const
double GetProc0A1() const
bool IsTgtDiffDissociation() const
G4double DofNuclearDestruction
#define G4endl
Definition: G4ios.hh:61
Float_t y
Definition: compare.C:6
double GetPt2NuclearDestructP4() const
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double N)
void SetCofNuclearDestruction(const G4double aValue)
double GetNuclearProjDestructP1() const
double GetProc4A1() const
void SetProbabilityOfElasticScatt(const G4double Xtotal, const G4double Xelastic)
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
double GetPt2NuclearDestructP3() const
G4double ProbLogDistrPrD
double GetProc1A1() const
G4double GetPDGCharge() const
static G4ThreadLocal G4ChipsComponentXS * chipsComponentXSinstance
G4bool SetDefault(const std::string name, const G4bool value)
G4double AvaragePt2ofElasticScattering
double GetProc4A3() const
G4double MaxNumberOfCollisions
double GetNuclearTgtDestructP1() const
void InitForInteraction(const G4ParticleDefinition *, G4int theA, G4int theZ, G4double s)
static G4Proton * Proton()
Definition: G4Proton.cc:93
double GetNuclearTgtDestructP2() const
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:113
double GetProbLogDistrPrD() const
#define G4ThreadLocal
Definition: tls.hh:69
G4double GetPDGMass() const
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
double GetPt2NuclearDestructP1() const
G4double G4Log(G4double x)
Definition: G4Log.hh:230
void SetTarMinDiffMass(const G4double aValue)
double S(double temp)
static G4ThreadLocal bool chipsComponentXSisInitialized
G4HadronicDeveloperParameters & HDP
G4double ProbabilityOfAnnihilation
void SetR2ofNuclearDestruction(const G4double aValue)
void SetProbLogDistrPrD(const G4double aValue)
double GetProc1Ymin() const
static constexpr double fermi
Definition: SystemOfUnits.h:83
double GetProc0A3() const
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
static constexpr double fermi
Definition: G4SIunits.hh:103
void SetAvaragePt2ofElasticScattering(const G4double aPt2)
static constexpr double millibarn
Definition: G4SIunits.hh:106
static G4Pow * GetInstance()
Definition: G4Pow.cc:57
void SetProbOfSameQuarkExchange(const G4double aValue)
double GetProc4Ymin() const
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:242
double GetProc4Atop() const
double GetProc0Atop() const
double GetProc4A2() const
bool IsNuclearProjDestructP1_NBRNDEP() const
void SetTotalCrossSection(const G4double Xtotal)
double GetProjMinNonDiffMass() const
static constexpr double MeV
double GetProbLogDistr() const
double GetTgtMinNonDiffMass() const
void SetRadiusOfHNinteractions2(const G4double Radius2)
G4double CofNuclearDestruction
double GetTgtMinDiffMass() const
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double N)
double GetProc4B1() const
G4FTFSettingDefaultHDP FTFDefaultsHDP
G4double ExcitationEnergyPerWoundedNucleon
double GetProc0Ymin() const
double GetProc1A2() const
double GetDeltaProbAtQuarkExchange() const
G4double TarMinNonDiffMass
G4double ProcParams[5][7]
G4double MaxPt2ofNuclearDestruction
void SetProbabilityOfAnnihilation(const G4double aValue)
void SetProbLogDistr(const G4double aValue)
G4double ProbOfSameQuarkExchange
double GetNuclearProjDestructP3() const
G4double ProbabilityOfElasticScatt
G4double ProjMinNonDiffMass
G4double RadiusOfHNinteractions2
bool IsNuclearTgtDestructP1_ADEP() const
double GetProc1A3() const
int G4int
Definition: G4Types.hh:78
double GetDofNuclearDestruct() const
void SetMaxPt2ofNuclearDestruction(const G4double aValue)
void SetQuarkProbabilitiesAtGluonSplitUp(const G4double Puubar, const G4double Pddbar, const G4double Pssbar)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
void SetExcitationEnergyPerWoundedNucleon(const G4double aValue)
G4double Pt2ofNuclearDestruction
static G4HadronicDeveloperParameters & GetInstance()
double GetProc1B2() const
double GetR2ofNuclearDestruct() const
G4GLOB_DLL std::ostream G4cout
G4double ProjMinDiffMass
G4double CofNuclearDestructionPr
void SetProjMinDiffMass(const G4double aValue)
void SetDofNuclearDestruction(const G4double aValue)
double GetNuclearProjDestructP2() const
G4ChipsComponentXS * FTFxsManager
void SetAveragePt2(const G4double aValue)
double GetMaxPt2ofNuclearDestruct() const
void SetPt2ofNuclearDestruction(const G4double aValue)
T sqr(const T &x)
Definition: templates.hh:145
static constexpr double pi
Definition: G4SIunits.hh:75
double GetNuclearTgtDestructP3() const
G4double DeltaProbAtQuarkExchange
double GetProc0B1() const
double GetExciEnergyPerWoundedNucleon() const
double GetPt2NuclearDestructP2() const
void SetTarMinNonDiffMass(const G4double aValue)
G4bool DeveloperGet(const std::string name, G4bool &value)
void SetInelasticCrossSection(const G4double Xinelastic)
G4FTFParamCollBaryonProj fParCollBaryonProj
G4double FTFXannihilation
void SetGamma0(const G4double Gamma0)
static constexpr double GeV
void SetDeltaProbAtQuarkExchange(const G4double aValue)
static constexpr double GeV
Definition: G4SIunits.hh:217
double GetProjMinDiffMass() const
double GetProc4B2() const
double GetAveragePt2() const
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)