Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
CexmcChargeExchangeProductionModel< OutputParticle > Class Template Reference

#include <CexmcChargeExchangeProductionModel.hh>

Inheritance diagram for CexmcChargeExchangeProductionModel< OutputParticle >:
G4HadronicInteraction CexmcProductionModel

Public Member Functions

 CexmcChargeExchangeProductionModel ()
 
 ~CexmcChargeExchangeProductionModel ()
 
G4HadFinalStateApplyYourself (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 &, 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, G4double
GetFatalEnergyCheckLevels () const
 
virtual std::pair< G4double,
G4double
GetEnergyMomentumCheckLevels () const
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
virtual void ModelDescription (std::ostream &outFile) const
 
- 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 CexmcAngularRangeListGetAngularRanges (void) const
 
const CexmcAngularRangeListGetTriggeredAngularRanges (void) const
 
const CexmcProductionModelDataGetProductionModelData (void) const
 
G4bool IsFermiMotionOn (void) const
 
void SetTriggeredAngularRanges (G4double opCosThetaSCM)
 
const G4StringGetName (void) const
 
G4ParticleDefinitionGetIncidentParticle (void) const
 
G4ParticleDefinitionGetNucleusParticle (void) const
 
G4ParticleDefinitionGetOutputParticle (void) const
 
G4ParticleDefinitionGetNucleusOutputParticle (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
 
G4ParticleDefinitionincidentParticle
 
G4ParticleDefinitionnucleusParticle
 
G4ParticleDefinitionoutputParticle
 
G4ParticleDefinitionnucleusOutputParticle
 

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.

References G4PionMinus::Definition(), G4Proton::Definition(), G4Neutron::Definition(), G4ParticleDefinition::GetPDGMass(), CexmcProductionModelData::incidentParticle, CexmcProductionModel::incidentParticle, CexmcProductionModelData::incidentParticleSCM, CexmcProductionModelData::nucleusOutputParticle, CexmcProductionModel::nucleusOutputParticle, CexmcProductionModelData::nucleusOutputParticleSCM, CexmcProductionModelData::nucleusParticle, CexmcProductionModel::nucleusParticle, CexmcProductionModelData::nucleusParticleSCM, CexmcProductionModelData::outputParticle, CexmcProductionModel::outputParticle, CexmcProductionModelData::outputParticleSCM, CexmcProductionModel::productionModelData, and CexmcPhaseSpaceGenerator::SetParticles().

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
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.

References CLHEP::HepLorentzVector::boostVector(), G4HadFinalState::Clear(), G4HadProjectile::Get4Momentum(), G4HadProjectile::GetDefinition(), G4Nucleus::GetFermiMomentum(), G4HadProjectile::GetKineticEnergy(), CLHEP::HepLorentzVector::setPx(), stopAndKill, CLHEP::HepLorentzVector::transform(), CLHEP::Hep3Vector::unit(), and CLHEP::HepLorentzVector::vect().

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:398
Hep3Vector unit() const
CexmcAngularRangeList angularRanges
CexmcAngularRangeList triggeredAngularRanges
HepLorentzVector & transform(const HepRotation &)
virtual G4bool CheckKinematics(void)
double G4double
Definition: G4Types.hh:76
void SetMomentumChange(const G4ThreeVector &aV)
void AddSecondary(G4DynamicParticle *aP)
virtual G4double Generate(void)=0
G4ParticleDefinition * outputParticle
double cosTheta() const
CLHEP::HepLorentzVector G4LorentzVector

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