69 LEN =
new std::vector<G4double*>;
70 HEN =
new std::vector<G4double*>;
76 for(
G4int i=0; i<lens; ++i)
delete[] (*
LEN)[i];
79 for(
G4int i=0; i<hens; ++i)
delete[] (*
HEN)[i];
86 outFile <<
"G4ChipsProtonInelasticXS provides the inelastic cross\n"
87 <<
"section for proton nucleus scattering as a function of incident\n"
88 <<
"momentum. The cross section is calculated using M. Kossov's\n"
89 <<
"CHIPS parameterization of cross section data.\n";
140 if(lastCS<=0. && pMom>
lastTH)
159 colP.push_back(pMom);
188 static const G4double THmiG=THmin*.001;
192 static const G4double Pmin=THmin+(nL-1)*dP;
197 static const G4double dlP=(malP-milP)/(nH-1);
207 if(sync<=I)
G4cout<<
"*!*G4QProtonNuclCS::CalcCrossSect:Sync="<<sync<<
"<="<<I<<
G4endl;
233 G4cout<<
"***G4ChipsProtonNuclCS::CalcCrossSect: Sinc="<<sync<<
"#"<<I<<
", Z=" <<targZ
234 <<
", N="<<targN<<
", F="<<F<<
G4endl;
242 if (Momentum<
lastTH)
return 0.;
243 else if (Momentum<Pmin)
247 else if (Momentum<Pmax)
257 if(sigma<0.)
return 0.;
269 if(tZ<.99 || tN<0.)
return 0.;
270 else if(tZ==1 && tN==0)
return 800.;
275 return std::sqrt(T*(tpM+T));
285 else if(tZ<97 && tN<152)
304 else if(tZ==5 && tN==6)
310 else if(tZ==4 && tN==5)
316 else if(tZ==3 && tN==4)
322 else if(tZ==3 && tN==3)
328 else if(tZ==2 && tN==1)
339 sigma+=pex*
G4Exp(-dp*dp/wid);
344 G4cerr<<
"-Warning-G4ChipsProtonNuclearXS::CSLin:*Bad A* Z="<<tZ<<
", N="<<tN<<
G4endl;
347 if(sigma<0.)
return 0.;
368 El=1./(0.00012+p2*0.2);
385 El=LE+(0.0557*lp2+6.72+32.6/
P)/(1.+rp2/P);
386 To=LE+(0.3 *lp2+38.2+52.7*rp2)/(1.+2.72*rp2*rp2);
400 else if(tZ<97 && tN<152)
415 G4double c=(170.+3600./a2s)/(1.+65./a2s);
421 8.e-18/(1./a16+1.3e-20)/(1.+1.e-21*a12);
423 G4double h=(.01/a4+2.5e-6/
a)*(1.+6.e-6*a2*a)/(1.+6.e7/a12/a2);
424 sigma=(c+d*
d)/(1.+r/p4)+(gg+e*
G4Exp(-ss*P))/(1.+h/p4/p4);
428 G4cerr<<
"-Warning-G4QProtonNuclearCroSect::CSForm:*Bad A* Z="<<tZ<<
", N="<<tN<<
G4endl;
431 if(sigma<0.)
return 0.;
439 G4cerr<<
"***G4ChipsProtonInelasticXS::EquLinearFit: DX="<<DX<<
", N="<<N<<
G4endl;
445 G4int jj=
static_cast<int>(
d);
447 else if(jj>N2) jj=N2;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4double > colTH
std::vector< G4int > colN
static G4Proton * Definition()
std::vector< ExP01TrackerHit * > a
static const G4double pos
G4double EquLinearFit(G4double X, G4int N, G4double X0, G4double DX, G4double *Y)
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
G4ChipsProtonInelasticXS()
static G4Proton * Proton()
std::vector< G4int > colZ
std::vector< G4double > colCS
G4double GetPDGMass() const
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
G4double CalculateCrossSection(G4int F, G4int I, G4int PDG, G4int Z, G4int N, G4double Momentum)
G4double G4Log(G4double x)
static constexpr double millibarn
static G4Pow * GetInstance()
G4double ThresholdMomentum(G4int targZ, G4int targN)
G4double powA(G4double A, G4double y) const
static const G4double THmin
double A(double temperature)
~G4ChipsProtonInelasticXS()
virtual void CrossSectionDescription(std::ostream &) const
#define G4_DECLARE_XS_FACTORY(cross_section)
G4GLOB_DLL std::ostream G4cerr
G4double CrossSectionFormula(G4int targZ, G4int targN, G4double P, G4double lP)
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int tgZ, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
G4double CrossSectionLin(G4int targZ, G4int targN, G4double P)
G4GLOB_DLL std::ostream G4cout
std::vector< G4double * > * HEN
std::vector< G4double > colP
G4double GetTotalMomentum() const
G4double CrossSectionLog(G4int targZ, G4int targN, G4double lP)
std::vector< G4double * > * LEN