Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh (Version 11.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 // -------------------------------------------     27 // -------------------------------------------------------------------
 28 //                                                 28 //
 29 // GEANT4 Class header file                        29 // GEANT4 Class header file
 30 //                                                 30 //
 31 //                                                 31 //
 32 // File name:     G4VEnergyLossProcess             32 // File name:     G4VEnergyLossProcess
 33 //                                                 33 //
 34 // Author:        Vladimir Ivanchenko on base      34 // Author:        Vladimir Ivanchenko on base of Laszlo Urban code
 35 //                                                 35 //
 36 // Creation date: 03.01.2002                       36 // Creation date: 03.01.2002
 37 //                                                 37 //
 38 // Modifications: Vladimir Ivanchenko              38 // Modifications: Vladimir Ivanchenko
 39 //                                                 39 //
 40 // Class Description:                              40 // Class Description:
 41 //                                                 41 //
 42 // It is the unified energy loss process it ca     42 // It is the unified energy loss process it calculates the continuous
 43 // energy loss for charged particles using a s     43 // energy loss for charged particles using a set of Energy Loss
 44 // models valid for different energy regions.      44 // models valid for different energy regions. There are a possibility
 45 // to create and access to dE/dx and range tab     45 // to create and access to dE/dx and range tables, or to calculate
 46 // that information on fly.                        46 // that information on fly.
 47                                                    47 
 48 // -------------------------------------------     48 // -------------------------------------------------------------------
 49 //                                                 49 //
 50                                                    50 
 51 #ifndef G4VEnergyLossProcess_h                     51 #ifndef G4VEnergyLossProcess_h
 52 #define G4VEnergyLossProcess_h 1                   52 #define G4VEnergyLossProcess_h 1
 53                                                    53 
 54 #include "G4VContinuousDiscreteProcess.hh"         54 #include "G4VContinuousDiscreteProcess.hh"
 55 #include "globals.hh"                              55 #include "globals.hh"
 56 #include "G4Material.hh"                           56 #include "G4Material.hh"
 57 #include "G4MaterialCutsCouple.hh"                 57 #include "G4MaterialCutsCouple.hh"
 58 #include "G4Track.hh"                              58 #include "G4Track.hh"
 59 #include "G4EmModelManager.hh"                     59 #include "G4EmModelManager.hh"
 60 #include "G4ParticleChangeForLoss.hh"              60 #include "G4ParticleChangeForLoss.hh"
 61 #include "G4EmTableType.hh"                        61 #include "G4EmTableType.hh"
 62 #include "G4EmSecondaryParticleType.hh"            62 #include "G4EmSecondaryParticleType.hh"
 63 #include "G4PhysicsTable.hh"                       63 #include "G4PhysicsTable.hh"
 64 #include "G4PhysicsVector.hh"                      64 #include "G4PhysicsVector.hh"
 65                                                    65 
 66 class G4Step;                                      66 class G4Step;
 67 class G4ParticleDefinition;                        67 class G4ParticleDefinition;
 68 class G4EmParameters;                              68 class G4EmParameters;
 69 class G4VEmModel;                                  69 class G4VEmModel;
 70 class G4VEmFluctuationModel;                       70 class G4VEmFluctuationModel;
 71 class G4DataVector;                                71 class G4DataVector;
 72 class G4Region;                                    72 class G4Region;
 73 class G4SafetyHelper;                              73 class G4SafetyHelper;
 74 class G4VAtomDeexcitation;                         74 class G4VAtomDeexcitation;
 75 class G4VSubCutProducer;                           75 class G4VSubCutProducer;
 76 class G4EmBiasingManager;                          76 class G4EmBiasingManager;
 77 class G4LossTableManager;                          77 class G4LossTableManager;
 78 class G4EmDataHandler;                             78 class G4EmDataHandler;
 79                                                    79 
 80 //....oooOO0OOooo........oooOO0OOooo........oo     80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 81                                                    81 
 82 class G4VEnergyLossProcess : public G4VContinu     82 class G4VEnergyLossProcess : public G4VContinuousDiscreteProcess
 83 {                                                  83 {
 84 public:                                            84 public:
 85                                                    85 
 86   G4VEnergyLossProcess(const G4String& name =      86   G4VEnergyLossProcess(const G4String& name = "EnergyLoss",
 87                        G4ProcessType type = fE     87                        G4ProcessType type = fElectromagnetic);
 88                                                    88 
 89   ~G4VEnergyLossProcess() override;                89   ~G4VEnergyLossProcess() override;
 90                                                    90 
 91   //------------------------------------------     91   //------------------------------------------------------------------------
 92   // Virtual methods to be implemented in conc     92   // Virtual methods to be implemented in concrete processes
 93   //------------------------------------------     93   //------------------------------------------------------------------------
 94                                                    94 
 95 protected:                                         95 protected:
 96                                                    96 
 97   // description of specific process parameter     97   // description of specific process parameters
 98   virtual void StreamProcessInfo(std::ostream&     98   virtual void StreamProcessInfo(std::ostream&) const {};
 99                                                    99 
100   virtual void InitialiseEnergyLossProcess(con    100   virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
101                                            con    101                                            const G4ParticleDefinition*) = 0;
102                                                   102 
103 public:                                           103 public:
104                                                   104 
105   // used as low energy limit LambdaTable         105   // used as low energy limit LambdaTable
106   virtual G4double MinPrimaryEnergy(const G4Pa    106   virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*,
107                                     const G4Ma    107                                     const G4Material*, G4double cut);
108                                                   108 
109   // print documentation in html format           109   // print documentation in html format
110   void ProcessDescription(std::ostream& outFil    110   void ProcessDescription(std::ostream& outFile) const override;
111                                                   111 
112   // prepare all tables                           112   // prepare all tables
113   void PreparePhysicsTable(const G4ParticleDef    113   void PreparePhysicsTable(const G4ParticleDefinition&) override;
114                                                   114 
115   // build all tables                             115   // build all tables
116   void BuildPhysicsTable(const G4ParticleDefin    116   void BuildPhysicsTable(const G4ParticleDefinition&) override;
117                                                   117 
118   // build a table                                118   // build a table
119   G4PhysicsTable* BuildDEDXTable(G4EmTableType    119   G4PhysicsTable* BuildDEDXTable(G4EmTableType tType = fRestricted);
120                                                   120 
121   // build a table                                121   // build a table
122   G4PhysicsTable* BuildLambdaTable(G4EmTableTy    122   G4PhysicsTable* BuildLambdaTable(G4EmTableType tType = fRestricted);
123                                                   123 
124   // Called before tracking of each new G4Trac    124   // Called before tracking of each new G4Track
125   void StartTracking(G4Track*) override;          125   void StartTracking(G4Track*) override;
126                                                   126 
127   // Step limit from AlongStep                    127   // Step limit from AlongStep 
128   G4double AlongStepGetPhysicalInteractionLeng    128   G4double AlongStepGetPhysicalInteractionLength(
129                                   const G4Trac    129                                   const G4Track&,
130                                   G4double  pr    130                                   G4double  previousStepSize,
131                                   G4double  cu    131                                   G4double  currentMinimumStep,
132                                   G4double& cu    132                                   G4double& currentSafety,
133                                   G4GPILSelect    133                                   G4GPILSelection* selection) override;
134                                                   134 
135   // Step limit from cross section                135   // Step limit from cross section
136   G4double PostStepGetPhysicalInteractionLengt    136   G4double PostStepGetPhysicalInteractionLength(
137                                   const G4Trac    137                                   const G4Track& track,
138                                   G4double pre    138                                   G4double previousStepSize,
139                                   G4ForceCondi    139                                   G4ForceCondition* condition) override;
140                                                   140 
141   // AlongStep computations                       141   // AlongStep computations
142   G4VParticleChange* AlongStepDoIt(const G4Tra    142   G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&) override;
143                                                   143 
144   // PostStep sampling of secondaries             144   // PostStep sampling of secondaries
145   G4VParticleChange* PostStepDoIt(const G4Trac    145   G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override;
146                                                   146 
147   // Store all PhysicsTable in files.             147   // Store all PhysicsTable in files.
148   // Return false in case of any fatal failure    148   // Return false in case of any fatal failure at I/O  
149   G4bool StorePhysicsTable(const G4ParticleDef    149   G4bool StorePhysicsTable(const G4ParticleDefinition*,
150                            const G4String& dir    150                            const G4String& directory,
151                            G4bool ascii = fals    151                            G4bool ascii = false) override;
152                                                   152 
153   // Retrieve all Physics from a files.           153   // Retrieve all Physics from a files.
154   // Return true if all the Physics Table are     154   // Return true if all the Physics Table are built.
155   // Return false if any fatal failure.           155   // Return false if any fatal failure. 
156   G4bool RetrievePhysicsTable(const G4Particle    156   G4bool RetrievePhysicsTable(const G4ParticleDefinition*,
157                               const G4String&     157                               const G4String& directory,
158                               G4bool ascii) ov    158                               G4bool ascii) override;
159                                                   159 
160 private:                                          160 private:
161                                                   161 
162   // summary printout after initialisation        162   // summary printout after initialisation
163   void StreamInfo(std::ostream& out, const G4P    163   void StreamInfo(std::ostream& out, const G4ParticleDefinition& part,
164                   G4bool rst=false) const;        164                   G4bool rst=false) const;
165                                                   165 
166   //------------------------------------------    166   //------------------------------------------------------------------------
167   // Public interface to cross section, mfp an    167   // Public interface to cross section, mfp and sampling of fluctuations
168   // These methods are not used in run time       168   // These methods are not used in run time
169   //------------------------------------------    169   //------------------------------------------------------------------------
170                                                   170 
171 public:                                           171 public:
172                                                   172 
173   // access to dispersion of restricted energy    173   // access to dispersion of restricted energy loss
174   G4double GetDEDXDispersion(const G4MaterialC    174   G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple,
175                              const G4DynamicPa    175                              const G4DynamicParticle* dp,
176                              G4double length);    176                              G4double length);
177                                                   177 
178   // Access to cross section table                178   // Access to cross section table
179   G4double CrossSectionPerVolume(G4double kine    179   G4double CrossSectionPerVolume(G4double kineticEnergy,
180                                  const G4Mater    180                                  const G4MaterialCutsCouple* couple);
181   G4double CrossSectionPerVolume(G4double kine    181   G4double CrossSectionPerVolume(G4double kineticEnergy,
182                                  const G4Mater    182                                  const G4MaterialCutsCouple* couple,
183                                  G4double logK    183                                  G4double logKineticEnergy);
184                                                   184 
185   // access to cross section                      185   // access to cross section
186   G4double MeanFreePath(const G4Track& track);    186   G4double MeanFreePath(const G4Track& track);
187                                                   187 
188   // access to step limit                         188   // access to step limit
189   G4double ContinuousStepLimit(const G4Track&     189   G4double ContinuousStepLimit(const G4Track& track,
190                                G4double previo    190                                G4double previousStepSize,
191                                G4double curren    191                                G4double currentMinimumStep,
192                                G4double& curre    192                                G4double& currentSafety);
193                                                   193 
194 protected:                                        194 protected:
195                                                   195 
196   // implementation of the pure virtual method    196   // implementation of the pure virtual method
197   G4double GetMeanFreePath(const G4Track& trac    197   G4double GetMeanFreePath(const G4Track& track,
198                            G4double previousSt    198                            G4double previousStepSize,
199                            G4ForceCondition* c    199                            G4ForceCondition* condition) override;
200                                                   200 
201   // implementation of the pure virtual method    201   // implementation of the pure virtual method
202   G4double GetContinuousStepLimit(const G4Trac    202   G4double GetContinuousStepLimit(const G4Track& track,
203                                   G4double pre    203                                   G4double previousStepSize,
204                                   G4double cur    204                                   G4double currentMinimumStep,
205                                   G4double& cu    205                                   G4double& currentSafety) override;
206                                                   206 
207   // creation of an empty vector for cross sec    207   // creation of an empty vector for cross sections for derived processes
208   G4PhysicsVector* LambdaPhysicsVector(const G    208   G4PhysicsVector* LambdaPhysicsVector(const G4MaterialCutsCouple*, 
209                                        G4doubl    209                                        G4double cut);
210                                                   210 
211   inline std::size_t CurrentMaterialCutsCouple    211   inline std::size_t CurrentMaterialCutsCoupleIndex() const;
212                                                   212 
213   //------------------------------------------    213   //------------------------------------------------------------------------
214   // Specific methods to set, access, modify m    214   // Specific methods to set, access, modify models
215   //------------------------------------------    215   //------------------------------------------------------------------------
216                                                   216 
217   // Select model in run time                     217   // Select model in run time
218   inline void SelectModel(G4double kinEnergy);    218   inline void SelectModel(G4double kinEnergy);
219                                                   219 
220 public:                                           220 public:
221   // Select model by energy and couple index      221   // Select model by energy and couple index
222   // Not for run time processing                  222   // Not for run time processing
223   inline G4VEmModel* SelectModelForMaterial(G4    223   inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy, 
224                                             st    224                                             std::size_t& idxCouple) const;
225                                                   225 
226   // Add EM model coupled with fluctuation mod    226   // Add EM model coupled with fluctuation model for region, smaller value 
227   // of order defines which pair of models wil    227   // of order defines which pair of models will be selected for a given 
228   // energy interval                              228   // energy interval  
229   void AddEmModel(G4int, G4VEmModel*,             229   void AddEmModel(G4int, G4VEmModel*, 
230                   G4VEmFluctuationModel* fluc     230                   G4VEmFluctuationModel* fluc = nullptr,
231                   const G4Region* region = nul    231                   const G4Region* region = nullptr);
232                                                   232 
233   // Assign a model to a process local list, t    233   // Assign a model to a process local list, to enable the list in run time 
234   // the derived process should execute AddEmM    234   // the derived process should execute AddEmModel(..) for all such models
235   void SetEmModel(G4VEmModel*, G4int index=0);    235   void SetEmModel(G4VEmModel*, G4int index=0);
236                                                   236 
237   // Access to models                             237   // Access to models
238   inline std::size_t NumberOfModels() const;      238   inline std::size_t NumberOfModels() const;
239                                                   239   
240   // Return a model from the local list           240   // Return a model from the local list
241   inline G4VEmModel* EmModel(std::size_t index    241   inline G4VEmModel* EmModel(std::size_t index=0) const;
242                                                   242   
243   // Access to models from G4EmModelManager li    243   // Access to models from G4EmModelManager list
244   inline G4VEmModel* GetModelByIndex(std::size    244   inline G4VEmModel* GetModelByIndex(std::size_t idx = 0, G4bool ver = false) const;
245                                                   245 
246   // Assign a fluctuation model to a process      246   // Assign a fluctuation model to a process
247   inline void SetFluctModel(G4VEmFluctuationMo    247   inline void SetFluctModel(G4VEmFluctuationModel*);
248                                                   248   
249   // Return the assigned fluctuation model        249   // Return the assigned fluctuation model
250   inline G4VEmFluctuationModel* FluctModel() c    250   inline G4VEmFluctuationModel* FluctModel() const;
251                                                   251     
252   //------------------------------------------    252   //------------------------------------------------------------------------
253   // Define and access particle type              253   // Define and access particle type 
254   //------------------------------------------    254   //------------------------------------------------------------------------
255                                                   255 
256 protected:                                        256 protected:
257   inline void SetParticle(const G4ParticleDefi    257   inline void SetParticle(const G4ParticleDefinition* p);
258   inline void SetSecondaryParticle(const G4Par    258   inline void SetSecondaryParticle(const G4ParticleDefinition* p);
259                                                   259 
260 public:                                           260 public:
261   inline void SetBaseParticle(const G4Particle    261   inline void SetBaseParticle(const G4ParticleDefinition* p);
262   inline const G4ParticleDefinition* Particle(    262   inline const G4ParticleDefinition* Particle() const;
263   inline const G4ParticleDefinition* BaseParti    263   inline const G4ParticleDefinition* BaseParticle() const;
264   inline const G4ParticleDefinition* Secondary    264   inline const G4ParticleDefinition* SecondaryParticle() const;
265                                                   265 
266   // hide  assignment operator                    266   // hide  assignment operator
267   G4VEnergyLossProcess(G4VEnergyLossProcess &)    267   G4VEnergyLossProcess(G4VEnergyLossProcess &) = delete;
268   G4VEnergyLossProcess & operator=(const G4VEn    268   G4VEnergyLossProcess & operator=(const G4VEnergyLossProcess &right) = delete;
269                                                   269 
270   //------------------------------------------    270   //------------------------------------------------------------------------
271   // Get/set parameters to configure the proce    271   // Get/set parameters to configure the process at initialisation time
272   //------------------------------------------    272   //------------------------------------------------------------------------
273                                                   273 
274   // Add subcut processor for the region          274   // Add subcut processor for the region
275   void ActivateSubCutoff(const G4Region* regio    275   void ActivateSubCutoff(const G4Region* region);
276                                                   276 
277   // Activate biasing                             277   // Activate biasing
278   void SetCrossSectionBiasingFactor(G4double f    278   void SetCrossSectionBiasingFactor(G4double f, G4bool flag = true);
279                                                   279 
280   void ActivateForcedInteraction(G4double leng    280   void ActivateForcedInteraction(G4double length, 
281                                  const G4Strin    281                                  const G4String& region,
282                                  G4bool flag =    282                                  G4bool flag = true);
283                                                   283 
284   void ActivateSecondaryBiasing(const G4String    284   void ActivateSecondaryBiasing(const G4String& region, G4double factor,
285                                 G4double energ    285                                 G4double energyLimit);
286                                                   286 
287   inline void SetLossFluctuations(G4bool val);    287   inline void SetLossFluctuations(G4bool val);
288                                                   288 
289   inline void SetSpline(G4bool val);              289   inline void SetSpline(G4bool val);
290   inline void SetCrossSectionType(G4CrossSecti    290   inline void SetCrossSectionType(G4CrossSectionType val);
291   inline G4CrossSectionType CrossSectionType()    291   inline G4CrossSectionType CrossSectionType() const;
292                                                   292 
293   // Set/Get flag "isIonisation"                  293   // Set/Get flag "isIonisation"
294   void SetIonisation(G4bool val);                 294   void SetIonisation(G4bool val);
295   inline G4bool IsIonisationProcess() const;      295   inline G4bool IsIonisationProcess() const;
296                                                   296 
297   // Redefine parameteters for stepping contro    297   // Redefine parameteters for stepping control
298   void SetLinearLossLimit(G4double val);          298   void SetLinearLossLimit(G4double val);
299   void SetStepFunction(G4double v1, G4double v    299   void SetStepFunction(G4double v1, G4double v2);
300   void SetLowestEnergyLimit(G4double);            300   void SetLowestEnergyLimit(G4double);
301                                                   301 
302   inline G4int NumberOfSubCutoffRegions() cons    302   inline G4int NumberOfSubCutoffRegions() const;
303                                                   303 
304   //------------------------------------------    304   //------------------------------------------------------------------------
305   // Specific methods to path Physics Tables t    305   // Specific methods to path Physics Tables to the process
306   //------------------------------------------    306   //------------------------------------------------------------------------
307                                                   307 
308   void SetDEDXTable(G4PhysicsTable* p, G4EmTab    308   void SetDEDXTable(G4PhysicsTable* p, G4EmTableType tType);
309   void SetCSDARangeTable(G4PhysicsTable* pRang    309   void SetCSDARangeTable(G4PhysicsTable* pRange);
310   void SetRangeTableForLoss(G4PhysicsTable* p)    310   void SetRangeTableForLoss(G4PhysicsTable* p);
311   void SetInverseRangeTable(G4PhysicsTable* p)    311   void SetInverseRangeTable(G4PhysicsTable* p);
312   void SetLambdaTable(G4PhysicsTable* p);         312   void SetLambdaTable(G4PhysicsTable* p);
313                                                   313 
314   void SetTwoPeaksXS(std::vector<G4TwoPeaksXS*    314   void SetTwoPeaksXS(std::vector<G4TwoPeaksXS*>*);
315   void SetEnergyOfCrossSectionMax(std::vector<    315   void SetEnergyOfCrossSectionMax(std::vector<G4double>*);
316                                                   316 
317   //------------------------------------------    317   //------------------------------------------------------------------------
318   // Specific methods to define custom Physics    318   // Specific methods to define custom Physics Tables to the process
319   //------------------------------------------    319   //------------------------------------------------------------------------
320                                                   320 
321   // Binning for dEdx, range, inverse range an    321   // Binning for dEdx, range, inverse range and lambda tables
322   void SetDEDXBinning(G4int nbins);               322   void SetDEDXBinning(G4int nbins);
323                                                   323 
324   // Min kinetic energy for tables                324   // Min kinetic energy for tables
325   void SetMinKinEnergy(G4double e);               325   void SetMinKinEnergy(G4double e);
326   inline G4double MinKinEnergy() const;           326   inline G4double MinKinEnergy() const;
327                                                   327 
328   // Max kinetic energy for tables                328   // Max kinetic energy for tables
329   void SetMaxKinEnergy(G4double e);               329   void SetMaxKinEnergy(G4double e);
330   inline G4double MaxKinEnergy() const;           330   inline G4double MaxKinEnergy() const;
331                                                   331 
332   // Biasing parameters                           332   // Biasing parameters
333   inline G4double CrossSectionBiasingFactor()     333   inline G4double CrossSectionBiasingFactor() const;
334                                                   334 
335   // Return values for given G4MaterialCutsCou    335   // Return values for given G4MaterialCutsCouple
336   inline G4double GetDEDX(G4double kineticEner    336   inline G4double GetDEDX(G4double kineticEnergy, const G4MaterialCutsCouple*);
337   inline G4double GetCSDADEDX(G4double kinetic    337   inline G4double GetCSDADEDX(G4double kineticEnergy, 
338                               const G4Material    338                               const G4MaterialCutsCouple*);
339   inline G4double GetDEDX(G4double kineticEner    339   inline G4double GetDEDX(G4double kineticEnergy, const G4MaterialCutsCouple*,
340                           G4double logKineticE    340                           G4double logKineticEnergy);
341   inline G4double GetRange(G4double kineticEne    341   inline G4double GetRange(G4double kineticEnergy, const G4MaterialCutsCouple*);
342   inline G4double GetRange(G4double kineticEne    342   inline G4double GetRange(G4double kineticEnergy, const G4MaterialCutsCouple*,
343                            G4double logKinetic    343                            G4double logKineticEnergy);
344   inline G4double GetCSDARange(G4double kineti    344   inline G4double GetCSDARange(G4double kineticEnergy, 
345                                const G4Materia    345                                const G4MaterialCutsCouple*);
346   inline G4double GetKineticEnergy(G4double ra    346   inline G4double GetKineticEnergy(G4double range, 
347                                    const G4Mat    347                                    const G4MaterialCutsCouple*);
348   inline G4double GetLambda(G4double kineticEn    348   inline G4double GetLambda(G4double kineticEnergy,const G4MaterialCutsCouple*);
349   inline G4double GetLambda(G4double kineticEn    349   inline G4double GetLambda(G4double kineticEnergy,const G4MaterialCutsCouple*,
350                             G4double logKineti    350                             G4double logKineticEnergy);
351                                                   351 
352   inline G4bool TablesAreBuilt() const;           352   inline G4bool TablesAreBuilt() const;
353                                                   353 
354   // Access to specific tables                    354   // Access to specific tables
355   inline G4PhysicsTable* DEDXTable() const;       355   inline G4PhysicsTable* DEDXTable() const;
356   inline G4PhysicsTable* DEDXunRestrictedTable    356   inline G4PhysicsTable* DEDXunRestrictedTable() const;
357   inline G4PhysicsTable* IonisationTable() con    357   inline G4PhysicsTable* IonisationTable() const;
358   inline G4PhysicsTable* CSDARangeTable() cons    358   inline G4PhysicsTable* CSDARangeTable() const;
359   inline G4PhysicsTable* RangeTableForLoss() c    359   inline G4PhysicsTable* RangeTableForLoss() const;
360   inline G4PhysicsTable* InverseRangeTable() c    360   inline G4PhysicsTable* InverseRangeTable() const;
361   inline G4PhysicsTable* LambdaTable() const;     361   inline G4PhysicsTable* LambdaTable() const;
362   inline std::vector<G4TwoPeaksXS*>* TwoPeaksX    362   inline std::vector<G4TwoPeaksXS*>* TwoPeaksXS() const;
363   inline std::vector<G4double>* EnergyOfCrossS    363   inline std::vector<G4double>* EnergyOfCrossSectionMax() const;
364                                                   364 
365   inline G4bool UseBaseMaterial() const;          365   inline G4bool UseBaseMaterial() const;
366                                                   366 
367   //------------------------------------------    367   //------------------------------------------------------------------------
368   // Run time method for simulation of ionisat    368   // Run time method for simulation of ionisation
369   //------------------------------------------    369   //------------------------------------------------------------------------
370                                                   370 
371   // access atom on which interaction happens     371   // access atom on which interaction happens
372   const G4Element* GetCurrentElement() const;     372   const G4Element* GetCurrentElement() const;
373                                                   373 
374   // Set scaling parameters for ions is needed    374   // Set scaling parameters for ions is needed to G4EmCalculator
375   void SetDynamicMassCharge(G4double massratio    375   void SetDynamicMassCharge(G4double massratio, G4double charge2ratio);
376                                                   376 
377 private:                                          377 private:
378                                                   378 
379   void FillSecondariesAlongStep(G4double weigh    379   void FillSecondariesAlongStep(G4double weight);
380                                                   380 
381   void PrintWarning(const G4String&, G4double     381   void PrintWarning(const G4String&, G4double val) const;
382                                                   382 
383   // define material and indexes                  383   // define material and indexes
384   inline void DefineMaterial(const G4MaterialC    384   inline void DefineMaterial(const G4MaterialCutsCouple* couple);
385                                                   385 
386   //------------------------------------------    386   //------------------------------------------------------------------------
387   // Compute values using scaling relation, ma    387   // Compute values using scaling relation, mass and charge of based particle
388   //------------------------------------------    388   //------------------------------------------------------------------------
389   inline G4double GetDEDXForScaledEnergy(G4dou    389   inline G4double GetDEDXForScaledEnergy(G4double scaledKinE);
390   inline G4double GetDEDXForScaledEnergy(G4dou    390   inline G4double GetDEDXForScaledEnergy(G4double scaledKinE,
391                                          G4dou    391                                          G4double logScaledKinE);
392   inline G4double GetIonisationForScaledEnergy    392   inline G4double GetIonisationForScaledEnergy(G4double scaledKinE);
393   inline G4double GetScaledRangeForScaledEnerg    393   inline G4double GetScaledRangeForScaledEnergy(G4double scaledKinE);
394   inline G4double GetScaledRangeForScaledEnerg    394   inline G4double GetScaledRangeForScaledEnergy(G4double scaledKinE,
395                                                   395                                                 G4double logScaledKinE);
396                                                   396 
397   inline G4double GetLimitScaledRangeForScaled    397   inline G4double GetLimitScaledRangeForScaledEnergy(G4double scaledKinE);
398   inline G4double GetLimitScaledRangeForScaled    398   inline G4double GetLimitScaledRangeForScaledEnergy(G4double scaledKinE,
399                                                   399                                                      G4double logScaledKinE);
400                                                   400 
401   inline G4double ScaledKinEnergyForLoss(G4dou    401   inline G4double ScaledKinEnergyForLoss(G4double range);
402   inline G4double GetLambdaForScaledEnergy(G4d    402   inline G4double GetLambdaForScaledEnergy(G4double scaledKinE);
403   inline G4double GetLambdaForScaledEnergy(G4d    403   inline G4double GetLambdaForScaledEnergy(G4double scaledKinE, 
404                                            G4d    404                                            G4double logScaledKinE);
405                                                   405 
406   inline G4double LogScaledEkin(const G4Track& << 
407                                                << 
408   void ComputeLambdaForScaledEnergy(G4double s    406   void ComputeLambdaForScaledEnergy(G4double scaledKinE,
409                                     const G4Tr << 407                                     G4double logScaledKinE);
410                                                   408 
411   G4bool IsRegionForCubcutProcessor(const G4Tr    409   G4bool IsRegionForCubcutProcessor(const G4Track& aTrack);
412                                                   410 
413 protected:                                        411 protected:
414                                                   412 
415   G4ParticleChangeForLoss     fParticleChange;    413   G4ParticleChangeForLoss     fParticleChange;
416   const G4Material*           currentMaterial     414   const G4Material*           currentMaterial = nullptr;
417   const G4MaterialCutsCouple* currentCouple =     415   const G4MaterialCutsCouple* currentCouple = nullptr;
418                                                   416 
419 private:                                          417 private:
420                                                   418 
421   G4LossTableManager*         lManager;           419   G4LossTableManager*         lManager;
422   G4EmModelManager*           modelManager;       420   G4EmModelManager*           modelManager;
423   G4VEmModel*                 currentModel = n    421   G4VEmModel*                 currentModel = nullptr;
424   G4EmBiasingManager*         biasManager = nu    422   G4EmBiasingManager*         biasManager = nullptr;
425   G4SafetyHelper*             safetyHelper;       423   G4SafetyHelper*             safetyHelper;
426   G4EmParameters*             theParameters;      424   G4EmParameters*             theParameters;  
427   G4VEmFluctuationModel*      fluctModel = nul    425   G4VEmFluctuationModel*      fluctModel = nullptr;
428   G4VAtomDeexcitation*        atomDeexcitation    426   G4VAtomDeexcitation*        atomDeexcitation = nullptr;
429   G4VSubCutProducer*          subcutProducer =    427   G4VSubCutProducer*          subcutProducer = nullptr;
430                                                   428 
431   const G4ParticleDefinition* particle = nullp    429   const G4ParticleDefinition* particle = nullptr;
432   const G4ParticleDefinition* baseParticle = n    430   const G4ParticleDefinition* baseParticle = nullptr;
433   const G4ParticleDefinition* secondaryParticl    431   const G4ParticleDefinition* secondaryParticle = nullptr;
434   G4EmDataHandler* theData = nullptr;             432   G4EmDataHandler* theData = nullptr;
435                                                   433 
436   G4PhysicsTable* theDEDXTable = nullptr;         434   G4PhysicsTable* theDEDXTable = nullptr;
437   G4PhysicsTable* theDEDXunRestrictedTable = n    435   G4PhysicsTable* theDEDXunRestrictedTable = nullptr;
438   G4PhysicsTable* theIonisationTable = nullptr    436   G4PhysicsTable* theIonisationTable = nullptr;
439   G4PhysicsTable* theRangeTableForLoss = nullp    437   G4PhysicsTable* theRangeTableForLoss = nullptr;
440   G4PhysicsTable* theCSDARangeTable = nullptr;    438   G4PhysicsTable* theCSDARangeTable = nullptr;
441   G4PhysicsTable* theInverseRangeTable = nullp    439   G4PhysicsTable* theInverseRangeTable = nullptr;
442   G4PhysicsTable* theLambdaTable = nullptr;       440   G4PhysicsTable* theLambdaTable = nullptr;
443                                                   441 
444   std::vector<const G4Region*>* scoffRegions =    442   std::vector<const G4Region*>* scoffRegions = nullptr;
445   std::vector<G4VEmModel*>*     emModels = nul    443   std::vector<G4VEmModel*>*     emModels = nullptr;
446   const std::vector<G4int>*     theDensityIdx     444   const std::vector<G4int>*     theDensityIdx = nullptr;
447   const std::vector<G4double>*  theDensityFact    445   const std::vector<G4double>*  theDensityFactor = nullptr;
448   const G4DataVector*           theCuts = null    446   const G4DataVector*           theCuts = nullptr;
449                                                   447 
450   std::vector<G4double>* theEnergyOfCrossSecti    448   std::vector<G4double>* theEnergyOfCrossSectionMax = nullptr;
451   std::vector<G4TwoPeaksXS*>* fXSpeaks = nullp    449   std::vector<G4TwoPeaksXS*>* fXSpeaks = nullptr;
452                                                   450 
453   G4double lowestKinEnergy;                       451   G4double lowestKinEnergy;
454   G4double minKinEnergy;                          452   G4double minKinEnergy;
455   G4double maxKinEnergy;                          453   G4double maxKinEnergy;
456   G4double maxKinEnergyCSDA;                      454   G4double maxKinEnergyCSDA;
457                                                   455 
458   G4double linLossLimit = 0.01;                   456   G4double linLossLimit = 0.01;
459   G4double dRoverRange = 0.2;                     457   G4double dRoverRange = 0.2;
460   G4double finalRange;                            458   G4double finalRange;
461   G4double lambdaFactor = 0.8;                    459   G4double lambdaFactor = 0.8;
462   G4double invLambdaFactor;                       460   G4double invLambdaFactor;
463   G4double biasFactor = 1.0;                      461   G4double biasFactor = 1.0;
464                                                   462 
465   G4double massRatio = 1.0;                       463   G4double massRatio = 1.0;
466   G4double logMassRatio = 0.0;                    464   G4double logMassRatio = 0.0;
467   G4double fFactor = 1.0;                         465   G4double fFactor = 1.0;
468   G4double reduceFactor = 1.0;                    466   G4double reduceFactor = 1.0;
469   G4double chargeSqRatio = 1.0;                   467   G4double chargeSqRatio = 1.0;
470   G4double fRange = 0.0;                          468   G4double fRange = 0.0;
471   G4double fRangeEnergy = 0.0;                    469   G4double fRangeEnergy = 0.0;
472                                                   470 
473 protected:                                        471 protected:
474                                                   472 
475   G4double preStepLambda = 0.0;                   473   G4double preStepLambda = 0.0;
476   G4double preStepKinEnergy = 0.0;                474   G4double preStepKinEnergy = 0.0;
                                                   >> 475   G4double preStepLogKinEnergy = LOG_EKIN_MIN;
477   G4double preStepScaledEnergy = 0.0;             476   G4double preStepScaledEnergy = 0.0;
                                                   >> 477   G4double preStepLogScaledEnergy = LOG_EKIN_MIN;
478   G4double mfpKinEnergy = 0.0;                    478   G4double mfpKinEnergy = 0.0;
479                                                   479 
480   std::size_t currentCoupleIndex = 0;             480   std::size_t currentCoupleIndex = 0;
481                                                   481 
482 private:                                          482 private:
483                                                   483 
484   G4int nBins;                                    484   G4int nBins;
485   G4int nBinsCSDA;                                485   G4int nBinsCSDA;
486   G4int numberOfModels = 0;                       486   G4int numberOfModels = 0;
487   G4int nSCoffRegions = 0;                        487   G4int nSCoffRegions = 0;
488   G4int secID = _DeltaElectron;                   488   G4int secID = _DeltaElectron;
489   G4int tripletID = _TripletElectron;             489   G4int tripletID = _TripletElectron;
490   G4int biasID = _DeltaEBelowCut;                 490   G4int biasID = _DeltaEBelowCut;
491   G4int epixeID = _ePIXE;                      << 
492   G4int gpixeID = _GammaPIXE;                  << 
493   G4int mainSecondaries = 1;                      491   G4int mainSecondaries = 1;
494                                                   492 
495   std::size_t basedCoupleIndex = 0;               493   std::size_t basedCoupleIndex = 0;
496   std::size_t coupleIdxRange = 0;                 494   std::size_t coupleIdxRange = 0;
497   std::size_t idxDEDX = 0;                        495   std::size_t idxDEDX = 0;
498   std::size_t idxDEDXunRestricted = 0;            496   std::size_t idxDEDXunRestricted = 0;
499   std::size_t idxIonisation = 0;                  497   std::size_t idxIonisation = 0;
500   std::size_t idxRange = 0;                       498   std::size_t idxRange = 0;
501   std::size_t idxCSDA = 0;                        499   std::size_t idxCSDA = 0;
502   std::size_t idxSecRange = 0;                    500   std::size_t idxSecRange = 0;
503   std::size_t idxInverseRange = 0;                501   std::size_t idxInverseRange = 0;
504   std::size_t idxLambda = 0;                      502   std::size_t idxLambda = 0;
505                                                   503 
506   G4GPILSelection aGPILSelection;                 504   G4GPILSelection aGPILSelection;
507   G4CrossSectionType fXSType = fEmOnePeak;        505   G4CrossSectionType fXSType = fEmOnePeak;
508                                                   506 
509   G4bool lossFluctuationFlag = true;              507   G4bool lossFluctuationFlag = true;
510   G4bool useCutAsFinalRange = false;           << 508   G4bool rndmStepFlag = false;
511   G4bool tablesAreBuilt = false;                  509   G4bool tablesAreBuilt = false;
512   G4bool spline = true;                           510   G4bool spline = true;
513   G4bool isIon = false;                           511   G4bool isIon = false;
514   G4bool isIonisation = false;                 << 512   G4bool isIonisation = true;
515   G4bool useDeexcitation = false;                 513   G4bool useDeexcitation = false;
516   G4bool biasFlag = false;                        514   G4bool biasFlag = false;
517   G4bool weightFlag = false;                      515   G4bool weightFlag = false;
518   G4bool isMaster = false;                     << 516   G4bool isMaster = true;
519   G4bool baseMat = false;                         517   G4bool baseMat = false;
520   G4bool actLinLossLimit = false;                 518   G4bool actLinLossLimit = false;
521   G4bool actLossFluc = false;                     519   G4bool actLossFluc = false;
522   G4bool actBinning = false;                      520   G4bool actBinning = false;
523   G4bool actMinKinEnergy = false;                 521   G4bool actMinKinEnergy = false;
524   G4bool actMaxKinEnergy = false;                 522   G4bool actMaxKinEnergy = false;
525                                                   523 
526   std::vector<G4DynamicParticle*> secParticles    524   std::vector<G4DynamicParticle*> secParticles;
527   std::vector<G4Track*> scTracks;                 525   std::vector<G4Track*> scTracks;
528 };                                                526 };
529                                                   527 
530 // ======== Run time inline methods ==========    528 // ======== Run time inline methods ================
531                                                   529 
532 inline std::size_t G4VEnergyLossProcess::Curre    530 inline std::size_t G4VEnergyLossProcess::CurrentMaterialCutsCoupleIndex() const 
533 {                                                 531 {
534   return currentCoupleIndex;                      532   return currentCoupleIndex;
535 }                                                 533 }
536                                                   534 
537 //....oooOO0OOooo........oooOO0OOooo........oo    535 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
538                                                   536 
539 inline void G4VEnergyLossProcess::SelectModel(    537 inline void G4VEnergyLossProcess::SelectModel(G4double kinEnergy)
540 {                                                 538 {
541   currentModel = modelManager->SelectModel(kin    539   currentModel = modelManager->SelectModel(kinEnergy, currentCoupleIndex);
542   currentModel->SetCurrentCouple(currentCouple    540   currentModel->SetCurrentCouple(currentCouple);
543 }                                                 541 }
544                                                   542 
545 //....oooOO0OOooo........oooOO0OOooo........oo    543 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
546                                                   544 
547 inline G4VEmModel* G4VEnergyLossProcess::Selec    545 inline G4VEmModel* G4VEnergyLossProcess::SelectModelForMaterial(
548                    G4double kinEnergy, std::si    546                    G4double kinEnergy, std::size_t& idx) const
549 {                                                 547 {
550   return modelManager->SelectModel(kinEnergy,     548   return modelManager->SelectModel(kinEnergy, idx);
551 }                                                 549 }
552                                                   550 
553 //....oooOO0OOooo........oooOO0OOooo........oo    551 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
554                                                   552 
555 inline void                                       553 inline void 
556 G4VEnergyLossProcess::DefineMaterial(const G4M    554 G4VEnergyLossProcess::DefineMaterial(const G4MaterialCutsCouple* couple)
557 {                                                 555 {
558   if(couple != currentCouple) {                   556   if(couple != currentCouple) {
559     currentCouple = couple;                       557     currentCouple = couple;
560     currentMaterial = couple->GetMaterial();      558     currentMaterial = couple->GetMaterial();
561     basedCoupleIndex = currentCoupleIndex = co    559     basedCoupleIndex = currentCoupleIndex = couple->GetIndex();
562     fFactor = chargeSqRatio*biasFactor;           560     fFactor = chargeSqRatio*biasFactor;
563     mfpKinEnergy = DBL_MAX;                       561     mfpKinEnergy = DBL_MAX;
564     idxLambda = 0;                                562     idxLambda = 0;
565     if(baseMat) {                                 563     if(baseMat) {
566       basedCoupleIndex = (*theDensityIdx)[curr    564       basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
567       fFactor *= (*theDensityFactor)[currentCo    565       fFactor *= (*theDensityFactor)[currentCoupleIndex];
568     }                                             566     }
569     reduceFactor = 1.0/(fFactor*massRatio);       567     reduceFactor = 1.0/(fFactor*massRatio);
570   }                                               568   }
571 }                                                 569 }
572                                                   570 
573 //....oooOO0OOooo........oooOO0OOooo........oo    571 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
574                                                   572 
575 inline G4double G4VEnergyLossProcess::GetDEDXF    573 inline G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e)
576 {                                                 574 {
577   /*                                              575   /*
578   G4cout << "G4VEnergyLossProcess::GetDEDX: Id    576   G4cout << "G4VEnergyLossProcess::GetDEDX: Idx= " 
579            << basedCoupleIndex << " E(MeV)= "     577            << basedCoupleIndex << " E(MeV)= " << e 
580          << " Emin= " << minKinEnergy << "  Fa    578          << " Emin= " << minKinEnergy << "  Factor= " << fFactor 
581          << "  " << theDEDXTable << G4endl; */    579          << "  " << theDEDXTable << G4endl; */
582   G4double x = fFactor*(*theDEDXTable)[basedCo    580   G4double x = fFactor*(*theDEDXTable)[basedCoupleIndex]->Value(e, idxDEDX);
583   if(e < minKinEnergy) { x *= std::sqrt(e/minK    581   if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
584   return x;                                       582   return x;
585 }                                                 583 }
586                                                   584 
587 //....oooOO0OOooo........oooOO0OOooo........oo << 
588                                                << 
589 inline                                            585 inline
590 G4double G4VEnergyLossProcess::GetDEDXForScale    586 G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e, G4double loge)
591 {                                                 587 {
592   /*                                              588   /*
593   G4cout << "G4VEnergyLossProcess::GetDEDX: Id    589   G4cout << "G4VEnergyLossProcess::GetDEDX: Idx= " 
594            << basedCoupleIndex << " E(MeV)= "     590            << basedCoupleIndex << " E(MeV)= " << e 
595          << " Emin= " << minKinEnergy << "  Fa    591          << " Emin= " << minKinEnergy << "  Factor= " << fFactor 
596          << "  " << theDEDXTable << G4endl; */    592          << "  " << theDEDXTable << G4endl; */
597   G4double x = fFactor*(*theDEDXTable)[basedCo    593   G4double x = fFactor*(*theDEDXTable)[basedCoupleIndex]->LogVectorValue(e,loge);
598   if(e < minKinEnergy) { x *= std::sqrt(e/minK    594   if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
599   return x;                                       595   return x;
600 }                                                 596 }
601                                                   597 
602 //....oooOO0OOooo........oooOO0OOooo........oo    598 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
603                                                   599 
604 inline G4double G4VEnergyLossProcess::GetIonis    600 inline G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy(G4double e)
605 {                                                 601 {
606   G4double x =                                    602   G4double x = 
607     fFactor*(*theIonisationTable)[basedCoupleI    603     fFactor*(*theIonisationTable)[basedCoupleIndex]->Value(e, idxIonisation);
608   if(e < minKinEnergy) { x *= std::sqrt(e/minK    604   if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
609   return x;                                       605   return x;
610 }                                                 606 }
611                                                   607 
612 //....oooOO0OOooo........oooOO0OOooo........oo    608 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
613                                                   609 
614 inline G4double G4VEnergyLossProcess::GetScale    610 inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e)
615 {                                                 611 {
616   //G4cout << "G4VEnergyLossProcess::GetScaled    612   //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " 
617   //         << basedCoupleIndex << " E(MeV)=     613   //         << basedCoupleIndex << " E(MeV)= " << e 
618   //         << " lastIdx= " << lastIdx << "      614   //         << " lastIdx= " << lastIdx << "  " << theRangeTableForLoss << G4endl; 
619   if(currentCoupleIndex != coupleIdxRange || f    615   if(currentCoupleIndex != coupleIdxRange || fRangeEnergy != e) {
620     coupleIdxRange = currentCoupleIndex;          616     coupleIdxRange = currentCoupleIndex;
621     fRangeEnergy = e;                             617     fRangeEnergy = e;
622     fRange = reduceFactor*((*theRangeTableForL    618     fRange = reduceFactor*((*theRangeTableForLoss)[basedCoupleIndex])->Value(e, idxRange);
623     if (fRange < 0.0) { fRange = 0.0; }        << 619     if(e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); }
624     else if (e < minKinEnergy) { fRange *= std << 
625   }                                               620   }
626   //G4cout << "G4VEnergyLossProcess::GetScaled    621   //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " 
627   //         << basedCoupleIndex << " E(MeV)=     622   //         << basedCoupleIndex << " E(MeV)= " << e 
628   //         << " R=  " << computedRange << "     623   //         << " R=  " << computedRange << "  " << theRangeTableForLoss << G4endl;
629   return fRange;                                  624   return fRange;
630 }                                                 625 }
631                                                   626 
632 inline G4double                                   627 inline G4double
633 G4VEnergyLossProcess::GetScaledRangeForScaledE    628 G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e, G4double loge)
634 {                                                 629 {
635   //G4cout << "G4VEnergyLossProcess::GetScaled    630   //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " 
636   //         << basedCoupleIndex << " E(MeV)=     631   //         << basedCoupleIndex << " E(MeV)= " << e 
637   //         << " lastIdx= " << lastIdx << "      632   //         << " lastIdx= " << lastIdx << "  " << theRangeTableForLoss << G4endl; 
638   if(currentCoupleIndex != coupleIdxRange || f    633   if(currentCoupleIndex != coupleIdxRange || fRangeEnergy != e) {
639     coupleIdxRange = currentCoupleIndex;          634     coupleIdxRange = currentCoupleIndex;
640     fRangeEnergy = e;                             635     fRangeEnergy = e;
641     fRange = reduceFactor*((*theRangeTableForL    636     fRange = reduceFactor*((*theRangeTableForLoss)[basedCoupleIndex])->LogVectorValue(e, loge);
642     if (fRange < 0.0) { fRange = 0.0; }        << 637     if(e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); }
643     else if (e < minKinEnergy) { fRange *= std << 
644   }                                               638   }
645   //G4cout << "G4VEnergyLossProcess::GetScaled    639   //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " 
646   //         << basedCoupleIndex << " E(MeV)=     640   //         << basedCoupleIndex << " E(MeV)= " << e 
647   //         << " R=  " << fRange << "  " << t    641   //         << " R=  " << fRange << "  " << theRangeTableForLoss << G4endl;
648   return fRange;                                  642   return fRange;
649 }                                                 643 }
650                                                   644 
651 //....oooOO0OOooo........oooOO0OOooo........oo    645 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
652                                                   646 
653 inline G4double                                   647 inline G4double 
654 G4VEnergyLossProcess::GetLimitScaledRangeForSc    648 G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e)
655 {                                                 649 {
656   G4double x = ((*theCSDARangeTable)[basedCoup    650   G4double x = ((*theCSDARangeTable)[basedCoupleIndex])->Value(e, idxCSDA);
657   if (x < 0.0) { x = 0.0; }                    << 651   if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
658   else if (e < minKinEnergy) { x *= std::sqrt( << 
659   return x;                                       652   return x;
660 }                                                 653 }
661                                                   654 
662 //....oooOO0OOooo........oooOO0OOooo........oo    655 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
663                                                   656 
664 inline G4double                                   657 inline G4double 
665 G4VEnergyLossProcess::GetLimitScaledRangeForSc    658 G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e,
666                                                   659                                                          G4double loge)
667 {                                                 660 {
668   G4double x = ((*theCSDARangeTable)[basedCoup    661   G4double x = ((*theCSDARangeTable)[basedCoupleIndex])->LogVectorValue(e, loge);
669   if (x < 0.0) { x = 0.0; }                    << 662   if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
670   else if (e < minKinEnergy) { x *= std::sqrt( << 
671   return x;                                       663   return x;
672 }                                                 664 }
673                                                   665 
674 //....oooOO0OOooo........oooOO0OOooo........oo    666 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
675                                                   667 
676 inline G4double G4VEnergyLossProcess::ScaledKi    668 inline G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss(G4double r)
677 {                                                 669 {
678   //G4cout << "G4VEnergyLossProcess::GetEnergy    670   //G4cout << "G4VEnergyLossProcess::GetEnergy: Idx= " 
679   //         << basedCoupleIndex << " R(mm)= "    671   //         << basedCoupleIndex << " R(mm)= " << r << "  " 
680   //         << theInverseRangeTable << G4endl    672   //         << theInverseRangeTable << G4endl; 
681   G4PhysicsVector* v = (*theInverseRangeTable)    673   G4PhysicsVector* v = (*theInverseRangeTable)[basedCoupleIndex];
682   G4double rmin = v->Energy(0);                   674   G4double rmin = v->Energy(0);
683   G4double e = 0.0;                               675   G4double e = 0.0; 
684   if(r >= rmin) { e = v->Value(r, idxInverseRa    676   if(r >= rmin) { e = v->Value(r, idxInverseRange); }
685   else if(r > 0.0) {                              677   else if(r > 0.0) {
686     G4double x = r/rmin;                          678     G4double x = r/rmin;
687     e = minKinEnergy*x*x;                         679     e = minKinEnergy*x*x;
688   }                                               680   }
689   return e;                                       681   return e;
690 }                                                 682 }
691                                                   683 
692 //....oooOO0OOooo........oooOO0OOooo........oo    684 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
693                                                   685 
694 inline G4double G4VEnergyLossProcess::GetLambd    686 inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e)
695 {                                                 687 {
696   return fFactor*((*theLambdaTable)[basedCoupl    688   return fFactor*((*theLambdaTable)[basedCoupleIndex])->Value(e, idxLambda);
697 }                                                 689 }
698                                                   690 
699 //....oooOO0OOooo........oooOO0OOooo........oo    691 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
700                                                   692 
701 inline G4double                                   693 inline G4double
702 G4VEnergyLossProcess::GetLambdaForScaledEnergy    694 G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e, G4double loge)
703 {                                                 695 {
704   return fFactor*((*theLambdaTable)[basedCoupl    696   return fFactor*((*theLambdaTable)[basedCoupleIndex])->LogVectorValue(e, loge);
705 }                                              << 
706                                                << 
707 //....oooOO0OOooo........oooOO0OOooo........oo << 
708                                                << 
709 inline G4double G4VEnergyLossProcess::LogScale << 
710 {                                              << 
711   return track.GetDynamicParticle()->GetLogKin << 
712 }                                                 697 }
713                                                   698 
714 //....oooOO0OOooo........oooOO0OOooo........oo    699 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
715                                                   700 
716 inline G4double                                   701 inline G4double 
717 G4VEnergyLossProcess::GetDEDX(G4double kinEner    702 G4VEnergyLossProcess::GetDEDX(G4double kinEnergy,
718                               const G4Material    703                               const G4MaterialCutsCouple* couple)
719 {                                                 704 {
720   DefineMaterial(couple);                         705   DefineMaterial(couple);
721   return GetDEDXForScaledEnergy(kinEnergy*mass    706   return GetDEDXForScaledEnergy(kinEnergy*massRatio);
722 }                                                 707 }
723                                                   708 
724 //....oooOO0OOooo........oooOO0OOooo........oo    709 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
725                                                   710 
726 inline G4double                                   711 inline G4double 
727 G4VEnergyLossProcess::GetDEDX(G4double kinEner    712 G4VEnergyLossProcess::GetDEDX(G4double kinEnergy,
728                               const G4Material    713                               const G4MaterialCutsCouple* couple,
729                               G4double logKinE    714                               G4double logKinEnergy)
730 {                                                 715 {
731   DefineMaterial(couple);                         716   DefineMaterial(couple);
732   return GetDEDXForScaledEnergy(kinEnergy*mass    717   return GetDEDXForScaledEnergy(kinEnergy*massRatio, logKinEnergy+logMassRatio);
733 }                                                 718 }
734                                                   719 
735 //....oooOO0OOooo........oooOO0OOooo........oo    720 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
736                                                   721 
737 inline G4double                                   722 inline G4double 
738 G4VEnergyLossProcess::GetRange(G4double kinEne    723 G4VEnergyLossProcess::GetRange(G4double kinEnergy,
739                                const G4Materia    724                                const G4MaterialCutsCouple* couple)
740 {                                                 725 {
741   DefineMaterial(couple);                         726   DefineMaterial(couple);
742   return GetScaledRangeForScaledEnergy(kinEner    727   return GetScaledRangeForScaledEnergy(kinEnergy*massRatio);
743 }                                                 728 }
744                                                   729 
745 //....oooOO0OOooo........oooOO0OOooo........oo    730 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
746                                                   731 
747 inline G4double                                   732 inline G4double 
748 G4VEnergyLossProcess::GetRange(G4double kinEne    733 G4VEnergyLossProcess::GetRange(G4double kinEnergy,
749                                const G4Materia    734                                const G4MaterialCutsCouple* couple,
750                                G4double logKin    735                                G4double logKinEnergy)
751 {                                                 736 {
752   DefineMaterial(couple);                         737   DefineMaterial(couple);
753   return GetScaledRangeForScaledEnergy(kinEner    738   return GetScaledRangeForScaledEnergy(kinEnergy*massRatio, logKinEnergy+logMassRatio);
754 }                                                 739 }
755                                                   740 
756 //....oooOO0OOooo........oooOO0OOooo........oo    741 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
757                                                   742 
758 inline G4double                                   743 inline G4double 
759 G4VEnergyLossProcess::GetCSDARange(G4double ki    744 G4VEnergyLossProcess::GetCSDARange(G4double kineticEnergy, 
760                                    const G4Mat    745                                    const G4MaterialCutsCouple* couple)
761 {                                                 746 {
762   DefineMaterial(couple);                         747   DefineMaterial(couple);
763   return (nullptr == theCSDARangeTable) ? DBL_    748   return (nullptr == theCSDARangeTable) ? DBL_MAX : 
764     GetLimitScaledRangeForScaledEnergy(kinetic    749     GetLimitScaledRangeForScaledEnergy(kineticEnergy*massRatio)*reduceFactor;
765 }                                                 750 }
766                                                   751 
767 //....oooOO0OOooo........oooOO0OOooo........oo    752 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
768                                                   753 
769 inline G4double                                   754 inline G4double 
770 G4VEnergyLossProcess::GetKineticEnergy(G4doubl    755 G4VEnergyLossProcess::GetKineticEnergy(G4double range,
771                                        const G    756                                        const G4MaterialCutsCouple* couple)
772 {                                                 757 {
773   DefineMaterial(couple);                         758   DefineMaterial(couple);
774   return ScaledKinEnergyForLoss(range/reduceFa    759   return ScaledKinEnergyForLoss(range/reduceFactor)/massRatio;
775 }                                                 760 }
776                                                   761 
777 //....oooOO0OOooo........oooOO0OOooo........oo    762 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
778                                                   763 
779 inline G4double                                   764 inline G4double 
780 G4VEnergyLossProcess::GetLambda(G4double kinEn    765 G4VEnergyLossProcess::GetLambda(G4double kinEnergy,
781                                 const G4Materi    766                                 const G4MaterialCutsCouple* couple)
782 {                                                 767 {
783   DefineMaterial(couple);                         768   DefineMaterial(couple);
784   return (nullptr != theLambdaTable) ?            769   return (nullptr != theLambdaTable) ? 
785     GetLambdaForScaledEnergy(kinEnergy*massRat    770     GetLambdaForScaledEnergy(kinEnergy*massRatio) : 0.0;
786 }                                                 771 }
787                                                   772 
788 //....oooOO0OOooo........oooOO0OOooo........oo    773 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
789                                                   774 
790 inline G4double                                   775 inline G4double 
791 G4VEnergyLossProcess::GetLambda(G4double kinEn    776 G4VEnergyLossProcess::GetLambda(G4double kinEnergy,
792                                 const G4Materi    777                                 const G4MaterialCutsCouple* couple,
793                                 G4double logKi    778                                 G4double logKinEnergy)
794 {                                                 779 {
795   DefineMaterial(couple);                         780   DefineMaterial(couple);
796   return (nullptr != theLambdaTable) ?            781   return (nullptr != theLambdaTable) ?
797     GetLambdaForScaledEnergy(kinEnergy*massRat    782     GetLambdaForScaledEnergy(kinEnergy*massRatio, logKinEnergy+logMassRatio) 
798     :  0.0;                                       783     :  0.0;
799 }                                                 784 }
800                                                   785 
801 // ======== Get/Set inline methods used at ini    786 // ======== Get/Set inline methods used at initialisation ================
802                                                   787 
803 inline void G4VEnergyLossProcess::SetFluctMode    788 inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p)
804 {                                                 789 {
805   fluctModel = p;                                 790   fluctModel = p;
806 }                                                 791 }
807                                                   792 
808 //....oooOO0OOooo........oooOO0OOooo........oo    793 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
809                                                   794 
810 inline G4VEmFluctuationModel* G4VEnergyLossPro    795 inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel() const
811 {                                                 796 {
812   return fluctModel;                              797   return fluctModel;
813 }                                                 798 }
814                                                   799 
815 //....oooOO0OOooo........oooOO0OOooo........oo    800 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
816                                                   801 
817 inline void G4VEnergyLossProcess::SetParticle(    802 inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p)
818 {                                                 803 {
819   particle = p;                                   804   particle = p;
820 }                                                 805 }
821                                                   806 
822 //....oooOO0OOooo........oooOO0OOooo........oo    807 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
823                                                   808 
824 inline void                                       809 inline void 
825 G4VEnergyLossProcess::SetSecondaryParticle(con    810 G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
826 {                                                 811 {
827   secondaryParticle = p;                          812   secondaryParticle = p;
828 }                                                 813 }
829                                                   814 
830 //....oooOO0OOooo........oooOO0OOooo........oo    815 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
831                                                   816 
832 inline void                                       817 inline void 
833 G4VEnergyLossProcess::SetBaseParticle(const G4    818 G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p)
834 {                                                 819 {
835   baseParticle = p;                               820   baseParticle = p;
836 }                                                 821 }
837                                                   822 
838 //....oooOO0OOooo........oooOO0OOooo........oo    823 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
839                                                   824 
840 inline const G4ParticleDefinition* G4VEnergyLo    825 inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const
841 {                                                 826 {
842   return particle;                                827   return particle;
843 }                                                 828 }
844                                                   829 
845 //....oooOO0OOooo........oooOO0OOooo........oo    830 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
846                                                   831 
847 inline const G4ParticleDefinition* G4VEnergyLo    832 inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const
848 {                                                 833 {
849   return baseParticle;                            834   return baseParticle;
850 }                                                 835 }
851                                                   836 
852 //....oooOO0OOooo........oooOO0OOooo........oo    837 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
853                                                   838 
854 inline const G4ParticleDefinition*                839 inline const G4ParticleDefinition* 
855 G4VEnergyLossProcess::SecondaryParticle() cons    840 G4VEnergyLossProcess::SecondaryParticle() const
856 {                                                 841 {
857   return secondaryParticle;                       842   return secondaryParticle;
858 }                                                 843 }
859                                                   844 
860 //....oooOO0OOooo........oooOO0OOooo........oo    845 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
861                                                   846 
862 inline void G4VEnergyLossProcess::SetLossFluct    847 inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val)
863 {                                                 848 {
864   lossFluctuationFlag = val;                      849   lossFluctuationFlag = val;
865   actLossFluc = true;                             850   actLossFluc = true;
866 }                                                 851 }
867                                                   852 
868 //....oooOO0OOooo........oooOO0OOooo........oo    853 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
869                                                   854 
870 inline void G4VEnergyLossProcess::SetSpline(G4    855 inline void G4VEnergyLossProcess::SetSpline(G4bool val)
871 {                                                 856 {
872   spline = val;                                   857   spline = val;
873 }                                                 858 }
874                                                   859 
875 //....oooOO0OOooo........oooOO0OOooo........oo    860 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
876                                                   861 
877 inline void G4VEnergyLossProcess::SetCrossSect    862 inline void G4VEnergyLossProcess::SetCrossSectionType(G4CrossSectionType val)
878 {                                                 863 {
879   fXSType = val;                                  864   fXSType = val;
880 }                                                 865 }
881                                                   866 
882 //....oooOO0OOooo........oooOO0OOooo........oo    867 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
883                                                   868   
884 inline G4CrossSectionType G4VEnergyLossProcess    869 inline G4CrossSectionType G4VEnergyLossProcess::CrossSectionType() const 
885 {                                                 870 {
886   return fXSType;                                 871   return fXSType;
887 }                                                 872 }
888                                                   873 
889 //....oooOO0OOooo........oooOO0OOooo........oo    874 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
890                                                   875 
891 inline G4bool G4VEnergyLossProcess::IsIonisati    876 inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const
892 {                                                 877 {
893   return isIonisation;                            878   return isIonisation;
894 }                                                 879 }
895                                                   880 
896 //....oooOO0OOooo........oooOO0OOooo........oo    881 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
897                                                   882 
898 inline G4int G4VEnergyLossProcess::NumberOfSub    883 inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const
899 {                                                 884 {
900   return nSCoffRegions;                           885   return nSCoffRegions;
901 }                                                 886 }
902                                                   887 
903 //....oooOO0OOooo........oooOO0OOooo........oo    888 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
904                                                   889 
905 inline G4double G4VEnergyLossProcess::MinKinEn    890 inline G4double G4VEnergyLossProcess::MinKinEnergy() const
906 {                                                 891 {
907   return minKinEnergy;                            892   return minKinEnergy;
908 }                                                 893 }
909                                                   894 
910 //....oooOO0OOooo........oooOO0OOooo........oo    895 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
911                                                   896 
912 inline G4double G4VEnergyLossProcess::MaxKinEn    897 inline G4double G4VEnergyLossProcess::MaxKinEnergy() const
913 {                                                 898 {
914   return maxKinEnergy;                            899   return maxKinEnergy;
915 }                                                 900 }
916                                                   901 
917 //....oooOO0OOooo........oooOO0OOooo........oo    902 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
918                                                   903 
919 inline G4double G4VEnergyLossProcess::CrossSec    904 inline G4double G4VEnergyLossProcess::CrossSectionBiasingFactor() const
920 {                                                 905 {
921   return biasFactor;                              906   return biasFactor;
922 }                                                 907 }
923                                                   908 
924 //....oooOO0OOooo........oooOO0OOooo........oo    909 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
925                                                   910 
926 inline G4bool G4VEnergyLossProcess::TablesAreB    911 inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const
927 {                                                 912 {
928   return tablesAreBuilt;                          913   return tablesAreBuilt;
929 }                                                 914 }
930                                                   915 
931 //....oooOO0OOooo........oooOO0OOooo........oo    916 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
932                                                   917 
933 inline G4PhysicsTable* G4VEnergyLossProcess::D    918 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const
934 {                                                 919 {
935   return theDEDXTable;                            920   return theDEDXTable;
936 }                                                 921 }
937                                                   922 
938 //....oooOO0OOooo........oooOO0OOooo........oo    923 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
939                                                   924 
940 inline G4PhysicsTable* G4VEnergyLossProcess::D    925 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const
941 {                                                 926 {
942   return theDEDXunRestrictedTable;                927   return theDEDXunRestrictedTable;
943 }                                                 928 }
944                                                   929 
945 //....oooOO0OOooo........oooOO0OOooo........oo    930 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
946                                                   931 
947 inline G4PhysicsTable* G4VEnergyLossProcess::I    932 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const
948 {                                                 933 {
949   return theIonisationTable;                      934   return theIonisationTable;
950 }                                                 935 }
951                                                   936 
952 //....oooOO0OOooo........oooOO0OOooo........oo    937 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
953                                                   938 
954 inline G4PhysicsTable* G4VEnergyLossProcess::C    939 inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const
955 {                                                 940 {
956   return theCSDARangeTable;                       941   return theCSDARangeTable;
957 }                                                 942 }
958                                                   943 
959 //....oooOO0OOooo........oooOO0OOooo........oo    944 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
960                                                   945 
961 inline G4PhysicsTable* G4VEnergyLossProcess::R    946 inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const
962 {                                                 947 {
963   return theRangeTableForLoss;                    948   return theRangeTableForLoss;
964 }                                                 949 }
965                                                   950 
966 //....oooOO0OOooo........oooOO0OOooo........oo    951 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
967                                                   952 
968 inline G4PhysicsTable* G4VEnergyLossProcess::I    953 inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const
969 {                                                 954 {
970   return theInverseRangeTable;                    955   return theInverseRangeTable;
971 }                                                 956 }
972                                                   957 
973 //....oooOO0OOooo........oooOO0OOooo........oo    958 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
974                                                   959 
975 inline G4PhysicsTable* G4VEnergyLossProcess::L    960 inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable() const
976 {                                                 961 {
977   return theLambdaTable;                          962   return theLambdaTable;
978 }                                                 963 }
979                                                   964 
980 //....oooOO0OOooo........oooOO0OOooo........oo    965 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
981                                                   966 
982 inline G4bool G4VEnergyLossProcess::UseBaseMat    967 inline G4bool G4VEnergyLossProcess::UseBaseMaterial() const
983 {                                                 968 {
984   return baseMat;                                 969   return baseMat;
985 }                                                 970 }
986                                                   971 
987 //....oooOO0OOooo........oooOO0OOooo........oo    972 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
988                                                   973 
989 inline std::vector<G4double>*                     974 inline std::vector<G4double>* 
990 G4VEnergyLossProcess::EnergyOfCrossSectionMax(    975 G4VEnergyLossProcess::EnergyOfCrossSectionMax() const
991 {                                                 976 {
992   return theEnergyOfCrossSectionMax;              977   return theEnergyOfCrossSectionMax;
993 }                                                 978 }
994                                                   979 
995 //....oooOO0OOooo........oooOO0OOooo........oo    980 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
996                                                   981 
997 inline std::vector<G4TwoPeaksXS*>* G4VEnergyLo    982 inline std::vector<G4TwoPeaksXS*>* G4VEnergyLossProcess::TwoPeaksXS() const
998 {                                                 983 {
999   return fXSpeaks;                                984   return fXSpeaks;
1000 }                                                985 }
1001                                                  986 
1002 //....oooOO0OOooo........oooOO0OOooo........o    987 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1003                                                  988 
1004 inline std::size_t G4VEnergyLossProcess::Numb    989 inline std::size_t G4VEnergyLossProcess::NumberOfModels() const
1005 {                                                990 {
1006   return numberOfModels;                         991   return numberOfModels;
1007 }                                                992 }
1008                                                  993 
1009 //....oooOO0OOooo........oooOO0OOooo........o    994 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1010                                                  995 
1011 inline G4VEmModel* G4VEnergyLossProcess::EmMo    996 inline G4VEmModel* G4VEnergyLossProcess::EmModel(std::size_t index) const
1012 {                                                997 {
1013   return (index < emModels->size()) ? (*emMod    998   return (index < emModels->size()) ? (*emModels)[index] : nullptr;
1014 }                                                999 }
1015                                                  1000 
1016 //....oooOO0OOooo........oooOO0OOooo........o    1001 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1017                                                  1002 
1018 inline G4VEmModel*                               1003 inline G4VEmModel* 
1019 G4VEnergyLossProcess::GetModelByIndex(std::si    1004 G4VEnergyLossProcess::GetModelByIndex(std::size_t idx, G4bool ver) const
1020 {                                                1005 {
1021   return modelManager->GetModel((G4int)idx, v    1006   return modelManager->GetModel((G4int)idx, ver);
1022 }                                                1007 }
1023                                                  1008 
1024 //....oooOO0OOooo........oooOO0OOooo........o    1009 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1025                                                  1010 
1026 #endif                                           1011 #endif
1027                                                  1012