G4EmMultiModel Class Reference

#include <G4EmMultiModel.hh>

Inheritance diagram for G4EmMultiModel:

G4VEmModel

Public Member Functions

 G4EmMultiModel (const G4String &nam="MultiModel")
virtual ~G4EmMultiModel ()
void AddModel (G4VEmModel *)
virtual void Initialise (const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
virtual G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double tmax)

Detailed Description

Definition at line 59 of file G4EmMultiModel.hh.


Constructor & Destructor Documentation

G4EmMultiModel::G4EmMultiModel ( const G4String nam = "MultiModel"  ) 

Definition at line 53 of file G4EmMultiModel.cc.

00054   : G4VEmModel(nam), nModels(0)
00055 {
00056   model.clear();
00057   cross_section.clear();
00058 }

G4EmMultiModel::~G4EmMultiModel (  )  [virtual]

Definition at line 62 of file G4EmMultiModel.cc.

00063 {}


Member Function Documentation

void G4EmMultiModel::AddModel ( G4VEmModel  ) 

Definition at line 67 of file G4EmMultiModel.cc.

00068 {
00069   cross_section.push_back(0.0);
00070   model.push_back(p);
00071   ++nModels;
00072 }

G4double G4EmMultiModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition ,
G4double  kinEnergy,
G4double  Z,
G4double  A = 0.,
G4double  cutEnergy = 0.0,
G4double  maxEnergy = DBL_MAX 
) [virtual]

Reimplemented from G4VEmModel.

Definition at line 112 of file G4EmMultiModel.cc.

References G4VEmModel::CurrentCouple(), and G4VEmModel::SetCurrentCouple().

00118 {
00119   G4double cross = 0.0;
00120   if(nModels>0) {
00121     for(G4int i=0; i<nModels; ++i) {
00122       (model[i])->SetCurrentCouple(CurrentCouple());
00123       cross += (model[i])->ComputeCrossSectionPerAtom(p, kinEnergy, Z, A, 
00124                                                       cutEnergy, maxEnergy);
00125     }
00126   } 
00127   return cross;
00128 }

G4double G4EmMultiModel::ComputeDEDX ( const G4MaterialCutsCouple ,
const G4ParticleDefinition ,
G4double  kineticEnergy,
G4double  cutEnergy 
) [virtual]

Reimplemented from G4VEmModel.

Definition at line 93 of file G4EmMultiModel.cc.

References G4VEmModel::SetCurrentCouple().

00097 {
00098   SetCurrentCouple(couple);
00099   G4double dedx = 0.0;
00100 
00101   if(nModels > 0) {
00102     for(G4int i=0; i<nModels; i++) {
00103       dedx += (model[i])->ComputeDEDX(couple, p, cutEnergy, kineticEnergy);
00104     }
00105   } 
00106 
00107   return dedx;
00108 }

void G4EmMultiModel::Initialise ( const G4ParticleDefinition ,
const G4DataVector  
) [virtual]

Implements G4VEmModel.

Definition at line 76 of file G4EmMultiModel.cc.

References G4cout, G4endl, G4VEmModel::GetModelOfFluctuations(), G4VEmModel::GetName(), G4VEmModel::pParticleChange, and G4VEmModel::SetParticleChange().

00078 {
00079   if(nModels > 0) {
00080     G4cout << "### Initialisation of EM MultiModel " << GetName()
00081            << " including following list of models:" << G4endl;
00082     for(G4int i=0; i<nModels; ++i) {
00083       G4cout << "    " << (model[i])->GetName();
00084       (model[i])->SetParticleChange(pParticleChange, GetModelOfFluctuations());
00085       (model[i])->Initialise(p, cuts);
00086     }
00087     G4cout << G4endl;
00088   }
00089 }

void G4EmMultiModel::SampleSecondaries ( std::vector< G4DynamicParticle * > *  ,
const G4MaterialCutsCouple ,
const G4DynamicParticle ,
G4double  tmin,
G4double  tmax 
) [virtual]

Implements G4VEmModel.

Definition at line 132 of file G4EmMultiModel.cc.

References G4VEmModel::CrossSection(), G4UniformRand, G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetParticleDefinition(), and G4VEmModel::SetCurrentCouple().

00137 {
00138   SetCurrentCouple(couple);
00139   if(nModels > 0) {
00140     G4int i;
00141     G4double cross = 0.0;
00142     for(i=0; i<nModels; ++i) {
00143       cross += (model[i])->CrossSection(couple, dp->GetParticleDefinition(), 
00144                                         dp->GetKineticEnergy(), minEnergy, maxEnergy);
00145       cross_section[i] = cross;
00146     }
00147 
00148     cross *= G4UniformRand();
00149 
00150     for(i=0; i<nModels; ++i) {
00151       if(cross <= cross_section[i]) {
00152         (model[i])->SampleSecondaries(vdp, couple, dp, minEnergy, maxEnergy);
00153         return;
00154       }
00155     }
00156   } 
00157 }


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