64 const G4double HGeVSQ=gigaelectronvolt*gigaelectronvolt/2.;
66 const G4int n_kppel=35;
68 G4double kpp_el[n_kppel]={.7,.38,.0676,.0557,3.5,2.23,.7,.1,2.,1.,.372,5.,74.,3.,3.4,
69 .2,.17,.001,8.,.055,3.64,5.e-5,4000.,1500.,.46,1.2e6,3.5e6,
70 5.e-5,1.e10,8.5e8,1.e10,1.1,3.4e6,6.8e6,0.};
123 std::vector<G4double*>::iterator
pos;
124 for (pos=
CST.begin(); pos<
CST.end(); pos++)
127 for (pos=
PAR.begin(); pos<
PAR.end(); pos++)
130 for (pos=
SST.begin(); pos<
SST.end(); pos++)
133 for (pos=
S1T.begin(); pos<
S1T.end(); pos++)
136 for (pos=
B1T.begin(); pos<
B1T.end(); pos++)
139 for (pos=
S2T.begin(); pos<
S2T.end(); pos++)
142 for (pos=
B2T.begin(); pos<
B2T.end(); pos++)
145 for (pos=
S3T.begin(); pos<
S3T.end(); pos++)
148 for (pos=
B3T.begin(); pos<
B3T.end(); pos++)
151 for (pos=
S4T.begin(); pos<
S4T.end(); pos++)
154 for (pos=
B4T.begin(); pos<
B4T.end(); pos++)
162 outFile <<
"G4ChipsKaonPlusElasticXS provides the elastic cross\n" 163 <<
"section for K+ nucleus scattering as a function of incident\n" 164 <<
"momentum. The cross section is calculated using M. Kossov's\n" 165 <<
"CHIPS parameterization of cross section data.\n";
222 if(lastCS<=0. && pEn>
lastTH)
243 colP.push_back(pMom);
326 G4int blast=
static_cast<int>(shift);
345 G4int blast=
static_cast<int>(shift);
376 if(lastSIG<0.) lastSIG = 0.;
399 if ( tgZ == 1 && tgN == 0 )
401 for (
G4int ip=0; ip<n_kppel; ip++)
lastPAR[ip]=kpp_el[ip];
425 lastPAR[0]=.06*asa/(1.+a*(.01+.1/ssa));
441 lastPAR[11]=.7/(1.+4.e-12*a16);
442 lastPAR[12]=2.5/a8/(a4+1.e-16*a32);
450 lastPAR[19]=(42.+2.7e-11*a16)/(1.+.14*a);
454 lastPAR[22]=2.4e-3*a8/(1.+2.6e-4*a7);
455 lastPAR[23]=3.5e-36*a32*a8/(1.+5.e-15*a32/
a);
457 lastPAR[24]=1.e5/(a8+2.5e12/a16);
458 lastPAR[25]=8.e7/(a12+1.e-27*a28*a28);
467 lastPAR[32]=1.5e-4/(1.+5.e-6*a12);
475 lastPAR[38]=1.e8*std::exp(.32*asa);
476 lastPAR[39]=20.*std::exp(.45*asa);
478 lastPAR[41]=2.5e5*std::exp(.085*a3);
492 lastPAR[ 9]=4.5*std::pow(a,1.15);
493 lastPAR[10]=.06*std::pow(a,.6);
494 lastPAR[11]=.6*a/(1.+2.e15/a16);
495 lastPAR[12]=.17/(a+9.e5/a3+1.5e33/a32);
497 lastPAR[14]=(p1a10*p1a10+2.e-29)/(1.+2.
e-22*a12);
499 lastPAR[15]=400./a12+2.e-22*a9;
500 lastPAR[16]=1.e-32*a12/(1.+5.e22/a14);
501 lastPAR[17]=1000./a2+9.5*sa*ssa;
502 lastPAR[18]=4.e-6*a*asa+1.e11/a16;
503 lastPAR[19]=(120./a+.002*
a2)/(1.+2.e14/a16);
511 lastPAR[25]=1.e-5*a2+2.e14/a16;
512 lastPAR[26]=1.2e-11*a2/(1.+1.5e19/a12);
513 lastPAR[27]=.016*asa/(1.+5.e16/a16);
515 lastPAR[28]=.002*a4/(1.+7.e7/std::pow(a-6.83,14));
516 lastPAR[29]=2.e6/a6+7.2/std::pow(a,.11);
517 lastPAR[30]=11.*a3/(1.+7.e23/a16/a8);
521 lastPAR[33]=3.5e-4*a2/(1.+1.e8/a8);
524 lastPAR[36]=1.e-9/a+s4a16*s4a16;
544 lastPAR[51]=1.e15+2.e27/a4/(1.+2.e-18*a16);
593 else G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
594 <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
" > fin="<<fin<<
", LP="<<LP
595 <<
" > ILP="<<ILP<<
" nothing is done!"<<
G4endl;
597 else G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
598 <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
">= max="<<
nPoints<<
", LP="<<LP
599 <<
" > ILP="<<ILP<<
", lPMax="<<
lPMax<<
" nothing is done!"<<
G4endl;
608 ed <<
"PDG = " << PDG <<
", Z = " << tgZ <<
", N = " << tgN
609 <<
", while it is defined only for PDG=321 (K+) " <<
G4endl;
610 G4Exception(
"G4ChipsKaonPlusElasticXS::GetPTables()",
"HAD_CHPS_0000",
619 if(PDG!=321)
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetExT:PDG="<<PDG<<
G4endl;
628 G4double R2=(1.-std::exp(-E2*E2*E2));
640 q2=-std::log(1.-ran)/
theB1;
646 q2=-std::log(1.-ran);
654 q2=-std::log(1.-ran)/
theB3;
668 if(a>6.5)E3*=tm2*tm2*tm2;
683 q2=-std::log(1.-ran)/
theB1;
684 if(std::fabs(tss)>1.
e-7) q2=(std::sqrt(
theB1*(
theB1+(tss+tss)*q2))-
theB1)/tss;
690 q2=-std::log(1.-ran)/
theB2;
692 if(a<6.5) q2=std::pow(q2,
third);
693 else q2=std::pow(q2,fifth);
699 q2=-std::log(1.-ran)/
theB3;
701 if(a>6.5) q2=std::pow(q2,sevth);
707 q2=-std::log(1.-ran)/
theB4;
708 if(a<6.5) q2=lastTM-q2;
712 if(!(q2>=-1.||q2<=1.))
G4cout<<
"*NAN*G4QKaonPlusElasticCS::GetExchT: -t="<<q2<<
G4endl;
724 if(
lastLP<-4.3)
return 0.;
728 ed <<
"PDG = " << PDG <<
", Z = " << tgZ <<
", N = " << tgN
729 <<
", while it is defined only for PDG=321 (K+)" <<
G4endl;
730 G4Exception(
"G4ChipsKaonPlusElasticXS::GetSlope()",
"HAD_CHPS_0000",
748 if(PDG!=321)
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetTaV:PDG="<<PDG<<
G4endl;
751 G4cout<<
"*Warning*G4QKaonPlusElasticCS::GetTabV:(1-92)NoIsotopes for Z="<<tgZ<<
G4endl;
766 if ( tgZ == 1 && tgN == 0 )
770 theS1=(lastPAR[12]+lastPAR[13]*dl2*dl2)/(1.+lastPAR[14]/p4/p)+
771 (lastPAR[15]/p2+lastPAR[16]*p)/(p4+lastPAR[17]*sp);
772 theB1=lastPAR[18]*std::pow(p,lastPAR[19])/(1.+lastPAR[20]/p3);
773 theS2=lastPAR[21]+lastPAR[22]/(p4+lastPAR[23]*p);
774 theB2=lastPAR[24]+lastPAR[25]/(p4+lastPAR[26]/
sp);
775 theS3=lastPAR[27]+lastPAR[28]/(p4*p4+lastPAR[29]*p2+lastPAR[30]);
776 theB3=lastPAR[31]+lastPAR[32]/(p4+lastPAR[33]);
782 return lastPAR[0]/(lastPAR[2]+
sqr(p-lastPAR[1]))+(lastPAR[3]*dp*dp+lastPAR[5])/
783 (1.-lastPAR[6]/sp+lastPAR[7]/p4)
784 +lastPAR[8]/(
sqr(p-lastPAR[9])+lastPAR[10]);
812 lastPAR[40]/(1.+lastPAR[41]*std::pow(p,lastPAR[42])));
813 theB4=lastPAR[43]*pa/p2/(1.+pa*lastPAR[44]);
834 return (lastPAR[0]*dlp*dlp+lastPAR[1]+lastPAR[2]/p2)/(1.+lastPAR[3]/p2/
sp);
849 G4double mds=dmt*std::sqrt(pP2+mK2)+mK2+mt*mt;
850 return dmt*dmt*pP2/mds;
855 ed <<
"PDG = " << PDG <<
",Z = " << tgZ <<
", N = " << tgN
856 <<
", while it is defined only for p projectiles & Z_target>0" <<
G4endl;
857 G4Exception(
"G4ChipsKaonPlusElasticXS::GetQ2max()",
"HAD_CHPS_0000",
G4ChipsKaonPlusElasticXS()
std::vector< G4double * > SST
std::ostringstream G4ExceptionDescription
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int tgZ, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
G4_DECLARE_XS_FACTORY(G4ChipsKaonPlusElasticXS)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4double GetPTables(G4double lpP, G4double lPm, G4int PDG, G4int tZ, G4int tN)
G4double GetTotalMomentum() const
std::vector< G4double * > S1T
std::vector< G4int > colZ
#define G4MUTEX_INITIALIZER
G4double CalculateCrossSection(G4bool CS, G4int F, G4int I, G4int pPDG, G4int Z, G4int N, G4double pP)
std::vector< G4double * > B2T
std::vector< G4double * > S4T
G4double GetQ2max(G4int pPDG, G4int tgZ, G4int tgN, G4double pP)
std::vector< G4double * > B1T
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4IonTable * GetIonTable() const
std::vector< G4double * > CST
std::vector< G4double * > B4T
std::vector< G4double * > B3T
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
std::vector< G4double * > S2T
std::vector< G4double > colP
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetExchangeT(G4int tZ, G4int tN, G4int pPDG)
static G4ParticleTable * GetParticleTable()
G4double GetPDGMass() const
virtual void CrossSectionDescription(std::ostream &) const
G4double GetSlope(G4int tZ, G4int tN, G4int pPDG)
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
static const double gigaelectronvolt
static const double millibarn
G4double GetTabValues(G4double lp, G4int pPDG, G4int tgZ, G4int tgN)
~G4ChipsKaonPlusElasticXS()
static const G4double third
std::vector< G4double > colTH
std::vector< G4double > colCS
std::vector< G4double * > S3T
std::vector< G4int > colN
static G4KaonPlus * KaonPlus()
std::vector< G4double > PIN
std::vector< G4double * > PAR
static const G4double pos