Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CexmcChargeExchangeProductionModel< OutputParticle > Class Template Reference

#include <CexmcChargeExchangeProductionModel.hh>

Inheritance diagram for CexmcChargeExchangeProductionModel< OutputParticle >:
Collaboration diagram for CexmcChargeExchangeProductionModel< OutputParticle >:

Public Member Functions

 CexmcChargeExchangeProductionModel ()
 
 ~CexmcChargeExchangeProductionModel ()
 
G4HadFinalState * ApplyYourself (const G4HadProjectile &projectile, G4Nucleus &targetNucleus)
 
- Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
 
virtual ~G4HadronicInteraction ()
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
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)
 
G4int GetVerboseLevel () const
 
void SetVerboseLevel (G4int value)
 
const G4String & GetModelName () 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
 
virtual const std::pair
< G4double, G4double > 
GetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double,
G4double > 
GetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void ModelDescription (std::ostream &outFile) const
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void InitialiseModel ()
 
- Public Member Functions inherited from CexmcProductionModel
 CexmcProductionModel (const G4String &name="unspecified", G4bool fermiMotionIsOn=false)
 
virtual ~CexmcProductionModel ()
 
void ApplyFermiMotion (G4bool on, G4bool fromMessenger=true)
 
void SetAngularRange (G4double top, G4double bottom, G4int nmbOfDivs)
 
void SetAngularRanges (const CexmcAngularRangeList &angularRanges_)
 
void AddAngularRange (G4double top, G4double bottom, G4int nmbOfDivs)
 
void SetProductionModelData (const CexmcProductionModelData &productionModelData_)
 
void PrintInitialData (void) const
 
const CexmcAngularRangeList & GetAngularRanges (void) const
 
const CexmcAngularRangeList & GetTriggeredAngularRanges (void) const
 
const CexmcProductionModelData & GetProductionModelData (void) const
 
G4bool IsFermiMotionOn (void) const
 
void SetTriggeredAngularRanges (G4double opCosThetaSCM)
 
const G4String & GetName (void) const
 
G4ParticleDefinition * GetIncidentParticle (void) const
 
G4ParticleDefinition * GetNucleusParticle (void) const
 
G4ParticleDefinition * GetOutputParticle (void) const
 
G4ParticleDefinition * GetNucleusOutputParticle (void) const
 

Additional Inherited Members

- Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
 
G4bool IsBlocked () const
 
void Block ()
 
- Protected Member Functions inherited from CexmcProductionModel
virtual void FermiMotionStatusChangeHook (void)
 
- Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
 
G4int verboseLevel
 
G4double theMinEnergy
 
G4double theMaxEnergy
 
G4bool isBlocked
 
- Protected Attributes inherited from CexmcProductionModel
G4String name
 
G4bool fermiMotionIsOn
 
CexmcAngularRangeList angularRanges
 
CexmcAngularRangeList angularRangesRef
 
CexmcAngularRangeList triggeredAngularRanges
 
CexmcProductionModelData productionModelData
 
G4ParticleDefinition * incidentParticle
 
G4ParticleDefinition * nucleusParticle
 
G4ParticleDefinition * outputParticle
 
G4ParticleDefinition * nucleusOutputParticle
 

Detailed Description

template<typename OutputParticle>
class CexmcChargeExchangeProductionModel< OutputParticle >

Definition at line 60 of file CexmcChargeExchangeProductionModel.hh.

Constructor & Destructor Documentation

template<typename OutputParticle >
CexmcChargeExchangeProductionModel< OutputParticle >::CexmcChargeExchangeProductionModel ( )

Definition at line 81 of file CexmcChargeExchangeProductionModel.hh.

81  :
84  nucleusParticleMass( 0 ), phaseSpaceGenerator( NULL )
85 {
88  outputParticle = OutputParticle::Definition();
90 
91  nucleusParticleMass = nucleusParticle->GetPDGMass();
92 
97 
99 
100  inVec.push_back( &productionModelData.incidentParticleSCM );
101  inVec.push_back( &productionModelData.nucleusParticleSCM );
102 
104 
105  outVec.push_back( CexmcPhaseSpaceOutVectorElement(
107  outputParticle->GetPDGMass() ) );
108  outVec.push_back( CexmcPhaseSpaceOutVectorElement(
111 
112 #ifdef CEXMC_USE_GENBOD
113  phaseSpaceGenerator = new CexmcGenbod;
114 #else
115  phaseSpaceGenerator = new CexmcReimplementedGenbod;
116 #endif
117 
118  phaseSpaceGenerator->SetParticles( inVec, outVec );
119 }
const G4String CexmcChargeExchangeInteractionName("Cexmc"+CexmcChargeExchangeProductionModelName)
std::vector< const G4LorentzVector * > CexmcPhaseSpaceInVector
const G4ParticleDefinition * nucleusParticle
G4ParticleDefinition * nucleusOutputParticle
std::vector< CexmcPhaseSpaceOutVectorElement > CexmcPhaseSpaceOutVector
const G4ParticleDefinition * incidentParticle
CexmcProductionModelData productionModelData
const G4ParticleDefinition * outputParticle
static G4Proton * Definition()
Definition: G4Proton.cc:49
CexmcProductionModel(const G4String &name="unspecified", G4bool fermiMotionIsOn=false)
G4ParticleDefinition * nucleusParticle
G4HadronicInteraction(const G4String &modelName="HadronicModel")
G4double GetPDGMass() const
G4ParticleDefinition * incidentParticle
static G4PionMinus * Definition()
Definition: G4PionMinus.cc:52
static G4Neutron * Definition()
Definition: G4Neutron.cc:54
const G4ParticleDefinition * nucleusOutputParticle
void SetParticles(const CexmcPhaseSpaceInVector &inVec_, const CexmcPhaseSpaceOutVector &outVec_)
const G4String CexmcChargeExchangeProductionModelName("ChargeExchange")
G4ParticleDefinition * outputParticle

Here is the call graph for this function:

template<typename OutputParticle >
CexmcChargeExchangeProductionModel< OutputParticle >::~CexmcChargeExchangeProductionModel ( )

Definition at line 124 of file CexmcChargeExchangeProductionModel.hh.

125 {
126  delete phaseSpaceGenerator;
127 }

Member Function Documentation

template<typename OutputParticle >
G4HadFinalState * CexmcChargeExchangeProductionModel< OutputParticle >::ApplyYourself ( const G4HadProjectile &  projectile,
G4Nucleus &  targetNucleus 
)
virtual

Implements G4HadronicInteraction.

Definition at line 132 of file CexmcChargeExchangeProductionModel.hh.

134 {
136 
137  G4double kinEnergy( projectile.GetKineticEnergy() );
138  G4HadProjectile & theProjectile( const_cast< G4HadProjectile & >(
139  projectile ) );
140  const G4LorentzRotation & projToLab(
141  const_cast< const G4LorentzRotation & >(
142  theProjectile.GetTrafoToLab() ) );
148  productionModelData.nucleusParticleLAB.setE( nucleusParticleMass );
149 
150  if ( fermiMotionIsOn )
151  {
152  G4ThreeVector targetNucleusMomentum(
153  targetNucleus.GetFermiMomentum() );
154  G4double targetNucleusEnergy(
155  std::sqrt( targetNucleusMomentum.mag2() +
156  nucleusParticleMass * nucleusParticleMass ) );
158  targetNucleusMomentum, targetNucleusEnergy );
159  }
163  G4ThreeVector boostVec( lVecSum.boostVector() );
164 
169 
172 
173  triggeredAngularRanges.clear();
174 
175  if ( ! phaseSpaceGenerator->CheckKinematics() )
176  {
177  theParticleChange.SetEnergyChange( kinEnergy );
179  projectile.Get4Momentum().vect().unit());
180  return &theParticleChange;
181  }
182 
183  do
184  {
185  phaseSpaceGenerator->Generate();
187  for ( CexmcAngularRangeList::iterator k( angularRanges.begin() );
188  k != angularRanges.end(); ++k )
189  {
190  if ( cosTheta <= k->top && cosTheta > k->bottom )
192  k->top, k->bottom, k->index ) );
193  }
194  } while ( triggeredAngularRanges.empty() );
195 
200 
203 
206 
207  G4DynamicParticle * secOutParticle( new G4DynamicParticle(
210  theParticleChange.AddSecondary( secOutParticle );
211  G4DynamicParticle * secNeutron( new G4DynamicParticle(
214  theParticleChange.AddSecondary( secNeutron );
215 
216  /* projectile->GetDefinition() shall always be identical to incidentParticle
217  * as far as CexmcHadronicProcess::IsApplicable() will check that only
218  * incidentParticle is allowed. Here is mostly unnecessary assignment. */
220 
221  return &theParticleChange;
222 }
G4ParticleDefinition * nucleusOutputParticle
const G4ParticleDefinition * incidentParticle
CexmcProductionModelData productionModelData
void SetStatusChange(G4HadFinalStateStatus aS)
Hep3Vector vect() const
const G4ParticleDefinition * GetDefinition() const
HepLorentzVector & boost(double, double, double)
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
void SetEnergyChange(G4double anEnergy)
G4ThreeVector GetFermiMomentum()
Definition: G4Nucleus.cc:412
Hep3Vector unit() const
CexmcAngularRangeList angularRanges
CexmcAngularRangeList triggeredAngularRanges
HepLorentzVector & transform(const HepRotation &)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
virtual G4bool CheckKinematics(void)
double G4double
Definition: G4Types.hh:76
void SetMomentumChange(const G4ThreeVector &aV)
virtual G4double Generate(void)=0
G4ParticleDefinition * outputParticle
double cosTheta() const
CLHEP::HepLorentzVector G4LorentzVector

Here is the call graph for this function:


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