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 ]

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