Geant4  10.02.p02
G4VEmProcess.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id: G4VEmProcess.hh 93264 2015-10-14 09:30:04Z gcosmo $
27 //
28 // -------------------------------------------------------------------
29 //
30 // GEANT4 Class header file
31 //
32 //
33 // File name: G4VEmProcess
34 //
35 // Author: Vladimir Ivanchenko
36 //
37 // Creation date: 01.10.2003
38 //
39 // Modifications:
40 // 30-06-04 make destructor virtual (V.Ivanchenko)
41 // 09-08-04 optimise integral option (V.Ivanchenko)
42 // 11-08-04 add protected methods to access cuts (V.Ivanchenko)
43 // 09-09-04 Bug fix for the integral mode with 2 peaks (V.Ivanchneko)
44 // 16-09-04 Add flag for LambdaTable and method RecalculateLambda (VI)
45 // 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
46 // 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
47 // 18-04-05 Use G4ParticleChangeForGamma (V.Ivantchenko)
48 // 09-05-05 Fix problem in logic when path boundary between materials (VI)
49 // 11-01-06 add A to parameters of ComputeCrossSectionPerAtom (VI)
50 // 01-02-06 put default value A=0. to keep compatibility with v5.2 (mma)
51 // 13-05-06 Add method to access model by index (V.Ivanchenko)
52 // 12-09-06 add SetModel() (mma)
53 // 25-09-07 More accurate handling zero xsect in
54 // PostStepGetPhysicalInteractionLength (V.Ivanchenko)
55 // 27-10-07 Virtual functions moved to source (V.Ivanchenko)
56 // 15-07-08 Reorder class members for further multi-thread development (VI)
57 // 17-02-10 Added pointer currentParticle (VI)
58 //
59 // Class Description:
60 //
61 // It is the unified Discrete process
62 
63 // -------------------------------------------------------------------
64 //
65 
66 #ifndef G4VEmProcess_h
67 #define G4VEmProcess_h 1
68 
69 #include <CLHEP/Units/SystemOfUnits.h>
70 
71 #include "G4VDiscreteProcess.hh"
72 #include "globals.hh"
73 #include "G4Material.hh"
74 #include "G4MaterialCutsCouple.hh"
75 #include "G4Track.hh"
76 #include "G4EmModelManager.hh"
77 #include "G4UnitsTable.hh"
78 #include "G4ParticleDefinition.hh"
80 #include "G4EmParameters.hh"
81 
82 class G4Step;
83 class G4VEmModel;
84 class G4DataVector;
85 class G4VParticleChange;
86 class G4PhysicsTable;
87 class G4PhysicsVector;
88 class G4EmBiasingManager;
89 class G4LossTableManager;
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
92 
94 {
95 public:
96 
97  G4VEmProcess(const G4String& name,
99 
100  virtual ~G4VEmProcess();
101 
102  //------------------------------------------------------------------------
103  // Virtual methods to be implemented in concrete processes
104  //------------------------------------------------------------------------
105 
106  virtual G4bool IsApplicable(const G4ParticleDefinition& p) = 0;
107 
108  virtual void PrintInfo() = 0;
109 
110  virtual void ProcessDescription(std::ostream& outFile) const; // = 0;
111 
112 protected:
113 
114  virtual void InitialiseProcess(const G4ParticleDefinition*) = 0;
115 
116  //------------------------------------------------------------------------
117  // Method with standard implementation; may be overwritten if needed
118  //------------------------------------------------------------------------
119 
121  const G4Material*);
122 
123  //------------------------------------------------------------------------
124  // Implementation of virtual methods common to all Discrete processes
125  //------------------------------------------------------------------------
126 
127 public:
128 
129  // Initialise for build of tables
130  virtual void PreparePhysicsTable(const G4ParticleDefinition&);
131 
132  // Build physics table during initialisation
133  virtual void BuildPhysicsTable(const G4ParticleDefinition&);
134 
135  // Called before tracking of each new G4Track
136  virtual void StartTracking(G4Track*);
137 
138  // implementation of virtual method, specific for G4VEmProcess
140  const G4Track& track,
141  G4double previousStepSize,
143 
144  // implementation of virtual method, specific for G4VEmProcess
145  virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
146 
147  // Store PhysicsTable in a file.
148  // Return false in case of failure at I/O
150  const G4String& directory,
151  G4bool ascii = false);
152 
153  // Retrieve Physics from a file.
154  // (return true if the Physics Table can be build by using file)
155  // (return false if the process has no functionality or in case of failure)
156  // File name should is constructed as processName+particleName and the
157  // should be placed under the directory specifed by the argument.
159  const G4String& directory,
160  G4bool ascii);
161 
162  //------------------------------------------------------------------------
163  // Specific methods for Discrete EM post step simulation
164  //------------------------------------------------------------------------
165 
166  // It returns the cross section per volume for energy/ material
168  const G4MaterialCutsCouple* couple);
169 
170  // It returns the cross section of the process per atom
172  G4double Z, G4double A=0.,
173  G4double cut=0.0);
174 
175  G4double MeanFreePath(const G4Track& track);
176 
177  // It returns cross section per volume
178  inline G4double GetLambda(G4double& kinEnergy,
179  const G4MaterialCutsCouple* couple);
180 
181  //------------------------------------------------------------------------
182  // Specific methods to build and access Physics Tables
183  //------------------------------------------------------------------------
184 
185  // Binning for lambda table
186  void SetLambdaBinning(G4int nbins);
187 
188  // Min kinetic energy for tables
189  void SetMinKinEnergy(G4double e);
190 
191  // Min kinetic energy for high energy table
193 
194  // Max kinetic energy for tables
195  void SetMaxKinEnergy(G4double e);
196 
197  // Cross section table pointers
198  inline G4PhysicsTable* LambdaTable() const;
199  inline G4PhysicsTable* LambdaTablePrim() const;
200 
201  //------------------------------------------------------------------------
202  // Define and access particle type
203  //------------------------------------------------------------------------
204 
205  inline const G4ParticleDefinition* Particle() const;
206  inline const G4ParticleDefinition* SecondaryParticle() const;
207 
208  //------------------------------------------------------------------------
209  // Specific methods to set, access, modify models and basic parameters
210  //------------------------------------------------------------------------
211 
212 protected:
213  // Select model in run time
214  inline G4VEmModel* SelectModel(G4double& kinEnergy, size_t index);
215 
216 public:
217  // Select model by energy and region index
218  inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,
219  size_t& idxRegion) const;
220 
221  // Add model for region, smaller value of order defines which
222  // model will be selected for a given energy interval
223  void AddEmModel(G4int, G4VEmModel*, const G4Region* region = 0);
224 
225  // return the assigned model
226  G4VEmModel* EmModel(G4int index = 1) const;
227 
228  // Assign a model to a process
229  void SetEmModel(G4VEmModel*, G4int index = 1);
230 
231  // Define new energy range for the model identified by the name
232  void UpdateEmModel(const G4String&, G4double, G4double);
233 
234  // Access to models
235  G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false) const;
236 
237  // access atom on which interaction happens
238  const G4Element* GetCurrentElement() const;
239 
240  // access to active model
241  inline const G4VEmModel* GetCurrentModel() const;
242 
243  // Biasing parameters
244  void SetCrossSectionBiasingFactor(G4double f, G4bool flag = true);
245  inline G4double CrossSectionBiasingFactor() const;
246 
247  // Activate forced interaction
248  void ActivateForcedInteraction(G4double length = 0.0,
249  const G4String& r = "",
250  G4bool flag = true);
251 
252  void ActivateSecondaryBiasing(const G4String& region, G4double factor,
253  G4double energyLimit);
254 
255  inline void SetIntegral(G4bool val);
256 
257  inline void SetBuildTableFlag(G4bool val);
258 
259  //------------------------------------------------------------------------
260  // Other generic methods
261  //------------------------------------------------------------------------
262 
263 protected:
264 
265  virtual G4double GetMeanFreePath(const G4Track& track,
266  G4double previousStepSize,
267  G4ForceCondition* condition);
268 
270 
271  inline G4int LambdaBinning() const;
272 
273  inline G4double MinKinEnergy() const;
274 
275  inline G4double MaxKinEnergy() const;
276 
277  // Single scattering parameters
278  inline G4double PolarAngleLimit() const;
279 
280  inline G4bool IsIntegral() const;
281 
282  inline G4double RecalculateLambda(G4double kinEnergy,
283  const G4MaterialCutsCouple* couple);
284 
286 
287  inline void SetParticle(const G4ParticleDefinition* p);
288 
289  inline void SetSecondaryParticle(const G4ParticleDefinition* p);
290 
291  inline size_t CurrentMaterialCutsCoupleIndex() const;
292 
293  inline G4double GetGammaEnergyCut();
294 
296 
297  inline void SetStartFromNullFlag(G4bool val);
298 
299  inline void SetSplineFlag(G4bool val);
300 
301  inline const G4Element* GetTargetElement() const;
302 
303  inline const G4Isotope* GetTargetIsotope() const;
304 
305 private:
306 
307  void Clear();
308 
309  void BuildLambdaTable();
310 
312 
313  void FindLambdaMax();
314 
315  void PrintWarning(G4String tit, G4double val);
316 
317  inline void DefineMaterial(const G4MaterialCutsCouple* couple);
318 
319  inline void ComputeIntegralLambda(G4double kinEnergy);
320 
321  inline G4double GetLambdaFromTable(G4double kinEnergy);
322 
323  inline G4double GetLambdaFromTablePrim(G4double kinEnergy);
324 
325  inline G4double GetCurrentLambda(G4double kinEnergy);
326 
327  inline G4double ComputeCurrentLambda(G4double kinEnergy);
328 
329  // copy constructor and hide assignment operator
332 
333  // ======== Parameters of the class fixed at construction =========
334 
343 
345 
346  // ======== Parameters of the class fixed at initialisation =======
347 
348  std::vector<G4VEmModel*> emModels;
350 
351  // tables and vectors
354  std::vector<G4double> theEnergyOfCrossSectionMax;
355  std::vector<G4double> theCrossSectionMax;
356 
357  size_t idxLambda;
359 
360  const std::vector<G4double>* theCuts;
361  const std::vector<G4double>* theCutsGamma;
362  const std::vector<G4double>* theCutsElectron;
363  const std::vector<G4double>* theCutsPositron;
364  const std::vector<G4double>* theDensityFactor;
365  const std::vector<G4int>* theDensityIdx;
366 
368 
374 
383 
384  // ======== Cashed values - may be state dependent ================
385 
386 protected:
387 
389 
390 private:
391 
392  std::vector<G4DynamicParticle*> secParticles;
393 
395 
398 
399  // cash
405 
412 
418 };
419 
420 // ======== Run time inline methods ================
421 
423 {
424  return currentCoupleIndex;
425 }
426 
427 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
428 
430 {
431  return (*theCutsGamma)[currentCoupleIndex];
432 }
433 
434 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
435 
437 {
439 }
440 
441 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
442 
444 {
445  if(couple != currentCouple) {
446  currentCouple = couple;
447  currentMaterial = couple->GetMaterial();
449  currentCoupleIndex = couple->GetIndex();
450  basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
451  fFactor = biasFactor*(*theDensityFactor)[currentCoupleIndex];
454  idxLambda = idxLambdaPrim = 0;
455  }
456 }
457 
458 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
459 
460 inline
462 {
463  if(1 < numberOfModels) {
464  currentModel = modelManager->SelectModel(kinEnergy, index);
465  }
467  return currentModel;
468 }
469 
470 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
471 
472 inline
474  size_t& idxRegion) const
475 {
476  return modelManager->SelectModel(kinEnergy, idxRegion);
477 }
478 
479 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
480 
482 {
483  return ((*theLambdaTable)[basedCoupleIndex])->Value(e, idxLambda);
484 }
485 
486 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
487 
489 {
490  return ((*theLambdaTablePrim)[basedCoupleIndex])->Value(e, idxLambdaPrim)/e;
491 }
492 
493 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
494 
496 {
499 }
500 
501 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
502 
504 {
505  G4double x;
506  if(e >= minKinEnergyPrim) { x = GetLambdaFromTablePrim(e); }
507  else if(theLambdaTable) { x = GetLambdaFromTable(e); }
508  else { x = ComputeCurrentLambda(e); }
509  return fFactor*x;
510 }
511 
512 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
513 
514 inline G4double
516  const G4MaterialCutsCouple* couple)
517 {
518  DefineMaterial(couple);
519  SelectModel(kinEnergy, currentCoupleIndex);
520  return GetCurrentLambda(kinEnergy);
521 }
522 
523 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
524 
525 inline G4double
527 {
528  DefineMaterial(couple);
530  return fFactor*ComputeCurrentLambda(e);
531 }
532 
533 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
534 
536 {
538  if (e <= mfpKinEnergy) {
540 
541  } else {
543  if(e1 > mfpKinEnergy) {
545  G4double preStepLambda1 = GetCurrentLambda(e1);
546  if(preStepLambda1 > preStepLambda) {
547  mfpKinEnergy = e1;
548  preStepLambda = preStepLambda1;
549  }
550  } else {
552  }
553  }
554 }
555 
556 // ======== Get/Set inline methods used at initialisation ================
557 
558 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
559 
561 {
562  return nLambdaBins;
563 }
564 
565 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
566 
568 {
569  return minKinEnergy;
570 }
571 
572 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
573 
575 {
576  return maxKinEnergy;
577 }
578 
579 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
580 
582 {
583  return theParameters->MscThetaLimit();
584 }
585 
586 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
587 
589 {
590  return biasFactor;
591 }
592 
593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
594 
596 {
597  return theLambdaTable;
598 }
599 
600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
601 
603 {
604  return theLambdaTablePrim;
605 }
606 
607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
608 
610 {
611  return particle;
612 }
613 
614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
615 
617 {
618  return secondaryParticle;
619 }
620 
621 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
622 
624 {
625  integral = val;
626 }
627 
628 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
629 
631 {
632  return integral;
633 }
634 
635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
636 
638 {
639  buildLambdaTable = val;
640 }
641 
642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
643 
645 {
646  return &fParticleChange;
647 }
648 
649 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
650 
652 {
653  particle = p;
654  currentParticle = p;
655 }
656 
657 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
658 
660 {
661  secondaryParticle = p;
662 }
663 
664 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
665 
667 {
668  startFromNull = val;
669 }
670 
671 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
672 
674 {
675  splineFlag = val;
676  actSpline = true;
677 }
678 
679 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
680 
682 {
684 }
685 
686 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
687 
689 {
691 }
692 
693 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
694 
696 {
697  return currentModel;
698 }
699 
700 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
701 
702 #endif
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="", G4bool flag=true)
G4double condition(const G4ErrorSymMatrix &m)
G4PhysicsTable * LambdaTable() const
const std::vector< G4double > * theCutsGamma
std::vector< G4double > theCrossSectionMax
void DefineMaterial(const G4MaterialCutsCouple *couple)
virtual void PrintInfo()=0
G4double GetLambda(G4double &kinEnergy, const G4MaterialCutsCouple *couple)
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:258
G4PhysicsTable * LambdaTablePrim() const
G4VEmModel * SelectModel(G4double &kinEnergy, size_t index)
G4bool weightFlag
G4PhysicsTable * theLambdaTablePrim
G4double GetLambdaFromTable(G4double kinEnergy)
G4VEmProcess(const G4String &name, G4ProcessType type=fElectromagnetic)
Definition: G4VEmProcess.cc:91
G4VEmModel * currentModel
void SetBuildTableFlag(G4bool val)
G4VEmProcess & operator=(const G4VEmProcess &right)
G4double ComputeCrossSectionPerAtom(G4double kineticEnergy, G4double Z, G4double A=0., G4double cut=0.0)
G4VEmModel * EmModel(G4int index=1) const
G4String name
Definition: TRTMaterials.hh:40
G4double MscThetaLimit() const
G4ParticleChangeForGamma fParticleChange
G4double GetElectronEnergyCut()
G4EmParameters * theParameters
void SetSplineFlag(G4bool val)
const G4VEmModel * GetCurrentModel() const
const std::vector< G4double > * theCutsPositron
virtual void InitialiseProcess(const G4ParticleDefinition *)=0
size_t basedCoupleIndex
G4double MaxKinEnergy() const
virtual ~G4VEmProcess()
const G4ParticleDefinition * SecondaryParticle() const
const G4MaterialCutsCouple * currentCouple
const G4ParticleDefinition * Particle() const
G4double lambdaFactor
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
const G4Material * baseMaterial
G4double fFactor
G4PhysicsTable * theLambdaTable
void SetStartFromNullFlag(G4bool val)
G4double minKinEnergyPrim
int G4int
Definition: G4Types.hh:78
void UpdateEmModel(const G4String &, G4double, G4double)
G4double GetCurrentLambda(G4double kinEnergy)
G4bool applyCuts
void ActivateSecondaryBiasing(const G4String &region, G4double factor, G4double energyLimit)
G4int LambdaBinning() const
void SetMinKinEnergyPrim(G4double e)
G4double mfpKinEnergy
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *)
G4double MeanFreePath(const G4Track &track)
const G4ParticleDefinition * currentParticle
void SetLambdaBinning(G4int nbins)
G4double minKinEnergy
void SetEmModel(G4VEmModel *, G4int index=1)
G4bool splineFlag
size_t CurrentMaterialCutsCoupleIndex() const
double A(double temperature)
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii)
G4double PolarAngleLimit() const
G4bool startFromNull
bool G4bool
Definition: G4Types.hh:79
const std::vector< G4int > * theDensityIdx
G4double GetGammaEnergyCut()
void SetParticle(const G4ParticleDefinition *p)
void PrintInfoProcess(const G4ParticleDefinition &)
std::vector< G4DynamicParticle * > secParticles
G4ParticleChangeForGamma * GetParticleChange()
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
G4bool actSpline
G4LossTableManager * lManager
const G4Element * GetTargetElement() const
const G4ParticleDefinition * secondaryParticle
Definition: G4Step.hh:76
std::vector< G4double > theEnergyOfCrossSectionMax
G4bool actBinning
void SetIntegral(G4bool val)
const G4ParticleDefinition * particle
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
const std::vector< G4double > * theCuts
static const G4double e1
std::vector< G4VEmModel * > emModels
G4double ComputeCurrentLambda(G4double kinEnergy)
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *)
G4VEmModel * SelectModelForMaterial(G4double kinEnergy, size_t &idxRegion) const
const G4Isotope * GetTargetIsotope() const
const G4Material * currentMaterial
void SetMaxKinEnergy(G4double e)
size_t idxLambdaPrim
void FindLambdaMax()
static const G4double factor
const G4ParticleDefinition * theElectron
G4double CrossSectionBiasingFactor() const
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=0)
virtual void ProcessDescription(std::ostream &outFile) const
G4bool actMaxKinEnergy
size_t idxLambda
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:445
void SetSecondaryParticle(const G4ParticleDefinition *p)
G4EmModelManager * modelManager
const G4double x[NPOINTSGL]
G4bool IsIntegral() const
const G4Element * GetCurrentElement() const
G4double preStepLambda
void ComputeIntegralLambda(G4double kinEnergy)
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:233
G4EmBiasingManager * biasManager
G4VEmModel * SelectModel(G4double &energy, size_t &index)
G4double GetLambdaFromTablePrim(G4double kinEnergy)
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
G4int numberOfModels
const std::vector< G4double > * theDensityFactor
G4double biasFactor
size_t currentCoupleIndex
G4bool actMinKinEnergy
void SetMinKinEnergy(G4double e)
double G4double
Definition: G4Types.hh:76
const std::vector< G4double > * theCutsElectron
G4ForceCondition
virtual G4bool IsApplicable(const G4ParticleDefinition &p)=0
virtual void StartTracking(G4Track *)
G4double MinKinEnergy() const
#define DBL_MAX
Definition: templates.hh:83
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void PrintWarning(G4String tit, G4double val)
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
G4double maxKinEnergy
G4double preStepKinEnergy
G4bool buildLambdaTable
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
const G4ParticleDefinition * theGamma
const G4ParticleDefinition * thePositron
const G4Material * GetMaterial() const
G4int mainSecondaries
void BuildLambdaTable()
G4ProcessType
const G4Isotope * GetCurrentIsotope() const
Definition: G4VEmModel.hh:474
const G4Element * GetCurrentElement() const
Definition: G4VEmModel.hh:467
G4double RecalculateLambda(G4double kinEnergy, const G4MaterialCutsCouple *couple)