74 G4double Puubar( 1.0/3.0 ), Pddbar( 1.0/3.0 ), Pssbar( 1.0/3.0 );
89 G4double ProjectileMass2 = ProjectileMass * ProjectileMass;
91 G4int ProjectileBaryonNumber( 0 ), AbsProjectileBaryonNumber( 0 ), AbsProjectileCharge( 0 );
92 G4bool ProjectileIsNucleus =
false;
95 ProjectileIsNucleus =
true;
97 AbsProjectileBaryonNumber =
std::abs( ProjectileBaryonNumber );
99 if ( ProjectileBaryonNumber > 1 ) {
100 ProjectilePDGcode = 2212; ProjectileabsPDGcode = 2212;
102 ProjectilePDGcode = -2212; ProjectileabsPDGcode = 2212;
105 ProjectileMass2 =
sqr( ProjectileMass );
109 G4double TargetMass2 = TargetMass * TargetMass;
112 G4double Elab = std::sqrt( Plab*Plab + ProjectileMass2 );
113 G4double KineticEnergy = Elab - ProjectileMass;
115 G4double S = ProjectileMass2 + TargetMass2 + 2.0*TargetMass*Elab;
117 #ifdef debugFTFparams
118 G4cout <<
"--------- FTF Parameters --------------" <<
G4endl <<
"Proj Plab "
119 << ProjectilePDGcode <<
" " << Plab <<
G4endl <<
"Mass KinE " << ProjectileMass
120 <<
" " << KineticEnergy <<
G4endl <<
" A Z " << theA <<
" " << theZ <<
G4endl;
123 G4double Ylab, Xtotal( 0.0 ), Xelastic( 0.0 ), Xannihilation( 0.0 );
124 G4int NumberOfTargetNucleons;
126 Ylab = 0.5 *
G4Log( (Elab + Plab)/(Elab - Plab) );
131 #ifdef debugFTFparams
135 TargetMass /=
GeV; TargetMass2 /= (
GeV*
GeV);
136 ProjectileMass /=
GeV; ProjectileMass2 /= (
GeV*
GeV);
141 G4int NumberOfTargetProtons = theZ;
142 G4int NumberOfTargetNeutrons = theA - theZ;
143 NumberOfTargetNucleons = NumberOfTargetProtons + NumberOfTargetNeutrons;
146 if ( AbsProjectileBaryonNumber <= 1 ) {
157 Xtotal = ( NumberOfTargetProtons * xTtP + NumberOfTargetNeutrons * xTtN ) / NumberOfTargetNucleons;
158 Xelastic = ( NumberOfTargetProtons * xElP + NumberOfTargetNeutrons * xElN ) / NumberOfTargetNucleons;
164 #ifdef debugFTFparams
165 G4cout<<
"Estimated cross sections (total and elastic) of h+N interactions "<<Xtotal<<
" "<<Xelastic<<
" (mb)"<<
G4endl;
170 if ( ProjectileIsNucleus && ProjectileBaryonNumber > 1 ) {
172 #ifdef debugFTFparams
173 G4cout<<
"Projectile is a nucleus: A and Z - "<<ProjectileBaryonNumber<<
" "<<ProjectileCharge<<
G4endl;
186 #ifdef debugFTFparams
192 AbsProjectileCharge * NumberOfTargetProtons * XtotPP +
193 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
194 NumberOfTargetNeutrons * XtotPP
196 ( AbsProjectileCharge * NumberOfTargetNeutrons +
197 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
198 NumberOfTargetProtons ) * XtotPN
199 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
201 AbsProjectileCharge * NumberOfTargetProtons * XelPP +
202 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
203 NumberOfTargetNeutrons * XelPP
205 ( AbsProjectileCharge * NumberOfTargetNeutrons +
206 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
207 NumberOfTargetProtons ) * XelPN
208 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
217 if ( ProjectilePDGcode >= -4112 && ProjectilePDGcode <= -1114 ) {
220 #ifdef debugFTFparams
221 G4cout<<
"Projectile is a anti-baryon or anti-nucleus - "<<ProjectileBaryonNumber<<
" "<<ProjectileCharge<<
G4endl;
222 G4cout<<
"(Only non-strange and strange baryons are considered)"<<
G4endl;
225 G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
226 G4double MesonProdThreshold = ProjectileMass + TargetMass +
227 ( 2.0 * 0.14 + 0.016 );
229 if ( PlabPerParticle < 40.0*
MeV ) {
238 G4double Xasmpt = 36.04 + 0.304*LogS*LogS;
239 LogS =
G4Log( SqrtS / 20.74 );
240 G4double Basmpt = 11.92 + 0.3036*LogS*LogS;
241 G4double R0 = std::sqrt( 0.40874044*Xasmpt - Basmpt );
243 G4double FlowF = SqrtS / std::sqrt( ECMSsqr*ECMSsqr + ProjectileMass2*ProjectileMass2 +
244 TargetMass2*TargetMass2 - 2.0*ECMSsqr*ProjectileMass2
245 - 2.0*ECMSsqr*TargetMass2
246 - 2.0*ProjectileMass2*TargetMass2 );
248 Xtotal = Xasmpt * ( 1.0 + 13.55*FlowF/R0/R0/R0*
249 (1.0 - 4.47/SqrtS + 12.38/ECMSsqr - 12.43/SqrtS/ECMSsqr) );
251 Xasmpt = 4.4 + 0.101*LogS*LogS;
252 Xelastic = Xasmpt * ( 1.0 + 59.27*FlowF/R0/R0/R0*
253 (1.0 - 6.95/SqrtS + 23.54/ECMSsqr - 25.34/SqrtS/ECMSsqr ) );
257 if ( SqrtS < MesonProdThreshold ) {
265 X_c = 2.0*FlowF*
sqr( ProjectileMass + TargetMass )/ECMSsqr;
270 G4double Xann_on_P( 0.0), Xann_on_N( 0.0 );
272 if ( ProjectilePDGcode == -2212 ) {
273 Xann_on_P = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
274 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
275 }
else if ( ProjectilePDGcode == -2112 ) {
276 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*4.0;
277 Xann_on_N = X_a + X_b*5.0 + X_c*5.0 + X_d*6.0;
278 }
else if ( ProjectilePDGcode == -3122 ) {
279 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
280 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
281 }
else if ( ProjectilePDGcode == -3112 ) {
282 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
283 Xann_on_N = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
284 }
else if ( ProjectilePDGcode == -3212 ) {
285 Xann_on_P = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
286 Xann_on_N = X_a + X_b*3.0 + X_c*3.0 + X_d*2.0;
287 }
else if ( ProjectilePDGcode == -3222 ) {
288 Xann_on_P = X_a + X_b*4.0 + X_c*4.0 + X_d*2.0;
289 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
290 }
else if ( ProjectilePDGcode == -3312 ) {
291 Xann_on_P = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
292 Xann_on_N = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
293 }
else if ( ProjectilePDGcode == -3322 ) {
294 Xann_on_P = X_a + X_b*2.0 + X_c*2.0 + X_d*0.0;
295 Xann_on_N = X_a + X_b*1.0 + X_c*1.0 + X_d*0.0;
296 }
else if ( ProjectilePDGcode == -3334 ) {
297 Xann_on_P = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
298 Xann_on_N = X_a + X_b*0.0 + X_c*0.0 + X_d*0.0;
300 G4cout <<
"Unknown anti-baryon for FTF annihilation" <<
G4endl;
305 if ( ! ProjectileIsNucleus ) {
306 Xannihilation = ( NumberOfTargetProtons * Xann_on_P + NumberOfTargetNeutrons * Xann_on_N )
307 / NumberOfTargetNucleons;
310 ( AbsProjectileCharge * NumberOfTargetProtons +
311 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
312 NumberOfTargetNeutrons ) * Xann_on_P
314 ( AbsProjectileCharge * NumberOfTargetNeutrons +
315 ( AbsProjectileBaryonNumber - AbsProjectileCharge ) *
316 NumberOfTargetProtons ) * Xann_on_N
317 ) / ( AbsProjectileBaryonNumber * NumberOfTargetNucleons );
321 MesonProdThreshold = ProjectileMass + TargetMass + (0.14 + 0.08);
322 if ( SqrtS > MesonProdThreshold ) {
323 Xftf = 36.0 * ( 1.0 - MesonProdThreshold/SqrtS );
326 Xtotal = Xelastic + Xannihilation + Xftf;
328 #ifdef debugFTFparams
329 G4cout <<
"Plab Xtotal, Xelastic Xinel Xftf " << Plab <<
" " << Xtotal <<
" " << Xelastic
330 <<
" " << Xtotal - Xelastic <<
" " << Xtotal - Xelastic - Xannihilation <<
" (mb)"<< G4endl
331 <<
"Plab Xelastic/Xtotal, Xann/Xin " << Plab <<
" " << Xelastic/Xtotal <<
" "
332 << Xannihilation/(Xtotal - Xelastic) << G4endl;
337 if ( Xtotal == 0.0 ) {
348 Xtotal = ( NumberOfTargetProtons * XtotPP + NumberOfTargetNeutrons * XtotPN )
349 / NumberOfTargetNucleons;
350 Xelastic = ( NumberOfTargetProtons * XelPP + NumberOfTargetNeutrons * XelPN )
351 / NumberOfTargetNucleons;
367 if ( ( Xtotal - Xelastic ) == 0.0 ) {
374 SetSlope( Xtotal*Xtotal/16.0/
pi/Xelastic/0.3894 );
387 #ifdef debugFTFparams
390 G4cout<<
"Parameters of excitation for projectile "<<ProjectilePDGcode<<
G4endl;
393 if ( (ProjectilePDGcode == 2212) || (ProjectilePDGcode == 2112) ) {
417 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 );
418 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 );
425 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
426 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
427 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
430 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) {
437 SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
439 SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
444 if ( NumberOfTargetNucleons > 26 ) {
460 }
else if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2112 ) {
463 SetParams( 0, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 );
464 SetParams( 1, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 1000.0 );
466 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 );
467 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93 );
468 SetParams( 4, 1.0, 0.0 , 0.0, 0.0 , 0.0, 0.0 , 0.93 );
470 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 );
471 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 );
472 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0 );
475 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) {
482 SetParams( 2, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
484 SetParams( 3, 0.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
497 }
else if ( ProjectileabsPDGcode == 211 || ProjectilePDGcode == 111 ) {
531 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) {
533 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
535 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
562 }
else if ( ProjectileabsPDGcode == 321 || ProjectileabsPDGcode == 311 ||
563 ProjectilePDGcode == 130 || ProjectilePDGcode == 310 ) {
566 SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
567 SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 );
568 SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 );
569 SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 );
570 SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 );
571 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) {
572 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
573 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
587 if ( ProjectileabsPDGcode > 1000 ) {
589 SetParams( 0, 13.71, 1.75, -30.69, 3.0 , 0.0, 1.0 , 0.93 );
590 SetParams( 1, 25.0, 1.0, -50.34, 1.5 , 0.0, 0.0 , 1.4 );
592 SetParams( 2, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);
593 SetParams( 3, 6.0/Xinel, 0.0 ,-6.0/Xinel*16.28, 3.0 , 0.0, 0.0 , 0.93);
594 SetParams( 4, 1.0, 0.0 , -2.01 , 0.5 , 0.0, 0.0 , 1.4 );
596 SetParams( 2, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
597 SetParams( 3, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
598 SetParams( 4, 0.0, 0.0 ,0.0, 0.0 , 0.0, 0.0 , 0.0);
603 SetParams( 0, 60.0 , 2.5 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
604 SetParams( 1, 6.0 , 1.0 , -24.33 , 2.0 , 0.0, 0.0 , 1.40 );
605 SetParams( 2, 2.76, 1.2 , -22.5 , 2.7 ,0.04, 0.0 , 1.40 );
606 SetParams( 3, 1.09, 0.5 , -8.88 , 2. ,0.05, 0.0 , 1.40 );
607 SetParams( 4, 1.0, 0.0 , 0.0 , 0.0 , 0.0, 0.0 , 0.93 );
610 if ( AbsProjectileBaryonNumber > 10 || NumberOfTargetNucleons > 10 ) {
611 SetParams( 2, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
612 SetParams( 3, 0.0 , 0.0 , 0.0 , 0.0 , 0.0, 0.0 , -100.0 );
631 #ifdef debugFTFparams
645 if ( ProjectileabsPDGcode < 1000 ) {
668 coeff *=
G4double(NumberOfTargetNucleons);
673 coeff /= ( 1.+ exfactor );
683 coeff /= ( 1. + exfactor );
689 }
else if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2112 ) {
694 G4Exp( 4.0*(Ylab - 2.1) )/( 1.0 +
G4Exp( 4.0*(Ylab - 2.1) ) ) );
726 coeff *=
G4double(AbsProjectileBaryonNumber);
730 coeff /= ( 1.+ exfactor );
741 coeff *=
G4double(NumberOfTargetNucleons);
745 coeff /= ( 1.+ exfactor );
754 coeff /= ( 1. + exfactor );
762 #ifdef debugFTFparams
832 if ( Qleft < 6 && Qright < 6 ) {
834 }
else if ( Qleft < 6 && Qright > 6 ) {
838 }
else if ( Qleft > 6 && Qright < 6 ) {
843 return EstimatedMass;
852 if (Prob < 0.) Prob=0.;
858 if (Prob < 0.) Prob=0.;
917 HDP.
SetDefault(
"FTF_BARYON_DIFF_DISSO_PROJ",
false );
918 HDP.
SetDefault(
"FTF_BARYON_DIFF_DISSO_TGT",
false );
934 HDP.
SetDefault(
"FTF_BARYON_DELTA_PROB_QEXCHG", 0. );
935 HDP.
SetDefault(
"FTF_BARYON_PROB_SAME_QEXCHG", 0. );
936 HDP.
SetDefault(
"FTF_BARYON_DIFF_M_PROJ", 1.16, 1.16, 3. );
938 HDP.
SetDefault(
"FTF_BARYON_NONDIFF_M_PROJ", 1.16, 1.16, 3. );
939 HDP.
SetDefault(
"FTF_BARYON_DIFF_M_TGT", 1.16, 1.16, 3. );
940 HDP.
SetDefault(
"FTF_BARYON_NONDIFF_M_TGT", 1.16, 1.16, 3. );
941 HDP.
SetDefault(
"FTF_BARYON_AVRG_PT2", 0.3, 0.08, 1. );
1006 HDP.
SetDefault(
"FTF_PION_DIFF_DISSO_PROJ",
false );
1007 HDP.
SetDefault(
"FTF_PION_DIFF_DISSO_TGT",
false );
1024 HDP.
SetDefault(
"FTF_PION_DELTA_PROB_QEXCHG", 0.56 );
1025 HDP.
SetDefault(
"FTF_PION_DIFF_M_PROJ", 1.0, 0.5, 3. );
1026 HDP.
SetDefault(
"FTF_PION_NONDIFF_M_PROJ", 1.0, 0.5, 3. );
1028 HDP.
SetDefault(
"FTF_PION_DIFF_M_TGT", 1.16, 1.16, 3. );
1030 HDP.
SetDefault(
"FTF_PION_NONDIFF_M_TGT", 1.16, 1.16, 3. );
1031 HDP.
SetDefault(
"FTF_PION_AVRG_PT2", 0.3, 0.08, 1. );
1046 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P1_PROJ", 1., 0., 1. );
1047 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P1_NBRN_PROJ",
false );
1054 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P1_TGT", 1., 0., 1. );
1055 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P1_ADEP_TGT",
false );
1056 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P2_TGT", 4.0, 2., 16. );
1057 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_P3_TGT", 2.1, 0., 4. );
1059 HDP.
SetDefault(
"FTF_BARYON_PT2_NUCDESTR_P1", 0.035, 0., 0.25 );
1060 HDP.
SetDefault(
"FTF_BARYON_PT2_NUCDESTR_P2", 0.04, 0., 0.25 );
1061 HDP.
SetDefault(
"FTF_BARYON_PT2_NUCDESTR_P3", 4.0, 2., 16. );
1062 HDP.
SetDefault(
"FTF_BARYON_PT2_NUCDESTR_P4", 2.5, 0., 4. );
1066 HDP.
SetDefault(
"FTF_BARYON_NUCDESTR_DISP", 0.3, 0.1, 0.4 );
1080 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_P1_TGT", 0.00481, 0., 1. );
1081 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_P1_ADEP_TGT",
true );
1082 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_P2_TGT", 4.0, 2., 16. );
1083 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_P3_TGT", 2.1, 0., 4. );
1085 HDP.
SetDefault(
"FTF_MESON_PT2_NUCDESTR_P1", 0.035, 0., 0.25 );
1086 HDP.
SetDefault(
"FTF_MESON_PT2_NUCDESTR_P2", 0.04, 0., 0.25 );
1087 HDP.
SetDefault(
"FTF_MESON_PT2_NUCDESTR_P3", 4.0, 2., 16. );
1088 HDP.
SetDefault(
"FTF_MESON_PT2_NUCDESTR_P4", 2.5, 0., 4. );
1090 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_R2", 1.5*CLHEP::fermi*CLHEP::fermi,
1091 0.5*CLHEP::fermi*CLHEP::fermi,
1092 2.*CLHEP::fermi*CLHEP::fermi );
1094 HDP.
SetDefault(
"FTF_MESON_NUCDESTR_DISP", 0.3, 0.1, 0.4 );
1522 for (
G4int i = 0; i < 4; i++ ) {
1523 for (
G4int j = 0; j < 7; j++ ) {