66 flucModel(0),anglModel(0),
name(nam), lowLimit(0.1*CLHEP::
keV),
67 highLimit(100.0*CLHEP::
TeV),eMinActive(0.0),eMaxActive(
DBL_MAX),
68 polarAngleLimit(CLHEP::
pi),secondaryThreshold(
DBL_MAX),
69 theLPMflag(false),flagDeexcitation(false),flagForceBuildTable(false),
70 isMaster(true),fElementData(0),pParticleChange(0),xSectionTable(0),
71 theDensityFactor(0),theDensityIdx(0),fCurrentCouple(0),fCurrentElement(0),
77 localElmSelectors =
true;
79 useAngularGenerator =
false;
90 if(localElmSelectors) {
92 for(
G4int i=0; i<nSelectors; ++i) {
93 delete (*elmSelectors)[i];
149 if(highLimit <= lowLimit) {
return; }
157 elmSelectors =
new std::vector<G4EmElementSelector*>;
159 if(numOfCouples > nSelectors) {
160 for(
G4int i=nSelectors; i<numOfCouples; ++i) {
161 elmSelectors->push_back(0);
163 nSelectors = numOfCouples;
167 for(
G4int i=0; i<numOfCouples; ++i) {
170 if(cuts[i] ==
DBL_MAX) {
continue; }
177 if((*elmSelectors)[i]) {
178 if(material == ((*elmSelectors)[i])->GetMaterial()) { create =
false; }
179 else {
delete (*elmSelectors)[i]; }
187 if(nbins < 3) { nbins = 3; }
192 ((*elmSelectors)[i])->
Initialise(part, cuts[i]);
218 for(
G4int i=0; i<
n; ++i) {
254 const G4double* theAtomNumDensityVector =
261 for (
G4int i=0; i<nelm; i++) {
262 cross += theAtomNumDensityVector[i]*
284 fCurrentElement = (*theElementVector)[
n];
288 for(
G4int i=0; i<
n; ++i) {
290 fCurrentElement = (*theElementVector)[i];
295 return fCurrentElement;
375 return kineticEnergy;
404 localTable = isLocal;
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual void InitialiseForElement(const G4ParticleDefinition *, G4int Z)
virtual void StartTracking(G4Track *)
static G4LossTableManager * Instance()
G4ParticleChangeForLoss * GetParticleChangeForLoss()
std::vector< G4Element * > G4ElementVector
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
void DeRegister(G4VEnergyLossProcess *p)
virtual void DefineForRegion(const G4Region *)
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *)
const G4ElementVector * GetElementVector() const
G4VEmModel(const G4String &nam)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)=0
const G4double * GetVecNbOfAtomsPerVolume() const
G4double GetKineticEnergy() const
virtual void InitialiseForMaterial(const G4ParticleDefinition *, const G4Material *)
size_t GetTableSize() const
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=0)
const G4ParticleDefinition * GetParticleDefinition() const
void SetCrossSectionTable(G4PhysicsTable *, G4bool isLocal)
void Register(G4VEnergyLossProcess *p)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual G4double ChargeSquareRatio(const G4Track &)
G4Material * GetMaterial() const
G4double G4Log(G4double x)
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
static G4ProductionCutsTable * GetProductionCutsTable()
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4int GetNumberOfBinsPerDecade() const
void SetCurrentCouple(const G4MaterialCutsCouple *)
G4VParticleChange * pParticleChange
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kineticEnergy)
size_t GetNumberOfElements() const
G4PhysicsTable * xSectionTable
G4double GetPDGCharge() const
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
const G4Material * GetMaterial() const