66 LEN =
new std::vector<G4double*>;
67 HEN =
new std::vector<G4double*>;
74 for(
G4int i=0; i<lens; ++i)
delete[] (*
LEN)[i];
77 for(
G4int i=0; i<hens; ++i)
delete[] (*
HEN)[i];
84 outFile <<
"G4ChipsPionPlusInelasticXS provides the inelastic cross\n"
85 <<
"section for pion+ nucleus scattering as a function of incident\n"
86 <<
"momentum. The cross section is calculated using M. Kossov's\n"
87 <<
"CHIPS parameterization of cross section data.\n";
138 if(lastCS<=0. && pMom>
lastTH)
157 colP.push_back(pMom);
186 static const G4double THmiG=THmin*.001;
190 static const G4double Pmin=THmin+(nL-1)*dP;
195 static const G4double dlP=(malP-milP)/(nH-1);
205 if(sync<=I)
G4cerr<<
"*!*G4ChipsPiMinusNuclCS::CalcCrosSect:Sync="<<sync<<
"<="<<I<<
G4endl;
231 G4cerr<<
"***G4ChipsPiMinusNuclCS::CalcCrossSect: Sinc="<<sync<<
"#"<<I<<
", Z=" <<targZ
232 <<
", N="<<targN<<
", F="<<F<<
G4endl;
240 if (Momentum<
lastTH)
return 0.;
241 else if (Momentum<Pmin)
245 else if (Momentum<Pmax)
255 if(sigma<0.)
return 0.;
266 if(tZ<.99 || tN<0.)
return 0.;
267 else if(tZ==1 && tN==0)
return 300.;
272 return std::sqrt(T*(tpM+T));
306 else if(tZ==1 && tN==1)
312 sigma=(.55*d*d+38.+23./std::sqrt(P))/(1.+.3/p2/p2)+18./(f*f+.1089)+.02/(gg*gg+.0025);
314 else if(tZ<97 && tN<152)
324 G4double c=41.*
G4Exp(al*.68)*(1.+44./a2)/(1.+8./a)/(1.+200./a2/a2);
330 sigma=(c+d*
d)/(1.+(.2-.009*sa)/p4)+f/(u*u+h*h)/(1.+r/p2);
334 G4cerr<<
"-Warning-G4ChipsPiPlusNuclearCroSect::CSForm:*Bad A* Z="<<tZ<<
", N="<<tN<<
G4endl;
337 if(sigma<0.)
return 0.;
345 G4cerr<<
"***G4ChipsPionPlusInelasticXS::EquLinearFit: DX="<<DX<<
", N="<<N<<
G4endl;
351 G4int jj=
static_cast<int>(
d);
353 else if(jj>N2) jj=N2;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
std::vector< ExP01TrackerHit * > a
G4double CrossSectionFormula(G4int targZ, G4int targN, G4double P, G4double lP)
std::vector< G4double * > * HEN
~G4ChipsPionPlusInelasticXS()
static G4PionPlus * PionPlus()
G4double CrossSectionLog(G4int targZ, G4int targN, G4double lP)
G4double GetPDGMass() const
G4double G4Log(G4double x)
std::vector< G4double > colCS
static G4PionPlus * Definition()
static constexpr double millibarn
static G4Pow * GetInstance()
G4double CrossSectionLin(G4int targZ, G4int targN, G4double P)
G4double powA(G4double A, G4double y) const
virtual void CrossSectionDescription(std::ostream &) const
static const G4double THmin
double A(double temperature)
G4double CalculateCrossSection(G4int F, G4int I, G4int PDG, G4int Z, G4int N, G4double Momentum)
G4double EquLinearFit(G4double X, G4int N, G4double X0, G4double DX, G4double *Y)
#define G4_DECLARE_XS_FACTORY(cross_section)
std::vector< G4double > colP
G4GLOB_DLL std::ostream G4cerr
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
std::vector< G4int > colN
std::vector< G4double * > * LEN
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int tgZ, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
std::vector< G4double > colTH
G4double GetTotalMomentum() const
G4double ThresholdMomentum(G4int targZ, G4int targN)
G4ChipsPionPlusInelasticXS()
std::vector< G4int > colZ