Geant4  10.02.p03
G4AntiNuclElastic Class Reference

#include <G4AntiNuclElastic.hh>

Inheritance diagram for G4AntiNuclElastic:
Collaboration diagram for G4AntiNuclElastic:

Public Member Functions

 G4AntiNuclElastic ()
 
virtual ~G4AntiNuclElastic ()
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
G4double SampleThetaCMS (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
G4double SampleThetaLab (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
G4double CalculateParticleBeta (const G4ParticleDefinition *particle, G4double momentum)
 
G4double CalculateZommerfeld (G4double beta, G4double Z1, G4double Z2)
 
G4double CalculateAm (G4double momentum, G4double n, G4double Z)
 
G4double DampFactor (G4double z)
 
G4double BesselJzero (G4double z)
 
G4double BesselJone (G4double z)
 
G4double BesselOneByArg (G4double z)
 
G4double GetcosTeta1 (G4double plab, G4int A)
 
G4ComponentAntiNuclNuclearXSGetComponentCrossSection ()
 
- Public Member Functions inherited from G4HadronElastic
 G4HadronElastic (const G4String &name="hElasticLHEP")
 
virtual ~G4HadronElastic ()
 
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
void SetLowestEnergyLimit (G4double value)
 
G4double LowestEnergyLimit () const
 
G4double ComputeMomentumCMS (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
virtual void ModelDescription (std::ostream &) const
 
- Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
 
virtual ~G4HadronicInteraction ()
 
virtual G4bool IsApplicable (const G4HadProjectile &, G4Nucleus &)
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
const G4HadronicInteractionGetMyPointer () const
 
virtual G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int value)
 
const G4StringGetModelName () const
 
void DeActivateFor (const G4Material *aMaterial)
 
void ActivateFor (const G4Material *aMaterial)
 
void DeActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Element *anElement)
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
G4bool IsBlocked (const G4Element *anElement) const
 
void SetRecoilEnergyThreshold (G4double val)
 
G4double GetRecoilEnergyThreshold () const
 
G4bool operator== (const G4HadronicInteraction &right) const
 
G4bool operator!= (const G4HadronicInteraction &right) const
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 

Private Member Functions

G4AntiNuclElasticoperator= (const G4AntiNuclElastic &right)
 
 G4AntiNuclElastic (const G4AntiNuclElastic &)
 

Private Attributes

G4ComponentAntiNuclNuclearXScs
 
G4double fTetaCMS
 
G4double fThetaLab
 
const G4ParticleDefinitionfParticle
 
G4double fWaveVector
 
G4double fBeta
 
G4double fZommerfeld
 
G4double fAm
 
G4double fRa
 
G4double fRef
 
G4double fceff
 
G4ThreeVector fbst
 
G4double fptot
 
G4double fTmax
 
G4ParticleDefinitiontheAProton
 
G4ParticleDefinitiontheANeutron
 
G4ParticleDefinitiontheADeuteron
 
G4ParticleDefinitiontheATriton
 
G4ParticleDefinitiontheAAlpha
 
G4ParticleDefinitiontheAHe3
 
G4ParticleDefinitiontheProton
 
G4ParticleDefinitiontheNeutron
 
G4ParticleDefinitiontheDeuteron
 
G4ParticleDefinitiontheAlpha
 

Additional Inherited Members

- Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
 
G4bool IsBlocked () const
 
void Block ()
 
- Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
 
G4int verboseLevel
 
G4double theMinEnergy
 
G4double theMaxEnergy
 
G4bool isBlocked
 

Detailed Description

Definition at line 47 of file G4AntiNuclElastic.hh.

Constructor & Destructor Documentation

◆ G4AntiNuclElastic() [1/2]

G4AntiNuclElastic::G4AntiNuclElastic ( )

Definition at line 57 of file G4AntiNuclElastic.cc.

58  : G4HadronElastic("AntiAElastic")
59 {
60  //V.Ivanchenko commented out
61  //SetMinEnergy( 0.1*GeV );
62  //SetMaxEnergy( 10.*TeV );
63 
64 
71 
76 
77 
79  fParticle = 0;
80  fWaveVector = 0.;
81  fBeta = 0.;
82  fZommerfeld = 0.;
83  fAm = 0.;
84  fTetaCMS = 0.;
85  fRa = 0.;
86  fRef = 0.;
87  fceff = 0.;
88  fptot = 0.;
89  fTmax = 0.;
90  fThetaLab = 0.;
91 }
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
G4ParticleDefinition * theAHe3
G4ParticleDefinition * theADeuteron
G4ParticleDefinition * theDeuteron
G4HadronElastic(const G4String &name="hElasticLHEP")
static G4AntiDeuteron * AntiDeuteron()
G4ParticleDefinition * theANeutron
G4ParticleDefinition * theATriton
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
G4ParticleDefinition * theNeutron
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4ParticleDefinition * theProton
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
G4ParticleDefinition * theAProton
G4ComponentAntiNuclNuclearXS * cs
G4ParticleDefinition * theAAlpha
G4ParticleDefinition * theAlpha
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94
static G4AntiNeutron * AntiNeutron()
const G4ParticleDefinition * fParticle
Here is the call graph for this function:

◆ ~G4AntiNuclElastic()

G4AntiNuclElastic::~G4AntiNuclElastic ( )
virtual

Definition at line 94 of file G4AntiNuclElastic.cc.

95 {
96  delete cs;
97 }
G4ComponentAntiNuclNuclearXS * cs

◆ G4AntiNuclElastic() [2/2]

G4AntiNuclElastic::G4AntiNuclElastic ( const G4AntiNuclElastic )
private

Member Function Documentation

◆ BesselJone()

G4double G4AntiNuclElastic::BesselJone ( G4double  z)

Definition at line 592 of file G4AntiNuclElastic.cc.

593 {
594  G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
595 
596  modvalue = std::fabs(value);
597 
598  if ( modvalue < 8.0 )
599  {
600  value2 = value*value;
601  fact1 = value*(72362614232.0 + value2*(-7895059235.0
602  + value2*( 242396853.1
603  + value2*(-2972611.439
604  + value2*( 15704.48260
605  + value2*(-30.16036606 ) ) ) ) ) );
606 
607  fact2 = 144725228442.0 + value2*(2300535178.0
608  + value2*(18583304.74
609  + value2*(99447.43394
610  + value2*(376.9991397
611  + value2*1.0 ) ) ) );
612  bessel = fact1/fact2;
613  }
614  else
615  {
616  arg = 8.0/modvalue;
617  value2 = arg*arg;
618 
619  shift = modvalue - 2.356194491;
620 
621  fact1 = 1.0 + value2*( 0.183105e-2
622  + value2*(-0.3516396496e-4
623  + value2*(0.2457520174e-5
624  + value2*(-0.240337019e-6 ) ) ) );
625 
626  fact2 = 0.04687499995 + value2*(-0.2002690873e-3
627  + value2*( 0.8449199096e-5
628  + value2*(-0.88228987e-6
629  + value2*0.105787412e-6 ) ) );
630 
631  bessel = std::sqrt( 0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
632  if (value < 0.0) bessel = -bessel;
633  }
634  return bessel;
635 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ BesselJzero()

G4double G4AntiNuclElastic::BesselJzero ( G4double  z)

Definition at line 541 of file G4AntiNuclElastic.cc.

542 {
543  G4double modvalue, value2, fact1, fact2, arg, shift, bessel;
544 
545  modvalue = std::fabs(value);
546 
547  if ( value < 8.0 && value > -8.0 )
548  {
549  value2 = value*value;
550 
551  fact1 = 57568490574.0 + value2*(-13362590354.0
552  + value2*( 651619640.7
553  + value2*(-11214424.18
554  + value2*( 77392.33017
555  + value2*(-184.9052456 ) ) ) ) );
556 
557  fact2 = 57568490411.0 + value2*( 1029532985.0
558  + value2*( 9494680.718
559  + value2*(59272.64853
560  + value2*(267.8532712
561  + value2*1.0 ) ) ) );
562 
563  bessel = fact1/fact2;
564  }
565  else
566  {
567  arg = 8.0/modvalue;
568 
569  value2 = arg*arg;
570 
571  shift = modvalue-0.785398164;
572 
573  fact1 = 1.0 + value2*(-0.1098628627e-2
574  + value2*(0.2734510407e-4
575  + value2*(-0.2073370639e-5
576  + value2*0.2093887211e-6 ) ) );
577  fact2 = -0.1562499995e-1 + value2*(0.1430488765e-3
578  + value2*(-0.6911147651e-5
579  + value2*(0.7621095161e-6
580  - value2*0.934945152e-7 ) ) );
581 
582  bessel = std::sqrt(0.636619772/modvalue)*(std::cos(shift)*fact1 - arg*std::sin(shift)*fact2);
583  }
584  return bessel;
585 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ BesselOneByArg()

G4double G4AntiNuclElastic::BesselOneByArg ( G4double  z)

Definition at line 639 of file G4AntiNuclElastic.cc.

640 {
641  G4double x2, result;
642 
643  if( std::fabs(x) < 0.01 )
644  {
645  x *= 0.5;
646  x2 = x*x;
647  result = (2.- x2 + x2*x2/6.)/4.;
648  }
649  else
650  {
651  result = BesselJone(x)/x;
652  }
653  return result;
654 }
Double_t x2[nxs]
G4double BesselJone(G4double z)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateAm()

G4double G4AntiNuclElastic::CalculateAm ( G4double  momentum,
G4double  n,
G4double  Z 
)

Definition at line 525 of file G4AntiNuclElastic.cc.

526 {
527  G4double k = momentum/hbarc;
528  G4double ch = 1.13 + 3.76*n*n;
529  G4double zn = 1.77*k/G4Pow::GetInstance()->A13(Z)*Bohr_radius;
530  G4double zn2 = zn*zn;
531  fAm = ch/zn2;
532 
533  return fAm;
534 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
Char_t n[5]
float hbarc
Definition: hepunit.py:265
Float_t Z
float Bohr_radius
Definition: hepunit.py:290
G4double A13(G4double A) const
Definition: G4Pow.hh:132
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateParticleBeta()

G4double G4AntiNuclElastic::CalculateParticleBeta ( const G4ParticleDefinition particle,
G4double  momentum 
)

Definition at line 502 of file G4AntiNuclElastic.cc.

504 {
505  G4double mass = particle->GetPDGMass();
506  G4double a = momentum/mass;
507  fBeta = a/std::sqrt(1+a*a);
508 
509  return fBeta;
510 }
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateZommerfeld()

G4double G4AntiNuclElastic::CalculateZommerfeld ( G4double  beta,
G4double  Z1,
G4double  Z2 
)

Definition at line 516 of file G4AntiNuclElastic.cc.

517 {
519 
520  return fZommerfeld;
521 }
Double_t Z2
int fine_structure_const
Definition: hepunit.py:287
Double_t Z1
Here is the caller graph for this function:

◆ DampFactor()

G4double G4AntiNuclElastic::DampFactor ( G4double  z)

Definition at line 482 of file G4AntiNuclElastic.cc.

483 {
484  G4double df;
485  G4double f3 = 6.; // first factorials
486 
487  if( std::fabs(x) < 0.01 )
488  {
489  df=1./(1.+x*x/f3);
490  }
491  else
492  {
493  df = x/std::sinh(x);
494  }
495  return df;
496 }
Float_t f3
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetComponentCrossSection()

G4ComponentAntiNuclNuclearXS * G4AntiNuclElastic::GetComponentCrossSection ( )
inline

Definition at line 123 of file G4AntiNuclElastic.hh.

124 {
125  return cs;
126 }
G4ComponentAntiNuclNuclearXS * cs
Here is the caller graph for this function:

◆ GetcosTeta1()

G4double G4AntiNuclElastic::GetcosTeta1 ( G4double  plab,
G4int  A 
)

Definition at line 658 of file G4AntiNuclElastic.cc.

659 {
660 
661 // G4double p0 =G4LossTableManager::Instance()->FactorForAngleLimit()*CLHEP::hbarc/CLHEP::fermi;
662  G4double p0 = 1.*hbarc/fermi;
663 //G4double cteta1 = 1.0 - p0*p0/2.0 * pow(A,2./3.)/(plab*plab);
664  G4double cteta1 = 1.0 - p0*p0/2.0 * G4Pow::GetInstance()->Z23(A)/(plab*plab);
666  if(cteta1 < -1.) cteta1 = -1.0;
667  return cteta1;
668 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
double A(double temperature)
float hbarc
Definition: hepunit.py:265
double G4double
Definition: G4Types.hh:76
G4double Z23(G4int Z) const
Definition: G4Pow.hh:154
static const double fermi
Definition: G4SIunits.hh:102
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

G4AntiNuclElastic& G4AntiNuclElastic::operator= ( const G4AntiNuclElastic right)
private

◆ SampleInvariantT()

G4double G4AntiNuclElastic::SampleInvariantT ( const G4ParticleDefinition p,
G4double  plab,
G4int  Z,
G4int  A 
)
virtual

Reimplemented from G4HadronElastic.

Definition at line 101 of file G4AntiNuclElastic.cc.

103 {
104  G4double T;
105  G4double Mproj = particle->GetPDGMass();
106  G4LorentzVector Pproj(0.,0.,Plab,std::sqrt(Plab*Plab+Mproj*Mproj));
107  G4double ctet1 = GetcosTeta1(Plab, A);
108 
109  G4double energy=Pproj.e()-Mproj;
110 
111  const G4ParticleDefinition* theParticle = particle;
112 
113  G4ParticleDefinition * theDef = 0;
114 
115  if(Z == 1 && A == 1) theDef = theProton;
116  else if (Z == 1 && A == 2) theDef = theDeuteron;
117  else if (Z == 1 && A == 3) theDef = G4Triton::Triton();
118  else if (Z == 2 && A == 3) theDef = G4He3::He3();
119  else if (Z == 2 && A == 4) theDef = theAlpha;
120 
121 
123 
124  //transform to CMS
125 
126  G4LorentzVector lv(0.0,0.0,0.0,TargMass);
127  lv += Pproj;
128  G4double S = lv.mag2()/GeV/GeV;
129 
130  G4ThreeVector bst = lv.boostVector();
131  Pproj.boost(-bst);
132 
133  G4ThreeVector p1 = Pproj.vect();
134  G4double ptot = p1.mag();
135 
136  fbst = bst;
137  fptot= ptot;
138  fTmax = 4.0*ptot*ptot;
139 
140  if(Plab/std::abs(particle->GetBaryonNumber()) < 100.*MeV) // Uzhi 24 Nov. 2011
141  {return fTmax*G4UniformRand();} // Uzhi 24 Nov. 2011
142 
143  G4double Z1 = particle->GetPDGCharge();
144  G4double Z2 = Z;
145 
146  G4double beta = CalculateParticleBeta(particle, ptot);
147  G4double n = CalculateZommerfeld( beta, Z1, Z2 );
148  G4double Am = CalculateAm( ptot, n, Z2 );
149  fWaveVector = ptot; // /hbarc;
150 
151  G4LorentzVector Fproj(0.,0.,0.,0.);
152  G4double XsCoulomb = sqr(n/fWaveVector)*pi*(1+ctet1)/(1.+Am)/(1.+2.*Am-ctet1);
153  XsCoulomb=XsCoulomb*0.38938e+6;
154 
155 
156  G4double XsElastHad =cs->GetElasticElementCrossSection(particle, energy, Z, (G4double)A);
157  G4double XstotalHad =cs->GetTotalElementCrossSection(particle, energy, Z, (G4double)A);
158 
159 
160  XsElastHad/=millibarn; XstotalHad/=millibarn;
161 
162 
163  G4double CoulombProb = XsCoulomb/(XsCoulomb+XsElastHad);
164 
165 // G4cout<<" XselastHadron " << XsElastHad << " XsCol "<< XsCoulomb <<G4endl;
166 // G4cout <<" XsTotal" << XstotalHad <<G4endl;
167 // G4cout<<"XsInel"<< XstotalHad-XsElastHad<<G4endl;
168 
169  if(G4UniformRand() < CoulombProb)
170  { // Simulation of Coulomb scattering
171 
172  G4double phi = twopi * G4UniformRand();
173  G4double Ksi = G4UniformRand();
174 
175  G4double par1 = 2.*(1.+Am)/(1.+ctet1);
176 
177 // ////sample ThetaCMS in Coulomb part
178 
179  G4double cosThetaCMS = (par1*ctet1- Ksi*(1.+2.*Am))/(par1-Ksi);
180 
181  G4double PtZ=ptot*cosThetaCMS;
182  Fproj.setPz(PtZ);
183  G4double PtProjCMS = ptot*std::sqrt(1.0 - cosThetaCMS*cosThetaCMS);
184  G4double PtX= PtProjCMS * std::cos(phi);
185  G4double PtY= PtProjCMS * std::sin(phi);
186  Fproj.setPx(PtX);
187  Fproj.setPy(PtY);
188  Fproj.setE(std::sqrt(PtX*PtX+PtY*PtY+PtZ*PtZ+Mproj*Mproj));
189  T = -(Pproj-Fproj).mag2();
190  } else
191 
192  {
194 
195 // G4double Qmax = 2.*ptot*197.33; // in fm^-1
196  G4double Qmax = 2.*3.0*197.33; // in fm^-1
197  G4double Amag = 70*70; // A1 in Magora funct:A1*exp(-q*A2)
198  G4double SlopeMag = 2.*3.0; // A2 in Magora funct:A1*exp(-q*A2)
199 
200  G4double sig_pbarp= cs->GetAntiHadronNucleonTotCrSc(particle,energy);
201 
202  fRa = 1.113*G4Pow::GetInstance()->Z13(A) -
203  0.227/G4Pow::GetInstance()->Z13(A);
204  if(A == 3) fRa=1.81;
205  if(A == 4) fRa=1.37;
206 
207  if((A>=12.) && (A<27) ) fRa=fRa*0.85;
208  if((A>=27.) && (A<48) ) fRa=fRa*0.90;
209  if((A>=48.) && (A<65) ) fRa=fRa*0.95;
210 
211  G4double Ref2 = 0;
212  G4double ceff2 =0;
213  G4double rho = 0;
214  if ((theParticle == theAProton) || (theParticle == theANeutron))
215  {
216  if(theDef == theProton)
217  {
218 // G4double Mp2=sqr(theDef->GetPDGMass()/GeV );
219 
220 // change 30 October
221 
222  if(Plab < 610.)
223  { rho = 1.3347-10.342*Plab/1000.+22.277*Plab/1000.*Plab/1000.-
224  13.634*Plab/1000.*Plab/1000.*Plab/1000. ;}
225  if((Plab < 5500.)&&(Plab >= 610.) )
226  { rho = 0.22; }
227  if((Plab >= 5500.)&&(Plab < 12300.) )
228  { rho = -0.32; }
229  if( Plab >= 12300.)
230  { rho = 0.135-2.26/(std::sqrt(S)) ;}
231 
232  Ref2 = 0.35 + 0.9/std::sqrt(std::sqrt(S-4.*0.88))+0.04*G4Log(S) ;
233  ceff2 = 0.375 - 2./S + 0.44/(sqr(S-4.)+1.5) ;
234 
235 /*
236  Ref2=0.8/std::sqrt(std::sqrt(S-4.*Mp2)) + 0.55;
237  if(S>1000.) Ref2=0.62+0.02*G4Log(S) ;
238  ceff2 = 0.035/(sqr(S-4.3)+0.4) + 0.085 * G4Log(S) ;
239  if(S>1000.) ceff2 = 0.005 * G4Log(S) + 0.29;
240 */
241 
242  Ref2=Ref2*Ref2;
243  ceff2 = ceff2*ceff2;
244 
245  SlopeMag = 0.5; // Uzhi
246  Amag= 1.; // Uzhi
247  }
248 
249  if(Z>2)
250  { Ref2 = fRa*fRa +2.48*0.01*sig_pbarp*fRa - 2.23e-6*sig_pbarp*sig_pbarp*fRa*fRa;
251  ceff2 = 0.16+3.3e-4*sig_pbarp+0.35*G4Exp(-0.03*sig_pbarp);
252  }
253  if( (Z==2)&&(A==4) )
254  { Ref2 = fRa*fRa -0.46 +0.03*sig_pbarp - 2.98e-6*sig_pbarp*sig_pbarp;
255  ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*G4Exp(-0.03*sig_pbarp);
256  }
257  if( (Z==1)&&(A==3) )
258  { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
259  ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*G4Exp(-0.03*sig_pbarp);
260  }
261  if( (Z==2)&&(A==3) )
262  { Ref2 = fRa*fRa - 1.36 + 0.025 * sig_pbarp - 3.69e-7 * sig_pbarp*sig_pbarp;
263  ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*G4Exp(-0.03*sig_pbarp);
264  }
265  if( (Z==1)&&(A==2) )
266  {
267  Ref2 = fRa*fRa - 0.28 + 0.019 * sig_pbarp + 2.06e-6 * sig_pbarp*sig_pbarp;
268  ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*G4Exp(-0.03*sig_pbarp);
269  }
270  }
271 
272  if (theParticle == theADeuteron)
273  {
274  sig_pbarp= cs->GetAntiHadronNucleonTotCrSc(particle,energy/2.);
275  Ref2 = XstotalHad/10./2./pi ;
276  if(Z>2)
277  {
278  ceff2 = 0.38 + 2.0e-4 *sig_pbarp + 0.5 * G4Exp(-0.03*sig_pbarp);
279  }
280  if(theDef == theProton)
281  {
282  ceff2 = 0.297 + 7.853e-04*sig_pbarp + 0.2899*G4Exp(-0.03*sig_pbarp);
283  }
284  if(theDef == theDeuteron)
285  {
286  ceff2 = 0.65 + 3.0e-4*sig_pbarp + 0.55 * G4Exp(-0.03*sig_pbarp);
287  }
288  if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
289  {
290  ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 * G4Exp(-0.02*sig_pbarp);
291  }
292  if(theDef == theAlpha)
293  {
294  ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 * G4Exp(-0.02*sig_pbarp);
295  }
296  }
297 
298  if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
299  {
300  sig_pbarp = cs->GetAntiHadronNucleonTotCrSc(particle,energy/3.);
301  Ref2 = XstotalHad/10./2./pi ;
302  if(Z>2)
303  {
304  ceff2 = 0.26 + 2.2e-4*sig_pbarp + 0.33*G4Exp(-0.03*sig_pbarp);
305  }
306  if(theDef == theProton)
307  {
308  ceff2 = 0.149 + 7.091e-04*sig_pbarp + 0.3743*G4Exp(-0.03*sig_pbarp);
309  }
310  if(theDef == theDeuteron)
311  {
312  ceff2 = 0.57 + 2.5e-4*sig_pbarp + 0.65 * G4Exp(-0.02*sig_pbarp);
313  }
314  if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
315  {
316  ceff2 = 0.39 + 2.7e-4*sig_pbarp + 0.7 * G4Exp(-0.02*sig_pbarp);
317  }
318  if(theDef == theAlpha)
319  {
320  ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 * G4Exp(-0.03*sig_pbarp);
321  }
322  }
323 
324 
325  if (theParticle == theAAlpha)
326  {
327  sig_pbarp = cs->GetAntiHadronNucleonTotCrSc(particle,energy/3.);
328  Ref2 = XstotalHad/10./2./pi ;
329  if(Z>2)
330  {
331  ceff2 = 0.22 + 2.0e-4*sig_pbarp + 0.2 * G4Exp(-0.03*sig_pbarp);
332  }
333  if(theDef == theProton)
334  {
335  ceff2= 0.078 + 6.657e-4*sig_pbarp + 0.3359*G4Exp(-0.03*sig_pbarp);
336  }
337  if(theDef == theDeuteron)
338  {
339  ceff2 = 0.40 + 3.5e-4 *sig_pbarp + 0.45 * G4Exp(-0.02*sig_pbarp);
340  }
341  if( (theDef == G4Triton::Triton()) || (theDef == G4He3::He3() ) )
342  {
343  ceff2 = 0.24 + 3.5e-4*sig_pbarp + 0.75 * G4Exp(-0.03*sig_pbarp);
344  }
345  if(theDef == theAlpha)
346  {
347  ceff2 = 0.17 + 3.5e-4*sig_pbarp + 0.45 * G4Exp(-0.03*sig_pbarp);
348  }
349  }
350 
351  fRef=std::sqrt(Ref2);
352  fceff = std::sqrt(ceff2);
353 // G4cout<<" Ref "<<fRef<<" c_eff "<<fceff<< " rho "<< rho<<G4endl;
354 
355 
356  G4double Q = 0.0 ;
357  G4double BracFunct;
358  const G4int maxNumberOfLoops = 10000;
359  G4int loopCounter = 0;
360  do
361  {
362  Q = -G4Log(1.-(1.- G4Exp(-SlopeMag * Qmax))* G4UniformRand() )/SlopeMag;
363  G4double x = fRef * Q;
364  BracFunct = ( ( sqr(BesselOneByArg(x))+sqr(rho/2. * BesselJzero(x)) )
365 * sqr(DampFactor(pi*fceff*Q))) /(Amag*G4Exp(-SlopeMag*Q));
366 
367  BracFunct = BracFunct * Q * sqr(sqr(fRef));
368  }
369  while ( (G4UniformRand()>BracFunct) &&
370  ++loopCounter < maxNumberOfLoops ); /* Loop checking, 10.08.2015, A.Ribon */
371  if ( loopCounter >= maxNumberOfLoops ) {
372  fTetaCMS = 0.0;
373  return 0.0;
374  }
375 
376  T= sqr(Q);
377  T*=3.893913e+4; // fm -> MeV^2
378  }
379 
380  G4double cosTet=1.0-T/(2.*ptot*ptot);
381  if(cosTet > 1.0 ) cosTet= 1.; // Uzhi 30 Nov.
382  if(cosTet < -1.0 ) cosTet=-1.; // Uzhi 30 Nov.
383  fTetaCMS=std::acos(cosTet);
384 
385  return T;
386 }
Double_t Z2
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
static const double MeV
Definition: G4SIunits.hh:211
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * theAHe3
G4ParticleDefinition * theADeuteron
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
double S(double temp)
G4ParticleDefinition * theDeuteron
G4ParticleDefinition * theANeutron
G4ParticleDefinition * theATriton
static double Q[]
G4double BesselOneByArg(G4double z)
int G4int
Definition: G4Types.hh:78
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
Char_t n[5]
#define G4UniformRand()
Definition: Randomize.hh:97
double energy
Definition: plottest35.C:25
double A(double temperature)
Float_t Z
double mag() const
static const double twopi
Definition: G4SIunits.hh:75
static G4Triton * Triton()
Definition: G4Triton.cc:95
static const double GeV
Definition: G4SIunits.hh:214
G4ParticleDefinition * theProton
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
G4ParticleDefinition * theAProton
G4double BesselJzero(G4double z)
G4ComponentAntiNuclNuclearXS * cs
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
static const double pi
Definition: G4SIunits.hh:74
G4double DampFactor(G4double z)
G4ParticleDefinition * theAAlpha
static const double millibarn
Definition: G4SIunits.hh:105
G4ParticleDefinition * theAlpha
T sqr(const T &x)
Definition: templates.hh:145
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
double G4double
Definition: G4Types.hh:76
static G4He3 * He3()
Definition: G4He3.cc:94
G4double GetcosTeta1(G4double plab, G4int A)
Double_t Z1
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SampleThetaCMS()

G4double G4AntiNuclElastic::SampleThetaCMS ( const G4ParticleDefinition p,
G4double  plab,
G4int  Z,
G4int  A 
)

Definition at line 390 of file G4AntiNuclElastic.cc.

392 {
393  G4double T;
394  T = SampleInvariantT( p, plab, Z, A);
395 
396  // NaN finder
397  if(!(T < 0.0 || T >= 0.0))
398  {
399  if (verboseLevel > 0)
400  {
401  G4cout << "G4DiffuseElastic:WARNING: A = " << A
402  << " mom(GeV)= " << plab/GeV
403  << " S-wave will be sampled"
404  << G4endl;
405  }
406  T = G4UniformRand()*fTmax;
407 
408  }
409 
410  if(fptot > 0.) // Uzhi 24 Nov. 2011
411  {
412  G4double cosTet=1.0-T/(2.*fptot*fptot);
413  if(cosTet > 1.0 ) cosTet= 1.; // Uzhi 30 Nov.
414  if(cosTet < -1.0 ) cosTet=-1.; // Uzhi 30 Nov.
415  fTetaCMS=std::acos(cosTet);
416  return fTetaCMS;
417  } else // Uzhi 24 Nov. 2011
418  { // Uzhi 24 Nov. 2011
419  return 2.*G4UniformRand()-1.; // Uzhi 24 Nov. 2011
420  } // Uzhi 24 Nov. 2011
421 }
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
static const double GeV
Definition: G4SIunits.hh:214
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ SampleThetaLab()

G4double G4AntiNuclElastic::SampleThetaLab ( const G4ParticleDefinition p,
G4double  plab,
G4int  Z,
G4int  A 
)

Definition at line 426 of file G4AntiNuclElastic.cc.

428 {
429  G4double T;
430  T = SampleInvariantT( p, plab, Z, A);
431 
432  // NaN finder
433  if(!(T < 0.0 || T >= 0.0))
434  {
435  if (verboseLevel > 0)
436  {
437  G4cout << "G4DiffuseElastic:WARNING: A = " << A
438  << " mom(GeV)= " << plab/GeV
439  << " S-wave will be sampled"
440  << G4endl;
441  }
442  T = G4UniformRand()*fTmax;
443  }
444 
445  G4double phi = G4UniformRand()*twopi;
446 
447  G4double cost(1.);
448  if(fTmax > 0.) {cost = 1. - 2.0*T/fTmax;} // Uzhi 24 Nov. 2011
449 
450  G4double sint;
451  if( cost >= 1.0 )
452  {
453  cost = 1.0;
454  sint = 0.0;
455  }
456  else if( cost <= -1.0)
457  {
458  cost = -1.0;
459  sint = 0.0;
460  }
461  else
462  {
463  sint = std::sqrt((1.0-cost)*(1.0+cost));
464  }
465 
466  G4double m1 = p->GetPDGMass();
467  G4ThreeVector v(sint*std::cos(phi),sint*std::sin(phi),cost);
468  v *= fptot;
469  G4LorentzVector nlv(v.x(),v.y(),v.z(),std::sqrt(fptot*fptot + m1*m1));
470 
471  nlv.boost(fbst);
472 
473  G4ThreeVector np = nlv.vect();
474  G4double theta = np.theta();
475  fThetaLab = theta;
476 
477  return theta;
478 }
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
double theta() const
HepLorentzVector & boost(double, double, double)
static const double twopi
Definition: G4SIunits.hh:75
static const double GeV
Definition: G4SIunits.hh:214
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

Member Data Documentation

◆ cs

G4ComponentAntiNuclNuclearXS* G4AntiNuclElastic::cs
private

Definition at line 91 of file G4AntiNuclElastic.hh.

◆ fAm

G4double G4AntiNuclElastic::fAm
private

Definition at line 99 of file G4AntiNuclElastic.hh.

◆ fBeta

G4double G4AntiNuclElastic::fBeta
private

Definition at line 97 of file G4AntiNuclElastic.hh.

◆ fbst

G4ThreeVector G4AntiNuclElastic::fbst
private

Definition at line 104 of file G4AntiNuclElastic.hh.

◆ fceff

G4double G4AntiNuclElastic::fceff
private

Definition at line 102 of file G4AntiNuclElastic.hh.

◆ fParticle

const G4ParticleDefinition* G4AntiNuclElastic::fParticle
private

Definition at line 95 of file G4AntiNuclElastic.hh.

◆ fptot

G4double G4AntiNuclElastic::fptot
private

Definition at line 105 of file G4AntiNuclElastic.hh.

◆ fRa

G4double G4AntiNuclElastic::fRa
private

Definition at line 100 of file G4AntiNuclElastic.hh.

◆ fRef

G4double G4AntiNuclElastic::fRef
private

Definition at line 101 of file G4AntiNuclElastic.hh.

◆ fTetaCMS

G4double G4AntiNuclElastic::fTetaCMS
private

Definition at line 93 of file G4AntiNuclElastic.hh.

◆ fThetaLab

G4double G4AntiNuclElastic::fThetaLab
private

Definition at line 94 of file G4AntiNuclElastic.hh.

◆ fTmax

G4double G4AntiNuclElastic::fTmax
private

Definition at line 106 of file G4AntiNuclElastic.hh.

◆ fWaveVector

G4double G4AntiNuclElastic::fWaveVector
private

Definition at line 96 of file G4AntiNuclElastic.hh.

◆ fZommerfeld

G4double G4AntiNuclElastic::fZommerfeld
private

Definition at line 98 of file G4AntiNuclElastic.hh.

◆ theAAlpha

G4ParticleDefinition* G4AntiNuclElastic::theAAlpha
private

Definition at line 112 of file G4AntiNuclElastic.hh.

◆ theADeuteron

G4ParticleDefinition* G4AntiNuclElastic::theADeuteron
private

Definition at line 110 of file G4AntiNuclElastic.hh.

◆ theAHe3

G4ParticleDefinition* G4AntiNuclElastic::theAHe3
private

Definition at line 113 of file G4AntiNuclElastic.hh.

◆ theAlpha

G4ParticleDefinition* G4AntiNuclElastic::theAlpha
private

Definition at line 118 of file G4AntiNuclElastic.hh.

◆ theANeutron

G4ParticleDefinition* G4AntiNuclElastic::theANeutron
private

Definition at line 109 of file G4AntiNuclElastic.hh.

◆ theAProton

G4ParticleDefinition* G4AntiNuclElastic::theAProton
private

Definition at line 108 of file G4AntiNuclElastic.hh.

◆ theATriton

G4ParticleDefinition* G4AntiNuclElastic::theATriton
private

Definition at line 111 of file G4AntiNuclElastic.hh.

◆ theDeuteron

G4ParticleDefinition* G4AntiNuclElastic::theDeuteron
private

Definition at line 117 of file G4AntiNuclElastic.hh.

◆ theNeutron

G4ParticleDefinition* G4AntiNuclElastic::theNeutron
private

Definition at line 116 of file G4AntiNuclElastic.hh.

◆ theProton

G4ParticleDefinition* G4AntiNuclElastic::theProton
private

Definition at line 115 of file G4AntiNuclElastic.hh.


The documentation for this class was generated from the following files: