Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/include/G4EmCalculator.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/G4EmCalculator.hh (Version 11.3.0) and /processes/electromagnetic/utils/include/G4EmCalculator.hh (Version 9.2)


  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 // $Id: G4EmCalculator.hh,v 1.18 2007/03/15 12:34:46 vnivanch Exp $
                                                   >>  27 // GEANT4 tag $Name: geant4-09-02 $
                                                   >>  28 //
 26 //                                                 29 //
 27 // -------------------------------------------     30 // -------------------------------------------------------------------
 28 //                                                 31 //
 29 // GEANT4 Class header file                        32 // GEANT4 Class header file
 30 //                                                 33 //
 31 //                                                 34 //
 32 // File name:     G4EmCalculator                   35 // File name:     G4EmCalculator
 33 //                                                 36 //
 34 // Author:        Vladimir Ivanchenko              37 // Author:        Vladimir Ivanchenko
 35 //                                                 38 //
 36 // Creation date: 27.06.2004                       39 // Creation date: 27.06.2004
 37 //                                                 40 //
 38 // Modifications:                                  41 // Modifications:
 39 // 17.11.2004 Change signature of methods, add     42 // 17.11.2004 Change signature of methods, add new methods (V.Ivanchenko)
 40 // 11.01.2006 Add GetCSDARange (V.Ivanchenko)      43 // 11.01.2006 Add GetCSDARange (V.Ivanchenko)
 41 // 26.01.2006 Rename GetRange -> GetRangeFromR     44 // 26.01.2006 Rename GetRange -> GetRangeFromRestricteDEDX (V.Ivanchenko)
 42 // 22.03.2006 Add ComputeElectronicDEDX and Co     45 // 22.03.2006 Add ComputeElectronicDEDX and ComputeTotalDEDX (V.Ivanchenko)
 43 // 29.09.2006 Add member loweModel (V.Ivanchen     46 // 29.09.2006 Add member loweModel (V.Ivanchenko)
 44 // 15.03.2007 Add ComputeEnergyCutFromRangeCut     47 // 15.03.2007 Add ComputeEnergyCutFromRangeCut methods (V.Ivanchenko)
 45 // 02.02.2018 Add parameter to FindLambdaTable << 
 46 //                                                 48 //
 47 // Class Description:                              49 // Class Description:
 48 //                                                 50 //
 49 // Provide access to dE/dx and cross sections      51 // Provide access to dE/dx and cross sections
 50                                                    52 
 51 // -------------------------------------------     53 // -------------------------------------------------------------------
 52 //                                                 54 //
 53                                                    55 
 54 #ifndef G4EmCalculator_h                           56 #ifndef G4EmCalculator_h
 55 #define G4EmCalculator_h 1                         57 #define G4EmCalculator_h 1
 56                                                    58 
 57 #include <vector>                                  59 #include <vector>
 58 #include "globals.hh"                              60 #include "globals.hh"
 59 #include "G4VAtomDeexcitation.hh"              <<  61 #include "G4DataVector.hh"
 60                                                    62 
 61 class G4LossTableManager;                          63 class G4LossTableManager;
 62 class G4NistManager;                           << 
 63 class G4Material;                                  64 class G4Material;
 64 class G4MaterialCutsCouple;                        65 class G4MaterialCutsCouple;
 65 class G4ParticleDefinition;                        66 class G4ParticleDefinition;
 66 class G4PhysicsTable;                              67 class G4PhysicsTable;
 67 class G4VEmModel;                                  68 class G4VEmModel;
 68 class G4VEnergyLossProcess;                        69 class G4VEnergyLossProcess;
 69 class G4VEmProcess;                            << 
 70 class G4VMultipleScattering;                   << 
 71 class G4VProcess;                              << 
 72 class G4ionEffectiveCharge;                        70 class G4ionEffectiveCharge;
 73 class G4Region;                                    71 class G4Region;
 74 class G4Element;                                   72 class G4Element;
 75 class G4EmCorrections;                             73 class G4EmCorrections;
 76 class G4EmParameters;                          << 
 77 class G4IonTable;                              << 
 78                                                    74 
 79 class G4EmCalculator                               75 class G4EmCalculator
 80 {                                                  76 {
 81                                                    77 
 82 public:                                            78 public:
 83                                                    79 
 84   G4EmCalculator();                                80   G4EmCalculator();
 85                                                    81 
 86   ~G4EmCalculator();                               82   ~G4EmCalculator();
 87                                                    83 
 88   //========================================== << 
 89   // Methods to access precalculated dE/dx and     84   // Methods to access precalculated dE/dx and cross sections
 90   // Materials should exist in the list of the     85   // Materials should exist in the list of the G4MaterialCutsCouple
 91   //========================================== << 
 92                                                    86 
 93   G4double GetDEDX(G4double kinEnergy, const G <<  87   G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition*, const G4Material*,
 94        const G4Material*,                      <<  88                    const G4Region* r = 0);
 95                    const G4Region* r = nullptr <<  89   G4double GetDEDX(G4double kinEnergy, const G4String& part, const G4String& mat,
 96   inline G4double GetDEDX(G4double kinEnergy,  <<  90                    const G4String& s = "world");
 97        const G4String& mat,                    << 
 98                    const G4String& regname = " << 
 99                                                    91 
100   G4double GetRangeFromRestricteDEDX(G4double  <<  92   G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition*, 
101              const G4ParticleDefinition*,      << 
102              const G4Material*,                    93              const G4Material*,
103              const G4Region* r = nullptr);     <<  94              const G4Region* r = 0);
104   inline G4double GetRangeFromRestricteDEDX(G4 <<  95   G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4String& part, 
105               const G4String& part,            <<  96              const G4String& mat,
106               const G4String& mat,             <<  97              const G4String& s = "world");
107               const G4String& regname = "world << 
108                                                    98 
109   G4double GetCSDARange(G4double kinEnergy, co     99   G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition*, 
110       const G4Material*,                          100       const G4Material*,
111       const G4Region* r = nullptr);            << 101       const G4Region* r = 0);
112   inline G4double GetCSDARange(G4double kinEne << 102   G4double GetCSDARange(G4double kinEnergy, const G4String& part, 
113       const G4String& mat,                        103       const G4String& mat,
114       const G4String& regname = "world");      << 104       const G4String& s = "world");
115                                                   105 
116   G4double GetRange(G4double kinEnergy, const     106   G4double GetRange(G4double kinEnergy, const G4ParticleDefinition*, 
117       const G4Material*,                          107       const G4Material*,
118       const G4Region* r = nullptr);            << 108       const G4Region* r = 0);
119   inline G4double GetRange(G4double kinEnergy, << 109   G4double GetRange(G4double kinEnergy, const G4String& part, 
120       const G4String& mat,                        110       const G4String& mat,
121       const G4String& regname = "world");      << 111       const G4String& s = "world");
122                                                   112 
123   G4double GetKinEnergy(G4double range, const  << 113   G4double GetKinEnergy(G4double range, const G4ParticleDefinition*, const G4Material*,
124       const G4Material*,                       << 114                    const G4Region* r = 0);
125       const G4Region* r = nullptr);            << 115   G4double GetKinEnergy(G4double range, const G4String& part, const G4String& mat,
126   inline G4double GetKinEnergy(G4double range, << 116                    const G4String& s = "world");
127       const G4String& mat,                     << 
128       const G4String& regname = "world");      << 
129                                                   117 
130   G4double GetCrossSectionPerVolume(              118   G4double GetCrossSectionPerVolume(
131                    G4double kinEnergy, const G    119                    G4double kinEnergy, const G4ParticleDefinition*,
132                    const G4String& processName    120                    const G4String& processName,  const G4Material*,
133        const G4Region* r = nullptr);           << 121        const G4Region* r = 0);
134   inline G4double GetCrossSectionPerVolume(    << 122   G4double GetCrossSectionPerVolume(
135                    G4double kinEnergy, const G    123                    G4double kinEnergy, const G4String& part, const G4String& proc,
136                    const G4String& mat, const  << 124                    const G4String& mat, const G4String& s = "world");
137                                                << 
138   G4double GetShellIonisationCrossSectionPerAt << 
139                    const G4String& part, G4int << 
140        G4AtomicShellEnumerator shell,          << 
141                    G4double kinEnergy);        << 
142                                                   125 
143   G4double GetMeanFreePath(G4double kinEnergy,    126   G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition*,
144          const G4String& processName,  const G << 127                    const G4String& processName,  const G4Material*,
145          const G4Region* r = nullptr);         << 128        const G4Region* r = 0);
146   inline G4double GetMeanFreePath(G4double kin << 129   G4double GetMeanFreePath(G4double kinEnergy, const G4String& part, const G4String& proc,
147           const G4String& proc, const G4String << 130                    const G4String& mat, const G4String& s = "world");
148           const G4String& regname = "world");  << 
149                                                   131 
150   void PrintDEDXTable(const G4ParticleDefiniti    132   void PrintDEDXTable(const G4ParticleDefinition*);
151                                                   133 
152   void PrintRangeTable(const G4ParticleDefinit    134   void PrintRangeTable(const G4ParticleDefinition*);
153                                                   135 
154   void PrintInverseRangeTable(const G4Particle    136   void PrintInverseRangeTable(const G4ParticleDefinition*);
155                                                   137 
156   //========================================== << 
157   // Methods to calculate dE/dx and cross sect    138   // Methods to calculate dE/dx and cross sections "on fly"
158   // Existing tables and G4MaterialCutsCouples    139   // Existing tables and G4MaterialCutsCouples are not used
159   //========================================== << 
160                                                   140 
161   G4double ComputeDEDX(G4double kinEnergy, con    141   G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition*,
162                        const G4String& process    142                        const G4String& processName,  const G4Material*,
163            G4double cut = DBL_MAX);               143            G4double cut = DBL_MAX);
164   inline G4double ComputeDEDX(G4double kinEner << 144   G4double ComputeDEDX(G4double kinEnergy, const G4String& part, const G4String& proc,
165            const G4String& proc,               << 
166                        const G4String& mat, G4    145                        const G4String& mat, G4double cut = DBL_MAX);
167                                                   146 
168   G4double ComputeElectronicDEDX(G4double kinE << 147   G4double ComputeElectronicDEDX(G4double kinEnergy, const G4ParticleDefinition*,
169          const G4ParticleDefinition*,          << 
170          const G4Material* mat, G4double cut =    148          const G4Material* mat, G4double cut = DBL_MAX);
171   inline G4double ComputeElectronicDEDX(G4doub << 149   G4double ComputeElectronicDEDX(G4double kinEnergy, const G4String& part,
172          const G4String& mat, G4double cut = D    150          const G4String& mat, G4double cut = DBL_MAX);
173                                                   151 
174   G4double ComputeDEDXForCutInRange(G4double k << 152   G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition*, const G4Material*);
175             const G4ParticleDefinition*,       << 153   G4double ComputeNuclearDEDX(G4double kinEnergy, const G4String& part, const G4String& mat);
176             const G4Material* mat, G4double ra << 
177   inline G4double ComputeDEDXForCutInRange(G4d << 
178              const G4String& mat,              << 
179              G4double rangecut = DBL_MAX);     << 
180                                                << 
181   G4double ComputeNuclearDEDX(G4double kinEner << 
182             const G4Material*);                << 
183   inline G4double ComputeNuclearDEDX(G4double  << 
184             const G4String& mat);              << 
185                                                   154 
186   G4double ComputeTotalDEDX(G4double kinEnergy    155   G4double ComputeTotalDEDX(G4double kinEnergy, const G4ParticleDefinition*, 
187           const G4Material*, G4double cut = DB    156           const G4Material*, G4double cut = DBL_MAX);
188   inline G4double ComputeTotalDEDX(G4double ki << 157   G4double ComputeTotalDEDX(G4double kinEnergy, const G4String& part, 
189           const G4String& mat, G4double cut =     158           const G4String& mat, G4double cut = DBL_MAX);
190                                                   159 
191   G4double ComputeCrossSectionPerVolume(          160   G4double ComputeCrossSectionPerVolume(
192                        G4double kinEnergy, con    161                        G4double kinEnergy, const G4ParticleDefinition*,
193                        const G4String& process    162                        const G4String& processName,  const G4Material*,
194            G4double cut = 0.0);                   163            G4double cut = 0.0);
195   inline G4double ComputeCrossSectionPerVolume << 164   G4double ComputeCrossSectionPerVolume(
196                        G4double kinEnergy, con << 165                        G4double kinEnergy, const G4String& part, const G4String& proc,
197            const G4String& proc,               << 
198                        const G4String& mat, G4    166                        const G4String& mat, G4double cut = 0.0);
199                                                   167 
200   G4double ComputeCrossSectionPerAtom(            168   G4double ComputeCrossSectionPerAtom(
201                        G4double kinEnergy, con    169                        G4double kinEnergy, const G4ParticleDefinition*,
202                        const G4String& process    170                        const G4String& processName, G4double Z, G4double A,
203            G4double cut = 0.0);                   171            G4double cut = 0.0);
204   inline G4double ComputeCrossSectionPerAtom(  << 172   G4double ComputeCrossSectionPerAtom(
205                        G4double kinEnergy, con << 
206                        const G4String& process << 
207            G4double cut = 0.0);                << 
208                                                << 
209   G4double ComputeCrossSectionPerShell(        << 
210                        G4double kinEnergy, con << 
211                        const G4String& process << 
212            G4double cut = 0.0);                << 
213   inline G4double ComputeCrossSectionPerShell( << 
214                        G4double kinEnergy, con    173                        G4double kinEnergy, const G4String& part,
215                        const G4String& process    174                        const G4String& processName, const G4Element*,
216                        G4int shellIdx,         << 
217            G4double cut = 0.0);                   175            G4double cut = 0.0);
218                                                   176 
219   G4double ComputeGammaAttenuationLength(G4dou << 
220            const G4Material*);                 << 
221                                                << 
222   G4double ComputeShellIonisationCrossSectionP << 
223                    const G4String& part, G4int << 
224        G4AtomicShellEnumerator shell,          << 
225                    G4double kinEnergy,         << 
226                    const G4Material* mat = nul << 
227                                                << 
228   G4double ComputeMeanFreePath(                   177   G4double ComputeMeanFreePath(
229                        G4double kinEnergy, con    178                        G4double kinEnergy, const G4ParticleDefinition*,
230                        const G4String& process    179                        const G4String& processName,  const G4Material*,
231            G4double cut = 0.0);                   180            G4double cut = 0.0);
232   inline G4double ComputeMeanFreePath(         << 181   G4double ComputeMeanFreePath(
233                        G4double kinEnergy, con    182                        G4double kinEnergy, const G4String&, const G4String&,
234                        const G4String& process    183                        const G4String& processName, G4double cut = 0.0);
235                                                   184 
236   G4double ComputeEnergyCutFromRangeCut(          185   G4double ComputeEnergyCutFromRangeCut(
237                        G4double range, const G    186                        G4double range, const G4ParticleDefinition*,
238            const G4Material*);                    187            const G4Material*);
239   inline G4double ComputeEnergyCutFromRangeCut << 188   G4double ComputeEnergyCutFromRangeCut(
240                        G4double range, const G    189                        G4double range, const G4String&,
241            const G4String&);                      190            const G4String&);
242                                                   191 
243   //========================================== << 
244   // Methods to access particles, materials, r << 
245   //========================================== << 
246                                                << 
247   const G4ParticleDefinition* FindParticle(con    192   const G4ParticleDefinition* FindParticle(const G4String&);
248                                                   193 
249   const G4ParticleDefinition* FindIon(G4int Z, << 
250                                                << 
251   const G4Material* FindMaterial(const G4Strin    194   const G4Material* FindMaterial(const G4String&);
252                                                   195 
253   const G4Region* FindRegion(const G4String&);    196   const G4Region* FindRegion(const G4String&);
254                                                   197 
255   const G4MaterialCutsCouple* FindCouple(const << 198   const G4MaterialCutsCouple* FindCouple(const G4Material*, const G4Region* r = 0);
256            const G4Region* r = nullptr);       << 
257                                                << 
258   G4VProcess* FindProcess(const G4ParticleDefi << 
259         const G4String& processName);          << 
260                                                << 
261   void SetupMaterial(const G4Material*);       << 
262                                                << 
263   void SetupMaterial(const G4String&);         << 
264                                                   199 
265   void SetVerbose(G4int val);                     200   void SetVerbose(G4int val);
266                                                   201 
267   inline void SetApplySmoothing(G4int val);    << 
268                                                << 
269   // hide copy and assign                      << 
270   G4EmCalculator & operator=(const  G4EmCalcul << 
271   G4EmCalculator(const  G4EmCalculator&) = del << 
272                                                << 
273 private:                                          202 private:
274                                                   203 
275   G4bool UpdateParticle(const G4ParticleDefini    204   G4bool UpdateParticle(const G4ParticleDefinition*, G4double kinEnergy);
276                                                   205 
277   G4bool UpdateCouple(const G4Material*, G4dou    206   G4bool UpdateCouple(const G4Material*, G4double cut);
278                                                   207 
279   void FindLambdaTable(const G4ParticleDefinit << 208   void FindLambdaTable(const G4ParticleDefinition*, const G4String& processName);
280                        const G4String& process << 
281                        G4double kinEnergy, G4i << 
282                                                   209 
283   G4bool FindEmModel(const G4ParticleDefinitio    210   G4bool FindEmModel(const G4ParticleDefinition*, 
284                      const G4String& processNa    211                      const G4String& processName,
285                            G4double kinEnergy)    212                            G4double kinEnergy);
286                                                   213 
287   G4VEnergyLossProcess* FindEnLossProcess(cons << 214   G4VEnergyLossProcess* FindEnergyLossProcess(const G4ParticleDefinition*);
288             const G4String& processName);      << 
289                                                << 
290   G4VEmProcess* FindDiscreteProcess(const G4Pa << 
291             const G4String& processName);      << 
292                                                   215 
293   G4VMultipleScattering* FindMscProcess(const  << 216   G4EmCalculator & operator=(const  G4EmCalculator &right);
294           const G4String& processName);        << 217   G4EmCalculator(const  G4EmCalculator&);
295                                                   218 
296   G4bool ActiveForParticle(const G4ParticleDef << 219   std::vector<const G4Material*>            localMaterials;
297          G4VProcess* proc);                    << 220   std::vector<const G4MaterialCutsCouple*>  localCouples;
298                                                << 
299   void CheckMaterial(G4int Z);                 << 
300                                                   221 
301   G4EmParameters*              theParameters;  << 
302   G4LossTableManager*          manager;           222   G4LossTableManager*          manager;
303   G4NistManager*               nist;           << 
304   G4IonTable*                  ionTable;       << 
305   G4EmCorrections*             corr;              223   G4EmCorrections*             corr; 
                                                   >> 224   G4DataVector                 localCuts;
                                                   >> 225   G4int                        nLocalMaterials;
                                                   >> 226 
                                                   >> 227   G4int                        verbose;
306                                                   228 
307   // cache                                     << 229   // cash
308   const G4MaterialCutsCouple*  currentCouple = << 230   G4int                        currentCoupleIndex;
309   const G4Material*            currentMaterial << 231   const G4MaterialCutsCouple*  currentCouple;
310   const G4Material*            cutMaterial = n << 232   const G4Material*            currentMaterial;
311   const G4ParticleDefinition*  currentParticle << 233   const G4ParticleDefinition*  currentParticle;
312   const G4ParticleDefinition*  lambdaParticle  << 234   const G4ParticleDefinition*  baseParticle;
313   const G4ParticleDefinition*  baseParticle =  << 235   const G4PhysicsTable*        currentLambda;
314   const G4PhysicsTable*        currentLambda = << 236         G4VEmModel*            currentModel;
315                                                << 237         G4VEmModel*            loweModel;
316   G4VEmModel*                  currentModel =  << 238         G4VEnergyLossProcess*  currentProcess;
317   G4VEmModel*                  loweModel = nul << 
318   G4VEnergyLossProcess*        currentProcess  << 
319   G4VProcess*                  curProcess = nu << 
320   G4DynamicParticle*           dynParticle = n << 
321                                                   239 
322   const G4ParticleDefinition*  theGenericIon;     240   const G4ParticleDefinition*  theGenericIon;
323   G4ionEffectiveCharge*        ionEffCharge;      241   G4ionEffectiveCharge*        ionEffCharge;
324                                                   242 
325   G4double                     currentCut = DB << 243   G4String                     currentName;
326   G4double                     chargeSquare =  << 244   G4double                     currentCut;
327   G4double                     massRatio = 1.0 << 245   G4double                     chargeSquare;
328   G4double                     mass = 0;       << 246   G4double                     massRatio;
329   G4double                     cutenergy[3];   << 247   G4double                     mass;
330                                                << 248   G4bool                       isIon;
331   G4int                        currentCoupleIn << 249   G4bool                       isApplicable;
332   G4int                        nLocalMaterials << 250 
333   G4int                        verbose = 0;    << 251   G4String                     currentParticleName;
334                                                << 252   G4String                     currentMaterialName;
335   G4bool                       isIon = false;  << 253   G4String                     currentProcessName;
336   G4bool                       isApplicable =  << 
337   G4bool                       applySmoothing  << 
338                                                << 
339   std::vector<const G4Material*>            lo << 
340   std::vector<const G4MaterialCutsCouple*>  lo << 
341   std::vector<G4double>                     lo << 
342                                                << 
343   G4String                     currentName = " << 
344   G4String                     lambdaName = "" << 
345   G4String                     currentParticle << 
346   G4String                     currentMaterial << 
347   G4String                     currentProcessN << 
348 };                                                254 };
349                                                   255 
350 //....oooOO0OOooo.......oooOO0OOooo........ooo    256 //....oooOO0OOooo.......oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
351 //....oooOO0OOooo........oooOO0OOooo........oo << 
352                                                << 
353 inline                                         << 
354 G4double G4EmCalculator::GetDEDX(G4double kinE << 
355                                  const G4Strin << 
356 {                                              << 
357   return GetDEDX(kinEnergy,FindParticle(partic << 
358      FindMaterial(material),FindRegion(reg));  << 
359 }                                              << 
360                                                << 
361 //....oooOO0OOooo........oooOO0OOooo........oo << 
362                                                << 
363 inline                                         << 
364 G4double G4EmCalculator::GetRangeFromRestricte << 
365                const G4String& particle,       << 
366                const G4String& material,       << 
367                const G4String& reg)            << 
368 {                                              << 
369   return GetRangeFromRestricteDEDX(kinEnergy,F << 
370            FindMaterial(material),FindRegion(r << 
371 }                                              << 
372                                                << 
373 //....oooOO0OOooo........oooOO0OOooo........oo << 
374                                                << 
375 inline                                         << 
376 G4double G4EmCalculator::GetCSDARange(G4double << 
377               const G4String& particle,        << 
378               const G4String& material,        << 
379               const G4String& reg)             << 
380 {                                              << 
381   return GetCSDARange(kinEnergy,FindParticle(p << 
382       FindMaterial(material),FindRegion(reg)); << 
383 }                                              << 
384                                                << 
385 //....oooOO0OOooo........oooOO0OOooo........oo << 
386                                                << 
387 inline                                         << 
388 G4double G4EmCalculator::GetRange(G4double kin << 
389           const G4String& particle,            << 
390           const G4String& material,            << 
391           const G4String& reg)                 << 
392 {                                              << 
393   return GetRange(kinEnergy,FindParticle(parti << 
394       FindMaterial(material),FindRegion(reg)); << 
395 }                                              << 
396                                                << 
397 //....oooOO0OOooo........oooOO0OOooo........oo << 
398                                                << 
399 inline                                         << 
400 G4double G4EmCalculator::GetKinEnergy(G4double << 
401                                       const G4 << 
402 {                                              << 
403   return GetKinEnergy(range,FindParticle(parti << 
404           FindMaterial(material),FindRegion(re << 
405 }                                              << 
406                                                << 
407 //....oooOO0OOooo........oooOO0OOooo........oo << 
408                                                << 
409 inline                                         << 
410 G4double G4EmCalculator::GetCrossSectionPerVol << 
411                                             co << 
412               const G4String& processName,     << 
413                                             co << 
414               const G4String& reg)             << 
415 {                                              << 
416   return GetCrossSectionPerVolume(kinEnergy,Fi << 
417                                   FindMaterial << 
418 }                                              << 
419                                                << 
420 //....oooOO0OOooo........oooOO0OOooo........oo << 
421                                                << 
422 inline                                         << 
423 G4double G4EmCalculator::GetMeanFreePath(G4dou << 
424                                          const << 
425            const G4String& processName,        << 
426                                          const << 
427            const G4String& reg)                << 
428 {                                              << 
429   return GetMeanFreePath(kinEnergy,FindParticl << 
430                          FindMaterial(material << 
431 }                                              << 
432                                                << 
433 //....oooOO0OOooo........oooOO0OOooo........oo << 
434                                                << 
435 inline G4double                                << 
436 G4EmCalculator::ComputeElectronicDEDX(G4double << 
437               const G4String& mat, G4double cu << 
438 {                                              << 
439   return                                       << 
440     ComputeElectronicDEDX(kinEnergy,FindPartic << 
441 }                                              << 
442                                                << 
443 //....oooOO0OOooo........oooOO0OOooo........oo << 
444                                                << 
445 inline G4double                                << 
446 G4EmCalculator::ComputeDEDXForCutInRange(G4dou << 
447            const G4String& part,               << 
448            const G4String& mat,                << 
449            G4double rangecut)                  << 
450 {                                              << 
451   return ComputeDEDXForCutInRange(kinEnergy,Fi << 
452           FindMaterial(mat), rangecut);        << 
453 }                                              << 
454                                                << 
455 //....oooOO0OOooo........oooOO0OOooo........oo << 
456                                                << 
457 inline                                         << 
458 G4double G4EmCalculator::ComputeTotalDEDX(G4do << 
459             const G4String& part,              << 
460             const G4String& mat,               << 
461             G4double cut)                      << 
462 {                                              << 
463   return ComputeTotalDEDX(kinEnergy,FindPartic << 
464 }                                              << 
465                                                << 
466 //....oooOO0OOooo........oooOO0OOooo........oo << 
467                                                << 
468 inline                                         << 
469 G4double G4EmCalculator::ComputeDEDX(G4double  << 
470                                      const G4S << 
471              const G4String& processName,      << 
472                                      const G4S << 
473                                            G4d << 
474 {                                              << 
475   return ComputeDEDX(kinEnergy,FindParticle(pa << 
476                      FindMaterial(material),cu << 
477 }                                              << 
478                                                << 
479 //....oooOO0OOooo........oooOO0OOooo........oo << 
480                                                << 
481 inline                                         << 
482 G4double G4EmCalculator::ComputeNuclearDEDX(G4 << 
483                                       const G4 << 
484               const G4String& material)        << 
485 {                                              << 
486   return ComputeNuclearDEDX(kinEnergy,FindPart << 
487           FindMaterial(material));             << 
488 }                                              << 
489                                                << 
490 //....oooOO0OOooo........oooOO0OOooo........oo << 
491                                                << 
492 inline                                         << 
493 G4double G4EmCalculator::ComputeCrossSectionPe << 
494                                                << 
495                                              c << 
496                const G4String& processName,    << 
497                                              c << 
498                                                << 
499 {                                              << 
500   return ComputeCrossSectionPerVolume(kinEnerg << 
501               processName,                     << 
502                                       FindMate << 
503 }                                              << 
504                                                << 
505 //....oooOO0OOooo........oooOO0OOooo........oo << 
506                                                << 
507 inline                                         << 
508 G4double G4EmCalculator::ComputeCrossSectionPe << 
509                                                << 
510                                                << 
511                 const G4Element* elm,          << 
512                                         G4doub << 
513 {                                              << 
514   return ComputeCrossSectionPerAtom(kinEnergy, << 
515             processName,                       << 
516                                     elm->GetZ( << 
517 }                                              << 
518                                                << 
519 //....oooOO0OOooo........oooOO0OOooo........oo << 
520                                                << 
521 inline G4double G4EmCalculator::ComputeCrossSe << 
522                        G4double kinEnergy, con << 
523                        const G4String& process << 
524                        G4int shellIdx, G4doubl << 
525 {                                              << 
526   return ComputeCrossSectionPerShell(kinEnergy << 
527              processName, elm->GetZasInt(),    << 
528              shellIdx, cut);                   << 
529 }                                              << 
530                                                << 
531 //....oooOO0OOooo........oooOO0OOooo........oo << 
532                                                << 
533 inline                                         << 
534 G4double G4EmCalculator::ComputeEnergyCutFromR << 
535                          G4double range,       << 
536        const G4String& particle,               << 
537        const G4String& material)               << 
538 {                                              << 
539   return ComputeEnergyCutFromRangeCut(range,Fi << 
540               FindMaterial(material));         << 
541 }                                              << 
542                                                << 
543 //....oooOO0OOooo........oooOO0OOooo........oo << 
544                                                << 
545 inline                                         << 
546 G4double G4EmCalculator::ComputeMeanFreePath(G << 
547                                              c << 
548                                              c << 
549                                              c << 
550                                                << 
551 {                                              << 
552   return ComputeMeanFreePath(kinEnergy,FindPar << 
553                              FindMaterial(mate << 
554 }                                              << 
555                                                << 
556 //....oooOO0OOooo........oooOO0OOooo........oo << 
557                                                << 
558 inline void G4EmCalculator::SetApplySmoothing( << 
559 {                                              << 
560   applySmoothing = val;                        << 
561 }                                              << 
562                                                << 
563 //....oooOO0OOooo........oooOO0OOooo........oo << 
564                                                   257 
565 #endif                                            258 #endif
566                                                   259