G4RPGPionSuppression Class Reference

#include <G4RPGPionSuppression.hh>

Inheritance diagram for G4RPGPionSuppression:

G4RPGReaction

Public Member Functions

 G4RPGPionSuppression ()
G4bool ReactionStage (const G4HadProjectile *, G4ReactionProduct &, G4bool &, const G4DynamicParticle *, G4ReactionProduct &, G4bool &, const G4Nucleus &, G4ReactionProduct &, G4FastVector< G4ReactionProduct, 256 > &, G4int &, G4bool, G4ReactionProduct &)

Detailed Description

Definition at line 48 of file G4RPGPionSuppression.hh.


Constructor & Destructor Documentation

G4RPGPionSuppression::G4RPGPionSuppression (  ) 

Definition at line 37 of file G4RPGPionSuppression.cc.

00038   : G4RPGReaction() {}


Member Function Documentation

G4bool G4RPGPionSuppression::ReactionStage ( const G4HadProjectile ,
G4ReactionProduct ,
G4bool ,
const G4DynamicParticle ,
G4ReactionProduct ,
G4bool ,
const G4Nucleus ,
G4ReactionProduct ,
G4FastVector< G4ReactionProduct, 256 > &  ,
G4int ,
G4bool  ,
G4ReactionProduct  
)

Reimplemented from G4RPGReaction.

Definition at line 42 of file G4RPGPionSuppression.cc.

References G4AntiLambda::AntiLambda(), G4AntiNeutron::AntiNeutron(), G4AntiOmegaMinus::AntiOmegaMinus(), G4AntiProton::AntiProton(), G4AntiSigmaMinus::AntiSigmaMinus(), G4AntiSigmaPlus::AntiSigmaPlus(), G4AntiXiMinus::AntiXiMinus(), G4AntiXiZero::AntiXiZero(), G4UniformRand, G4Nucleus::GetA_asInt(), G4ReactionProduct::GetDefinition(), G4ReactionProduct::GetMass(), G4ParticleDefinition::GetPDGMass(), G4ReactionProduct::GetTotalEnergy(), G4ReactionProduct::GetTotalMomentum(), G4Nucleus::GetZ_asInt(), G4Neutron::Neutron(), G4PionMinus::PionMinus(), G4PionPlus::PionPlus(), G4PionZero::PionZero(), G4Proton::Proton(), and G4ReactionProduct::SetDefinitionAndUpdateE().

00054 {
00055   // This code was originally in the fortran code TWOCLU
00056   //
00057   // Suppress charged pions, for various reasons
00058   //
00059   G4double mOriginal = modifiedOriginal.GetMass()/GeV;
00060   G4double etOriginal = modifiedOriginal.GetTotalEnergy()/GeV;
00061   G4double targetMass = targetParticle.GetDefinition()->GetPDGMass()/GeV;
00062   G4double cmEnergy = std::sqrt( mOriginal*mOriginal + targetMass*targetMass +
00063                            2.0*targetMass*etOriginal ); 
00064   G4double eAvailable = cmEnergy - mOriginal - targetMass;
00065   for (G4int i = 0; i < vecLen; i++) eAvailable -= vec[i]->GetMass()/GeV;
00066 
00067   const G4double atomicWeight = targetNucleus.GetA_asInt();
00068   const G4double atomicNumber = targetNucleus.GetZ_asInt();
00069   const G4double pOriginal = modifiedOriginal.GetTotalMomentum()/GeV;
00070     
00071   G4ParticleDefinition *aPiMinus = G4PionMinus::PionMinus();
00072   G4ParticleDefinition *aPiPlus = G4PionPlus::PionPlus();
00073   G4ParticleDefinition* aPiZero = G4PionZero::PionZero();
00074   G4ParticleDefinition *aProton = G4Proton::Proton();
00075   G4ParticleDefinition *aNeutron = G4Neutron::Neutron();
00076   G4double piMass = aPiPlus->GetPDGMass()/GeV;
00077   G4double nucleonMass = aNeutron->GetPDGMass()/GeV;
00078     
00079   const G4bool antiTest =
00080     modifiedOriginal.GetDefinition() != G4AntiProton::AntiProton() &&
00081     modifiedOriginal.GetDefinition() != G4AntiNeutron::AntiNeutron() &&
00082     modifiedOriginal.GetDefinition() != G4AntiLambda::AntiLambda() &&
00083     modifiedOriginal.GetDefinition() != G4AntiSigmaPlus::AntiSigmaPlus() &&
00084     modifiedOriginal.GetDefinition() != G4AntiSigmaMinus::AntiSigmaMinus() &&
00085     modifiedOriginal.GetDefinition() != G4AntiXiZero::AntiXiZero() &&
00086     modifiedOriginal.GetDefinition() != G4AntiXiMinus::AntiXiMinus() &&
00087     modifiedOriginal.GetDefinition() != G4AntiOmegaMinus::AntiOmegaMinus();
00088 
00089   if( antiTest && (
00090         currentParticle.GetDefinition() == aPiPlus ||
00091         currentParticle.GetDefinition() == aPiZero ||
00092         currentParticle.GetDefinition() == aPiMinus ) &&
00093       ( G4UniformRand() <= (10.0-pOriginal)/6.0 ) &&
00094       ( G4UniformRand() <= atomicWeight/300.0 ) )
00095   {
00096     if (eAvailable > nucleonMass - piMass) {
00097       if( G4UniformRand() > atomicNumber/atomicWeight )
00098         currentParticle.SetDefinitionAndUpdateE( aNeutron );
00099       else
00100         currentParticle.SetDefinitionAndUpdateE( aProton );
00101       incidentHasChanged = true;
00102     }
00103   }
00104 
00105   if( antiTest && (
00106         targetParticle.GetDefinition() == aPiPlus ||
00107         targetParticle.GetDefinition() == aPiZero ||
00108         targetParticle.GetDefinition() == aPiMinus ) &&
00109       ( G4UniformRand() <= (10.0-pOriginal)/6.0 ) &&
00110       ( G4UniformRand() <= atomicWeight/300.0 ) )
00111   {
00112     if (eAvailable > nucleonMass - piMass) {
00113       if( G4UniformRand() > atomicNumber/atomicWeight )
00114         targetParticle.SetDefinitionAndUpdateE( aNeutron );
00115       else
00116         targetParticle.SetDefinitionAndUpdateE( aProton );
00117       targetHasChanged = true;
00118     }
00119   }
00120 
00121   for( G4int i=0; i<vecLen; ++i )
00122   {
00123     if( antiTest && (
00124           vec[i]->GetDefinition() == aPiPlus ||
00125           vec[i]->GetDefinition() == aPiZero ||
00126           vec[i]->GetDefinition() == aPiMinus ) &&
00127         ( G4UniformRand() <= (10.0-pOriginal)/6.0 ) &&
00128         ( G4UniformRand() <= atomicWeight/300.0 ) )
00129     {
00130       if (eAvailable > nucleonMass - piMass) {
00131         if( G4UniformRand() > atomicNumber/atomicWeight )
00132           vec[i]->SetDefinitionAndUpdateE( aNeutron );
00133         else
00134           vec[i]->SetDefinitionAndUpdateE( aProton );
00135       }
00136     }
00137   }
00138 
00139   return true;
00140 }


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