Geant4  10.02.p03
G4VEnergyLossProcess Class Referenceabstract

#include <G4VEnergyLossProcess.hh>

Inheritance diagram for G4VEnergyLossProcess:
Collaboration diagram for G4VEnergyLossProcess:

Public Member Functions

 G4VEnergyLossProcess (const G4String &name="EnergyLoss", G4ProcessType type=fElectromagnetic)
 
virtual ~G4VEnergyLossProcess ()
 
virtual G4bool IsApplicable (const G4ParticleDefinition &p)=0
 
virtual void PrintInfo ()=0
 
virtual void ProcessDescription (std::ostream &outFile) const
 
virtual void PreparePhysicsTable (const G4ParticleDefinition &)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
G4PhysicsTableBuildDEDXTable (G4EmTableType tType=fRestricted)
 
G4PhysicsTableBuildLambdaTable (G4EmTableType tType=fRestricted)
 
void PrintInfoDefinition (const G4ParticleDefinition &part)
 
virtual void StartTracking (G4Track *)
 
virtual G4double AlongStepGetPhysicalInteractionLength (const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety, G4GPILSelection *selection)
 
virtual G4double PostStepGetPhysicalInteractionLength (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
 
virtual G4VParticleChange * AlongStepDoIt (const G4Track &, const G4Step &)
 
G4double SampleSubCutSecondaries (std::vector< G4Track *> &, const G4Step &, G4VEmModel *model, G4int matIdx)
 
virtual G4VParticleChange * PostStepDoIt (const G4Track &, const G4Step &)
 
virtual G4bool StorePhysicsTable (const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
 
virtual G4bool RetrievePhysicsTable (const G4ParticleDefinition *, const G4String &directory, G4bool ascii)
 
G4double GetDEDXDispersion (const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double length)
 
G4double CrossSectionPerVolume (G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
G4double MeanFreePath (const G4Track &track)
 
G4double ContinuousStepLimit (const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety)
 
G4VEmModelSelectModelForMaterial (G4double kinEnergy, size_t &idx) const
 
void AddEmModel (G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=0)
 
void UpdateEmModel (const G4String &, G4double, G4double)
 
void SetEmModel (G4VEmModel *, G4int index=1)
 
G4VEmModelEmModel (G4int index=1) const
 
G4VEmModelGetModelByIndex (G4int idx=0, G4bool ver=false) const
 
G4int NumberOfModels () const
 
void SetFluctModel (G4VEmFluctuationModel *)
 
G4VEmFluctuationModelFluctModel ()
 
void SetBaseParticle (const G4ParticleDefinition *p)
 
const G4ParticleDefinitionParticle () const
 
const G4ParticleDefinitionBaseParticle () const
 
const G4ParticleDefinitionSecondaryParticle () const
 
void ActivateSubCutoff (G4bool val, const G4Region *region=0)
 
void SetCrossSectionBiasingFactor (G4double f, G4bool flag=true)
 
void ActivateForcedInteraction (G4double length=0.0, const G4String &region="", G4bool flag=true)
 
void ActivateSecondaryBiasing (const G4String &region, G4double factor, G4double energyLimit)
 
void AddCollaborativeProcess (G4VEnergyLossProcess *)
 
void SetLossFluctuations (G4bool val)
 
void SetIntegral (G4bool val)
 
G4bool IsIntegral () const
 
void SetIonisation (G4bool val)
 
G4bool IsIonisationProcess () const
 
void SetLinearLossLimit (G4double val)
 
void SetStepFunction (G4double v1, G4double v2)
 
void SetLowestEnergyLimit (G4double)
 
G4int NumberOfSubCutoffRegions () const
 
void SetDEDXTable (G4PhysicsTable *p, G4EmTableType tType)
 
void SetCSDARangeTable (G4PhysicsTable *pRange)
 
void SetRangeTableForLoss (G4PhysicsTable *p)
 
void SetSecondaryRangeTable (G4PhysicsTable *p)
 
void SetInverseRangeTable (G4PhysicsTable *p)
 
void SetLambdaTable (G4PhysicsTable *p)
 
void SetSubLambdaTable (G4PhysicsTable *p)
 
void SetDEDXBinning (G4int nbins)
 
void SetMinKinEnergy (G4double e)
 
G4double MinKinEnergy () const
 
void SetMaxKinEnergy (G4double e)
 
G4double MaxKinEnergy () const
 
G4double CrossSectionBiasingFactor () const
 
G4double GetDEDX (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4double GetDEDXForSubsec (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4double GetRange (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4double GetCSDARange (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4double GetRangeForLoss (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4double GetKineticEnergy (G4double &range, const G4MaterialCutsCouple *)
 
G4double GetLambda (G4double &kineticEnergy, const G4MaterialCutsCouple *)
 
G4bool TablesAreBuilt () const
 
G4PhysicsTableDEDXTable () const
 
G4PhysicsTableDEDXTableForSubsec () const
 
G4PhysicsTableDEDXunRestrictedTable () const
 
G4PhysicsTableIonisationTable () const
 
G4PhysicsTableIonisationTableForSubsec () const
 
G4PhysicsTableCSDARangeTable () const
 
G4PhysicsTableSecondaryRangeTable () const
 
G4PhysicsTableRangeTableForLoss () const
 
G4PhysicsTableInverseRangeTable () const
 
G4PhysicsTableLambdaTable () const
 
G4PhysicsTableSubLambdaTable () const
 
const G4ElementGetCurrentElement () const
 
void SetDynamicMassCharge (G4double massratio, G4double charge2ratio)
 
- Public Member Functions inherited from G4VContinuousDiscreteProcess
 G4VContinuousDiscreteProcess (const G4String &, G4ProcessType aType=fNotDefined)
 
 G4VContinuousDiscreteProcess (G4VContinuousDiscreteProcess &)
 
virtual ~G4VContinuousDiscreteProcess ()
 
virtual G4double AtRestGetPhysicalInteractionLength (const G4Track &, G4ForceCondition *)
 
virtual G4VParticleChange * AtRestDoIt (const G4Track &, const G4Step &)
 
- Public Member Functions inherited from G4VProcess
 G4VProcess (const G4String &aName="NoName", G4ProcessType aType=fNotDefined)
 
 G4VProcess (const G4VProcess &right)
 
virtual ~G4VProcess ()
 
G4int operator== (const G4VProcess &right) const
 
G4int operator!= (const G4VProcess &right) const
 
G4double GetCurrentInteractionLength () const
 
void SetPILfactor (G4double value)
 
G4double GetPILfactor () const
 
G4double AlongStepGPIL (const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
 
G4double AtRestGPIL (const G4Track &track, G4ForceCondition *condition)
 
G4double PostStepGPIL (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
 
const G4StringGetPhysicsTableFileName (const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
 
const G4StringGetProcessName () const
 
G4ProcessType GetProcessType () const
 
void SetProcessType (G4ProcessType)
 
G4int GetProcessSubType () const
 
void SetProcessSubType (G4int)
 
virtual void EndTracking ()
 
virtual void SetProcessManager (const G4ProcessManager *)
 
virtual const G4ProcessManagerGetProcessManager ()
 
virtual void ResetNumberOfInteractionLengthLeft ()
 
G4double GetNumberOfInteractionLengthLeft () const
 
G4double GetTotalNumberOfInteractionLengthTraversed () const
 
G4bool isAtRestDoItIsEnabled () const
 
G4bool isAlongStepDoItIsEnabled () const
 
G4bool isPostStepDoItIsEnabled () const
 
virtual void DumpInfo () const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
virtual void SetMasterProcess (G4VProcess *masterP)
 
const G4VProcessGetMasterProcess () const
 
virtual void BuildWorkerPhysicsTable (const G4ParticleDefinition &part)
 
virtual void PrepareWorkerPhysicsTable (const G4ParticleDefinition &)
 

Protected Member Functions

virtual void InitialiseEnergyLossProcess (const G4ParticleDefinition *, const G4ParticleDefinition *)=0
 
virtual G4double MinPrimaryEnergy (const G4ParticleDefinition *, const G4Material *, G4double cut)
 
virtual G4double GetMeanFreePath (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
 
virtual G4double GetContinuousStepLimit (const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety)
 
G4PhysicsVectorLambdaPhysicsVector (const G4MaterialCutsCouple *, G4double cut)
 
size_t CurrentMaterialCutsCoupleIndex () const
 
void SelectModel (G4double kinEnergy)
 
void SetParticle (const G4ParticleDefinition *p)
 
void SetSecondaryParticle (const G4ParticleDefinition *p)
 
- Protected Member Functions inherited from G4VContinuousDiscreteProcess
void SetGPILSelection (G4GPILSelection selection)
 
G4GPILSelection GetGPILSelection () const
 
- Protected Member Functions inherited from G4VProcess
void SubtractNumberOfInteractionLengthLeft (G4double previousStepSize)
 
void ClearNumberOfInteractionLengthLeft ()
 

Protected Attributes

G4ParticleChangeForLoss fParticleChange
 
- Protected Attributes inherited from G4VProcess
const G4ProcessManageraProcessManager
 
G4VParticleChange * pParticleChange
 
G4ParticleChange aParticleChange
 
G4double theNumberOfInteractionLengthLeft
 
G4double currentInteractionLength
 
G4double theInitialNumberOfInteractionLength
 
G4String theProcessName
 
G4String thePhysicsTableFileName
 
G4ProcessType theProcessType
 
G4int theProcessSubType
 
G4double thePILfactor
 
G4bool enableAtRestDoIt
 
G4bool enableAlongStepDoIt
 
G4bool enablePostStepDoIt
 
G4int verboseLevel
 

Private Member Functions

void Clean ()
 
G4bool StoreTable (const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
 
G4bool RetrieveTable (const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname, G4bool mandatory)
 
void FillSecondariesAlongStep (G4double &eloss, G4double &weight)
 
void PrintWarning (G4String, G4double val)
 
void DefineMaterial (const G4MaterialCutsCouple *couple)
 
G4double GetDEDXForScaledEnergy (G4double scaledKinEnergy)
 
G4double GetSubDEDXForScaledEnergy (G4double scaledKinEnergy)
 
G4double GetIonisationForScaledEnergy (G4double scaledKinEnergy)
 
G4double GetSubIonisationForScaledEnergy (G4double scaledKinEnergy)
 
G4double GetScaledRangeForScaledEnergy (G4double scaledKinEnergy)
 
G4double GetLimitScaledRangeForScaledEnergy (G4double scaledKinEnergy)
 
G4double ScaledKinEnergyForLoss (G4double range)
 
G4double GetLambdaForScaledEnergy (G4double scaledKinEnergy)
 
void ComputeLambdaForScaledEnergy (G4double scaledKinEnergy)
 
 G4VEnergyLossProcess (G4VEnergyLossProcess &)
 
G4VEnergyLossProcessoperator= (const G4VEnergyLossProcess &right)
 

Private Attributes

G4LossTableManagerlManager
 
G4EmModelManagermodelManager
 
G4EmBiasingManagerbiasManager
 
G4SafetyHelpersafetyHelper
 
G4EmParameterstheParameters
 
const G4ParticleDefinitionsecondaryParticle
 
const G4ParticleDefinitiontheElectron
 
const G4ParticleDefinitionthePositron
 
const G4ParticleDefinitiontheGamma
 
const G4ParticleDefinitiontheGenericIon
 
std::vector< G4VEmModel * > emModels
 
G4VEmFluctuationModelfluctModel
 
G4VAtomDeexcitationatomDeexcitation
 
G4VSubCutProducersubcutProducer
 
std::vector< const G4Region * > scoffRegions
 
G4int nSCoffRegions
 
G4boolidxSCoffRegions
 
std::vector< G4VEnergyLossProcess * > scProcesses
 
G4int nProcesses
 
G4PhysicsTabletheDEDXTable
 
G4PhysicsTabletheDEDXSubTable
 
G4PhysicsTabletheDEDXunRestrictedTable
 
G4PhysicsTabletheIonisationTable
 
G4PhysicsTabletheIonisationSubTable
 
G4PhysicsTabletheRangeTableForLoss
 
G4PhysicsTabletheCSDARangeTable
 
G4PhysicsTabletheSecondaryRangeTable
 
G4PhysicsTabletheInverseRangeTable
 
G4PhysicsTabletheLambdaTable
 
G4PhysicsTabletheSubLambdaTable
 
size_t idxDEDX
 
size_t idxDEDXSub
 
size_t idxDEDXunRestricted
 
size_t idxIonisation
 
size_t idxIonisationSub
 
size_t idxRange
 
size_t idxCSDA
 
size_t idxSecRange
 
size_t idxInverseRange
 
size_t idxLambda
 
size_t idxSubLambda
 
std::vector< G4doubletheDEDXAtMaxEnergy
 
std::vector< G4doubletheRangeAtMaxEnergy
 
std::vector< G4doubletheEnergyOfCrossSectionMax
 
std::vector< G4doubletheCrossSectionMax
 
const std::vector< G4double > * theDensityFactor
 
const std::vector< G4int > * theDensityIdx
 
const G4DataVectortheCuts
 
const G4DataVectortheSubCuts
 
const G4ParticleDefinitionbaseParticle
 
G4int nBins
 
G4int nBinsCSDA
 
G4double lowestKinEnergy
 
G4double minKinEnergy
 
G4double maxKinEnergy
 
G4double maxKinEnergyCSDA
 
G4double linLossLimit
 
G4double dRoverRange
 
G4double finalRange
 
G4double lambdaFactor
 
G4double biasFactor
 
G4bool lossFluctuationFlag
 
G4bool rndmStepFlag
 
G4bool tablesAreBuilt
 
G4bool integral
 
G4bool isIon
 
G4bool isIonisation
 
G4bool useSubCutoff
 
G4bool useDeexcitation
 
G4bool biasFlag
 
G4bool weightFlag
 
G4bool isMaster
 
G4bool actLinLossLimit
 
G4bool actLossFluc
 
G4bool actBinning
 
G4bool actMinKinEnergy
 
G4bool actMaxKinEnergy
 
std::vector< G4DynamicParticle * > secParticles
 
std::vector< G4Track * > scTracks
 
const G4ParticleDefinitionparticle
 
G4VEmModelcurrentModel
 
const G4MaterialcurrentMaterial
 
const G4MaterialCutsCouplecurrentCouple
 
size_t currentCoupleIndex
 
size_t basedCoupleIndex
 
size_t lastIdx
 
G4int nWarnings
 
G4double massRatio
 
G4double fFactor
 
G4double reduceFactor
 
G4double chargeSqRatio
 
G4double preStepLambda
 
G4double fRange
 
G4double computedRange
 
G4double preStepKinEnergy
 
G4double preStepScaledEnergy
 
G4double preStepRangeEnergy
 
G4double mfpKinEnergy
 
G4GPILSelection aGPILSelection
 
G4int secID
 
G4int subsecID
 
G4int biasID
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VProcess
static const G4StringGetProcessTypeName (G4ProcessType)
 

Detailed Description

Definition at line 124 of file G4VEnergyLossProcess.hh.

Constructor & Destructor Documentation

◆ G4VEnergyLossProcess() [1/2]

G4VEnergyLossProcess::G4VEnergyLossProcess ( const G4String name = "EnergyLoss",
G4ProcessType  type = fElectromagnetic 
)

Definition at line 167 of file G4VEnergyLossProcess.cc.

168  :
169  G4VContinuousDiscreteProcess(name, type),
170  secondaryParticle(nullptr),
171  nSCoffRegions(0),
172  idxSCoffRegions(nullptr),
173  nProcesses(0),
174  theDEDXTable(nullptr),
175  theDEDXSubTable(nullptr),
176  theDEDXunRestrictedTable(nullptr),
177  theIonisationTable(nullptr),
178  theIonisationSubTable(nullptr),
179  theRangeTableForLoss(nullptr),
180  theCSDARangeTable(nullptr),
181  theSecondaryRangeTable(nullptr),
182  theInverseRangeTable(nullptr),
183  theLambdaTable(nullptr),
184  theSubLambdaTable(nullptr),
185  theDensityFactor(nullptr),
186  theDensityIdx(nullptr),
187  baseParticle(nullptr),
188  lossFluctuationFlag(true),
189  rndmStepFlag(false),
190  tablesAreBuilt(false),
191  integral(true),
192  isIon(false),
193  isIonisation(true),
194  useSubCutoff(false),
195  useDeexcitation(false),
196  particle(nullptr),
197  currentCouple(nullptr),
198  nWarnings(0),
199  mfpKinEnergy(0.0)
200 {
202  SetVerboseLevel(1);
203 
204  // low energy limit
206  preStepKinEnergy = 0.0;
207  preStepRangeEnergy = 0.0;
209 
210  // Size of tables assuming spline
211  minKinEnergy = 0.1*keV;
212  maxKinEnergy = 10.0*TeV;
213  nBins = 77;
214  maxKinEnergyCSDA = 1.0*GeV;
215  nBinsCSDA = 35;
217  = actLossFluc = false;
218 
219  // default linear loss limit for spline
220  linLossLimit = 0.01;
221 
222  // default dRoverRange and finalRange
223  SetStepFunction(0.2, 1.0*mm);
224 
225  // default lambda factor
226  lambdaFactor = 0.8;
227 
228  // cross section biasing
229  biasFactor = 1.0;
230 
231  // particle types
235  theGenericIon = nullptr;
236 
237  // run time objects
239  fParticleChange.SetSecondaryWeightByProcess(true);
242  ->GetSafetyHelper();
243  aGPILSelection = CandidateForSelection;
244 
245  // initialise model
247  lManager->Register(this);
248  fluctModel = nullptr;
249  currentModel = nullptr;
250  atomDeexcitation = nullptr;
251  subcutProducer = nullptr;
252 
253  biasManager = nullptr;
254  biasFlag = false;
255  weightFlag = false;
256  isMaster = true;
257  lastIdx = 0;
258 
262 
263  scTracks.reserve(5);
264  secParticles.reserve(5);
265 
266  theCuts = theSubCuts = nullptr;
267  currentMaterial = nullptr;
271 
272  secID = biasID = subsecID = -1;
273 }
G4LossTableManager * lManager
static G4LossTableManager * Instance()
G4GPILSelection aGPILSelection
const std::vector< G4double > * theDensityFactor
const std::vector< G4int > * theDensityIdx
const G4ParticleDefinition * secondaryParticle
void SetStepFunction(G4double v1, G4double v2)
G4PhysicsTable * theSecondaryRangeTable
G4VEmFluctuationModel * fluctModel
G4ParticleChangeForLoss fParticleChange
G4VSubCutProducer * subcutProducer
G4PhysicsTable * theIonisationTable
G4VAtomDeexcitation * atomDeexcitation
const G4ParticleDefinition * theGamma
const G4MaterialCutsCouple * currentCouple
const G4DataVector * theCuts
G4PhysicsTable * theSubLambdaTable
const G4ParticleDefinition * baseParticle
const G4DataVector * theSubCuts
const G4ParticleDefinition * theGenericIon
const G4ParticleDefinition * thePositron
std::vector< G4Track * > scTracks
G4SafetyHelper * GetSafetyHelper() const
G4PhysicsTable * theCSDARangeTable
static const double GeV
Definition: G4SIunits.hh:214
void Register(G4VEnergyLossProcess *p)
const G4ParticleDefinition * particle
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
G4PhysicsTable * theLambdaTable
static G4TransportationManager * GetTransportationManager()
const G4ParticleDefinition * theElectron
const G4Material * currentMaterial
G4PhysicsTable * theInverseRangeTable
static G4Positron * Positron()
Definition: G4Positron.cc:94
G4SafetyHelper * safetyHelper
G4double LowestElectronEnergy() const
G4PhysicsTable * theDEDXunRestrictedTable
static G4EmParameters * Instance()
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
G4PhysicsTable * theRangeTableForLoss
static G4Electron * Electron()
Definition: G4Electron.cc:94
static const double TeV
Definition: G4SIunits.hh:215
static const double keV
Definition: G4SIunits.hh:213
G4PhysicsTable * theDEDXTable
G4EmBiasingManager * biasManager
G4PhysicsTable * theDEDXSubTable
#define DBL_MAX
Definition: templates.hh:83
G4EmParameters * theParameters
static const double mm
Definition: G4SIunits.hh:114
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:437
G4PhysicsTable * theIonisationSubTable
std::vector< G4DynamicParticle * > secParticles
G4EmModelManager * modelManager
Here is the call graph for this function:

◆ ~G4VEnergyLossProcess()

G4VEnergyLossProcess::~G4VEnergyLossProcess ( )
virtual

Definition at line 277 of file G4VEnergyLossProcess.cc.

278 {
279  /*
280  G4cout << "** G4VEnergyLossProcess::~G4VEnergyLossProcess() for "
281  << GetProcessName() << " isMaster: " << isMaster
282  << " basePart: " << baseParticle
283  << G4endl;
284  */
285  Clean();
286 
287  // G4cout << " isIonisation " << isIonisation << " "
288  // << theDEDXTable << " " << theIonisationTable << G4endl;
289 
290  if (isMaster && !baseParticle) {
291  if(theDEDXTable) {
292 
293  //G4cout << " theIonisationTable " << theIonisationTable << G4endl;
295  //G4cout << " delete theDEDXTable " << theDEDXTable << G4endl;
297  delete theDEDXTable;
298  theDEDXTable = nullptr;
299  if(theDEDXSubTable) {
301  { theIonisationSubTable = nullptr; }
303  delete theDEDXSubTable;
304  theDEDXSubTable = nullptr;
305  }
306  }
307  //G4cout << " theIonisationTable " << theIonisationTable << G4endl;
308  if(theIonisationTable) {
309  //G4cout << " delete theIonisationTable " << theIonisationTable << G4endl;
311  delete theIonisationTable;
312  theIonisationTable = nullptr;
313  }
316  delete theIonisationSubTable;
317  theIonisationSubTable = nullptr;
318  }
322  theDEDXunRestrictedTable = nullptr;
323  }
326  delete theCSDARangeTable;
327  theCSDARangeTable = nullptr;
328  }
329  //G4cout << "delete RangeTable: " << theRangeTableForLoss << G4endl;
332  delete theRangeTableForLoss;
333  theRangeTableForLoss = nullptr;
334  }
335  //G4cout << "delete InvRangeTable: " << theInverseRangeTable << G4endl;
336  if(theInverseRangeTable && isIonisation /*&& !isIon*/) {
338  delete theInverseRangeTable;
339  theInverseRangeTable = nullptr;
340  }
341  //G4cout << "delete LambdaTable: " << theLambdaTable << G4endl;
342  if(theLambdaTable) {
344  delete theLambdaTable;
345  theLambdaTable = nullptr;
346  }
347  if(theSubLambdaTable) {
349  delete theSubLambdaTable;
350  theSubLambdaTable = nullptr;
351  }
352  }
353 
354  delete modelManager;
355  delete biasManager;
356  lManager->DeRegister(this);
357  //G4cout << "** all removed" << G4endl;
358 }
G4LossTableManager * lManager
void DeRegister(G4VEnergyLossProcess *p)
G4PhysicsTable * theIonisationTable
G4PhysicsTable * theSubLambdaTable
const G4ParticleDefinition * baseParticle
G4PhysicsTable * theCSDARangeTable
G4PhysicsTable * theLambdaTable
G4PhysicsTable * theInverseRangeTable
G4PhysicsTable * theDEDXunRestrictedTable
G4PhysicsTable * theRangeTableForLoss
G4PhysicsTable * theDEDXTable
G4EmBiasingManager * biasManager
G4PhysicsTable * theDEDXSubTable
void clearAndDestroy()
G4PhysicsTable * theIonisationSubTable
G4EmModelManager * modelManager
Here is the call graph for this function:

◆ G4VEnergyLossProcess() [2/2]

G4VEnergyLossProcess::G4VEnergyLossProcess ( G4VEnergyLossProcess )
private

Member Function Documentation

◆ ActivateForcedInteraction()

void G4VEnergyLossProcess::ActivateForcedInteraction ( G4double  length = 0.0,
const G4String region = "",
G4bool  flag = true 
)

Definition at line 2285 of file G4VEnergyLossProcess.cc.

2288 {
2289  if(!biasManager) { biasManager = new G4EmBiasingManager(); }
2290  if(1 < verboseLevel) {
2291  G4cout << "### ActivateForcedInteraction: for "
2292  << " process " << GetProcessName()
2293  << " length(mm)= " << length/mm
2294  << " in G4Region <" << region
2295  << "> weightFlag= " << flag
2296  << G4endl;
2297  }
2298  weightFlag = flag;
2299  biasManager->ActivateForcedInteraction(length, region);
2300 }
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="")
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4EmBiasingManager * biasManager
static const double mm
Definition: G4SIunits.hh:114
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ActivateSecondaryBiasing()

void G4VEnergyLossProcess::ActivateSecondaryBiasing ( const G4String region,
G4double  factor,
G4double  energyLimit 
)

Definition at line 2305 of file G4VEnergyLossProcess.cc.

2308 {
2309  if (0.0 <= factor) {
2310 
2311  // Range cut can be applied only for e-
2312  if(0.0 == factor && secondaryParticle != G4Electron::Electron())
2313  { return; }
2314 
2315  if(!biasManager) { biasManager = new G4EmBiasingManager(); }
2316  biasManager->ActivateSecondaryBiasing(region, factor, energyLimit);
2317  if(1 < verboseLevel) {
2318  G4cout << "### ActivateSecondaryBiasing: for "
2319  << " process " << GetProcessName()
2320  << " factor= " << factor
2321  << " in G4Region <" << region
2322  << "> energyLimit(MeV)= " << energyLimit/MeV
2323  << G4endl;
2324  }
2325  }
2326 }
static const double MeV
Definition: G4SIunits.hh:211
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4ParticleDefinition * secondaryParticle
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
G4GLOB_DLL std::ostream G4cout
void ActivateSecondaryBiasing(const G4String &region, G4double factor, G4double energyLimit)
static const G4double factor
static G4Electron * Electron()
Definition: G4Electron.cc:94
#define G4endl
Definition: G4ios.hh:61
G4EmBiasingManager * biasManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ActivateSubCutoff()

void G4VEnergyLossProcess::ActivateSubCutoff ( G4bool  val,
const G4Region region = 0 
)

Definition at line 1047 of file G4VEnergyLossProcess.cc.

1048 {
1049  G4RegionStore* regionStore = G4RegionStore::GetInstance();
1050  const G4Region* reg = r;
1051  if (!reg) {
1052  reg = regionStore->GetRegion("DefaultRegionForTheWorld", false);
1053  }
1054 
1055  // the region is in the list
1056  if (nSCoffRegions > 0) {
1057  for (G4int i=0; i<nSCoffRegions; ++i) {
1058  if (reg == scoffRegions[i]) {
1059  return;
1060  }
1061  }
1062  }
1063 
1064  // new region
1065  if(val) {
1066  scoffRegions.push_back(reg);
1067  ++nSCoffRegions;
1068  }
1069 }
int G4int
Definition: G4Types.hh:78
static const G4double reg
static G4RegionStore * GetInstance()
std::vector< const G4Region * > scoffRegions
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddCollaborativeProcess()

void G4VEnergyLossProcess::AddCollaborativeProcess ( G4VEnergyLossProcess p)

Definition at line 2034 of file G4VEnergyLossProcess.cc.

2036 {
2037  G4bool add = true;
2038  if(p->GetProcessName() != "eBrem") { add = false; }
2039  if(add && nProcesses > 0) {
2040  for(G4int i=0; i<nProcesses; ++i) {
2041  if(p == scProcesses[i]) {
2042  add = false;
2043  break;
2044  }
2045  }
2046  }
2047  if(add) {
2048  scProcesses.push_back(p);
2049  ++nProcesses;
2050  if (1 < verboseLevel) {
2051  G4cout << "### The process " << p->GetProcessName()
2052  << " is added to the list of collaborative processes of "
2053  << GetProcessName() << G4endl;
2054  }
2055  }
2056 }
G4int verboseLevel
Definition: G4VProcess.hh:368
int G4int
Definition: G4Types.hh:78
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
#define G4endl
Definition: G4ios.hh:61
std::vector< G4VEnergyLossProcess * > scProcesses
Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddEmModel()

void G4VEnergyLossProcess::AddEmModel ( G4int  order,
G4VEmModel p,
G4VEmFluctuationModel fluc = 0,
const G4Region region = 0 
)

Definition at line 393 of file G4VEnergyLossProcess.cc.

396 {
397  modelManager->AddEmModel(order, p, fluc, region);
398  if(p) { p->SetParticleChange(pParticleChange, fluc); }
399 }
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *, const G4Region *)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=0)
Definition: G4VEmModel.cc:410
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ AlongStepDoIt()

G4VParticleChange * G4VEnergyLossProcess::AlongStepDoIt ( const G4Track &  track,
const G4Step &  step 
)
virtual

Reimplemented from G4VContinuousDiscreteProcess.

Definition at line 1245 of file G4VEnergyLossProcess.cc.

1247 {
1248  fParticleChange.InitializeForAlongStep(track);
1249  // The process has range table - calculate energy loss
1251  return &fParticleChange;
1252  }
1253 
1254  // Get the actual (true) Step length
1255  G4double length = step.GetStepLength();
1256  if(length <= 0.0) { return &fParticleChange; }
1257  G4double eloss = 0.0;
1258 
1259  /*
1260  if(-1 < verboseLevel) {
1261  const G4ParticleDefinition* d = track.GetParticleDefinition();
1262  G4cout << "AlongStepDoIt for "
1263  << GetProcessName() << " and particle "
1264  << d->GetParticleName()
1265  << " eScaled(MeV)= " << preStepScaledEnergy/MeV
1266  << " range(mm)= " << fRange/mm
1267  << " s(mm)= " << length/mm
1268  << " rf= " << reduceFactor
1269  << " q^2= " << chargeSqRatio
1270  << " md= " << d->GetPDGMass()
1271  << " status= " << track.GetTrackStatus()
1272  << " " << track.GetMaterial()->GetName()
1273  << G4endl;
1274  }
1275  */
1276 
1277  const G4DynamicParticle* dynParticle = track.GetDynamicParticle();
1278 
1279  // define new weight for primary and secondaries
1280  G4double weight = fParticleChange.GetParentWeight();
1281  if(weightFlag) {
1282  weight /= biasFactor;
1283  fParticleChange.ProposeWeight(weight);
1284  }
1285 
1286  // stopping
1287  if (length >= fRange || preStepKinEnergy <= lowestKinEnergy) {
1288  eloss = preStepKinEnergy;
1289  if (useDeexcitation) {
1291  eloss, currentCoupleIndex);
1292  if(scTracks.size() > 0) { FillSecondariesAlongStep(eloss, weight); }
1293  if(eloss < 0.0) { eloss = 0.0; }
1294  }
1295  fParticleChange.SetProposedKineticEnergy(0.0);
1296  fParticleChange.ProposeLocalEnergyDeposit(eloss);
1297  return &fParticleChange;
1298  }
1299  //G4cout << theDEDXTable << " idx= " << basedCoupleIndex
1300  // << " " << GetProcessName() << " "<< currentMaterial->GetName()<<G4endl;
1301  //if(particle->GetParticleName() == "e-")G4cout << (*theDEDXTable) <<G4endl;
1302  // Short step
1304 
1305  //G4cout << "eloss= " << eloss << G4endl;
1306 
1307  // Long step
1308  if(eloss > preStepKinEnergy*linLossLimit) {
1309 
1310  G4double x = (fRange - length)/reduceFactor;
1311  //G4cout << "x= " << x << " " << theInverseRangeTable << G4endl;
1313 
1314  /*
1315  if(-1 < verboseLevel)
1316  G4cout << "Long STEP: rPre(mm)= "
1317  << GetScaledRangeForScaledEnergy(preStepScaledEnergy)/mm
1318  << " rPost(mm)= " << x/mm
1319  << " ePre(MeV)= " << preStepScaledEnergy/MeV
1320  << " eloss(MeV)= " << eloss/MeV
1321  << " eloss0(MeV)= "
1322  << GetDEDXForScaledEnergy(preStepScaledEnergy)*length/MeV
1323  << " lim(MeV)= " << preStepKinEnergy*linLossLimit/MeV
1324  << G4endl;
1325  */
1326  }
1327 
1328  /*
1329  G4double eloss0 = eloss;
1330  if(-1 < verboseLevel ) {
1331  G4cout << "Before fluct: eloss(MeV)= " << eloss/MeV
1332  << " e-eloss= " << preStepKinEnergy-eloss
1333  << " step(mm)= " << length/mm
1334  << " range(mm)= " << fRange/mm
1335  << " fluct= " << lossFluctuationFlag
1336  << G4endl;
1337  }
1338  */
1339 
1340  G4double cut = (*theCuts)[currentCoupleIndex];
1341  G4double esec = 0.0;
1342 
1343  //G4cout << "cut= " << cut << " useSubCut= " << useSubCutoff << G4endl;
1344 
1345  // SubCutOff
1346  if(useSubCutoff && !subcutProducer) {
1348 
1349  G4bool yes = false;
1350  G4StepPoint* prePoint = step.GetPreStepPoint();
1351 
1352  // Check boundary
1353  if(prePoint->GetStepStatus() == fGeomBoundary) { yes = true; }
1354 
1355  // Check PrePoint
1356  else {
1357  G4double preSafety = prePoint->GetSafety();
1358  G4double rcut =
1360 
1361  // recompute presafety
1362  if(preSafety < rcut) {
1363  preSafety = safetyHelper->ComputeSafety(prePoint->GetPosition(),
1364  rcut);
1365  }
1366 
1367  if(preSafety < rcut) { yes = true; }
1368 
1369  // Check PostPoint
1370  else {
1371  G4double postSafety = preSafety - length;
1372  if(postSafety < rcut) {
1373  postSafety = safetyHelper->ComputeSafety(
1374  step.GetPostStepPoint()->GetPosition(), rcut);
1375  if(postSafety < rcut) { yes = true; }
1376  }
1377  }
1378  }
1379 
1380  // Decided to start subcut sampling
1381  if(yes) {
1382 
1383  cut = (*theSubCuts)[currentCoupleIndex];
1385  esec = SampleSubCutSecondaries(scTracks, step,
1386  currentModel,currentCoupleIndex);
1387  // add bremsstrahlung sampling
1388  /*
1389  if(nProcesses > 0) {
1390  for(G4int i=0; i<nProcesses; ++i) {
1391  (scProcesses[i])->SampleSubCutSecondaries(
1392  scTracks, step, (scProcesses[i])->
1393  SelectModelForMaterial(preStepKinEnergy, currentCoupleIndex),
1394  currentCoupleIndex);
1395  }
1396  }
1397  */
1398  }
1399  }
1400  }
1401 
1402  // Corrections, which cannot be tabulated
1403  if(isIon) {
1404  G4double eadd = 0.0;
1405  G4double eloss_before = eloss;
1407  eloss, eadd, length);
1408  if(eloss < 0.0) { eloss = 0.5*eloss_before; }
1409  }
1410 
1411  // Sample fluctuations
1412  if (lossFluctuationFlag) {
1414  if(eloss + esec < preStepKinEnergy) {
1415 
1416  G4double tmax =
1417  std::min(currentModel->MaxSecondaryKinEnergy(dynParticle),cut);
1418  eloss = fluc->SampleFluctuations(currentCouple,dynParticle,
1419  tmax,length,eloss);
1420  /*
1421  if(-1 < verboseLevel)
1422  G4cout << "After fluct: eloss(MeV)= " << eloss/MeV
1423  << " fluc= " << (eloss-eloss0)/MeV
1424  << " ChargeSqRatio= " << chargeSqRatio
1425  << " massRatio= " << massRatio
1426  << " tmax= " << tmax
1427  << G4endl;
1428  */
1429  }
1430  }
1431 
1432  // deexcitation
1433  if (useDeexcitation) {
1434  G4double esecfluo = preStepKinEnergy - esec;
1435  G4double de = esecfluo;
1436  //G4double eloss0 = eloss;
1437  /*
1438  G4cout << "### 1: E(keV)= " << preStepKinEnergy/keV
1439  << " Efluomax(keV)= " << de/keV
1440  << " Eloss(keV)= " << eloss/keV << G4endl;
1441  */
1443  de, currentCoupleIndex);
1444 
1445  // sum of de-excitation energies
1446  esecfluo -= de;
1447 
1448  // subtracted from energy loss
1449  if(eloss >= esecfluo) {
1450  esec += esecfluo;
1451  eloss -= esecfluo;
1452  } else {
1453  esec += esecfluo;
1454  eloss = 0.0;
1455  }
1456  /*
1457  if(esecfluo > 0.0) {
1458  G4cout << "### 2: E(keV)= " << preStepKinEnergy/keV
1459  << " Esec(keV)= " << esec/keV
1460  << " Esecf(kV)= " << esecfluo/keV
1461  << " Eloss0(kV)= " << eloss0/keV
1462  << " Eloss(keV)= " << eloss/keV
1463  << G4endl;
1464  }
1465  */
1466  }
1467  if(subcutProducer && idxSCoffRegions[currentCoupleIndex]) {
1468  subcutProducer->SampleSecondaries(step, scTracks, eloss, cut);
1469  }
1470  if(scTracks.size() > 0) { FillSecondariesAlongStep(eloss, weight); }
1471 
1472  // Energy balance
1473  G4double finalT = preStepKinEnergy - eloss - esec;
1474  if (finalT <= lowestKinEnergy) {
1475  eloss += finalT;
1476  finalT = 0.0;
1477  } else if(isIon) {
1478  fParticleChange.SetProposedCharge(
1479  currentModel->GetParticleCharge(track.GetParticleDefinition(),
1480  currentMaterial,finalT));
1481  }
1482 
1483  eloss = std::max(eloss, 0.0);
1484 
1485  fParticleChange.SetProposedKineticEnergy(finalT);
1486  fParticleChange.ProposeLocalEnergyDeposit(eloss);
1487  /*
1488  if(-1 < verboseLevel) {
1489  G4double del = finalT + eloss + esec - preStepKinEnergy;
1490  G4cout << "Final value eloss(MeV)= " << eloss/MeV
1491  << " preStepKinEnergy= " << preStepKinEnergy
1492  << " postStepKinEnergy= " << finalT
1493  << " de(keV)= " << del/keV
1494  << " lossFlag= " << lossFluctuationFlag
1495  << " status= " << track.GetTrackStatus()
1496  << G4endl;
1497  }
1498  */
1499  return &fParticleChange;
1500 }
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
Definition: G4VEmModel.hh:482
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmax, G4double length, G4double meanLoss)=0
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
Definition: G4VEmModel.cc:362
void AlongStepDeexcitation(std::vector< G4Track *> &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
G4ProductionCuts * GetProductionCuts() const
G4ParticleChangeForLoss fParticleChange
G4VSubCutProducer * subcutProducer
G4VEmFluctuationModel * GetModelOfFluctuations()
Definition: G4VEmModel.hh:610
double weight
Definition: plottest35.C:25
G4VAtomDeexcitation * atomDeexcitation
const G4MaterialCutsCouple * currentCouple
G4double GetProductionCut(G4int index) const
void FillSecondariesAlongStep(G4double &eloss, G4double &weight)
G4double ScaledKinEnergyForLoss(G4double range)
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
bool G4bool
Definition: G4Types.hh:79
std::vector< G4Track * > scTracks
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
G4bool IsActive(G4double kinEnergy)
Definition: G4VEmModel.hh:753
G4double ComputeSafety(const G4ThreeVector &pGlobalPoint, G4double maxRadius=DBL_MAX)
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Definition: G4VEmModel.cc:354
const G4Material * currentMaterial
G4SafetyHelper * safetyHelper
double G4double
Definition: G4Types.hh:76
virtual void SampleSecondaries(const G4Step &step, std::vector< G4Track *> &tracks, G4double &eloss, G4double cut) const =0
G4double SampleSubCutSecondaries(std::vector< G4Track *> &, const G4Step &, G4VEmModel *model, G4int matIdx)
Here is the call graph for this function:

◆ AlongStepGetPhysicalInteractionLength()

G4double G4VEnergyLossProcess::AlongStepGetPhysicalInteractionLength ( const G4Track &  ,
G4double  previousStepSize,
G4double  currentMinimumStep,
G4double currentSafety,
G4GPILSelection *  selection 
)
virtual

Reimplemented from G4VContinuousDiscreteProcess.

Definition at line 1112 of file G4VEnergyLossProcess.cc.

1115 {
1116  G4double x = DBL_MAX;
1117  *selection = aGPILSelection;
1120  x = fRange;
1121  G4double finR = finalRange;
1122  if(rndmStepFlag) {
1123  finR = std::min(finR,
1125  }
1126  if(fRange > finR) {
1127  x = fRange*dRoverRange + finR*(1.0 - dRoverRange)*(2.0 - finR/fRange);
1128  }
1129 
1130  // if(particle->GetPDGMass() > 0.9*GeV)
1131  /*
1132  G4cout<<GetProcessName()<<": e= "<<preStepKinEnergy
1133  <<" range= "<<fRange << " idx= " << basedCoupleIndex
1134  << " finR= " << finR
1135  << " limit= " << x <<G4endl;
1136  G4cout << "massRatio= " << massRatio << " Q^2= " << chargeSqRatio
1137  << " finR= " << finR << " dRoverRange= " << dRoverRange
1138  << " finalRange= " << finalRange << G4endl;
1139  */
1140  }
1141  //G4cout<<GetProcessName()<<": e= "<<preStepKinEnergy
1142  //<<" stepLimit= "<<x<<G4endl;
1143  return x;
1144 }
G4GPILSelection aGPILSelection
G4ProductionCuts * GetProductionCuts() const
const G4MaterialCutsCouple * currentCouple
G4double GetProductionCut(G4int index) const
G4bool IsActive(G4double kinEnergy)
Definition: G4VEmModel.hh:753
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BaseParticle()

const G4ParticleDefinition * G4VEnergyLossProcess::BaseParticle ( ) const
inline

Definition at line 925 of file G4VEnergyLossProcess.hh.

926 {
927  return baseParticle;
928 }
const G4ParticleDefinition * baseParticle
Here is the caller graph for this function:

◆ BuildDEDXTable()

G4PhysicsTable * G4VEnergyLossProcess::BuildDEDXTable ( G4EmTableType  tType = fRestricted)

Definition at line 800 of file G4VEnergyLossProcess.cc.

801 {
802  if(1 < verboseLevel ) {
803  G4cout << "G4VEnergyLossProcess::BuildDEDXTable() of type " << tType
804  << " for " << GetProcessName()
805  << " and particle " << particle->GetParticleName()
806  << G4endl;
807  }
808  G4PhysicsTable* table = nullptr;
810  G4int bin = nBins;
811 
812  if(fTotal == tType) {
813  emax = maxKinEnergyCSDA;
814  bin = nBinsCSDA;
815  table = theDEDXunRestrictedTable;
816  } else if(fRestricted == tType) {
817  table = theDEDXTable;
818  } else if(fSubRestricted == tType) {
819  table = theDEDXSubTable;
820  } else {
821  G4cout << "G4VEnergyLossProcess::BuildDEDXTable WARNING: wrong type "
822  << tType << G4endl;
823  }
824 
825  // Access to materials
826  const G4ProductionCutsTable* theCoupleTable=
828  size_t numOfCouples = theCoupleTable->GetTableSize();
829 
830  if(1 < verboseLevel) {
831  G4cout << numOfCouples << " materials"
832  << " minKinEnergy= " << minKinEnergy
833  << " maxKinEnergy= " << emax
834  << " nbin= " << bin
835  << " EmTableType= " << tType
836  << " table= " << table << " " << this
837  << G4endl;
838  }
839  if(!table) { return table; }
840 
842  G4bool splineFlag = theParameters->Spline();
843  G4PhysicsLogVector* aVector = nullptr;
844  G4PhysicsLogVector* bVector = nullptr;
845 
846  for(size_t i=0; i<numOfCouples; ++i) {
847 
848  if(1 < verboseLevel) {
849  G4cout << "G4VEnergyLossProcess::BuildDEDXVector Idx= " << i
850  << " flagTable= " << table->GetFlag(i)
851  << " Flag= " << bld->GetFlag(i) << G4endl;
852  }
853  if(bld->GetFlag(i)) {
854 
855  // create physics vector and fill it
856  const G4MaterialCutsCouple* couple =
857  theCoupleTable->GetMaterialCutsCouple(i);
858  if((*table)[i]) { delete (*table)[i]; }
859  if(bVector) {
860  aVector = new G4PhysicsLogVector(*bVector);
861  } else {
862  bVector = new G4PhysicsLogVector(minKinEnergy, emax, bin);
863  aVector = bVector;
864  }
865  aVector->SetSpline(splineFlag);
866 
867  modelManager->FillDEDXVector(aVector, couple, tType);
868  if(splineFlag) { aVector->FillSecondDerivatives(); }
869 
870  // Insert vector for this material into the table
871  G4PhysicsTableHelper::SetPhysicsVector(table, i, aVector);
872  }
873  }
874 
875  if(1 < verboseLevel) {
876  G4cout << "G4VEnergyLossProcess::BuildDEDXTable(): table is built for "
878  << " and process " << GetProcessName()
879  << G4endl;
880  if(2 < verboseLevel) G4cout << (*table) << G4endl;
881  }
882 
883  return table;
884 }
G4LossTableManager * lManager
static void SetPhysicsVector(G4PhysicsTable *physTable, size_t idx, G4PhysicsVector *vec)
G4int verboseLevel
Definition: G4VProcess.hh:368
float bin[41]
Definition: plottest35.C:14
int G4int
Definition: G4Types.hh:78
void FillSecondDerivatives()
G4LossTableBuilder * GetTableBuilder()
void SetSpline(G4bool)
G4bool Spline() const
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
void FillDEDXVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4EmTableType t=fRestricted)
bool G4bool
Definition: G4Types.hh:79
const G4ParticleDefinition * particle
static const G4double emax
static G4ProductionCutsTable * GetProductionCutsTable()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
G4PhysicsTable * theDEDXunRestrictedTable
G4bool GetFlag(size_t idx) const
#define G4endl
Definition: G4ios.hh:61
G4bool GetFlag(size_t i) const
G4PhysicsTable * theDEDXTable
double G4double
Definition: G4Types.hh:76
G4PhysicsTable * theDEDXSubTable
G4EmParameters * theParameters
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BuildLambdaTable()

G4PhysicsTable * G4VEnergyLossProcess::BuildLambdaTable ( G4EmTableType  tType = fRestricted)

Definition at line 888 of file G4VEnergyLossProcess.cc.

889 {
890  G4PhysicsTable* table = nullptr;
891 
892  if(fRestricted == tType) {
893  table = theLambdaTable;
894  } else if(fSubRestricted == tType) {
895  table = theSubLambdaTable;
896  } else {
897  G4cout << "G4VEnergyLossProcess::BuildLambdaTable WARNING: wrong type "
898  << tType << G4endl;
899  }
900 
901  if(1 < verboseLevel) {
902  G4cout << "G4VEnergyLossProcess::BuildLambdaTable() of type "
903  << tType << " for process "
904  << GetProcessName() << " and particle "
906  << " EmTableType= " << tType
907  << " table= " << table
908  << G4endl;
909  }
910  if(!table) {return table;}
911 
912  // Access to materials
913  const G4ProductionCutsTable* theCoupleTable=
915  size_t numOfCouples = theCoupleTable->GetTableSize();
916 
920 
921  G4bool splineFlag = theParameters->Spline();
922  G4PhysicsLogVector* aVector = nullptr;
924 
925  for(size_t i=0; i<numOfCouples; ++i) {
926 
927  if (bld->GetFlag(i)) {
928 
929  // create physics vector and fill it
930  const G4MaterialCutsCouple* couple =
931  theCoupleTable->GetMaterialCutsCouple(i);
932  delete (*table)[i];
933 
934  G4bool startNull = true;
935  G4double emin =
936  MinPrimaryEnergy(particle,couple->GetMaterial(),(*theCuts)[i]);
937  if(minKinEnergy > emin) {
938  emin = minKinEnergy;
939  startNull = false;
940  }
941 
943  if(emax <= emin) { emax = 2*emin; }
944  G4int bin = G4lrint(nBins*G4Log(emax/emin)/scale);
945  bin = std::max(bin, 3);
946  aVector = new G4PhysicsLogVector(emin, emax, bin);
947  aVector->SetSpline(splineFlag);
948 
949  modelManager->FillLambdaVector(aVector, couple, startNull, tType);
950  if(splineFlag) { aVector->FillSecondDerivatives(); }
951 
952  // Insert vector for this material into the table
953  G4PhysicsTableHelper::SetPhysicsVector(table, i, aVector);
954  }
955  }
956 
957  if(1 < verboseLevel) {
958  G4cout << "Lambda table is built for "
960  << G4endl;
961  }
962 
963  return table;
964 }
G4LossTableManager * lManager
const std::vector< G4double > * GetDensityFactors()
static void SetPhysicsVector(G4PhysicsTable *physTable, size_t idx, G4PhysicsVector *vec)
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4Material * GetMaterial() const
const std::vector< G4double > * theDensityFactor
const std::vector< G4int > * theDensityIdx
float bin[41]
Definition: plottest35.C:14
void FillLambdaVector(G4PhysicsVector *, const G4MaterialCutsCouple *, G4bool startFromNull=true, G4EmTableType t=fRestricted)
int G4int
Definition: G4Types.hh:78
void FillSecondDerivatives()
G4LossTableBuilder * GetTableBuilder()
void SetSpline(G4bool)
G4PhysicsTable * theSubLambdaTable
G4bool Spline() const
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
Double_t scale
const G4ParticleDefinition * particle
G4PhysicsTable * theLambdaTable
static const G4double emax
G4double G4Log(G4double x)
Definition: G4Log.hh:230
static G4ProductionCutsTable * GetProductionCutsTable()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
int G4lrint(double ad)
Definition: templates.hh:163
G4bool GetFlag(size_t idx) const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *, G4double cut)
G4EmParameters * theParameters
const std::vector< G4int > * GetCoupleIndexes()
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BuildPhysicsTable()

void G4VEnergyLossProcess::BuildPhysicsTable ( const G4ParticleDefinition part)
virtual

Reimplemented from G4VProcess.

Reimplemented in G4ePolarizedIonisation.

Definition at line 691 of file G4VEnergyLossProcess.cc.

692 {
693  if(1 < verboseLevel) {
694 
695  G4cout << "### G4VEnergyLossProcess::BuildPhysicsTable() for "
696  << GetProcessName()
697  << " and particle " << part.GetParticleName()
698  << "; local: " << particle->GetParticleName();
699  if(baseParticle) {
700  G4cout << "; base: " << baseParticle->GetParticleName();
701  }
702  G4cout << " TablesAreBuilt= " << tablesAreBuilt
703  << " isIon= " << isIon << " " << this << G4endl;
704  }
705 
706  if(&part == particle) {
707 
709  if(isMaster) {
713 
714  } else {
715 
716  const G4VEnergyLossProcess* masterProcess =
717  static_cast<const G4VEnergyLossProcess*>(GetMasterProcess());
718 
719  // define density factors for worker thread
720  bld->InitialiseBaseMaterials(masterProcess->DEDXTable());
723 
724  // copy table pointers from master thread
725  SetDEDXTable(masterProcess->DEDXTable(),fRestricted);
727  SetDEDXTable(masterProcess->DEDXunRestrictedTable(),fTotal);
728  SetDEDXTable(masterProcess->IonisationTable(),fIsIonisation);
730  SetRangeTableForLoss(masterProcess->RangeTableForLoss());
731  SetCSDARangeTable(masterProcess->CSDARangeTable());
733  SetInverseRangeTable(masterProcess->InverseRangeTable());
734  SetLambdaTable(masterProcess->LambdaTable());
735  SetSubLambdaTable(masterProcess->SubLambdaTable());
736  isIonisation = masterProcess->IsIonisationProcess();
737 
738  tablesAreBuilt = true;
739  // local initialisation of models
740  G4bool printing = true;
741  G4int numberOfModels = modelManager->NumberOfModels();
742  for(G4int i=0; i<numberOfModels; ++i) {
743  G4VEmModel* mod = GetModelByIndex(i, printing);
744  G4VEmModel* mod0= masterProcess->GetModelByIndex(i,printing);
745  mod->InitialiseLocal(particle, mod0);
746  }
747 
749  }
750 
751  // needs to be done only once
753  }
754  // explicitly defined printout by particle name
755  G4String num = part.GetParticleName();
756  if(1 < verboseLevel ||
757  (0 < verboseLevel && (num == "e-" ||
758  num == "e+" || num == "mu+" ||
759  num == "mu-" || num == "proton"||
760  num == "pi+" || num == "pi-" ||
761  num == "kaon+" || num == "kaon-" ||
762  num == "alpha" || num == "anti_proton" ||
763  num == "GenericIon")))
764  {
765  PrintInfoDefinition(part);
766  }
767 
768  // Added tracking cut to avoid tracking artifacts
769  // identify deexcitation flag
770  if(isIonisation) {
771  //VI: seems not needed fParticleChange.SetLowEnergyLimit(lowestKinEnergy);
774  if(atomDeexcitation) {
775  if(atomDeexcitation->IsPIXEActive()) { useDeexcitation = true; }
776  }
777  }
778  /*
779  G4cout << "** G4VEnergyLossProcess::BuildPhysicsTable() for "
780  << GetProcessName() << " and " << particle->GetParticleName()
781  << " isMaster: " << isMaster << " isIonisation: "
782  << isIonisation << G4endl;
783  G4cout << " theDEDX: " << theDEDXTable
784  << " theRange: " << theRangeTableForLoss
785  << " theInverse: " << theInverseRangeTable
786  << " theLambda: " << theLambdaTable << G4endl;
787  */
788  //if(1 < verboseLevel || verb) {
789  if(1 < verboseLevel) {
790  G4cout << "### G4VEnergyLossProcess::BuildPhysicsTable() done for "
791  << GetProcessName()
792  << " and particle " << part.GetParticleName();
793  if(isIonisation) { G4cout << " isIonisation flag = 1"; }
794  G4cout << G4endl;
795  }
796 }
G4VSubCutProducer * SubCutProducer()
G4LossTableManager * lManager
void SetDEDXTable(G4PhysicsTable *p, G4EmTableType tType)
const G4VProcess * GetMasterProcess() const
Definition: G4VProcess.hh:538
G4PhysicsTable * InverseRangeTable() const
const std::vector< G4double > * GetDensityFactors()
void InitialiseHelper()
G4int verboseLevel
Definition: G4VProcess.hh:368
void PrintInfoDefinition(const G4ParticleDefinition &part)
G4bool IsIonisationProcess() const
G4PhysicsTable * SecondaryRangeTable() const
G4PhysicsTable * DEDXTableForSubsec() const
const std::vector< G4double > * theDensityFactor
const std::vector< G4int > * theDensityIdx
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
Definition: G4VEmModel.cc:219
G4VSubCutProducer * subcutProducer
G4PhysicsTable * IonisationTableForSubsec() const
G4VAtomDeexcitation * atomDeexcitation
int G4int
Definition: G4Types.hh:78
G4LossTableBuilder * GetTableBuilder()
G4PhysicsTable * LambdaTable() const
void SetInverseRangeTable(G4PhysicsTable *p)
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
const G4ParticleDefinition * baseParticle
G4GLOB_DLL std::ostream G4cout
G4PhysicsTable * RangeTableForLoss() const
bool G4bool
Definition: G4Types.hh:79
const G4ParticleDefinition * particle
void SetLambdaTable(G4PhysicsTable *p)
G4PhysicsTable * DEDXunRestrictedTable() const
G4SafetyHelper * safetyHelper
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
void InitialiseBaseMaterials(G4PhysicsTable *table)
G4PhysicsTable * DEDXTable() const
void SetCSDARangeTable(G4PhysicsTable *pRange)
void LocalPhysicsTables(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
#define G4endl
Definition: G4ios.hh:61
void SetSecondaryRangeTable(G4PhysicsTable *p)
G4VAtomDeexcitation * AtomDeexcitation()
G4PhysicsTable * CSDARangeTable() const
G4PhysicsTable * SubLambdaTable() const
G4PhysicsTable * IonisationTable() const
void SetSubLambdaTable(G4PhysicsTable *p)
void SetRangeTableForLoss(G4PhysicsTable *p)
G4int NumberOfModels() const
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
const std::vector< G4int > * GetCoupleIndexes()
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Clean()

void G4VEnergyLossProcess::Clean ( )
private

Definition at line 362 of file G4VEnergyLossProcess.cc.

363 {
364  /*
365  if(1 < verboseLevel) {
366  G4cout << "G4VEnergyLossProcess::Clear() for " << GetProcessName()
367  << G4endl;
368  }
369  */
370  delete [] idxSCoffRegions;
371 
372  tablesAreBuilt = false;
373 
374  scProcesses.clear();
375  nProcesses = 0;
376 
380 }
std::vector< G4VEnergyLossProcess * > scProcesses
Here is the caller graph for this function:

◆ ComputeLambdaForScaledEnergy()

void G4VEnergyLossProcess::ComputeLambdaForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 858 of file G4VEnergyLossProcess.hh.

859 {
861  if (e <= mfpKinEnergy) {
863 
864  } else {
866  if(e1 > mfpKinEnergy) {
868  G4double preStepLambda1 = GetLambdaForScaledEnergy(e1);
869  if(preStepLambda1 > preStepLambda) {
870  mfpKinEnergy = e1;
871  preStepLambda = preStepLambda1;
872  }
873  } else {
875  }
876  }
877 }
std::vector< G4double > theEnergyOfCrossSectionMax
static const G4double e1
std::vector< G4double > theCrossSectionMax
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ContinuousStepLimit()

G4double G4VEnergyLossProcess::ContinuousStepLimit ( const G4Track &  track,
G4double  previousStepSize,
G4double  currentMinimumStep,
G4double currentSafety 
)

Definition at line 1991 of file G4VEnergyLossProcess.cc.

1994 {
1995  G4GPILSelection sel;
1996  return AlongStepGetPhysicalInteractionLength(track, x, y, z, &sel);
1997 }
Double_t y
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety, G4GPILSelection *selection)
Here is the call graph for this function:

◆ CrossSectionBiasingFactor()

G4double G4VEnergyLossProcess::CrossSectionBiasingFactor ( ) const
inline

Definition at line 989 of file G4VEnergyLossProcess.hh.

990 {
991  return biasFactor;
992 }

◆ CrossSectionPerVolume()

G4double G4VEnergyLossProcess::CrossSectionPerVolume ( G4double  kineticEnergy,
const G4MaterialCutsCouple couple 
)

Definition at line 1959 of file G4VEnergyLossProcess.cc.

1961 {
1962  // Cross section per volume is calculated
1963  DefineMaterial(couple);
1964  G4double cross = 0.0;
1965  if(theLambdaTable) {
1966  cross = GetLambdaForScaledEnergy(kineticEnergy*massRatio);
1967  } else {
1968  SelectModel(kineticEnergy*massRatio);
1969  cross = biasFactor*(*theDensityFactor)[currentCoupleIndex]
1971  particle, kineticEnergy,
1973  }
1974  if(cross < 0.0) { cross = 0.0; }
1975  return cross;
1976 }
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:258
void SelectModel(G4double kinEnergy)
const G4DataVector * theCuts
const G4ParticleDefinition * particle
G4PhysicsTable * theLambdaTable
const G4Material * currentMaterial
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:

◆ CSDARangeTable()

G4PhysicsTable * G4VEnergyLossProcess::CSDARangeTable ( ) const
inline

Definition at line 1038 of file G4VEnergyLossProcess.hh.

1039 {
1040  return theCSDARangeTable;
1041 }
G4PhysicsTable * theCSDARangeTable
Here is the caller graph for this function:

◆ CurrentMaterialCutsCoupleIndex()

size_t G4VEnergyLossProcess::CurrentMaterialCutsCoupleIndex ( ) const
inlineprotected

Definition at line 610 of file G4VEnergyLossProcess.hh.

611 {
612  return currentCoupleIndex;
613 }
Here is the caller graph for this function:

◆ DEDXTable()

G4PhysicsTable * G4VEnergyLossProcess::DEDXTable ( ) const
inline

Definition at line 1003 of file G4VEnergyLossProcess.hh.

1004 {
1005  return theDEDXTable;
1006 }
G4PhysicsTable * theDEDXTable
Here is the caller graph for this function:

◆ DEDXTableForSubsec()

G4PhysicsTable * G4VEnergyLossProcess::DEDXTableForSubsec ( ) const
inline

Definition at line 1010 of file G4VEnergyLossProcess.hh.

1011 {
1012  return theDEDXSubTable;
1013 }
G4PhysicsTable * theDEDXSubTable
Here is the caller graph for this function:

◆ DEDXunRestrictedTable()

G4PhysicsTable * G4VEnergyLossProcess::DEDXunRestrictedTable ( ) const
inline

Definition at line 1017 of file G4VEnergyLossProcess.hh.

1018 {
1019  return theDEDXunRestrictedTable;
1020 }
G4PhysicsTable * theDEDXunRestrictedTable
Here is the caller graph for this function:

◆ DefineMaterial()

void G4VEnergyLossProcess::DefineMaterial ( const G4MaterialCutsCouple couple)
inlineprivate

Definition at line 634 of file G4VEnergyLossProcess.hh.

635 {
636  if(couple != currentCouple) {
637  currentCouple = couple;
638  currentMaterial = couple->GetMaterial();
639  currentCoupleIndex = couple->GetIndex();
640  basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
641  fFactor = chargeSqRatio*biasFactor*(*theDensityFactor)[currentCoupleIndex];
644  idxLambda = idxSubLambda = 0;
645  }
646 }
const G4Material * GetMaterial() const
const G4MaterialCutsCouple * currentCouple
const G4Material * currentMaterial
#define DBL_MAX
Definition: templates.hh:83
Here is the call graph for this function:
Here is the caller graph for this function:

◆ EmModel()

G4VEmModel * G4VEnergyLossProcess::EmModel ( G4int  index = 1) const

Definition at line 420 of file G4VEnergyLossProcess.cc.

421 {
422  G4VEmModel* p = nullptr;
423  if(index >= 0 && index < G4int(emModels.size())) { p = emModels[index]; }
424  return p;
425 }
Int_t index
int G4int
Definition: G4Types.hh:78
std::vector< G4VEmModel * > emModels
Here is the caller graph for this function:

◆ FillSecondariesAlongStep()

void G4VEnergyLossProcess::FillSecondariesAlongStep ( G4double eloss,
G4double weight 
)
private

Definition at line 1505 of file G4VEnergyLossProcess.cc.

1506 {
1507  G4int n0 = scTracks.size();
1508 
1509  // weight may be changed by biasing manager
1510  if(biasManager) {
1512  weight *=
1514  }
1515  }
1516 
1517  // fill secondaries
1518  G4int n = scTracks.size();
1519  fParticleChange.SetNumberOfSecondaries(n);
1520 
1521  for(G4int i=0; i<n; ++i) {
1522  G4Track* t = scTracks[i];
1523  if(t) {
1524  t->SetWeight(weight);
1525  pParticleChange->AddSecondary(t);
1526  if(i >= n0) { t->SetCreatorModelIndex(biasID); }
1527  //G4cout << "Secondary(along step) has weight " << t->GetWeight()
1528  //<< ", kenergy " << t->GetKineticEnergy()/MeV << " MeV" <<G4endl;
1529  }
1530  }
1531  scTracks.clear();
1532 }
G4bool SecondaryBiasingRegion(G4int coupleIdx)
G4ParticleChangeForLoss fParticleChange
double weight
Definition: plottest35.C:25
int G4int
Definition: G4Types.hh:78
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle *> &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
Char_t n[5]
std::vector< G4Track * > scTracks
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
G4EmBiasingManager * biasManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FluctModel()

G4VEmFluctuationModel * G4VEnergyLossProcess::FluctModel ( )
inline

Definition at line 888 of file G4VEnergyLossProcess.hh.

889 {
890  return fluctModel;
891 }
G4VEmFluctuationModel * fluctModel
Here is the caller graph for this function:

◆ GetContinuousStepLimit()

G4double G4VEnergyLossProcess::GetContinuousStepLimit ( const G4Track &  track,
G4double  previousStepSize,
G4double  currentMinimumStep,
G4double currentSafety 
)
protectedvirtual

Implements G4VContinuousDiscreteProcess.

Definition at line 2013 of file G4VEnergyLossProcess.cc.

2016 {
2017  return DBL_MAX;
2018 }
#define DBL_MAX
Definition: templates.hh:83

◆ GetCSDARange()

G4double G4VEnergyLossProcess::GetCSDARange ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 806 of file G4VEnergyLossProcess.hh.

808 {
809  DefineMaterial(couple);
810  G4double x = DBL_MAX;
811  if(theCSDARangeTable) {
813  }
814  return x;
815 }
G4PhysicsTable * theCSDARangeTable
G4double GetLimitScaledRangeForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetCurrentElement()

const G4Element * G4VEnergyLossProcess::GetCurrentElement ( ) const

Definition at line 2258 of file G4VEnergyLossProcess.cc.

2259 {
2260  const G4Element* elm = nullptr;
2261  if(currentModel) { elm = currentModel->GetCurrentElement(); }
2262  return elm;
2263 }
const G4Element * GetCurrentElement() const
Definition: G4VEmModel.hh:467
Here is the call graph for this function:

◆ GetDEDX()

G4double G4VEnergyLossProcess::GetDEDX ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 769 of file G4VEnergyLossProcess.hh.

771 {
772  DefineMaterial(couple);
773  return GetDEDXForScaledEnergy(kineticEnergy*massRatio);
774 }
G4double GetDEDXForScaledEnergy(G4double scaledKinEnergy)
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDEDXDispersion()

G4double G4VEnergyLossProcess::GetDEDXDispersion ( const G4MaterialCutsCouple couple,
const G4DynamicParticle dp,
G4double  length 
)

Definition at line 1941 of file G4VEnergyLossProcess.cc.

1945 {
1946  DefineMaterial(couple);
1947  G4double ekin = dp->GetKineticEnergy();
1948  SelectModel(ekin*massRatio);
1950  tmax = std::min(tmax,(*theCuts)[currentCoupleIndex]);
1951  G4double d = 0.0;
1953  if(fm) { d = fm->Dispersion(currentMaterial,dp,tmax,length); }
1954  return d;
1955 }
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
Definition: G4VEmModel.hh:482
Float_t d
void SelectModel(G4double kinEnergy)
G4VEmFluctuationModel * GetModelOfFluctuations()
Definition: G4VEmModel.hh:610
const G4DataVector * theCuts
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double tmax, G4double length)=0
G4double GetKineticEnergy() const
const G4Material * currentMaterial
double G4double
Definition: G4Types.hh:76
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDEDXForScaledEnergy()

G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 661 of file G4VEnergyLossProcess.hh.

662 {
663  /*
664  G4cout << "G4VEnergyLossProcess::GetDEDX: Idx= "
665  << basedCoupleIndex << " E(MeV)= " << e
666  << " Emin= " << minKinEnergy << " Factor= " << fFactor
667  << " " << theDEDXTable << G4endl; */
668  G4double x = fFactor*(*theDEDXTable)[basedCoupleIndex]->Value(e, idxDEDX);
669  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
670  return x;
671 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetDEDXForSubsec()

G4double G4VEnergyLossProcess::GetDEDXForSubsec ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 779 of file G4VEnergyLossProcess.hh.

781 {
782  DefineMaterial(couple);
783  return GetSubDEDXForScaledEnergy(kineticEnergy*massRatio);
784 }
G4double GetSubDEDXForScaledEnergy(G4double scaledKinEnergy)
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetIonisationForScaledEnergy()

G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 685 of file G4VEnergyLossProcess.hh.

686 {
687  G4double x =
688  fFactor*(*theIonisationTable)[basedCoupleIndex]->Value(e, idxIonisation);
689  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
690  return x;
691 }
double G4double
Definition: G4Types.hh:76

◆ GetKineticEnergy()

G4double G4VEnergyLossProcess::GetKineticEnergy ( G4double range,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 835 of file G4VEnergyLossProcess.hh.

837 {
838  DefineMaterial(couple);
840 }
G4double ScaledKinEnergyForLoss(G4double range)
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLambda()

G4double G4VEnergyLossProcess::GetLambda ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 845 of file G4VEnergyLossProcess.hh.

847 {
848  DefineMaterial(couple);
849  G4double x = 0.0;
850  if(theLambdaTable) {
851  x = GetLambdaForScaledEnergy(kineticEnergy*massRatio);
852  }
853  return x;
854 }
G4PhysicsTable * theLambdaTable
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:

◆ GetLambdaForScaledEnergy()

G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 761 of file G4VEnergyLossProcess.hh.

762 {
763  return fFactor*((*theLambdaTable)[basedCoupleIndex])->Value(e, idxLambda);
764 }
Here is the caller graph for this function:

◆ GetLimitScaledRangeForScaledEnergy()

G4double G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 728 of file G4VEnergyLossProcess.hh.

729 {
730  G4double x;
731  if (e < maxKinEnergyCSDA) {
732  x = ((*theCSDARangeTable)[basedCoupleIndex])->Value(e, idxCSDA);
733  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
734  } else {
737  }
738  return x;
739 }
std::vector< G4double > theDEDXAtMaxEnergy
std::vector< G4double > theRangeAtMaxEnergy
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetMeanFreePath()

G4double G4VEnergyLossProcess::GetMeanFreePath ( const G4Track &  track,
G4double  previousStepSize,
G4ForceCondition *  condition 
)
protectedvirtual

Implements G4VContinuousDiscreteProcess.

Reimplemented in G4ePolarizedIonisation.

Definition at line 2001 of file G4VEnergyLossProcess.cc.

2006 {
2007  *condition = NotForced;
2008  return MeanFreePath(track);
2009 }
G4double condition(const G4ErrorSymMatrix &m)
G4double MeanFreePath(const G4Track &track)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetModelByIndex()

G4VEmModel * G4VEnergyLossProcess::GetModelByIndex ( G4int  idx = 0,
G4bool  ver = false 
) const

Definition at line 429 of file G4VEnergyLossProcess.cc.

430 {
431  return modelManager->GetModel(idx, ver);
432 }
G4VEmModel * GetModel(G4int, G4bool ver=false)
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetRange()

G4double G4VEnergyLossProcess::GetRange ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 789 of file G4VEnergyLossProcess.hh.

791 {
792  G4double x = fRange;
793  DefineMaterial(couple);
794  if(theCSDARangeTable) {
796  * reduceFactor;
797  } else if(theRangeTableForLoss) {
799  }
800  return x;
801 }
G4PhysicsTable * theCSDARangeTable
G4PhysicsTable * theRangeTableForLoss
G4double GetLimitScaledRangeForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetRangeForLoss()

G4double G4VEnergyLossProcess::GetRangeForLoss ( G4double kineticEnergy,
const G4MaterialCutsCouple couple 
)
inline

Definition at line 820 of file G4VEnergyLossProcess.hh.

822 {
823  // G4cout << "GetRangeForLoss: Range from " << GetProcessName() << G4endl;
824  DefineMaterial(couple);
825  G4double x =
827  //G4cout << "GetRangeForLoss: Range from " << GetProcessName()
828  // << " e= " << kineticEnergy << " r= " << x << G4endl;
829  return x;
830 }
double G4double
Definition: G4Types.hh:76
G4double GetScaledRangeForScaledEnergy(G4double scaledKinEnergy)
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetScaledRangeForScaledEnergy()

G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 706 of file G4VEnergyLossProcess.hh.

707 {
708  //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= "
709  // << basedCoupleIndex << " E(MeV)= " << e
710  // << " lastIdx= " << lastIdx << " " << theRangeTableForLoss << G4endl;
714  computedRange =
715  ((*theRangeTableForLoss)[basedCoupleIndex])->Value(e, idxRange);
716  if(e < minKinEnergy) { computedRange *= std::sqrt(e/minKinEnergy); }
717  }
718  //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= "
719  // << basedCoupleIndex << " E(MeV)= " << e
720  // << " R= " << fRange << " " << theRangeTableForLoss << G4endl;
721 
722  return computedRange;
723 }
Here is the caller graph for this function:

◆ GetSubDEDXForScaledEnergy()

G4double G4VEnergyLossProcess::GetSubDEDXForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 675 of file G4VEnergyLossProcess.hh.

676 {
677  G4double x =
678  fFactor*(*theDEDXSubTable)[basedCoupleIndex]->Value(e, idxDEDXSub);
679  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
680  return x;
681 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetSubIonisationForScaledEnergy()

G4double G4VEnergyLossProcess::GetSubIonisationForScaledEnergy ( G4double  scaledKinEnergy)
inlineprivate

Definition at line 696 of file G4VEnergyLossProcess.hh.

697 {
698  G4double x = fFactor*
699  (*theIonisationSubTable)[basedCoupleIndex]->Value(e, idxIonisationSub);
700  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
701  return x;
702 }
double G4double
Definition: G4Types.hh:76

◆ InitialiseEnergyLossProcess()

virtual void G4VEnergyLossProcess::InitialiseEnergyLossProcess ( const G4ParticleDefinition ,
const G4ParticleDefinition  
)
protectedpure virtual

Implemented in G4MuIonisation, G4hIonisation, G4MuBremsstrahlung, G4ionIonisation, G4eBremsstrahlung, G4eIonisation, G4MuPairProduction, G4ePolarizedIonisation, G4hhIonisation, G4mplIonisation, G4hBremsstrahlung, G4alphaIonisation, and G4hPairProduction.

Here is the caller graph for this function:

◆ InverseRangeTable()

G4PhysicsTable * G4VEnergyLossProcess::InverseRangeTable ( ) const
inline

Definition at line 1059 of file G4VEnergyLossProcess.hh.

1060 {
1061  return theInverseRangeTable;
1062 }
G4PhysicsTable * theInverseRangeTable
Here is the caller graph for this function:

◆ IonisationTable()

G4PhysicsTable * G4VEnergyLossProcess::IonisationTable ( ) const
inline

Definition at line 1024 of file G4VEnergyLossProcess.hh.

1025 {
1026  return theIonisationTable;
1027 }
G4PhysicsTable * theIonisationTable
Here is the caller graph for this function:

◆ IonisationTableForSubsec()

G4PhysicsTable * G4VEnergyLossProcess::IonisationTableForSubsec ( ) const
inline

Definition at line 1031 of file G4VEnergyLossProcess.hh.

1032 {
1033  return theIonisationSubTable;
1034 }
G4PhysicsTable * theIonisationSubTable
Here is the caller graph for this function:

◆ IsApplicable()

◆ IsIntegral()

G4bool G4VEnergyLossProcess::IsIntegral ( ) const
inline

Definition at line 954 of file G4VEnergyLossProcess.hh.

955 {
956  return integral;
957 }

◆ IsIonisationProcess()

G4bool G4VEnergyLossProcess::IsIonisationProcess ( ) const
inline

Definition at line 961 of file G4VEnergyLossProcess.hh.

962 {
963  return isIonisation;
964 }
Here is the caller graph for this function:

◆ LambdaPhysicsVector()

G4PhysicsVector * G4VEnergyLossProcess::LambdaPhysicsVector ( const G4MaterialCutsCouple ,
G4double  cut 
)
protected

Definition at line 2023 of file G4VEnergyLossProcess.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LambdaTable()

G4PhysicsTable * G4VEnergyLossProcess::LambdaTable ( ) const
inline

Definition at line 1066 of file G4VEnergyLossProcess.hh.

1067 {
1068  return theLambdaTable;
1069 }
G4PhysicsTable * theLambdaTable
Here is the caller graph for this function:

◆ MaxKinEnergy()

G4double G4VEnergyLossProcess::MaxKinEnergy ( ) const
inline

Definition at line 982 of file G4VEnergyLossProcess.hh.

983 {
984  return maxKinEnergy;
985 }

◆ MeanFreePath()

G4double G4VEnergyLossProcess::MeanFreePath ( const G4Track &  track)

Definition at line 1980 of file G4VEnergyLossProcess.cc.

1981 {
1982  DefineMaterial(track.GetMaterialCutsCouple());
1983  preStepLambda = GetLambdaForScaledEnergy(track.GetKineticEnergy()*massRatio);
1984  G4double x = DBL_MAX;
1985  if(0.0 < preStepLambda) { x = 1.0/preStepLambda; }
1986  return x;
1987 }
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MinKinEnergy()

G4double G4VEnergyLossProcess::MinKinEnergy ( ) const
inline

Definition at line 975 of file G4VEnergyLossProcess.hh.

976 {
977  return minKinEnergy;
978 }

◆ MinPrimaryEnergy()

G4double G4VEnergyLossProcess::MinPrimaryEnergy ( const G4ParticleDefinition ,
const G4Material ,
G4double  cut 
)
protectedvirtual

Reimplemented in G4ionIonisation, G4eIonisation, G4MuIonisation, G4hIonisation, G4MuBremsstrahlung, G4ePolarizedIonisation, G4MuPairProduction, G4alphaIonisation, and G4hhIonisation.

Definition at line 384 of file G4VEnergyLossProcess.cc.

387 {
388  return cut;
389 }
Here is the caller graph for this function:

◆ NumberOfModels()

G4int G4VEnergyLossProcess::NumberOfModels ( ) const

Definition at line 436 of file G4VEnergyLossProcess.cc.

437 {
438  return modelManager->NumberOfModels();
439 }
G4int NumberOfModels() const
G4EmModelManager * modelManager
Here is the call graph for this function:

◆ NumberOfSubCutoffRegions()

G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions ( ) const
inline

Definition at line 968 of file G4VEnergyLossProcess.hh.

969 {
970  return nSCoffRegions;
971 }
Here is the caller graph for this function:

◆ operator=()

G4VEnergyLossProcess& G4VEnergyLossProcess::operator= ( const G4VEnergyLossProcess right)
private

◆ Particle()

const G4ParticleDefinition * G4VEnergyLossProcess::Particle ( ) const
inline

Definition at line 918 of file G4VEnergyLossProcess.hh.

919 {
920  return particle;
921 }
const G4ParticleDefinition * particle
Here is the caller graph for this function:

◆ PostStepDoIt()

G4VParticleChange * G4VEnergyLossProcess::PostStepDoIt ( const G4Track &  track,
const G4Step &  step 
)
virtual

Reimplemented from G4VContinuousDiscreteProcess.

Definition at line 1616 of file G4VEnergyLossProcess.cc.

1618 {
1619  // In all cases clear number of interaction lengths
1622 
1623  fParticleChange.InitializeForPostStep(track);
1624  G4double finalT = track.GetKineticEnergy();
1625  if(finalT <= lowestKinEnergy) { return &fParticleChange; }
1626 
1627  G4double postStepScaledEnergy = finalT*massRatio;
1628 
1629  if(!currentModel->IsActive(postStepScaledEnergy)) {
1630  return &fParticleChange;
1631  }
1632  /*
1633  if(-1 < verboseLevel) {
1634  G4cout << GetProcessName()
1635  << "::PostStepDoIt: E(MeV)= " << finalT/MeV
1636  << G4endl;
1637  }
1638  */
1639 
1640  // forced process - should happen only once per track
1641  if(biasFlag) {
1643  biasFlag = false;
1644  }
1645  }
1646 
1647  // Integral approach
1648  if (integral) {
1649  G4double lx = GetLambdaForScaledEnergy(postStepScaledEnergy);
1650  /*
1651  if(preStepLambda<lx && 1 < verboseLevel && nWarnings<200) {
1652  G4cout << "WARNING: for " << particle->GetParticleName()
1653  << " and " << GetProcessName()
1654  << " E(MeV)= " << finalT/MeV
1655  << " preLambda= " << preStepLambda
1656  << " < " << lx << " (postLambda) "
1657  << G4endl;
1658  ++nWarnings;
1659  }
1660  */
1661  if(lx <= 0.0 || preStepLambda*G4UniformRand() > lx) {
1662  return &fParticleChange;
1663  }
1664  }
1665 
1666  SelectModel(postStepScaledEnergy);
1667 
1668  // define new weight for primary and secondaries
1669  G4double weight = fParticleChange.GetParentWeight();
1670  if(weightFlag) {
1671  weight /= biasFactor;
1672  fParticleChange.ProposeWeight(weight);
1673  }
1674 
1675  const G4DynamicParticle* dynParticle = track.GetDynamicParticle();
1676  G4double tcut = (*theCuts)[currentCoupleIndex];
1677 
1678  // sample secondaries
1679  secParticles.clear();
1680  //G4cout<< "@@@ Eprimary= "<<dynParticle->GetKineticEnergy()/MeV
1681  // << " cut= " << tcut/MeV << G4endl;
1683  dynParticle, tcut);
1684 
1685  G4int num0 = secParticles.size();
1686 
1687  // bremsstrahlung splitting or Russian roulette
1688  if(biasManager) {
1690  G4double eloss = 0.0;
1692  secParticles,
1693  track, currentModel,
1694  &fParticleChange, eloss,
1695  currentCoupleIndex, tcut,
1696  step.GetPostStepPoint()->GetSafety());
1697  if(eloss > 0.0) {
1698  eloss += fParticleChange.GetLocalEnergyDeposit();
1699  fParticleChange.ProposeLocalEnergyDeposit(eloss);
1700  }
1701  }
1702  }
1703 
1704  // save secondaries
1705  G4int num = secParticles.size();
1706  if(num > 0) {
1707 
1708  fParticleChange.SetNumberOfSecondaries(num);
1709  G4double time = track.GetGlobalTime();
1710 
1711  for (G4int i=0; i<num; ++i) {
1712  if(secParticles[i]) {
1713  G4Track* t = new G4Track(secParticles[i], time, track.GetPosition());
1714  t->SetTouchableHandle(track.GetTouchableHandle());
1715  t->SetWeight(weight);
1716  if(i < num0) { t->SetCreatorModelIndex(secID); }
1717  else { t->SetCreatorModelIndex(biasID); }
1718 
1719  //G4cout << "Secondary(post step) has weight " << t->GetWeight()
1720  // << ", kenergy " << t->GetKineticEnergy()/MeV << " MeV"
1721  // << " time= " << time/ns << " ns " << G4endl;
1722  pParticleChange->AddSecondary(t);
1723  }
1724  }
1725  }
1726 
1727  if(0.0 == fParticleChange.GetProposedKineticEnergy() &&
1728  fAlive == fParticleChange.GetTrackStatus()) {
1730  { fParticleChange.ProposeTrackStatus(fStopButAlive); }
1731  else { fParticleChange.ProposeTrackStatus(fStopAndKill); }
1732  }
1733 
1734  /*
1735  if(-1 < verboseLevel) {
1736  G4cout << "::PostStepDoIt: Sample secondary; Efin= "
1737  << fParticleChange.GetProposedKineticEnergy()/MeV
1738  << " MeV; model= (" << currentModel->LowEnergyLimit()
1739  << ", " << currentModel->HighEnergyLimit() << ")"
1740  << " preStepLambda= " << preStepLambda
1741  << " dir= " << track.GetMomentumDirection()
1742  << " status= " << track.GetTrackStatus()
1743  << G4endl;
1744  }
1745  */
1746  return &fParticleChange;
1747 }
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4bool SecondaryBiasingRegion(G4int coupleIdx)
G4bool ForcedInteractionRegion(G4int coupleIdx)
G4ParticleChangeForLoss fParticleChange
G4double theNumberOfInteractionLengthLeft
Definition: G4VProcess.hh:293
void SelectModel(G4double kinEnergy)
G4ProcessManager * GetProcessManager() const
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
double weight
Definition: plottest35.C:25
int G4int
Definition: G4Types.hh:78
const G4MaterialCutsCouple * currentCouple
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle *> &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
#define G4UniformRand()
Definition: Randomize.hh:97
G4double currentInteractionLength
Definition: G4VProcess.hh:297
G4int size() const
const G4ParticleDefinition * particle
G4bool IsActive(G4double kinEnergy)
Definition: G4VEmModel.hh:753
G4VParticleChange * pParticleChange
Definition: G4VProcess.hh:283
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
double G4double
Definition: G4Types.hh:76
G4EmBiasingManager * biasManager
#define DBL_MAX
Definition: templates.hh:83
std::vector< G4DynamicParticle * > secParticles
Here is the call graph for this function:

◆ PostStepGetPhysicalInteractionLength()

G4double G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength ( const G4Track &  track,
G4double  previousStepSize,
G4ForceCondition *  condition 
)
virtual

Reimplemented from G4VContinuousDiscreteProcess.

Reimplemented in G4ePolarizedIonisation.

Definition at line 1148 of file G4VEnergyLossProcess.cc.

1152 {
1153  // condition is set to "Not Forced"
1154  *condition = NotForced;
1155  G4double x = DBL_MAX;
1156 
1157  // initialisation of material, mass, charge, model
1158  // at the beginning of the step
1159  DefineMaterial(track.GetMaterialCutsCouple());
1160  preStepKinEnergy = track.GetKineticEnergy();
1161  preStepScaledEnergy = preStepKinEnergy*massRatio;
1163 
1167  return x;
1168  }
1169 
1170  // change effective charge of an ion on fly
1171  if(isIon) {
1173  if(q2 != chargeSqRatio && q2 > 0.0) {
1174  chargeSqRatio = q2;
1175  fFactor = q2*biasFactor*(*theDensityFactor)[currentCoupleIndex];
1176  reduceFactor = 1.0/(fFactor*massRatio);
1177  }
1178  }
1179  // if(particle->GetPDGMass() > 0.9*GeV)
1180  //G4cout << "q2= "<<chargeSqRatio << " massRatio= " << massRatio << G4endl;
1181 
1182  // forced biasing only for primary particles
1183  if(biasManager) {
1184  if(0 == track.GetParentID()) {
1185  if(biasFlag &&
1187  return biasManager->GetStepLimit(currentCoupleIndex, previousStepSize);
1188  }
1189  }
1190  }
1191 
1192  // compute mean free path
1196 
1197  // zero cross section
1198  if(preStepLambda <= 0.0) {
1201  }
1202  }
1203 
1204  // non-zero cross section
1205  if(preStepLambda > 0.0) {
1207 
1208  // beggining of tracking (or just after DoIt of this process)
1211 
1212  } else if(currentInteractionLength < DBL_MAX) {
1213 
1214  // subtract NumberOfInteractionLengthLeft using previous step
1216  previousStepSize/currentInteractionLength;
1217 
1220  }
1221 
1222  // new mean free path and step limit
1225  }
1226 #ifdef G4VERBOSE
1227  if (verboseLevel>2){
1228  // if(particle->GetPDGMass() > 0.9*GeV){
1229  G4cout << "G4VEnergyLossProcess::PostStepGetPhysicalInteractionLength ";
1230  G4cout << "[ " << GetProcessName() << "]" << G4endl;
1231  G4cout << " for " << track.GetDefinition()->GetParticleName()
1232  << " in Material " << currentMaterial->GetName()
1233  << " Ekin(MeV)= " << preStepKinEnergy/MeV
1234  << " " << track.GetMaterial()->GetName()
1235  <<G4endl;
1236  G4cout << "MeanFreePath = " << currentInteractionLength/cm << "[cm]"
1237  << "InteractionLength= " << x/cm <<"[cm] " <<G4endl;
1238  }
1239 #endif
1240  return x;
1241 }
static const double cm
Definition: G4SIunits.hh:118
G4double condition(const G4ErrorSymMatrix &m)
static const double MeV
Definition: G4SIunits.hh:211
G4int verboseLevel
Definition: G4VProcess.hh:368
G4bool ForcedInteractionRegion(G4int coupleIdx)
G4double theNumberOfInteractionLengthLeft
Definition: G4VProcess.hh:293
void SelectModel(G4double kinEnergy)
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
void ComputeLambdaForScaledEnergy(G4double scaledKinEnergy)
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)
G4double currentInteractionLength
Definition: G4VProcess.hh:297
virtual G4double ChargeSquareRatio(const G4Track &)
Definition: G4VEmModel.cc:337
G4bool IsActive(G4double kinEnergy)
Definition: G4VEmModel.hh:753
G4double G4Log(G4double x)
Definition: G4Log.hh:230
const G4Material * currentMaterial
G4double GetLambdaForScaledEnergy(G4double scaledKinEnergy)
#define G4endl
Definition: G4ios.hh:61
G4double theInitialNumberOfInteractionLength
Definition: G4VProcess.hh:300
double G4double
Definition: G4Types.hh:76
const G4String & GetName() const
Definition: G4Material.hh:178
G4EmBiasingManager * biasManager
#define DBL_MAX
Definition: templates.hh:83
void DefineMaterial(const G4MaterialCutsCouple *couple)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PreparePhysicsTable()

void G4VEnergyLossProcess::PreparePhysicsTable ( const G4ParticleDefinition part)
virtual

Reimplemented from G4VProcess.

Definition at line 444 of file G4VEnergyLossProcess.cc.

445 {
446  if(1 < verboseLevel) {
447  G4cout << "G4VEnergyLossProcess::PreparePhysicsTable for "
448  << GetProcessName() << " for " << part.GetParticleName()
449  << " " << this << G4endl;
450  }
451 
452  const G4VEnergyLossProcess* masterProcess =
453  static_cast<const G4VEnergyLossProcess*>(GetMasterProcess());
454  if(masterProcess && masterProcess != this) { isMaster = false; }
455 
456  currentCouple = nullptr;
457  preStepLambda = 0.0;
459  fRange = DBL_MAX;
460  preStepKinEnergy = 0.0;
461  preStepRangeEnergy = 0.0;
462  chargeSqRatio = 1.0;
463  massRatio = 1.0;
464  reduceFactor = 1.0;
465  fFactor = 1.0;
466  lastIdx = 0;
467 
468  // Are particle defined?
469  if( !particle ) { particle = &part; }
470 
471  if(part.GetParticleType() == "nucleus") {
472 
473  G4String pname = part.GetParticleName();
474  if(pname != "deuteron" && pname != "triton" &&
475  pname != "alpha+" && pname != "helium" &&
476  pname != "hydrogen") {
477 
478  if(!theGenericIon) {
479  theGenericIon =
481  }
482  isIon = true;
486  size_t n = v->size();
487  for(size_t j=0; j<n; ++j) {
488  if((*v)[j] == this) {
490  break;
491  }
492  }
493  }
494  }
495  }
496 
497  if( particle != &part ) {
498  if(!isIon) {
499  lManager->RegisterExtraParticle(&part, this);
500  }
501  if(1 < verboseLevel) {
502  G4cout << "### G4VEnergyLossProcess::PreparePhysicsTable()"
503  << " interrupted for "
504  << part.GetParticleName() << " isIon= " << isIon
505  << " particle " << particle << " GenericIon " << theGenericIon
506  << G4endl;
507  }
508  return;
509  }
510 
511  Clean();
512  lManager->PreparePhysicsTable(&part, this, isMaster);
514 
515  // Base particle and set of models can be defined here
517 
518  const G4ProductionCutsTable* theCoupleTable=
520  size_t n = theCoupleTable->GetTableSize();
521 
522  theDEDXAtMaxEnergy.resize(n, 0.0);
523  theRangeAtMaxEnergy.resize(n, 0.0);
524  theEnergyOfCrossSectionMax.resize(n, 0.0);
525  theCrossSectionMax.resize(n, DBL_MAX);
526 
527  // parameters of the process
535  *G4lrint(std::log10(maxKinEnergyCSDA/minKinEnergy));
540 
541  G4double initialCharge = particle->GetPDGCharge();
542  G4double initialMass = particle->GetPDGMass();
543 
544  if (baseParticle) {
545  massRatio = (baseParticle->GetPDGMass())/initialMass;
546  G4double q = initialCharge/baseParticle->GetPDGCharge();
547  chargeSqRatio = q*q;
548  if(chargeSqRatio > 0.0) { reduceFactor = 1.0/(chargeSqRatio*massRatio); }
549  }
550  if(initialMass < MeV) {
552  } else {
554  }
555 
556  // Tables preparation
557  if (isMaster && !baseParticle) {
558 
559  if(theDEDXTable && isIonisation) {
562  delete theDEDXTable;
564  }
568  delete theDEDXSubTable;
570  }
571  }
572 
575 
576  if(theDEDXSubTable) {
577  theDEDXSubTable =
579  }
580 
581  if (lManager->BuildCSDARange()) {
586  }
587 
589 
590  if(isIonisation) {
595  }
596 
598  theDEDXSubTable =
602  }
603  }
604  /*
605  G4cout << "** G4VEnergyLossProcess::PreparePhysicsTable() for "
606  << GetProcessName() << " and " << particle->GetParticleName()
607  << " isMaster: " << isMaster << " isIonisation: "
608  << isIonisation << G4endl;
609  G4cout << " theDEDX: " << theDEDXTable
610  << " theRange: " << theRangeTableForLoss
611  << " theInverse: " << theInverseRangeTable
612  << " theLambda: " << theLambdaTable << G4endl;
613  */
614  // forced biasing
615  if(biasManager) {
617  biasFlag = false;
618  }
619 
620  // defined ID of secondary particles
621  if(isMaster) {
622  G4String nam1 = GetProcessName();
623  G4String nam4 = nam1 + "_split";
624  G4String nam5 = nam1 + "_subcut";
628  }
629 
630  // initialisation of models
632  for(G4int i=0; i<nmod; ++i) {
633  G4VEmModel* mod = modelManager->GetModel(i);
637  if(mod->HighEnergyLimit() > maxKinEnergy) {
639  }
640  }
643  verboseLevel);
644 
645  // Sub Cutoff
646  if(nSCoffRegions > 0) {
647  if(theParameters->MinSubRange() < 1.0) { useSubCutoff = true; }
648 
650 
651  idxSCoffRegions = new G4bool[n];
652  for (size_t j=0; j<n; ++j) {
653 
654  const G4MaterialCutsCouple* couple =
655  theCoupleTable->GetMaterialCutsCouple(j);
656  const G4ProductionCuts* pcuts = couple->GetProductionCuts();
657 
658  G4bool reg = false;
659  for(G4int i=0; i<nSCoffRegions; ++i) {
660  if( pcuts == scoffRegions[i]->GetProductionCuts()) {
661  reg = true;
662  break;
663  }
664  }
665  idxSCoffRegions[j] = reg;
666  }
667  }
668 
669  if(1 < verboseLevel) {
670  G4cout << "G4VEnergyLossProcess::PrepearPhysicsTable() is done "
671  << " for local " << particle->GetParticleName()
672  << " isIon= " << isIon;
673  if(baseParticle) {
674  G4cout << "; base: " << baseParticle->GetParticleName();
675  }
676  G4cout << " chargeSqRatio= " << chargeSqRatio
677  << " massRatio= " << massRatio
678  << " reduceFactor= " << reduceFactor << G4endl;
679  if (nSCoffRegions) {
680  G4cout << " SubCutoff Regime is ON for regions: " << G4endl;
681  for (G4int i=0; i<nSCoffRegions; ++i) {
682  const G4Region* r = scoffRegions[i];
683  G4cout << " " << r->GetName() << G4endl;
684  }
685  }
686  }
687 }
G4VSubCutProducer * SubCutProducer()
G4LossTableManager * lManager
std::vector< G4double > theEnergyOfCrossSectionMax
const G4VProcess * GetMasterProcess() const
Definition: G4VProcess.hh:538
static const double MeV
Definition: G4SIunits.hh:211
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4int verboseLevel
Definition: G4VProcess.hh:368
G4double MinSubRange() const
G4double MaxEnergyForCSDARange() const
G4VEmModel * GetModel(G4int, G4bool ver=false)
const G4ParticleDefinition * secondaryParticle
G4bool UseAngularGeneratorForIonisation() const
G4ProductionCuts * GetProductionCuts() const
G4PhysicsTable * theIonisationTable
const G4String & GetParticleType() const
const G4DataVector * SubCutoff() const
G4bool LossFluctuation() const
G4ProcessManager * GetProcessManager() const
G4int NumberOfBinsPerDecade() const
int G4int
Definition: G4Types.hh:78
static G4PhysicsTable * PreparePhysicsTable(G4PhysicsTable *physTable)
G4LossTableBuilder * GetTableBuilder()
G4int Verbose() const
static const G4double reg
const G4MaterialCutsCouple * currentCouple
G4bool BuildCSDARange() const
void Initialise(const G4ParticleDefinition &part, const G4String &procName, G4int verbose)
const G4DataVector * theCuts
void SetHighEnergyLimit(G4double)
Definition: G4VEmModel.hh:725
G4PhysicsTable * theSubLambdaTable
void SetAngularGeneratorFlag(G4bool)
Definition: G4VEmModel.hh:704
G4bool UseCutAsFinalRange() const
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
Char_t n[5]
const G4String & GetParticleName() const
const G4ParticleDefinition * baseParticle
G4GLOB_DLL std::ostream G4cout
const G4DataVector * theSubCuts
const G4ParticleDefinition * theGenericIon
G4double HighEnergyLimit() const
Definition: G4VEmModel.hh:634
bool G4bool
Definition: G4Types.hh:79
G4double MinKinEnergy() const
TString part[npart]
G4PhysicsTable * theCSDARangeTable
G4int size() const
std::vector< G4double > theDEDXAtMaxEnergy
const G4ParticleDefinition * particle
G4int NumberOfBins() const
string pname
Definition: eplot.py:33
void RegisterExtraParticle(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
std::vector< const G4Region * > scoffRegions
const G4DataVector * Initialise(const G4ParticleDefinition *part, const G4ParticleDefinition *secPart, G4double minSubRange, G4int verb)
const G4String & GetName() const
G4PhysicsTable * theLambdaTable
void SetMasterThread(G4bool val)
Definition: G4VEmModel.hh:711
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
static G4ProductionCutsTable * GetProductionCutsTable()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
G4PhysicsTable * theInverseRangeTable
std::vector< G4double > theCrossSectionMax
static G4ParticleTable * GetParticleTable()
G4double MaxKinEnergy() const
int G4lrint(double ad)
Definition: templates.hh:163
G4double LowestElectronEnergy() const
void InitialiseBaseMaterials(G4PhysicsTable *table)
static G4int Register(const G4String &)
G4PhysicsTable * theDEDXunRestrictedTable
G4PhysicsTable * theRangeTableForLoss
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
#define G4endl
Definition: G4ios.hh:61
std::vector< G4double > theRangeAtMaxEnergy
G4PhysicsTable * theDEDXTable
double G4double
Definition: G4Types.hh:76
G4int WorkerVerbose() const
G4EmBiasingManager * biasManager
G4double LambdaFactor() const
G4double LowestMuHadEnergy() const
G4PhysicsTable * theDEDXSubTable
#define DBL_MAX
Definition: templates.hh:83
G4double LinearLossLimit() const
G4EmParameters * theParameters
G4int NumberOfModels() const
G4double GetPDGCharge() const
void clearAndDestroy()
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:437
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition *, const G4ParticleDefinition *)=0
G4PhysicsTable * theIonisationSubTable
G4EmModelManager * modelManager

◆ PrintInfo()

virtual void G4VEnergyLossProcess::PrintInfo ( )
pure virtual

Implemented in G4MuIonisation, G4hIonisation, G4MuBremsstrahlung, G4eBremsstrahlung, G4eIonisation, G4ionIonisation, G4MuPairProduction, G4ePolarizedIonisation, G4hhIonisation, G4mplIonisation, and G4alphaIonisation.

Here is the caller graph for this function:

◆ PrintInfoDefinition()

void G4VEnergyLossProcess::PrintInfoDefinition ( const G4ParticleDefinition part)

Definition at line 969 of file G4VEnergyLossProcess.cc.

970 {
971  if(0 < verboseLevel) {
972  G4cout << std::setprecision(6);
973  G4cout << G4endl << GetProcessName() << ": for "
974  << part.GetParticleName()
975  << " SubType= " << GetProcessSubType()
976  << G4endl;
977  G4cout << " dE/dx and range tables from "
978  << G4BestUnit(minKinEnergy,"Energy")
979  << " to " << G4BestUnit(maxKinEnergy,"Energy")
980  << " in " << nBins << " bins" << G4endl
981  << " Lambda tables from threshold to "
982  << G4BestUnit(maxKinEnergy,"Energy")
983  << ", " << theParameters->NumberOfBinsPerDecade()
984  << " bins per decade, spline: "
985  << theParameters->Spline()
986  << G4endl;
988  G4cout << " finalRange(mm)= " << finalRange/mm
989  << ", dRoverRange= " << dRoverRange
990  << ", integral: " << integral
991  << ", fluct: " << lossFluctuationFlag
992  << ", linLossLimit= " << linLossLimit
993  << G4endl;
994  }
995  PrintInfo();
998  G4cout << " CSDA range table up"
999  << " to " << G4BestUnit(maxKinEnergyCSDA,"Energy")
1000  << " in " << nBinsCSDA << " bins" << G4endl;
1001  }
1002  if(nSCoffRegions>0 && isIonisation) {
1003  G4cout << " Subcutoff sampling in " << nSCoffRegions
1004  << " regions" << G4endl;
1005  }
1006  if(2 < verboseLevel) {
1007  G4cout << " DEDXTable address= " << theDEDXTable << G4endl;
1008  if(theDEDXTable && isIonisation) G4cout << (*theDEDXTable) << G4endl;
1009  G4cout << "non restricted DEDXTable address= "
1012  G4cout << (*theDEDXunRestrictedTable) << G4endl;
1013  }
1014  if(theDEDXSubTable && isIonisation) {
1015  G4cout << (*theDEDXSubTable) << G4endl;
1016  }
1017  G4cout << " CSDARangeTable address= " << theCSDARangeTable
1018  << G4endl;
1020  G4cout << (*theCSDARangeTable) << G4endl;
1021  }
1022  G4cout << " RangeTableForLoss address= " << theRangeTableForLoss
1023  << G4endl;
1025  G4cout << (*theRangeTableForLoss) << G4endl;
1026  }
1027  G4cout << " InverseRangeTable address= " << theInverseRangeTable
1028  << G4endl;
1030  G4cout << (*theInverseRangeTable) << G4endl;
1031  }
1032  G4cout << " LambdaTable address= " << theLambdaTable << G4endl;
1033  if(theLambdaTable && isIonisation) {
1034  G4cout << (*theLambdaTable) << G4endl;
1035  }
1036  G4cout << " SubLambdaTable address= " << theSubLambdaTable
1037  << G4endl;
1039  G4cout << (*theSubLambdaTable) << G4endl;
1040  }
1041  }
1042  }
1043 }
G4int verboseLevel
Definition: G4VProcess.hh:368
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
G4int NumberOfBinsPerDecade() const
G4int GetProcessSubType() const
Definition: G4VProcess.hh:426
G4PhysicsTable * theSubLambdaTable
G4bool Spline() const
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4PhysicsTable * theCSDARangeTable
void DumpModelList(G4int verb)
G4PhysicsTable * theLambdaTable
G4PhysicsTable * theInverseRangeTable
virtual void PrintInfo()=0
G4PhysicsTable * theDEDXunRestrictedTable
G4PhysicsTable * theRangeTableForLoss
#define G4endl
Definition: G4ios.hh:61
G4PhysicsTable * theDEDXTable
G4PhysicsTable * theDEDXSubTable
G4EmParameters * theParameters
static const double mm
Definition: G4SIunits.hh:114
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrintWarning()

void G4VEnergyLossProcess::PrintWarning ( G4String  tit,
G4double  val 
)
private

Definition at line 2405 of file G4VEnergyLossProcess.cc.

2406 {
2407  G4String ss = "G4VEnergyLossProcess::" + tit;
2409  ed << "Parameter is out of range: " << val
2410  << " it will have no effect!\n" << " Process "
2411  << GetProcessName() << " nbins= " << nBins
2412  << " Emin(keV)= " << minKinEnergy/keV
2413  << " Emax(GeV)= " << maxKinEnergy/GeV;
2414  G4Exception(ss, "em0044", JustWarning, ed);
2415 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
static const double GeV
Definition: G4SIunits.hh:214
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static const double keV
Definition: G4SIunits.hh:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessDescription()

void G4VEnergyLossProcess::ProcessDescription ( std::ostream &  outFile) const
virtual

Definition at line 2419 of file G4VEnergyLossProcess.cc.

2420 {
2421  outFile << "Energy loss process <" << GetProcessName() << ">" << G4endl;
2422 }
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:

◆ RangeTableForLoss()

G4PhysicsTable * G4VEnergyLossProcess::RangeTableForLoss ( ) const
inline

Definition at line 1052 of file G4VEnergyLossProcess.hh.

1053 {
1054  return theRangeTableForLoss;
1055 }
G4PhysicsTable * theRangeTableForLoss
Here is the caller graph for this function:

◆ RetrievePhysicsTable()

G4bool G4VEnergyLossProcess::RetrievePhysicsTable ( const G4ParticleDefinition part,
const G4String directory,
G4bool  ascii 
)
virtual

Reimplemented from G4VProcess.

Definition at line 1814 of file G4VEnergyLossProcess.cc.

1817 {
1818  G4bool res = true;
1819  if (!isMaster) return res;
1820  const G4String particleName = part->GetParticleName();
1821 
1822  if(1 < verboseLevel) {
1823  G4cout << "G4VEnergyLossProcess::RetrievePhysicsTable() for "
1824  << particleName << " and process " << GetProcessName()
1825  << "; tables_are_built= " << tablesAreBuilt
1826  << G4endl;
1827  }
1828  if(particle == part) {
1829 
1830  if ( !baseParticle ) {
1831 
1832  G4bool fpi = true;
1833  if(!RetrieveTable(part,theDEDXTable,ascii,directory,"DEDX",fpi))
1834  {fpi = false;}
1835 
1836  // ionisation table keeps individual dEdx and not sum of sub-processes
1837  if(!RetrieveTable(part,theDEDXTable,ascii,directory,"Ionisation",false))
1838  {fpi = false;}
1839 
1840  if(!RetrieveTable(part,theRangeTableForLoss,ascii,directory,"Range",fpi))
1841  {res = false;}
1842 
1843  if(!RetrieveTable(part,theDEDXunRestrictedTable,ascii,directory,
1844  "DEDXnr",false))
1845  {res = false;}
1846 
1847  if(!RetrieveTable(part,theCSDARangeTable,ascii,directory,
1848  "CSDARange",false))
1849  {res = false;}
1850 
1851  if(!RetrieveTable(part,theInverseRangeTable,ascii,directory,
1852  "InverseRange",fpi))
1853  {res = false;}
1854 
1855  if(!RetrieveTable(part,theLambdaTable,ascii,directory,"Lambda",true))
1856  {res = false;}
1857 
1858  G4bool yes = false;
1859  if(nSCoffRegions > 0) {yes = true;}
1860 
1861  if(!RetrieveTable(part,theDEDXSubTable,ascii,directory,"SubDEDX",yes))
1862  {res = false;}
1863 
1864  if(!RetrieveTable(part,theSubLambdaTable,ascii,directory,
1865  "SubLambda",yes))
1866  {res = false;}
1867 
1868  if(!fpi) yes = false;
1869  if(!RetrieveTable(part,theIonisationSubTable,ascii,directory,
1870  "SubIonisation",yes))
1871  {res = false;}
1872  }
1873  }
1874 
1875  return res;
1876 }
G4int verboseLevel
Definition: G4VProcess.hh:368
G4PhysicsTable * theSubLambdaTable
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
const G4ParticleDefinition * baseParticle
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
G4PhysicsTable * theCSDARangeTable
const G4ParticleDefinition * particle
G4PhysicsTable * theLambdaTable
G4PhysicsTable * theInverseRangeTable
G4PhysicsTable * theDEDXunRestrictedTable
G4PhysicsTable * theRangeTableForLoss
#define G4endl
Definition: G4ios.hh:61
G4bool RetrieveTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname, G4bool mandatory)
G4PhysicsTable * theDEDXTable
G4PhysicsTable * theDEDXSubTable
G4PhysicsTable * theIonisationSubTable
Here is the call graph for this function:

◆ RetrieveTable()

G4bool G4VEnergyLossProcess::RetrieveTable ( const G4ParticleDefinition p,
G4PhysicsTable aTable,
G4bool  ascii,
const G4String directory,
const G4String tname,
G4bool  mandatory 
)
private

Definition at line 1900 of file G4VEnergyLossProcess.cc.

1906 {
1907  G4bool isRetrieved = false;
1908  G4String filename = GetPhysicsTableFileName(part,directory,tname,ascii);
1909  if(aTable) {
1910  if(aTable->ExistPhysicsTable(filename)) {
1911  if(G4PhysicsTableHelper::RetrievePhysicsTable(aTable,filename,ascii)) {
1912  isRetrieved = true;
1913  if(theParameters->Spline()) {
1914  size_t n = aTable->length();
1915  for(size_t i=0; i<n; ++i) {
1916  if((*aTable)[i]) { (*aTable)[i]->SetSpline(true); }
1917  }
1918  }
1919  if (0 < verboseLevel) {
1920  G4cout << tname << " table for " << part->GetParticleName()
1921  << " is Retrieved from <" << filename << ">"
1922  << G4endl;
1923  }
1924  }
1925  }
1926  }
1927  if(mandatory && !isRetrieved) {
1928  if(0 < verboseLevel) {
1929  G4cout << tname << " table for " << part->GetParticleName()
1930  << " from file <"
1931  << filename << "> is not Retrieved"
1932  << G4endl;
1933  }
1934  return false;
1935  }
1936  return true;
1937 }
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
Definition: G4VProcess.cc:186
G4bool Spline() const
Char_t n[5]
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
TString part[npart]
G4bool ExistPhysicsTable(const G4String &fileName) const
size_t length() const
#define G4endl
Definition: G4ios.hh:61
static G4bool RetrievePhysicsTable(G4PhysicsTable *physTable, const G4String &fileName, G4bool ascii)
G4EmParameters * theParameters
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SampleSubCutSecondaries()

G4double G4VEnergyLossProcess::SampleSubCutSecondaries ( std::vector< G4Track *> &  tracks,
const G4Step &  step,
G4VEmModel model,
G4int  matIdx 
)

Definition at line 1537 of file G4VEnergyLossProcess.cc.

1541 {
1542  // Fast check weather subcutoff can work
1543  G4double esec = 0.0;
1544  G4double subcut = (*theSubCuts)[idx];
1545  G4double cut = (*theCuts)[idx];
1546  if(cut <= subcut) { return esec; }
1547 
1548  const G4Track* track = step.GetTrack();
1549  const G4DynamicParticle* dp = track->GetDynamicParticle();
1551  G4double cross = (*theDensityFactor)[idx]*chargeSqRatio
1552  *(((*theSubLambdaTable)[(*theDensityIdx)[idx]])->Value(e, idxSubLambda));
1553  G4double length = step.GetStepLength();
1554 
1555  // negligible probability to get any interaction
1556  if(length*cross < perMillion) { return esec; }
1557  /*
1558  if(-1 < verboseLevel)
1559  G4cout << "<<< Subcutoff for " << GetProcessName()
1560  << " cross(1/mm)= " << cross*mm << ">>>"
1561  << " e(MeV)= " << preStepScaledEnergy
1562  << " matIdx= " << currentCoupleIndex
1563  << G4endl;
1564  */
1565 
1566  // Sample subcutoff secondaries
1567  G4StepPoint* preStepPoint = step.GetPreStepPoint();
1568  G4StepPoint* postStepPoint = step.GetPostStepPoint();
1569  G4ThreeVector prepoint = preStepPoint->GetPosition();
1570  G4ThreeVector dr = postStepPoint->GetPosition() - prepoint;
1571  G4double pretime = preStepPoint->GetGlobalTime();
1572  G4double dt = postStepPoint->GetGlobalTime() - pretime;
1573  //G4double dt = length/preStepPoint->GetVelocity();
1574  G4double fragment = 0.0;
1575 
1576  do {
1577  G4double del = -G4Log(G4UniformRand())/cross;
1578  fragment += del/length;
1579  if (fragment > 1.0) { break; }
1580 
1581  // sample secondaries
1582  secParticles.clear();
1583  model->SampleSecondaries(&secParticles,track->GetMaterialCutsCouple(),
1584  dp,subcut,cut);
1585 
1586  // position of subcutoff particles
1587  G4ThreeVector r = prepoint + fragment*dr;
1588  std::vector<G4DynamicParticle*>::iterator it;
1589  for(it=secParticles.begin(); it!=secParticles.end(); ++it) {
1590 
1591  G4Track* t = new G4Track((*it), pretime + fragment*dt, r);
1592  t->SetTouchableHandle(track->GetTouchableHandle());
1593  t->SetCreatorModelIndex(subsecID);
1594  tracks.push_back(t);
1595  esec += t->GetKineticEnergy();
1596  if (t->GetParticleDefinition() == thePositron) {
1597  esec += 2.0*electron_mass_c2;
1598  }
1599 
1600  /*
1601  if(-1 < verboseLevel)
1602  G4cout << "New track "
1603  << t->GetParticleDefinition()->GetParticleName()
1604  << " e(keV)= " << t->GetKineticEnergy()/keV
1605  << " fragment= " << fragment
1606  << G4endl;
1607  */
1608  }
1609  // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
1610  } while (fragment <= 1.0);
1611  return esec;
1612 }
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
G4double GetKineticEnergy() const
#define G4UniformRand()
Definition: Randomize.hh:97
const G4ParticleDefinition * thePositron
float electron_mass_c2
Definition: hepunit.py:274
G4double G4Log(G4double x)
Definition: G4Log.hh:230
static const double perMillion
Definition: G4SIunits.hh:331
double G4double
Definition: G4Types.hh:76
std::vector< G4DynamicParticle * > secParticles
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ScaledKinEnergyForLoss()

G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss ( G4double  range)
inlineprivate

Definition at line 743 of file G4VEnergyLossProcess.hh.

744 {
745  //G4cout << "G4VEnergyLossProcess::GetEnergy: Idx= "
746  // << basedCoupleIndex << " R(mm)= " << r << " "
747  // << theInverseRangeTable << G4endl;
748  G4PhysicsVector* v = (*theInverseRangeTable)[basedCoupleIndex];
749  G4double rmin = v->Energy(0);
750  G4double e = 0.0;
751  if(r >= rmin) { e = v->Value(r, idxInverseRange); }
752  else if(r > 0.0) {
753  G4double x = r/rmin;
754  e = minKinEnergy*x*x;
755  }
756  return e;
757 }
G4double Value(G4double theEnergy, size_t &lastidx) const
G4double Energy(size_t index) const
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SecondaryParticle()

const G4ParticleDefinition * G4VEnergyLossProcess::SecondaryParticle ( ) const
inline

Definition at line 933 of file G4VEnergyLossProcess.hh.

934 {
935  return secondaryParticle;
936 }
const G4ParticleDefinition * secondaryParticle
Here is the caller graph for this function:

◆ SecondaryRangeTable()

G4PhysicsTable * G4VEnergyLossProcess::SecondaryRangeTable ( ) const
inline

Definition at line 1045 of file G4VEnergyLossProcess.hh.

1046 {
1047  return theSecondaryRangeTable;
1048 }
G4PhysicsTable * theSecondaryRangeTable
Here is the caller graph for this function:

◆ SelectModel()

void G4VEnergyLossProcess::SelectModel ( G4double  kinEnergy)
inlineprotected

Definition at line 617 of file G4VEnergyLossProcess.hh.

618 {
621 }
const G4MaterialCutsCouple * currentCouple
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:445
G4VEmModel * SelectModel(G4double &energy, size_t &index)
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectModelForMaterial()

G4VEmModel * G4VEnergyLossProcess::SelectModelForMaterial ( G4double  kinEnergy,
size_t &  idx 
) const
inline

Definition at line 625 of file G4VEnergyLossProcess.hh.

627 {
628  return modelManager->SelectModel(kinEnergy, idx);
629 }
G4VEmModel * SelectModel(G4double &energy, size_t &index)
G4EmModelManager * modelManager
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetBaseParticle()

void G4VEnergyLossProcess::SetBaseParticle ( const G4ParticleDefinition p)
inline

Definition at line 911 of file G4VEnergyLossProcess.hh.

912 {
913  baseParticle = p;
914 }
const G4ParticleDefinition * baseParticle
Here is the caller graph for this function:

◆ SetCrossSectionBiasingFactor()

void G4VEnergyLossProcess::SetCrossSectionBiasingFactor ( G4double  f,
G4bool  flag = true 
)

Definition at line 2267 of file G4VEnergyLossProcess.cc.

2269 {
2270  if(f > 0.0) {
2271  biasFactor = f;
2272  weightFlag = flag;
2273  if(1 < verboseLevel) {
2274  G4cout << "### SetCrossSectionBiasingFactor: for "
2275  << " process " << GetProcessName()
2276  << " biasFactor= " << f << " weightFlag= " << flag
2277  << G4endl;
2278  }
2279  }
2280 }
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetCSDARangeTable()

void G4VEnergyLossProcess::SetCSDARangeTable ( G4PhysicsTable pRange)

Definition at line 2122 of file G4VEnergyLossProcess.cc.

2123 {
2124  theCSDARangeTable = p;
2125 
2126  if(p) {
2127  size_t n = p->length();
2128  G4PhysicsVector* pv;
2130 
2131  for (size_t i=0; i<n; ++i) {
2132  pv = (*p)[i];
2133  G4double rmax = 0.0;
2134  if(pv) { rmax = pv->Value(emax, idxCSDA); }
2135  else {
2136  pv = (*p)[(*theDensityIdx)[i]];
2137  if(pv) { rmax = pv->Value(emax, idxCSDA)/(*theDensityFactor)[i]; }
2138  }
2139  theRangeAtMaxEnergy[i] = rmax;
2140  //G4cout << "i= " << i << " Emax(MeV)= " << emax/MeV << " Rmax= "
2141  //<< rmax<< G4endl;
2142  }
2143  }
2144 }
Char_t n[5]
G4PhysicsTable * theCSDARangeTable
G4double Value(G4double theEnergy, size_t &lastidx) const
static const G4double emax
std::vector< G4double > theRangeAtMaxEnergy
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetDEDXBinning()

void G4VEnergyLossProcess::SetDEDXBinning ( G4int  nbins)

Definition at line 2371 of file G4VEnergyLossProcess.cc.

2372 {
2373  if(2 < n && n < 1000000000) {
2374  nBins = n;
2375  actBinning = true;
2376  } else {
2377  G4double e = (G4double)n;
2378  PrintWarning("SetDEDXBinning", e);
2379  }
2380 }
void PrintWarning(G4String, G4double val)
Char_t n[5]
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetDEDXTable()

void G4VEnergyLossProcess::SetDEDXTable ( G4PhysicsTable p,
G4EmTableType  tType 
)

Definition at line 2061 of file G4VEnergyLossProcess.cc.

2062 {
2063  if(fTotal == tType) {
2065  if(p) {
2066  size_t n = p->length();
2067  G4PhysicsVector* pv = (*p)[0];
2069 
2073 
2074  for (size_t i=0; i<n; ++i) {
2075  G4double dedx = 0.0;
2076  pv = (*p)[i];
2077  if(pv) {
2078  dedx = pv->Value(emax, idxDEDXunRestricted);
2079  } else {
2080  pv = (*p)[(*theDensityIdx)[i]];
2081  if(pv) {
2082  dedx =
2083  pv->Value(emax, idxDEDXunRestricted)*(*theDensityFactor)[i];
2084  }
2085  }
2086  theDEDXAtMaxEnergy[i] = dedx;
2087  //G4cout << "i= " << i << " emax(MeV)= " << emax/MeV<< " dedx= "
2088  // << dedx << G4endl;
2089  }
2090  }
2091 
2092  } else if(fRestricted == tType) {
2093  /*
2094  G4cout<< "G4VEnergyLossProcess::SetDEDXTable "
2095  << particle->GetParticleName()
2096  << " oldTable " << theDEDXTable << " newTable " << p
2097  << " ion " << theIonisationTable
2098  << " IsMaster " << isMaster
2099  << " " << GetProcessName() << G4endl;
2100  G4cout << (*p) << G4endl;
2101  */
2102  theDEDXTable = p;
2103  } else if(fSubRestricted == tType) {
2104  theDEDXSubTable = p;
2105  } else if(fIsIonisation == tType) {
2106  /*
2107  G4cout<< "G4VEnergyLossProcess::SetIonisationTable "
2108  << particle->GetParticleName()
2109  << " oldTable " << theDEDXTable << " newTable " << p
2110  << " ion " << theIonisationTable
2111  << " IsMaster " << isMaster
2112  << " " << GetProcessName() << G4endl;
2113  */
2114  theIonisationTable = p;
2115  } else if(fIsSubIonisation == tType) {
2117  }
2118 }
G4LossTableManager * lManager
const std::vector< G4double > * GetDensityFactors()
const std::vector< G4double > * theDensityFactor
const std::vector< G4int > * theDensityIdx
G4PhysicsTable * theIonisationTable
G4LossTableBuilder * GetTableBuilder()
Char_t n[5]
std::vector< G4double > theDEDXAtMaxEnergy
G4double Value(G4double theEnergy, size_t &lastidx) const
static const G4double emax
G4PhysicsTable * theDEDXunRestrictedTable
size_t length() const
G4PhysicsTable * theDEDXTable
double G4double
Definition: G4Types.hh:76
G4PhysicsTable * theDEDXSubTable
G4PhysicsTable * theIonisationSubTable
const std::vector< G4int > * GetCoupleIndexes()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetDynamicMassCharge()

void G4VEnergyLossProcess::SetDynamicMassCharge ( G4double  massratio,
G4double  charge2ratio 
)
inline

Definition at line 650 of file G4VEnergyLossProcess.hh.

652 {
653  massRatio = massratio;
654  fFactor = charge2ratio*biasFactor*(*theDensityFactor)[currentCoupleIndex];
655  chargeSqRatio = charge2ratio;
657 }
Here is the caller graph for this function:

◆ SetEmModel()

void G4VEnergyLossProcess::SetEmModel ( G4VEmModel p,
G4int  index = 1 
)

Definition at line 411 of file G4VEnergyLossProcess.cc.

412 {
413  G4int n = emModels.size();
414  if(index >= n) { for(G4int i=n; i<=index; ++i) {emModels.push_back(0);} }
415  emModels[index] = p;
416 }
Int_t index
int G4int
Definition: G4Types.hh:78
Char_t n[5]
std::vector< G4VEmModel * > emModels
Here is the caller graph for this function:

◆ SetFluctModel()

void G4VEnergyLossProcess::SetFluctModel ( G4VEmFluctuationModel p)
inline

Definition at line 881 of file G4VEnergyLossProcess.hh.

882 {
883  fluctModel = p;
884 }
G4VEmFluctuationModel * fluctModel
Here is the caller graph for this function:

◆ SetIntegral()

void G4VEnergyLossProcess::SetIntegral ( G4bool  val)
inline

Definition at line 947 of file G4VEnergyLossProcess.hh.

948 {
949  integral = val;
950 }
Here is the caller graph for this function:

◆ SetInverseRangeTable()

void G4VEnergyLossProcess::SetInverseRangeTable ( G4PhysicsTable p)

Definition at line 2172 of file G4VEnergyLossProcess.cc.

2173 {
2175  if(1 < verboseLevel) {
2176  G4cout << "### Set InverseRange table " << p
2177  << " for " << particle->GetParticleName()
2178  << " and process " << GetProcessName() << G4endl;
2179  }
2180 }
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * particle
G4PhysicsTable * theInverseRangeTable
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetIonisation()

void G4VEnergyLossProcess::SetIonisation ( G4bool  val)

Definition at line 2330 of file G4VEnergyLossProcess.cc.

2331 {
2332  isIonisation = val;
2333  if(val) { aGPILSelection = CandidateForSelection; }
2334  else { aGPILSelection = NotCandidateForSelection; }
2335 }
G4GPILSelection aGPILSelection
Here is the caller graph for this function:

◆ SetLambdaTable()

void G4VEnergyLossProcess::SetLambdaTable ( G4PhysicsTable p)

Definition at line 2184 of file G4VEnergyLossProcess.cc.

2185 {
2186  if(1 < verboseLevel) {
2187  G4cout << "### Set Lambda table " << p
2188  << " for " << particle->GetParticleName()
2189  << " and process " << GetProcessName() << G4endl;
2190  //G4cout << *p << G4endl;
2191  }
2192  theLambdaTable = p;
2193  tablesAreBuilt = true;
2194 
2198 
2199  if(theLambdaTable) {
2200  size_t n = theLambdaTable->length();
2201  G4PhysicsVector* pv = (*theLambdaTable)[0];
2202  G4double e, ss, smax, emax;
2203 
2204  size_t i;
2205 
2206  // first loop on existing vectors
2207  for (i=0; i<n; ++i) {
2208  pv = (*theLambdaTable)[i];
2209  if(pv) {
2210  size_t nb = pv->GetVectorLength();
2211  emax = DBL_MAX;
2212  smax = 0.0;
2213  if(nb > 0) {
2214  for (size_t j=0; j<nb; ++j) {
2215  e = pv->Energy(j);
2216  ss = (*pv)(j);
2217  if(ss > smax) {
2218  smax = ss;
2219  emax = e;
2220  }
2221  }
2222  }
2224  theCrossSectionMax[i] = smax;
2225  if(1 < verboseLevel) {
2226  G4cout << "For " << particle->GetParticleName()
2227  << " Max CS at i= " << i << " emax(MeV)= " << emax/MeV
2228  << " lambda= " << smax << G4endl;
2229  }
2230  }
2231  }
2232  // second loop using base materials
2233  for (i=0; i<n; ++i) {
2234  pv = (*theLambdaTable)[i];
2235  if(!pv){
2236  G4int j = (*theDensityIdx)[i];
2238  theCrossSectionMax[i] = (*theDensityFactor)[i]*theCrossSectionMax[j];
2239  }
2240  }
2241  }
2242 }
G4LossTableManager * lManager
std::vector< G4double > theEnergyOfCrossSectionMax
static const double MeV
Definition: G4SIunits.hh:211
const std::vector< G4double > * GetDensityFactors()
G4int verboseLevel
Definition: G4VProcess.hh:368
const std::vector< G4double > * theDensityFactor
const std::vector< G4int > * theDensityIdx
int G4int
Definition: G4Types.hh:78
const G4int smax
G4LossTableBuilder * GetTableBuilder()
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
Char_t n[5]
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * particle
size_t GetVectorLength() const
G4PhysicsTable * theLambdaTable
static const G4double emax
std::vector< G4double > theCrossSectionMax
size_t length() const
#define G4endl
Definition: G4ios.hh:61
G4double Energy(size_t index) const
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
const std::vector< G4int > * GetCoupleIndexes()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetLinearLossLimit()

void G4VEnergyLossProcess::SetLinearLossLimit ( G4double  val)

Definition at line 2339 of file G4VEnergyLossProcess.cc.

2340 {
2341  if(0.0 < val && val < 1.0) {
2342  linLossLimit = val;
2343  actLinLossLimit = true;
2344  } else { PrintWarning("SetLinearLossLimit", val); }
2345 }
void PrintWarning(G4String, G4double val)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetLossFluctuations()

void G4VEnergyLossProcess::SetLossFluctuations ( G4bool  val)
inline

Definition at line 940 of file G4VEnergyLossProcess.hh.

941 {
942  lossFluctuationFlag = val;
943 }
Here is the caller graph for this function:

◆ SetLowestEnergyLimit()

void G4VEnergyLossProcess::SetLowestEnergyLimit ( G4double  val)

Definition at line 2363 of file G4VEnergyLossProcess.cc.

2364 {
2365  if(1.e-18 < val && val < 1.e+50) { lowestKinEnergy = val; }
2366  else { PrintWarning("SetLowestEnergyLimit", val); }
2367 }
void PrintWarning(G4String, G4double val)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMaxKinEnergy()

void G4VEnergyLossProcess::SetMaxKinEnergy ( G4double  e)

Definition at line 2394 of file G4VEnergyLossProcess.cc.

2395 {
2396  if(minKinEnergy < e && e < 1.e+50) {
2397  maxKinEnergy = e;
2398  actMaxKinEnergy = true;
2399  if(e < maxKinEnergyCSDA) { maxKinEnergyCSDA = e; }
2400  } else { PrintWarning("SetMaxKinEnergy", e); }
2401 }
void PrintWarning(G4String, G4double val)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetMinKinEnergy()

void G4VEnergyLossProcess::SetMinKinEnergy ( G4double  e)

Definition at line 2384 of file G4VEnergyLossProcess.cc.

2385 {
2386  if(1.e-18 < e && e < maxKinEnergy) {
2387  minKinEnergy = e;
2388  actMinKinEnergy = true;
2389  } else { PrintWarning("SetMinKinEnergy", e); }
2390 }
void PrintWarning(G4String, G4double val)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetParticle()

void G4VEnergyLossProcess::SetParticle ( const G4ParticleDefinition p)
inlineprotected

Definition at line 895 of file G4VEnergyLossProcess.hh.

896 {
897  particle = p;
898 }
const G4ParticleDefinition * particle

◆ SetRangeTableForLoss()

void G4VEnergyLossProcess::SetRangeTableForLoss ( G4PhysicsTable p)

Definition at line 2148 of file G4VEnergyLossProcess.cc.

2149 {
2151  if(1 < verboseLevel) {
2152  G4cout << "### Set Range table " << p
2153  << " for " << particle->GetParticleName()
2154  << " and process " << GetProcessName() << G4endl;
2155  }
2156 }
G4int verboseLevel
Definition: G4VProcess.hh:368
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * particle
G4PhysicsTable * theRangeTableForLoss
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetSecondaryParticle()

void G4VEnergyLossProcess::SetSecondaryParticle ( const G4ParticleDefinition p)
inlineprotected

Definition at line 903 of file G4VEnergyLossProcess.hh.

904 {
905  secondaryParticle = p;
906 }
const G4ParticleDefinition * secondaryParticle
Here is the caller graph for this function:

◆ SetSecondaryRangeTable()

void G4VEnergyLossProcess::SetSecondaryRangeTable ( G4PhysicsTable p)

Definition at line 2160 of file G4VEnergyLossProcess.cc.

2161 {
2163  if(1 < verboseLevel) {
2164  G4cout << "### Set SecondaryRange table " << p
2165  << " for " << particle->GetParticleName()
2166  << " and process " << GetProcessName() << G4endl;
2167  }
2168 }
G4int verboseLevel
Definition: G4VProcess.hh:368
G4PhysicsTable * theSecondaryRangeTable
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * particle
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetStepFunction()

void G4VEnergyLossProcess::SetStepFunction ( G4double  v1,
G4double  v2 
)

Definition at line 2349 of file G4VEnergyLossProcess.cc.

2350 {
2351  if(0.0 < v1 && 0.0 < v2 && v2 < 1.e+50) {
2352  dRoverRange = std::min(1.0, v1);
2353  finalRange = v2;
2354  } else if(v1 <= 0.0) {
2355  PrintWarning("SetStepFunction", v1);
2356  } else {
2357  PrintWarning("SetStepFunction", v2);
2358  }
2359 }
void PrintWarning(G4String, G4double val)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetSubLambdaTable()

void G4VEnergyLossProcess::SetSubLambdaTable ( G4PhysicsTable p)

Definition at line 2246 of file G4VEnergyLossProcess.cc.

2247 {
2248  theSubLambdaTable = p;
2249  if(1 < verboseLevel) {
2250  G4cout << "### Set SebLambda table " << p
2251  << " for " << particle->GetParticleName()
2252  << " and process " << GetProcessName() << G4endl;
2253  }
2254 }
G4int verboseLevel
Definition: G4VProcess.hh:368
G4PhysicsTable * theSubLambdaTable
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * particle
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ StartTracking()

void G4VEnergyLossProcess::StartTracking ( G4Track *  track)
virtual

Reimplemented from G4VProcess.

Definition at line 1073 of file G4VEnergyLossProcess.cc.

1074 {
1075  /*
1076  G4cout << track->GetDefinition()->GetParticleName()
1077  << " e(MeV)= " << track->GetKineticEnergy()
1078  << " baseParticle " << baseParticle << " proc " << this;
1079  if(particle) G4cout << " " << particle->GetParticleName();
1080  G4cout << " isIon= " << isIon << " dedx " << theDEDXTable <<G4endl;
1081  */
1082  // reset parameters for the new track
1085  preStepRangeEnergy = 0.0;
1086 
1087  // reset ion
1088  if(isIon) {
1089  chargeSqRatio = 0.5;
1090 
1091  G4double newmass = track->GetDefinition()->GetPDGMass();
1092  if(baseParticle) {
1093  massRatio = baseParticle->GetPDGMass()/newmass;
1094  } else if(theGenericIon) {
1095  massRatio = proton_mass_c2/newmass;
1096  } else {
1097  massRatio = 1.0;
1098  }
1099  }
1100  // forced biasing only for primary particles
1101  if(biasManager) {
1102  if(0 == track->GetParentID()) {
1103  // primary particle
1104  biasFlag = true;
1106  }
1107  }
1108 }
G4double theNumberOfInteractionLengthLeft
Definition: G4VProcess.hh:293
const G4ParticleDefinition * baseParticle
const G4ParticleDefinition * theGenericIon
G4double currentInteractionLength
Definition: G4VProcess.hh:297
float proton_mass_c2
Definition: hepunit.py:275
double G4double
Definition: G4Types.hh:76
G4EmBiasingManager * biasManager
#define DBL_MAX
Definition: templates.hh:83
Here is the call graph for this function:

◆ StorePhysicsTable()

G4bool G4VEnergyLossProcess::StorePhysicsTable ( const G4ParticleDefinition part,
const G4String directory,
G4bool  ascii = false 
)
virtual

Reimplemented from G4VProcess.

Definition at line 1751 of file G4VEnergyLossProcess.cc.

1754 {
1755  G4bool res = true;
1756  //G4cout << "G4VEnergyLossProcess::StorePhysicsTable: " << part->GetParticleName()
1757  // << " " << directory << " " << ascii << G4endl;
1758  if (!isMaster || baseParticle || part != particle ) return res;
1759 
1760  if(!StoreTable(part,theDEDXTable,ascii,directory,"DEDX"))
1761  {res = false;}
1762 
1763  if(!StoreTable(part,theDEDXunRestrictedTable,ascii,directory,"DEDXnr"))
1764  {res = false;}
1765 
1766  if(!StoreTable(part,theDEDXSubTable,ascii,directory,"SubDEDX"))
1767  {res = false;}
1768 
1769  if(!StoreTable(part,theIonisationTable,ascii,directory,"Ionisation"))
1770  {res = false;}
1771 
1772  if(!StoreTable(part,theIonisationSubTable,ascii,directory,"SubIonisation"))
1773  {res = false;}
1774 
1775  if(isIonisation &&
1776  !StoreTable(part,theCSDARangeTable,ascii,directory,"CSDARange"))
1777  {res = false;}
1778 
1779  if(isIonisation &&
1780  !StoreTable(part,theRangeTableForLoss,ascii,directory,"Range"))
1781  {res = false;}
1782 
1783  if(isIonisation &&
1784  !StoreTable(part,theInverseRangeTable,ascii,directory,"InverseRange"))
1785  {res = false;}
1786 
1787  if(!StoreTable(part,theLambdaTable,ascii,directory,"Lambda"))
1788  {res = false;}
1789 
1790  if(!StoreTable(part,theSubLambdaTable,ascii,directory,"SubLambda"))
1791  {res = false;}
1792 
1793  if ( !res ) {
1794  if(1 < verboseLevel) {
1795  G4cout << "Physics tables are stored for "
1797  << " and process " << GetProcessName()
1798  << " in the directory <" << directory
1799  << "> " << G4endl;
1800  }
1801  } else {
1802  G4cout << "Fail to store Physics Tables for "
1804  << " and process " << GetProcessName()
1805  << " in the directory <" << directory
1806  << "> " << G4endl;
1807  }
1808  return res;
1809 }
G4int verboseLevel
Definition: G4VProcess.hh:368
G4PhysicsTable * theIonisationTable
G4PhysicsTable * theSubLambdaTable
const G4String & GetProcessName() const
Definition: G4VProcess.hh:408
const G4String & GetParticleName() const
const G4ParticleDefinition * baseParticle
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
G4PhysicsTable * theCSDARangeTable
const G4ParticleDefinition * particle
G4PhysicsTable * theLambdaTable
G4PhysicsTable * theInverseRangeTable
G4PhysicsTable * theDEDXunRestrictedTable
G4bool StoreTable(const G4ParticleDefinition *p, G4PhysicsTable *, G4bool ascii, const G4String &directory, const G4String &tname)
G4PhysicsTable * theRangeTableForLoss
#define G4endl
Definition: G4ios.hh:61
G4PhysicsTable * theDEDXTable
G4PhysicsTable * theDEDXSubTable
G4PhysicsTable * theIonisationSubTable
Here is the call graph for this function:

◆ StoreTable()

G4bool G4VEnergyLossProcess::StoreTable ( const G4ParticleDefinition p,
G4PhysicsTable aTable,
G4bool  ascii,
const G4String directory,
const G4String tname 
)
private

Definition at line 1880 of file G4VEnergyLossProcess.cc.

1884 {
1885  //G4cout << "G4VEnergyLossProcess::StoreTable: " << aTable
1886  // << " " << directory << " " << tname << G4endl;
1887  G4bool res = true;
1888  if ( aTable ) {
1889  const G4String name = GetPhysicsTableFileName(part,directory,tname,ascii);
1890  G4cout << name << G4endl;
1891  //G4cout << *aTable << G4endl;
1892  if( !aTable->StorePhysicsTable(name,ascii)) res = false;
1893  }
1894  return res;
1895 }
G4String name
Definition: TRTMaterials.hh:40
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
Definition: G4VProcess.cc:186
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
TString part[npart]
#define G4endl
Definition: G4ios.hh:61
G4bool StorePhysicsTable(const G4String &filename, G4bool ascii=false)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SubLambdaTable()

G4PhysicsTable * G4VEnergyLossProcess::SubLambdaTable ( ) const
inline

Definition at line 1073 of file G4VEnergyLossProcess.hh.

1074 {
1075  return theSubLambdaTable;
1076 }
G4PhysicsTable * theSubLambdaTable
Here is the caller graph for this function:

◆ TablesAreBuilt()

G4bool G4VEnergyLossProcess::TablesAreBuilt ( ) const
inline

Definition at line 996 of file G4VEnergyLossProcess.hh.

997 {
998  return tablesAreBuilt;
999 }

◆ UpdateEmModel()

void G4VEnergyLossProcess::UpdateEmModel ( const G4String nam,
G4double  emin,
G4double  emax 
)

Definition at line 403 of file G4VEnergyLossProcess.cc.

405 {
406  modelManager->UpdateEmModel(nam, emin, emax);
407 }
void UpdateEmModel(const G4String &, G4double, G4double)
static const G4double emax
G4EmModelManager * modelManager
Here is the call graph for this function:

Member Data Documentation

◆ actBinning

G4bool G4VEnergyLossProcess::actBinning
private

Definition at line 562 of file G4VEnergyLossProcess.hh.

◆ actLinLossLimit

G4bool G4VEnergyLossProcess::actLinLossLimit
private

Definition at line 560 of file G4VEnergyLossProcess.hh.

◆ actLossFluc

G4bool G4VEnergyLossProcess::actLossFluc
private

Definition at line 561 of file G4VEnergyLossProcess.hh.

◆ actMaxKinEnergy

G4bool G4VEnergyLossProcess::actMaxKinEnergy
private

Definition at line 564 of file G4VEnergyLossProcess.hh.

◆ actMinKinEnergy

G4bool G4VEnergyLossProcess::actMinKinEnergy
private

Definition at line 563 of file G4VEnergyLossProcess.hh.

◆ aGPILSelection

G4GPILSelection G4VEnergyLossProcess::aGPILSelection
private

Definition at line 601 of file G4VEnergyLossProcess.hh.

◆ atomDeexcitation

G4VAtomDeexcitation* G4VEnergyLossProcess::atomDeexcitation
private

Definition at line 488 of file G4VEnergyLossProcess.hh.

◆ basedCoupleIndex

size_t G4VEnergyLossProcess::basedCoupleIndex
private

Definition at line 583 of file G4VEnergyLossProcess.hh.

◆ baseParticle

const G4ParticleDefinition* G4VEnergyLossProcess::baseParticle
private

Definition at line 533 of file G4VEnergyLossProcess.hh.

◆ biasFactor

G4double G4VEnergyLossProcess::biasFactor
private

Definition at line 547 of file G4VEnergyLossProcess.hh.

◆ biasFlag

G4bool G4VEnergyLossProcess::biasFlag
private

Definition at line 557 of file G4VEnergyLossProcess.hh.

◆ biasID

G4int G4VEnergyLossProcess::biasID
private

Definition at line 605 of file G4VEnergyLossProcess.hh.

◆ biasManager

G4EmBiasingManager* G4VEnergyLossProcess::biasManager
private

Definition at line 474 of file G4VEnergyLossProcess.hh.

◆ chargeSqRatio

G4double G4VEnergyLossProcess::chargeSqRatio
private

Definition at line 591 of file G4VEnergyLossProcess.hh.

◆ computedRange

G4double G4VEnergyLossProcess::computedRange
private

Definition at line 595 of file G4VEnergyLossProcess.hh.

◆ currentCouple

const G4MaterialCutsCouple* G4VEnergyLossProcess::currentCouple
private

Definition at line 581 of file G4VEnergyLossProcess.hh.

◆ currentCoupleIndex

size_t G4VEnergyLossProcess::currentCoupleIndex
private

Definition at line 582 of file G4VEnergyLossProcess.hh.

◆ currentMaterial

const G4Material* G4VEnergyLossProcess::currentMaterial
private

Definition at line 580 of file G4VEnergyLossProcess.hh.

◆ currentModel

G4VEmModel* G4VEnergyLossProcess::currentModel
private

Definition at line 579 of file G4VEnergyLossProcess.hh.

◆ dRoverRange

G4double G4VEnergyLossProcess::dRoverRange
private

Definition at line 544 of file G4VEnergyLossProcess.hh.

◆ emModels

std::vector<G4VEmModel*> G4VEnergyLossProcess::emModels
private

Definition at line 486 of file G4VEnergyLossProcess.hh.

◆ fFactor

G4double G4VEnergyLossProcess::fFactor
private

Definition at line 589 of file G4VEnergyLossProcess.hh.

◆ finalRange

G4double G4VEnergyLossProcess::finalRange
private

Definition at line 545 of file G4VEnergyLossProcess.hh.

◆ fluctModel

G4VEmFluctuationModel* G4VEnergyLossProcess::fluctModel
private

Definition at line 487 of file G4VEnergyLossProcess.hh.

◆ fParticleChange

G4ParticleChangeForLoss G4VEnergyLossProcess::fParticleChange
protected

Definition at line 568 of file G4VEnergyLossProcess.hh.

◆ fRange

G4double G4VEnergyLossProcess::fRange
private

Definition at line 594 of file G4VEnergyLossProcess.hh.

◆ idxCSDA

size_t G4VEnergyLossProcess::idxCSDA
private

Definition at line 516 of file G4VEnergyLossProcess.hh.

◆ idxDEDX

size_t G4VEnergyLossProcess::idxDEDX
private

Definition at line 510 of file G4VEnergyLossProcess.hh.

◆ idxDEDXSub

size_t G4VEnergyLossProcess::idxDEDXSub
private

Definition at line 511 of file G4VEnergyLossProcess.hh.

◆ idxDEDXunRestricted

size_t G4VEnergyLossProcess::idxDEDXunRestricted
private

Definition at line 512 of file G4VEnergyLossProcess.hh.

◆ idxInverseRange

size_t G4VEnergyLossProcess::idxInverseRange
private

Definition at line 518 of file G4VEnergyLossProcess.hh.

◆ idxIonisation

size_t G4VEnergyLossProcess::idxIonisation
private

Definition at line 513 of file G4VEnergyLossProcess.hh.

◆ idxIonisationSub

size_t G4VEnergyLossProcess::idxIonisationSub
private

Definition at line 514 of file G4VEnergyLossProcess.hh.

◆ idxLambda

size_t G4VEnergyLossProcess::idxLambda
private

Definition at line 519 of file G4VEnergyLossProcess.hh.

◆ idxRange

size_t G4VEnergyLossProcess::idxRange
private

Definition at line 515 of file G4VEnergyLossProcess.hh.

◆ idxSCoffRegions

G4bool* G4VEnergyLossProcess::idxSCoffRegions
private

Definition at line 492 of file G4VEnergyLossProcess.hh.

◆ idxSecRange

size_t G4VEnergyLossProcess::idxSecRange
private

Definition at line 517 of file G4VEnergyLossProcess.hh.

◆ idxSubLambda

size_t G4VEnergyLossProcess::idxSubLambda
private

Definition at line 520 of file G4VEnergyLossProcess.hh.

◆ integral

G4bool G4VEnergyLossProcess::integral
private

Definition at line 552 of file G4VEnergyLossProcess.hh.

◆ isIon

G4bool G4VEnergyLossProcess::isIon
private

Definition at line 553 of file G4VEnergyLossProcess.hh.

◆ isIonisation

G4bool G4VEnergyLossProcess::isIonisation
private

Definition at line 554 of file G4VEnergyLossProcess.hh.

◆ isMaster

G4bool G4VEnergyLossProcess::isMaster
private

Definition at line 559 of file G4VEnergyLossProcess.hh.

◆ lambdaFactor

G4double G4VEnergyLossProcess::lambdaFactor
private

Definition at line 546 of file G4VEnergyLossProcess.hh.

◆ lastIdx

size_t G4VEnergyLossProcess::lastIdx
private

Definition at line 584 of file G4VEnergyLossProcess.hh.

◆ linLossLimit

G4double G4VEnergyLossProcess::linLossLimit
private

Definition at line 543 of file G4VEnergyLossProcess.hh.

◆ lManager

G4LossTableManager* G4VEnergyLossProcess::lManager
private

Definition at line 472 of file G4VEnergyLossProcess.hh.

◆ lossFluctuationFlag

G4bool G4VEnergyLossProcess::lossFluctuationFlag
private

Definition at line 549 of file G4VEnergyLossProcess.hh.

◆ lowestKinEnergy

G4double G4VEnergyLossProcess::lowestKinEnergy
private

Definition at line 538 of file G4VEnergyLossProcess.hh.

◆ massRatio

G4double G4VEnergyLossProcess::massRatio
private

Definition at line 588 of file G4VEnergyLossProcess.hh.

◆ maxKinEnergy

G4double G4VEnergyLossProcess::maxKinEnergy
private

Definition at line 540 of file G4VEnergyLossProcess.hh.

◆ maxKinEnergyCSDA

G4double G4VEnergyLossProcess::maxKinEnergyCSDA
private

Definition at line 541 of file G4VEnergyLossProcess.hh.

◆ mfpKinEnergy

G4double G4VEnergyLossProcess::mfpKinEnergy
private

Definition at line 599 of file G4VEnergyLossProcess.hh.

◆ minKinEnergy

G4double G4VEnergyLossProcess::minKinEnergy
private

Definition at line 539 of file G4VEnergyLossProcess.hh.

◆ modelManager

G4EmModelManager* G4VEnergyLossProcess::modelManager
private

Definition at line 473 of file G4VEnergyLossProcess.hh.

◆ nBins

G4int G4VEnergyLossProcess::nBins
private

Definition at line 535 of file G4VEnergyLossProcess.hh.

◆ nBinsCSDA

G4int G4VEnergyLossProcess::nBinsCSDA
private

Definition at line 536 of file G4VEnergyLossProcess.hh.

◆ nProcesses

G4int G4VEnergyLossProcess::nProcesses
private

Definition at line 495 of file G4VEnergyLossProcess.hh.

◆ nSCoffRegions

G4int G4VEnergyLossProcess::nSCoffRegions
private

Definition at line 491 of file G4VEnergyLossProcess.hh.

◆ nWarnings

G4int G4VEnergyLossProcess::nWarnings
private

Definition at line 586 of file G4VEnergyLossProcess.hh.

◆ particle

const G4ParticleDefinition* G4VEnergyLossProcess::particle
private

Definition at line 577 of file G4VEnergyLossProcess.hh.

◆ preStepKinEnergy

G4double G4VEnergyLossProcess::preStepKinEnergy
private

Definition at line 596 of file G4VEnergyLossProcess.hh.

◆ preStepLambda

G4double G4VEnergyLossProcess::preStepLambda
private

Definition at line 593 of file G4VEnergyLossProcess.hh.

◆ preStepRangeEnergy

G4double G4VEnergyLossProcess::preStepRangeEnergy
private

Definition at line 598 of file G4VEnergyLossProcess.hh.

◆ preStepScaledEnergy

G4double G4VEnergyLossProcess::preStepScaledEnergy
private

Definition at line 597 of file G4VEnergyLossProcess.hh.

◆ reduceFactor

G4double G4VEnergyLossProcess::reduceFactor
private

Definition at line 590 of file G4VEnergyLossProcess.hh.

◆ rndmStepFlag

G4bool G4VEnergyLossProcess::rndmStepFlag
private

Definition at line 550 of file G4VEnergyLossProcess.hh.

◆ safetyHelper

G4SafetyHelper* G4VEnergyLossProcess::safetyHelper
private

Definition at line 475 of file G4VEnergyLossProcess.hh.

◆ scoffRegions

std::vector<const G4Region*> G4VEnergyLossProcess::scoffRegions
private

Definition at line 490 of file G4VEnergyLossProcess.hh.

◆ scProcesses

std::vector<G4VEnergyLossProcess*> G4VEnergyLossProcess::scProcesses
private

Definition at line 494 of file G4VEnergyLossProcess.hh.

◆ scTracks

std::vector<G4Track*> G4VEnergyLossProcess::scTracks
private

Definition at line 575 of file G4VEnergyLossProcess.hh.

◆ secID

G4int G4VEnergyLossProcess::secID
private

Definition at line 603 of file G4VEnergyLossProcess.hh.

◆ secondaryParticle

const G4ParticleDefinition* G4VEnergyLossProcess::secondaryParticle
private

Definition at line 478 of file G4VEnergyLossProcess.hh.

◆ secParticles

std::vector<G4DynamicParticle*> G4VEnergyLossProcess::secParticles
private

Definition at line 574 of file G4VEnergyLossProcess.hh.

◆ subcutProducer

G4VSubCutProducer* G4VEnergyLossProcess::subcutProducer
private

Definition at line 489 of file G4VEnergyLossProcess.hh.

◆ subsecID

G4int G4VEnergyLossProcess::subsecID
private

Definition at line 604 of file G4VEnergyLossProcess.hh.

◆ tablesAreBuilt

G4bool G4VEnergyLossProcess::tablesAreBuilt
private

Definition at line 551 of file G4VEnergyLossProcess.hh.

◆ theCrossSectionMax

std::vector<G4double> G4VEnergyLossProcess::theCrossSectionMax
private

Definition at line 525 of file G4VEnergyLossProcess.hh.

◆ theCSDARangeTable

G4PhysicsTable* G4VEnergyLossProcess::theCSDARangeTable
private

Definition at line 504 of file G4VEnergyLossProcess.hh.

◆ theCuts

const G4DataVector* G4VEnergyLossProcess::theCuts
private

Definition at line 530 of file G4VEnergyLossProcess.hh.

◆ theDEDXAtMaxEnergy

std::vector<G4double> G4VEnergyLossProcess::theDEDXAtMaxEnergy
private

Definition at line 522 of file G4VEnergyLossProcess.hh.

◆ theDEDXSubTable

G4PhysicsTable* G4VEnergyLossProcess::theDEDXSubTable
private

Definition at line 499 of file G4VEnergyLossProcess.hh.

◆ theDEDXTable

G4PhysicsTable* G4VEnergyLossProcess::theDEDXTable
private

Definition at line 498 of file G4VEnergyLossProcess.hh.

◆ theDEDXunRestrictedTable

G4PhysicsTable* G4VEnergyLossProcess::theDEDXunRestrictedTable
private

Definition at line 500 of file G4VEnergyLossProcess.hh.

◆ theDensityFactor

const std::vector<G4double>* G4VEnergyLossProcess::theDensityFactor
private

Definition at line 527 of file G4VEnergyLossProcess.hh.

◆ theDensityIdx

const std::vector<G4int>* G4VEnergyLossProcess::theDensityIdx
private

Definition at line 528 of file G4VEnergyLossProcess.hh.

◆ theElectron

const G4ParticleDefinition* G4VEnergyLossProcess::theElectron
private

Definition at line 479 of file G4VEnergyLossProcess.hh.

◆ theEnergyOfCrossSectionMax

std::vector<G4double> G4VEnergyLossProcess::theEnergyOfCrossSectionMax
private

Definition at line 524 of file G4VEnergyLossProcess.hh.

◆ theGamma

const G4ParticleDefinition* G4VEnergyLossProcess::theGamma
private

Definition at line 481 of file G4VEnergyLossProcess.hh.

◆ theGenericIon

const G4ParticleDefinition* G4VEnergyLossProcess::theGenericIon
private

Definition at line 482 of file G4VEnergyLossProcess.hh.

◆ theInverseRangeTable

G4PhysicsTable* G4VEnergyLossProcess::theInverseRangeTable
private

Definition at line 506 of file G4VEnergyLossProcess.hh.

◆ theIonisationSubTable

G4PhysicsTable* G4VEnergyLossProcess::theIonisationSubTable
private

Definition at line 502 of file G4VEnergyLossProcess.hh.

◆ theIonisationTable

G4PhysicsTable* G4VEnergyLossProcess::theIonisationTable
private

Definition at line 501 of file G4VEnergyLossProcess.hh.

◆ theLambdaTable

G4PhysicsTable* G4VEnergyLossProcess::theLambdaTable
private

Definition at line 507 of file G4VEnergyLossProcess.hh.

◆ theParameters

G4EmParameters* G4VEnergyLossProcess::theParameters
private

Definition at line 476 of file G4VEnergyLossProcess.hh.

◆ thePositron

const G4ParticleDefinition* G4VEnergyLossProcess::thePositron
private

Definition at line 480 of file G4VEnergyLossProcess.hh.

◆ theRangeAtMaxEnergy

std::vector<G4double> G4VEnergyLossProcess::theRangeAtMaxEnergy
private

Definition at line 523 of file G4VEnergyLossProcess.hh.

◆ theRangeTableForLoss

G4PhysicsTable* G4VEnergyLossProcess::theRangeTableForLoss
private

Definition at line 503 of file G4VEnergyLossProcess.hh.

◆ theSecondaryRangeTable

G4PhysicsTable* G4VEnergyLossProcess::theSecondaryRangeTable
private

Definition at line 505 of file G4VEnergyLossProcess.hh.

◆ theSubCuts

const G4DataVector* G4VEnergyLossProcess::theSubCuts
private

Definition at line 531 of file G4VEnergyLossProcess.hh.

◆ theSubLambdaTable

G4PhysicsTable* G4VEnergyLossProcess::theSubLambdaTable
private

Definition at line 508 of file G4VEnergyLossProcess.hh.

◆ useDeexcitation

G4bool G4VEnergyLossProcess::useDeexcitation
private

Definition at line 556 of file G4VEnergyLossProcess.hh.

◆ useSubCutoff

G4bool G4VEnergyLossProcess::useSubCutoff
private

Definition at line 555 of file G4VEnergyLossProcess.hh.

◆ weightFlag

G4bool G4VEnergyLossProcess::weightFlag
private

Definition at line 558 of file G4VEnergyLossProcess.hh.


The documentation for this class was generated from the following files: