G4TripathiCrossSection Class Reference

#include <G4TripathiCrossSection.hh>

Inheritance diagram for G4TripathiCrossSection:

G4VCrossSectionDataSet

Public Member Functions

 G4TripathiCrossSection ()
 ~G4TripathiCrossSection ()
virtual G4bool IsElementApplicable (const G4DynamicParticle *aPart, G4int Z, const G4Material *)
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)

Detailed Description

Definition at line 42 of file G4TripathiCrossSection.hh.


Constructor & Destructor Documentation

G4TripathiCrossSection::G4TripathiCrossSection (  ) 

Definition at line 43 of file G4TripathiCrossSection.cc.

00044  : G4VCrossSectionDataSet("Tripathi")
00045 {}

G4TripathiCrossSection::~G4TripathiCrossSection (  ) 

Definition at line 47 of file G4TripathiCrossSection.cc.

00048 {}


Member Function Documentation

G4double G4TripathiCrossSection::GetElementCrossSection ( const G4DynamicParticle ,
G4int  Z,
const G4Material  
) [virtual]

Reimplemented from G4VCrossSectionDataSet.

Definition at line 63 of file G4TripathiCrossSection.cc.

References DBL_MIN, G4lrint(), G4DynamicParticle::Get4Momentum(), G4NistManager::GetAtomicMassAmu(), G4ParticleDefinition::GetBaryonNumber(), G4DynamicParticle::GetDefinition(), G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4DynamicParticle::GetKineticEnergy(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGCharge(), G4NistManager::Instance(), and G4INCL::Math::pi.

00065 {
00066   G4double result = 0.;
00067   G4double targetAtomicNumber = G4NistManager::Instance()->GetAtomicMassAmu(ZZ);
00068   G4double nTargetProtons = ZZ;
00069   
00070   G4double kineticEnergy = aPart->GetKineticEnergy()/MeV;
00071   G4double nProjProtons = aPart->GetDefinition()->GetPDGCharge();
00072   G4double projectileAtomicNumber = 
00073     aPart->GetDefinition()->GetBaryonNumber();
00074 
00075   const G4double nuleonRadius=1.1E-15;
00076   const G4double myNuleonRadius=1.36E-15;
00077   
00078   // needs target mass
00079   G4double targetMass = 
00080      G4ParticleTable::GetParticleTable()->GetIonTable()
00081          ->GetIonMass(G4lrint(nTargetProtons), G4lrint(targetAtomicNumber));
00082   G4LorentzVector pTarget(0,0,0,targetMass); 
00083   G4LorentzVector pProjectile(aPart->Get4Momentum());
00084   pTarget = pTarget+pProjectile;
00085   G4double E_cm = (pTarget.mag()-targetMass-pProjectile.m())/MeV;
00086   if(E_cm <= DBL_MIN) { return result; }
00087   // done
00088   G4double r_rms_p = 0.6 * myNuleonRadius * 
00089                                    std::pow(projectileAtomicNumber, 1./3.);
00090   G4double r_rms_t = 0.6 * myNuleonRadius * 
00091                                    std::pow(targetAtomicNumber, 1./3.);
00092   
00093   // done
00094   G4double r_p = 1.29*r_rms_p/nuleonRadius ;
00095   G4double r_t = 1.29*r_rms_t/nuleonRadius;
00096   
00097   // done
00098   G4double Radius = r_p + r_t + 
00099            1.2*(std::pow(targetAtomicNumber, 1./3.) + 
00100             std::pow(projectileAtomicNumber, 1./3.))/std::pow(E_cm, 1./3.);
00101 
00102   //done
00103   G4double B = 1.44*nProjProtons*nTargetProtons/Radius;
00104   if(E_cm <= B) return result; 
00105   // done
00106   G4double Energy = kineticEnergy/projectileAtomicNumber;
00107 
00108   // done
00109   //
00110   // Note that this correction to G4TripathiCrossSection is just to accurately
00111   // reflect Tripathi's algorithm.  However, if you're using alpha 
00112   // particles/protons consider using the more accurate 
00113   // G4TripathiLightCrossSection, which Tripathi developed specifically for 
00114   // light systems.
00115   //
00116 
00117   G4double D;
00118   if (nProjProtons==1 && projectileAtomicNumber==1)
00119   {
00120     D = 2.05;
00121   }
00122   else if (nProjProtons==2 && projectileAtomicNumber==4)
00123   {
00124     D = 2.77-(8.0E-3*targetAtomicNumber)+
00125           (1.8E-5*targetAtomicNumber*targetAtomicNumber)
00126                    - 0.8/(1+std::exp((250.-Energy)/75.));
00127   }
00128   else
00129   {
00130   //
00131   // This is the original value used in the G4TripathiCrossSection 
00132   // implementation, and was used for all projectile/target conditions.  
00133   // I'm not touching this, although judging from Tripathi's paper, this is 
00134   // valid for cases where the nucleon density changes little with A.
00135   // 
00136     D = 1.75;
00137   }
00138   // done
00139   G4double C_E = D * (1-std::exp(-Energy/40.)) - 
00140        0.292*std::exp(-Energy/792.)*std::cos(0.229*std::pow(Energy, 0.453));
00141   
00142   // done
00143   G4double S = std::pow(projectileAtomicNumber, 1./3.)*
00144                std::pow(targetAtomicNumber, 1./3.)/
00145                (std::pow(projectileAtomicNumber, 1./3.) + 
00146                std::pow(targetAtomicNumber, 1./3.)); 
00147   
00148   // done
00149   G4double deltaE = 1.85*S + 0.16*S/std::pow(E_cm,1./3.) - C_E +
00150                     0.91*(targetAtomicNumber-2.*nTargetProtons)*nProjProtons/
00151                     (targetAtomicNumber*projectileAtomicNumber);
00152   
00153   // done 
00154   result = pi * nuleonRadius*nuleonRadius * 
00155            std::pow(( std::pow(targetAtomicNumber, 1./3.) + 
00156                  std::pow(projectileAtomicNumber, 1./3.) + deltaE),2.) * 
00157                  (1-B/E_cm);
00158   
00159   if(result < 0.) { result = 0.; }
00160   return result*m2;
00161 
00162 }

G4bool G4TripathiCrossSection::IsElementApplicable ( const G4DynamicParticle aPart,
G4int  Z,
const G4Material  
) [virtual]

Reimplemented from G4VCrossSectionDataSet.

Definition at line 51 of file G4TripathiCrossSection.cc.

References G4ParticleDefinition::GetBaryonNumber(), G4DynamicParticle::GetDefinition(), and G4DynamicParticle::GetKineticEnergy().

00053 {
00054   G4bool result = false;
00055   if ( (aPart->GetDefinition()->GetBaryonNumber()>2.5) &&
00056        ( aPart->GetKineticEnergy()/aPart->GetDefinition()->GetBaryonNumber()<1*GeV) ) {
00057     result = true;
00058   }
00059   return result;
00060 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:34 2013 for Geant4 by  doxygen 1.4.7