Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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$
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
70
71#include "G4VDiscreteProcess.hh"
72#include "globals.hh"
73#include "G4Material.hh"
75#include "G4Track.hh"
76#include "G4EmModelManager.hh"
77#include "G4UnitsTable.hh"
80
81class G4Step;
82class G4VEmModel;
83class G4DataVector;
85class G4PhysicsTable;
86class G4PhysicsVector;
88
89//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
90
92{
93public:
94
95 G4VEmProcess(const G4String& name,
97
98 virtual ~G4VEmProcess();
99
100 //------------------------------------------------------------------------
101 // Virtual methods to be implemented in concrete processes
102 //------------------------------------------------------------------------
103
105
106 virtual void PrintInfo() = 0;
107
108protected:
109
110 virtual void InitialiseProcess(const G4ParticleDefinition*) = 0;
111
112 //------------------------------------------------------------------------
113 // Method with standard implementation; may be overwritten if needed
114 //------------------------------------------------------------------------
115
117 const G4Material*);
118
119 //------------------------------------------------------------------------
120 // Implementation of virtual methods common to all Discrete processes
121 //------------------------------------------------------------------------
122
123public:
124
125 // Initialise for build of tables
127
128 // Build physics table during initialisation
130
131 void PrintInfoDefinition();
132
133 // Called before tracking of each new G4Track
134 void StartTracking(G4Track*);
135
136 // implementation of virtual method, specific for G4VEmProcess
138 const G4Track& track,
139 G4double previousStepSize,
141
142 // implementation of virtual method, specific for G4VEmProcess
144
145 // Store PhysicsTable in a file.
146 // Return false in case of failure at I/O
148 const G4String& directory,
149 G4bool ascii = false);
150
151 // Retrieve Physics from a file.
152 // (return true if the Physics Table can be build by using file)
153 // (return false if the process has no functionality or in case of failure)
154 // File name should is constructed as processName+particleName and the
155 // should be placed under the directory specifed by the argument.
157 const G4String& directory,
158 G4bool ascii);
159
160 //------------------------------------------------------------------------
161 // Specific methods for Discrete EM post step simulation
162 //------------------------------------------------------------------------
163
164 // It returns the cross section per volume for energy/ material
166 const G4MaterialCutsCouple* couple);
167
168 // It returns the cross section of the process per atom
170 G4double Z, G4double A=0.,
171 G4double cut=0.0);
172
173 G4double MeanFreePath(const G4Track& track);
174
175 // It returns cross section per volume
176 inline G4double GetLambda(G4double& kinEnergy,
177 const G4MaterialCutsCouple* couple);
178
179 //------------------------------------------------------------------------
180 // Specific methods to build and access Physics Tables
181 //------------------------------------------------------------------------
182
183 // Binning for lambda table
184 inline void SetLambdaBinning(G4int nbins);
185 inline G4int LambdaBinning() const;
186
187 // Min kinetic energy for tables
189 inline G4double MinKinEnergy() const;
190
191 // Max kinetic energy for tables
193 inline G4double MaxKinEnergy() const;
194
195 // Min kinetic energy for high energy table
196 inline void SetMinKinEnergyPrim(G4double e);
197
198 // Cross section table pointer
199 inline const G4PhysicsTable* LambdaTable() 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
212protected:
213 // Select model in run time
214 inline G4VEmModel* SelectModel(G4double& kinEnergy, size_t index);
215
216public:
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 // Assign a model to a process - obsolete will be removed
226 void SetModel(G4VEmModel*, G4int index = 1);
227
228 // return the assigned model - obsolete will be removed
229 G4VEmModel* Model(G4int index = 1);
230
231 // return the assigned model
232 G4VEmModel* EmModel(G4int index = 1);
233
234 // Assign a model to a process
235 void SetEmModel(G4VEmModel*, G4int index = 1);
236
237 // Define new energy range for the model identified by the name
239
240 // Access to models
241 G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false);
242
243 // access atom on which interaction happens
244 const G4Element* GetCurrentElement() const;
245
246 // Biasing parameters
247 void SetCrossSectionBiasingFactor(G4double f, G4bool flag = true);
248 inline G4double CrossSectionBiasingFactor() const;
249
250 // Activate forced interaction
251 void ActivateForcedInteraction(G4double length = 0.0,
252 const G4String& r = "",
253 G4bool flag = true);
254
255 void ActivateSecondaryBiasing(const G4String& region, G4double factor,
256 G4double energyLimit);
257
258
259 // Single scattering parameters
260 inline void SetPolarAngleLimit(G4double a);
261 inline G4double PolarAngleLimit() const;
262
263 inline void SetLambdaFactor(G4double val);
264
265 inline void SetIntegral(G4bool val);
266 inline G4bool IsIntegral() const;
267
268 inline void SetApplyCuts(G4bool val);
269
270 inline void SetBuildTableFlag(G4bool val);
271
272 //------------------------------------------------------------------------
273 // Other generic methods
274 //------------------------------------------------------------------------
275
276protected:
277
278 G4double GetMeanFreePath(const G4Track& track,
279 G4double previousStepSize,
281
283
284 inline G4double RecalculateLambda(G4double kinEnergy,
285 const G4MaterialCutsCouple* couple);
286
288
289 inline void SetParticle(const G4ParticleDefinition* p);
290
291 inline void SetSecondaryParticle(const G4ParticleDefinition* p);
292
293 inline size_t CurrentMaterialCutsCoupleIndex() const;
294
296
298
299 inline void SetStartFromNullFlag(G4bool val);
300
301 inline void SetSplineFlag(G4bool val);
302
303private:
304
305 void Clear();
306
307 void BuildLambdaTable();
308
309 void FindLambdaMax();
310
311 inline void DefineMaterial(const G4MaterialCutsCouple* couple);
312
313 inline void ComputeIntegralLambda(G4double kinEnergy);
314
315 inline G4double GetLambdaFromTable(G4double kinEnergy);
316
317 inline G4double GetLambdaFromTablePrim(G4double kinEnergy);
318
319 inline G4double GetCurrentLambda(G4double kinEnergy);
320
321 inline G4double ComputeCurrentLambda(G4double kinEnergy);
322
323 // copy constructor and hide assignment operator
325 G4VEmProcess & operator=(const G4VEmProcess &right);
326
327 // ======== Parameters of the class fixed at construction =========
328
329 G4EmModelManager* modelManager;
330 G4EmBiasingManager* biasManager;
331 const G4ParticleDefinition* theGamma;
332 const G4ParticleDefinition* theElectron;
333 const G4ParticleDefinition* thePositron;
334 const G4ParticleDefinition* secondaryParticle;
335
336 G4bool buildLambdaTable;
337
338 // ======== Parameters of the class fixed at initialisation =======
339
340 std::vector<G4VEmModel*> emModels;
341 G4int numberOfModels;
342
343 // tables and vectors
344 G4PhysicsTable* theLambdaTable;
345 G4PhysicsTable* theLambdaTablePrim;
346 std::vector<G4double> theEnergyOfCrossSectionMax;
347 std::vector<G4double> theCrossSectionMax;
348
349 const std::vector<G4double>* theCuts;
350 const std::vector<G4double>* theCutsGamma;
351 const std::vector<G4double>* theCutsElectron;
352 const std::vector<G4double>* theCutsPositron;
353 const std::vector<G4double>* theDensityFactor;
354 const std::vector<G4int>* theDensityIdx;
355
356 G4int nLambdaBins;
357
358 G4double minKinEnergy;
359 G4double minKinEnergyPrim;
360 G4double maxKinEnergy;
361 G4double lambdaFactor;
362 G4double polarAngleLimit;
363 G4double biasFactor;
364
365 G4bool integral;
366 G4bool applyCuts;
367 G4bool startFromNull;
368 G4bool splineFlag;
369
370 // ======== Cashed values - may be state dependent ================
371
372protected:
373
375
376private:
377
378 std::vector<G4DynamicParticle*> secParticles;
379
380 G4VEmModel* currentModel;
381
382 const G4ParticleDefinition* particle;
383 const G4ParticleDefinition* currentParticle;
384
385 // cash
386 const G4Material* baseMaterial;
387 const G4Material* currentMaterial;
388 const G4MaterialCutsCouple* currentCouple;
389 size_t currentCoupleIndex;
390 size_t basedCoupleIndex;
391
392 G4double mfpKinEnergy;
393 G4double preStepKinEnergy;
394 G4double preStepLambda;
395 G4double fFactor;
396 G4bool biasFlag;
397 G4bool weightFlag;
398
399 G4int warn;
400};
401
402// ======== Run time inline methods ================
403
405{
406 return currentCoupleIndex;
407}
408
409//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
410
412{
413 return (*theCutsGamma)[currentCoupleIndex];
414}
415
416//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
417
419{
420 return (*theCutsElectron)[currentCoupleIndex];
421}
422
423//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
424
425inline void G4VEmProcess::DefineMaterial(const G4MaterialCutsCouple* couple)
426{
427 if(couple != currentCouple) {
428 currentCouple = couple;
429 currentMaterial = couple->GetMaterial();
430 baseMaterial = currentMaterial->GetBaseMaterial();
431 currentCoupleIndex = couple->GetIndex();
432 basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
433 fFactor = biasFactor*(*theDensityFactor)[currentCoupleIndex];
434 if(!baseMaterial) { baseMaterial = currentMaterial; }
435 mfpKinEnergy = DBL_MAX;
436 }
437}
438
439//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
440
441inline
443{
444 if(1 < numberOfModels) {
445 currentModel = modelManager->SelectModel(kinEnergy, index);
446 }
447 currentModel->SetCurrentCouple(currentCouple);
448 return currentModel;
449}
450
451//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
452
453inline
455 size_t& idxRegion) const
456{
457 return modelManager->SelectModel(kinEnergy, idxRegion);
458}
459
460//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
461
462inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
463{
464 return ((*theLambdaTable)[basedCoupleIndex])->Value(e);
465}
466
467//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
468
469inline G4double G4VEmProcess::GetLambdaFromTablePrim(G4double e)
470{
471 return ((*theLambdaTablePrim)[basedCoupleIndex])->Value(e)/e;
472}
473
474//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
475
476inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
477{
478 return currentModel->CrossSectionPerVolume(baseMaterial,currentParticle,
479 e,(*theCuts)[currentCoupleIndex]);
480}
481
482//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
483
484inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
485{
486 G4double x;
487 if(e >= minKinEnergyPrim) { x = GetLambdaFromTablePrim(e); }
488 else if(theLambdaTable) { x = GetLambdaFromTable(e); }
489 else { x = ComputeCurrentLambda(e); }
490 return fFactor*x;
491}
492
493//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
494
495inline G4double
497 const G4MaterialCutsCouple* couple)
498{
499 DefineMaterial(couple);
500 SelectModel(kinEnergy, currentCoupleIndex);
501 return GetCurrentLambda(kinEnergy);
502}
503
504//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
505
506inline G4double
508{
509 DefineMaterial(couple);
510 SelectModel(e, currentCoupleIndex);
511 return fFactor*ComputeCurrentLambda(e);
512}
513
514//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
515
516inline void G4VEmProcess::ComputeIntegralLambda(G4double e)
517{
518 mfpKinEnergy = theEnergyOfCrossSectionMax[currentCoupleIndex];
519 if (e <= mfpKinEnergy) {
520 preStepLambda = GetCurrentLambda(e);
521
522 } else {
523 G4double e1 = e*lambdaFactor;
524 if(e1 > mfpKinEnergy) {
525 preStepLambda = GetCurrentLambda(e);
526 G4double preStepLambda1 = GetCurrentLambda(e1);
527 if(preStepLambda1 > preStepLambda) {
528 mfpKinEnergy = e1;
529 preStepLambda = preStepLambda1;
530 }
531 } else {
532 preStepLambda = fFactor*theCrossSectionMax[currentCoupleIndex];
533 }
534 }
535}
536
537// ======== Get/Set inline methods used at initialisation ================
538
540{
541 nLambdaBins = nbins;
542}
543
544//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
545
547{
548 return nLambdaBins;
549}
550
551//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
552
554{
555 return minKinEnergy;
556}
557
558//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
559
561{
562 return maxKinEnergy;
563}
564
565//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
566
568{
569 minKinEnergyPrim = e;
570}
571
572//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
573
575{
576 if(val < 0.0) { polarAngleLimit = 0.0; }
577 else if(val > CLHEP::pi) { polarAngleLimit = CLHEP::pi; }
578 else { polarAngleLimit = val; }
579}
580
581//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
582
584{
585 return polarAngleLimit;
586}
587
588//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
589
591{
592 return biasFactor;
593}
594
595//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
596
598{
599 return theLambdaTable;
600}
601
602//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
603
605{
606 return particle;
607}
608
609//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
610
612{
613 return secondaryParticle;
614}
615
616//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
617
619{
620 if(val > 0.0 && val <= 1.0) { lambdaFactor = val; }
621}
622
623//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
624
626{
627 if(particle && particle != theGamma) { integral = val; }
628}
629
630//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
631
633{
634 return integral;
635}
636
637//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
638
640{
641 applyCuts = val;
642}
643
644//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
645
647{
648 buildLambdaTable = val;
649}
650
651//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
652
654{
655 return &fParticleChange;
656}
657
658//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
659
661{
662 particle = p;
663 currentParticle = p;
664}
665
666//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
667
669{
670 secondaryParticle = p;
671}
672
673//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
674
676{
677 startFromNull = val;
678}
679
680//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
681
683{
684 splineFlag = val;
685}
686
687//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
688
689#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4ProcessType
@ fElectromagnetic
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4VEmModel * SelectModel(G4double &energy, size_t &index)
const G4Material * GetMaterial() const
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:232
Definition: G4Step.hh:78
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:186
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:370
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
G4double RecalculateLambda(G4double kinEnergy, const G4MaterialCutsCouple *couple)
G4double GetGammaEnergyCut()
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false)
void SetIntegral(G4bool val)
G4double MeanFreePath(const G4Track &track)
void StartTracking(G4Track *)
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *)
virtual void PrintInfo()=0
const G4ParticleDefinition * Particle() const
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=0)
virtual G4bool IsApplicable(const G4ParticleDefinition &p)=0
void SetLambdaFactor(G4double val)
void SetBuildTableFlag(G4bool val)
virtual G4double MinPrimaryEnergy(const G4ParticleDefinition *, const G4Material *)
G4double ComputeCrossSectionPerAtom(G4double kineticEnergy, G4double Z, G4double A=0., G4double cut=0.0)
void SetMinKinEnergy(G4double e)
G4double GetElectronEnergyCut()
G4VEmModel * SelectModel(G4double &kinEnergy, size_t index)
G4double CrossSectionBiasingFactor() const
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
void SetEmModel(G4VEmModel *, G4int index=1)
virtual void InitialiseProcess(const G4ParticleDefinition *)=0
void SetLambdaBinning(G4int nbins)
G4VEmModel * EmModel(G4int index=1)
void SetSecondaryParticle(const G4ParticleDefinition *p)
G4double GetLambda(G4double &kinEnergy, const G4MaterialCutsCouple *couple)
void SetSplineFlag(G4bool val)
void PrintInfoDefinition()
void UpdateEmModel(const G4String &, G4double, G4double)
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4double MaxKinEnergy() const
G4ParticleChangeForGamma * GetParticleChange()
void SetApplyCuts(G4bool val)
G4double CrossSectionPerVolume(G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4VEmModel * SelectModelForMaterial(G4double kinEnergy, size_t &idxRegion) const
G4double MinKinEnergy() const
const G4PhysicsTable * LambdaTable() const
void PreparePhysicsTable(const G4ParticleDefinition &)
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="", G4bool flag=true)
void SetStartFromNullFlag(G4bool val)
G4VEmModel * Model(G4int index=1)
void ActivateSecondaryBiasing(const G4String &region, G4double factor, G4double energyLimit)
G4double PolarAngleLimit() const
G4ParticleChangeForGamma fParticleChange
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii)
G4bool IsIntegral() const
G4int LambdaBinning() const
void SetParticle(const G4ParticleDefinition *p)
void SetMinKinEnergyPrim(G4double e)
void SetMaxKinEnergy(G4double e)
void SetPolarAngleLimit(G4double a)
size_t CurrentMaterialCutsCoupleIndex() const
const G4Element * GetCurrentElement() const
void SetModel(G4VEmModel *, G4int index=1)
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
virtual ~G4VEmProcess()
const G4ParticleDefinition * SecondaryParticle() const
#define DBL_MAX
Definition: templates.hh:83