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 10.2.p1)


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