Index: unk/source/processes/electromagnetic/standard/include/G4ComptonScattering52.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4ComptonScattering52.hh	(revision 1318)
+++ 	(revision )
@@ -1,162 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-//
-// $Id: G4ComptonScattering52.hh,v 1.4 2007/05/16 14:00:56 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-//------------------ G4ComptonScattering52 physics process -----------------------
-//                   by Michel Maire, April 1996
-//
-// 10-06-96, updated by M.Maire
-// 21-06-96, SetCuts implementation, M.Maire
-// 06-01-97, crossection table + meanfreepath table, M.Maire
-// 17-02-97, New Physics scheme
-// 25-02-97, GetMeanFreePath() now is public function
-// 12-03-97, new physics scheme again
-// 13-08-98, new methods SetBining()  PrintInfo()
-// 03-08-01, new methods Store/Retrieve PhysicsTable (mma)
-// 06-08-01, BuildThePhysicsTable() called from constructor (mma)
-// 19-09-01, come back to previous ProcessName "compt"
-// 20-09-01, DoIt: fminimalEnergy = 1*eV (mma)
-// 01-10-01, come back to BuildPhysicsTable(const G4ParticleDefinition&)
-// 13-08-04, suppress icc file; make public ComputeCrossSectionPerAtom()   (mma)
-// 09-11-04, Remove Retrieve tables (V.Ivantchenko)
-// 04-05-05, Add 52 to class name (V.Ivanchenko)
-// -----------------------------------------------------------------------------
-
-// class description
-//
-// inherit from G4VDiscreteProcess
-//
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#ifndef G4ComptonScattering52_h
-#define G4ComptonScattering52_h 1
-
-#include "G4ios.hh" 
-#include "globals.hh"
-#include "Randomize.hh"
-#include "G4VDiscreteProcess.hh"
-#include "G4PhysicsTable.hh"
-#include "G4PhysicsLogVector.hh"
-#include "G4Element.hh"
-#include "G4Gamma.hh"
-#include "G4Electron.hh"
-#include "G4Step.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4ComptonScattering52 : public G4VDiscreteProcess
-
-{
-  public:  // with description
-
-  G4ComptonScattering52(const G4String& processName ="compt",
-		            G4ProcessType type = fElectromagnetic);
-
-    ~G4ComptonScattering52();
-
-     G4bool IsApplicable(const G4ParticleDefinition&);
-       // true for Gamma only.
-
-     void SetPhysicsTableBining(G4double lowE, G4double highE, G4int nBins);
-       // Allows to define the binning of the PhysicsTables,
-       // before to build them.
-
-     void BuildPhysicsTable(const G4ParticleDefinition&);
-       // It builds the total CrossSectionPerAtom table, for Gamma,
-       // and for every element contained in the elementTable.
-       // It builds the MeanFreePath table, for Gamma,
-       // and for every material contained in the materialTable.
-
-     G4bool StorePhysicsTable(const G4ParticleDefinition* ,
-			      const G4String& directory, G4bool);
-       // store CrossSection and MeanFreePath tables into an external file
-       // specified by 'directory' (must exist before invokation)
-
-       //G4bool RetrievePhysicsTable(const G4ParticleDefinition* ,
-       //			 const G4String& directory, G4bool);
-       // retrieve CrossSection and MeanFreePath tables from an external file
-       // specified by 'directory'
-
-     void PrintInfoDefinition();
-       // Print few lines of informations about the process: validity range,
-       // origine ..etc..
-       // Invoked by BuildThePhysicsTable().
-
-     G4double GetMeanFreePath(const G4Track& aTrack,
-                              G4double previousStepSize,
-                              G4ForceCondition* condition);
-       // It returns the MeanFreePath of the process for the current track :
-       // (energy, material)
-       // The previousStepSize and G4ForceCondition* are not used.
-       // This function overloads a virtual function of the base class.
-       // It is invoked by the ProcessManager of the Particle.
-
-     G4double GetCrossSectionPerAtom(G4DynamicParticle* aDynamicGamma,
-                                         G4Element*         anElement);
-       // It returns the total CrossSectionPerAtom of the process, 
-       // for the current DynamicGamma (energy), in anElement.					 
-					  
-     G4VParticleChange* PostStepDoIt(const G4Track& aTrack,
-                                    const G4Step& aStep);
-       // It computes the final state of the process (at end of step),
-       // returned as a ParticleChange object.			    
-       // This function overloads a virtual function of the base class.
-       // It is invoked by the ProcessManager of the Particle.
-
-     virtual
-     G4double ComputeCrossSectionPerAtom(G4double GammaEnergy, 
-                                         G4double AtomicNumber);
-
-     G4double ComputeMeanFreePath(G4double GammaEnergy, 
-                                  G4Material* aMaterial);
-  private:
-  
-     // hide assignment operator as private 
-     G4ComptonScattering52& operator=(const G4ComptonScattering52 &right);
-     G4ComptonScattering52(const G4ComptonScattering52& );
-                                          
-  private:
-     
-     G4PhysicsTable* theCrossSectionTable;    // table for crosssection
-     G4PhysicsTable* theMeanFreePathTable;    // table for mean free path
-       
-     G4double LowestEnergyLimit;      // low  energy limit of the tables
-     G4double HighestEnergyLimit;     // high energy limit of the tables
-     G4int NumbBinTable;              // number of bins in the tables
-     
-  protected:   
-     
-     G4double fminimalEnergy;         // minimalEnergy of produced particles
-};
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-  
-#endif
- 
Index: unk/source/processes/electromagnetic/standard/include/G4MscModel71.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4MscModel71.hh	(revision 1318)
+++ 	(revision )
@@ -1,171 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MscModel71.hh,v 1.6 2009/11/01 13:04:12 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-//
-// GEANT4 Class header file
-//
-//
-// File name:     G4MscMOdel71
-//
-// Author:        Laszlo Urban
-//
-// Creation date: 01.03.2001
-//
-// Modifications:
-//
-// 27-03-03 Move model part from G4MultipleScattering (V.Ivanchenko)
-// 27-03-03 Rename (V.Ivanchenko)
-//
-// 05-08-03 angle distribution has been modified (L.Urban)
-// 26-11-03 new data member currentRange (L.Urban)
-// 01-03-04 changes in data members + signature changed in SampleCosineTheta
-// 11-03-04 changes in data members (L.Urban)
-// 23-04-04 changes in data members and in signature of SampleCosineTheta
-//          (L.Urban)
-// 17-08-04 name of data member facxsi changed to factail (L.Urban)
-// 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
-// 15-04-05 optimize internal interface - add SampleSecondaries method (V.Ivanchenko)
-// 03-10-05 Model is freezed with the name McsModel71 (V.Ivanchenko)
-// 17-02-06 Save table of transport cross sections not mfp (V.Ivanchenko)
-// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (V.Ivanchenko)
-//
-
-//
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
-
-// -------------------------------------------------------------------
-//
-
-#ifndef G4MscModel71_h
-#define G4MscModel71_h 1
-
-#include "G4VEmModel.hh"
-
-class G4ParticleChangeForMSC;
-class G4Navigator;
-
-class G4MscModel71 : public G4VEmModel
-{
-
-public:
-
-  G4MscModel71(G4double&, G4double&, G4double&, G4double&, G4bool&,
-	       const G4String& nam = "UrbanMsc71");
-
-  virtual ~G4MscModel71();
-
-  virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
-
-  virtual G4double ComputeCrossSectionPerAtom(
-                             const G4ParticleDefinition* particle,
-                                   G4double KineticEnergy,
-                                   G4double AtomicNumber,
-                                   G4double AtomicWeight=0., 
-				   G4double cut =0.,
-				   G4double emax=DBL_MAX);
-
-  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
-				 const G4MaterialCutsCouple*,
-				 const G4DynamicParticle*,
-				 G4double length,
-				 G4double safety);
-
-  G4double GeomPathLength(G4PhysicsTable* theLambdaTable,
-                    const G4MaterialCutsCouple* couple,
-                    const G4ParticleDefinition* particle,
-                          G4double& kineticEnergy,
-                          G4double lambda,
-                          G4double range,
-                          G4double truePathLength);
-
-  G4double TrueStepLength(G4double geomStepLength);
-
-  G4double SampleCosineTheta(G4double trueStepLength,G4double KineticEnergy);
-
-  G4double SampleDisplacement();
-
-  void SetLateralDisplasmentFlag(G4bool val);
-
-private:
-
-  // hide assignment operator
-  G4MscModel71 & operator=(const  G4MscModel71 &right);
-  G4MscModel71(const  G4MscModel71&);
-
-  const G4ParticleDefinition* particle;
-  G4ParticleChangeForMSC*     fParticleChange;
-  G4Navigator*                navigator;
-
-  G4double mass;
-  G4double charge;
-  G4double massRate;
-
-  G4double taubig;
-  G4double tausmall;
-  G4double taulim;
-  G4double currentTau;
-  G4double dtrl;
-  G4double NuclCorrPar;
-  G4double FactPar;
-  G4double factail ;
-
-  G4double sigmafactor;
-  G4double b;
-  G4double xsi;
-
-  G4double lambda0;
-  G4double tPathLength;
-  G4double par1,par2,par3 ;
-
-  G4double stepmin ;
-
-  G4double currentKinEnergy;
-  G4double currentRange ; 
-  G4double currentRadLength;
-
-  G4bool   samplez;
-  G4bool   latDisplasment;
-  G4bool   isInitialized;
-};
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-inline void G4MscModel71::SetLateralDisplasmentFlag(G4bool val)
-{
-  latDisplasment = val;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-#endif
-
Index: unk/source/processes/electromagnetic/standard/include/G4MultipleScattering.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4MultipleScattering.hh	(revision 1318)
+++ 	(revision )
@@ -1,147 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MultipleScattering.hh,v 1.36 2008/03/10 10:39:21 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -----------------------------------------------------------------------------
-//
-// GEANT4 Class header file
-//
-// File name:     G4MultipleScattering
-//
-// Author:        Laszlo Urban
-//
-// Creation date: March 2001
-// 
-// Modifications:
-//
-// 07-08-01 new methods Store/Retrieve PhysicsTable
-// 23-08-01 new angle and z distribution,energy dependence reduced,
-//          Store,Retrieve methods commented out temporarily, L.Urban
-// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering
-//          Store,Retrieve methods reactived (mma)
-// 13-09-01 Unused TrueToGeomTransformation method deleted,
-//          class description (L.Urban)
-// 19-09-01 come back to previous process name msc
-// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
-// 22-04-02 boundary algorithm modified -> important improvement in timing !!!!
-//          (L.Urban)
-// 24-05-02 changes in data members, L.Urban
-// 30-10-02 changes in data members, L.Urban
-// 20-01-03 Migrade to cut per region (V.Ivanchenko)
-// 05-02-03 changes in data members, L.Urban
-// 28-03-03 Move to model design (V.Ivanchenko)
-// 18-04-03 Change name (V.Ivanchenko)
-// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
-// 17-08-04 name of data member facxsi changed to factail together
-//          with the corresponding set function (L.Urban)
-// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
-// 15-04-05 optimize internal interfaces (V.Ivanchenko)
-// 02-10-05 new algorithm for step limitation, new data members (L.Urban)
-// 05-10-05 value of data member tlimitmin has been changed (L.Urban)
-// 23-10-05 new Boolean data member prec (false ~ 7.1 like, true new step
-//          limit in TruePathLengthLimit, L.Urban)
-// 25-10-05 prec renamed to steppingAlgorithm, set function triggers
-//          'default' facrange too, true - 0.02, false - 0.2 (L.Urban)
-// 26-10-05 the above is put in the function MscStepLimitation() (mma)
-// 05-11-05 new data member rangecut (L.Urban)
-// 13-11-05 some code cleaning (L.Urban)
-// 07-12-05 GeomLimit is protected instead of public
-// 11-12-05 data menber rangecut removed (L.Urban)
-// 19-01-07 tlimitmin = facrange*50*micrometer, i.e. it depends on the
-//          value of facrange (L.Urban)
-// 16-02-06 set function for data member factail (L.Urban)
-// 13-10-06 data member factail removed, new data member skin
-//          together with set function, data member tkinlimit
-//          changed to lambdalimit (L.Urban)
-// 07-03-07 remove method SetSkin, because it is now in the base class (VI)
-//
-//------------------------------------------------------------------------------
-//
-
-// class description
-//
-//  The class simulates the multiple scattering for any kind
-//  of charged particle.
-//
-// class description - end
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#ifndef G4MultipleScattering_h
-#define G4MultipleScattering_h 1
-
-#include "G4VMultipleScattering.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4VMscModel;
-
-class G4MultipleScattering : public G4VMultipleScattering
-
-{
-public:    // with description
-
-  G4MultipleScattering(const G4String& processName="msc");
-
-  virtual ~G4MultipleScattering();
-
-  // returns true for charged particles, false otherwise
-  G4bool IsApplicable (const G4ParticleDefinition& p);
-
-  // Print few lines of informations about the process: validity range,
-  void PrintInfo();
-
-  // geom. step length distribution should be sampled or not
-  void Setsamplez(G4bool value) { samplez = value;};
-
-  // to reduce the energy/step dependence
-  void Setdtrl(G4double value) { dtrl = value;};
-
-  // 'soften' step limitation above lambdalimit
-  void SetLambdalimit(G4double value) { lambdalimit = value;};
-
-protected:
-
-  // This function initialise models
-  void InitialiseProcess(const G4ParticleDefinition*);
-
-private:        // data members
-
-  G4VMscModel* mscUrban;
-
-  G4double lambdalimit;
-  G4double dtrl;
-
-  G4bool   samplez;
-  G4bool   isInitialized;
-
-};
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#endif
Index: unk/source/processes/electromagnetic/standard/include/G4MultipleScattering71.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4MultipleScattering71.hh	(revision 1318)
+++ 	(revision )
@@ -1,252 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MultipleScattering71.hh,v 1.6 2008/07/16 11:27:41 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-//
-//------------- G4MultipleScattering71 physics process --------------------------
-//               by Laszlo Urban, March 2001
-//
-// 07-08-01 new methods Store/Retrieve PhysicsTable
-// 23-08-01 new angle and z distribution,energy dependence reduced,
-//          Store,Retrieve methods commented out temporarily, L.Urban
-// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering
-//          Store,Retrieve methods reactived (mma)
-// 13-09-01 Unused TrueToGeomTransformation method deleted,
-//          class description (L.Urban)
-// 19-09-01 come back to previous process name msc
-// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
-// 22-04-02 boundary algorithm modified -> important improvement in timing !!!!
-//          (L.Urban)
-// 24-05-02 changes in data members, L.Urban
-// 30-10-02 changes in data members, L.Urban
-// 20-01-03 Migrade to cut per region (V.Ivanchenko)
-// 05-02-03 changes in data members, L.Urban
-// 28-03-03 Move to model design (V.Ivanchenko)
-// 18-04-03 Change name (V.Ivanchenko)
-// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
-// 17-08-04 name of data member facxsi changed to factail together
-//          with the corresponding set function (L.Urban)
-// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
-// 15-04-05 optimize internal interfaces (V.Ivanchenko)
-// 03-10-05 Process is freezed with the name 71 (V.Ivanchenko)
-// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (V.Ivanchenko)
-//
-//------------------------------------------------------------------------------
-//
-// $Id: G4MultipleScattering71.hh,v 1.6 2008/07/16 11:27:41 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-
-// class description
-//
-//  The class simulates the multiple scattering for any kind
-//  of charged particle.
-//
-// class description - end
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#ifndef G4MultipleScattering71_h
-#define G4MultipleScattering71_h 1
-
-#include "G4VMultipleScattering.hh"
-#include "G4MscModel71.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4MultipleScattering71 : public G4VMultipleScattering
-
-{
-public:    // with description
-
-  G4MultipleScattering71(const G4String& processName="msc");
-
-  virtual ~G4MultipleScattering71();
-
-  // returns true for charged particles, false otherwise
-  G4bool IsApplicable (const G4ParticleDefinition& p);
-
-  virtual G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);
-
-  virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
-
-  G4double TruePathLengthLimit(const G4Track&  track,
-			       G4double& lambda,
-			       G4double  currentMinimalStep);
-
-  // Print few lines of informations about the process: validity range,
-  void PrintInfo();
-
-  // geom. step length distribution should be sampled or not
-  void Setsamplez(G4bool value);
-
-  // activate boundary algorithm
-  void SetBoundary(G4bool value);
-
-  // to reduce the energy/step dependence
-  void Setdtrl(G4double value);
-
-  void Setfactail(G4double value);
-
-  // Steplimit after boundary crossing = facrange*range
-  // estimated nb of steps at boundary nsmallstep = 1/facrange
-  void SetFacrange(G4double val);
-
-  // corrs to transport cross section for high energy
-  void SetNuclCorrPar(G4double val);
-  void SetFactPar(G4double val);
-
-protected:
-
-  // This function initialise models
-  void InitialiseProcess(const G4ParticleDefinition*);
-
-  // This method is used for tracking, it returns step limit
-  virtual G4double GetContinuousStepLimit(const G4Track& track,
-                                        G4double previousStepSize,
-                                        G4double currentMinimalStep,
-                                        G4double& currentSafety);
-
-private:
-
-  //  hide assignment operator as  private
-  G4MultipleScattering71 & operator = (const G4MultipleScattering71 &right);
-  G4MultipleScattering71 ( const G4MultipleScattering71 &);
-
-private:        // data members
-
-  G4MscModel71* model;
-
-  G4double lowKineticEnergy;
-  G4double highKineticEnergy;
-  G4int    totBins;
-
-  G4double truePathLength;
-  G4double geomPathLength;
-  G4double trueStepLength;
-  G4double range;
-
-  G4double facrange;
-  G4double tlimit;
-  G4double tlimitmin;
-  G4double dtrl;
-  G4double NuclCorrPar;
-  G4double FactPar;
-  G4double factail;
-  G4double cf;
-
-  G4int    stepnolastmsc;
-  G4int    nsmallstep;
-
-  G4bool   samplez;
-  G4bool   boundary;
-  G4bool   isInitialized;
-
-};
-
-//--------------------------------------------------------------------
-//  inline methods
-//--------------------------------------------------------------------
-
-inline G4bool G4MultipleScattering71::IsApplicable (const G4ParticleDefinition& p)
-{
-  return (p.GetPDGCharge() != 0.0 && !p.IsShortLived());
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-inline G4VParticleChange* G4MultipleScattering71::AlongStepDoIt(
-                                                        const G4Track&,
-                                                        const G4Step& step)
-{
-  G4double geomStepLength = step.GetStepLength();
-  if((geomStepLength == geomPathLength) && (truePathLength <= range))
-     trueStepLength = truePathLength;
-  else
-     trueStepLength = model->TrueStepLength(geomStepLength);
-  fParticleChange.ProposeTrueStepLength(trueStepLength);
-  return &fParticleChange;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-inline G4VParticleChange* G4MultipleScattering71::PostStepDoIt(const G4Track& track,
-							       const G4Step& step)
-{
-  fParticleChange.Initialize(track);
-  std::vector<G4DynamicParticle*>* p = 0;
-  model->SampleSecondaries(p, CurrentMaterialCutsCouple(),track.GetDynamicParticle(),
-		    step.GetStepLength(),step.GetPostStepPoint()->GetSafety());
-  return &fParticleChange;
-}
-
-// geom. step length distribution should be sampled or not
-inline void G4MultipleScattering71::Setsamplez(G4bool value)
-{
-  samplez = value;
-}
-
-// activate boundary algorithm
-inline void G4MultipleScattering71::SetBoundary(G4bool value)
-{
-  boundary = value;
-}
-
-// to reduce the energy/step dependence
-inline void G4MultipleScattering71::Setdtrl(G4double value)                
-{
-  dtrl = value;
-}
-
-inline void G4MultipleScattering71::Setfactail(G4double value)              
-{
-  factail = value;
-}
-
-// Steplimit after boundary crossing = facrange*range
-// estimated nb of steps at boundary nsmallstep = 1/facrange
-inline void G4MultipleScattering71::SetFacrange(G4double val)              
-{
-  facrange = val;
-  nsmallstep = G4int(std::log((cf+facrange-1.)/facrange)/std::log(cf))+1;
-}
-
-// corrs to transport cross section for high energy
-inline  void G4MultipleScattering71::SetNuclCorrPar(G4double val)            
-{
-  NuclCorrPar = val;
-}
-
-inline  void G4MultipleScattering71::SetFactPar(G4double val)                
-{
-  FactPar = val;
-}
-
-#endif
-
-
-
Index: unk/source/processes/electromagnetic/standard/include/G4PolarizedComptonScattering.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4PolarizedComptonScattering.hh	(revision 1318)
+++ 	(revision )
@@ -1,78 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-//
-// $Id: G4PolarizedComptonScattering.hh,v 1.9 2006/06/29 19:51:14 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// --------- G4PolarizedComptonScattering physics process ----------------------
-//                   by Vicente Lara, March 1998
-//
-// -----------------------------------------------------------------------------
-
-// class description
-//
-// inherit from G4ComptonScattering
-//
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#ifndef G4PolarizedComptonScattering_h
-#define G4PolarizedComptonScattering_h 1
-
-#include "G4ComptonScattering52.hh"
-#include "G4EnergyLossTables.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4PolarizedComptonScattering : public G4ComptonScattering52
-{
- public:  // with description
-
-  G4PolarizedComptonScattering(const G4String& processName = "polarCompt");
-
-  G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
-
- private:
-  
-  G4ThreeVector SetNewPolarization(G4double, G4double,
-  				   G4double, G4double,
-  				   G4ThreeVector& );
-
-  G4double SetPhi(G4double, G4double, G4double, G4double);
-
-
-  void SystemOfRefChange(G4ThreeVector&, G4ThreeVector&, G4ThreeVector&, 
-                         G4ThreeVector&);
-
-  // hide assignment operator as private 
-  G4PolarizedComptonScattering& operator=(const G4PolarizedComptonScattering &right);
-  G4PolarizedComptonScattering(const G4PolarizedComptonScattering& );
-
-};
-  
-#endif
- 
Index: unk/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh	(revision 1318)
+++ 	(revision )
@@ -1,229 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4UrbanMscModel.hh,v 1.35 2009/04/29 13:30:22 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-//
-// GEANT4 Class header file
-//
-//
-// File name:     G4UrbanMscModel
-//
-// Author:        Laszlo Urban
-//
-// Creation date: 06.03.2008
-//
-// Modifications:
-//
-// 28-04-09  move G4UrbanMscModel2 from the g49.2 to G4UrbanMscModel. 
-//           now it is frozen (V.Ivanchenk0)
-//
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
-
-// -------------------------------------------------------------------
-//
-
-#ifndef G4UrbanMscModel_h
-#define G4UrbanMscModel_h 1
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4VMscModel.hh"
-#include "G4PhysicsTable.hh"
-#include "G4MscStepLimitType.hh"
-
-class G4ParticleChangeForMSC;
-class G4SafetyHelper;
-class G4LossTableManager;
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4UrbanMscModel : public G4VMscModel
-{
-
-public:
-
-  G4UrbanMscModel(const G4String& nam = "UrbanMscUni");
-
-  virtual ~G4UrbanMscModel();
-
-  void Initialise(const G4ParticleDefinition*, const G4DataVector&);
-
-  G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
-				      G4double KineticEnergy,
-				      G4double AtomicNumber,
-				      G4double AtomicWeight=0., 
-				      G4double cut =0.,
-				      G4double emax=DBL_MAX);
-
-  void SampleScattering(const G4DynamicParticle*,
-			G4double safety);
-
-  G4double ComputeTruePathLengthLimit(const G4Track& track,
-				      G4PhysicsTable* theLambdaTable,
-				      G4double currentMinimalStep);
-
-  G4double ComputeGeomPathLength(G4double truePathLength);
-
-  G4double ComputeTrueStepLength(G4double geomStepLength);
-
-  G4double ComputeTheta0(G4double truePathLength,
-                         G4double KineticEnergy);
-
-private:
-
-  G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
-
-  G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
-
-  G4double SampleDisplacement();
-
-  G4double LatCorrelation();
-
-  inline G4double GetLambda(G4double kinEnergy);
-
-  inline void SetParticle(const G4ParticleDefinition*);
-
-  inline void UpdateCache();
-
-  //  hide assignment operator
-  G4UrbanMscModel & operator=(const  G4UrbanMscModel &right);
-  G4UrbanMscModel(const  G4UrbanMscModel&);
-
-  const G4ParticleDefinition* particle;
-  G4ParticleChangeForMSC*     fParticleChange;
-
-  G4PhysicsTable*             theLambdaTable;
-  const G4MaterialCutsCouple* couple;
-  G4LossTableManager*         theManager;
-
-  G4double mass;
-  G4double charge,ChargeSquare;
-  G4double masslimite,lambdalimit,fr;
-
-  G4double taubig;
-  G4double tausmall;
-  G4double taulim;
-  G4double currentTau;
-  G4double tlimit;
-  G4double tlimitmin;
-  G4double tlimitminfix;
-  G4double tgeom;
-
-  G4double geombig;
-  G4double geommin;
-  G4double geomlimit;
-  G4double skindepth;
-  G4double smallstep;
-
-  G4double presafety;
-
-  G4double lambda0;
-  G4double lambdaeff;
-  G4double tPathLength;
-  G4double zPathLength;
-  G4double par1,par2,par3;
-
-  G4double stepmin;
-
-  G4double currentKinEnergy;
-  G4double currentRange; 
-  G4double rangeinit;
-  G4double currentRadLength;
-
-  G4double theta0max,rellossmax;
-  G4double third;
-
-  G4int    currentMaterialIndex;
-
-  G4double y;
-  G4double Zold;
-  G4double Zeff,Z2,Z23,lnZ;
-  G4double coeffth1,coeffth2;
-  G4double coeffc1,coeffc2;
-  G4double scr1ini,scr2ini,scr1,scr2;
-
-  G4bool   isInitialized;
-  G4bool   inside;
-  G4bool   insideskin;
-};
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-G4double G4UrbanMscModel::GetLambda(G4double e)
-{
-  G4double x;
-  if(theLambdaTable) {
-    G4bool b;
-    x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
-  } else {
-    x = CrossSection(couple,particle,e);
-  }
-  if(x > DBL_MIN) x = 1./x;
-  else            x = DBL_MAX;
-  return x;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-void G4UrbanMscModel::SetParticle(const G4ParticleDefinition* p)
-{
-  if (p != particle) {
-    particle = p;
-    mass = p->GetPDGMass();
-    charge = p->GetPDGCharge()/eplus;
-    ChargeSquare = charge*charge;
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-void G4UrbanMscModel::UpdateCache()                                   
-{
-    lnZ = std::log(Zeff);
-    coeffth1 = 0.885+lnZ*(0.104-0.0170*lnZ);
-    coeffth2 = 0.028+lnZ*(0.012-0.00125*lnZ);
-    coeffc1  = 2.134-lnZ*(0.1045-0.00602*lnZ);
-    coeffc2  = 0.001126-lnZ*(0.0001089+0.0000247*lnZ);
-    Z2 = Zeff*Zeff;
-    Z23 = std::exp(2.*lnZ/3.);
-    scr1     = scr1ini*Z23;
-    scr2     = scr2ini*Z2*ChargeSquare;
-  //  lastMaterial = couple->GetMaterial();
-    Zold = Zeff;
-}
-
-#endif
-
Index: unk/source/processes/electromagnetic/standard/include/G4UrbanMscModel2.hh
===================================================================
--- /trunk/source/processes/electromagnetic/standard/include/G4UrbanMscModel2.hh	(revision 1318)
+++ 	(revision )
@@ -1,232 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4UrbanMscModel2.hh,v 1.17 2009/05/15 09:26:42 urban Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-//
-// GEANT4 Class header file
-//
-//
-// File name:     G4UrbanMscModel2
-//
-// Author:        Laszlo Urban
-//
-// Creation date: 06.03.2008
-//
-// Modifications:
-// 23.04.2009 L.Urban updated parameterization in UpdateCache method
-//
-//
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
-
-// -------------------------------------------------------------------
-//
-
-#ifndef G4UrbanMscModel2_h
-#define G4UrbanMscModel2_h 1
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4VMscModel.hh"
-#include "G4PhysicsTable.hh"
-#include "G4MscStepLimitType.hh"
-
-class G4ParticleChangeForMSC;
-class G4SafetyHelper;
-class G4LossTableManager;
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-class G4UrbanMscModel2 : public G4VMscModel
-{
-
-public:
-
-  G4UrbanMscModel2(const G4String& nam = "UrbanMscUni2");
-
-  virtual ~G4UrbanMscModel2();
-
-  void Initialise(const G4ParticleDefinition*, const G4DataVector&);
-
-  G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
-				      G4double KineticEnergy,
-				      G4double AtomicNumber,
-				      G4double AtomicWeight=0., 
-				      G4double cut =0.,
-				      G4double emax=DBL_MAX);
-
-  void SampleScattering(const G4DynamicParticle*,
-			G4double safety);
-
-  G4double ComputeTruePathLengthLimit(const G4Track& track,
-				      G4PhysicsTable* theLambdaTable,
-				      G4double currentMinimalStep);
-
-  G4double ComputeGeomPathLength(G4double truePathLength);
-
-  G4double ComputeTrueStepLength(G4double geomStepLength);
-
-  G4double ComputeTheta0(G4double truePathLength,
-                         G4double KineticEnergy);
-
-private:
-
-  G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
-
-  G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
-
-  G4double SampleDisplacement();
-
-  G4double LatCorrelation();
-
-  inline G4double GetLambda(G4double kinEnergy);
-
-  inline void SetParticle(const G4ParticleDefinition*);
-
-  inline void UpdateCache();
-
-  //  hide assignment operator
-  G4UrbanMscModel2 & operator=(const  G4UrbanMscModel2 &right);
-  G4UrbanMscModel2(const  G4UrbanMscModel2&);
-
-  const G4ParticleDefinition* particle;
-  G4ParticleChangeForMSC*     fParticleChange;
-
-  G4PhysicsTable*             theLambdaTable;
-  const G4MaterialCutsCouple* couple;
-  G4LossTableManager*         theManager;
-
-  G4double mass;
-  G4double charge,ChargeSquare;
-  G4double masslimite,lambdalimit,fr;
-
-  G4double taubig;
-  G4double tausmall;
-  G4double taulim;
-  G4double currentTau;
-  G4double tlimit;
-  G4double tlimitmin;
-  G4double tlimitminfix;
-  G4double tgeom;
-
-  G4double geombig;
-  G4double geommin;
-  G4double geomlimit;
-  G4double skindepth;
-  G4double smallstep;
-
-  G4double presafety;
-
-  G4double lambda0;
-  G4double lambdaeff;
-  G4double tPathLength;
-  G4double zPathLength;
-  G4double par1,par2,par3;
-
-  G4double stepmin;
-
-  G4double currentKinEnergy;
-  G4double currentRange; 
-  G4double rangeinit;
-  G4double currentRadLength;
-
-  G4double theta0max,rellossmax;
-  G4double third;
-
-  G4int    currentMaterialIndex;
-
-  G4double y;
-  G4double Zold;
-  G4double Zeff,Z2,Z23,lnZ;
-  G4double coeffth1,coeffth2;
-  G4double coeffc1,coeffc2;
-  G4double scr1ini,scr2ini,scr1,scr2;
-
-  G4bool   isInitialized;
-  G4bool   inside;
-  G4bool   insideskin;
-};
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-G4double G4UrbanMscModel2::GetLambda(G4double e)
-{
-  G4double x;
-  if(theLambdaTable) {
-    G4bool b;
-    x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
-  } else {
-    x = CrossSection(couple,particle,e);
-  }
-  if(x > DBL_MIN) x = 1./x;
-  else            x = DBL_MAX;
-  return x;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-void G4UrbanMscModel2::SetParticle(const G4ParticleDefinition* p)
-{
-  if (p != particle) {
-    particle = p;
-    mass = p->GetPDGMass();
-    charge = p->GetPDGCharge()/eplus;
-    ChargeSquare = charge*charge;
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-inline
-void G4UrbanMscModel2::UpdateCache()                                   
-{
-    lnZ = std::log(Zeff);
-    //new correction in theta0 formula
-    coeffth1 = (1.-8.7780e-2/Zeff)*(0.87+0.03*lnZ);                   
-    coeffth2 = (4.0780e-2+1.7315e-4*Zeff)*(0.87+0.03*lnZ);              
-    // tail parameters
-    G4double lnZ1 = std::log(Zeff+1.);
-    coeffc1  = 2.943-0.197*lnZ1;                  
-    coeffc2  = 0.0987-0.0143*lnZ1;                              
-    // for single scattering
-    Z2 = Zeff*Zeff;
-    Z23 = std::exp(2.*lnZ/3.);
-    scr1     = scr1ini*Z23;
-    scr2     = scr2ini*Z2*ChargeSquare;
-                                              
-    Zold = Zeff;
-}
-
-#endif
-
Index: unk/source/processes/electromagnetic/standard/src/G4ComptonScattering52.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4ComptonScattering52.cc	(revision 1318)
+++ 	(revision )
@@ -1,488 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4ComptonScattering52.cc,v 1.7 2008/10/15 17:53:44 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// 
-//------------ G4ComptonScattering52 physics process -----------------------------
-//                   by Michel Maire, April 1996
-//
-// 28-05-96, DoIt() small change in ElecDirection, by M.Maire
-// 10-06-96, simplification in ComputeMicroscopicCrossSection(), by M.Maire
-// 21-06-96, SetCuts implementation, M.Maire
-// 13-09-96, small changes in DoIt for better efficiency. Thanks to P.Urban
-// 06-01-97, crossection table + meanfreepath table, M.Maire
-// 05-03-97, new Physics scheme, M.Maire
-// 28-03-97, protection in BuildPhysicsTable, M.Maire
-// 07-04-98, remove 'tracking cut' of the scattered gamma, MMa
-// 04-06-98, in DoIt, secondary production condition:
-//                                     range>std::min(threshold,safety)
-// 13-08-98, new methods SetBining()  PrintInfo()
-// 15-12-98, cross section=0 below 10 keV
-// 28-05-01, V.Ivanchenko minor changes to provide ANSI -wall compilation
-// 13-07-01, DoIt: suppression of production cut for the electron (mma)
-// 03-08-01, new methods Store/Retrieve PhysicsTable (mma)
-// 06-08-01, BuildThePhysicsTable() called from constructor (mma)
-// 17-09-01, migration of Materials to pure STL (mma)
-// 20-09-01, DoIt: fminimalEnergy = 1*eV (mma)
-// 01-10-01, come back to BuildPhysicsTable(const G4ParticleDefinition&)
-// 17-04-02, LowestEnergyLimit = 1*keV     
-// 26-05-04, cross section parametrization improved for low energy :
-//           Egamma <~ 15 keV (Laszlo) 
-// 08-11-04, Remove Store/Retrieve tables (V.Ivanchenko)
-// 04-05-05, Add 52 to class name (V.Ivanchenko)
-// -----------------------------------------------------------------------------
-
-#include "G4ComptonScattering52.hh"
-#include "G4UnitsTable.hh"
-#include "G4PhysicsTableHelper.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4ComptonScattering52::G4ComptonScattering52(const G4String& processName,
-    G4ProcessType type):G4VDiscreteProcess (processName, type),
-    theCrossSectionTable(NULL),
-    theMeanFreePathTable(NULL),
-    LowestEnergyLimit (  1*keV),
-    HighestEnergyLimit(100*GeV),
-    NumbBinTable(80),
-    fminimalEnergy(1*eV)
-{
-  SetProcessSubType(13);
-  G4cout << "!!! G4ComptonScattering52 is the obsolete process class and will be removed soon !!!"
-	 << G4endl;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- 
-// destructor
- 
-G4ComptonScattering52::~G4ComptonScattering52()
-{
-   if (theCrossSectionTable) {
-      theCrossSectionTable->clearAndDestroy();
-      delete theCrossSectionTable;
-   }
-
-   if (theMeanFreePathTable) {
-      theMeanFreePathTable->clearAndDestroy();
-      delete theMeanFreePathTable;
-   }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4bool G4ComptonScattering52::IsApplicable( const G4ParticleDefinition& particle)
-{
-   return ( &particle == G4Gamma::Gamma() ); 
-}
- 
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4ComptonScattering52::SetPhysicsTableBining(
-                                   G4double lowE, G4double highE, G4int nBins)
-{
-  LowestEnergyLimit = lowE; HighestEnergyLimit = highE; NumbBinTable = nBins;
-}  
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- 
-void G4ComptonScattering52::BuildPhysicsTable(const G4ParticleDefinition&)
-// Build cross section and mean free path tables
-{
-   G4double LowEdgeEnergy, Value;
-   G4PhysicsLogVector* ptrVector;
-
-// Build cross section per atom tables for the Compton Scattering process
-
-   if (theCrossSectionTable) {
-       theCrossSectionTable->clearAndDestroy(); delete theCrossSectionTable;}
-
-   theCrossSectionTable = new G4PhysicsTable(G4Element::GetNumberOfElements());
-   const G4ElementTable* theElementTable = G4Element::GetElementTable();
-   G4double AtomicNumber;
-   size_t J;
-
-   for ( J=0 ; J < G4Element::GetNumberOfElements(); J++ )
-       {
-        //create physics vector then fill it ....
-        ptrVector = new G4PhysicsLogVector(LowestEnergyLimit,HighestEnergyLimit,
-                                           NumbBinTable );
-        AtomicNumber = (*theElementTable)[J]->GetZ();
-
-        for ( G4int i = 0 ; i < NumbBinTable ; i++ )
-           {
-             LowEdgeEnergy = ptrVector->GetLowEdgeEnergy(i);
-             Value = ComputeCrossSectionPerAtom(LowEdgeEnergy, AtomicNumber);
-             ptrVector->PutValue(i,Value);
-           }
-
-        theCrossSectionTable->insertAt( J , ptrVector ) ;
-
-      }
-
-// Build mean free path table for the Compton Scattering process
-
-   if (theMeanFreePathTable) {
-       theMeanFreePathTable->clearAndDestroy(); delete theMeanFreePathTable;}
- 
-   theMeanFreePathTable= new G4PhysicsTable(G4Material::GetNumberOfMaterials());
-   const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable();
-   G4Material* material;
-
-   for ( J=0 ; J < G4Material::GetNumberOfMaterials(); J++ )  
-       { 
-        //create physics vector then fill it ....
-        ptrVector = new G4PhysicsLogVector(LowestEnergyLimit,HighestEnergyLimit,
-                                           NumbBinTable ) ;
-        material = (*theMaterialTable)[J];
-
-        for ( G4int i = 0 ; i < NumbBinTable ; i++ )      
-           {
-             LowEdgeEnergy = ptrVector->GetLowEdgeEnergy( i ) ;
-             Value = ComputeMeanFreePath( LowEdgeEnergy, material);  
-             ptrVector->PutValue( i , Value ) ;
-           }
-
-        theMeanFreePathTable->insertAt( J , ptrVector ) ;
-      }
-
-    PrintInfoDefinition();  
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4ComptonScattering52::ComputeCrossSectionPerAtom
-                              (G4double GammaEnergy, G4double Z)
- 
-// Calculates the cross section per atom in GEANT4 internal units.
-// A parametrized formula from L. Urban is used to estimate
-// the total cross section.
-// It gives a good description of the data from 10 keV to 100/Z GeV.
-// lower limit 1 keV now with a correction for low energy 
- 
-{
- G4double CrossSection = 0.0 ;
- if ( Z < 1. )                     return CrossSection;
- if ( GammaEnergy < 1.*keV       ) return CrossSection;
- if ( GammaEnergy > (100.*GeV/Z) ) return CrossSection;
-
- static const G4double a = 20.0 , b = 230.0 , c = 440.0;
-  
- static const G4double
- d1= 2.7965e-1*barn, d2=-1.8300e-1*barn, d3= 6.7527   *barn, d4=-1.9798e+1*barn,
- e1= 1.9756e-5*barn, e2=-1.0205e-2*barn, e3=-7.3913e-2*barn, e4= 2.7079e-2*barn,
- f1=-3.9178e-7*barn, f2= 6.8241e-5*barn, f3= 6.0480e-5*barn, f4= 3.0274e-4*barn;
-     
- G4double p1Z = Z*(d1 + e1*Z + f1*Z*Z), p2Z = Z*(d2 + e2*Z + f2*Z*Z),
-          p3Z = Z*(d3 + e3*Z + f3*Z*Z), p4Z = Z*(d4 + e4*Z + f4*Z*Z);
-
- G4double T0 = 15*keV; if (Z == 1.) T0 = 40*keV; 
-
- G4double X = max(GammaEnergy, T0) / electron_mass_c2;
- CrossSection = p1Z*log(1.+2*X)/X
-                + (p2Z + p3Z*X + p4Z*X*X)/(1. + a*X + b*X*X + c*X*X*X);
-		
- //  modification for low energy. (special case for Hydrogen)
- if (GammaEnergy < T0) {
-   G4double dT0 = 1.*keV;
-   X = (T0+dT0) / electron_mass_c2 ;
-   G4double sigma = p1Z*log(1.+2*X)/X
-                    + (p2Z + p3Z*X + p4Z*X*X)/(1. + a*X + b*X*X + c*X*X*X);
-   G4double c1 = -T0*(sigma-CrossSection)/(CrossSection*dT0);             
-   G4double c2 = 0.150; if (Z > 1.) c2 = 0.375-0.0556*log(Z);
-   G4double  y = log(GammaEnergy/T0);
-   CrossSection *= exp(-y*(c1+c2*y));          
-   }
-
- return CrossSection;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4ComptonScattering52::ComputeMeanFreePath(G4double GammaEnergy,
-                                                         G4Material* aMaterial)
-
-// returns the gamma mean free path in GEANT4 internal units
-
-{
-  const G4ElementVector* theElementVector = aMaterial->GetElementVector() ;
-  const G4double* NbOfAtomsPerVolume = aMaterial->GetVecNbOfAtomsPerVolume();
-
-  G4double SIGMA = 0.;
-
-  for ( size_t elm=0 ; elm < aMaterial->GetNumberOfElements() ; elm++ )
-      {
-        SIGMA += NbOfAtomsPerVolume[elm] * 
-                 ComputeCrossSectionPerAtom(GammaEnergy,
-                                            (*theElementVector)[elm]->GetZ());
-      }       
-  return SIGMA > DBL_MIN ? 1./SIGMA : DBL_MAX;
-}
-
- //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4ComptonScattering52::GetCrossSectionPerAtom(
-                                 G4DynamicParticle* aDynamicGamma,
-                                 G4Element*         anElement)
- 
-// gives the microscopic total cross section in GEANT4 internal units
-
-{
-   G4double crossSection;
-   G4double GammaEnergy = aDynamicGamma->GetKineticEnergy();
-   G4bool isOutRange ;
-   if (GammaEnergy < LowestEnergyLimit || GammaEnergy > HighestEnergyLimit)
-      crossSection = 0.;
-   else
-      crossSection = (*theCrossSectionTable)(anElement->GetIndex())->
-                                       GetValue(GammaEnergy, isOutRange);
-
-   return crossSection;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-
-G4double G4ComptonScattering52::GetMeanFreePath(const G4Track& aTrack,
-                                              G4double,
-                                              G4ForceCondition*)
-
-// returns the gamma mean free path in GEANT4 internal units
-
-{
-   const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle();
-   G4double GammaEnergy = aDynamicGamma->GetKineticEnergy();
-   G4Material* aMaterial = aTrack.GetMaterial();
-
-   G4double MeanFreePath;
-   G4bool isOutRange;
-
-   if (GammaEnergy > HighestEnergyLimit || GammaEnergy < LowestEnergyLimit)
-     MeanFreePath = DBL_MAX;
-   else
-     MeanFreePath = (*theMeanFreePathTable)(aMaterial->GetIndex())->
-                                       GetValue(GammaEnergy, isOutRange);
-   return MeanFreePath;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4VParticleChange* G4ComptonScattering52::PostStepDoIt(const G4Track& aTrack,
-                                                     const G4Step&  aStep)
-//
-// The scattered gamma energy is sampled according to Klein - Nishina formula.
-// The random number techniques of Butcher & Messel are used 
-// (Nuc Phys 20(1960),15).
-// GEANT4 internal units
-//
-// Note : Effects due to binding of atomic electrons are negliged.
- 
-{
-   aParticleChange.Initialize(aTrack);
-
-   const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle();
-   G4double GammaEnergy0 = aDynamicGamma->GetKineticEnergy();
-   G4double E0_m = GammaEnergy0 / electron_mass_c2 ;
-
-   G4ParticleMomentum GammaDirection0 = aDynamicGamma->GetMomentumDirection();
-
-   //
-   // sample the energy rate of the scattered gamma 
-   //
-
-   G4double epsilon, epsilonsq, onecost, sint2, greject ;
-
-   G4double epsilon0 = 1./(1. + 2*E0_m) , epsilon0sq = epsilon0*epsilon0;
-   G4double alpha1   = - log(epsilon0)  , alpha2 = 0.5*(1.- epsilon0sq);
-
-   do {
-       if ( alpha1/(alpha1+alpha2) > G4UniformRand() )
-            { epsilon   = exp(-alpha1*G4UniformRand());   // epsilon0**r
-              epsilonsq = epsilon*epsilon; }
-       else {
-             epsilonsq = epsilon0sq + (1.- epsilon0sq)*G4UniformRand();
-             epsilon   = sqrt(epsilonsq);
-       };
-       onecost = (1.- epsilon)/(epsilon*E0_m);
-       sint2   = onecost*(2.-onecost);
-       greject = 1. - epsilon*sint2/(1.+ epsilonsq);
-   } while (greject < G4UniformRand());
- 
-   //
-   // scattered gamma angles. ( Z - axis along the parent gamma)
-   //
-
-   G4double cosTeta = 1. - onecost , sinTeta = sqrt (sint2);
-   G4double Phi     = twopi * G4UniformRand();
-   G4double dirx = sinTeta*cos(Phi), diry = sinTeta*sin(Phi), dirz = cosTeta;
-
-   //
-   // update G4VParticleChange for the scattered gamma
-   //
-   
-   G4ThreeVector GammaDirection1 ( dirx,diry,dirz );
-   GammaDirection1.rotateUz(GammaDirection0);
-   aParticleChange.ProposeMomentumDirection( GammaDirection1 );
-   G4double GammaEnergy1 = epsilon*GammaEnergy0;
-   G4double localEnergyDeposit = 0.;
-   
-   if (GammaEnergy1 > fminimalEnergy)
-     {
-       aParticleChange.ProposeEnergy( GammaEnergy1 );
-     }
-   else
-     {
-       localEnergyDeposit += GammaEnergy1;    
-       aParticleChange.ProposeEnergy(0.) ;
-       aParticleChange.ProposeTrackStatus(fStopAndKill);
-     }
-       
-   //
-   // kinematic of the scattered electron
-   //
-
-   G4double ElecKineEnergy = GammaEnergy0 - GammaEnergy1;
-
-    if (ElecKineEnergy > fminimalEnergy)	
-      {
-        G4double ElecMomentum = sqrt(ElecKineEnergy*
-	                            (ElecKineEnergy+2.*electron_mass_c2));
-        G4ThreeVector ElecDirection (
-        (GammaEnergy0*GammaDirection0 - GammaEnergy1*GammaDirection1)
-	*(1./ElecMomentum) );
-
-        // create G4DynamicParticle object for the electron.
-        G4DynamicParticle* aElectron= new G4DynamicParticle(
-	                   G4Electron::Electron(),ElecDirection,ElecKineEnergy);
-
-        aParticleChange.SetNumberOfSecondaries(1);
-        aParticleChange.AddSecondary( aElectron );
-      }
-    else
-      {
-        aParticleChange.SetNumberOfSecondaries(0);
-	localEnergyDeposit += ElecKineEnergy;
-      }
-    aParticleChange.ProposeLocalEnergyDeposit (localEnergyDeposit);
-
-   //  Reset NbOfInteractionLengthLeft and return aParticleChange
-   return G4VDiscreteProcess::PostStepDoIt( aTrack, aStep);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4bool G4ComptonScattering52::StorePhysicsTable(const G4ParticleDefinition* particle,
-				              const G4String& directory,
-				                    G4bool          ascii)
-{
-  G4String filename;
-
-  // store cross section table
-  filename = GetPhysicsTableFileName(particle,directory,"CrossSection",ascii);
-  if ( !theCrossSectionTable->StorePhysicsTable(filename, ascii) ){
-    G4cout << " FAIL theCrossSectionTable->StorePhysicsTable in " << filename
-           << G4endl;
-    return false;
-  }
-
-  // store mean free path table
-  filename = GetPhysicsTableFileName(particle,directory,"MeanFreePath",ascii);
-  if ( !theMeanFreePathTable->StorePhysicsTable(filename, ascii) ){
-    G4cout << " FAIL theMeanFreePathTable->StorePhysicsTable in " << filename
-           << G4endl;
-    return false;
-  }
-
-  G4cout << GetProcessName() << " for " << particle->GetParticleName()
-         << ": Success to store the PhysicsTables in "
-         << directory << G4endl;
-  return true;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-/*
-G4bool G4ComptonScattering52::RetrievePhysicsTable(const G4ParticleDefinition* particle,
-					         const G4String& directory,
-				                 G4bool          ascii)
-{
-  // delete theCrossSectionTable and theMeanFreePathTable
-  if (theCrossSectionTable != 0) {
-    theCrossSectionTable->clearAndDestroy();
-    delete theCrossSectionTable;
-  }
-  if (theMeanFreePathTable != 0) {
-    theMeanFreePathTable->clearAndDestroy();
-    delete theMeanFreePathTable;
-  }
-
-  G4String filename;
-
-  // retreive cross section table
-  filename = GetPhysicsTableFileName(particle,directory,"CrossSection",ascii);
-  theCrossSectionTable = new G4PhysicsTable(G4Element::GetNumberOfElements());
-  if ( !G4PhysicsTableHelper::RetrievePhysicsTable(filename, ascii) ){
-    G4cout << " FAIL theCrossSectionTable->RetrievePhysicsTable in " << filename
-           << G4endl;
-    return false;
-  }
-
-  // retreive mean free path table
-  filename = GetPhysicsTableFileName(particle,directory,"MeanFreePath",ascii);
-  theMeanFreePathTable = new G4PhysicsTable(G4Material::GetNumberOfMaterials());
-  if ( !G4PhysicsTableHelper::RetrievePhysicsTable(filename, ascii) ){
-    G4cout << " FAIL theMeanFreePathTable->RetrievePhysicsTable in " << filename
-           << G4endl;
-    return false;
-  }
-
-  G4cout << GetProcessName() << " for " << particle->GetParticleName()
-         << ": Success to retrieve the PhysicsTables from "
-         << directory << G4endl;
-  return true;
-}
-*/
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4ComptonScattering52::PrintInfoDefinition()
-{
-  G4String comments = "Total cross sections from a parametrisation. ";
-           comments += "Good description from 10 KeV to (100/Z) GeV. \n";
-           comments += "       Scattered gamma energy according Klein-Nishina.";
-                     
-  G4cout << G4endl << GetProcessName() << ":  " << comments
-         << "\n        PhysicsTables from "
-	           << G4BestUnit(LowestEnergyLimit,"Energy")
-         << " to " << G4BestUnit(HighestEnergyLimit,"Energy") 
-         << " in " << NumbBinTable << " bins. \n";
-  G4cout << "        WARNING: This process is obsolete and will be soon removed" 
-	 << G4endl;
-}         
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Index: unk/source/processes/electromagnetic/standard/src/G4MscModel71.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4MscModel71.cc	(revision 1318)
+++ 	(revision )
@@ -1,730 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MscModel71.cc,v 1.8 2009/11/01 13:05:01 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-// GEANT4 Class file
-//
-//
-// File name:   G4MscModel71
-//
-// Author:      Laszlo Urban
-//
-// Creation date: 03.03.2001
-//
-// Modifications:
-//
-// 27-03-03 Move model part from G4MultipleScattering (V.Ivanchenko)
-// 23-05-03 important change in angle distribution for muons/hadrons
-//          the central part now is similar to the Highland parametrization +
-//          minor correction in angle sampling algorithm (for all particles)
-//          (L.Urban)
-// 30-05-03 misprint in SampleCosineTheta corrected(L.Urban)
-// 27-03-03 Rename (V.Ivanchenko)
-// 05-08-03 angle distribution has been modified (L.Urban)
-// 06-11-03 precision problems solved for high energy (PeV) particles
-//          change in the tail of the angular distribution
-//          highKinEnergy is set to 100 PeV (L.Urban) 
-//
-// 10-11-03 highKinEnergy is set back to 100 TeV, some tail tuning +
-//          cleaning (L.Urban) 
-// 26-11-03 correction in TrueStepLength : 
-//          trueLength <= currentRange (L.Urban) 
-// 01-03-04 signature changed in SampleCosineTheta,
-//          energy dependence calculations has been simplified,
-// 11-03-04 corrections in GeomPathLength,TrueStepLength,
-//          SampleCosineTheta
-// 23-04-04 true -> geom and geom -> true transformation has been
-//          rewritten, changes in the angular distribution (L.Urban)
-// 19-07-04 correction in SampleCosineTheta in order to avoid
-//          num. precision problems at high energy/small step(L.Urban) 
-// 17-08-04 changes in the angle distribution (slightly modified
-//          Highland formula for the width of the central part,
-//          changes in the numerical values of some other parameters)
-//          ---> approximately step independent distribution (L.Urban)
-// 21-09-04 change in the tail of the angular distribution (L.Urban)
-//
-// 03-11-04 precision problem for very high energy ions and small stepsize
-//          solved in SampleCosineTheta (L.Urban).
-// 15-04-05 optimize internal interface - add SampleSecondaries method (V.Ivanchenko)
-// 03-10-05 Model is freezed with the name McsModel71 (V.Ivanchenko)
-// 17-02-06 Save table of transport cross sections not mfp (V.Ivanchenko)
-//
-
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and others
-
-// -------------------------------------------------------------------
-//
-
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-#include "G4MscModel71.hh"
-#include "Randomize.hh"
-#include "G4Electron.hh"
-#include "G4LossTableManager.hh"
-#include "G4PhysicsTable.hh"
-#include "G4ParticleChangeForMSC.hh"
-#include "G4TransportationManager.hh"
-#include "G4Navigator.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-using namespace std;
-
-G4MscModel71::G4MscModel71(G4double& m_dtrl, G4double& m_NuclCorrPar,
-			   G4double& m_FactPar, G4double& m_factail,
-			   G4bool& m_samplez, const G4String& nam)
-  : G4VEmModel(nam),
-  taubig(8.0),
-  tausmall(1.e-20),
-  taulim(1.e-6),
-  dtrl(m_dtrl),
-  NuclCorrPar (m_NuclCorrPar),
-  FactPar(m_FactPar),
-  factail(m_factail),
-  samplez(m_samplez),
-  isInitialized(false)
-{
-  stepmin       = 1.e-6*mm;
-  currentRange  = 0.;
-  G4cout << G4endl;
-  G4cout << "!!! G4MscModel71 class is obsolete and will be removed for the next major Geant4 release !!!" << G4endl;
-  G4cout << "!!! Please use other models (G4UrbanMscModel90, 92, 93) !!!" << G4endl;
-  G4cout << G4endl;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4MscModel71::~G4MscModel71()
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4MscModel71::Initialise(const G4ParticleDefinition* p,
-			      const G4DataVector&)
-{
-  if(isInitialized) return;
-  // set values of some data members
-  sigmafactor = twopi*classic_electr_radius*classic_electr_radius;
-  particle = p;
-  mass = particle->GetPDGMass();
-  charge = particle->GetPDGCharge()/eplus;
-  b = 1. ;
-  xsi = 3.00 ;
-
-  if(pParticleChange)
-    fParticleChange = static_cast<G4ParticleChangeForMSC*>(pParticleChange);
-  else
-    fParticleChange = new G4ParticleChangeForMSC();
-
-  navigator = G4TransportationManager::GetTransportationManager()
-    ->GetNavigatorForTracking();
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MscModel71::ComputeCrossSectionPerAtom(
-                             const G4ParticleDefinition* part,
-                                   G4double KineticEnergy,
-                                   G4double AtomicNumber,
-                                   G4double AtomicWeight, 
-				   G4double,
-				   G4double)
-{
-  const G4double epsfactor = 2.*electron_mass_c2*electron_mass_c2*
-                             Bohr_radius*Bohr_radius/(hbarc*hbarc);
-  const G4double epsmin = 1.e-4 , epsmax = 1.e10;
-
-  const G4double Zdat[15] = { 4., 6.,13.,20.,26.,29.,32.,38.,47.,
-                             50.,56.,64.,74.,79.,82. };
-
-  const G4double Tdat[23] = {0.0001*MeV,0.0002*MeV,0.0004*MeV,0.0007*MeV,
-                             0.001*MeV,0.002*MeV,0.004*MeV,0.007*MeV,
-                             0.01*MeV,0.02*MeV,0.04*MeV,0.07*MeV,
-                             0.1*MeV,0.2*MeV,0.4*MeV,0.7*MeV,
-                             1.*MeV,2.*MeV,4.*MeV,7.*MeV,10.*MeV,20.*MeV,
-                             10000.0*MeV};
-
- // corr. factors for e-/e+ lambda
-          G4double celectron[15][23] =
-          {{1.125,1.072,1.051,1.047,1.047,1.050,1.052,1.054,
-            1.054,1.057,1.062,1.069,1.075,1.090,1.105,1.111,
-            1.112,1.108,1.100,1.093,1.089,1.087,0.7235     },
-           {1.408,1.246,1.143,1.096,1.077,1.059,1.053,1.051,
-            1.052,1.053,1.058,1.065,1.072,1.087,1.101,1.108,
-            1.109,1.105,1.097,1.090,1.086,1.082,0.7925     },
-           {2.833,2.268,1.861,1.612,1.486,1.309,1.204,1.156,
-            1.136,1.114,1.106,1.106,1.109,1.119,1.129,1.132,
-            1.131,1.124,1.113,1.104,1.099,1.098,0.9147     },
-           {3.879,3.016,2.380,2.007,1.818,1.535,1.340,1.236,
-            1.190,1.133,1.107,1.099,1.098,1.103,1.110,1.113,
-            1.112,1.105,1.096,1.089,1.085,1.098,0.9700     },
-           {6.937,4.330,2.886,2.256,1.987,1.628,1.395,1.265,
-            1.203,1.122,1.080,1.065,1.061,1.063,1.070,1.073,
-            1.073,1.070,1.064,1.059,1.056,1.056,1.0022     },
-           {9.616,5.708,3.424,2.551,2.204,1.762,1.485,1.330,
-            1.256,1.155,1.099,1.077,1.070,1.068,1.072,1.074,
-            1.074,1.070,1.063,1.059,1.056,1.052,1.0158     },
-           {11.72,6.364,3.811,2.806,2.401,1.884,1.564,1.386,
-            1.300,1.180,1.112,1.082,1.073,1.066,1.068,1.069,
-            1.068,1.064,1.059,1.054,1.051,1.050,1.0284     },
-           {18.08,8.601,4.569,3.183,2.662,2.025,1.646,1.439,
-            1.339,1.195,1.108,1.068,1.053,1.040,1.039,1.039,
-            1.039,1.037,1.034,1.031,1.030,1.036,1.0515     },
-           {18.22,10.48,5.333,3.713,3.115,2.367,1.898,1.631,
-            1.498,1.301,1.171,1.105,1.077,1.048,1.036,1.033,
-            1.031,1.028,1.024,1.022,1.021,1.024,1.0834     },
-           {14.14,10.65,5.710,3.929,3.266,2.453,1.951,1.669,
-            1.528,1.319,1.178,1.106,1.075,1.040,1.027,1.022,
-            1.020,1.017,1.015,1.013,1.013,1.020,1.0937     },
-           {14.11,11.73,6.312,4.240,3.478,2.566,2.022,1.720,
-            1.569,1.342,1.186,1.102,1.065,1.022,1.003,0.997,
-            0.995,0.993,0.993,0.993,0.993,1.011,1.1140     },
-           {22.76,20.01,8.835,5.287,4.144,2.901,2.219,1.855,
-            1.677,1.410,1.224,1.121,1.073,1.014,0.986,0.976,
-            0.974,0.972,0.973,0.974,0.975,0.987,1.1410     },
-           {50.77,40.85,14.13,7.184,5.284,3.435,2.520,2.059,
-            1.837,1.512,1.283,1.153,1.091,1.010,0.969,0.954,
-            0.950,0.947,0.949,0.952,0.954,0.963,1.1750     },
-           {65.87,59.06,15.87,7.570,5.567,3.650,2.682,2.182,
-            1.939,1.579,1.325,1.178,1.108,1.014,0.965,0.947,
-            0.941,0.938,0.940,0.944,0.946,0.954,1.1922     },
-           {55.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239,
-            1.985,1.609,1.343,1.188,1.113,1.013,0.960,0.939,
-            0.933,0.930,0.933,0.936,0.939,0.949,1.2026     }};
-           G4double cpositron[15][23] = {
-           {2.589,2.044,1.658,1.446,1.347,1.217,1.144,1.110,
-            1.097,1.083,1.080,1.086,1.092,1.108,1.123,1.131,
-            1.131,1.126,1.117,1.108,1.103,1.100,0.7235     },
-           {3.904,2.794,2.079,1.710,1.543,1.325,1.202,1.145,
-            1.122,1.096,1.089,1.092,1.098,1.114,1.130,1.137,
-            1.138,1.132,1.122,1.113,1.108,1.102,0.7925     },
-           {7.970,6.080,4.442,3.398,2.872,2.127,1.672,1.451,
-            1.357,1.246,1.194,1.179,1.178,1.188,1.201,1.205,
-            1.203,1.190,1.173,1.159,1.151,1.145,0.9147     },
-           {9.714,7.607,5.747,4.493,3.815,2.777,2.079,1.715,
-            1.553,1.353,1.253,1.219,1.211,1.214,1.225,1.228,
-            1.225,1.210,1.191,1.175,1.166,1.174,0.9700     },
-           {17.97,12.95,8.628,6.065,4.849,3.222,2.275,1.820,
-            1.624,1.382,1.259,1.214,1.202,1.202,1.214,1.219,
-            1.217,1.203,1.184,1.169,1.160,1.151,1.0022     },
-           {24.83,17.06,10.84,7.355,5.767,3.707,2.546,1.996,
-            1.759,1.465,1.311,1.252,1.234,1.228,1.238,1.241,
-            1.237,1.222,1.201,1.184,1.174,1.159,1.0158     },
-           {23.26,17.15,11.52,8.049,6.375,4.114,2.792,2.155,
-            1.880,1.535,1.353,1.281,1.258,1.247,1.254,1.256,
-            1.252,1.234,1.212,1.194,1.183,1.170,1.0284     },
-           {22.33,18.01,12.86,9.212,7.336,4.702,3.117,2.348,
-            2.015,1.602,1.385,1.297,1.268,1.251,1.256,1.258,
-            1.254,1.237,1.214,1.195,1.185,1.179,1.0515     },
-           {33.91,24.13,15.71,10.80,8.507,5.467,3.692,2.808,
-            2.407,1.873,1.564,1.425,1.374,1.330,1.324,1.320,
-            1.312,1.288,1.258,1.235,1.221,1.205,1.0834     },
-           {32.14,24.11,16.30,11.40,9.015,5.782,3.868,2.917,
-            2.490,1.925,1.596,1.447,1.391,1.342,1.332,1.327,
-            1.320,1.294,1.264,1.240,1.226,1.214,1.0937     },
-           {29.51,24.07,17.19,12.28,9.766,6.238,4.112,3.066,
-            2.602,1.995,1.641,1.477,1.414,1.356,1.342,1.336,
-            1.328,1.302,1.270,1.245,1.231,1.233,1.1140     },
-           {38.19,30.85,21.76,15.35,12.07,7.521,4.812,3.498,
-            2.926,2.188,1.763,1.563,1.484,1.405,1.382,1.371,
-            1.361,1.330,1.294,1.267,1.251,1.239,1.1410     },
-           {49.71,39.80,27.96,19.63,15.36,9.407,5.863,4.155,
-            3.417,2.478,1.944,1.692,1.589,1.480,1.441,1.423,
-            1.409,1.372,1.330,1.298,1.280,1.258,1.1750     },
-           {59.25,45.08,30.36,20.83,16.15,9.834,6.166,4.407,
-            3.641,2.648,2.064,1.779,1.661,1.531,1.482,1.459,
-            1.442,1.400,1.354,1.319,1.299,1.272,1.1922     },
-           {56.38,44.29,30.50,21.18,16.51,10.11,6.354,4.542,
-            3.752,2.724,2.116,1.817,1.692,1.554,1.499,1.474,
-            1.456,1.412,1.364,1.328,1.307,1.282,1.2026     }};
-
-  G4double sigma;
-  if (part != particle ) {
-    particle = part;
-    mass = particle->GetPDGMass();
-    charge = particle->GetPDGCharge()/eplus;
-  }
-
-  G4double Z23 = 2.*log(AtomicNumber)/3.; Z23 = exp(Z23);
-
-  // correction if particle .ne. e-/e+
-  // compute equivalent kinetic energy
-  // lambda depends on p*beta ....
-
-  G4double eKineticEnergy = KineticEnergy;
-
-  if((particle->GetParticleName() != "e-") &&
-     (particle->GetParticleName() != "e+") )
-  {
-     G4double TAU = KineticEnergy/mass ;
-     G4double c = mass*TAU*(TAU+2.)/(electron_mass_c2*(TAU+1.)) ;
-     G4double w = c-2. ;
-     G4double tau = 0.5*(w+sqrt(w*w+4.*c)) ;
-     eKineticEnergy = electron_mass_c2*tau ;
-  }
-
-  G4double ChargeSquare = charge*charge;
-
-  G4double eTotalEnergy = eKineticEnergy + electron_mass_c2 ;
-  G4double beta2 = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(eTotalEnergy*eTotalEnergy);
-  G4double bg2   = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(electron_mass_c2*electron_mass_c2);
-
-  G4double eps = epsfactor*bg2/Z23;
-
-  if     (eps<epsmin)  sigma = 2.*eps*eps;
-  else if(eps<epsmax)  sigma = log(1.+2.*eps)-2.*eps/(1.+2.*eps);
-  else                 sigma = log(2.*eps)-1.+1./eps;
-
-  sigma *= ChargeSquare*AtomicNumber*AtomicNumber/(beta2*bg2);
-
-  // nuclear size effect correction for high energy
-  // ( a simple approximation at present)
-  G4double corrnuclsize,a,w1,w2,w;
-
-  G4double x0 = 1. - NuclCorrPar*mass/(KineticEnergy*
-               exp(log(AtomicWeight/(g/mole))/3.));
-  if ( x0 < -1. || eKineticEnergy  <= 10.*MeV)
-      {
-        x0 = -1.;
-        corrnuclsize = 1.;
-      }
-  else
-      {
-        a = 1.+1./eps;
-        if (eps > epsmax) w1=log(2.*eps)+1./eps-3./(8.*eps*eps);
-        else              w1=log((a+1.)/(a-1.))-2./(a+1.);
-        w = 1./((1.-x0)*eps);
-        if (w < epsmin)   w2=-log(w)-1.+2.*w-1.5*w*w;
-        else              w2 = log((a-x0)/(a-1.))-(1.-x0)/(a-x0);
-        corrnuclsize = w1/w2;
-        corrnuclsize = exp(-FactPar*mass/KineticEnergy)*
-                      (corrnuclsize-1.)+1.;
-      }
-
-  // interpolate in AtomicNumber and beta2
-  // get bin number in Z
-  G4int iZ = 14;
-  while ((iZ>=0)&&(Zdat[iZ]>=AtomicNumber)) iZ -= 1;
-  if (iZ==14)                               iZ = 13;
-  if (iZ==-1)                               iZ = 0 ;
-
-  G4double Z1 = Zdat[iZ];
-  G4double Z2 = Zdat[iZ+1];
-  G4double ratZ = (AtomicNumber-Z1)/(Z2-Z1);
-
-  // get bin number in T (beta2)
-  G4int iT = 22;
-  while ((iT>=0)&&(Tdat[iT]>=eKineticEnergy)) iT -= 1;
-  if(iT==22)                                  iT = 21;
-  if(iT==-1)                                  iT = 0 ;
-
-  //  calculate betasquare values
-  G4double T = Tdat[iT],   E = T + electron_mass_c2;
-  G4double b2small = T*(E+electron_mass_c2)/(E*E);
-  T = Tdat[iT+1]; E = T + electron_mass_c2;
-  G4double b2big = T*(E+electron_mass_c2)/(E*E);
-  G4double ratb2 = (beta2-b2small)/(b2big-b2small);
-  G4double c1,c2,cc1,cc2,corr;
-  if (charge < 0.)
-    {
-       c1 = celectron[iZ][iT];
-       c2 = celectron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = celectron[iZ][iT+1];
-       c2 = celectron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-       sigma /= corr;
-    }
-
-  if (charge > 0.)
-    {
-       c1 = cpositron[iZ][iT];
-       c2 = cpositron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = cpositron[iZ][iT+1];
-       c2 = cpositron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-       sigma /= corr;
-    }
-
-  sigma *= sigmafactor;
-
-  //  nucl. size correction for particles other than e+/e- only at present !!!!
-  if((particle->GetParticleName() != "e-") &&
-     (particle->GetParticleName() != "e+")   )
-     sigma /= corrnuclsize;
-  //  G4cout << "e= " << KineticEnergy << " sigma= " << sigma << G4endl;
-
-  return sigma;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MscModel71::GeomPathLength(
-                          G4PhysicsTable* theLambdaTable,
-                    const G4MaterialCutsCouple* couple,
-                    const G4ParticleDefinition* theParticle,
-                          G4double& T0,
-                          G4double lambda,
-                          G4double range,
-                          G4double truePathLength)
-{
-  //  do the true -> geom transformation
-  const G4double  ztmax = 101./103. ;
-  if (theParticle != particle ) {
-    particle = theParticle;
-    mass = particle->GetPDGMass();
-    charge = particle->GetPDGCharge()/eplus;
-  }
-  currentKinEnergy = T0;
-  currentRange = range ;
-  currentRadLength = couple->GetMaterial()->GetRadlen();
-
-  lambda0 = lambda;
-  par1 = -1. ;  
-  par2 = par3 = 0. ;  
-  tPathLength = truePathLength;
-
-  // this correction needed to run MSC with eIoni and eBrem inactivated
-  // and makes no harm for a normal run
-  if(tPathLength > range)
-    tPathLength = range ;
-
-  G4double tau   = tPathLength/lambda0 ;
-
-  if (tau <= tausmall) return tPathLength;
-
-  G4double zmean = tPathLength;
-  if (tPathLength < range*dtrl) {
-    zmean = lambda0*(1.-exp(-tau));
-    if(tau < taulim) zmean = tPathLength*(1.-0.5*tPathLength/lambda0) ;
-  } else if(T0 < mass) {
-    par1 = 1./range ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    zmean = (1.-exp(par3*log(1.-tPathLength/range)))/(par1*par3) ;
-  } else {
-    G4LossTableManager* theManager = G4LossTableManager::Instance();
-    G4double T1 = theManager->GetEnergy(particle,range-tPathLength,couple);
-    G4double lambda1 ;
-    if (theLambdaTable) {
-      G4bool bb;
-      lambda1 = ((*theLambdaTable)[couple->GetIndex()])->GetValue(T1,bb);
-    } else {
-      lambda1 = CrossSection(couple,particle,T1,0.0,1.0);
-    }
-    lambda1 = 1.0/lambda1;
-    par1 = (lambda0-lambda1)/(lambda0*tPathLength) ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    zmean = (1.-exp(par3*log(lambda1/lambda0)))/(par1*par3) ;
-  }
-
-  //  sample z
-  G4double zPathLength = zmean ;
-  G4double zt = zmean/tPathLength ;
-  if (tPathLength >= stepmin && samplez && zt > 0.5 && zt < ztmax)
-  {
-    G4double cz = 0.5*(3.*zt-1.)/(1.-zt) ;
-    G4double cz1 = 1.+cz ;
-    G4double u0 = cz/cz1 ;
-    G4double u,grej ;
-    do {
-        u = exp(log(G4UniformRand())/cz1) ;
-        grej = exp(cz*log(u/u0))*(1.-u)/(1.-u0) ;
-      } while (grej < G4UniformRand()) ;
-   zPathLength = tPathLength*u ;
-  }
-
-  return zPathLength ;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MscModel71::TrueStepLength(G4double geomStepLength)
-{
-  G4double trueLength = geomStepLength;
-  trueLength = geomStepLength;
-  if(geomStepLength > lambda0*tausmall)
-  {
-    if(par1 <  0.)
-      trueLength = -lambda0*log(1.-geomStepLength/lambda0) ;
-    else 
-    {
-      if(par1*par3*geomStepLength < 1.)
-        trueLength = (1.-exp(log(1.-par1*par3*geomStepLength)/par3))/par1 ;
-      else 
-        trueLength = currentRange ;
-    }  
-  }
-
-  if(trueLength > tPathLength) trueLength = tPathLength;
-  if(trueLength > currentRange) trueLength = currentRange ;
-  if(trueLength < geomStepLength) trueLength = geomStepLength;
-
-  return trueLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4MscModel71::SampleSecondaries(std::vector<G4DynamicParticle*>*,
-				     const G4MaterialCutsCouple*,
-				     const G4DynamicParticle* dynParticle,
-				     G4double truestep,
-				     G4double safety)
-{
-  G4double kineticEnergy = dynParticle->GetKineticEnergy();
-  if(kineticEnergy <= 0.0) return;
-
-  G4double cth  = SampleCosineTheta(truestep,kineticEnergy);
-  G4double sth  = sqrt((1.0 - cth)*(1.0 + cth));
-  G4double phi  = twopi*G4UniformRand();
-  G4double dirx = sth*cos(phi);
-  G4double diry = sth*sin(phi);
-
-  G4ThreeVector oldDirection = dynParticle->GetMomentumDirection();
-  G4ThreeVector newDirection(dirx,diry,cth);
-  newDirection.rotateUz(oldDirection);
-  fParticleChange->ProposeMomentumDirection(newDirection);
-
-  /*
-    const G4ParticleDefinition* pd = dynParticle->GetDefinition();
-    G4cout << "G4MscModel71: Sample secondary; E(MeV)= " << kineticEnergy/MeV
-           << " MeV; step(mm)= " << truestep/mm
-           << ", safety(mm)= " <<  safety/mm << " " << pd->GetParticleName()
-           << G4endl;
-  */
-
-  if (latDisplasment && safety > 0.0) {
-
-    G4double r = SampleDisplacement();
-    if (r > safety) r = safety;
-
-    // sample direction of lateral displacement
-    G4double phi  = twopi*G4UniformRand();
-    G4double dirx = std::cos(phi);
-    G4double diry = std::sin(phi);
-
-    G4ThreeVector newPosition(dirx,diry,0.0);
-    newPosition.rotateUz(oldDirection);
-
-    // compute new endpoint of the Step
-    newPosition *= r;
-    newPosition += *(fParticleChange->GetProposedPosition());
-
-    navigator->LocateGlobalPointWithinVolume(newPosition);
-
-    fParticleChange->ProposePosition(newPosition);
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MscModel71::SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy)
-{
-  G4double cth = 1. ;
-  G4double tau = trueStepLength/lambda0 ;
-
-  if(trueStepLength >= currentRange*dtrl) {
-    if(par1*trueStepLength < 1.)
-      tau = -par2*log(1.-par1*trueStepLength) ;
-    else
-      tau = taubig ;
-  }
-  currentTau = tau ;
-
-  if(trueStepLength < stepmin)
-    cth = exp(-tau) ;
-  else
-  {
-    if (tau >= taubig) cth = -1.+2.*G4UniformRand();
-    else if (tau >= tausmall)
-    {
-        G4double a ;
-
-        // for all particles take the width of the central part
-        //  from a  parametrization similar to the Highland formula
-        // ( Highland formula: Particle Physics Booklet, July 2002, eq. 26.10)
-        // here : theta0 = 13.6*MeV*Q*(t/X0)**0.555/(beta*cp) 
-        const G4double c_highland = 13.6*MeV, corr_highland=0.555 ;
-        G4double Q = std::abs(charge) ;
-        G4double xx0 = trueStepLength/currentRadLength;
-        G4double betacp = sqrt(currentKinEnergy*(currentKinEnergy+2.*mass)*
-                               KineticEnergy*(KineticEnergy+2.*mass)/
-                               ((currentKinEnergy+mass)*(KineticEnergy+mass))) ;
-        G4double theta0 = c_highland*Q*exp(corr_highland*log(xx0))/betacp ;
-
-        if(theta0 > taulim) a = 0.5/(1.-cos(theta0)) ;
-        else                a = 1.0/(theta0*theta0) ;
-
-        G4double xmeanth = exp(-tau);
-        G4double xmeanth1 = 1.-xmeanth ;
-        if(currentTau < taulim) xmeanth1 = tau ;	  
-
-        const G4double x1fac1 = exp(-xsi) ;
-        const G4double x1fac2 = (1.-(1.+xsi)*x1fac1)/(1.-x1fac1) ;
-        const G4double x1fac3 = 1.3      ; 
-
-	G4double ea,eaa,xmean1 ;
-	G4double c = 2.,b1 = 2., bx = 2.,
-	         eb1 = b1, ebx = b1, xmean2 = 0. ;
-        G4double prob = 1., qprob ;		 
-        G4double x0 = 1.-xsi/a;
-      	G4double oneminusx0=xsi/a ;
-	G4double oneplusx0=2.+xsi/a ;
-
-        G4double f1x0=1., f2x0=1. ;
-        const G4double tau0 = 0.10 ;
-        if(tau > tau0)
-        {
-         // 1 model function
-          a = 1./xmeanth1 ;
-          ea = exp(-2.*a) ;
-          eaa= 1.-ea ;
-          xmean1 = 1.-1./a+2.*ea/eaa ;
-          prob = 1. ;
-          qprob = 1. ;
-        }
-        else if (x0 <= -1.)
-        {
-          // 2 model fuctions only
-          // in order to have xmean1 > xmeanth -> qprob < 1
-          x0 = -1.;
-
-          if( a < 1./xmeanth1)
-	    a = 1./xmeanth1 ;
-          
-	  oneminusx0 = 1.-x0 ;
-	  oneplusx0 =  1.+x0 ;
-          ea = exp(-a*oneminusx0);
-          eaa = 1.-ea ;
-          xmean1 = 1.-1./a+oneminusx0*ea/eaa ;
-          qprob = xmeanth/xmean1 ;
-
-        }
-        else
-        {
-          // 3 model fuctions
-          // in order to have xmean1 > xmeanth
-          if((1.-x1fac2/a) < xmeanth)
-          {
-            a = x1fac3*x1fac2/xmeanth1 ;
-	    x0 = 1.-xsi/a ;
-	    oneminusx0=xsi/a ;
-	    oneplusx0=2.-xsi/a ;
-          }
-
-          ea = x1fac1 ;
-          eaa = 1.-ea ;
-          xmean1 = 1.-x1fac2/a ;
-
-          const G4double fctail = factail*1.0 ;
-          c = 2.+fctail*tau ;
-          G4double c1 = c-1. ;
-          G4double c2 = c-2. ;
-          if(c2 == 0.) c2 = fctail*tausmall ;            
-
-          b = 1.+(c-xsi)/a ;
-
-          b1 = b+1. ;
-          bx = c/a ;
-          eb1=exp((c1)*log(b1)) ;
-          ebx=exp((c1)*log(bx)) ;
-          xmean2 = (x0*eb1+ebx-(eb1*bx-b1*ebx)/c2)/(eb1-ebx) ;
-
-          f1x0 = a*ea/eaa ;
-          f2x0 = c1*eb1*ebx/(eb1-ebx)/
-                          exp(c*log(bx)) ;
-          // from continuity at x=x0
-          prob = f2x0/(f1x0+f2x0) ;
-          // from xmean = xmeanth
-          qprob = (f1x0+f2x0)*xmeanth/(f2x0*xmean1+f1x0*xmean2) ;
-
-        }
-
-        // sampling of costheta
-        if (G4UniformRand() < qprob)
-        {
-          if (G4UniformRand() < prob)
-             cth = 1.+log(ea+G4UniformRand()*eaa)/a ;
-          else
-             cth = b-b1*bx/exp(log(ebx-G4UniformRand()*(ebx-eb1))/(c-1.)) ;
-        }
-        else
-        {
-          cth = -1.+2.*G4UniformRand();
-        }
-    }
-  }  
-
-  return cth ;
-}
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MscModel71::SampleDisplacement()
-{
-  const G4double kappa = 2.5;
-  const G4double kappapl1 = kappa+1.;
-  const G4double kappami1 = kappa-1.;
-  G4double rmean = 0.0;
-  if (currentTau >= tausmall) {
-    if (currentTau < taulim) {
-      rmean = kappa*currentTau*currentTau*currentTau*(1.-kappapl1*currentTau*0.25)/6. ;
-
-    } else {
-      G4double etau = 0.0;
-      if (currentTau<taubig) etau = exp(-currentTau);
-      rmean = -kappa*currentTau;
-      rmean = -exp(rmean)/(kappa*kappami1);
-      rmean += currentTau-kappapl1/kappa+kappa*etau/kappami1;
-    }
-    if (rmean>0.) rmean = 2.*lambda0*sqrt(rmean/3.0);
-    else          rmean = 0.;
- }
-  return rmean;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-
-
-
Index: unk/source/processes/electromagnetic/standard/src/G4MultipleScattering.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4MultipleScattering.cc	(revision 1318)
+++ 	(revision )
@@ -1,196 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MultipleScattering.cc,v 1.77 2009/11/01 13:05:01 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -----------------------------------------------------------------------------
-//
-// GEANT4 Class file
-//
-// File name:     G4MultipleScattering
-//
-// Author:        Laszlo Urban
-//
-// Creation date: March 2001
-// 
-// 16/05/01 value of cparm changed , L.Urban
-// 18/05/01 V.Ivanchenko Clean up against Linux ANSI compilation
-// 07/08/01 new methods Store/Retrieve PhysicsTable (mma)
-// 23-08-01 new angle and z distribution,energy dependence reduced,
-//          Store,Retrieve methods commented out temporarily, L.Urban
-// 27-08-01 in BuildPhysicsTable:aParticleType.GetParticleName()=="mu+" (mma)
-// 28-08-01 GetContinuousStepLimit and AlongStepDoIt moved from .icc file (mma)
-// 03-09-01 value of data member factlim changed, L.Urban
-// 10-09-01 small change in GetContinuousStepLimit, L.Urban
-// 11-09-01 G4MultipleScatteringx put as default G4MultipleScattering
-//          store/retrieve physics table reactivated (mma)
-// 13-09-01 corr. in ComputeTransportCrossSection, L.Urban
-// 14-09-01 protection in GetContinuousStepLimit, L.Urban
-// 17-09-01 migration of Materials to pure STL (mma)
-// 27-09-01 value of data member factlim changed, L.Urban
-// 31-10-01 big fixed in PostStepDoIt,L.Urban
-// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
-// 22-04-02 boundary algorithm modified -> important improvement in timing 
-// 24-04-02 some minor changes in boundary algorithm, L.Urban
-// 06-05-02 bug fixed in GetContinuousStepLimit, L.Urban
-// 24-05-02 changes in angle distribution and boundary algorithm, L.Urban
-// 11-06-02 bug fixed in ComputeTransportCrossSection, L.Urban
-// 12-08-02 bug fixed in PostStepDoIt (lateral displacement), L.Urban
-// 15-08-02 new angle distribution, L.Urban
-// 26-09-02 angle distribution + boundary algorithm modified, L.Urban
-// 15-10-02 temporary fix for proton scattering
-// 30-10-02 modified angle distribution,mods in boundary algorithm,
-//          changes in data members, L.Urban
-// 11-12-02 precision problem in ComputeTransportCrossSection
-//          for small Tkin/for heavy particles cured from L.Urban
-// 20-01-03 Migrade to cut per region (V.Ivanchenko)
-// 05-02-03 changes in data members, new sampling for geom.
-//          path length, step dependence reduced with new
-//          method
-// 28-03-03 Move to model design (V.Ivanchenko)
-// 08-08-03 STD substitute standard  (V.Ivanchenko)
-// 23-04-04 value of data member dtrl changed from 0.15 to 0.05 (L.Urban)
-// 17-08-04 name of facxsi changed to factail (L.Urban)
-// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
-// 07-02-05 correction in order to have a working Setsamplez function (L.Urban)
-// 15-04-05 optimize internal interface (V.Ivanchenko)
-// 12-09-05 new TruePathLengthLimit - facrange works for every track from
-//             start, geometry also influences the limit
-// 02-10-05 conditions limiting the step are finalized + code cleaning (L.Urban)
-// 03-10-05 weaker step limitation for Tkin > Tlimit (L.Urban)
-// 05-10-05 value of data member tlimitmin has been changed (L.Urban)
-// 06-10-05 correction in TruePathLengthLimit, timing improved.(L.Urban)
-// 07-10-05 bug fixed in TruePathLengthLimit (L.Urban)
-// 11-10-05 change in TruePathLengthLimit conditions,slightly better 
-//          timing and much weaker cut dependence (L.Urban)
-// 13-10-05 move SetFacrange(0.02) from InitialiseProcess to constructor
-// 23-10-05 new Boolean data member prec (false ~ 7.1 like, true new step
-//          limit in TruePathLengthLimit, L.Urban)
-// 25-10-05 prec renamed to steppingAlgorithm, set function triggers
-//          'default' facrange too, true - 0.02, false - 0.2 (L.Urban)
-// 26-10-05 the above is put in the function MscStepLimitation() (mma)
-// 05-11-05 tlimitmin = facrange*rungecut (instead of a fixed value)L.Urban
-// 13-11-05 some code cleaning, slightly better timing (L.Urban)
-// 01-12-05 add control on verbosity in SetMscStepLimitation
-// 06-12-05 tlimitmin = facrange*rangecut(e-) for every particle
-// 07-12-05 volume name World removed, rangecut computed using index
-//          instead of particle name L.Urban
-// 08-12-05 world is now: navigator->GetWorldVolume() L.Urban
-// 11-12-05 data member rangecut removed, steplimit does not depend
-//          on cut any more (L.Urban)
-// 17-01-06 value of data member factail changed (1. --> 0.75),
-//          value of facgeom is 3.5 instead of 4 (L.Urban)
-// 19-01-07 tlimitmin = facrange*50*micrometer, i.e. it depends on the
-//          value of facrange (L.Urban) 
-// 16-02-06 value of factail changed, samplez = true (L.Urban)
-// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (VI)
-// 10-05-06 SetMscStepLimitation at initialisation (V.Ivantchenko)
-// 11-05-06 values of data members tkinlimit, factail have been 
-//          changed (L.Urban) 
-// 13-10-06 data member factail removed, new data member skin
-//          together with set function, data member tkinlimit
-//          changed to lambdalimit (L.Urban)
-// 20-10-06 default value of skin = 0 (no single scattering),
-//          single scattering for skin > 0,
-//          there is no z sampling by default  (L.Urban)
-// 23-10-06 skin = 1 by default (L.Urban)
-// 23-11-06 skin = 1 by default for e+-, 0 for other particles (VI)
-// 12-02-07 skin can be changed via UI command, default skin=1 (VI)
-// 24-04-07 default skin=0 (temporal protection) (VI)
-// 11-03-08 use G4VMscModel interface (VI)
-//
-// -----------------------------------------------------------------------------
-//
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4MultipleScattering.hh"
-#include "G4UrbanMscModel92.hh"
-#include "G4MscStepLimitType.hh"
-#include "G4UrbanMscModel.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4MultipleScattering::G4MultipleScattering(const G4String& processName)
-  : G4VMultipleScattering(processName)
-{
-  isInitialized = false;  
-  G4cout << G4endl;
-  G4cout << "!!! G4MultipleScattering class is obsolete and will be removed for the next major Geant4 release !!!" << G4endl;
-  G4cout << "!!! Please use G4eMultipleScattering for e+ and e- !!!" << G4endl;
-  G4cout << "!!! Please use G4MuMultipleScattering for mu+ and mu- !!!" << G4endl;
-  G4cout << "!!! Please use G4hMultipleScattering for hadrons and ions !!!" << G4endl;
-  G4cout << G4endl;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4MultipleScattering::~G4MultipleScattering()
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4bool G4MultipleScattering::IsApplicable (const G4ParticleDefinition& p)
-{
-  return (p.GetPDGCharge() != 0.0 && !p.IsShortLived());
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4MultipleScattering::InitialiseProcess(const G4ParticleDefinition*)
-{
-  if(isInitialized) return;
-
-  // initialisation of parameters - defaults for particles other
-  // than ions can be overwritten by users
-  mscUrban = new G4UrbanMscModel92();
-  AddEmModel(1,mscUrban);
-  isInitialized = true;
-  /*
-  G4cout << "G4MultipleScattering::InitialiseProcess for " 
-	 << p->GetParticleName()
-	 << " skin= " << Skin()
-	 << " SA= " << steppingAlgorithm
-	 << G4endl;
-  */
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4MultipleScattering::PrintInfo()
-{
-  G4cout << "      RangeFactor= " << RangeFactor()
-	 << ", step limit type: " << StepLimitType()
-         << ", lateralDisplacement: " << LateralDisplasmentFlag()
-	 << ", skin= " << Skin()  
-	 << ", geomFactor= " << GeomFactor()  
-	 << G4endl;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
Index: unk/source/processes/electromagnetic/standard/src/G4MultipleScattering71.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4MultipleScattering71.cc	(revision 1318)
+++ 	(revision )
@@ -1,221 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-// $Id: G4MultipleScattering71.cc,v 1.5 2008/07/16 11:27:41 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -----------------------------------------------------------------------------
-// 16/05/01 value of cparm changed , L.Urban
-// 18/05/01 V.Ivanchenko Clean up against Linux ANSI compilation
-// 07/08/01 new methods Store/Retrieve PhysicsTable (mma)
-// 23-08-01 new angle and z distribution,energy dependence reduced,
-//          Store,Retrieve methods commented out temporarily, L.Urban
-// 27-08-01 in BuildPhysicsTable:aParticleType.GetParticleName()=="mu+" (mma)
-// 28-08-01 GetContinuousStepLimit and AlongStepDoIt moved from .icc file (mma)
-// 03-09-01 value of data member factlim changed, L.Urban
-// 10-09-01 small change in GetContinuousStepLimit, L.Urban
-// 11-09-01 G4MultipleScatteringx put as default G4MultipleScattering
-//          store/retrieve physics table reactivated (mma)
-// 13-09-01 corr. in ComputeTransportCrossSection, L.Urban
-// 14-09-01 protection in GetContinuousStepLimit, L.Urban
-// 17-09-01 migration of Materials to pure STL (mma)
-// 27-09-01 value of data member factlim changed, L.Urban
-// 31-10-01 big fixed in PostStepDoIt,L.Urban
-// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
-// 22-04-02 boundary algorithm modified -> important improvement in timing (L.Urban)
-// 24-04-02 some minor changes in boundary algorithm, L.Urban
-// 06-05-02 bug fixed in GetContinuousStepLimit, L.Urban
-// 24-05-02 changes in angle distribution and boundary algorithm, L.Urban
-// 11-06-02 bug fixed in ComputeTransportCrossSection, L.Urban
-// 12-08-02 bug fixed in PostStepDoIt (lateral displacement), L.Urban
-// 15-08-02 new angle distribution, L.Urban
-// 26-09-02 angle distribution + boundary algorithm modified, L.Urban
-// 15-10-02 temporary fix for proton scattering
-// 30-10-02 modified angle distribution,mods in boundary algorithm,
-//          changes in data members, L.Urban
-// 11-12-02 precision problem in ComputeTransportCrossSection
-//          for small Tkin/for heavy particles cured from L.Urban
-// 20-01-03 Migrade to cut per region (V.Ivanchenko)
-// 05-02-03 changes in data members, new sampling for geom.
-//          path length, step dependence reduced with new
-//          method
-// 28-03-03 Move to model design (V.Ivanchenko)
-// 08-08-03 STD substitute standard  (V.Ivanchenko)
-// 23-04-04 value of data member dtrl changed from 0.15 to 0.05 (L.Urban)
-// 17-08-04 name of facxsi changed to factail (L.Urban)
-// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
-// 07-02-05 correction in order to have a working Setsamplez function (L.Urban)
-// 15-04-05 optimize internal interface (V.Ivanchenko)
-// 03-10-05 Process is freezed with the name 71 (V.Ivanchenko)
-// -----------------------------------------------------------------------------
-//
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4MultipleScattering71.hh"
-#include "G4LossTableManager.hh"
-#include "G4MscModel71.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4MultipleScattering71::G4MultipleScattering71(const G4String& processName)
-  : G4VMultipleScattering(processName),
-    totBins(120),
-    facrange(0.199),
-    dtrl(0.05),
-    NuclCorrPar (0.0615),
-    FactPar(0.40),
-    factail(1.0),
-    cf(1.001),
-    stepnolastmsc(-1000000),
-    nsmallstep(5),
-    samplez(true),
-    boundary(true),
-    isInitialized(false)
-{
-  lowKineticEnergy = 0.1*keV;
-  highKineticEnergy= 100.*TeV;
-
-  tlimit           = 1.e10*mm;
-  tlimitmin        = 1.e-7*mm;
-
-  SetBinning(totBins);
-  SetMinKinEnergy(lowKineticEnergy);
-  SetMaxKinEnergy(highKineticEnergy);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4MultipleScattering71::~G4MultipleScattering71()
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4MultipleScattering71::InitialiseProcess(const G4ParticleDefinition* particle)
-{
-  if(isInitialized) return;
-
-  if (particle->GetParticleType() == "nucleus") {
-    boundary = false;
-    SetLateralDisplasmentFlag(false);
-    SetBuildLambdaTable(false);
-    Setsamplez(false) ;
-  } else {
-    SetLateralDisplasmentFlag(true);
-    SetBuildLambdaTable(true);
-  }
-  G4MscModel71* em = new G4MscModel71(dtrl,NuclCorrPar,FactPar,factail,samplez);
-  em->SetLateralDisplasmentFlag(LateralDisplasmentFlag());
-  em->SetLowEnergyLimit(lowKineticEnergy);
-  em->SetHighEnergyLimit(highKineticEnergy);
-  AddEmModel(1, em);
-  isInitialized = true;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4MultipleScattering71::TruePathLengthLimit(const G4Track&  track,
-                                                            G4double& lambda,
-                                                            G4double  currentMinimalStep)
-{
-
-  G4double tPathLength = currentMinimalStep;
-
-  // special treatment near boundaries ?
-  if (boundary) {
-
-    G4int stepno = track.GetCurrentStepNumber() ;
-    // first step
-    if (stepno == 1) {
-      stepnolastmsc = -1000000 ;
-      tlimit = 1.e10;
-    } else if (stepno > 1) {
-
-      if (track.GetStep()->GetPreStepPoint()->GetStepStatus() == fGeomBoundary) {
-
-        stepnolastmsc = stepno;
-        //  if : diff.treatment for small/not small Z
-        if (range > lambda) tlimit = facrange*range;
-        else                tlimit = facrange*lambda;
-
-        if(tlimit < tlimitmin) tlimit = tlimitmin;
-        if(tPathLength > tlimit) tPathLength = tlimit;
-
-      } else if (stepno > stepnolastmsc && stepno - stepnolastmsc < nsmallstep
-              && tPathLength > tlimit) {
-        tlimit *= cf;
-        tPathLength = tlimit;
-      }
-    }
-  }
-
-  return tPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4MultipleScattering71::GetContinuousStepLimit(
-                                          const G4Track& track,
-                                                G4double,
-                                                G4double currentMinimalStep,
-                                                G4double&)
-{
-  DefineMaterial(track.GetMaterialCutsCouple());
-  const G4MaterialCutsCouple* couple = CurrentMaterialCutsCouple();
-  G4double e = track.GetKineticEnergy();
-  model = dynamic_cast<G4MscModel71*>(SelectModel(e));
-  const G4ParticleDefinition* p = track.GetDefinition();
-  G4double lambda0 = GetLambda(p, e);
-  range =  G4LossTableManager::Instance()->GetRangeFromRestricteDEDX(p,e,couple);
-  if(range < currentMinimalStep) currentMinimalStep = range;
-  truePathLength = TruePathLengthLimit(track,lambda0,currentMinimalStep);
-  //  G4cout << "StepLimit: tpl= " << truePathLength << " lambda0= "
-  //       << lambda0 << " range= " << currentRange
-  //       << " currentMinStep= " << currentMinimalStep << G4endl;
-  if (truePathLength < currentMinimalStep) valueGPILSelectionMSC = CandidateForSelection;
-  geomPathLength = model->GeomPathLength(LambdaTable(),couple,
-           p,e,lambda0,range,truePathLength);
-  if(geomPathLength > lambda0) geomPathLength = lambda0;
-  return geomPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4MultipleScattering71::PrintInfo()
-{
-  if(boundary) {
-    G4cout << "      Boundary algorithm is active with facrange= "
-           << facrange
-           << G4endl;
-  }
-  G4cout << "        WARNING: This process is obsolete and will be soon removed" 
-	 << G4endl;
-  
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
Index: unk/source/processes/electromagnetic/standard/src/G4PolarizedComptonScattering.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4PolarizedComptonScattering.cc	(revision 1318)
+++ 	(revision )
@@ -1,287 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-//
-// $Id: G4PolarizedComptonScattering.cc,v 1.18 2008/10/15 17:53:44 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-//
-//---------- G4PolarizedComptonScattering physics process ----------------------
-//                   by Vicente Lara, March 1998
-//
-// -----------------------------------------------------------------------------
-// Corrections by Rui Curado da Silva (Nov. 2000)
-//    - Sampling of Phi
-//    - Depolarization probability
-//
-// 13-07-01, DoIt: suppression of production cut for the electron (mma)
-// 20-09-01, DoIt: fminimalEnergy = 1*eV (mma)
-// 04-05-05, Inheritance from ComptonScattering52 (V.Ivanchenko)
-// 30-01-06, DoIt : return G4ComptonScattering52::PostStepDoIt(aTrack,aStep) mma
-//
-// -----------------------------------------------------------------------------
-
-#include "G4PolarizedComptonScattering.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4PolarizedComptonScattering::G4PolarizedComptonScattering(const G4String& pname)
-  : G4ComptonScattering52 (pname)
-{ }
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4VParticleChange* G4PolarizedComptonScattering::PostStepDoIt(
-                                                        const G4Track& aTrack,
-							const G4Step&  aStep)
-//
-// The scattered gamma energy is sampled according to Klein - Nishina formula.
-// The random number techniques of Butcher & Messel are used
-// (Nuc Phys 20(1960),15).
-// GEANT4 internal units
-//
-// Note : Effects due to binding of atomic electrons are negliged.
-
-{
-   aParticleChange.Initialize(aTrack);
-
-   const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle();
-
-   G4ThreeVector GammaPolarization0 = aDynamicGamma->GetPolarization();
-
-   if (std::abs(GammaPolarization0.mag() - 1.e0) > 1.e-14)
-      return G4ComptonScattering52::PostStepDoIt(aTrack,aStep);
-       
-   G4double GammaEnergy0 = aDynamicGamma->GetKineticEnergy();
-   G4double E0_m = GammaEnergy0 / electron_mass_c2;
-
-   G4ParticleMomentum GammaDirection0 = aDynamicGamma->GetMomentumDirection();
- 
-   //
-   // sample the energy rate of the scattered gamma 
-   //
-   G4double epsilon, epsilonsq, onecost, sint2, greject;
-
-   G4double epsilon0 = 1./(1. + 2*E0_m) , epsilon0sq = epsilon0*epsilon0;
-   G4double alpha1   = - log(epsilon0)  , alpha2 = 0.5*(1.- epsilon0sq);
-
-   do {
-       if (alpha1/(alpha1+alpha2) > G4UniformRand())
-         { epsilon   = exp(-alpha1*G4UniformRand());  // epsilon0**r
-           epsilonsq = epsilon*epsilon; }
-       else {
-             epsilonsq = epsilon0sq + (1.- epsilon0sq)*G4UniformRand();
-             epsilon   = sqrt(epsilonsq);
-         };
-       onecost = (1.- epsilon)/(epsilon*E0_m);
-       sint2   = onecost*(2.-onecost);
-       greject = 1. - epsilon*sint2/(1.+ epsilonsq);
-   } while (greject < G4UniformRand());
- 
-
-   // 
-   // Phi determination
-   // 
-   G4double minimum=0., maximum=twopi, middle=0., resolution=0.001;
-   G4double Rand = G4UniformRand();
-
-   int j = 0;
-   while ((j < 100) && (std::abs(SetPhi(epsilon,sint2,middle,Rand)) > resolution))
-	{
-          middle = (maximum + minimum)/2;
-          if (SetPhi(epsilon,sint2,middle,Rand)*
-	      SetPhi(epsilon,sint2,minimum,Rand)<0)  maximum = middle;
-          else                                       minimum = middle;
-          j++;
-        }
-
-   //
-   // scattered gamma angles. ( Z - axis along the parent gamma)
-   //
-   G4double cosTeta = 1. - onecost , sinTeta = sqrt (sint2);
-   G4double Phi     = middle;
-   G4double dirx = sinTeta*cos(Phi), diry = sinTeta*sin(Phi), dirz = cosTeta;
-
-   //
-   // update G4VParticleChange for the scattered gamma 
-   //
-   G4double GammaEnergy1 = epsilon*GammaEnergy0;
-
-   // New polarization
-   //
-   G4ThreeVector GammaPolarization1 = SetNewPolarization(epsilon,sint2,Phi,
-                                                         cosTeta,
-							 GammaPolarization0);
-   // Set new direction 
-   G4ThreeVector GammaDirection1 ( dirx,diry,dirz );
-
-   // Change reference frame.
-   SystemOfRefChange(GammaDirection0,GammaDirection1,
-                     GammaPolarization0,GammaPolarization1);
-
-   G4double localEnergyDeposit = 0.;
-   
-   if (GammaEnergy1 > fminimalEnergy)
-     {
-       aParticleChange.ProposeEnergy(GammaEnergy1);
-     }
-   else
-     {
-       localEnergyDeposit += GammaEnergy1;    
-       aParticleChange.ProposeEnergy(0.) ;
-       aParticleChange.ProposeTrackStatus(fStopAndKill);
-     }
-       
-   //
-   // kinematic of the scattered electron
-   //
-   G4double ElecKineEnergy = GammaEnergy0 - GammaEnergy1;
-      
-   if (ElecKineEnergy > fminimalEnergy)                     
-     {
-       G4double ElecMomentum = sqrt(ElecKineEnergy*
-	                           (ElecKineEnergy+2.*electron_mass_c2));
-       G4ThreeVector ElecDirection (
-              (GammaEnergy0*GammaDirection0 - GammaEnergy1*GammaDirection1)
-	      *(1./ElecMomentum));
- 
-       // create G4DynamicParticle object for the electron.  
-       G4DynamicParticle* aElectron= new G4DynamicParticle (
-	                  G4Electron::Electron(),ElecDirection,ElecKineEnergy);
-       aParticleChange.SetNumberOfSecondaries(1);
-       aParticleChange.AddSecondary( aElectron );
-      }
-    else
-      {
-       aParticleChange.SetNumberOfSecondaries(0);
-       localEnergyDeposit += ElecKineEnergy;
-      }
-      
-    aParticleChange.ProposeLocalEnergyDeposit(localEnergyDeposit);       
-
-   //  Reset NbOfInteractionLengthLeft and return aParticleChange
-   return G4VDiscreteProcess::PostStepDoIt( aTrack, aStep);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4PolarizedComptonScattering::SetPhi(G4double EnergyRate,
-                                              G4double sinsqrth,
-                                              G4double phi,
-					      G4double rand)
-{
-  G4double cosphi = cos(phi), sinphi = sin(phi);
-  G4double PhiDetermination = ((twopi*rand - phi)
-                               *(EnergyRate + 1./EnergyRate - sinsqrth))
-  			      + (sinsqrth*sinphi*cosphi);
-  return PhiDetermination;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- 
-G4ThreeVector G4PolarizedComptonScattering::SetNewPolarization(
-                                             G4double EnergyRate, 
-					     G4double sinsqrth,
-					     G4double phi, 
-					     G4double costheta, 
-					     G4ThreeVector&) 
-{
-  G4double cosphi = cos(phi), sinphi = sin(phi);
-  ////  G4double ParallelIntensityPolar = EnergyRate + 1./EnergyRate
-  ////                                    + 2. - 4.*sinsqrth*cosphi*cosphi;
-  G4double ParallelIntensityPolar = EnergyRate + 1./EnergyRate
-                                    - 2.*sinsqrth*cosphi*cosphi; 
-  G4double PerpendiIntensityPolar = EnergyRate + 1./EnergyRate - 2.;
-  G4double PolarizationDegree = sqrt(sinsqrth*sinphi*sinphi+costheta*costheta);
-  G4double sintheta = sqrt(sinsqrth);
-  
-  G4ThreeVector GammaPolarization1;
-  // depolarization probability (1-P)
-  if ( G4UniformRand() > (PerpendiIntensityPolar/ParallelIntensityPolar) )
-    {
-     // Parallel to initial polarization
-     GammaPolarization1.setX(PolarizationDegree);
-     GammaPolarization1.setY(-sinsqrth*sinphi*cosphi/PolarizationDegree);
-     GammaPolarization1.setZ(-sintheta*costheta*cosphi/PolarizationDegree);
-
-    }
-  else 
-    {
-     // Perpendicular to initial polarization
-     GammaPolarization1.setX(0.);
-     GammaPolarization1.setY(costheta/PolarizationDegree);
-     GammaPolarization1.setZ(-sintheta*sinphi/PolarizationDegree);
-
-    };
-  
-  return GammaPolarization1;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4PolarizedComptonScattering::SystemOfRefChange(G4ThreeVector& Direction0,
-                                                     G4ThreeVector& Direction1,
-						  G4ThreeVector& Polarization0,
-						  G4ThreeVector& Polarization1)
-{
-  // Angles for go back to the original RS
-  G4double cosTeta0 = Direction0.cosTheta(), sinTeta0 = sin(Direction0.theta());
-  G4double cosPhi0  = cos(Direction0.phi()), sinPhi0  = sin(Direction0.phi());
-
-
-
-  G4double cosPsi, sinPsi;
-
-  if (sinTeta0 != 0. )
-   {
-    cosPsi = -Polarization0.z()/sinTeta0;
-    if (cosPhi0 != 0.)
-          sinPsi = (Polarization0.y() - cosTeta0*sinPhi0*cosPsi)/cosPhi0;
-    else  sinPsi = -Polarization0.x()/sinPhi0;
-
-   } 
-  else 
-   {
-    cosPsi = Polarization0.x()/cosTeta0;
-    sinPsi = Polarization0.y();
-   }
-  G4double Psi = atan(sinPsi/cosPsi);
-
-  // Rotation along Z axe
-  Direction1.rotateZ(Psi);
-  // 
-  Direction1.rotateUz(Direction0);
-  aParticleChange.ProposeMomentumDirection(Direction1);  
-
-  // 3 Euler angles rotation for scattered photon polarization
-  Polarization1.rotateZ(Psi);
-  Polarization1.rotateUz(Direction0);
-  aParticleChange.ProposePolarization(Polarization1);
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Index: unk/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc	(revision 1318)
+++ 	(revision )
@@ -1,1055 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-//
-// $Id: G4UrbanMscModel.cc,v 1.91 2009/07/20 18:41:34 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-// GEANT4 Class file
-//
-//
-// File name:   G4UrbanMscModel
-//
-// Author:      Laszlo Urban
-//
-// Creation date: 06.03.2008
-//
-// Modifications:
-//
-// 06-03-2008 starting point : G4UrbanMscModel2 = G4UrbanMscModel 9.1 ref 02
-//
-// 13-03-08  Bug in SampleScattering (which caused lateral asymmetry) fixed
-//           (L.Urban)
-//
-// 14-03-08  Simplification of step limitation in ComputeTruePathLengthLimit,
-//           + tlimitmin is the same for UseDistancetoBoundary and
-//           UseSafety (L.Urban)           
-//
-// 16-03-08  Reorganization of SampleCosineTheta + new method SimpleScattering
-//           SimpleScattering is used if the relative energy loss is too big
-//           or theta0 is too big (see data members rellossmax, theta0max)
-//           (L.Urban)          
-//
-// 17-03-08  tuning of the correction factor in ComputeTheta0 (L.Urban)
-//
-// 19-03-08  exponent c of the 'tail' model function is not equal to 2 any more,
-//           value of c has been extracted from some e- scattering data (L.Urban) 
-//
-// 24-03-08  Step limitation in ComputeTruePathLengthLimit has been
-//           simplified further + some data members have been removed (L.Urban)
-//
-// 24-07-08  central part of scattering angle (theta0) has been tuned
-//           tail of the scattering angle distribution has been tuned
-//           using some e- and proton scattering data
-//
-// 05-08-08  bugfix in ComputeTruePathLengthLimit (L.Urban)
-//
-// 09-10-08  theta0 and tail have been retuned using some e-,mu,proton
-//           scattering data (L.Urban)
-//           + single scattering without path length correction for
-//           small steps (t < tlimitmin, for UseDistanceToBoundary only)
-//
-// 15-10-08  Moliere-Bethe screening in the single scattering part(L.Urban)          
-//
-// 17-10-08  stepping similar to that in model (9.1) for UseSafety case
-//           for e+/e- in order to speed up the code for calorimeters
-//
-// 23-10-08  bugfix in the screeningparameter of the single scattering part,
-//           some technical change in order to speed up the code (UpdateCache)
-//
-// 27-10-08  bugfix in ComputeTruePathLengthLimit (affects UseDistanceToBoundary
-//           stepping type only) (L.Urban)          
-//
-// 28-04-09  move G4UrbanMscModel2 from the g49.2 to G4UrbanMscModel. 
-//           now it is frozen (V.Ivanchenk0)
-
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and others
-
-// -------------------------------------------------------------------
-// In its present form the model can be  used for simulation 
-//   of the e-/e+, muon and charged hadron multiple scattering
-//
-
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4UrbanMscModel.hh"
-#include "Randomize.hh"
-#include "G4Electron.hh"
-#include "G4LossTableManager.hh"
-#include "G4ParticleChangeForMSC.hh"
-
-#include "G4Poisson.hh"
-#include "globals.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4UrbanMscModel::G4UrbanMscModel(const G4String& nam)
-  : G4VMscModel(nam),
-    isInitialized(false)
-{
-  masslimite    = 0.6*MeV;
-  lambdalimit   = 1.*mm;
-  fr            = 0.02;
-  //  facsafety     = 0.3;
-  taubig        = 8.0;
-  tausmall      = 1.e-16;
-  taulim        = 1.e-6;
-  currentTau    = taulim;
-  tlimitminfix  = 1.e-6*mm;            
-  stepmin       = tlimitminfix;
-  smallstep     = 1.e10;
-  currentRange  = 0. ;
-  rangeinit     = 0.;
-  tlimit        = 1.e10*mm;
-  tlimitmin     = 10.*tlimitminfix;            
-  tgeom         = 1.e50*mm;
-  geombig       = 1.e50*mm;
-  geommin       = 1.e-3*mm;
-  geomlimit     = geombig;
-  presafety     = 0.*mm;
-                          
-  y             = 0.;
-
-  Zold          = 0.;
-  Zeff          = 1.;
-  Z2            = 1.;                
-  Z23           = 1.;                    
-  lnZ           = 0.;
-  coeffth1      = 0.;
-  coeffth2      = 0.;
-  coeffc1       = 0.;
-  coeffc2       = 0.;
-  scr1ini       = fine_structure_const*fine_structure_const*
-                  electron_mass_c2*electron_mass_c2/(0.885*0.885*4.*pi);
-  scr2ini       = 3.76*fine_structure_const*fine_structure_const;
-  scr1          = 0.;
-  scr2          = 0.;
-
-  theta0max     = pi/6.;
-  rellossmax    = 0.50;
-  third         = 1./3.;
-  particle      = 0;
-  theManager    = G4LossTableManager::Instance(); 
-  inside        = false;  
-  insideskin    = false;
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4UrbanMscModel::~G4UrbanMscModel()
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4UrbanMscModel::Initialise(const G4ParticleDefinition* p,
-				  const G4DataVector&)
-{
-  skindepth = skin*stepmin;
-  if(isInitialized) return;
-  // set values of some data members
-  SetParticle(p);
-
-  fParticleChange = GetParticleChangeForMSC();
-  InitialiseSafetyHelper();
-
-  isInitialized = true;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::ComputeCrossSectionPerAtom( 
-                             const G4ParticleDefinition* part,
-                                   G4double KineticEnergy,
-                                   G4double AtomicNumber,G4double,
-				   G4double, G4double)
-{
-  const G4double sigmafactor = twopi*classic_electr_radius*classic_electr_radius;
-  const G4double epsfactor = 2.*electron_mass_c2*electron_mass_c2*
-                            Bohr_radius*Bohr_radius/(hbarc*hbarc);
-  const G4double epsmin = 1.e-4 , epsmax = 1.e10;
-
-  const G4double Zdat[15] = { 4.,  6., 13., 20., 26., 29., 32., 38., 47.,
-                             50., 56., 64., 74., 79., 82. };
-
-  const G4double Tdat[22] = { 100*eV,  200*eV,  400*eV,  700*eV,
-                               1*keV,   2*keV,   4*keV,   7*keV,
-			      10*keV,  20*keV,  40*keV,  70*keV,
-                             100*keV, 200*keV, 400*keV, 700*keV,
-                               1*MeV,   2*MeV,   4*MeV,   7*MeV,
-			      10*MeV,  20*MeV};
-
-  // corr. factors for e-/e+ lambda for T <= Tlim
-          G4double celectron[15][22] =
-          {{1.125,1.072,1.051,1.047,1.047,1.050,1.052,1.054,
-            1.054,1.057,1.062,1.069,1.075,1.090,1.105,1.111,
-            1.112,1.108,1.100,1.093,1.089,1.087            },
-           {1.408,1.246,1.143,1.096,1.077,1.059,1.053,1.051,
-            1.052,1.053,1.058,1.065,1.072,1.087,1.101,1.108,
-            1.109,1.105,1.097,1.090,1.086,1.082            },
-           {2.833,2.268,1.861,1.612,1.486,1.309,1.204,1.156,
-            1.136,1.114,1.106,1.106,1.109,1.119,1.129,1.132,
-            1.131,1.124,1.113,1.104,1.099,1.098            },
-           {3.879,3.016,2.380,2.007,1.818,1.535,1.340,1.236,
-            1.190,1.133,1.107,1.099,1.098,1.103,1.110,1.113,
-            1.112,1.105,1.096,1.089,1.085,1.098            },
-           {6.937,4.330,2.886,2.256,1.987,1.628,1.395,1.265,
-            1.203,1.122,1.080,1.065,1.061,1.063,1.070,1.073,
-            1.073,1.070,1.064,1.059,1.056,1.056            },
-           {9.616,5.708,3.424,2.551,2.204,1.762,1.485,1.330,
-            1.256,1.155,1.099,1.077,1.070,1.068,1.072,1.074,
-            1.074,1.070,1.063,1.059,1.056,1.052            },
-           {11.72,6.364,3.811,2.806,2.401,1.884,1.564,1.386,
-            1.300,1.180,1.112,1.082,1.073,1.066,1.068,1.069,
-            1.068,1.064,1.059,1.054,1.051,1.050            },
-           {18.08,8.601,4.569,3.183,2.662,2.025,1.646,1.439,
-            1.339,1.195,1.108,1.068,1.053,1.040,1.039,1.039,
-            1.039,1.037,1.034,1.031,1.030,1.036            },
-           {18.22,10.48,5.333,3.713,3.115,2.367,1.898,1.631,
-            1.498,1.301,1.171,1.105,1.077,1.048,1.036,1.033,
-            1.031,1.028,1.024,1.022,1.021,1.024            },
-           {14.14,10.65,5.710,3.929,3.266,2.453,1.951,1.669,
-            1.528,1.319,1.178,1.106,1.075,1.040,1.027,1.022,
-            1.020,1.017,1.015,1.013,1.013,1.020            },
-           {14.11,11.73,6.312,4.240,3.478,2.566,2.022,1.720,
-            1.569,1.342,1.186,1.102,1.065,1.022,1.003,0.997,
-            0.995,0.993,0.993,0.993,0.993,1.011            },
-           {22.76,20.01,8.835,5.287,4.144,2.901,2.219,1.855,
-            1.677,1.410,1.224,1.121,1.073,1.014,0.986,0.976,
-            0.974,0.972,0.973,0.974,0.975,0.987            },
-           {50.77,40.85,14.13,7.184,5.284,3.435,2.520,2.059,
-            1.837,1.512,1.283,1.153,1.091,1.010,0.969,0.954,
-            0.950,0.947,0.949,0.952,0.954,0.963            },
-           {65.87,59.06,15.87,7.570,5.567,3.650,2.682,2.182,
-            1.939,1.579,1.325,1.178,1.108,1.014,0.965,0.947,
-            0.941,0.938,0.940,0.944,0.946,0.954            },
-           {55.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239,
-            1.985,1.609,1.343,1.188,1.113,1.013,0.960,0.939,
-            0.933,0.930,0.933,0.936,0.939,0.949            }};
-	    
-           G4double cpositron[15][22] = {
-           {2.589,2.044,1.658,1.446,1.347,1.217,1.144,1.110,
-            1.097,1.083,1.080,1.086,1.092,1.108,1.123,1.131,
-            1.131,1.126,1.117,1.108,1.103,1.100            },
-           {3.904,2.794,2.079,1.710,1.543,1.325,1.202,1.145,
-            1.122,1.096,1.089,1.092,1.098,1.114,1.130,1.137,
-            1.138,1.132,1.122,1.113,1.108,1.102            },
-           {7.970,6.080,4.442,3.398,2.872,2.127,1.672,1.451,
-            1.357,1.246,1.194,1.179,1.178,1.188,1.201,1.205,
-            1.203,1.190,1.173,1.159,1.151,1.145            },
-           {9.714,7.607,5.747,4.493,3.815,2.777,2.079,1.715,
-            1.553,1.353,1.253,1.219,1.211,1.214,1.225,1.228,
-            1.225,1.210,1.191,1.175,1.166,1.174            },
-           {17.97,12.95,8.628,6.065,4.849,3.222,2.275,1.820,
-            1.624,1.382,1.259,1.214,1.202,1.202,1.214,1.219,
-            1.217,1.203,1.184,1.169,1.160,1.151            },
-           {24.83,17.06,10.84,7.355,5.767,3.707,2.546,1.996,
-            1.759,1.465,1.311,1.252,1.234,1.228,1.238,1.241,
-            1.237,1.222,1.201,1.184,1.174,1.159            },
-           {23.26,17.15,11.52,8.049,6.375,4.114,2.792,2.155,
-            1.880,1.535,1.353,1.281,1.258,1.247,1.254,1.256,
-            1.252,1.234,1.212,1.194,1.183,1.170            },
-           {22.33,18.01,12.86,9.212,7.336,4.702,3.117,2.348,
-            2.015,1.602,1.385,1.297,1.268,1.251,1.256,1.258,
-            1.254,1.237,1.214,1.195,1.185,1.179            },
-           {33.91,24.13,15.71,10.80,8.507,5.467,3.692,2.808,
-            2.407,1.873,1.564,1.425,1.374,1.330,1.324,1.320,
-            1.312,1.288,1.258,1.235,1.221,1.205            },
-           {32.14,24.11,16.30,11.40,9.015,5.782,3.868,2.917,
-            2.490,1.925,1.596,1.447,1.391,1.342,1.332,1.327,
-            1.320,1.294,1.264,1.240,1.226,1.214            },
-           {29.51,24.07,17.19,12.28,9.766,6.238,4.112,3.066,
-            2.602,1.995,1.641,1.477,1.414,1.356,1.342,1.336,
-            1.328,1.302,1.270,1.245,1.231,1.233            },
-           {38.19,30.85,21.76,15.35,12.07,7.521,4.812,3.498,
-            2.926,2.188,1.763,1.563,1.484,1.405,1.382,1.371,
-            1.361,1.330,1.294,1.267,1.251,1.239            },
-           {49.71,39.80,27.96,19.63,15.36,9.407,5.863,4.155,
-            3.417,2.478,1.944,1.692,1.589,1.480,1.441,1.423,
-            1.409,1.372,1.330,1.298,1.280,1.258            },
-           {59.25,45.08,30.36,20.83,16.15,9.834,6.166,4.407,
-            3.641,2.648,2.064,1.779,1.661,1.531,1.482,1.459,
-            1.442,1.400,1.354,1.319,1.299,1.272            },
-           {56.38,44.29,30.50,21.18,16.51,10.11,6.354,4.542,
-            3.752,2.724,2.116,1.817,1.692,1.554,1.499,1.474,
-            1.456,1.412,1.364,1.328,1.307,1.282            }};
-
-  //data/corrections for T > Tlim  
-  G4double Tlim = 10.*MeV;
-  G4double beta2lim = Tlim*(Tlim+2.*electron_mass_c2)/
-                      ((Tlim+electron_mass_c2)*(Tlim+electron_mass_c2));
-  G4double bg2lim   = Tlim*(Tlim+2.*electron_mass_c2)/
-                      (electron_mass_c2*electron_mass_c2);
-
-  G4double sig0[15] = {0.2672*barn,  0.5922*barn, 2.653*barn,  6.235*barn,
-                      11.69*barn  , 13.24*barn  , 16.12*barn, 23.00*barn ,
-		      35.13*barn  , 39.95*barn  , 50.85*barn, 67.19*barn ,
-                      91.15*barn  , 104.4*barn  , 113.1*barn};
-		      		       
-  G4double hecorr[15] = {120.70, 117.50, 105.00, 92.92, 79.23,  74.510,  68.29,
-                          57.39,  41.97,  36.14, 24.53, 10.21,  -7.855, -16.84,
-			 -22.30};
-
-  G4double sigma;
-  SetParticle(part);
-
-  G4double Z23 = 2.*log(AtomicNumber)/3.; Z23 = exp(Z23);
-
-  // correction if particle .ne. e-/e+
-  // compute equivalent kinetic energy
-  // lambda depends on p*beta ....
-
-  G4double eKineticEnergy = KineticEnergy;
-
-  if(mass > electron_mass_c2)
-  {
-     G4double TAU = KineticEnergy/mass ;
-     G4double c = mass*TAU*(TAU+2.)/(electron_mass_c2*(TAU+1.)) ;
-     G4double w = c-2. ;
-     G4double tau = 0.5*(w+sqrt(w*w+4.*c)) ;
-     eKineticEnergy = electron_mass_c2*tau ;
-  }
-
-  G4double eTotalEnergy = eKineticEnergy + electron_mass_c2 ;
-  G4double beta2 = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(eTotalEnergy*eTotalEnergy);
-  G4double bg2   = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(electron_mass_c2*electron_mass_c2);
-
-  G4double eps = epsfactor*bg2/Z23;
-
-  if     (eps<epsmin)  sigma = 2.*eps*eps;
-  else if(eps<epsmax)  sigma = log(1.+2.*eps)-2.*eps/(1.+2.*eps);
-  else                 sigma = log(2.*eps)-1.+1./eps;
-
-  sigma *= ChargeSquare*AtomicNumber*AtomicNumber/(beta2*bg2);
-
-  // interpolate in AtomicNumber and beta2 
-  G4double c1,c2,cc1,cc2,corr;
-
-  // get bin number in Z
-  G4int iZ = 14;
-  while ((iZ>=0)&&(Zdat[iZ]>=AtomicNumber)) iZ -= 1;
-  if (iZ==14)                               iZ = 13;
-  if (iZ==-1)                               iZ = 0 ;
-
-  G4double Z1 = Zdat[iZ];
-  G4double Z2 = Zdat[iZ+1];
-  G4double ratZ = (AtomicNumber-Z1)*(AtomicNumber+Z1)/
-                  ((Z2-Z1)*(Z2+Z1));
-
-  if(eKineticEnergy <= Tlim) 
-  {
-    // get bin number in T (beta2)
-    G4int iT = 21;
-    while ((iT>=0)&&(Tdat[iT]>=eKineticEnergy)) iT -= 1;
-    if(iT==21)                                  iT = 20;
-    if(iT==-1)                                  iT = 0 ;
-
-    //  calculate betasquare values
-    G4double T = Tdat[iT],   E = T + electron_mass_c2;
-    G4double b2small = T*(E+electron_mass_c2)/(E*E);
-
-    T = Tdat[iT+1]; E = T + electron_mass_c2;
-    G4double b2big = T*(E+electron_mass_c2)/(E*E);
-    G4double ratb2 = (beta2-b2small)/(b2big-b2small);
-
-    if (charge < 0.)
-    {
-       c1 = celectron[iZ][iT];
-       c2 = celectron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = celectron[iZ][iT+1];
-       c2 = celectron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-
-       sigma *= sigmafactor/corr;
-    }
-    else              
-    {
-       c1 = cpositron[iZ][iT];
-       c2 = cpositron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = cpositron[iZ][iT+1];
-       c2 = cpositron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-
-       sigma *= sigmafactor/corr;
-    }
-  }
-  else
-  {
-    c1 = bg2lim*sig0[iZ]*(1.+hecorr[iZ]*(beta2-beta2lim))/bg2;
-    c2 = bg2lim*sig0[iZ+1]*(1.+hecorr[iZ+1]*(beta2-beta2lim))/bg2;
-    if((AtomicNumber >= Z1) && (AtomicNumber <= Z2))
-      sigma = c1+ratZ*(c2-c1) ;
-    else if(AtomicNumber < Z1)
-      sigma = AtomicNumber*AtomicNumber*c1/(Z1*Z1);
-    else if(AtomicNumber > Z2)
-      sigma = AtomicNumber*AtomicNumber*c2/(Z2*Z2);
-  }
-  return sigma;
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::ComputeTruePathLengthLimit(
-                             const G4Track& track,
-			     G4PhysicsTable* theTable,
-			     G4double currentMinimalStep)
-{
-  tPathLength = currentMinimalStep;
-  G4StepPoint* sp = track.GetStep()->GetPreStepPoint();
-  G4StepStatus stepStatus = sp->GetStepStatus();
-
-  const G4DynamicParticle* dp = track.GetDynamicParticle();
-
-  if(stepStatus == fUndefined) {
-    inside = false;
-    insideskin = false;
-    tlimit = geombig;
-    SetParticle( dp->GetDefinition() );
-  }
-
-  theLambdaTable = theTable;
-  couple = track.GetMaterialCutsCouple();
-  currentMaterialIndex = couple->GetIndex();
-  currentKinEnergy = dp->GetKineticEnergy();
-  currentRange = 
-    theManager->GetRangeFromRestricteDEDX(particle,currentKinEnergy,couple);
-  lambda0 = GetLambda(currentKinEnergy);
-
-  // stop here if small range particle
-  if(inside) return tPathLength;            
-  
-  if(tPathLength > currentRange) tPathLength = currentRange;
-
-  presafety = sp->GetSafety();
-
-  //    G4cout << "G4UrbanMscModel::ComputeTruePathLengthLimit tPathLength= " 
-  //	   <<tPathLength<<" safety= " << presafety
-  //	   << " range= " <<currentRange<<G4endl;
-
-  // far from geometry boundary
-  if(currentRange < presafety)
-    {
-      inside = true;
-      return tPathLength;  
-    }
-
-  // standard  version
-  //
-  if (steppingAlgorithm == fUseDistanceToBoundary)
-    {
-      //compute geomlimit and presafety 
-      G4double geomlimit = ComputeGeomLimit(track, presafety, currentRange);
-
-      // is it far from boundary ?
-      if(currentRange < presafety)
-	{
-	  inside = true;
-	  return tPathLength;   
-	}
-
-      smallstep += 1.;
-      insideskin = false;
-
-      if((stepStatus == fGeomBoundary) || (stepStatus == fUndefined))
-	{
-          rangeinit = currentRange;
-	  if(stepStatus == fUndefined) smallstep = 1.e10;
-	  else  smallstep = 1.;
-
-	  // constraint from the geometry 
-	  if((geomlimit < geombig) && (geomlimit > geommin))
-	    {
-	      if(stepStatus == fGeomBoundary)  
-	        tgeom = geomlimit/facgeom;
-	      else
-	        tgeom = 2.*geomlimit/facgeom;
-	    }
-            else
-              tgeom = geombig;
-
-          //define stepmin here (it depends on lambda!)
-          //rough estimation of lambda_elastic/lambda_transport
-          G4double rat = currentKinEnergy/MeV ;
-          rat = 1.e-3/(rat*(10.+rat)) ;
-          //stepmin ~ lambda_elastic
-          stepmin = rat*lambda0;
-          skindepth = skin*stepmin;
-
-          //define tlimitmin
-          tlimitmin = 10.*stepmin;
-          if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
-
-        }
-
-      //step limit 
-      tlimit = facrange*rangeinit;              
-      if(tlimit < facsafety*presafety)
-        tlimit = facsafety*presafety; 
-
-      //lower limit for tlimit
-      if(tlimit < tlimitmin) tlimit = tlimitmin;
-
-      if(tlimit > tgeom) tlimit = tgeom;
-
-      //  G4cout << "tgeom= " << tgeom << " geomlimit= " << geomlimit  
-      //     << " tlimit= " << tlimit << " presafety= " << presafety << G4endl;
-
-      // shortcut
-      if((tPathLength < tlimit) && (tPathLength < presafety) &&
-         (smallstep >= skin) && (tPathLength < geomlimit-0.999*skindepth))
-	return tPathLength;   
-
-      // step reduction near to boundary
-      if(smallstep < skin)
-	{
-	  tlimit = stepmin;
-	  insideskin = true;
-	}
-      else if(geomlimit < geombig)
-	{
-	  if(geomlimit > skindepth)
-	    {
-	      if(tlimit > geomlimit-0.999*skindepth)
-		tlimit = geomlimit-0.999*skindepth;
-	    }
-	  else
-	    {
-	      insideskin = true;
-	      if(tlimit > stepmin) tlimit = stepmin;
-	    }
-	}
-
-      if(tlimit < stepmin) tlimit = stepmin;
-
-      if(tPathLength > tlimit) tPathLength = tlimit  ; 
-
-    }
-    // for 'normal' simulation with or without magnetic field 
-    //  there no small step/single scattering at boundaries
-  else if(steppingAlgorithm == fUseSafety)
-    {
-      // compute presafety again if presafety <= 0 and no boundary
-      // i.e. when it is needed for optimization purposes
-      if((stepStatus != fGeomBoundary) && (presafety < tlimitminfix)) 
-	presafety = ComputeSafety(sp->GetPosition(),tPathLength); 
-
-      // is far from boundary
-      if(currentRange < presafety)
-        {
-          inside = true;
-          return tPathLength;  
-        }
-
-      if((stepStatus == fGeomBoundary) || (stepStatus == fUndefined))
-      {
-        rangeinit = currentRange;
-        fr = facrange;
-        // 9.1 like stepping for e+/e- only (not for muons,hadrons)
-        if(mass < masslimite) 
-        {
-          if(lambda0 > currentRange)
-            rangeinit = lambda0;
-          if(lambda0 > lambdalimit)
-            fr *= 0.75+0.25*lambda0/lambdalimit;
-        }
-
-        //lower limit for tlimit
-        G4double rat = currentKinEnergy/MeV ;
-        rat = 1.e-3/(rat*(10.+rat)) ;
-        tlimitmin = 10.*lambda0*rat;
-        if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
-      }
-      //step limit
-      tlimit = fr*rangeinit;               
-
-      if(tlimit < facsafety*presafety)
-        tlimit = facsafety*presafety;
-
-      //lower limit for tlimit
-      if(tlimit < tlimitmin) tlimit = tlimitmin;
-
-      if(tPathLength > tlimit) tPathLength = tlimit;
-    }
-  
-  // version similar to 7.1 (needed for some experiments)
-  else
-    {
-      if (stepStatus == fGeomBoundary)
-	{
-	  if (currentRange > lambda0) tlimit = facrange*currentRange;
-	  else                        tlimit = facrange*lambda0;
-
-	  if(tlimit < tlimitmin) tlimit = tlimitmin;
-	  if(tPathLength > tlimit) tPathLength = tlimit;
-	}
-    }
-  // G4cout << "tPathLength= " << tPathLength << "  geomlimit= " << geomlimit 
-  //	 << " currentMinimalStep= " << currentMinimalStep << G4endl;
-  return tPathLength ;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::ComputeGeomPathLength(G4double)
-{
-  lambdaeff = lambda0;
-  par1 = -1. ;  
-  par2 = par3 = 0. ;  
-
-  //  do the true -> geom transformation
-  zPathLength = tPathLength;
-
-  // z = t for very small tPathLength
-  if(tPathLength < tlimitminfix) return zPathLength;
-
-  // this correction needed to run MSC with eIoni and eBrem inactivated
-  // and makes no harm for a normal run
-  if(tPathLength > currentRange)
-    tPathLength = currentRange ;
-
-  G4double tau   = tPathLength/lambda0 ;
-
-  if ((tau <= tausmall) || insideskin) {
-    zPathLength  = tPathLength;
-    if(zPathLength > lambda0) zPathLength = lambda0;
-    return zPathLength;
-  }
-
-  G4double zmean = tPathLength;
-  if (tPathLength < currentRange*dtrl) {
-    if(tau < taulim) zmean = tPathLength*(1.-0.5*tau) ;
-    else             zmean = lambda0*(1.-exp(-tau));
-  } else if(currentKinEnergy < mass)  {
-    par1 = 1./currentRange ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    if(tPathLength < currentRange)
-      zmean = (1.-exp(par3*log(1.-tPathLength/currentRange)))/(par1*par3) ;
-    else
-      zmean = 1./(par1*par3) ;
-  } else {
-    G4double T1 = theManager->GetEnergy(particle,currentRange-tPathLength,couple);
-    G4double lambda1 = GetLambda(T1);
-
-    par1 = (lambda0-lambda1)/(lambda0*tPathLength) ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    zmean = (1.-exp(par3*log(lambda1/lambda0)))/(par1*par3) ;
-  }
-
-  zPathLength = zmean ;
-
-  //  sample z
-  if(samplez)
-  {
-    const G4double  ztmax = 0.99 ;
-    G4double zt = zmean/tPathLength ;
-
-    if (tPathLength > stepmin && zt < ztmax)              
-    {
-      G4double u,cz1;
-      if(zt >= third)
-      {
-        G4double cz = 0.5*(3.*zt-1.)/(1.-zt) ;
-        cz1 = 1.+cz ;
-        G4double u0 = cz/cz1 ;
-        G4double grej ;
-        do {
-            u = exp(log(G4UniformRand())/cz1) ;
-            grej = exp(cz*log(u/u0))*(1.-u)/(1.-u0) ;
-           } while (grej < G4UniformRand()) ;
-      }
-      else
-      {
-        cz1 = 1./zt-1.;
-        u = 1.-exp(log(G4UniformRand())/cz1) ;
-      }
-      zPathLength = tPathLength*u ;
-    }
-  }
-
-  if(zPathLength > lambda0) zPathLength = lambda0;
-
-  return zPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::ComputeTrueStepLength(G4double geomStepLength)
-{
-  // step defined other than transportation 
-  if(geomStepLength == zPathLength && tPathLength <= currentRange)
-    return tPathLength;
-
-  // t = z for very small step
-  zPathLength = geomStepLength;
-  tPathLength = geomStepLength;
-  if(geomStepLength < tlimitminfix) return tPathLength;
-  
-  // recalculation
-  if((geomStepLength > lambda0*tausmall) && !insideskin)
-  {
-    if(par1 <  0.)
-      tPathLength = -lambda0*log(1.-geomStepLength/lambda0) ;
-    else 
-    {
-      if(par1*par3*geomStepLength < 1.)
-        tPathLength = (1.-exp(log(1.-par1*par3*geomStepLength)/par3))/par1 ;
-      else 
-        tPathLength = currentRange;
-    }  
-  }
-  if(tPathLength < geomStepLength) tPathLength = geomStepLength;
-
-  return tPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::ComputeTheta0(G4double trueStepLength,
-                                        G4double KineticEnergy)
-{
-  // for all particles take the width of the central part
-  //  from a  parametrization similar to the Highland formula
-  // ( Highland formula: Particle Physics Booklet, July 2002, eq. 26.10)
-  const G4double c_highland = 13.6*MeV ;
-  G4double betacp = sqrt(currentKinEnergy*(currentKinEnergy+2.*mass)*
-                         KineticEnergy*(KineticEnergy+2.*mass)/
-                      ((currentKinEnergy+mass)*(KineticEnergy+mass)));
-  y = trueStepLength/currentRadLength;
-  G4double theta0 = c_highland*std::abs(charge)*sqrt(y)/betacp;
-  y = log(y);
-  // correction factor from e-/proton scattering data
-  G4double corr = coeffth1+coeffth2*y;                
-  if(y < -6.5) corr -= 0.011*(6.5+y);
-  theta0 *= corr ;                                               
-
-  return theta0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4UrbanMscModel::SampleScattering(const G4DynamicParticle* dynParticle,
-				       G4double safety)
-{
-  G4double kineticEnergy = dynParticle->GetKineticEnergy();
-
-  if((kineticEnergy <= 0.0) || (tPathLength <= tlimitminfix) ||
-     (tPathLength/tausmall < lambda0)) return;
-
-  G4double cth  = SampleCosineTheta(tPathLength,kineticEnergy);
-
-  // protection against 'bad' cth values
-  if(std::abs(cth) > 1.) return;
-
-  G4double sth  = sqrt((1.0 - cth)*(1.0 + cth));
-  G4double phi  = twopi*G4UniformRand();
-  G4double dirx = sth*cos(phi);
-  G4double diry = sth*sin(phi);
-
-  G4ThreeVector oldDirection = dynParticle->GetMomentumDirection();
-  G4ThreeVector newDirection(dirx,diry,cth);
-  newDirection.rotateUz(oldDirection);
-  fParticleChange->ProposeMomentumDirection(newDirection);
-
-  if (latDisplasment && safety > tlimitminfix) {
-
-    G4double r = SampleDisplacement();
-    /*
-    G4cout << "G4UrbanMscModel::SampleSecondaries: e(MeV)= " << kineticEnergy
-	   << " sinTheta= " << sth << " r(mm)= " << r
-           << " trueStep(mm)= " << tPathLength
-           << " geomStep(mm)= " << zPathLength
-           << G4endl;
-    */
-    if(r > 0.)
-      {
-        G4double latcorr = LatCorrelation();
-        if(latcorr > r) latcorr = r;
-
-        // sample direction of lateral displacement
-        // compute it from the lateral correlation
-        G4double Phi = 0.;
-        if(std::abs(r*sth) < latcorr)
-          Phi  = twopi*G4UniformRand();
-        else
-        {
-          G4double psi = std::acos(latcorr/(r*sth));
-          if(G4UniformRand() < 0.5)
-            Phi = phi+psi;
-          else
-            Phi = phi-psi;
-        }
-
-        dirx = std::cos(Phi);
-        diry = std::sin(Phi);
-
-        G4ThreeVector latDirection(dirx,diry,0.0);
-        latDirection.rotateUz(oldDirection);
-
-	ComputeDisplacement(fParticleChange, latDirection, r, safety);
-      }
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::SampleCosineTheta(G4double trueStepLength,
-					    G4double KineticEnergy)
-{
-  G4double cth = 1. ;
-  G4double tau = trueStepLength/lambda0 ;
-
-  Zeff = couple->GetMaterial()->GetTotNbOfElectPerVolume()/
-         couple->GetMaterial()->GetTotNbOfAtomsPerVolume() ;
-
-  if(Zold != Zeff)  
-    UpdateCache();
-
-  if(insideskin)
-  {
-    //no scattering, single or plural scattering
-    G4double mean = trueStepLength/stepmin ;
-
-    G4int n = G4Poisson(mean);
-    if(n > 0)
-    {
-      //screening (Moliere-Bethe)
-      G4double mom2 = KineticEnergy*(2.*mass+KineticEnergy);
-      G4double beta2 = mom2/((KineticEnergy+mass)*(KineticEnergy+mass));
-      G4double ascr = scr1/mom2;
-      ascr *= 1.13+scr2/beta2;
-      G4double ascr1 = 1.+2.*ascr;
-      G4double bp1=ascr1+1.;
-      G4double bm1=ascr1-1.;
-
-      // single scattering from screened Rutherford x-section
-      G4double ct,st,phi;
-      G4double sx=0.,sy=0.,sz=0.;
-      for(G4int i=1; i<=n; i++)
-      {
-        ct = ascr1-bp1*bm1/(2.*G4UniformRand()+bm1);
-        if(ct < -1.) ct = -1.;
-        if(ct >  1.) ct =  1.; 
-        st = sqrt(1.-ct*ct);
-        phi = twopi*G4UniformRand();
-        sx += st*cos(phi);
-        sy += st*sin(phi);
-        sz += ct;
-      }
-      cth = sz/sqrt(sx*sx+sy*sy+sz*sz);
-    }
-  }
-  else
-  {
-    if(trueStepLength >= currentRange*dtrl) 
-    {
-      if(par1*trueStepLength < 1.)
-	tau = -par2*log(1.-par1*trueStepLength) ;
-      // for the case if ioni/brems are inactivated
-      // see the corresponding condition in ComputeGeomPathLength 
-      else if(1.-KineticEnergy/currentKinEnergy > taulim)
-	tau = taubig ;
-    }
-    currentTau = tau ;
-    lambdaeff = trueStepLength/currentTau;
-    currentRadLength = couple->GetMaterial()->GetRadlen();
-
-    if (tau >= taubig) cth = -1.+2.*G4UniformRand();
-    else if (tau >= tausmall)
-    {
-      G4double xsi = 3.0;  
-      G4double x0 = 1.;
-      G4double a = 1., ea = 0., eaa = 1.;
-      G4double b=2.,b1=3.,bx=1.,eb1=3.,ebx=1.;
-      G4double prob = 1. , qprob = 1. ;
-      G4double xmean1 = 1., xmean2 = 0.;
-      G4double xmeanth = exp(-tau);
-      G4double x2meanth = (1.+2.*exp(-2.5*tau))/3.;
-
-      G4double relloss = 1.-KineticEnergy/currentKinEnergy;
-      if(relloss > rellossmax) 
-        return SimpleScattering(xmeanth,x2meanth);
-
-      G4double theta0 = ComputeTheta0(trueStepLength,KineticEnergy);
-
-      // protection for very small angles
-      if(theta0 < tausmall) return cth;
-    
-      if(theta0 > theta0max)
-        return SimpleScattering(xmeanth,x2meanth);
-      G4double sth = sin(0.5*theta0);
-      a = 0.25/(sth*sth);
-
-      ea = exp(-xsi);
-      eaa = 1.-ea ;
-      xmean1 = 1.-(1.-(1.+xsi)*ea)/(a*eaa);
-      x0 = 1.-xsi/a;
-
-      if(xmean1 <= 0.999*xmeanth)
-        return SimpleScattering(xmeanth,x2meanth);
-
-      // from MUSCAT H,Be,Fe data 
-      G4double c = coeffc1;                         
-      if(y > -13.5) 
-        c += coeffc2*exp(3.*log(y+13.5));
-
-      if(abs(c-3.) < 0.001)  c = 3.001;      
-      if(abs(c-2.) < 0.001)  c = 2.001;      
-
-      G4double c1 = c-1.;
-
-      //from continuity of derivatives
-      b = 1.+(c-xsi)/a;
-
-      b1 = b+1.;
-      bx = c/a;
-      eb1 = exp(c1*log(b1));
-      ebx = exp(c1*log(bx));
-
-      xmean2 = (x0*eb1+ebx-(eb1*bx-b1*ebx)/(c-2.))/(eb1-ebx);
-      
-      G4double f1x0 = a*ea/eaa;
-      G4double f2x0 = c1*eb1/(bx*(eb1-ebx));
-      prob = f2x0/(f1x0+f2x0);
-
-      qprob = xmeanth/(prob*xmean1+(1.-prob)*xmean2);
-
-      // sampling of costheta
-      if(G4UniformRand() < qprob)
-      {
-        if(G4UniformRand() < prob)
-          cth = 1.+log(ea+G4UniformRand()*eaa)/a ;
-        else
-          cth = b-b1*bx/exp(log(ebx+(eb1-ebx)*G4UniformRand())/c1) ;
-      }
-      else
-        cth = -1.+2.*G4UniformRand();
-    }
-  }  
-  return cth ;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::SimpleScattering(G4double xmeanth,G4double x2meanth)
-{
-  // 'large angle scattering'
-  // 2 model functions with correct xmean and x2mean
-  G4double a = (2.*xmeanth+9.*x2meanth-3.)/(2.*xmeanth-3.*x2meanth+1.);
-  G4double prob = (a+2.)*xmeanth/a;
-
-  // sampling
-  G4double cth = 1.;
-  if(G4UniformRand() < prob)
-    cth = -1.+2.*exp(log(G4UniformRand())/(a+1.));
-  else
-    cth = -1.+2.*G4UniformRand();
-  return cth;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::SampleDisplacement()
-{
-  const G4double kappa = 2.5;
-  const G4double kappapl1 = kappa+1.;
-  const G4double kappami1 = kappa-1.;
-  G4double rmean = 0.0;
-  if ((currentTau >= tausmall) && !insideskin) {
-    if (currentTau < taulim) {
-      rmean = kappa*currentTau*currentTau*currentTau*
-             (1.-kappapl1*currentTau*0.25)/6. ;
-
-    } else {
-      G4double etau = 0.0;
-      if (currentTau<taubig) etau = exp(-currentTau);
-      rmean = -kappa*currentTau;
-      rmean = -exp(rmean)/(kappa*kappami1);
-      rmean += currentTau-kappapl1/kappa+kappa*etau/kappami1;
-    }
-    if (rmean>0.) rmean = 2.*lambdaeff*sqrt(rmean/3.0);
-    else          rmean = 0.;
-  }
-
-  // protection against z > t ...........................
-  if(rmean > 0.) {
-    G4double zt = (tPathLength-zPathLength)*(tPathLength+zPathLength);
-    if(zt <= 0.)
-      rmean = 0.;
-    else if(rmean*rmean > zt)
-      rmean = sqrt(zt);
-  }
-  return rmean;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel::LatCorrelation()
-{
-  const G4double kappa = 2.5;
-  const G4double kappami1 = kappa-1.;
-
-  G4double latcorr = 0.;
-  if((currentTau >= tausmall) && !insideskin)
-  {
-    if(currentTau < taulim)
-      latcorr = lambdaeff*kappa*currentTau*currentTau*
-                (1.-(kappa+1.)*currentTau/3.)/3.;
-    else
-    {
-      G4double etau = 0.;
-      if(currentTau < taubig) etau = exp(-currentTau);
-      latcorr = -kappa*currentTau;
-      latcorr = exp(latcorr)/kappami1;
-      latcorr += 1.-kappa*etau/kappami1 ;
-      latcorr *= 2.*lambdaeff/3. ;
-    }
-  }
-
-  return latcorr;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Index: unk/source/processes/electromagnetic/standard/src/G4UrbanMscModel2.cc
===================================================================
--- /trunk/source/processes/electromagnetic/standard/src/G4UrbanMscModel2.cc	(revision 1318)
+++ 	(revision )
@@ -1,1058 +1,0 @@
-//
-// ********************************************************************
-// * License and Disclaimer                                           *
-// *                                                                  *
-// * The  Geant4 software  is  copyright of the Copyright Holders  of *
-// * the Geant4 Collaboration.  It is provided  under  the terms  and *
-// * conditions of the Geant4 Software License,  included in the file *
-// * LICENSE and available at  http://cern.ch/geant4/license .  These *
-// * include a list of copyright holders.                             *
-// *                                                                  *
-// * Neither the authors of this software system, nor their employing *
-// * institutes,nor the agencies providing financial support for this *
-// * work  make  any representation or  warranty, express or implied, *
-// * regarding  this  software system or assume any liability for its *
-// * use.  Please see the license in the file  LICENSE  and URL above *
-// * for the full disclaimer and the limitation of liability.         *
-// *                                                                  *
-// * This  code  implementation is the result of  the  scientific and *
-// * technical work of the GEANT4 collaboration.                      *
-// * By using,  copying,  modifying or  distributing the software (or *
-// * any work based  on the software)  you  agree  to acknowledge its *
-// * use  in  resulting  scientific  publications,  and indicate your *
-// * acceptance of all terms of the Geant4 Software license.          *
-// ********************************************************************
-//
-//
-// $Id: G4UrbanMscModel2.cc,v 1.27 2009/07/20 18:41:34 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
-//
-// -------------------------------------------------------------------
-//
-// GEANT4 Class file
-//
-//
-// File name:   G4UrbanMscModel2
-//
-// Author:      Laszlo Urban
-//
-// Creation date: 06.03.2008
-//
-// Modifications:
-//
-// 06-03-2008 starting point : G4UrbanMscModel2 = G4UrbanMscModel 9.1 ref 02
-//
-// 13-03-08  Bug in SampleScattering (which caused lateral asymmetry) fixed
-//           (L.Urban)
-//
-// 14-03-08  Simplification of step limitation in ComputeTruePathLengthLimit,
-//           + tlimitmin is the same for UseDistancetoBoundary and
-//           UseSafety (L.Urban)           
-//
-// 16-03-08  Reorganization of SampleCosineTheta + new method SimpleScattering
-//           SimpleScattering is used if the relative energy loss is too big
-//           or theta0 is too big (see data members rellossmax, theta0max)
-//           (L.Urban)          
-//
-// 17-03-08  tuning of the correction factor in ComputeTheta0 (L.Urban)
-//
-// 19-03-08  exponent c of the 'tail' model function is not equal to 2 any more,
-//           value of c has been extracted from some e- scattering data (L.Urban) 
-//
-// 24-03-08  Step limitation in ComputeTruePathLengthLimit has been
-//           simplified further + some data members have been removed (L.Urban)
-//
-// 24-07-08  central part of scattering angle (theta0) has been tuned
-//           tail of the scattering angle distribution has been tuned
-//           using some e- and proton scattering data
-//
-// 05-08-08  bugfix in ComputeTruePathLengthLimit (L.Urban)
-//
-// 09-10-08  theta0 and tail have been retuned using some e-,mu,proton
-//           scattering data (L.Urban)
-//           + single scattering without path length correction for
-//           small steps (t < tlimitmin, for UseDistanceToBoundary only)
-//
-// 15-10-08  Moliere-Bethe screening in the single scattering part(L.Urban)          
-//
-// 17-10-08  stepping similar to that in model (9.1) for UseSafety case
-//           for e+/e- in order to speed up the code for calorimeters
-//
-// 23-10-08  bugfix in the screeningparameter of the single scattering part,
-//           some technical change in order to speed up the code (UpdateCache)
-//
-// 27-10-08  bugfix in ComputeTruePathLengthLimit (affects UseDistanceToBoundary
-//           stepping type only) (L.Urban)          
-
-// Class Description:
-//
-// Implementation of the model of multiple scattering based on
-// H.W.Lewis Phys Rev 78 (1950) 526 and others
-
-// -------------------------------------------------------------------
-// In its present form the model can be  used for simulation 
-//   of the e-/e+, muon and charged hadron multiple scattering
-//
-
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-#include "G4UrbanMscModel2.hh"
-#include "Randomize.hh"
-#include "G4Electron.hh"
-#include "G4LossTableManager.hh"
-#include "G4ParticleChangeForMSC.hh"
-
-#include "G4Poisson.hh"
-#include "globals.hh"
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-using namespace std;
-
-G4UrbanMscModel2::G4UrbanMscModel2(const G4String& nam)
-  : G4VMscModel(nam),
-    isInitialized(false)
-{
-  masslimite    = 0.6*MeV;
-  lambdalimit   = 1.*mm;
-  fr            = 0.02;
-  //facsafety     = 0.3;
-  taubig        = 8.0;
-  tausmall      = 1.e-16;
-  taulim        = 1.e-6;
-  currentTau    = taulim;
-  tlimitminfix  = 1.e-6*mm;            
-  stepmin       = tlimitminfix;
-  smallstep     = 1.e10;
-  currentRange  = 0. ;
-  rangeinit     = 0.;
-  tlimit        = 1.e10*mm;
-  tlimitmin     = 10.*tlimitminfix;            
-  tgeom         = 1.e50*mm;
-  geombig       = 1.e50*mm;
-  geommin       = 1.e-3*mm;
-  geomlimit     = geombig;
-  presafety     = 0.*mm;
-                          
-  y             = 0.;
-
-  Zold          = 0.;
-  Zeff          = 1.;
-  Z2            = 1.;                
-  Z23           = 1.;                    
-  lnZ           = 0.;
-  coeffth1      = 0.;
-  coeffth2      = 0.;
-  coeffc1       = 0.;
-  coeffc2       = 0.;
-  scr1ini       = fine_structure_const*fine_structure_const*
-                  electron_mass_c2*electron_mass_c2/(0.885*0.885*4.*pi);
-  scr2ini       = 3.76*fine_structure_const*fine_structure_const;
-  scr1          = 0.;
-  scr2          = 0.;
-
-  theta0max     = pi/6.;
-  rellossmax    = 0.50;
-  third         = 1./3.;
-  particle      = 0;
-  theManager    = G4LossTableManager::Instance(); 
-  inside        = false;  
-  insideskin    = false;
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4UrbanMscModel2::~G4UrbanMscModel2()
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4UrbanMscModel2::Initialise(const G4ParticleDefinition* p,
-				  const G4DataVector&)
-{
-  skindepth = skin*stepmin;
-  if(isInitialized) return;
-  // set values of some data members
-  SetParticle(p);
-
-  fParticleChange = GetParticleChangeForMSC();
-  InitialiseSafetyHelper();
-
-  isInitialized = true;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::ComputeCrossSectionPerAtom( 
-                             const G4ParticleDefinition* part,
-                                   G4double KineticEnergy,
-                                   G4double AtomicNumber,G4double,
-				   G4double, G4double)
-{
-  const G4double sigmafactor = twopi*classic_electr_radius*classic_electr_radius;
-  const G4double epsfactor = 2.*electron_mass_c2*electron_mass_c2*
-                            Bohr_radius*Bohr_radius/(hbarc*hbarc);
-  const G4double epsmin = 1.e-4 , epsmax = 1.e10;
-
-  const G4double Zdat[15] = { 4.,  6., 13., 20., 26., 29., 32., 38., 47.,
-                             50., 56., 64., 74., 79., 82. };
-
-  const G4double Tdat[22] = { 100*eV,  200*eV,  400*eV,  700*eV,
-                               1*keV,   2*keV,   4*keV,   7*keV,
-			      10*keV,  20*keV,  40*keV,  70*keV,
-                             100*keV, 200*keV, 400*keV, 700*keV,
-                               1*MeV,   2*MeV,   4*MeV,   7*MeV,
-			      10*MeV,  20*MeV};
-
-  // corr. factors for e-/e+ lambda for T <= Tlim
-          G4double celectron[15][22] =
-          {{1.125,1.072,1.051,1.047,1.047,1.050,1.052,1.054,
-            1.054,1.057,1.062,1.069,1.075,1.090,1.105,1.111,
-            1.112,1.108,1.100,1.093,1.089,1.087            },
-           {1.408,1.246,1.143,1.096,1.077,1.059,1.053,1.051,
-            1.052,1.053,1.058,1.065,1.072,1.087,1.101,1.108,
-            1.109,1.105,1.097,1.090,1.086,1.082            },
-           {2.833,2.268,1.861,1.612,1.486,1.309,1.204,1.156,
-            1.136,1.114,1.106,1.106,1.109,1.119,1.129,1.132,
-            1.131,1.124,1.113,1.104,1.099,1.098            },
-           {3.879,3.016,2.380,2.007,1.818,1.535,1.340,1.236,
-            1.190,1.133,1.107,1.099,1.098,1.103,1.110,1.113,
-            1.112,1.105,1.096,1.089,1.085,1.098            },
-           {6.937,4.330,2.886,2.256,1.987,1.628,1.395,1.265,
-            1.203,1.122,1.080,1.065,1.061,1.063,1.070,1.073,
-            1.073,1.070,1.064,1.059,1.056,1.056            },
-           {9.616,5.708,3.424,2.551,2.204,1.762,1.485,1.330,
-            1.256,1.155,1.099,1.077,1.070,1.068,1.072,1.074,
-            1.074,1.070,1.063,1.059,1.056,1.052            },
-           {11.72,6.364,3.811,2.806,2.401,1.884,1.564,1.386,
-            1.300,1.180,1.112,1.082,1.073,1.066,1.068,1.069,
-            1.068,1.064,1.059,1.054,1.051,1.050            },
-           {18.08,8.601,4.569,3.183,2.662,2.025,1.646,1.439,
-            1.339,1.195,1.108,1.068,1.053,1.040,1.039,1.039,
-            1.039,1.037,1.034,1.031,1.030,1.036            },
-           {18.22,10.48,5.333,3.713,3.115,2.367,1.898,1.631,
-            1.498,1.301,1.171,1.105,1.077,1.048,1.036,1.033,
-            1.031,1.028,1.024,1.022,1.021,1.024            },
-           {14.14,10.65,5.710,3.929,3.266,2.453,1.951,1.669,
-            1.528,1.319,1.178,1.106,1.075,1.040,1.027,1.022,
-            1.020,1.017,1.015,1.013,1.013,1.020            },
-           {14.11,11.73,6.312,4.240,3.478,2.566,2.022,1.720,
-            1.569,1.342,1.186,1.102,1.065,1.022,1.003,0.997,
-            0.995,0.993,0.993,0.993,0.993,1.011            },
-           {22.76,20.01,8.835,5.287,4.144,2.901,2.219,1.855,
-            1.677,1.410,1.224,1.121,1.073,1.014,0.986,0.976,
-            0.974,0.972,0.973,0.974,0.975,0.987            },
-           {50.77,40.85,14.13,7.184,5.284,3.435,2.520,2.059,
-            1.837,1.512,1.283,1.153,1.091,1.010,0.969,0.954,
-            0.950,0.947,0.949,0.952,0.954,0.963            },
-           {65.87,59.06,15.87,7.570,5.567,3.650,2.682,2.182,
-            1.939,1.579,1.325,1.178,1.108,1.014,0.965,0.947,
-            0.941,0.938,0.940,0.944,0.946,0.954            },
-           {55.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239,
-            1.985,1.609,1.343,1.188,1.113,1.013,0.960,0.939,
-            0.933,0.930,0.933,0.936,0.939,0.949            }};
-	    
-           G4double cpositron[15][22] = {
-           {2.589,2.044,1.658,1.446,1.347,1.217,1.144,1.110,
-            1.097,1.083,1.080,1.086,1.092,1.108,1.123,1.131,
-            1.131,1.126,1.117,1.108,1.103,1.100            },
-           {3.904,2.794,2.079,1.710,1.543,1.325,1.202,1.145,
-            1.122,1.096,1.089,1.092,1.098,1.114,1.130,1.137,
-            1.138,1.132,1.122,1.113,1.108,1.102            },
-           {7.970,6.080,4.442,3.398,2.872,2.127,1.672,1.451,
-            1.357,1.246,1.194,1.179,1.178,1.188,1.201,1.205,
-            1.203,1.190,1.173,1.159,1.151,1.145            },
-           {9.714,7.607,5.747,4.493,3.815,2.777,2.079,1.715,
-            1.553,1.353,1.253,1.219,1.211,1.214,1.225,1.228,
-            1.225,1.210,1.191,1.175,1.166,1.174            },
-           {17.97,12.95,8.628,6.065,4.849,3.222,2.275,1.820,
-            1.624,1.382,1.259,1.214,1.202,1.202,1.214,1.219,
-            1.217,1.203,1.184,1.169,1.160,1.151            },
-           {24.83,17.06,10.84,7.355,5.767,3.707,2.546,1.996,
-            1.759,1.465,1.311,1.252,1.234,1.228,1.238,1.241,
-            1.237,1.222,1.201,1.184,1.174,1.159            },
-           {23.26,17.15,11.52,8.049,6.375,4.114,2.792,2.155,
-            1.880,1.535,1.353,1.281,1.258,1.247,1.254,1.256,
-            1.252,1.234,1.212,1.194,1.183,1.170            },
-           {22.33,18.01,12.86,9.212,7.336,4.702,3.117,2.348,
-            2.015,1.602,1.385,1.297,1.268,1.251,1.256,1.258,
-            1.254,1.237,1.214,1.195,1.185,1.179            },
-           {33.91,24.13,15.71,10.80,8.507,5.467,3.692,2.808,
-            2.407,1.873,1.564,1.425,1.374,1.330,1.324,1.320,
-            1.312,1.288,1.258,1.235,1.221,1.205            },
-           {32.14,24.11,16.30,11.40,9.015,5.782,3.868,2.917,
-            2.490,1.925,1.596,1.447,1.391,1.342,1.332,1.327,
-            1.320,1.294,1.264,1.240,1.226,1.214            },
-           {29.51,24.07,17.19,12.28,9.766,6.238,4.112,3.066,
-            2.602,1.995,1.641,1.477,1.414,1.356,1.342,1.336,
-            1.328,1.302,1.270,1.245,1.231,1.233            },
-           {38.19,30.85,21.76,15.35,12.07,7.521,4.812,3.498,
-            2.926,2.188,1.763,1.563,1.484,1.405,1.382,1.371,
-            1.361,1.330,1.294,1.267,1.251,1.239            },
-           {49.71,39.80,27.96,19.63,15.36,9.407,5.863,4.155,
-            3.417,2.478,1.944,1.692,1.589,1.480,1.441,1.423,
-            1.409,1.372,1.330,1.298,1.280,1.258            },
-           {59.25,45.08,30.36,20.83,16.15,9.834,6.166,4.407,
-            3.641,2.648,2.064,1.779,1.661,1.531,1.482,1.459,
-            1.442,1.400,1.354,1.319,1.299,1.272            },
-           {56.38,44.29,30.50,21.18,16.51,10.11,6.354,4.542,
-            3.752,2.724,2.116,1.817,1.692,1.554,1.499,1.474,
-            1.456,1.412,1.364,1.328,1.307,1.282            }};
-
-  //data/corrections for T > Tlim  
-  G4double Tlim = 10.*MeV;
-  G4double beta2lim = Tlim*(Tlim+2.*electron_mass_c2)/
-                      ((Tlim+electron_mass_c2)*(Tlim+electron_mass_c2));
-  G4double bg2lim   = Tlim*(Tlim+2.*electron_mass_c2)/
-                      (electron_mass_c2*electron_mass_c2);
-
-  G4double sig0[15] = {0.2672*barn,  0.5922*barn, 2.653*barn,  6.235*barn,
-                      11.69*barn  , 13.24*barn  , 16.12*barn, 23.00*barn ,
-		      35.13*barn  , 39.95*barn  , 50.85*barn, 67.19*barn ,
-                      91.15*barn  , 104.4*barn  , 113.1*barn};
-		      		       
-  G4double hecorr[15] = {120.70, 117.50, 105.00, 92.92, 79.23,  74.510,  68.29,
-                          57.39,  41.97,  36.14, 24.53, 10.21,  -7.855, -16.84,
-			 -22.30};
-
-  G4double sigma;
-  SetParticle(part);
-
-  G4double Z23 = 2.*log(AtomicNumber)/3.; Z23 = exp(Z23);
-
-  // correction if particle .ne. e-/e+
-  // compute equivalent kinetic energy
-  // lambda depends on p*beta ....
-
-  G4double eKineticEnergy = KineticEnergy;
-
-  if(mass > electron_mass_c2)
-  {
-     G4double TAU = KineticEnergy/mass ;
-     G4double c = mass*TAU*(TAU+2.)/(electron_mass_c2*(TAU+1.)) ;
-     G4double w = c-2. ;
-     G4double tau = 0.5*(w+sqrt(w*w+4.*c)) ;
-     eKineticEnergy = electron_mass_c2*tau ;
-  }
-
-  G4double eTotalEnergy = eKineticEnergy + electron_mass_c2 ;
-  G4double beta2 = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(eTotalEnergy*eTotalEnergy);
-  G4double bg2   = eKineticEnergy*(eTotalEnergy+electron_mass_c2)
-                                 /(electron_mass_c2*electron_mass_c2);
-
-  G4double eps = epsfactor*bg2/Z23;
-
-  if     (eps<epsmin)  sigma = 2.*eps*eps;
-  else if(eps<epsmax)  sigma = log(1.+2.*eps)-2.*eps/(1.+2.*eps);
-  else                 sigma = log(2.*eps)-1.+1./eps;
-
-  sigma *= ChargeSquare*AtomicNumber*AtomicNumber/(beta2*bg2);
-
-  // interpolate in AtomicNumber and beta2 
-  G4double c1,c2,cc1,cc2,corr;
-
-  // get bin number in Z
-  G4int iZ = 14;
-  while ((iZ>=0)&&(Zdat[iZ]>=AtomicNumber)) iZ -= 1;
-  if (iZ==14)                               iZ = 13;
-  if (iZ==-1)                               iZ = 0 ;
-
-  G4double Z1 = Zdat[iZ];
-  G4double Z2 = Zdat[iZ+1];
-  G4double ratZ = (AtomicNumber-Z1)*(AtomicNumber+Z1)/
-                  ((Z2-Z1)*(Z2+Z1));
-
-  if(eKineticEnergy <= Tlim) 
-  {
-    // get bin number in T (beta2)
-    G4int iT = 21;
-    while ((iT>=0)&&(Tdat[iT]>=eKineticEnergy)) iT -= 1;
-    if(iT==21)                                  iT = 20;
-    if(iT==-1)                                  iT = 0 ;
-
-    //  calculate betasquare values
-    G4double T = Tdat[iT],   E = T + electron_mass_c2;
-    G4double b2small = T*(E+electron_mass_c2)/(E*E);
-
-    T = Tdat[iT+1]; E = T + electron_mass_c2;
-    G4double b2big = T*(E+electron_mass_c2)/(E*E);
-    G4double ratb2 = (beta2-b2small)/(b2big-b2small);
-
-    if (charge < 0.)
-    {
-       c1 = celectron[iZ][iT];
-       c2 = celectron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = celectron[iZ][iT+1];
-       c2 = celectron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-
-       sigma *= sigmafactor/corr;
-    }
-    else              
-    {
-       c1 = cpositron[iZ][iT];
-       c2 = cpositron[iZ+1][iT];
-       cc1 = c1+ratZ*(c2-c1);
-
-       c1 = cpositron[iZ][iT+1];
-       c2 = cpositron[iZ+1][iT+1];
-       cc2 = c1+ratZ*(c2-c1);
-
-       corr = cc1+ratb2*(cc2-cc1);
-
-       sigma *= sigmafactor/corr;
-    }
-  }
-  else
-  {
-    c1 = bg2lim*sig0[iZ]*(1.+hecorr[iZ]*(beta2-beta2lim))/bg2;
-    c2 = bg2lim*sig0[iZ+1]*(1.+hecorr[iZ+1]*(beta2-beta2lim))/bg2;
-    if((AtomicNumber >= Z1) && (AtomicNumber <= Z2))
-      sigma = c1+ratZ*(c2-c1) ;
-    else if(AtomicNumber < Z1)
-      sigma = AtomicNumber*AtomicNumber*c1/(Z1*Z1);
-    else if(AtomicNumber > Z2)
-      sigma = AtomicNumber*AtomicNumber*c2/(Z2*Z2);
-  }
-  return sigma;
-
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::ComputeTruePathLengthLimit(
-                             const G4Track& track,
-			     G4PhysicsTable* theTable,
-			     G4double currentMinimalStep)
-{
-  tPathLength = currentMinimalStep;
-  G4StepPoint* sp = track.GetStep()->GetPreStepPoint();
-  G4StepStatus stepStatus = sp->GetStepStatus();
-
-  const G4DynamicParticle* dp = track.GetDynamicParticle();
-
-  if(stepStatus == fUndefined) {
-    inside = false;
-    insideskin = false;
-    tlimit = geombig;
-    SetParticle( dp->GetDefinition() );
-  }
-
-  theLambdaTable = theTable;
-  couple = track.GetMaterialCutsCouple();
-  currentMaterialIndex = couple->GetIndex();
-  currentKinEnergy = dp->GetKineticEnergy();
-  currentRange = 
-    theManager->GetRangeFromRestricteDEDX(particle,currentKinEnergy,couple);
-  lambda0 = GetLambda(currentKinEnergy);
-
-  // stop here if small range particle
-  if(inside) return tPathLength;            
-  
-  if(tPathLength > currentRange) tPathLength = currentRange;
-
-  presafety = sp->GetSafety();
-
-  //G4cout << "G4Urban2::StepLimit tPathLength= " 
-  //	 <<tPathLength<<" safety= " << presafety
-  //       << " range= " <<currentRange<< " lambda= "<<lambda0
-  //	 << " Alg: " << steppingAlgorithm <<G4endl;
-
-  // far from geometry boundary
-  if(currentRange < presafety)
-    {
-      inside = true;
-      return tPathLength;  
-    }
-
-  // standard  version
-  //
-  if (steppingAlgorithm == fUseDistanceToBoundary)
-    {
-      //compute geomlimit and presafety 
-      G4double geomlimit = ComputeGeomLimit(track, presafety, currentRange);
-
-      // is it far from boundary ?
-      if(currentRange < presafety)
-	{
-	  inside = true;
-	  return tPathLength;   
-	}
-
-      smallstep += 1.;
-      insideskin = false;
-
-      if((stepStatus == fGeomBoundary) || (stepStatus == fUndefined))
-        {
-          rangeinit = currentRange;
-          if(stepStatus == fUndefined) smallstep = 1.e10;
-          else  smallstep = 1.;
-
-          //define stepmin here (it depends on lambda!)
-          //rough estimation of lambda_elastic/lambda_transport
-          G4double rat = currentKinEnergy/MeV ;
-          rat = 1.e-3/(rat*(10.+rat)) ;
-          //stepmin ~ lambda_elastic
-          stepmin = rat*lambda0;
-          skindepth = skin*stepmin;
-          //define tlimitmin
-          tlimitmin = 10.*stepmin;
-          if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
-	  //G4cout << "rangeinit= " << rangeinit << " stepmin= " << stepmin
-	  //	 << " tlimitmin= " << tlimitmin << " geomlimit= " << geomlimit <<G4endl;
-          // constraint from the geometry
-          if((geomlimit < geombig) && (geomlimit > geommin))
-            {
-              // geomlimit is a geometrical step length
-              // transform it to true path length (estimation)
-              if((1.-geomlimit/lambda0) > 0.)
-                geomlimit = -lambda0*log(1.-geomlimit/lambda0)+tlimitmin ;
-
-              if(stepStatus == fGeomBoundary)
-                tgeom = geomlimit/facgeom;
-              else
-                tgeom = 2.*geomlimit/facgeom;
-            }
-            else
-              tgeom = geombig;
-        }
-
-
-      //step limit 
-      tlimit = facrange*rangeinit;              
-      if(tlimit < facsafety*presafety)
-        tlimit = facsafety*presafety; 
-
-      //lower limit for tlimit
-      if(tlimit < tlimitmin) tlimit = tlimitmin;
-
-      if(tlimit > tgeom) tlimit = tgeom;
-
-      //G4cout << "tgeom= " << tgeom << " geomlimit= " << geomlimit  
-      //      << " tlimit= " << tlimit << " presafety= " << presafety << G4endl;
-
-      // shortcut
-      if((tPathLength < tlimit) && (tPathLength < presafety) &&
-         (smallstep >= skin) && (tPathLength < geomlimit-0.999*skindepth))
-	return tPathLength;   
-
-      // step reduction near to boundary
-      if(smallstep < skin)
-	{
-	  tlimit = stepmin;
-	  insideskin = true;
-	}
-      else if(geomlimit < geombig)
-	{
-	  if(geomlimit > skindepth)
-	    {
-	      if(tlimit > geomlimit-0.999*skindepth)
-		tlimit = geomlimit-0.999*skindepth;
-	    }
-	  else
-	    {
-	      insideskin = true;
-	      if(tlimit > stepmin) tlimit = stepmin;
-	    }
-	}
-
-      if(tlimit < stepmin) tlimit = stepmin;
-
-      if(tPathLength > tlimit) tPathLength = tlimit  ; 
-
-    }
-    // for 'normal' simulation with or without magnetic field 
-    //  there no small step/single scattering at boundaries
-  else if(steppingAlgorithm == fUseSafety)
-    {
-      // compute presafety again if presafety <= 0 and no boundary
-      // i.e. when it is needed for optimization purposes
-      if((stepStatus != fGeomBoundary) && (presafety < tlimitminfix)) 
-	presafety = ComputeSafety(sp->GetPosition(),tPathLength); 
-
-      // is far from boundary
-      if(currentRange < presafety)
-        {
-          inside = true;
-          return tPathLength;  
-        }
-
-      if((stepStatus == fGeomBoundary) || (stepStatus == fUndefined))
-      {
-        rangeinit = currentRange;
-        fr = facrange;
-        // 9.1 like stepping for e+/e- only (not for muons,hadrons)
-        if(mass < masslimite) 
-        {
-          if(lambda0 > currentRange)
-            rangeinit = lambda0;
-          if(lambda0 > lambdalimit)
-            fr *= 0.75+0.25*lambda0/lambdalimit;
-        }
-
-        //lower limit for tlimit
-        G4double rat = currentKinEnergy/MeV ;
-        rat = 1.e-3/(rat*(10.+rat)) ;
-        tlimitmin = 10.*lambda0*rat;
-        if(tlimitmin < tlimitminfix) tlimitmin = tlimitminfix;
-      }
-      //step limit
-      tlimit = fr*rangeinit;               
-
-      if(tlimit < facsafety*presafety)
-        tlimit = facsafety*presafety;
-
-      //lower limit for tlimit
-      if(tlimit < tlimitmin) tlimit = tlimitmin;
-
-      if(tPathLength > tlimit) tPathLength = tlimit;
-    }
-  
-  // version similar to 7.1 (needed for some experiments)
-  else
-    {
-      if (stepStatus == fGeomBoundary)
-	{
-	  if (currentRange > lambda0) tlimit = facrange*currentRange;
-	  else                        tlimit = facrange*lambda0;
-
-	  if(tlimit < tlimitmin) tlimit = tlimitmin;
-	  if(tPathLength > tlimit) tPathLength = tlimit;
-	}
-    }
-  //G4cout << "tPathLength= " << tPathLength 
-  //	 << " currentMinimalStep= " << currentMinimalStep << G4endl;
-  return tPathLength ;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::ComputeGeomPathLength(G4double)
-{
-  lambdaeff = lambda0;
-  par1 = -1. ;  
-  par2 = par3 = 0. ;  
-
-  //  do the true -> geom transformation
-  zPathLength = tPathLength;
-
-  // z = t for very small tPathLength
-  if(tPathLength < tlimitminfix) return zPathLength;
-
-  // this correction needed to run MSC with eIoni and eBrem inactivated
-  // and makes no harm for a normal run
-  if(tPathLength > currentRange)
-    tPathLength = currentRange ;
-
-  G4double tau   = tPathLength/lambda0 ;
-
-  if ((tau <= tausmall) || insideskin) {
-    zPathLength  = tPathLength;
-    if(zPathLength > lambda0) zPathLength = lambda0;
-    return zPathLength;
-  }
-
-  G4double zmean = tPathLength;
-  if (tPathLength < currentRange*dtrl) {
-    if(tau < taulim) zmean = tPathLength*(1.-0.5*tau) ;
-    else             zmean = lambda0*(1.-exp(-tau));
-  } else if(currentKinEnergy < mass)  {
-    par1 = 1./currentRange ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    if(tPathLength < currentRange)
-      zmean = (1.-exp(par3*log(1.-tPathLength/currentRange)))/(par1*par3) ;
-    else
-      zmean = 1./(par1*par3) ;
-  } else {
-    G4double T1 = theManager->GetEnergy(particle,currentRange-tPathLength,couple);
-    G4double lambda1 = GetLambda(T1);
-
-    par1 = (lambda0-lambda1)/(lambda0*tPathLength) ;
-    par2 = 1./(par1*lambda0) ;
-    par3 = 1.+par2 ;
-    zmean = (1.-exp(par3*log(lambda1/lambda0)))/(par1*par3) ;
-  }
-
-  zPathLength = zmean ;
-
-  //  sample z
-  if(samplez)
-  {
-    const G4double  ztmax = 0.99 ;
-    G4double zt = zmean/tPathLength ;
-
-    if (tPathLength > stepmin && zt < ztmax)              
-    {
-      G4double u,cz1;
-      if(zt >= third)
-      {
-        G4double cz = 0.5*(3.*zt-1.)/(1.-zt) ;
-        cz1 = 1.+cz ;
-        G4double u0 = cz/cz1 ;
-        G4double grej ;
-        do {
-            u = exp(log(G4UniformRand())/cz1) ;
-            grej = exp(cz*log(u/u0))*(1.-u)/(1.-u0) ;
-           } while (grej < G4UniformRand()) ;
-      }
-      else
-      {
-        cz1 = 1./zt-1.;
-        u = 1.-exp(log(G4UniformRand())/cz1) ;
-      }
-      zPathLength = tPathLength*u ;
-    }
-  }
-
-  if(zPathLength > lambda0) zPathLength = lambda0;
-  //G4cout << "zPathLength= " << zPathLength << " lambda1= " << lambda0 << G4endl;
-  return zPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::ComputeTrueStepLength(G4double geomStepLength)
-{
-  // step defined other than transportation 
-  if(geomStepLength == zPathLength && tPathLength <= currentRange)
-    return tPathLength;
-
-  // t = z for very small step
-  zPathLength = geomStepLength;
-  tPathLength = geomStepLength;
-  if(geomStepLength < tlimitminfix) return tPathLength;
-  
-  // recalculation
-  if((geomStepLength > lambda0*tausmall) && !insideskin)
-  {
-    if(par1 <  0.)
-      tPathLength = -lambda0*log(1.-geomStepLength/lambda0) ;
-    else 
-    {
-      if(par1*par3*geomStepLength < 1.)
-        tPathLength = (1.-exp(log(1.-par1*par3*geomStepLength)/par3))/par1 ;
-      else 
-        tPathLength = currentRange;
-    }  
-  }
-  if(tPathLength < geomStepLength) tPathLength = geomStepLength;
-  //G4cout << "tPathLength= " << tPathLength << " step= " << geomStepLength << G4endl;
-
-  return tPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::ComputeTheta0(G4double trueStepLength,
-                                        G4double KineticEnergy)
-{
-  // for all particles take the width of the central part
-  //  from a  parametrization similar to the Highland formula
-  // ( Highland formula: Particle Physics Booklet, July 2002, eq. 26.10)
-  const G4double c_highland = 13.6*MeV ;
-  G4double betacp = sqrt(currentKinEnergy*(currentKinEnergy+2.*mass)*
-                         KineticEnergy*(KineticEnergy+2.*mass)/
-                      ((currentKinEnergy+mass)*(KineticEnergy+mass)));
-  y = trueStepLength/currentRadLength;
-  G4double theta0 = c_highland*std::abs(charge)*sqrt(y)/betacp;
-  y = log(y);
-  // correction factor from e- scattering data
-  G4double corr = coeffth1+coeffth2*y;                
-
-  theta0 *= corr ;                                               
-
-  return theta0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4UrbanMscModel2::SampleScattering(const G4DynamicParticle* dynParticle,
-					G4double safety)
-{
-  G4double kineticEnergy = dynParticle->GetKineticEnergy();
-
-  if((kineticEnergy <= 0.0) || (tPathLength <= tlimitminfix) ||
-     (tPathLength/tausmall < lambda0)) return;
-
-  G4double cth  = SampleCosineTheta(tPathLength,kineticEnergy);
-
-  // protection against 'bad' cth values
-  if(std::abs(cth) > 1.) return;
-
-  G4double sth  = sqrt((1.0 - cth)*(1.0 + cth));
-  G4double phi  = twopi*G4UniformRand();
-  G4double dirx = sth*cos(phi);
-  G4double diry = sth*sin(phi);
-
-  G4ThreeVector oldDirection = dynParticle->GetMomentumDirection();
-  G4ThreeVector newDirection(dirx,diry,cth);
-  newDirection.rotateUz(oldDirection);
-  fParticleChange->ProposeMomentumDirection(newDirection);
-
-  if (latDisplasment && safety > tlimitminfix) {
-
-    G4double r = SampleDisplacement();
-    /*    
-    G4cout << "G4UrbanMscModel2::SampleSecondaries: e(MeV)= " << kineticEnergy
-	   << " sinTheta= " << sth << " r(mm)= " << r
-           << " trueStep(mm)= " << tPathLength
-           << " geomStep(mm)= " << zPathLength
-           << G4endl;
-    */
-    if(r > 0.)
-      {
-        G4double latcorr = LatCorrelation();
-        if(latcorr > r) latcorr = r;
-
-        // sample direction of lateral displacement
-        // compute it from the lateral correlation
-        G4double Phi = 0.;
-        if(std::abs(r*sth) < latcorr)
-          Phi  = twopi*G4UniformRand();
-        else
-        {
-          G4double psi = std::acos(latcorr/(r*sth));
-          if(G4UniformRand() < 0.5)
-            Phi = phi+psi;
-          else
-            Phi = phi-psi;
-        }
-
-        dirx = std::cos(Phi);
-        diry = std::sin(Phi);
-
-        G4ThreeVector latDirection(dirx,diry,0.0);
-        latDirection.rotateUz(oldDirection);
-
-	ComputeDisplacement(fParticleChange, latDirection, r, safety);
-      }
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::SampleCosineTheta(G4double trueStepLength,
-					     G4double KineticEnergy)
-{
-  G4double cth = 1. ;
-  G4double tau = trueStepLength/lambda0 ;
-
-  Zeff = couple->GetMaterial()->GetTotNbOfElectPerVolume()/
-         couple->GetMaterial()->GetTotNbOfAtomsPerVolume() ;
-
-  if(Zold != Zeff)  
-    UpdateCache();
-
-  if(insideskin)
-  {
-    //no scattering, single or plural scattering
-    G4double mean = trueStepLength/stepmin ;
-
-    G4int n = G4Poisson(mean);
-    if(n > 0)
-    {
-      //screening (Moliere-Bethe)
-      G4double mom2 = KineticEnergy*(2.*mass+KineticEnergy);
-      G4double beta2 = mom2/((KineticEnergy+mass)*(KineticEnergy+mass));
-      G4double ascr = scr1/mom2;
-      ascr *= 1.13+scr2/beta2;
-      G4double ascr1 = 1.+2.*ascr;
-      G4double bp1=ascr1+1.;
-      G4double bm1=ascr1-1.;
-
-      // single scattering from screened Rutherford x-section
-      G4double ct,st,phi;
-      G4double sx=0.,sy=0.,sz=0.;
-      for(G4int i=1; i<=n; i++)
-      {
-        ct = ascr1-bp1*bm1/(2.*G4UniformRand()+bm1);
-        if(ct < -1.) ct = -1.;
-        if(ct >  1.) ct =  1.; 
-        st = sqrt(1.-ct*ct);
-        phi = twopi*G4UniformRand();
-        sx += st*cos(phi);
-        sy += st*sin(phi);
-        sz += ct;
-      }
-      cth = sz/sqrt(sx*sx+sy*sy+sz*sz);
-    }
-  }
-  else
-  {
-    if(trueStepLength >= currentRange*dtrl) 
-    {
-      if(par1*trueStepLength < 1.)
-	tau = -par2*log(1.-par1*trueStepLength) ;
-      // for the case if ioni/brems are inactivated
-      // see the corresponding condition in ComputeGeomPathLength 
-      else if(1.-KineticEnergy/currentKinEnergy > taulim)
-	tau = taubig ;
-    }
-    currentTau = tau ;
-    lambdaeff = trueStepLength/currentTau;
-    currentRadLength = couple->GetMaterial()->GetRadlen();
-
-    if (tau >= taubig) cth = -1.+2.*G4UniformRand();
-    else if (tau >= tausmall)
-    {
-      G4double xsi = 3.;
-      G4double x0 = 1.;
-      G4double a = 1., ea = 0., eaa = 1.;
-      G4double b=2.,b1=3.,bx=1.,eb1=3.,ebx=1.;
-      G4double prob = 1. , qprob = 1. ;
-      G4double xmean1 = 1., xmean2 = 0.;
-      G4double xmeanth = exp(-tau);
-      G4double x2meanth = (1.+2.*exp(-2.5*tau))/3.;
-
-      G4double relloss = 1.-KineticEnergy/currentKinEnergy;
-      if(relloss > rellossmax) 
-        return SimpleScattering(xmeanth,x2meanth);
-
-      G4double theta0 = ComputeTheta0(trueStepLength,KineticEnergy);
-
-      // protection for very small angles
-      if(theta0 < tausmall) return cth;
-    
-      if(theta0 > theta0max)
-        return SimpleScattering(xmeanth,x2meanth);
-      G4double sth = sin(0.5*theta0);
-      a = 0.25/(sth*sth);
-
-      ea = exp(-xsi);
-      eaa = 1.-ea ;
-      xmean1 = 1.-(1.-(1.+xsi)*ea)/(a*eaa);
-      x0 = 1.-xsi/a;
-
-      if(xmean1 <= 0.999*xmeanth)
-        return SimpleScattering(xmeanth,x2meanth);
-
-      // from e- and muon scattering data                    
-      G4double c = coeffc1+coeffc2*y; ;                         
-
-      if(abs(c-3.) < 0.001)  c = 3.001;      
-      if(abs(c-2.) < 0.001)  c = 2.001;      
-      if(abs(c-1.) < 0.001)  c = 1.001;      
-
-      G4double c1 = c-1.;
-
-      //from continuity of derivatives
-      b = 1.+(c-xsi)/a;
-
-      b1 = b+1.;
-      bx = c/a;
-      eb1 = exp(c1*log(b1));
-      ebx = exp(c1*log(bx));
-
-      xmean2 = (x0*eb1+ebx-(eb1*bx-b1*ebx)/(c-2.))/(eb1-ebx);
-      
-      G4double f1x0 = a*ea/eaa;
-      G4double f2x0 = c1*eb1/(bx*(eb1-ebx));
-      prob = f2x0/(f1x0+f2x0);
-
-      qprob = xmeanth/(prob*xmean1+(1.-prob)*xmean2);
-
-      // sampling of costheta
-      if(G4UniformRand() < qprob)
-      {
-        if(G4UniformRand() < prob)
-          cth = 1.+log(ea+G4UniformRand()*eaa)/a ;
-        else
-          cth = b-b1*bx/exp(log(ebx+(eb1-ebx)*G4UniformRand())/c1) ;
-      }
-      else
-        cth = -1.+2.*G4UniformRand();
-    }
-  }  
-  return cth ;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::SimpleScattering(G4double xmeanth,G4double x2meanth)
-{
-  // 'large angle scattering'
-  // 2 model functions with correct xmean and x2mean
-  G4double a = (2.*xmeanth+9.*x2meanth-3.)/(2.*xmeanth-3.*x2meanth+1.);
-  G4double prob = (a+2.)*xmeanth/a;
-
-  // sampling
-  G4double cth = 1.;
-  if(G4UniformRand() < prob)
-    cth = -1.+2.*exp(log(G4UniformRand())/(a+1.));
-  else
-    cth = -1.+2.*G4UniformRand();
-  return cth;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::SampleDisplacement()
-{
-  const G4double kappa = 2.5;
-  const G4double kappapl1 = kappa+1.;
-  const G4double kappami1 = kappa-1.;
-  G4double rmean = 0.0;
-  if ((currentTau >= tausmall) && !insideskin) {
-    if (currentTau < taulim) {
-      rmean = kappa*currentTau*currentTau*currentTau*
-             (1.-kappapl1*currentTau*0.25)/6. ;
-
-    } else {
-      G4double etau = 0.0;
-      if (currentTau<taubig) etau = exp(-currentTau);
-      rmean = -kappa*currentTau;
-      rmean = -exp(rmean)/(kappa*kappami1);
-      rmean += currentTau-kappapl1/kappa+kappa*etau/kappami1;
-    }
-    if (rmean>0.) rmean = 2.*lambdaeff*sqrt(rmean/3.0);
-    else          rmean = 0.;
-  }
-
-  // protection against z > t ...........................
-  if(rmean > 0.) {
-    G4double zt = (tPathLength-zPathLength)*(tPathLength+zPathLength);
-    if(zt <= 0.)
-      rmean = 0.;
-    else if(rmean*rmean > zt)
-      rmean = sqrt(zt);
-  }
-  return rmean;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4UrbanMscModel2::LatCorrelation()
-{
-  const G4double kappa = 2.5;
-  const G4double kappami1 = kappa-1.;
-
-  G4double latcorr = 0.;
-  if((currentTau >= tausmall) && !insideskin)
-  {
-    if(currentTau < taulim)
-      latcorr = lambdaeff*kappa*currentTau*currentTau*
-                (1.-(kappa+1.)*currentTau/3.)/3.;
-    else
-    {
-      G4double etau = 0.;
-      if(currentTau < taubig) etau = exp(-currentTau);
-      latcorr = -kappa*currentTau;
-      latcorr = exp(latcorr)/kappami1;
-      latcorr += 1.-kappa*etau/kappami1 ;
-      latcorr *= 2.*lambdaeff/3. ;
-    }
-  }
-
-  return latcorr;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
