#include <G4EmMultiModel.hh>
Inheritance diagram for G4EmMultiModel:
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) |
Definition at line 59 of file G4EmMultiModel.hh.
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] |
void G4EmMultiModel::AddModel | ( | G4VEmModel * | ) |
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 }