65 LEN =
new std::vector<G4double*>;
66 HEN =
new std::vector<G4double*>;
72 for(
G4int i=0; i<lens; ++i)
delete[] (*
LEN)[i];
75 for(
G4int i=0; i<hens; ++i)
delete[] (*
HEN)[i];
127 if(lastCS<=0. && pMom>
lastTH)
146 colP.push_back(pMom);
175 static const G4double THmiG=THmin*.001;
179 static const G4double Pmin=THmin+(nL-1)*dP;
182 static const G4double milP=std::log(Pmin);
183 static const G4double malP=std::log(Pmax);
184 static const G4double dlP=(malP-milP)/(nH-1);
185 static const G4double milPG=std::log(.001*Pmin);
194 if(sync<=I)
G4cout<<
"*!*G4QProtonNuclCS::CalcCrossSect:Sync="<<sync<<
"<="<<I<<
G4endl;
220 G4cout<<
"***G4ChipsProtonNuclCS::CalcCrossSect: Sinc="<<sync<<
"#"<<I<<
", Z=" <<targZ
221 <<
", N="<<targN<<
", F="<<F<<
G4endl;
229 if (Momentum<
lastTH)
return 0.;
230 else if (Momentum<Pmin)
234 else if (Momentum<Pmax)
244 if(sigma<0.)
return 0.;
256 if(tZ<.99 || tN<0.)
return 0.;
257 else if(tZ==1 && tN==0)
return 800.;
262 return std::sqrt(T*(tpM+T));
272 else if(tZ<97 && tN<152)
291 else if(tZ==5 && tN==6)
297 else if(tZ==4 && tN==5)
303 else if(tZ==3 && tN==4)
309 else if(tZ==3 && tN==3)
315 else if(tZ==2 && tN==1)
326 sigma+=pex*std::exp(-dp*dp/wid);
331 G4cerr<<
"-Warning-G4ChipsProtonNuclearXS::CSLin:*Bad A* Z="<<tZ<<
", N="<<tN<<
G4endl;
334 if(sigma<0.)
return 0.;
355 El=1./(0.00012+p2*0.2);
372 El=LE+(0.0557*lp2+6.72+32.6/P)/(1.+rp2/P);
373 To=LE+(0.3 *lp2+38.2+52.7*rp2)/(1.+2.72*rp2*rp2);
387 else if(tZ<97 && tN<152)
402 G4double c=(170.+3600./a2s)/(1.+65./a2s);
406 G4double gg=40.*std::exp(al*0.712)/(1.+12.2/
a)/(1.+34./a2);
407 G4double e=318.+a4/(1.+.0015*a4/std::exp(al*0.09))/(1.+4.e-28*a12)+
408 8.e-18/(1./a16+1.3e-20)/(1.+1.e-21*a12);
409 G4double ss=3.57+.009*a2/(1.+.0001*a2*
a);
410 G4double h=(.01/a4+2.5e-6/
a)*(1.+6.e-6*a2*a)/(1.+6.e7/a12/
a2);
411 sigma=(c+d*d)/(1.+r/p4)+(gg+e*std::exp(-ss*P))/(1.+h/p4/p4);
415 G4cerr<<
"-Warning-G4QProtonNuclearCroSect::CSForm:*Bad A* Z="<<tZ<<
", N="<<tN<<
G4endl;
418 if(sigma<0.)
return 0.;
426 G4cerr<<
"***G4ChipsProtonInelasticXS::EquLinearFit: DX="<<DX<<
", N="<<N<<
G4endl;
432 G4int jj=
static_cast<int>(d);
434 else if(jj>N2) jj=N2;
G4double CrossSectionLin(G4int targZ, G4int targN, G4double P)
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
G4double ThresholdMomentum(G4int targZ, G4int targN)
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)
G4double GetTotalMomentum() const
G4_DECLARE_XS_FACTORY(G4ChipsProtonInelasticXS)
static G4Proton * Definition()
G4double EquLinearFit(G4double X, G4int N, G4double X0, G4double DX, G4double *Y)
G4GLOB_DLL std::ostream G4cout
static G4Proton * Proton()
virtual G4bool IsIsoApplicable(const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
~G4ChipsProtonInelasticXS()
static const G4double A[nN]
std::vector< G4double * > * LEN
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
std::vector< G4double > colTH
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