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);
422 G4double ss=3.57+.009*a2/(1.+.0001*a2*
a);
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 CrossSectionLin(G4int targZ, G4int targN, G4double P)
static G4Pow * GetInstance()
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
G4double ThresholdMomentum(G4int targZ, G4int targN)
static const G4double rp2
G4double GetTotalMomentum() const
G4double CrossSectionFormula(G4int targZ, G4int targN, G4double P, G4double lP)
std::vector< G4int > colZ
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(G4ChipsProtonInelasticXS)
static G4Proton * Definition()
G4double EquLinearFit(G4double X, G4int N, G4double X0, G4double DX, G4double *Y)
virtual void CrossSectionDescription(std::ostream &) const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static G4Proton * Proton()
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
~G4ChipsProtonInelasticXS()
std::vector< G4double * > * LEN
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4double > colP
G4double GetPDGMass() const
G4double CrossSectionLog(G4int targZ, G4int targN, G4double lP)
static const double millibarn
std::vector< G4double > colCS
std::vector< G4double * > * HEN
static const G4double third
std::vector< G4double > colTH
G4double powA(G4double A, G4double y) const
static const G4double pos
static const G4double THmin
G4double CalculateCrossSection(G4int F, G4int I, G4int PDG, G4int Z, G4int N, G4double Momentum)
std::vector< G4int > colN
G4ChipsProtonInelasticXS()
G4GLOB_DLL std::ostream G4cerr