Geant4 11.1.1
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// -------------------------------------------------------------------
27//
28// GEANT4 Class header file
29//
30//
31// File name: G4VEmProcess
32//
33// Author: Vladimir Ivanchenko
34//
35// Creation date: 01.10.2003
36//
37// Modifications: Vladimir Ivanchenko
38//
39// Class Description:
40//
41// It is the base class - EM discrete and rest/discrete process
42
43// -------------------------------------------------------------------
44//
45
46#ifndef G4VEmProcess_h
47#define G4VEmProcess_h 1
48
50
51#include "G4VDiscreteProcess.hh"
52#include "globals.hh"
53#include "G4Material.hh"
55#include "G4Track.hh"
56#include "G4UnitsTable.hh"
59#include "G4EmParameters.hh"
60#include "G4EmDataHandler.hh"
61#include "G4EmTableType.hh"
62#include "G4EmModelManager.hh"
64
65class G4Step;
66class G4VEmModel;
67class G4DataVector;
69class G4PhysicsTable;
70class G4PhysicsVector;
73
74//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
75
77{
78public:
79
81
82 ~G4VEmProcess() override;
83
84 //------------------------------------------------------------------------
85 // Virtual methods to be implemented in concrete processes
86 //------------------------------------------------------------------------
87
88 virtual G4bool IsApplicable(const G4ParticleDefinition& p) override = 0;
89
90 void ProcessDescription(std::ostream& outFile) const override;
91
92protected:
93
94 virtual void StreamProcessInfo(std::ostream&) const {};
95
96 virtual void InitialiseProcess(const G4ParticleDefinition*) = 0;
97
98 //------------------------------------------------------------------------
99 // Implementation of virtual methods common to all Discrete processes
100 //------------------------------------------------------------------------
101
102public:
103
104 // Initialise for build of tables
105 void PreparePhysicsTable(const G4ParticleDefinition&) override;
106
107 // Build physics table during initialisation
108 void BuildPhysicsTable(const G4ParticleDefinition&) override;
109
110 // Called before tracking of each new G4Track
111 void StartTracking(G4Track*) override;
112
113 // implementation of virtual method, specific for G4VEmProcess
115 const G4Track& track,
116 G4double previousStepSize,
117 G4ForceCondition* condition) override;
118
119 // implementation of virtual method, specific for G4VEmProcess
120 G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override;
121
122 // Store PhysicsTable in a file.
123 // Return false in case of failure at I/O
125 const G4String& directory,
126 G4bool ascii = false) override;
127
128 // Retrieve Physics from a file.
129 // (return true if the Physics Table can be build by using file)
130 // (return false if the process has no functionality or in case of failure)
131 // File name should is constructed as processName+particleName and the
132 // should be placed under the directory specified by the argument.
134 const G4String& directory,
135 G4bool ascii) override;
136
137 // allowing check process name
138 virtual G4VEmProcess* GetEmProcess(const G4String& name);
139
140 //------------------------------------------------------------------------
141 // Specific methods for Discrete EM post step simulation
142 //------------------------------------------------------------------------
143
144 // The main method to access cross section per volume
145 inline G4double GetLambda(G4double kinEnergy,
146 const G4MaterialCutsCouple* couple,
147 G4double logKinEnergy);
148
149 // It returns the cross section per volume for energy/material
150 G4double GetCrossSection(const G4double kinEnergy,
151 const G4MaterialCutsCouple* couple) override;
152
153 // It returns the cross section of the process per atom
155 G4double Z, G4double A=0.,
156 G4double cut=0.0);
157
158 inline G4double MeanFreePath(const G4Track& track);
159
160 //------------------------------------------------------------------------
161 // Specific methods to build and access Physics Tables
162 //------------------------------------------------------------------------
163
164 // Binning for lambda table
165 void SetLambdaBinning(G4int nbins);
166
167 // Min kinetic energy for tables
169
170 // Min kinetic energy for high energy table
172
173 // Max kinetic energy for tables
175
176 // Cross section table pointers
177 inline G4PhysicsTable* LambdaTable() const;
178 inline G4PhysicsTable* LambdaTablePrim() const;
179 inline void SetLambdaTable(G4PhysicsTable*);
181
182 // Integral method type and peak positions
183 inline std::vector<G4double>* EnergyOfCrossSectionMax() const;
184 inline void SetEnergyOfCrossSectionMax(std::vector<G4double>*);
187
188 //------------------------------------------------------------------------
189 // Define and access particle type
190 //------------------------------------------------------------------------
191
192 inline const G4ParticleDefinition* Particle() const;
193 inline const G4ParticleDefinition* SecondaryParticle() const;
194
195protected:
196
197 //------------------------------------------------------------------------
198 // Specific methods to set, access, modify models and basic parameters
199 //------------------------------------------------------------------------
200
201 // Select model in run time
202 inline G4VEmModel* SelectModel(G4double kinEnergy, size_t);
203
204public:
205
206 // Select model by energy and couple index
207 inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,
208 size_t idxCouple) const;
209
210 // Add model for region, smaller value of order defines which
211 // model will be selected for a given energy interval
212 void AddEmModel(G4int, G4VEmModel*, const G4Region* region = nullptr);
213
214 // Assign a model to a process local list, to enable the list in run time
215 // the derived process should execute AddEmModel(..) for all such models
216 void SetEmModel(G4VEmModel*, G4int index = 0);
217
218 inline G4int NumberOfModels() const;
219
220 // return a model from the local list
221 inline G4VEmModel* EmModel(size_t index = 0) const;
222
223 // Access to active model
224 inline const G4VEmModel* GetCurrentModel() const;
225
226 // Access to models
227 inline G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false) const;
228
229 // Access to the current G4Element
230 const G4Element* GetCurrentElement() const;
231
232 // Biasing parameters
233 void SetCrossSectionBiasingFactor(G4double f, G4bool flag = true);
234 inline G4double CrossSectionBiasingFactor() const;
235
236 // Activate forced interaction
237 void ActivateForcedInteraction(G4double length = 0.0,
238 const G4String& r = "",
239 G4bool flag = true);
240
241 void ActivateSecondaryBiasing(const G4String& region, G4double factor,
242 G4double energyLimit);
243
244 inline void SetEmMasterProcess(const G4VEmProcess*);
245
246 inline void SetBuildTableFlag(G4bool val);
247
248 inline void CurrentSetup(const G4MaterialCutsCouple*, G4double energy);
249
250 inline G4bool UseBaseMaterial() const;
251
252 void BuildLambdaTable();
253
254 void StreamInfo(std::ostream& outFile, const G4ParticleDefinition&,
255 G4bool rst=false) const;
256
257 // hide copy constructor and assignment operator
259 G4VEmProcess & operator=(const G4VEmProcess &right) = delete;
260
261 //------------------------------------------------------------------------
262 // Other generic methods
263 //------------------------------------------------------------------------
264
265protected:
266
267 G4double GetMeanFreePath(const G4Track& track,
268 G4double previousStepSize,
269 G4ForceCondition* condition) override;
270
272
273 inline void DefineMaterial(const G4MaterialCutsCouple* couple);
274
275 inline G4int LambdaBinning() const;
276
277 inline G4double MinKinEnergy() const;
278
279 inline G4double MaxKinEnergy() const;
280
281 // Single scattering parameters
282 inline G4double PolarAngleLimit() const;
283
285
286 inline void SetParticle(const G4ParticleDefinition* p);
287
288 inline void SetSecondaryParticle(const G4ParticleDefinition* p);
289
290 inline size_t CurrentMaterialCutsCoupleIndex() const;
291
292 inline const G4MaterialCutsCouple* MaterialCutsCouple() const;
293
294 inline G4bool ApplyCuts() const;
295
297
299
300 inline void SetStartFromNullFlag(G4bool val);
301
302 inline void SetSplineFlag(G4bool val);
303
304 const G4Element* GetTargetElement() const;
305
306 const G4Isotope* GetTargetIsotope() const;
307
308 // these two methods assume that vectors are initilized
309 // and idx is within vector length
310 inline G4int DensityIndex(G4int idx) const;
311 inline G4double DensityFactor(G4int idx) const;
312
313private:
314
315 void PrintWarning(G4String tit, G4double val);
316
317 void ComputeIntegralLambda(G4double kinEnergy, G4double logKinEnergy);
318
319 inline G4double GetLambdaFromTable(G4double kinEnergy);
320
321 inline G4double GetLambdaFromTable(G4double kinEnergy, G4double logKinEnergy);
322
323 inline G4double GetLambdaFromTablePrim(G4double kinEnergy);
324
325 inline G4double GetLambdaFromTablePrim(G4double kinEnergy, G4double logKinEnergy);
326
327 inline G4double GetCurrentLambda(G4double kinEnergy);
328
329 inline G4double GetCurrentLambda(G4double kinEnergy, G4double logKinEnergy);
330
331 inline G4double ComputeCurrentLambda(G4double kinEnergy);
332
333 // ======== pointers =========
334
335 G4EmModelManager* modelManager = nullptr;
336 const G4ParticleDefinition* particle = nullptr;
337 const G4ParticleDefinition* currentParticle = nullptr;
338 const G4ParticleDefinition* theGamma = nullptr;
339 const G4ParticleDefinition* theElectron = nullptr;
340 const G4ParticleDefinition* thePositron = nullptr;
341 const G4ParticleDefinition* secondaryParticle = nullptr;
342 const G4VEmProcess* masterProc = nullptr;
343 G4EmDataHandler* theData = nullptr;
344 G4VEmModel* currentModel = nullptr;
345 G4LossTableManager* lManager = nullptr;
346 G4EmParameters* theParameters = nullptr;
347 const G4Material* baseMaterial = nullptr;
348
349 // ======== tables and vectors ========
350 G4PhysicsTable* theLambdaTable = nullptr;
351 G4PhysicsTable* theLambdaTablePrim = nullptr;
352
353 const std::vector<G4double>* theCuts = nullptr;
354 const std::vector<G4double>* theCutsGamma = nullptr;
355 const std::vector<G4double>* theCutsElectron = nullptr;
356 const std::vector<G4double>* theCutsPositron = nullptr;
357
358protected:
359
360 // ======== pointers =========
361
363 const G4Material* currentMaterial = nullptr;
365 std::vector<G4double>* theEnergyOfCrossSectionMax = nullptr;
366
367private:
368
369 const std::vector<G4double>* theDensityFactor = nullptr;
370 const std::vector<G4int>* theDensityIdx = nullptr;
371
372 // ======== parameters =========
373 G4double minKinEnergy;
374 G4double maxKinEnergy;
375 G4double minKinEnergyPrim = DBL_MAX;
376 G4double lambdaFactor = 0.8;
377 G4double invLambdaFactor;
378 G4double biasFactor = 1.0;
379 G4double massRatio = 1.0;
380 G4double fFactor = 1.0;
381 G4double fLambda = 0.0;
382 G4double fLambdaEnergy = 0.0;
383
384protected:
385
390
391private:
392
394
395 G4int numberOfModels = 0;
396 G4int nLambdaBins = 84;
397
398protected:
399
408 size_t coupleIdxLambda = 0;
409 size_t idxLambda = 0;
410
413
414private:
415
416 G4bool buildLambdaTable = true;
417 G4bool applyCuts = false;
418 G4bool startFromNull = false;
419 G4bool splineFlag = true;
420 G4bool actMinKinEnergy = false;
421 G4bool actMaxKinEnergy = false;
422 G4bool actBinning = false;
423 G4bool isIon = false;
424 G4bool biasFlag = false;
425 G4bool weightFlag = false;
426
427protected:
428
429 // ======== particle change =========
430 std::vector<G4DynamicParticle*> secParticles;
432
433private:
434
435 // ======== local vectors =========
436 std::vector<G4VEmModel*> emModels;
437
438};
439
440// ======== Run time inline methods ================
441
442//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
443
445{
446 return currentCoupleIndex;
447}
448
449//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
450
452{
453 return currentCouple;
454}
455
456//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
457
459{
460 return (*theCutsGamma)[currentCoupleIndex];
461}
462
463//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
464
466{
467 return (*theCutsElectron)[currentCoupleIndex];
468}
469
470//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
471
473{
474 if(couple != currentCouple) {
475 currentCouple = couple;
476 baseMaterial = currentMaterial = couple->GetMaterial();
478 fFactor = biasFactor;
480 if(baseMat) {
481 basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
482 if(nullptr != currentMaterial->GetBaseMaterial())
483 baseMaterial = currentMaterial->GetBaseMaterial();
484 fFactor *= (*theDensityFactor)[currentCoupleIndex];
485 }
486 }
487}
488
489//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
490
491inline
493{
494 if(1 < numberOfModels) {
495 currentModel = modelManager->SelectModel(kinEnergy, currentCoupleIndex);
496 }
497 currentModel->SetCurrentCouple(currentCouple);
498 return currentModel;
499}
500
501//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
502
503inline
505 size_t idxCouple) const
506{
507 return modelManager->SelectModel(kinEnergy, idxCouple);
508}
509
510//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
511
512inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
513{
514 return ((*theLambdaTable)[basedCoupleIndex])->Value(e, idxLambda);
515}
516
517//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
518
519inline G4double G4VEmProcess::GetLambdaFromTable(G4double e, G4double loge)
520{
521 return ((*theLambdaTable)[basedCoupleIndex])->LogVectorValue(e, loge);
522}
523
524//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
525
526inline G4double G4VEmProcess::GetLambdaFromTablePrim(G4double e)
527{
528 return ((*theLambdaTablePrim)[basedCoupleIndex])->Value(e, idxLambda)/e;
529}
530
531//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
532
533inline G4double G4VEmProcess::GetLambdaFromTablePrim(G4double e, G4double loge)
534{
535 return ((*theLambdaTablePrim)[basedCoupleIndex])->LogVectorValue(e, loge)/e;
536}
537
538//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
539
540inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
541{
542 return currentModel->CrossSectionPerVolume(baseMaterial, currentParticle, e);
543}
544
545//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
546
547inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
548{
549 if(currentCoupleIndex != coupleIdxLambda || fLambdaEnergy != e) {
551 fLambdaEnergy = e;
552 if(e >= minKinEnergyPrim) { fLambda = GetLambdaFromTablePrim(e); }
553 else if(nullptr != theLambdaTable) { fLambda = GetLambdaFromTable(e); }
554 else { fLambda = ComputeCurrentLambda(e); }
555 fLambda *= fFactor;
556 }
557 return fLambda;
558}
559
560//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
561
562inline G4double G4VEmProcess::GetCurrentLambda(G4double e, G4double loge)
563{
564 if(currentCoupleIndex != coupleIdxLambda || fLambdaEnergy != e) {
566 fLambdaEnergy = e;
567 if(e >= minKinEnergyPrim) { fLambda = GetLambdaFromTablePrim(e, loge); }
568 else if(nullptr != theLambdaTable) { fLambda = GetLambdaFromTable(e, loge); }
569 else { fLambda = ComputeCurrentLambda(e); }
570 fLambda *= fFactor;
571 }
572 return fLambda;
573}
574
575//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
576
577inline void
579{
580 DefineMaterial(couple);
581 SelectModel(energy*massRatio, currentCoupleIndex);
582}
583
584//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
585
586inline G4double
588 G4double logKinEnergy)
589{
590 CurrentSetup(couple, kinEnergy);
591 return GetCurrentLambda(kinEnergy, logKinEnergy);
592}
593
594//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
595
597{
598 const G4double kinEnergy = track.GetKineticEnergy();
599 CurrentSetup(track.GetMaterialCutsCouple(), kinEnergy);
600 const G4double xs = GetCurrentLambda(kinEnergy,
602 return (0.0 < xs) ? 1.0/xs : DBL_MAX;
603}
604
605// ======== Get/Set inline methods used at initialisation ================
606
608{
609 return applyCuts;
610}
611
612//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
613
615{
616 return nLambdaBins;
617}
618
619//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
620
622{
623 return minKinEnergy;
624}
625
626//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
627
629{
630 return maxKinEnergy;
631}
632
633//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
634
636{
637 return biasFactor;
638}
639
640//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
641
643{
644 return theLambdaTable;
645}
646
647//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
648
650{
651 return theLambdaTablePrim;
652}
653
654//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
655
657{
658 theLambdaTable = ptr;
659}
660
661//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
662
664{
665 theLambdaTablePrim = ptr;
666}
667
668//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
669
670inline std::vector<G4double>* G4VEmProcess::EnergyOfCrossSectionMax() const
671{
673}
674
675//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
676
677inline void
679{
681}
682
683//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
684
686{
687 return particle;
688}
689
690//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
691
693{
694 return secondaryParticle;
695}
696
697//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
698
700{
701 fXSType = val;
702}
703
704//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
705
707{
708 return fXSType;
709}
710
711//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
712
714{
715 buildLambdaTable = val;
716}
717
718//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
719
721{
722 return &fParticleChange;
723}
724
725//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
726
728{
729 particle = p;
730 currentParticle = p;
731}
732
733//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
734
736{
737 secondaryParticle = p;
738}
739
740//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
741
743{
744 startFromNull = val;
745}
746
747//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
748
750{
751 splineFlag = val;
752}
753
754//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
755
757{
758 return (*theDensityIdx)[idx];
759}
760
761//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
762
764{
765 return (*theDensityFactor)[idx];
766}
767
768//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
769
771{
772 return baseMat;
773}
774
775//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
776
778{
779 return currentModel;
780}
781
782//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
783
785{
786 masterProc = ptr;
787}
788
789//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
790
792{
793 return numberOfModels;
794}
795
796//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
797
798inline G4VEmModel* G4VEmProcess::EmModel(size_t index) const
799{
800 return (index < emModels.size()) ? emModels[index] : nullptr;
801}
802
803//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
804
806{
807 return modelManager->GetModel(idx, ver);
808}
809
810//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
811
812#endif
G4CrossSectionType
@ fEmNoIntegral
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4ProcessType
@ fElectromagnetic
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
G4double GetLogKineticEnergy() const
G4VEmModel * SelectModel(G4double energy, std::size_t index)
G4VEmModel * GetModel(G4int idx, G4bool ver=false) const
const G4Material * GetMaterial() const
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:228
Definition: G4Step.hh:62
const G4DynamicParticle * GetDynamicParticle() const
G4double GetKineticEnergy() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:181
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:468
G4CrossSectionType CrossSectionType() const
void DefineMaterial(const G4MaterialCutsCouple *couple)
G4bool ApplyCuts() const
G4double GetGammaEnergyCut()
G4VEmModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
G4double MeanFreePath(const G4Track &track)
G4int mainSecondaries
G4PhysicsVector * LambdaPhysicsVector(const G4MaterialCutsCouple *)
void CurrentSetup(const G4MaterialCutsCouple *, G4double energy)
const G4ParticleDefinition * Particle() const
virtual void StreamProcessInfo(std::ostream &) const
Definition: G4VEmProcess.hh:94
G4VEmModel * SelectModel(G4double kinEnergy, size_t)
G4EmBiasingManager * biasManager
void BuildPhysicsTable(const G4ParticleDefinition &) override
void SetLambdaTablePrim(G4PhysicsTable *)
G4double preStepLambda
G4VEmModel * EmModel(size_t index=0) const
void SetBuildTableFlag(G4bool val)
G4double preStepLogKinEnergy
G4double ComputeCrossSectionPerAtom(G4double kineticEnergy, G4double Z, G4double A=0., G4double cut=0.0)
G4VEmProcess(G4VEmProcess &)=delete
void SetEnergyOfCrossSectionMax(std::vector< G4double > *)
G4PhysicsTable * LambdaTable() const
std::vector< G4double > * theEnergyOfCrossSectionMax
virtual G4bool IsApplicable(const G4ParticleDefinition &p) override=0
void SetMinKinEnergy(G4double e)
size_t basedCoupleIndex
G4double GetElectronEnergyCut()
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
G4int DensityIndex(G4int idx) const
size_t idxLambda
void StartTracking(G4Track *) override
G4double GetCrossSection(const G4double kinEnergy, const G4MaterialCutsCouple *couple) override
G4double CrossSectionBiasingFactor() const
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetCrossSectionBiasingFactor(G4double f, G4bool flag=true)
G4double mfpKinEnergy
void SetEmMasterProcess(const G4VEmProcess *)
virtual void InitialiseProcess(const G4ParticleDefinition *)=0
void StreamInfo(std::ostream &outFile, const G4ParticleDefinition &, G4bool rst=false) const
size_t coupleIdxLambda
~G4VEmProcess() override
void SetLambdaBinning(G4int nbins)
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
void SetSecondaryParticle(const G4ParticleDefinition *p)
const G4VEmModel * GetCurrentModel() const
void SetSplineFlag(G4bool val)
G4VEmModel * SelectModelForMaterial(G4double kinEnergy, size_t idxCouple) const
std::vector< G4double > * EnergyOfCrossSectionMax() const
G4bool UseBaseMaterial() const
G4int NumberOfModels() const
void SetCrossSectionType(G4CrossSectionType val)
void ProcessDescription(std::ostream &outFile) const override
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4VEmProcess & operator=(const G4VEmProcess &right)=delete
G4double GetLambda(G4double kinEnergy, const G4MaterialCutsCouple *couple, G4double logKinEnergy)
const G4Element * GetTargetElement() const
G4double DensityFactor(G4int idx) const
virtual G4VEmProcess * GetEmProcess(const G4String &name)
G4double MaxKinEnergy() const
G4ParticleChangeForGamma * GetParticleChange()
const G4Isotope * GetTargetIsotope() const
G4bool isTheMaster
G4double MinKinEnergy() const
std::vector< G4DynamicParticle * > secParticles
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="", G4bool flag=true)
const G4MaterialCutsCouple * currentCouple
void SetStartFromNullFlag(G4bool val)
G4PhysicsTable * LambdaTablePrim() const
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
void ActivateSecondaryBiasing(const G4String &region, G4double factor, G4double energyLimit)
const G4MaterialCutsCouple * MaterialCutsCouple() const
G4double preStepKinEnergy
G4double PolarAngleLimit() const
size_t currentCoupleIndex
G4ParticleChangeForGamma fParticleChange
void SetLambdaTable(G4PhysicsTable *)
G4int LambdaBinning() const
void SetParticle(const G4ParticleDefinition *p)
void SetMinKinEnergyPrim(G4double e)
void PreparePhysicsTable(const G4ParticleDefinition &) override
void SetMaxKinEnergy(G4double e)
const G4Material * currentMaterial
size_t CurrentMaterialCutsCoupleIndex() const
const G4Element * GetCurrentElement() const
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
void BuildLambdaTable()
const G4ParticleDefinition * SecondaryParticle() const
#define LOG_EKIN_MIN
Definition: templates.hh:98
#define DBL_MAX
Definition: templates.hh:62