#include <G4ElectroVDNuclearModel.hh>
Inheritance diagram for G4ElectroVDNuclearModel:
Public Member Functions | |
G4ElectroVDNuclearModel () | |
~G4ElectroVDNuclearModel () | |
G4HadFinalState * | ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus) |
virtual void | ModelDescription (std::ostream &outFile) const |
Definition at line 56 of file G4ElectroVDNuclearModel.hh.
G4ElectroVDNuclearModel::G4ElectroVDNuclearModel | ( | ) |
Definition at line 62 of file G4ElectroVDNuclearModel.cc.
References G4VIntraNuclearTransportModel::SetDeExcitation(), G4VPartonStringModel::SetFragmentationModel(), G4TheoFSGenerator::SetHighEnergyGenerator(), G4HadronicInteraction::SetMaxEnergy(), G4HadronicInteraction::SetMinEnergy(), and G4TheoFSGenerator::SetTransport().
00063 : G4HadronicInteraction("G4ElectroVDNuclearModel"), 00064 leptonKE(0.0), photonEnergy(0.0), photonQ2(0.0) 00065 { 00066 SetMinEnergy(0.0); 00067 SetMaxEnergy(1*PeV); 00068 00069 electroXS = new G4ElectroNuclearCrossSection(); 00070 gammaXS = new G4PhotoNuclearCrossSection(); 00071 ftfp = new G4TheoFSGenerator(); 00072 precoInterface = new G4GeneratorPrecompoundInterface(); 00073 theHandler = new G4ExcitationHandler(); 00074 preEquilib = new G4PreCompoundModel(theHandler); 00075 precoInterface->SetDeExcitation(preEquilib); 00076 ftfp->SetTransport(precoInterface); 00077 theFragmentation = new G4LundStringFragmentation(); 00078 theStringDecay = new G4ExcitedStringDecay(theFragmentation); 00079 theStringModel = new G4FTFModel(); 00080 theStringModel->SetFragmentationModel(theStringDecay); 00081 ftfp->SetHighEnergyGenerator(theStringModel); 00082 00083 // Build Bertini model 00084 bert = new G4CascadeInterface(); 00085 }
G4ElectroVDNuclearModel::~G4ElectroVDNuclearModel | ( | ) |
Definition at line 88 of file G4ElectroVDNuclearModel.cc.
00089 { 00090 delete electroXS; 00091 delete gammaXS; 00092 delete ftfp; 00093 delete preEquilib; 00094 delete theFragmentation; 00095 delete theStringDecay; 00096 delete theStringModel; 00097 delete bert; 00098 }
G4HadFinalState * G4ElectroVDNuclearModel::ApplyYourself | ( | const G4HadProjectile & | aTrack, | |
G4Nucleus & | aTargetNucleus | |||
) | [virtual] |
Implements G4HadronicInteraction.
Definition at line 117 of file G4ElectroVDNuclearModel.cc.
References G4HadFinalState::Clear(), G4HadProjectile::Get4Momentum(), G4Nucleus::GetA_asInt(), G4HadProjectile::GetDefinition(), G4ElectroNuclearCrossSection::GetEquivalentPhotonEnergy(), G4ElectroNuclearCrossSection::GetEquivalentPhotonQ2(), G4ElectroNuclearCrossSection::GetIsoCrossSection(), G4HadProjectile::GetKineticEnergy(), G4ParticleDefinition::GetPDGMass(), G4Nucleus::GetZ_asInt(), isAlive, G4Neutron::Neutron(), G4Proton::Proton(), G4HadFinalState::SetEnergyChange(), G4HadFinalState::SetMomentumChange(), G4HadFinalState::SetStatusChange(), and G4HadronicInteraction::theParticleChange.
00119 { 00120 // Set up default particle change (just returns initial state) 00121 theParticleChange.Clear(); 00122 theParticleChange.SetStatusChange(isAlive); 00123 leptonKE = aTrack.GetKineticEnergy(); 00124 theParticleChange.SetEnergyChange(leptonKE); 00125 theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit() ); 00126 00127 // Set up sanity checks for real photon production 00128 G4DynamicParticle lepton(aTrack.GetDefinition(), aTrack.Get4Momentum() ); 00129 G4int targZ = targetNucleus.GetZ_asInt(); 00130 G4int targA = targetNucleus.GetA_asInt(); 00131 G4Isotope* iso = 0; 00132 G4Element* ele = 0; 00133 G4Material* mat = 0; 00134 G4double eXS = electroXS->GetIsoCrossSection(&lepton, targZ, targA, iso, ele, mat); 00135 00136 // If electronuclear cross section is negative, return initial track 00137 if (eXS > 0.0) { 00138 photonEnergy = electroXS->GetEquivalentPhotonEnergy(); 00139 // Photon energy cannot exceed lepton energy 00140 if (photonEnergy < leptonKE) { 00141 photonQ2 = electroXS->GetEquivalentPhotonQ2(photonEnergy); 00142 G4double dM = G4Proton::Proton()->GetPDGMass() + G4Neutron::Neutron()->GetPDGMass(); 00143 // Photon 00144 if (photonEnergy > photonQ2/dM) { 00145 // Produce recoil lepton and transferred photon 00146 G4DynamicParticle* transferredPhoton = CalculateEMVertex(aTrack, targetNucleus); 00147 // Interact gamma with nucleus 00148 if (transferredPhoton) CalculateHadronicVertex(transferredPhoton, targetNucleus); 00149 } 00150 } 00151 } 00152 return &theParticleChange; 00153 }
void G4ElectroVDNuclearModel::ModelDescription | ( | std::ostream & | outFile | ) | const [virtual] |
Reimplemented from G4HadronicInteraction.
Definition at line 101 of file G4ElectroVDNuclearModel.cc.
00102 { 00103 outFile << "G4ElectroVDNuclearModel handles the inelastic scattering\n" 00104 << "of e- and e+ from nuclei using the equivalent photon\n" 00105 << "approximation in which the incoming lepton generates a\n" 00106 << "virtual photon at the electromagnetic vertex, and the\n" 00107 << "virtual photon is converted to a real photon. At low\n" 00108 << "energies, the photon interacts directly with the nucleus\n" 00109 << "using the Bertini cascade. At high energies the photon\n" 00110 << "is converted to a pi0 which interacts using the FTFP\n" 00111 << "model. The electro- and gamma-nuclear cross sections of\n" 00112 << "M. Kossov are used to generate the virtual photon spectrum\n"; 00113 }