77 #ifndef G4LossTableManager_h
78 #define G4LossTableManager_h 1
248 void ResetParameters();
257 void CopyDEDXTables();
268 std::map<PD,G4VEnergyLossProcess*,std::less<PD> > loss_map;
270 std::vector<G4VEnergyLossProcess*> loss_vector;
271 std::vector<PD> part_vector;
272 std::vector<PD> base_part_vector;
273 std::vector<G4bool> tables_are_built;
274 std::vector<G4bool> isActive;
275 std::vector<G4PhysicsTable*> dedx_vector;
276 std::vector<G4PhysicsTable*> range_vector;
277 std::vector<G4PhysicsTable*> inv_range_vector;
278 std::vector<G4VMultipleScattering*> msc_vector;
279 std::vector<G4VEmProcess*> emp_vector;
280 std::vector<G4VEmModel*> mod_vector;
281 std::vector<G4VEmFluctuationModel*> fmod_vector;
293 G4bool all_tables_are_built;
294 G4bool startInitialisation;
317 if(aParticle != currentParticle) {
318 currentParticle = aParticle;
319 std::map<PD,G4VEnergyLossProcess*,std::less<PD> >::const_iterator
pos;
320 if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
321 currentLoss = (*pos).second;
324 if ((pos = loss_map.find(theGenericIon)) != loss_map.end()) {
325 currentLoss = (*pos).second;
341 if(currentLoss) { x = currentLoss->
GetDEDX(kineticEnergy, couple); }
354 if(currentLoss) { x = currentLoss->
GetDEDXForSubsec(kineticEnergy, couple); }
367 if(currentLoss) { x = currentLoss->
GetCSDARange(kineticEnergy, couple); }
381 if(currentLoss) { x = currentLoss->
GetRangeForLoss(kineticEnergy, couple); }
395 x = currentLoss->
GetRange(kineticEnergy, couple);
439 return emCorrections;
446 return atomDeexcitation;
453 return subcutProducer;
G4double GetKineticEnergy(G4double &range, const G4MaterialCutsCouple *)
G4VSubCutProducer * SubCutProducer()
G4EmConfigurator * EmConfigurator()
static G4LossTableManager * Instance()
G4double GetDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double GetDEDX(G4double &kineticEnergy, const G4MaterialCutsCouple *)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double &length)
void DeRegister(G4VEnergyLossProcess *p)
G4double GetSubDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double GetRangeForLoss(G4double &kineticEnergy, const G4MaterialCutsCouple *)
G4double GetCSDARange(G4double &kineticEnergy, const G4MaterialCutsCouple *)
G4double GetDEDXForSubsec(G4double &kineticEnergy, const G4MaterialCutsCouple *)
const std::vector< G4VEmProcess * > & GetEmProcessVector()
G4double GetCSDARange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4LossTableBuilder * GetTableBuilder()
void SetSubCutProducer(G4VSubCutProducer *)
const G4ParticleDefinition const G4Material *G4double range
G4EmCorrections * EmCorrections()
G4ElectronIonPair * ElectronIonPair()
G4EmSaturation * EmSaturation()
void Register(G4VEnergyLossProcess *p)
const G4ParticleDefinition * GetParticleDefinition() const
G4double GetEnergy(const G4ParticleDefinition *aParticle, G4double range, const G4MaterialCutsCouple *couple)
const std::vector< G4VEnergyLossProcess * > & GetEnergyLossProcessVector()
G4double GetRangeFromRestricteDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void RegisterExtraParticle(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4VEnergyLossProcess * GetEnergyLossProcess(const G4ParticleDefinition *)
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
void SetVerbose(G4int val)
G4Cache & operator=(const G4Cache &rhs)
void LocalPhysicsTables(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
static MCTruthManager * instance
G4VAtomDeexcitation * AtomDeexcitation()
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void SetAtomDeexcitation(G4VAtomDeexcitation *)
static const G4double pos
const std::vector< G4VMultipleScattering * > & GetMultipleScatteringVector()
G4double GetRange(G4double &kineticEnergy, const G4MaterialCutsCouple *)