G4ElectroVDNuclearModel Class Reference

#include <G4ElectroVDNuclearModel.hh>

Inheritance diagram for G4ElectroVDNuclearModel:

G4HadronicInteraction

Public Member Functions

 G4ElectroVDNuclearModel ()
 ~G4ElectroVDNuclearModel ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus)
virtual void ModelDescription (std::ostream &outFile) const

Detailed Description

Definition at line 56 of file G4ElectroVDNuclearModel.hh.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


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