Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ElectroVDNuclearModel Class Reference

#include <G4ElectroVDNuclearModel.hh>

Inheritance diagram for G4ElectroVDNuclearModel:

Public Member Functions

 G4ElectroVDNuclearModel ()
 ~G4ElectroVDNuclearModel ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
virtual void ModelDescription (std::ostream &outFile) const
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 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
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
virtual void InitialiseModel ()
 G4HadronicInteraction (const G4HadronicInteraction &right)=delete
const G4HadronicInteractionoperator= (const G4HadronicInteraction &right)=delete
G4bool operator== (const G4HadronicInteraction &right) const =delete
G4bool operator!= (const G4HadronicInteraction &right) const =delete

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 49 of file G4ElectroVDNuclearModel.hh.

Constructor & Destructor Documentation

◆ G4ElectroVDNuclearModel()

G4ElectroVDNuclearModel::G4ElectroVDNuclearModel ( )

Definition at line 68 of file G4ElectroVDNuclearModel.cc.

69 : G4HadronicInteraction("G4ElectroVDNuclearModel"),
70 leptonKE(0.0), photonEnergy(0.0), photonQ2(0.0), secID(-1)
71{
72 SetMinEnergy(0.0);
73 SetMaxEnergy(1*PeV);
74
75 electroXS =
76 (G4ElectroNuclearCrossSection*)G4CrossSectionDataSetRegistry::Instance()->
77 GetCrossSectionDataSet(G4ElectroNuclearCrossSection::Default_Name());
78 if ( electroXS == nullptr ) {
79 electroXS = new G4ElectroNuclearCrossSection;
80 }
81
82 gammaXS =
83 (G4PhotoNuclearCrossSection*)G4CrossSectionDataSetRegistry::Instance()->
84 GetCrossSectionDataSet(G4PhotoNuclearCrossSection::Default_Name());
85 if ( gammaXS == nullptr ) {
86 gammaXS =
87 (G4GammaNuclearXS*)G4CrossSectionDataSetRegistry::Instance()->
88 GetCrossSectionDataSet(G4GammaNuclearXS::Default_Name());
89 if ( gammaXS == nullptr ) {
90 gammaXS = new G4PhotoNuclearCrossSection;
91 }
92 }
93
94 // reuse existing pre-compound model
95 G4GeneratorPrecompoundInterface* precoInterface
96 = new G4GeneratorPrecompoundInterface();
99 G4VPreCompoundModel* pre = static_cast<G4VPreCompoundModel*>(p);
100 if(!pre) { pre = new G4PreCompoundModel(); }
101 precoInterface->SetDeExcitation(pre);
102
103 // string model
104 ftfp = new G4TheoFSGenerator();
105 ftfp->SetTransport(precoInterface);
106 theFragmentation = new G4LundStringFragmentation();
107 theStringDecay = new G4ExcitedStringDecay(theFragmentation);
108 G4FTFModel* theStringModel = new G4FTFModel();
109 theStringModel->SetFragmentationModel(theStringDecay);
110 ftfp->SetHighEnergyGenerator(theStringModel);
111
112 // Build Bertini model
113 bert = new G4CascadeInterface();
114
115 // Creator model ID
116 secID = G4PhysicsModelCatalog::GetModelID( "model_" + GetModelName() );
117}
static G4CrossSectionDataSetRegistry * Instance()
static const char * Default_Name()
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
void SetMinEnergy(G4double anEnergy)
G4HadronicInteraction(const G4String &modelName="HadronicModel")
const G4String & GetModelName() const
void SetMaxEnergy(const G4double anEnergy)
static G4int GetModelID(const G4int modelIndex)
void SetDeExcitation(G4VPreCompoundModel *ptr)
void SetFragmentationModel(G4VStringFragmentation *aModel)

◆ ~G4ElectroVDNuclearModel()

G4ElectroVDNuclearModel::~G4ElectroVDNuclearModel ( )

Definition at line 119 of file G4ElectroVDNuclearModel.cc.

120{
121 delete theFragmentation;
122 delete theStringDecay;
123}

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4ElectroVDNuclearModel::ApplyYourself ( const G4HadProjectile & aTrack,
G4Nucleus & aTargetNucleus )
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 141 of file G4ElectroVDNuclearModel.cc.

143{
144 // Set up default particle change (just returns initial state)
145 theParticleChange.Clear();
146 theParticleChange.SetStatusChange(isAlive);
147 leptonKE = aTrack.GetKineticEnergy();
148 theParticleChange.SetEnergyChange(leptonKE);
149 theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit() );
150
151 // Set up sanity checks for real photon production
152 G4DynamicParticle lepton(aTrack.GetDefinition(), aTrack.Get4Momentum() );
153
154 // Need to call GetElementCrossSection before calling GetEquivalentPhotonEnergy.
155 const G4Material* mat = aTrack.GetMaterial();
156 G4int targZ = targetNucleus.GetZ_asInt();
157 electroXS->GetElementCrossSection(&lepton, targZ, mat);
158
159 photonEnergy = electroXS->GetEquivalentPhotonEnergy();
160 // Photon energy cannot exceed lepton energy
161 if (photonEnergy < leptonKE) {
162 photonQ2 = electroXS->GetEquivalentPhotonQ2(photonEnergy);
164 // Photon
165 if (photonEnergy > photonQ2/dM) {
166 // Produce recoil lepton and transferred photon
167 G4DynamicParticle* transferredPhoton = CalculateEMVertex(aTrack, targetNucleus);
168 // Interact gamma with nucleus
169 if (transferredPhoton) CalculateHadronicVertex(transferredPhoton, targetNucleus);
170 }
171 }
172 return &theParticleChange;
173}
@ isAlive
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
Hep3Vector unit() const
Hep3Vector vect() const
const G4Material * GetMaterial() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
static G4Neutron * Neutron()
Definition G4Neutron.cc:101
static G4Proton * Proton()
Definition G4Proton.cc:90

◆ ModelDescription()

void G4ElectroVDNuclearModel::ModelDescription ( std::ostream & outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 125 of file G4ElectroVDNuclearModel.cc.

126{
127 outFile << "G4ElectroVDNuclearModel handles the inelastic scattering\n"
128 << "of e- and e+ from nuclei using the equivalent photon\n"
129 << "approximation in which the incoming lepton generates a\n"
130 << "virtual photon at the electromagnetic vertex, and the\n"
131 << "virtual photon is converted to a real photon. At low\n"
132 << "energies, the photon interacts directly with the nucleus\n"
133 << "using the Bertini cascade. At high energies the photon\n"
134 << "is converted to a pi0 which interacts using the FTFP\n"
135 << "model. The electro- and gamma-nuclear cross sections of\n"
136 << "M. Kossov are used to generate the virtual photon spectrum\n";
137}

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