Index: trunk/source/processes/electromagnetic/utils/include/G4VEmModel.hh
===================================================================
--- trunk/source/processes/electromagnetic/utils/include/G4VEmModel.hh	(revision 819)
+++ trunk/source/processes/electromagnetic/utils/include/G4VEmModel.hh	(revision 961)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEmModel.hh,v 1.48 2007/10/29 08:38:58 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-01-patch-02 $
+// $Id: G4VEmModel.hh,v 1.66 2009/02/19 09:57:36 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 // -------------------------------------------------------------------
@@ -61,4 +61,9 @@
 // 29-06-06 Add member currentElement and Get/Set methods (V.Ivanchenko)
 // 29-10-07 Added SampleScattering (V.Ivanchenko)
+// 15-07-08 Reorder class members and improve comments (VI)
+// 21-07-08 Added vector of G4ElementSelector and methods to use it (VI)
+// 12-09-08 Added methods GetParticleCharge, GetChargeSquareRatio, 
+//          CorrectionsAlongStep, ActivateNuclearStopping (VI)
+// 16-02-09 Move implementations of virtual methods to source (VI)
 //
 // Class Description:
@@ -81,5 +86,7 @@
 #include "G4DataVector.hh"
 #include "G4VEmFluctuationModel.hh"
+#include "G4EmElementSelector.hh"
 #include "Randomize.hh"
+#include <vector>
 
 class G4PhysicsTable;
@@ -98,9 +105,9 @@
 
   //------------------------------------------------------------------------
-  // Virtual methods to be implemented for the concrete model
-  //------------------------------------------------------------------------
-
-  virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&) = 0;
-
+  // Virtual methods to be implemented for any concrete model
+  //------------------------------------------------------------------------
+
+  virtual void Initialise(const G4ParticleDefinition*, 
+			  const G4DataVector&) = 0;
 
   virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
@@ -114,18 +121,5 @@
   //------------------------------------------------------------------------
 
-  virtual G4double MinEnergyCut(const G4ParticleDefinition*,
-			const G4MaterialCutsCouple*);
-
-  virtual G4double ComputeDEDX(const G4MaterialCutsCouple*,
-			       const G4ParticleDefinition*,
-			       G4double kineticEnergy,
-			       G4double cutEnergy = DBL_MAX);
-
-  virtual G4double CrossSection(const G4MaterialCutsCouple*,
-				const G4ParticleDefinition*,
-				G4double kineticEnergy,
-				G4double cutEnergy = 0.0,
-				G4double maxEnergy = DBL_MAX);
-
+  // main method to compute dEdx
   virtual G4double ComputeDEDXPerVolume(const G4Material*,
 					const G4ParticleDefinition*,
@@ -133,18 +127,5 @@
 					G4double cutEnergy = DBL_MAX);
 
-
-  virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
-					      G4double kinEnergy, 
-					      G4double Z, 
-					      G4double A = 0., 
-					      G4double cutEnergy = 0.0,
-					      G4double maxEnergy = DBL_MAX);
-				      
-  virtual G4double ComputeMeanFreePath(const G4ParticleDefinition*,
-				       G4double kineticEnergy,
-				       const G4Material*,    
-				       G4double cutEnergy = 0.0,
-				       G4double maxEnergy = DBL_MAX);
-				     
+  // main method to compute cross section per Volume
   virtual G4double CrossSectionPerVolume(const G4Material*,
 					 const G4ParticleDefinition*,
@@ -153,6 +134,41 @@
 					 G4double maxEnergy = DBL_MAX);
 
+  // main method to compute cross section depending on atom
+  virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
+					      G4double kinEnergy, 
+					      G4double Z, 
+					      G4double A = 0., /* amu */
+					      G4double cutEnergy = 0.0,
+					      G4double maxEnergy = DBL_MAX);
+				      				     
+  // min cut in kinetic energy allowed by the model
+  virtual G4double MinEnergyCut(const G4ParticleDefinition*,
+				const G4MaterialCutsCouple*);
+
+  // Compute effective ion charge square
+  virtual G4double GetChargeSquareRatio(const G4ParticleDefinition*,
+					const G4Material*,
+					G4double kineticEnergy);
+
+  // Compute ion charge 
+  virtual G4double GetParticleCharge(const G4ParticleDefinition*,
+				     const G4Material*,
+				     G4double kineticEnergy);
+
+  // add correction to energy loss and ompute non-ionizing energy loss
+  virtual void CorrectionsAlongStep(const G4MaterialCutsCouple*,
+				    const G4DynamicParticle*,
+				    G4double& eloss,
+				    G4double& niel,
+				    G4double length);
+
+  // sample PIXE deexcitation
+  virtual void SampleDeexcitationAlongStep(const G4Material*,
+					   const G4Track&,
+                                           G4double& eloss);
+
 protected:
 
+  // kinematically allowed max kinetic energy of a secondary
   virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
 				      G4double kineticEnergy);  
@@ -177,35 +193,107 @@
   virtual void DefineForRegion(const G4Region*);
 
+  virtual void SetupForMaterial(const G4ParticleDefinition*,
+				const G4Material*,
+                                G4double kineticEnergy);
+
   //------------------------------------------------------------------------
   // Generic methods common to all models
   //------------------------------------------------------------------------
 
-  void SetParticleChange(G4VParticleChange*, G4VEmFluctuationModel*);
-
-  G4VEmFluctuationModel* GetModelOfFluctuations();
-
-  G4double HighEnergyLimit();
-
-  G4double LowEnergyLimit();
-
-  void SetHighEnergyLimit(G4double);
-
-  void SetLowEnergyLimit(G4double);
-
-  G4double MaxSecondaryKinEnergy(const G4DynamicParticle* dynParticle);
-
-  const G4Element* SelectRandomAtom(const G4Material*,
-				    const G4ParticleDefinition*,
-				    G4double kineticEnergy,
-				    G4double cutEnergy = 0.0,
-				    G4double maxEnergy = DBL_MAX);
-
-  const G4String& GetName() const;
+  // should be called at initialisation to build element selectors
+  void InitialiseElementSelectors(const G4ParticleDefinition*, 
+				  const G4DataVector&);
+
+  // dEdx per unit length
+  inline G4double ComputeDEDX(const G4MaterialCutsCouple*,
+			      const G4ParticleDefinition*,
+			      G4double kineticEnergy,
+			      G4double cutEnergy = DBL_MAX);
+
+  // cross section per volume
+  inline G4double CrossSection(const G4MaterialCutsCouple*,
+				const G4ParticleDefinition*,
+				G4double kineticEnergy,
+				G4double cutEnergy = 0.0,
+				G4double maxEnergy = DBL_MAX);
+
+  // compute mean free path via cross section per volume
+  inline G4double ComputeMeanFreePath(const G4ParticleDefinition*,
+				      G4double kineticEnergy,
+				      const G4Material*,    
+				      G4double cutEnergy = 0.0,
+				      G4double maxEnergy = DBL_MAX);
+
+  // generic cross section per element
+  inline G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
+                                             const G4Element*,
+					     G4double kinEnergy, 
+					     G4double cutEnergy = 0.0,
+					     G4double maxEnergy = DBL_MAX);
+
+  // atom can be selected effitiantly if element selectors are initialised 
+  inline const G4Element* SelectRandomAtom(const G4MaterialCutsCouple*,
+					   const G4ParticleDefinition*,
+					   G4double kineticEnergy,
+					   G4double cutEnergy = 0.0,
+					   G4double maxEnergy = DBL_MAX);
+
+  // to select atom cross section per volume is recomputed for each element 
+  inline const G4Element* SelectRandomAtom(const G4Material*,
+					   const G4ParticleDefinition*,
+					   G4double kineticEnergy,
+					   G4double cutEnergy = 0.0,
+					   G4double maxEnergy = DBL_MAX);
+
+  // select isotope in order to have precise mass of the nucleus
+  inline G4int SelectIsotopeNumber(const G4Element*);
+
+  //------------------------------------------------------------------------
+  // Get/Set methods
+  //------------------------------------------------------------------------
+
+  inline G4VEmFluctuationModel* GetModelOfFluctuations();
+
+  inline G4double HighEnergyLimit() const;
+
+  inline G4double LowEnergyLimit() const;
+
+  inline G4double PolarAngleLimit() const;
+
+  inline G4double SecondaryThreshold() const;
+
+  inline G4bool LPMFlag() const;
+
+  inline G4bool DeexcitationFlag() const;
+
+  inline void SetHighEnergyLimit(G4double);
+
+  inline void SetLowEnergyLimit(G4double);
+
+  inline void SetPolarAngleLimit(G4double);
+
+  inline void SetSecondaryThreshold(G4double);
+
+  inline void SetLPMFlag(G4bool val);
+
+  inline void SetDeexcitationFlag(G4bool val);
+
+  inline void ActivateNuclearStopping(G4bool);
+
+  inline G4double MaxSecondaryKinEnergy(const G4DynamicParticle* dynParticle);
+
+  inline const G4String& GetName() const;
+
+  inline void SetParticleChange(G4VParticleChange*, G4VEmFluctuationModel*);
+
+  inline void SetCurrentCouple(const G4MaterialCutsCouple*);
 
 protected:
 
-  const G4Element* GetCurrentElement() const;
-
-  void SetCurrentElement(const G4Element*);
+  inline const G4MaterialCutsCouple* CurrentCouple() const;
+
+  inline void SetCurrentElement(const G4Element*);
+
+  inline const G4Element* GetCurrentElement() const;
 
 private:
@@ -215,83 +303,39 @@
   G4VEmModel(const  G4VEmModel&);
 
+  // ======== Parameters of the class fixed at construction =========
+
+  G4VEmFluctuationModel* fluc;
+  const G4String   name;
+
+  // ======== Parameters of the class fixed at initialisation =======
+
   G4double        lowLimit;
   G4double        highLimit;
-  G4double        xsec[40];
-
-  G4VEmFluctuationModel* fluc;
-
-  const G4String   name;
-  const G4Element* currentElement;
+  G4double        polarAngleLimit;
+  G4double        secondaryThreshold;
+  G4bool          theLPMflag;
+
+  G4int           nSelectors;
+  std::vector<G4EmElementSelector*> elmSelectors;
 
 protected:
 
   G4VParticleChange*  pParticleChange;
+  G4bool              nuclearStopping;
+
+  // ======== Cashed values - may be state dependent ================
+
+private:
+
+  const G4MaterialCutsCouple* currentCouple;
+  const G4Element*            currentElement;
+
+  G4int                  nsec;
+  G4bool                 flagDeexcitation;
+  std::vector<G4double>  xsec;
+
 };
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::HighEnergyLimit()
-{
-  return highLimit;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::LowEnergyLimit()
-{
-  return lowLimit;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline void G4VEmModel::SetHighEnergyLimit(G4double val)
-{
-  highLimit = val;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline void G4VEmModel::SetLowEnergyLimit(G4double val)
-{
-  lowLimit = val;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline void G4VEmModel::SetParticleChange(G4VParticleChange* p,  
-                                          G4VEmFluctuationModel* f = 0)
-{
-  if(p && pParticleChange != p) pParticleChange = p;
-  fluc = f;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-
-inline G4VEmFluctuationModel* G4VEmModel::GetModelOfFluctuations()
-{
-  return fluc;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::MinEnergyCut(const G4ParticleDefinition*,
-                                         const G4MaterialCutsCouple*)
-{
-  return 0.0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::ComputeDEDXPerVolume(
-                                        const G4Material*,
-					const G4ParticleDefinition*,
-					G4double,
-					G4double)
-{
-  return 0.0;
-}
-
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
@@ -301,4 +345,5 @@
 					G4double cutEnergy)
 {
+  currentCouple = c;
   return ComputeDEDXPerVolume(c->GetMaterial(),p,kinEnergy,cutEnergy);
 }
@@ -312,6 +357,20 @@
 					 G4double maxEnergy)
 {
-  return 
-    CrossSectionPerVolume(c->GetMaterial(),p,kinEnergy,cutEnergy,maxEnergy);
+  currentCouple = c;
+  return CrossSectionPerVolume(c->GetMaterial(),p,kinEnergy,cutEnergy,maxEnergy);
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4double G4VEmModel::ComputeMeanFreePath(const G4ParticleDefinition* p,
+						G4double ekin,
+						const G4Material* material,     
+						G4double emin,
+						G4double emax)
+{
+  G4double mfp = DBL_MAX;
+  G4double cross = CrossSectionPerVolume(material,p,ekin,emin,emax);
+  if (cross > DBL_MIN) mfp = 1./cross;
+  return mfp;
 }
 
@@ -319,27 +378,51 @@
 
 inline G4double G4VEmModel::ComputeCrossSectionPerAtom(
-                                         const G4ParticleDefinition*,
-					 G4double, G4double, G4double,
-					 G4double, G4double)
-{
-  return 0.0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline const G4Element* G4VEmModel::SelectRandomAtom(
-				         const G4Material* material,
-				         const G4ParticleDefinition* pd,
-					 G4double kinEnergy,
-					 G4double tcut,
-					 G4double tmax)
+		const G4ParticleDefinition* part,
+		const G4Element* elm,
+		G4double kinEnergy, 
+		G4double cutEnergy,
+		G4double maxEnergy)
+{
+  currentElement = elm;
+  return ComputeCrossSectionPerAtom(part,kinEnergy,elm->GetZ(),elm->GetN(),
+				    cutEnergy,maxEnergy);
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline 
+const G4Element* G4VEmModel::SelectRandomAtom(const G4MaterialCutsCouple* couple,
+					      const G4ParticleDefinition* p,
+					      G4double kinEnergy,
+					      G4double cutEnergy,
+					      G4double maxEnergy)
+{
+  currentCouple = couple;
+  if(nSelectors > 0) {
+    currentElement = 
+      elmSelectors[couple->GetIndex()]->SelectRandomAtom(kinEnergy);
+  } else {
+    currentElement = SelectRandomAtom(couple->GetMaterial(),p,kinEnergy,
+				      cutEnergy,maxEnergy);
+  }
+  return currentElement;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline 
+const G4Element* G4VEmModel::SelectRandomAtom(const G4Material* material,
+					      const G4ParticleDefinition* pd,
+					      G4double kinEnergy,
+					      G4double tcut,
+					      G4double tmax)
 {
   const G4ElementVector* theElementVector = material->GetElementVector();
-  G4int nelm = material->GetNumberOfElements();
-  currentElement = (*theElementVector)[nelm-1];
-  if (nelm > 1) {
+  G4int n = material->GetNumberOfElements() - 1;
+  currentElement = (*theElementVector)[n];
+  if (n > 0) {
     G4double x = G4UniformRand()*
-                 CrossSectionPerVolume(material,pd,kinEnergy,tcut,tmax);
-    for(G4int i=0; i<nelm; i++) {
+                 G4VEmModel::CrossSectionPerVolume(material,pd,kinEnergy,tcut,tmax);
+    for(G4int i=0; i<n; i++) {
       if (x <= xsec[i]) {
 	currentElement = (*theElementVector)[i];
@@ -353,4 +436,170 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
+inline G4int G4VEmModel::SelectIsotopeNumber(const G4Element* elm)
+{
+  G4int N = G4int(elm->GetN() + 0.5);
+  G4int ni = elm->GetNumberOfIsotopes();
+  if(ni > 0) {
+    G4int idx = 0;
+    if(ni > 1) {
+      G4double* ab = currentElement->GetRelativeAbundanceVector();
+      G4double x = G4UniformRand();
+      for(; idx<ni; idx++) {
+	x -= ab[idx];
+	if (x <= 0.0) break;
+      }
+      if(idx >= ni) idx = ni - 1;
+    }
+    N = elm->GetIsotope(idx)->GetN();
+  }
+  return N;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4VEmFluctuationModel* G4VEmModel::GetModelOfFluctuations()
+{
+  return fluc;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4double G4VEmModel::HighEnergyLimit() const
+{
+  return highLimit;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4double G4VEmModel::LowEnergyLimit() const
+{
+  return lowLimit;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4double G4VEmModel::PolarAngleLimit() const
+{
+  return polarAngleLimit;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline G4double G4VEmModel::SecondaryThreshold() const
+{
+  return secondaryThreshold;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+inline G4bool G4VEmModel::LPMFlag() const 
+{
+  return theLPMflag;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+inline G4bool G4VEmModel::DeexcitationFlag() const 
+{
+  return flagDeexcitation;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetHighEnergyLimit(G4double val)
+{
+  highLimit = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetLowEnergyLimit(G4double val)
+{
+  lowLimit = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetPolarAngleLimit(G4double val)
+{
+  polarAngleLimit = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetSecondaryThreshold(G4double val) 
+{
+  secondaryThreshold = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+inline void G4VEmModel::SetLPMFlag(G4bool val) 
+{
+  theLPMflag = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+inline void G4VEmModel::SetDeexcitationFlag(G4bool val) 
+{
+  flagDeexcitation = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+inline void G4VEmModel::ActivateNuclearStopping(G4bool val)
+{
+  nuclearStopping = val;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline 
+G4double G4VEmModel::MaxSecondaryKinEnergy(const G4DynamicParticle* dynPart)
+{
+  return MaxSecondaryEnergy(dynPart->GetDefinition(),
+                            dynPart->GetKineticEnergy());
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline const G4String& G4VEmModel::GetName() const 
+{
+  return name;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetParticleChange(G4VParticleChange* p,  
+                                          G4VEmFluctuationModel* f = 0)
+{
+  if(p && pParticleChange != p) pParticleChange = p;
+  fluc = f;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetCurrentCouple(const G4MaterialCutsCouple* p)
+{
+  currentCouple = p;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline const G4MaterialCutsCouple* G4VEmModel::CurrentCouple() const
+{
+  return currentCouple;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+inline void G4VEmModel::SetCurrentElement(const G4Element* elm)
+{
+  currentElement = elm;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
 inline const G4Element* G4VEmModel::GetCurrentElement() const
 {
@@ -360,71 +609,4 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
-inline void G4VEmModel::SetCurrentElement(const G4Element* elm)
-{
-  currentElement = elm;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::MaxSecondaryKinEnergy(
-                                          const G4DynamicParticle* dynParticle)
-{
-  return MaxSecondaryEnergy(dynParticle->GetDefinition(),
-                            dynParticle->GetKineticEnergy());
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::MaxSecondaryEnergy(const G4ParticleDefinition*,
-					       G4double kineticEnergy)
-{
-  return kineticEnergy;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline const G4String& G4VEmModel::GetName() const 
-{
-  return name;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-// Methods for msc simulation
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline void G4VEmModel::SampleScattering(const G4DynamicParticle*, G4double)
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::ComputeTruePathLengthLimit(
-                                const G4Track&, 
-				G4PhysicsTable*, 
-				G4double)
-{
-  return DBL_MAX;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::ComputeGeomPathLength(G4double truePathLength)
-{
-  return truePathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline G4double G4VEmModel::ComputeTrueStepLength(G4double geomPathLength)
-{
-  return geomPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline void G4VEmModel::DefineForRegion(const G4Region*) 
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
 #endif
 
