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.4.p4)


  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.22 2011-01-03 19:34:03 vnivanch Exp $
                                                   >>  27 // GEANT4 tag $Name: not supported by cvs2svn $
                                                   >>  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"
                                                   >>  61 #include "G4DataVector.hh"
                                                   >>  62 #include "G4DynamicParticle.hh"
 59 #include "G4VAtomDeexcitation.hh"                  63 #include "G4VAtomDeexcitation.hh"
 60                                                    64 
 61 class G4LossTableManager;                          65 class G4LossTableManager;
 62 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;                            << 
 70 class G4VMultipleScattering;                   << 
 71 class G4VProcess;                              << 
 72 class G4ionEffectiveCharge;                        72 class G4ionEffectiveCharge;
 73 class G4Region;                                    73 class G4Region;
 74 class G4Element;                                   74 class G4Element;
 75 class G4EmCorrections;                             75 class G4EmCorrections;
 76 class G4EmParameters;                          << 
 77 class G4IonTable;                              << 
 78                                                    76 
 79 class G4EmCalculator                               77 class G4EmCalculator
 80 {                                                  78 {
 81                                                    79 
 82 public:                                            80 public:
 83                                                    81 
 84   G4EmCalculator();                                82   G4EmCalculator();
 85                                                    83 
 86   ~G4EmCalculator();                               84   ~G4EmCalculator();
 87                                                    85 
 88   //========================================== <<  86   //==================================================================================
 89   // Methods to access precalculated dE/dx and     87   // Methods to access precalculated dE/dx and cross sections
 90   // Materials should exist in the list of the     88   // Materials should exist in the list of the G4MaterialCutsCouple
 91   //========================================== <<  89   //==================================================================================
 92                                                    90 
 93   G4double GetDEDX(G4double kinEnergy, const G <<  91   G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition*, const G4Material*,
 94        const G4Material*,                      <<  92                    const G4Region* r = 0);
 95                    const G4Region* r = nullptr <<  93   G4double GetDEDX(G4double kinEnergy, const G4String& part, const G4String& mat,
 96   inline G4double GetDEDX(G4double kinEnergy,  <<  94                    const G4String& s = "world");
 97        const G4String& mat,                    << 
 98                    const G4String& regname = " << 
 99                                                    95 
100   G4double GetRangeFromRestricteDEDX(G4double  <<  96   G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition*, 
101              const G4ParticleDefinition*,      << 
102              const G4Material*,                    97              const G4Material*,
103              const G4Region* r = nullptr);     <<  98              const G4Region* r = 0);
104   inline G4double GetRangeFromRestricteDEDX(G4 <<  99   G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4String& part, 
105               const G4String& part,            << 100              const G4String& mat,
106               const G4String& mat,             << 101              const G4String& s = "world");
107               const G4String& regname = "world << 
108                                                   102 
109   G4double GetCSDARange(G4double kinEnergy, co    103   G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition*, 
110       const G4Material*,                          104       const G4Material*,
111       const G4Region* r = nullptr);            << 105       const G4Region* r = 0);
112   inline G4double GetCSDARange(G4double kinEne << 106   G4double GetCSDARange(G4double kinEnergy, const G4String& part, 
113       const G4String& mat,                        107       const G4String& mat,
114       const G4String& regname = "world");      << 108       const G4String& s = "world");
115                                                   109 
116   G4double GetRange(G4double kinEnergy, const     110   G4double GetRange(G4double kinEnergy, const G4ParticleDefinition*, 
117       const G4Material*,                          111       const G4Material*,
118       const G4Region* r = nullptr);            << 112       const G4Region* r = 0);
119   inline G4double GetRange(G4double kinEnergy, << 113   G4double GetRange(G4double kinEnergy, const G4String& part, 
120       const G4String& mat,                        114       const G4String& mat,
121       const G4String& regname = "world");      << 115       const G4String& s = "world");
122                                                   116 
123   G4double GetKinEnergy(G4double range, const  << 117   G4double GetKinEnergy(G4double range, const G4ParticleDefinition*, const G4Material*,
124       const G4Material*,                       << 118                    const G4Region* r = 0);
125       const G4Region* r = nullptr);            << 119   G4double GetKinEnergy(G4double range, const G4String& part, const G4String& mat,
126   inline G4double GetKinEnergy(G4double range, << 120                    const G4String& s = "world");
127       const G4String& mat,                     << 
128       const G4String& regname = "world");      << 
129                                                   121 
130   G4double GetCrossSectionPerVolume(              122   G4double GetCrossSectionPerVolume(
131                    G4double kinEnergy, const G    123                    G4double kinEnergy, const G4ParticleDefinition*,
132                    const G4String& processName    124                    const G4String& processName,  const G4Material*,
133        const G4Region* r = nullptr);           << 125        const G4Region* r = 0);
134   inline G4double GetCrossSectionPerVolume(    << 126   G4double GetCrossSectionPerVolume(
135                    G4double kinEnergy, const G    127                    G4double kinEnergy, const G4String& part, const G4String& proc,
136                    const G4String& mat, const  << 128                    const G4String& mat, const G4String& s = "world");
137                                                   129 
138   G4double GetShellIonisationCrossSectionPerAt    130   G4double GetShellIonisationCrossSectionPerAtom(
139                    const G4String& part, G4int    131                    const G4String& part, G4int Z, 
140        G4AtomicShellEnumerator shell,             132        G4AtomicShellEnumerator shell,
141                    G4double kinEnergy);           133                    G4double kinEnergy);
142                                                   134 
143   G4double GetMeanFreePath(G4double kinEnergy,    135   G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition*,
144          const G4String& processName,  const G << 136                    const G4String& processName,  const G4Material*,
145          const G4Region* r = nullptr);         << 137        const G4Region* r = 0);
146   inline G4double GetMeanFreePath(G4double kin << 138   G4double GetMeanFreePath(G4double kinEnergy, const G4String& part, const G4String& proc,
147           const G4String& proc, const G4String << 139                    const G4String& mat, const G4String& s = "world");
148           const G4String& regname = "world");  << 
149                                                   140 
150   void PrintDEDXTable(const G4ParticleDefiniti    141   void PrintDEDXTable(const G4ParticleDefinition*);
151                                                   142 
152   void PrintRangeTable(const G4ParticleDefinit    143   void PrintRangeTable(const G4ParticleDefinition*);
153                                                   144 
154   void PrintInverseRangeTable(const G4Particle    145   void PrintInverseRangeTable(const G4ParticleDefinition*);
155                                                   146 
156   //========================================== << 147   //==================================================================================
157   // Methods to calculate dE/dx and cross sect    148   // Methods to calculate dE/dx and cross sections "on fly"
158   // Existing tables and G4MaterialCutsCouples    149   // Existing tables and G4MaterialCutsCouples are not used
159   //========================================== << 150   //==================================================================================
160                                                   151 
161   G4double ComputeDEDX(G4double kinEnergy, con    152   G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition*,
162                        const G4String& process    153                        const G4String& processName,  const G4Material*,
163            G4double cut = DBL_MAX);               154            G4double cut = DBL_MAX);
164   inline G4double ComputeDEDX(G4double kinEner << 155   G4double ComputeDEDX(G4double kinEnergy, const G4String& part, const G4String& proc,
165            const G4String& proc,               << 
166                        const G4String& mat, G4    156                        const G4String& mat, G4double cut = DBL_MAX);
167                                                   157 
168   G4double ComputeElectronicDEDX(G4double kinE << 158   G4double ComputeElectronicDEDX(G4double kinEnergy, const G4ParticleDefinition*,
169          const G4ParticleDefinition*,          << 
170          const G4Material* mat, G4double cut =    159          const G4Material* mat, G4double cut = DBL_MAX);
171   inline G4double ComputeElectronicDEDX(G4doub << 160   G4double ComputeElectronicDEDX(G4double kinEnergy, const G4String& part,
172          const G4String& mat, G4double cut = D    161          const G4String& mat, G4double cut = DBL_MAX);
173                                                   162 
174   G4double ComputeDEDXForCutInRange(G4double k << 
175             const G4ParticleDefinition*,       << 
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    163   G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition*, 
182             const G4Material*);                   164             const G4Material*);
183   inline G4double ComputeNuclearDEDX(G4double  << 165   G4double ComputeNuclearDEDX(G4double kinEnergy, const G4String& part, 
184             const G4String& mat);                 166             const G4String& mat);
185                                                   167 
186   G4double ComputeTotalDEDX(G4double kinEnergy    168   G4double ComputeTotalDEDX(G4double kinEnergy, const G4ParticleDefinition*, 
187           const G4Material*, G4double cut = DB    169           const G4Material*, G4double cut = DBL_MAX);
188   inline G4double ComputeTotalDEDX(G4double ki << 170   G4double ComputeTotalDEDX(G4double kinEnergy, const G4String& part, 
189           const G4String& mat, G4double cut =     171           const G4String& mat, G4double cut = DBL_MAX);
190                                                   172 
191   G4double ComputeCrossSectionPerVolume(          173   G4double ComputeCrossSectionPerVolume(
192                        G4double kinEnergy, con    174                        G4double kinEnergy, const G4ParticleDefinition*,
193                        const G4String& process    175                        const G4String& processName,  const G4Material*,
194            G4double cut = 0.0);                   176            G4double cut = 0.0);
195   inline G4double ComputeCrossSectionPerVolume << 177   G4double ComputeCrossSectionPerVolume(
196                        G4double kinEnergy, con << 178                        G4double kinEnergy, const G4String& part, const G4String& proc,
197            const G4String& proc,               << 
198                        const G4String& mat, G4    179                        const G4String& mat, G4double cut = 0.0);
199                                                   180 
200   G4double ComputeCrossSectionPerAtom(            181   G4double ComputeCrossSectionPerAtom(
201                        G4double kinEnergy, con    182                        G4double kinEnergy, const G4ParticleDefinition*,
202                        const G4String& process    183                        const G4String& processName, G4double Z, G4double A,
203            G4double cut = 0.0);                   184            G4double cut = 0.0);
204   inline G4double ComputeCrossSectionPerAtom(  << 185   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    186                        G4double kinEnergy, const G4String& part,
215                        const G4String& process    187                        const G4String& processName, const G4Element*,
216                        G4int shellIdx,         << 
217            G4double cut = 0.0);                   188            G4double cut = 0.0);
218                                                   189 
219   G4double ComputeGammaAttenuationLength(G4dou << 
220            const G4Material*);                 << 
221                                                << 
222   G4double ComputeShellIonisationCrossSectionP    190   G4double ComputeShellIonisationCrossSectionPerAtom(
223                    const G4String& part, G4int    191                    const G4String& part, G4int Z, 
224        G4AtomicShellEnumerator shell,             192        G4AtomicShellEnumerator shell,
225                    G4double kinEnergy,            193                    G4double kinEnergy,
226                    const G4Material* mat = nul << 194                    const G4Material* mat = 0);
227                                                   195 
228   G4double ComputeMeanFreePath(                   196   G4double ComputeMeanFreePath(
229                        G4double kinEnergy, con    197                        G4double kinEnergy, const G4ParticleDefinition*,
230                        const G4String& process    198                        const G4String& processName,  const G4Material*,
231            G4double cut = 0.0);                   199            G4double cut = 0.0);
232   inline G4double ComputeMeanFreePath(         << 200   G4double ComputeMeanFreePath(
233                        G4double kinEnergy, con    201                        G4double kinEnergy, const G4String&, const G4String&,
234                        const G4String& process    202                        const G4String& processName, G4double cut = 0.0);
235                                                   203 
236   G4double ComputeEnergyCutFromRangeCut(          204   G4double ComputeEnergyCutFromRangeCut(
237                        G4double range, const G    205                        G4double range, const G4ParticleDefinition*,
238            const G4Material*);                    206            const G4Material*);
239   inline G4double ComputeEnergyCutFromRangeCut << 207   G4double ComputeEnergyCutFromRangeCut(
240                        G4double range, const G    208                        G4double range, const G4String&,
241            const G4String&);                      209            const G4String&);
242                                                   210 
243   //========================================== << 211   //==================================================================================
244   // Methods to access particles, materials, r << 212   // Methods to access particles, materials, regions
245   //========================================== << 213   //==================================================================================
246                                                   214 
247   const G4ParticleDefinition* FindParticle(con    215   const G4ParticleDefinition* FindParticle(const G4String&);
248                                                   216 
249   const G4ParticleDefinition* FindIon(G4int Z,    217   const G4ParticleDefinition* FindIon(G4int Z, G4int A);
250                                                   218 
251   const G4Material* FindMaterial(const G4Strin    219   const G4Material* FindMaterial(const G4String&);
252                                                   220 
253   const G4Region* FindRegion(const G4String&);    221   const G4Region* FindRegion(const G4String&);
254                                                   222 
255   const G4MaterialCutsCouple* FindCouple(const << 223   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                                                   224 
265   void SetVerbose(G4int val);                     225   void SetVerbose(G4int val);
266                                                   226 
267   inline void SetApplySmoothing(G4int val);    << 227   //==================================================================================
268                                                << 228   // Private methods 
269   // hide copy and assign                      << 229   //==================================================================================
270   G4EmCalculator & operator=(const  G4EmCalcul << 
271   G4EmCalculator(const  G4EmCalculator&) = del << 
272                                                   230 
273 private:                                          231 private:
274                                                   232 
275   G4bool UpdateParticle(const G4ParticleDefini    233   G4bool UpdateParticle(const G4ParticleDefinition*, G4double kinEnergy);
276                                                   234 
277   G4bool UpdateCouple(const G4Material*, G4dou    235   G4bool UpdateCouple(const G4Material*, G4double cut);
278                                                   236 
279   void FindLambdaTable(const G4ParticleDefinit << 237   void FindLambdaTable(const G4ParticleDefinition*, const G4String& processName);
280                        const G4String& process << 
281                        G4double kinEnergy, G4i << 
282                                                   238 
283   G4bool FindEmModel(const G4ParticleDefinitio    239   G4bool FindEmModel(const G4ParticleDefinition*, 
284                      const G4String& processNa    240                      const G4String& processName,
285                            G4double kinEnergy)    241                            G4double kinEnergy);
286                                                   242 
287   G4VEnergyLossProcess* FindEnLossProcess(cons << 243   G4VEnergyLossProcess* FindEnergyLossProcess(const G4ParticleDefinition*);
288             const G4String& processName);      << 
289                                                << 
290   G4VEmProcess* FindDiscreteProcess(const G4Pa << 
291             const G4String& processName);      << 
292                                                   244 
293   G4VMultipleScattering* FindMscProcess(const  << 245   G4EmCalculator & operator=(const  G4EmCalculator &right);
294           const G4String& processName);        << 246   G4EmCalculator(const  G4EmCalculator&);
295                                                   247 
296   G4bool ActiveForParticle(const G4ParticleDef << 248   std::vector<const G4Material*>            localMaterials;
297          G4VProcess* proc);                    << 249   std::vector<const G4MaterialCutsCouple*>  localCouples;
298                                                << 
299   void CheckMaterial(G4int Z);                 << 
300                                                   250 
301   G4EmParameters*              theParameters;  << 
302   G4LossTableManager*          manager;           251   G4LossTableManager*          manager;
303   G4NistManager*               nist;           << 
304   G4IonTable*                  ionTable;       << 
305   G4EmCorrections*             corr;              252   G4EmCorrections*             corr; 
                                                   >> 253   G4DataVector                 localCuts;
                                                   >> 254   G4int                        nLocalMaterials;
                                                   >> 255 
                                                   >> 256   G4int                        verbose;
306                                                   257 
307   // cache                                     << 258   // cash
308   const G4MaterialCutsCouple*  currentCouple = << 259   G4int                        currentCoupleIndex;
309   const G4Material*            currentMaterial << 260   const G4MaterialCutsCouple*  currentCouple;
310   const G4Material*            cutMaterial = n << 261   const G4Material*            currentMaterial;
311   const G4ParticleDefinition*  currentParticle << 262   const G4ParticleDefinition*  currentParticle;
312   const G4ParticleDefinition*  lambdaParticle  << 263   const G4ParticleDefinition*  lambdaParticle;
313   const G4ParticleDefinition*  baseParticle =  << 264   const G4ParticleDefinition*  baseParticle;
314   const G4PhysicsTable*        currentLambda = << 265   const G4PhysicsTable*        currentLambda;
315                                                << 266         G4VEmModel*            currentModel;
316   G4VEmModel*                  currentModel =  << 267         G4VEmModel*            loweModel;
317   G4VEmModel*                  loweModel = nul << 268         G4VEnergyLossProcess*  currentProcess;
318   G4VEnergyLossProcess*        currentProcess  << 
319   G4VProcess*                  curProcess = nu << 
320   G4DynamicParticle*           dynParticle = n << 
321                                                   269 
322   const G4ParticleDefinition*  theGenericIon;     270   const G4ParticleDefinition*  theGenericIon;
323   G4ionEffectiveCharge*        ionEffCharge;      271   G4ionEffectiveCharge*        ionEffCharge;
                                                   >> 272   G4DynamicParticle            dynParticle;
324                                                   273 
325   G4double                     currentCut = DB << 274   G4String                     currentName;
326   G4double                     chargeSquare =  << 275   G4String                     lambdaName;
327   G4double                     massRatio = 1.0 << 276   G4double                     currentCut;
328   G4double                     mass = 0;       << 277   G4double                     chargeSquare;
329   G4double                     cutenergy[3];   << 278   G4double                     massRatio;
330                                                << 279   G4double                     mass;
331   G4int                        currentCoupleIn << 280   G4bool                       isIon;
332   G4int                        nLocalMaterials << 281   G4bool                       isApplicable;
333   G4int                        verbose = 0;    << 282 
334                                                << 283   G4String                     currentParticleName;
335   G4bool                       isIon = false;  << 284   G4String                     currentMaterialName;
336   G4bool                       isApplicable =  << 285   G4String                     currentProcessName;
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 };                                                286 };
349                                                   287 
350 //....oooOO0OOooo.......oooOO0OOooo........ooo    288 //....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                                                   289 
565 #endif                                            290 #endif
566                                                   291