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.1.p2)


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