100 std::vector<G4double*>::iterator
pos;
139 outFile <<
"G4ChipsPionMinusElasticXS provides the elastic cross\n"
140 <<
"section for pion- nucleus scattering as a function of incident\n"
141 <<
"momentum. The cross section is calculated using M. Kossov's\n"
142 <<
"CHIPS parameterization of cross section data.\n";
199 if(lastCS<=0. && pEn>
lastTH)
220 colP.push_back(pMom);
303 G4int blast=
static_cast<int>(shift);
322 G4int blast=
static_cast<int>(shift);
363 const G4int n_pimpel=38;
365 G4double pimp_el[n_pimpel]={1.27,1.53,.0676,3.5,.36,.04,.017,.0025,.0557,2.4,7.,.7,.6,
366 .05,5.,74.,3.,3.4,.2,.17,.001,8.,.055,3.64,5.e-5,4000.,1500.,
367 .46,1.2e6,3.5e6,5.e-5,1.e10,8.5e8,1.e10,1.1,3.4e6,6.8e6,0.};
385 if ( tgZ == 1 && tgN == 0 )
387 for (
G4int ip=0; ip<n_pimpel; ip++)
lastPAR[ip]=pimp_el[ip];
411 lastPAR[0]=(.95*sa+2.E5/a16)/(1.+17/a);
414 lastPAR[3]=.5*a/(1.+3./a+1800./a8);
417 lastPAR[6]=(.55+.001*a2)/(1.+4.E-4*a2);
418 lastPAR[7]=(.0002/asa+4.E-9*a)/(1.+9./a4);
427 lastPAR[11]=.7/(1.+4.e-12*a16);
428 lastPAR[12]=2.5/a8/(a4+1.e-16*a32);
435 lastPAR[18]=9.e-7/(1.+.035*a5);
436 lastPAR[19]=(42.+2.7e-11*a16)/(1.+.14*a);
440 lastPAR[22]=2.4e-3*a8/(1.+2.6e-4*a7);
441 lastPAR[23]=3.5e-36*a32*a8/(1.+5.e-15*a32/a);
443 lastPAR[24]=1.e5/(a8+2.5e12/a16);
444 lastPAR[25]=8.e7/(a12+1.e-27*a28*a28);
453 lastPAR[32]=1.5e-4/(1.+5.e-6*a12);
480 lastPAR[11]=.6*a/(1.+2.e15/a16);
481 lastPAR[12]=.17/(a+9.e5/a3+1.5e33/a32);
482 lastPAR[13]=(.001+7.e-11*a5)/(1.+4.4e-11*a5);
483 lastPAR[14]=(p1a10*p1a10+2.e-29)/(1.+2.e-22*a12);
485 lastPAR[15]=400./a12+2.e-22*a9;
486 lastPAR[16]=1.e-32*a12/(1.+5.e22/a14);
487 lastPAR[17]=1000./a2+9.5*sa*ssa;
488 lastPAR[18]=4.e-6*a*asa+1.e11/a16;
489 lastPAR[19]=(120./a+.002*a2)/(1.+2.e14/a16);
496 lastPAR[24]=.0011*asa/(1.+3.e34/a32/a4);
497 lastPAR[25]=1.e-5*a2+2.e14/a16;
498 lastPAR[26]=1.2e-11*a2/(1.+1.5e19/a12);
499 lastPAR[27]=.016*asa/(1.+5.e16/a16);
503 lastPAR[30]=11.*a3/(1.+7.e23/a16/a8);
506 lastPAR[32]=(.1+4.4e-5*a2)/(1.+5.e5/a4);
507 lastPAR[33]=3.5e-4*a2/(1.+1.e8/a8);
510 lastPAR[36]=1.e-9/a+s4a16*s4a16;
527 lastPAR[50]=900.*sa/(1.+500./a3);
530 lastPAR[51]=1.e15+2.e27/a4/(1.+2.e-18*a16);
560 for(
G4int ip=ini; ip<=fin; ip++)
579 else G4cout<<
"*Warning*G4ChipsPionMinusElasticXS::GetPTables: PDG="<<PDG
580 <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
" > fin="<<fin<<
", LP="<<LP
581 <<
" > ILP="<<ILP<<
" nothing is done!"<<
G4endl;
583 else G4cout<<
"*Warning*G4ChipsPionMinusElasticXS::GetPTables: PDG="<<PDG
584 <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
">= max="<<
nPoints<<
", LP="<<LP
585 <<
" > ILP="<<ILP<<
", lPMax="<<
lPMax<<
" nothing is done!"<<
G4endl;
594 ed <<
"PDG = " << PDG <<
", Z = " << tgZ <<
", N = " << tgN
595 <<
", while it is defined only for PDG=-211 (pi-)" <<
G4endl;
596 G4Exception(
"G4ChipsPionMinusElasticXS::GetPTables()",
"HAD_CHPS_0000",
609 if(PDG!=-211)
G4cout<<
"Warning*G4ChipsPionMinusElasticXS::GetExT:PDG="<<PDG<<
G4endl;
658 if(a>6.5)E3*=tm2*tm2*tm2;
674 if(std::fabs(tss)>1.e-7) q2=(std::sqrt(
theB1*(
theB1+(tss+tss)*q2))-
theB1)/tss;
702 if(!(q2>=-1.||q2<=1.))
G4cout<<
"*NAN*G4QElasticCrossSect::GetExchangeT: -t="<<q2<<
G4endl;
715 if(
lastLP<-4.3)
return 0.;
722 ed <<
"PDG = " << PDG <<
", Z = " << tgZ <<
", N = " << tgN
723 <<
", while it is defined only for PDG=-211" <<
G4endl;
724 G4Exception(
"G4ChipsPionMinusElasticXS::GetSlope()",
"HAD_CHPS_0000",
743 if(PDG!=-211)
G4cout<<
"*Warn*G4ChipsPionMinusElasticXS::GetTabV: PDG="<<PDG<<
G4endl;
746 const G4bool isHeavyElementAllowed =
true;
747 if(tgZ<0 || ( !isHeavyElementAllowed && tgZ>92))
749 G4cout<<
"*Warning*G4QPionPlusElCS::GetTabValue:(1-92) No isotopes for Z="<<tgZ<<
G4endl;
764 if ( tgZ == 1 && tgN == 0 )
845 static const G4double mPi2= mPi*mPi;
853 G4double mds=dmt*std::sqrt(pP2+mPi2)+mPi2+mt*mt;
854 return dmt*dmt*pP2/mds;
859 ed <<
"PDG = " << PDG <<
",Z = " << tgZ <<
",N = " << tgN
860 <<
", while it is defined only for p projectiles & Z_target>0" <<
G4endl;
861 G4Exception(
"G4ChipsPionMinusElasticXS::GetQ2max()",
"HAD_CHPS_0000",
G4_DECLARE_XS_FACTORY(G4ChipsPionMinusElasticXS)
static const G4double pos
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
static constexpr double gigaelectronvolt
static constexpr double millibarn
static constexpr double GeV
G4GLOB_DLL std::ostream G4cout
std::vector< G4double > PIN
std::vector< G4double * > S1T
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
~G4ChipsPionMinusElasticXS()
std::vector< G4double * > CST
G4double GetSlope(G4int tZ, G4int tN, G4int pPDG)
std::vector< G4double > colP
G4ChipsPionMinusElasticXS()
G4double GetQ2max(G4int pPDG, G4int tgZ, G4int tgN, G4double pP)
std::vector< G4double > colTH
std::vector< G4int > colN
std::vector< G4double * > B3T
std::vector< G4double * > B4T
std::vector< G4double * > SST
std::vector< G4double * > S2T
std::vector< G4double > colCS
G4double CalculateCrossSection(G4bool CS, G4int F, G4int I, G4int pPDG, G4int Z, G4int N, G4double pP)
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
G4double GetTabValues(G4double lp, G4int pPDG, G4int tgZ, G4int tgN)
std::vector< G4int > colZ
std::vector< G4double * > S4T
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int tgZ, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
std::vector< G4double * > B1T
std::vector< G4double * > S3T
G4double GetPTables(G4double lpP, G4double lPm, G4int PDG, G4int tZ, G4int tN)
virtual void CrossSectionDescription(std::ostream &) const
std::vector< G4double * > PAR
std::vector< G4double * > B2T
G4double GetExchangeT(G4int tZ, G4int tN, G4int pPDG)
G4double GetTotalMomentum() const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4double GetPDGMass() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4PionMinus * PionMinus()
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const