Index: trunk/source/processes/electromagnetic/utils/src/G4DummyModel.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4DummyModel.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4DummyModel.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4DummyModel.cc,v 1.3 2007/05/22 17:31:58 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4ElectronIonPair.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4ElectronIonPair.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4ElectronIonPair.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4ElectronIonPair.cc,v 1.2 2008/10/17 14:46:16 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EmCalculator.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmCalculator.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmCalculator.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmCalculator.cc,v 1.46 2009/02/24 09:56:03 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4EmCalculator.cc,v 1.44 2008/08/03 18:47:15 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -755,11 +755,6 @@
     if(currentProcess) currentProcessName = currentProcess->GetProcessName();
 
-    if(p->GetParticleType() == "nucleus" 
-       && currentParticleName != "deuteron"  
-       && currentParticleName != "triton"
-       && currentParticleName != "alpha+"
-       && currentParticleName != "helium"
-       && currentParticleName != "hydrogen"
-      ) {
+    if(p->GetParticleType() == "nucleus" &&
+       currentParticleName  != "deuteron" && currentParticleName != "triton") {
       baseParticle = theGenericIon;
       massRatio = baseParticle->GetPDGMass()/p->GetPDGMass();
Index: trunk/source/processes/electromagnetic/utils/src/G4EmConfigurator.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmConfigurator.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmConfigurator.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmConfigurator.cc,v 1.4 2009/02/26 11:33:33 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4EmConfigurator.cc,v 1.3 2008/11/21 12:30:29 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -117,7 +117,5 @@
   G4String fname = "";
   if(fm) fname = fm->GetName();
-  G4String mname = "";
-  if(mod) mname = mod->GetName();
-  AddModelForRegion(particleName, processName, mname, regionName,
+  AddModelForRegion(particleName, processName, mod->GetName(), regionName,
 		    emin, emax, fname);
 }
@@ -205,9 +203,5 @@
 
 	for(G4int i=0; i<nm; i++) {
-          G4String mname = "";
-          if(modelList[i]) mname = modelList[i]->GetName();
-          G4String fname = "";
-          if(flucModelList[i]) fname = flucModelList[i]->GetName();
-	  if(modelName == mname && flucModelName == fname &&
+	  if(modelName == modelList[i]->GetName() &&
              (particleList[i] == "" || particleList[i] == particleName) ) {
 	    mod  = modelList[i];
@@ -220,20 +214,11 @@
 
 	if(!mod) {
-
-	  // set fluctuation model for ionisation processes
-          if(fluc && ptype == eloss) {
-	    G4VEnergyLossProcess* p = reinterpret_cast<G4VEnergyLossProcess*>(proc);
-	    p->SetFluctModel(fluc);
-	 
-	  } else {
-	    G4cout << "### G4EmConfigurator WARNING: fails to find a model <"
-		   << modelName << "> for process <" 
-		   << processName << "> and " << particleName 
-		   << G4endl;
-	    if(flucModelName != "") {
-	      G4cout << "                            fluctuation model <" 
-		     << flucModelName << G4endl;
-	    }
-	  }
+	  G4cout << "### G4EmConfigurator WARNING: fails to find a model <"
+		 << modelName << "> for process <" 
+		 << processName << "> and " << particleName 
+		 << G4endl;
+	  if(flucModelName != "")  
+	    G4cout << "                            fluctuation model <" 
+		   << flucModelName << G4endl;
 	} else {
 
Index: trunk/source/processes/electromagnetic/utils/src/G4EmCorrections.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmCorrections.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmCorrections.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4EmCorrections.cc,v 1.51 2008/12/18 13:01:44 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EmElementSelector.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmElementSelector.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmElementSelector.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4EmElementSelector.cc,v 1.4 2008/08/21 18:53:32 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EmModelManager.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmModelManager.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmModelManager.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4EmModelManager.cc,v 1.46 2008/10/13 14:56:56 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EmMultiModel.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmMultiModel.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmMultiModel.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4EmMultiModel.cc,v 1.6 2007/05/22 17:31:58 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EmProcessOptions.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmProcessOptions.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmProcessOptions.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmProcessOptions.cc,v 1.26 2009/02/18 14:43:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4EmProcessOptions.cc,v 1.24 2008/04/17 10:33:27 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -59,5 +59,4 @@
 #include "G4VMultipleScattering.hh"
 #include "G4Region.hh"
-#include "G4RegionStore.hh"
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -393,38 +392,19 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
-void G4EmProcessOptions::ActivateDeexcitation(const G4String& pname, 
-					      G4bool val, 
-					      const G4String& reg)
-{
-  G4RegionStore* regionStore = G4RegionStore::GetInstance();
-  const G4Region* r = 0;
-  if(reg == "" || reg == "World") {
-    r = regionStore->GetRegion("DefaultRegionForTheWorld", false);
-  } else {
-    r = regionStore->GetRegion(reg, false);
-  }
-  if(!r) {
-    G4cout << "G4EmProcessOptions::ActivateDeexcitation ERROR: G4Region <"
-	   << reg << "> not found, the command ignored" << G4endl;
-    return;
-  }
-
-  const std::vector<G4VEnergyLossProcess*>& v =
-        theManager->GetEnergyLossProcessVector();
-  std::vector<G4VEnergyLossProcess*>::const_iterator itr;
-  for(itr = v.begin(); itr != v.end(); itr++) {
-    G4VEnergyLossProcess* p = *itr;
-    if(p) {
-      if(pname == p->GetProcessName()) p->ActivateDeexcitation(val,r);
-    }
-  }
-  const std::vector<G4VEmProcess*>& w =
-        theManager->GetEmProcessVector();
-  std::vector<G4VEmProcess*>::const_iterator itp;
-  for(itp = w.begin(); itp != w.end(); itp++) {
-    G4VEmProcess* q = *itp;
-    if(q) {
-      if(pname == q->GetProcessName()) q->ActivateDeexcitation(val,r);
-    }
+void G4EmProcessOptions::ActivateDeexcitation(G4bool val, const G4Region* r)
+{
+  const std::vector<G4VEnergyLossProcess*>& v =
+        theManager->GetEnergyLossProcessVector();
+  std::vector<G4VEnergyLossProcess*>::const_iterator itr;
+  for(itr = v.begin(); itr != v.end(); itr++) {
+    G4VEnergyLossProcess* p = *itr;
+    if(p) p->ActivateDeexcitation(val,r);
+  }
+  const std::vector<G4VEmProcess*>& w =
+        theManager->GetEmProcessVector();
+  std::vector<G4VEmProcess*>::const_iterator itp;
+  for(itp = w.begin(); itp != w.end(); itp++) {
+    G4VEmProcess* q = *itp;
+    if(q) q->ActivateDeexcitation(val,r);
   }
 }
Index: trunk/source/processes/electromagnetic/utils/src/G4EmSaturation.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EmSaturation.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EmSaturation.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4EmSaturation.cc,v 1.9 2008/11/12 15:37:33 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4EnergyLossMessenger.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EnergyLossMessenger.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EnergyLossMessenger.cc	(revision 1007)
@@ -25,6 +25,6 @@
 //
 //
-// $Id: G4EnergyLossMessenger.cc,v 1.37 2009/02/18 14:43:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4EnergyLossMessenger.cc,v 1.35 2008/10/20 13:27:45 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -178,19 +178,4 @@
   aplCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
 
-  deexCmd = new G4UIcommand("/process/em/deexcitation",this);
-  deexCmd->SetGuidance("Set deexcitation flag per process and G4Region.");
-  deexCmd->SetGuidance("  procName  : process name");
-  deexCmd->SetGuidance("  flag      : flag");
-  deexCmd->SetGuidance("  regName   : G4Region name");
-
-  G4UIparameter* pName = new G4UIparameter("pName",'s',false);
-  deexCmd->SetParameter(pName);
-
-  G4UIparameter* flag = new G4UIparameter("flag",'s',false);
-  deexCmd->SetParameter(flag);
-
-  G4UIparameter* regName = new G4UIparameter("regName",'s',false);
-  deexCmd->SetParameter(regName);
-
   dedxCmd = new G4UIcmdWithAnInteger("/process/eLoss/binsDEDX",this);
   dedxCmd->SetGuidance("Set number of bins for DEDX tables");
@@ -274,5 +259,4 @@
   delete MinSubSecCmd;
   delete StepFuncCmd;
-  delete deexCmd;
   delete eLossDirectory;
   delete mscDirectory;
@@ -336,13 +320,4 @@
   }
 
-  if (command == deexCmd) {
-    G4String s1 (""), s2(""), s3("");
-    G4bool b = false;
-    std::istringstream is(newValue);
-    is >> s1 >> s2 >> s3;
-    if(s2 == "true") b = true;
-    opt->ActivateDeexcitation(s1,b,s3);
-  }
-
   if (command == mscCmd) {
     if(newValue == "Minimal") 
Index: trunk/source/processes/electromagnetic/utils/src/G4EnergyLossTables.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4EnergyLossTables.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4EnergyLossTables.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4EnergyLossTables.cc,v 1.34 2008/07/08 10:57:22 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4LossTableBuilder.cc,v 1.28 2009/02/18 16:24:47 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4LossTableBuilder.cc,v 1.27 2008/07/22 15:55:15 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -132,9 +132,7 @@
       G4double dedx1  = pv->GetValue(elow, b);
 
-      //G4cout << "nbins= " << nbins << " dedx1= " << dedx1 << G4endl;
-
       // protection for specific cases dedx=0
       if(dedx1 == 0.0) {
-        for (size_t k=1; k<nbins-1; k++) {
+        for (size_t k=1; k<nbins; k++) {
           bin0++;
           elow  = pv->GetLowEdgeEnergy(k);
@@ -145,14 +143,6 @@
       }
 
-      //G4cout << "nbins= " << nbins << " elow= " << elow << " ehigh= " << ehigh << G4endl;
       // initialisation of a new vector
       G4PhysicsLogVector* v = new G4PhysicsLogVector(elow, ehigh, nbins);
-      // dedx is exect zero
-      if(nbins <= 2) {
-	v->PutValue(0,1000.);
-	v->PutValue(1,2000.);
-	G4PhysicsTableHelper::SetPhysicsVector(rangeTable, i, v);
-	return;
-      }
       v->SetSpline(splineFlag);
 
Index: trunk/source/processes/electromagnetic/utils/src/G4LossTableManager.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4LossTableManager.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4LossTableManager.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4LossTableManager.cc,v 1.95 2008/11/13 18:23:39 schaelic Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4VEmFluctuationModel.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VEmFluctuationModel.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VEmFluctuationModel.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEmFluctuationModel.cc,v 1.4 2009/02/19 11:25:50 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4VEmFluctuationModel.cc,v 1.3 2008/07/15 16:56:39 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -65,10 +65,3 @@
 }
 
-void G4VEmFluctuationModel::InitialiseMe(const G4ParticleDefinition*)
-{}
 
-void G4VEmFluctuationModel::SetParticleAndCharge(const G4ParticleDefinition*, 
-						 G4double)
-{}
-
-
Index: trunk/source/processes/electromagnetic/utils/src/G4VEmModel.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VEmModel.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VEmModel.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEmModel.cc,v 1.25 2009/02/19 09:57:36 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4VEmModel.cc,v 1.20 2008/11/13 23:13:18 schaelic Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -41,5 +41,4 @@
 // 25.10.2005 Set default highLimit=100.TeV (V.Ivanchenko)
 // 06.02.2006 add method ComputeMeanFreePath() (mma)
-// 16.02.2009 Move implementations of virtual methods to source (VI)
 //
 //
@@ -61,7 +60,5 @@
   fluc(0), name(nam), lowLimit(0.1*keV), highLimit(100.0*TeV), 
   polarAngleLimit(0.0),secondaryThreshold(DBL_MAX),theLPMflag(false),
-  pParticleChange(0),nuclearStopping(false),
-  currentCouple(0),currentElement(0),
-  nsec(5),flagDeexcitation(false) 
+  pParticleChange(0),nuclearStopping(false),nsec(5) 
 {
   xsec.resize(nsec);
@@ -85,10 +82,46 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
+G4double G4VEmModel::CrossSectionPerVolume(const G4Material* material,
+					   const G4ParticleDefinition* p,
+					   G4double ekin,
+					   G4double emin,
+					   G4double emax)
+{
+  SetupForMaterial(p, material, ekin);
+  G4double cross = 0.0;
+  const G4ElementVector* theElementVector = material->GetElementVector();
+  const G4double* theAtomNumDensityVector = material->GetVecNbOfAtomsPerVolume();
+  G4int nelm = material->GetNumberOfElements(); 
+  if(nelm > nsec) {
+    xsec.resize(nelm);
+    nsec = nelm;
+  }
+  for (G4int i=0; i<nelm; i++) {
+    cross += theAtomNumDensityVector[i]*
+      ComputeCrossSectionPerAtom(p,(*theElementVector)[i],ekin,emin,emax);
+    xsec[i] = cross;
+  }
+  return cross;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
+G4double G4VEmModel::ComputeMeanFreePath(const G4ParticleDefinition* p,
+					 G4double ekin,
+					 const G4Material* material,     
+					 G4double emin,
+					 G4double emax)
+{
+  G4double mfp = DBL_MAX;
+  G4double cross = CrossSectionPerVolume(material,p,ekin,emin,emax);
+  if (cross > DBL_MIN) mfp = 1./cross;
+  return mfp;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+
 void G4VEmModel::InitialiseElementSelectors(const G4ParticleDefinition* p, 
 					    const G4DataVector& cuts)
 {
-  // initialise before run
-  flagDeexcitation = false;
-
   G4int nbins = G4int(std::log10(highLimit/lowLimit) + 0.5);
   if(nbins < 3) nbins = 3;
@@ -129,130 +162,3 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
-G4double G4VEmModel::ComputeDEDXPerVolume(const G4Material*,
-					  const G4ParticleDefinition*,
-					  G4double,G4double)
-{
-  return 0.0;
-}
 
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::CrossSectionPerVolume(const G4Material* material,
-					   const G4ParticleDefinition* p,
-					   G4double ekin,
-					   G4double emin,
-					   G4double emax)
-{
-  SetupForMaterial(p, material, ekin);
-  G4double cross = 0.0;
-  const G4ElementVector* theElementVector = material->GetElementVector();
-  const G4double* theAtomNumDensityVector = material->GetVecNbOfAtomsPerVolume();
-  G4int nelm = material->GetNumberOfElements(); 
-  if(nelm > nsec) {
-    xsec.resize(nelm);
-    nsec = nelm;
-  }
-  for (G4int i=0; i<nelm; i++) {
-    cross += theAtomNumDensityVector[i]*
-      ComputeCrossSectionPerAtom(p,(*theElementVector)[i],ekin,emin,emax);
-    xsec[i] = cross;
-  }
-  return cross;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
-						G4double, G4double, G4double,
-						G4double, G4double)
-{
-  return 0.0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::MinEnergyCut(const G4ParticleDefinition*,
-				  const G4MaterialCutsCouple*)
-{
-  return 0.0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::GetChargeSquareRatio(const G4ParticleDefinition* p,
-					  const G4Material*, G4double)
-{
-  G4double q = p->GetPDGCharge()/CLHEP::eplus;
-  return q*q;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::GetParticleCharge(const G4ParticleDefinition* p,
-				       const G4Material*, G4double)
-{
-  return p->GetPDGCharge();
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VEmModel::CorrectionsAlongStep(const G4MaterialCutsCouple*,
-				      const G4DynamicParticle*,
-				      G4double&,G4double&,G4double)
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VEmModel::SampleDeexcitationAlongStep(const G4Material*,
-					     const G4Track&,
-					     G4double& )
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::MaxSecondaryEnergy(const G4ParticleDefinition*,
-					G4double kineticEnergy)
-{
-  return kineticEnergy;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VEmModel::SampleScattering(const G4DynamicParticle*, G4double)
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::ComputeTruePathLengthLimit(const G4Track&, 
-						G4PhysicsTable*, 
-						G4double)
-{
-  return DBL_MAX;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::ComputeGeomPathLength(G4double truePathLength)
-{
-  return truePathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-G4double G4VEmModel::ComputeTrueStepLength(G4double geomPathLength)
-{
-  return geomPathLength;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VEmModel::DefineForRegion(const G4Region*) 
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VEmModel::SetupForMaterial(const G4ParticleDefinition*,
-				  const G4Material*, G4double)
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Index: trunk/source/processes/electromagnetic/utils/src/G4VEmProcess.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VEmProcess.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VEmProcess.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEmProcess.cc,v 1.62 2009/02/19 09:57:36 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4VEmProcess.cc,v 1.60 2008/10/17 14:46:16 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -91,8 +91,6 @@
   applyCuts(false),
   startFromNull(true),
-  useDeexcitation(false),
-  nDERegions(0),
-  idxDERegions(0),
-  currentModel(0),
+  nRegions(0),
+  selectedModel(0),
   particle(0),
   currentCouple(0)
@@ -137,21 +135,4 @@
   delete modelManager;
   (G4LossTableManager::Instance())->DeRegister(this);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4VEmProcess::Clear()
-{
-  delete [] theEnergyOfCrossSectionMax;
-  delete [] theCrossSectionMax;
-  delete [] idxDERegions;
-  theEnergyOfCrossSectionMax = 0;
-  theCrossSectionMax = 0;
-  idxDERegions = 0;
-  currentCouple = 0;
-  preStepLambda = 0.0;
-  mfpKinEnergy  = DBL_MAX;
-  deRegions.clear();
-  nDERegions = 0;
 }
 
@@ -181,34 +162,17 @@
       theLambdaTable = G4PhysicsTableHelper::PreparePhysicsTable(theLambdaTable);
   }
-  // Sub Cutoff and Deexcitation
-  if (nDERegions>0) {
-
-    const G4ProductionCutsTable* theCoupleTable=
-          G4ProductionCutsTable::GetProductionCutsTable();
-    size_t numOfCouples = theCoupleTable->GetTableSize();
-
-    idxDERegions = new G4bool[numOfCouples];
-
-    for (size_t j=0; j<numOfCouples; j++) {
-
-      const G4MaterialCutsCouple* couple =
-        theCoupleTable->GetMaterialCutsCouple(j);
-      const G4ProductionCuts* pcuts = couple->GetProductionCuts();
-      G4bool reg = false;
-      for(G4int i=0; i<nDERegions; i++) {
-	if(deRegions[i]) {
-	  if(pcuts == deRegions[i]->GetProductionCuts()) reg = true;
-	}
-      }
-      idxDERegions[j] = reg;
-    }
-  }
-  if (1 < verboseLevel && nDERegions>0) {
-    G4cout << " Deexcitation is activated for regions: " << G4endl;
-    for (G4int i=0; i<nDERegions; i++) {
-      const G4Region* r = deRegions[i];
-      G4cout << "           " << r->GetName() << G4endl;
-    }
-  }
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+void G4VEmProcess::Clear()
+{
+  if(theEnergyOfCrossSectionMax) delete [] theEnergyOfCrossSectionMax;
+  if(theCrossSectionMax) delete [] theCrossSectionMax;
+  theEnergyOfCrossSectionMax = 0;
+  theCrossSectionMax = 0;
+  currentCouple = 0;
+  preStepLambda = 0.0;
+  mfpKinEnergy  = DBL_MAX;
 }
 
@@ -273,33 +237,4 @@
       G4cout << *theLambdaTable << G4endl;
     }
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4VEmProcess::PrintInfoDefinition()
-{
-  if(verboseLevel > 0) {
-    G4cout << G4endl << GetProcessName() << ":   for  "
-           << particle->GetParticleName();
-    if(integral) G4cout << ", integral: 1 ";
-    if(applyCuts) G4cout << ", applyCuts: 1 ";
-    G4cout << "    SubType= " << GetProcessSubType() << G4endl;
-    if(buildLambdaTable) {
-      G4cout << "      Lambda tables from "
-	     << G4BestUnit(minKinEnergy,"Energy") 
-	     << " to "
-	     << G4BestUnit(maxKinEnergy,"Energy")
-	     << " in " << nLambdaBins << " bins, spline: " 
-	     << (G4LossTableManager::Instance())->SplineFlag()
-	     << G4endl;
-    }
-    PrintInfo();
-    modelManager->DumpModelList(verboseLevel);
-  }
-
-  if(verboseLevel > 2 && buildLambdaTable) {
-    G4cout << "      LambdaTable address= " << theLambdaTable << G4endl;
-    if(theLambdaTable) G4cout << (*theLambdaTable) << G4endl;
   }
 }
@@ -369,4 +304,14 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
+G4double G4VEmProcess::GetMeanFreePath(const G4Track& track,
+				       G4double,
+				       G4ForceCondition* condition)
+{
+  *condition = NotForced;
+  return G4VEmProcess::MeanFreePath(track);
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
 G4VParticleChange* G4VEmProcess::PostStepDoIt(const G4Track& track,
                                               const G4Step&)
@@ -397,8 +342,6 @@
   }
 
-  SelectModel(finalT);
-  if(useDeexcitation) {
-    currentModel->SetDeexcitationFlag(idxDERegions[currentMaterialIndex]);
-  }
+  G4VEmModel* currentModel = SelectModel(finalT);
+
   /*  
   if(0 < verboseLevel) {
@@ -461,4 +404,54 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
+void G4VEmProcess::PrintInfoDefinition()
+{
+  if(verboseLevel > 0) {
+    G4cout << G4endl << GetProcessName() << ":   for  "
+           << particle->GetParticleName();
+    if(integral) G4cout << ", integral: 1 ";
+    if(applyCuts) G4cout << ", applyCuts: 1 ";
+    G4cout << "    SubType= " << GetProcessSubType() << G4endl;
+    if(buildLambdaTable) {
+      G4cout << "      Lambda tables from "
+	     << G4BestUnit(minKinEnergy,"Energy") 
+	     << " to "
+	     << G4BestUnit(maxKinEnergy,"Energy")
+	     << " in " << nLambdaBins << " bins, spline: " 
+	     << (G4LossTableManager::Instance())->SplineFlag()
+	     << G4endl;
+    }
+    PrintInfo();
+    modelManager->DumpModelList(verboseLevel);
+  }
+
+  if(verboseLevel > 2 && buildLambdaTable) {
+    G4cout << "      LambdaTable address= " << theLambdaTable << G4endl;
+    if(theLambdaTable) G4cout << (*theLambdaTable) << G4endl;
+  }
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+G4double G4VEmProcess::CrossSectionPerVolume(G4double kineticEnergy,
+					     const G4MaterialCutsCouple* couple)
+{
+  // Cross section per atom is calculated
+  DefineMaterial(couple);
+  G4double cross = 0.0;
+  G4bool b;
+  if(theLambdaTable) {
+    cross = (((*theLambdaTable)[currentMaterialIndex])->
+                           GetValue(kineticEnergy, b));
+  } else {
+    G4VEmModel* model = SelectModel(kineticEnergy);
+    cross = 
+      model->CrossSectionPerVolume(currentMaterial,particle,kineticEnergy);
+  }
+
+  return cross;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
 G4bool G4VEmProcess::StorePhysicsTable(const G4ParticleDefinition* part,
 			 	       const G4String& directory,
@@ -528,63 +521,4 @@
 
   return yes;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4VEmProcess::ActivateDeexcitation(G4bool val, const G4Region* r)
-{
-  G4RegionStore* regionStore = G4RegionStore::GetInstance();
-  const G4Region* reg = r;
-  if (!reg) {reg = regionStore->GetRegion("DefaultRegionForTheWorld", false);}
-
-  // the region is in the list
-  if (nDERegions) {
-    for (G4int i=0; i<nDERegions; i++) {
-      if (reg == deRegions[i]) {
-	if(!val) deRegions[i] = 0;
-        return;
-      }
-    }
-  }
-
-  // new region 
-  if(val) {
-    useDeexcitation = true;
-    deRegions.push_back(reg);
-    nDERegions++;
-  } else {
-    useDeexcitation = false;
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEmProcess::CrossSectionPerVolume(G4double kineticEnergy,
-					     const G4MaterialCutsCouple* couple)
-{
-  // Cross section per atom is calculated
-  DefineMaterial(couple);
-  G4double cross = 0.0;
-  G4bool b;
-  if(theLambdaTable) {
-    cross = (((*theLambdaTable)[currentMaterialIndex])->
-                           GetValue(kineticEnergy, b));
-  } else {
-    SelectModel(kineticEnergy);
-    cross = currentModel->CrossSectionPerVolume(currentMaterial,
-						particle,kineticEnergy);
-  }
-
-  return cross;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEmProcess::GetMeanFreePath(const G4Track& track,
-				       G4double,
-				       G4ForceCondition* condition)
-{
-  *condition = NotForced;
-  return G4VEmProcess::MeanFreePath(track);
 }
 
Index: trunk/source/processes/electromagnetic/utils/src/G4VEnergyLoss.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VEnergyLoss.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VEnergyLoss.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VEnergyLoss.cc,v 1.46 2006/06/29 19:55:21 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 
Index: trunk/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEnergyLossProcess.cc,v 1.146 2009/02/19 11:25:50 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4VEnergyLossProcess.cc,v 1.143 2008/10/17 14:46:16 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -150,7 +150,5 @@
   secondaryParticle(0),
   nSCoffRegions(0),
-  nDERegions(0),
   idxSCoffRegions(0),
-  idxDERegions(0),
   nProcesses(0),
   theDEDXTable(0),
@@ -178,5 +176,4 @@
   isIonisation(true),
   useSubCutoff(false),
-  useDeexcitation(false),
   particle(0),
   currentCouple(0),
@@ -240,5 +237,5 @@
 	   << G4endl;
   delete vstrag;
-  Clean();
+  Clear();
 
   if ( !baseParticle ) {
@@ -294,5 +291,5 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
-void G4VEnergyLossProcess::Clean()
+void G4VEnergyLossProcess::Clear()
 {
   if(1 < verboseLevel) { 
@@ -305,5 +302,4 @@
   delete [] theCrossSectionMax;
   delete [] idxSCoffRegions;
-  delete [] idxDERegions;
 
   theDEDXAtMaxEnergy = 0;
@@ -316,13 +312,4 @@
   scProcesses.clear();
   nProcesses = 0;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::MinPrimaryEnergy(const G4ParticleDefinition*, 
-						const G4Material*, 
-						G4double cut)
-{
-  return cut;
 }
 
@@ -377,5 +364,5 @@
   }
 
-  Clean();
+  Clear();
 
   // Base particle and set of models can be defined here
@@ -420,6 +407,6 @@
 				     minSubRange, verboseLevel);
 
-  // Sub Cutoff and Deexcitation
-  if (nSCoffRegions>0 || nDERegions>0) {
+  // Sub Cutoff Regime
+  if (nSCoffRegions>0) {
     theSubCuts = modelManager->SubCutoff();
 
@@ -427,7 +414,5 @@
           G4ProductionCutsTable::GetProductionCutsTable();
     size_t numOfCouples = theCoupleTable->GetTableSize();
-
-    if(nSCoffRegions>0) idxSCoffRegions = new G4bool[numOfCouples];
-    if(nDERegions>0) idxDERegions = new G4bool[numOfCouples];
+    idxSCoffRegions = new G4int[numOfCouples];
   
     for (size_t j=0; j<numOfCouples; j++) {
@@ -436,19 +421,9 @@
 	theCoupleTable->GetMaterialCutsCouple(j);
       const G4ProductionCuts* pcuts = couple->GetProductionCuts();
-      
-      if(nSCoffRegions>0) {
-	G4bool reg = false;
-	for(G4int i=0; i<nSCoffRegions; i++) {
-	  if( pcuts == scoffRegions[i]->GetProductionCuts()) reg = true;
-	}
-	idxSCoffRegions[j] = reg;
-      }
-      if(nDERegions>0) {
-	G4bool reg = false;
-	for(G4int i=0; i<nDERegions; i++) {
-	  if( pcuts == deRegions[i]->GetProductionCuts()) reg = true;
-	}
-	idxDERegions[j] = reg;
-      }
+      G4int reg = 0;
+      for(G4int i=0; i<nSCoffRegions; i++) {
+        if( pcuts == scoffRegions[i]->GetProductionCuts()) reg = 1;
+      }
+      idxSCoffRegions[j] = reg;
     }
   }
@@ -470,11 +445,4 @@
       }
     }
-    if (nDERegions) {
-      G4cout << " Deexcitation is ON for regions: " << G4endl;
-      for (G4int i=0; i<nDERegions; i++) {
-        const G4Region* r = deRegions[i];
-	G4cout << "           " << r->GetName() << G4endl;
-      }
-    }
   }
 }
@@ -511,4 +479,24 @@
     if(isIonisation) G4cout << "  isIonisation  flag = 1";
     G4cout << G4endl;
+  }
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+void G4VEnergyLossProcess::ActivateSubCutoff(G4bool val, const G4Region* r)
+{
+  G4RegionStore* regionStore = G4RegionStore::GetInstance();
+  if(val) {
+    useSubCutoff = true;
+    if (!r) {r = regionStore->GetRegion("DefaultRegionForTheWorld", false);}
+    if (nSCoffRegions) {
+      for (G4int i=0; i<nSCoffRegions; i++) {
+	if (r == scoffRegions[i]) return;
+      }
+    }
+    scoffRegions.push_back(r);
+    nSCoffRegions++;
+  } else {
+    useSubCutoff = false;
   }
 }
@@ -652,131 +640,9 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
-void G4VEnergyLossProcess::PrintInfoDefinition()
-{
-  if(0 < verboseLevel) {
-    G4cout << G4endl << GetProcessName() << ":   for  "
-           << particle->GetParticleName()
-	   << "    SubType= " << GetProcessSubType() 
-           << G4endl
-           << "      dE/dx and range tables from "
- 	   << G4BestUnit(minKinEnergy,"Energy")
-           << " to " << G4BestUnit(maxKinEnergy,"Energy")
-           << " in " << nBins << " bins" << G4endl
-           << "      Lambda tables from threshold to "
-           << G4BestUnit(maxKinEnergy,"Energy")
-           << " in " << nBins << " bins, spline: " 
-	   << (G4LossTableManager::Instance())->SplineFlag()
-           << G4endl;
-    if(theRangeTableForLoss && isIonisation) {
-      G4cout << "      finalRange(mm)= " << finalRange/mm
-             << ", dRoverRange= " << dRoverRange
-             << ", integral: " << integral
-             << ", fluct: " << lossFluctuationFlag
-	     << ", linLossLimit= " << linLossLimit
-             << G4endl;
-    }
-    PrintInfo();
-    modelManager->DumpModelList(verboseLevel);
-    if(theCSDARangeTable && isIonisation) {
-      G4cout << "      CSDA range table up"
-             << " to " << G4BestUnit(maxKinEnergyCSDA,"Energy")
-             << " in " << nBinsCSDA << " bins" << G4endl;
-    }
-    if(nSCoffRegions>0 && isIonisation) {
-      G4cout << "      Subcutoff sampling in " << nSCoffRegions 
-	     << " regions" << G4endl;
-    }
-    if(2 < verboseLevel) {
-      G4cout << "      DEDXTable address= " << theDEDXTable << G4endl;
-      if(theDEDXTable && isIonisation) G4cout << (*theDEDXTable) << G4endl;
-      G4cout << "non restricted DEDXTable address= " 
-	     << theDEDXunRestrictedTable << G4endl;
-      if(theDEDXunRestrictedTable && isIonisation) {
-           G4cout << (*theDEDXunRestrictedTable) << G4endl;
-      }
-      if(theDEDXSubTable && isIonisation) {
-	G4cout << (*theDEDXSubTable) << G4endl;
-      }
-      G4cout << "      CSDARangeTable address= " << theCSDARangeTable 
-	     << G4endl;
-      if(theCSDARangeTable && isIonisation) {
-	G4cout << (*theCSDARangeTable) << G4endl;
-      }
-      G4cout << "      RangeTableForLoss address= " << theRangeTableForLoss 
-	     << G4endl;
-      if(theRangeTableForLoss && isIonisation) {
-             G4cout << (*theRangeTableForLoss) << G4endl;
-      }
-      G4cout << "      InverseRangeTable address= " << theInverseRangeTable 
-	     << G4endl;
-      if(theInverseRangeTable && isIonisation) {
-             G4cout << (*theInverseRangeTable) << G4endl;
-      }
-      G4cout << "      LambdaTable address= " << theLambdaTable << G4endl;
-      if(theLambdaTable && isIonisation) {
-	G4cout << (*theLambdaTable) << G4endl;
-      }
-      G4cout << "      SubLambdaTable address= " << theSubLambdaTable << G4endl;
-      if(theSubLambdaTable && isIonisation) {
-	G4cout << (*theSubLambdaTable) << G4endl;
-      }
-    }
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4VEnergyLossProcess::ActivateSubCutoff(G4bool val, const G4Region* r)
-{
-  G4RegionStore* regionStore = G4RegionStore::GetInstance();
-  const G4Region* reg = r;
-  if (!reg) {reg = regionStore->GetRegion("DefaultRegionForTheWorld", false);}
-
-  // the region is in the list
-  if (nSCoffRegions) {
-    for (G4int i=0; i<nSCoffRegions; i++) {
-      if (reg == scoffRegions[i]) {
-	if(!val) deRegions[i] = 0;
-        return;
-      }
-    }
-  }
-
-  // new region 
-  if(val) {
-    useSubCutoff = true;
-    scoffRegions.push_back(reg);
-    nSCoffRegions++;
-  } else {
-    useSubCutoff = false;
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-void G4VEnergyLossProcess::ActivateDeexcitation(G4bool val, const G4Region* r)
-{
-  G4RegionStore* regionStore = G4RegionStore::GetInstance();
-  const G4Region* reg = r;
-  if (!reg) {reg = regionStore->GetRegion("DefaultRegionForTheWorld", false);}
-
-  // the region is in the list
-  if (nDERegions) {
-    for (G4int i=0; i<nDERegions; i++) {
-      if (reg == deRegions[i]) {
-	if(!val) deRegions[i] = 0;
-        return;
-      }
-    }
-  }
-
-  // new region 
-  if(val) {
-    useDeexcitation = true;
-    deRegions.push_back(reg);
-    nDERegions++;
-  } else {
-    useDeexcitation = false;
-  }
+G4double G4VEnergyLossProcess::GetContinuousStepLimit(
+		const G4Track&,
+                G4double, G4double, G4double&)
+{
+  return DBL_MAX;
 }
 
@@ -808,4 +674,16 @@
   //  <<" stepLimit= "<<x<<G4endl;
   return x;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+G4double G4VEnergyLossProcess::GetMeanFreePath(
+                             const G4Track& track,
+                             G4double,
+                             G4ForceCondition* condition)
+
+{
+  *condition = NotForced;
+  return MeanFreePath(track);
 }
 
@@ -928,12 +806,8 @@
   if (length >= fRange) {
     eloss = preStepKinEnergy;
-    if (useDeexcitation) {
-      if(idxDERegions[currentMaterialIndex]) {
-	currentModel->SampleDeexcitationAlongStep(currentMaterial, track, eloss);
-	if(eloss < 0.0) eloss = 0.0;
-      }
-    }
+    currentModel->CorrectionsAlongStep(currentCouple, dynParticle, 
+				       eloss, esecdep, length);
     fParticleChange.SetProposedKineticEnergy(0.0);
-    fParticleChange.ProposeLocalEnergyDeposit(eloss);
+    fParticleChange.ProposeLocalEnergyDeposit(preStepKinEnergy);
     return &fParticleChange;
   }
@@ -1060,7 +934,6 @@
       G4double tmax = 
 	std::min(currentModel->MaxSecondaryKinEnergy(dynParticle),cut);
-      G4double emean = eloss;
       eloss = fluc->SampleFluctuations(currentMaterial,dynParticle,
-				       tmax,length,emean);
+				       tmax,length,eloss);
       /*                            
       if(-1 < verboseLevel) 
@@ -1077,12 +950,4 @@
   eloss += esecdep;
   if(eloss < 0.0) eloss = 0.0;
-
-  // deexcitation
-  else if (useDeexcitation) {
-    if(idxDERegions[currentMaterialIndex]) {
-      currentModel->SampleDeexcitationAlongStep(currentMaterial, track, eloss);
-      if(eloss < 0.0) eloss = 0.0;
-    }
-  }
 
   // Energy balanse
@@ -1241,8 +1106,4 @@
 
   SelectModel(postStepScaledEnergy);
-  if(useDeexcitation) {
-    currentModel->SetDeexcitationFlag(idxDERegions[currentMaterialIndex]);
-  }
-
   const G4DynamicParticle* dynParticle = track.GetDynamicParticle();
   G4double tcut = (*theCuts)[currentMaterialIndex];
@@ -1279,294 +1140,73 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
-G4bool G4VEnergyLossProcess::StorePhysicsTable(
-       const G4ParticleDefinition* part, const G4String& directory, 
-       G4bool ascii)
-{
-  G4bool res = true;
-  if ( baseParticle || part != particle ) return res;
-
-  if(!StoreTable(part,theDEDXTable,ascii,directory,"DEDX")) 
-    {res = false;}
-
-  if(!StoreTable(part,theDEDXunRestrictedTable,ascii,directory,"DEDXnr")) 
-    {res = false;}
-
-  if(!StoreTable(part,theDEDXSubTable,ascii,directory,"SubDEDX")) 
-    {res = false;}
-
-  if(!StoreTable(part,theIonisationTable,ascii,directory,"Ionisation")) 
-    {res = false;}
-
-  if(!StoreTable(part,theIonisationSubTable,ascii,directory,"SubIonisation")) 
-    {res = false;}
-
-  if(isIonisation &&
-     !StoreTable(part,theCSDARangeTable,ascii,directory,"CSDARange")) 
-    {res = false;}
-
-  if(isIonisation &&
-     !StoreTable(part,theRangeTableForLoss,ascii,directory,"Range")) 
-    {res = false;}
-  
-  if(isIonisation &&
-     !StoreTable(part,theInverseRangeTable,ascii,directory,"InverseRange")) 
-    {res = false;}
-  
-  if(!StoreTable(part,theLambdaTable,ascii,directory,"Lambda")) 
-    {res = false;}
-
-  if(!StoreTable(part,theSubLambdaTable,ascii,directory,"SubLambda")) 
-    {res = false;}
-
-  if ( res ) {
-    if(0 < verboseLevel) {
-      G4cout << "Physics tables are stored for " << particle->GetParticleName()
-             << " and process " << GetProcessName()
-	     << " in the directory <" << directory
-	     << "> " << G4endl;
-    }
-  } else {
-    G4cout << "Fail to store Physics Tables for " 
-	   << particle->GetParticleName()
-           << " and process " << GetProcessName()
-	   << " in the directory <" << directory
-	   << "> " << G4endl;
-  }
-  return res;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
-
-G4bool G4VEnergyLossProcess::RetrievePhysicsTable(
-       const G4ParticleDefinition* part, const G4String& directory,
-       G4bool ascii)
-{
-  G4bool res = true;
-  const G4String particleName = part->GetParticleName();
-
-  if(1 < verboseLevel) {
-    G4cout << "G4VEnergyLossProcess::RetrievePhysicsTable() for "
-           << particleName << " and process " << GetProcessName()
-           << "; tables_are_built= " << tablesAreBuilt
+void G4VEnergyLossProcess::PrintInfoDefinition()
+{
+  if(0 < verboseLevel) {
+    G4cout << G4endl << GetProcessName() << ":   for  "
+           << particle->GetParticleName()
+	   << "    SubType= " << GetProcessSubType() 
+           << G4endl
+           << "      dE/dx and range tables from "
+ 	   << G4BestUnit(minKinEnergy,"Energy")
+           << " to " << G4BestUnit(maxKinEnergy,"Energy")
+           << " in " << nBins << " bins" << G4endl
+           << "      Lambda tables from threshold to "
+           << G4BestUnit(maxKinEnergy,"Energy")
+           << " in " << nBins << " bins, spline: " 
+	   << (G4LossTableManager::Instance())->SplineFlag()
            << G4endl;
-  }
-  if(particle == part) {
-
-    //    G4bool yes = true;
-    if ( !baseParticle ) {
-
-      G4bool fpi = true;
-      if(!RetrieveTable(part,theDEDXTable,ascii,directory,"DEDX",fpi)) 
-	{fpi = false;}
-
-      if(!RetrieveTable(part,theIonisationTable,ascii,directory,"Ionisation",false)) 
-	{fpi = false;}
-
-      if(!RetrieveTable(part,theRangeTableForLoss,ascii,directory,"Range",fpi)) 
-        {res = false;}
-
-      if(!RetrieveTable(part,theDEDXunRestrictedTable,ascii,directory,"DEDXnr",false)) 
-	{res = false;}
-
-      if(!RetrieveTable(part,theCSDARangeTable,ascii,directory,"CSDARange",false)) 
-	{res = false;}
-
-      if(!RetrieveTable(part,theInverseRangeTable,ascii,directory,"InverseRange",fpi)) 
-        {res = false;}
-
-      if(!RetrieveTable(part,theLambdaTable,ascii,directory,"Lambda",true)) 
-        {res = false;}
-
-      G4bool yes = false;
-      if(nSCoffRegions > 0) {yes = true;}
-
-      if(!RetrieveTable(part,theDEDXSubTable,ascii,directory,"SubDEDX",yes)) 
-        {res = false;}
-
-      if(!RetrieveTable(part,theSubLambdaTable,ascii,directory,"SubLambda",yes)) 
-        {res = false;}
-
-      if(!fpi) yes = false;
-      if(!RetrieveTable(part,theIonisationSubTable,ascii,directory,"SubIonisation",yes)) 
-        {res = false;}
-    }
-  }
-
-  return res;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
-
-G4bool G4VEnergyLossProcess::StoreTable(const G4ParticleDefinition* part, 
-					G4PhysicsTable* aTable, G4bool ascii,
-					const G4String& directory,
-					const G4String& tname)
-{
-  G4bool res = true;
-  if ( aTable ) {
-    const G4String name = GetPhysicsTableFileName(part,directory,tname,ascii);
-    if( !aTable->StorePhysicsTable(name,ascii)) res = false;
-  }
-  return res;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
-
-G4bool G4VEnergyLossProcess::RetrieveTable(const G4ParticleDefinition* part, 
-					   G4PhysicsTable* aTable, G4bool ascii,
-					   const G4String& directory,
-					   const G4String& tname,
-					   G4bool mandatory)
-{
-  G4bool res = true;
-  G4String filename = GetPhysicsTableFileName(part,directory,tname,ascii);
-  G4bool yes = aTable->ExistPhysicsTable(filename);
-  if(yes) {
-    yes = G4PhysicsTableHelper::RetrievePhysicsTable(aTable,filename,ascii);
-    if((G4LossTableManager::Instance())->SplineFlag()) {
-      size_t n = aTable->length();
-      for(size_t i=0; i<n; i++) {(*aTable)[i]->SetSpline(true);}
-    }
-  }
-  if(yes) {
-    if (0 < verboseLevel) {
-      G4cout << tname << " table for " << part->GetParticleName() 
-	     << " is Retrieved from <" << filename << ">"
+    if(theRangeTableForLoss && isIonisation) {
+      G4cout << "      finalRange(mm)= " << finalRange/mm
+             << ", dRoverRange= " << dRoverRange
+             << ", integral: " << integral
+             << ", fluct: " << lossFluctuationFlag
+	     << ", linLossLimit= " << linLossLimit
+             << G4endl;
+    }
+    PrintInfo();
+    modelManager->DumpModelList(verboseLevel);
+    if(theCSDARangeTable && isIonisation) {
+      G4cout << "      CSDA range table up"
+             << " to " << G4BestUnit(maxKinEnergyCSDA,"Energy")
+             << " in " << nBinsCSDA << " bins" << G4endl;
+    }
+    if(nSCoffRegions>0 && isIonisation) {
+      G4cout << "      Subcutoff sampling in " << nSCoffRegions 
+	     << " regions" << G4endl;
+    }
+    if(2 < verboseLevel) {
+      G4cout << "      DEDXTable address= " << theDEDXTable << G4endl;
+      if(theDEDXTable && isIonisation) G4cout << (*theDEDXTable) << G4endl;
+      G4cout << "non restricted DEDXTable address= " 
+	     << theDEDXunRestrictedTable << G4endl;
+      if(theDEDXunRestrictedTable && isIonisation) {
+           G4cout << (*theDEDXunRestrictedTable) << G4endl;
+      }
+      if(theDEDXSubTable && isIonisation) {
+	G4cout << (*theDEDXSubTable) << G4endl;
+      }
+      G4cout << "      CSDARangeTable address= " << theCSDARangeTable 
 	     << G4endl;
-    }
-  } else {
-    if(mandatory) res = false;
-    if(mandatory || 1 < verboseLevel) {
-      G4cout << tname << " table for " << part->GetParticleName() 
-	     << " from file <"
-	     << filename << "> is not Retrieved"
+      if(theCSDARangeTable && isIonisation) {
+	G4cout << (*theCSDARangeTable) << G4endl;
+      }
+      G4cout << "      RangeTableForLoss address= " << theRangeTableForLoss 
 	     << G4endl;
-    }
-  }
-  return res;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::GetDEDXDispersion(
-                                  const G4MaterialCutsCouple *couple,
-                                  const G4DynamicParticle* dp,
-                                        G4double length)
-{
-  DefineMaterial(couple);
-  G4double ekin = dp->GetKineticEnergy();
-  SelectModel(ekin*massRatio);
-  G4double tmax = currentModel->MaxSecondaryKinEnergy(dp);
-  tmax = std::min(tmax,(*theCuts)[currentMaterialIndex]);
-  G4double d = 0.0;
-  G4VEmFluctuationModel* fm = currentModel->GetModelOfFluctuations();
-  if(fm) d = fm->Dispersion(currentMaterial,dp,tmax,length);
-  return d;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::CrossSectionPerVolume(
-	 G4double kineticEnergy, const G4MaterialCutsCouple* couple)
-{
-  // Cross section per volume is calculated
-  DefineMaterial(couple);
-  G4double cross = 0.0;
-  G4bool b;
-  if(theLambdaTable) {
-    cross = 
-      ((*theLambdaTable)[currentMaterialIndex])->GetValue(kineticEnergy, b);
-  } else {
-    SelectModel(kineticEnergy);
-    cross = 
-      currentModel->CrossSectionPerVolume(currentMaterial,
-					  particle, kineticEnergy,
-					  (*theCuts)[currentMaterialIndex]);
-  }
-
-  return cross;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::MeanFreePath(const G4Track& track)
-{
-  DefineMaterial(track.GetMaterialCutsCouple());
-  preStepLambda = GetLambdaForScaledEnergy(track.GetKineticEnergy()*massRatio);
-  G4double x = DBL_MAX;
-  if(DBL_MIN < preStepLambda) x = 1.0/preStepLambda;
-  return x;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::ContinuousStepLimit(const G4Track& track, 
-						   G4double x, G4double y, 
-						   G4double& z)
-{
-  G4GPILSelection sel;
-  return AlongStepGetPhysicalInteractionLength(track, x, y, z, &sel);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::GetMeanFreePath(
-                             const G4Track& track,
-                             G4double,
-                             G4ForceCondition* condition)
-
-{
-  *condition = NotForced;
-  return MeanFreePath(track);
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4double G4VEnergyLossProcess::GetContinuousStepLimit(
-		const G4Track&,
-                G4double, G4double, G4double&)
-{
-  return DBL_MAX;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-
-G4PhysicsVector* G4VEnergyLossProcess::LambdaPhysicsVector(
-                 const G4MaterialCutsCouple* couple, G4double cut)
-{
-  //  G4double cut  = (*theCuts)[couple->GetIndex()];
-  //  G4int nbins = nLambdaBins;
-  G4double tmin = 
-    std::max(MinPrimaryEnergy(particle, couple->GetMaterial(), cut),
-	     minKinEnergy);
-  if(tmin >= maxKinEnergy) tmin = 0.5*maxKinEnergy;
-  G4PhysicsVector* v = new G4PhysicsLogVector(tmin, maxKinEnergy, nBins);
-  v->SetSpline((G4LossTableManager::Instance())->SplineFlag());
-
-  return v;
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
-  
-void G4VEnergyLossProcess::AddCollaborativeProcess(
-            G4VEnergyLossProcess* p)
-{
-  G4bool add = true;
-  if(p->GetProcessName() != "eBrem") add = false;
-  if(add && nProcesses > 0) {
-    for(G4int i=0; i<nProcesses; i++) {
-      if(p == scProcesses[i]) {
-        add = false;
-        break;
-      }
-    }
-  }
-  if(add) {
-    scProcesses.push_back(p);
-    nProcesses++;
-    if (1 < verboseLevel) { 
-      G4cout << "### The process " << p->GetProcessName() 
-	     << " is added to the list of collaborative processes of "
-	     << GetProcessName() << G4endl; 
+      if(theRangeTableForLoss && isIonisation) {
+             G4cout << (*theRangeTableForLoss) << G4endl;
+      }
+      G4cout << "      InverseRangeTable address= " << theInverseRangeTable 
+	     << G4endl;
+      if(theInverseRangeTable && isIonisation) {
+             G4cout << (*theInverseRangeTable) << G4endl;
+      }
+      G4cout << "      LambdaTable address= " << theLambdaTable << G4endl;
+      if(theLambdaTable && isIonisation) {
+	G4cout << (*theLambdaTable) << G4endl;
+      }
+      G4cout << "      SubLambdaTable address= " << theSubLambdaTable << G4endl;
+      if(theSubLambdaTable && isIonisation) {
+	G4cout << (*theSubLambdaTable) << G4endl;
+      }
     }
   }
@@ -1737,2 +1377,261 @@
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 
+G4PhysicsVector* G4VEnergyLossProcess::LambdaPhysicsVector(
+                 const G4MaterialCutsCouple* couple, G4double cut)
+{
+  //  G4double cut  = (*theCuts)[couple->GetIndex()];
+  //  G4int nbins = nLambdaBins;
+  G4double tmin = 
+    std::max(MinPrimaryEnergy(particle, couple->GetMaterial(), cut),
+	     minKinEnergy);
+  if(tmin >= maxKinEnergy) tmin = 0.5*maxKinEnergy;
+  G4PhysicsVector* v = new G4PhysicsLogVector(tmin, maxKinEnergy, nBins);
+  v->SetSpline((G4LossTableManager::Instance())->SplineFlag());
+
+  return v;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+G4double G4VEnergyLossProcess::CrossSectionPerVolume(
+	 G4double kineticEnergy, const G4MaterialCutsCouple* couple)
+{
+  // Cross section per volume is calculated
+  DefineMaterial(couple);
+  G4double cross = 0.0;
+  G4bool b;
+  if(theLambdaTable) {
+    cross = 
+      ((*theLambdaTable)[currentMaterialIndex])->GetValue(kineticEnergy, b);
+  } else {
+    SelectModel(kineticEnergy);
+    cross = 
+      currentModel->CrossSectionPerVolume(currentMaterial,
+					  particle, kineticEnergy,
+					  (*theCuts)[currentMaterialIndex]);
+  }
+
+  return cross;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+G4bool G4VEnergyLossProcess::StorePhysicsTable(
+       const G4ParticleDefinition* part, const G4String& directory, 
+       G4bool ascii)
+{
+  G4bool res = true;
+  if ( baseParticle || part != particle ) return res;
+
+  if(!StoreTable(part,theDEDXTable,ascii,directory,"DEDX")) 
+    {res = false;}
+
+  if(!StoreTable(part,theDEDXunRestrictedTable,ascii,directory,"DEDXnr")) 
+    {res = false;}
+
+  if(!StoreTable(part,theDEDXSubTable,ascii,directory,"SubDEDX")) 
+    {res = false;}
+
+  if(!StoreTable(part,theIonisationTable,ascii,directory,"Ionisation")) 
+    {res = false;}
+
+  if(!StoreTable(part,theIonisationSubTable,ascii,directory,"SubIonisation")) 
+    {res = false;}
+
+  if(isIonisation &&
+     !StoreTable(part,theCSDARangeTable,ascii,directory,"CSDARange")) 
+    {res = false;}
+
+  if(isIonisation &&
+     !StoreTable(part,theRangeTableForLoss,ascii,directory,"Range")) 
+    {res = false;}
+  
+  if(isIonisation &&
+     !StoreTable(part,theInverseRangeTable,ascii,directory,"InverseRange")) 
+    {res = false;}
+  
+  if(!StoreTable(part,theLambdaTable,ascii,directory,"Lambda")) 
+    {res = false;}
+
+  if(!StoreTable(part,theSubLambdaTable,ascii,directory,"SubLambda")) 
+    {res = false;}
+
+  if ( res ) {
+    if(0 < verboseLevel) {
+      G4cout << "Physics tables are stored for " << particle->GetParticleName()
+             << " and process " << GetProcessName()
+	     << " in the directory <" << directory
+	     << "> " << G4endl;
+    }
+  } else {
+    G4cout << "Fail to store Physics Tables for " 
+	   << particle->GetParticleName()
+           << " and process " << GetProcessName()
+	   << " in the directory <" << directory
+	   << "> " << G4endl;
+  }
+  return res;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
+
+G4bool G4VEnergyLossProcess::StoreTable(const G4ParticleDefinition* part, 
+					G4PhysicsTable* aTable, G4bool ascii,
+					const G4String& directory,
+					const G4String& tname)
+{
+  G4bool res = true;
+  if ( aTable ) {
+    const G4String name = GetPhysicsTableFileName(part,directory,tname,ascii);
+    if( !aTable->StorePhysicsTable(name,ascii)) res = false;
+  }
+  return res;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
+
+G4bool G4VEnergyLossProcess::RetrievePhysicsTable(
+       const G4ParticleDefinition* part, const G4String& directory,
+       G4bool ascii)
+{
+  G4bool res = true;
+  const G4String particleName = part->GetParticleName();
+
+  if(1 < verboseLevel) {
+    G4cout << "G4VEnergyLossProcess::RetrievePhysicsTable() for "
+           << particleName << " and process " << GetProcessName()
+           << "; tables_are_built= " << tablesAreBuilt
+           << G4endl;
+  }
+  if(particle == part) {
+
+    //    G4bool yes = true;
+    if ( !baseParticle ) {
+
+      G4bool fpi = true;
+      if(!RetrieveTable(part,theDEDXTable,ascii,directory,"DEDX",fpi)) 
+	{fpi = false;}
+
+      if(!RetrieveTable(part,theIonisationTable,ascii,directory,"Ionisation",false)) 
+	{fpi = false;}
+
+      if(!RetrieveTable(part,theRangeTableForLoss,ascii,directory,"Range",fpi)) 
+        {res = false;}
+
+      if(!RetrieveTable(part,theDEDXunRestrictedTable,ascii,directory,"DEDXnr",false)) 
+	{res = false;}
+
+      if(!RetrieveTable(part,theCSDARangeTable,ascii,directory,"CSDARange",false)) 
+	{res = false;}
+
+      if(!RetrieveTable(part,theInverseRangeTable,ascii,directory,"InverseRange",fpi)) 
+        {res = false;}
+
+      if(!RetrieveTable(part,theLambdaTable,ascii,directory,"Lambda",true)) 
+        {res = false;}
+
+      G4bool yes = false;
+      if(nSCoffRegions > 0) {yes = true;}
+
+      if(!RetrieveTable(part,theDEDXSubTable,ascii,directory,"SubDEDX",yes)) 
+        {res = false;}
+
+      if(!RetrieveTable(part,theSubLambdaTable,ascii,directory,"SubLambda",yes)) 
+        {res = false;}
+
+      if(!fpi) yes = false;
+      if(!RetrieveTable(part,theIonisationSubTable,ascii,directory,"SubIonisation",yes)) 
+        {res = false;}
+    }
+  }
+
+  return res;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
+
+G4bool G4VEnergyLossProcess::RetrieveTable(const G4ParticleDefinition* part, 
+					   G4PhysicsTable* aTable, G4bool ascii,
+					   const G4String& directory,
+					   const G4String& tname,
+					   G4bool mandatory)
+{
+  G4bool res = true;
+  G4String filename = GetPhysicsTableFileName(part,directory,tname,ascii);
+  G4bool yes = aTable->ExistPhysicsTable(filename);
+  if(yes) {
+    yes = G4PhysicsTableHelper::RetrievePhysicsTable(aTable,filename,ascii);
+    if((G4LossTableManager::Instance())->SplineFlag()) {
+      size_t n = aTable->length();
+      for(size_t i=0; i<n; i++) {(*aTable)[i]->SetSpline(true);}
+    }
+  }
+  if(yes) {
+    if (0 < verboseLevel) {
+      G4cout << tname << " table for " << part->GetParticleName() 
+	     << " is Retrieved from <" << filename << ">"
+	     << G4endl;
+    }
+  } else {
+    if(mandatory) res = false;
+    if(mandatory || 1 < verboseLevel) {
+      G4cout << tname << " table for " << part->GetParticleName() 
+	     << " from file <"
+	     << filename << "> is not Retrieved"
+	     << G4endl;
+    }
+  }
+  return res;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+  
+void G4VEnergyLossProcess::AddCollaborativeProcess(
+            G4VEnergyLossProcess* p)
+{
+  G4bool add = true;
+  if(p->GetProcessName() != "eBrem") add = false;
+  if(add && nProcesses > 0) {
+    for(G4int i=0; i<nProcesses; i++) {
+      if(p == scProcesses[i]) {
+        add = false;
+        break;
+      }
+    }
+  }
+  if(add) {
+    scProcesses.push_back(p);
+    nProcesses++;
+    if (1 < verboseLevel) { 
+      G4cout << "### The process " << p->GetProcessName() 
+	     << " is added to the list of collaborative processes of "
+	     << GetProcessName() << G4endl; 
+    }
+  }
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+G4double G4VEnergyLossProcess::GetDEDXDispersion(
+                                  const G4MaterialCutsCouple *couple,
+                                  const G4DynamicParticle* dp,
+                                        G4double length)
+{
+  DefineMaterial(couple);
+  G4double ekin = dp->GetKineticEnergy();
+  SelectModel(ekin*massRatio);
+  G4double tmax = currentModel->MaxSecondaryKinEnergy(dp);
+  tmax = std::min(tmax,(*theCuts)[currentMaterialIndex]);
+  G4double d = 0.0;
+  G4VEmFluctuationModel* fm = currentModel->GetModelOfFluctuations();
+  if(fm) d = fm->Dispersion(currentMaterial,dp,tmax,length);
+  return d;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
+void G4VEnergyLossProcess::ActivateDeexcitation(G4bool, const G4Region*)
+{}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
+
Index: trunk/source/processes/electromagnetic/utils/src/G4VMscModel.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VMscModel.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VMscModel.cc	(revision 1007)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VMscModel.cc,v 1.10 2009/02/24 09:56:03 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4VMscModel.cc,v 1.4 2008/03/10 18:39:45 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
@@ -49,6 +49,4 @@
 
 #include "G4VMscModel.hh"
-#include "G4ParticleChangeForMSC.hh"
-#include "G4TransportationManager.hh"
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -57,5 +55,4 @@
 G4VMscModel::G4VMscModel(const G4String& nam):
   G4VEmModel(nam), 
-  safetyHelper(0),
   facrange(0.02),
   facgeom(2.5),
@@ -64,5 +61,4 @@
   dtrl(0.05),
   lambdalimit(mm),
-  geommax(1.e50*mm),
   steppingAlgorithm(fUseSafety),
   samplez(false),
@@ -76,61 +72,2 @@
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VMscModel::InitialiseSafetyHelper()
-{
-  if(!safetyHelper) {
-    safetyHelper = G4TransportationManager::GetTransportationManager()
-      ->GetSafetyHelper();
-    safetyHelper->InitialiseHelper();
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VMscModel::ComputeDisplacement(G4ParticleChangeForMSC* fParticleChange,  
-				      const G4ThreeVector& dir,
-				      G4double displacement,
-				      G4double postsafety)
-{
-  const G4ThreeVector* pos = fParticleChange->GetProposedPosition();
-  G4double r = displacement;
-  if(r >  postsafety) {
-    G4double newsafety = safetyHelper->ComputeSafety(*pos);
-    if(r > newsafety) r = newsafety;
-  }
-  if(r > 0.) {
-
-    // compute new endpoint of the Step
-    G4ThreeVector newPosition = *pos + r*dir;
-
-    // definitely not on boundary
-    if(displacement == r) {
-      safetyHelper->ReLocateWithinVolume(newPosition);
-
-    } else {
-      // check safety after displacement
-      G4double postsafety = safetyHelper->ComputeSafety(newPosition);
-
-      // displacement to boundary
-      if(postsafety <= 0.0) {
-	safetyHelper->Locate(newPosition, 
-			     *fParticleChange->GetProposedMomentumDirection());
-
-	// not on the boundary
-      } else {
-	safetyHelper->ReLocateWithinVolume(newPosition);
-      }
-    }
-    fParticleChange->ProposePosition(newPosition);
-  }
-}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
-
-void G4VMscModel::SampleSecondaries(std::vector<G4DynamicParticle*>*,
-				    const G4MaterialCutsCouple*,
-				    const G4DynamicParticle*,
-				    G4double, G4double)
-{}
-
-//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Index: trunk/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4VMultipleScattering.cc,v 1.60 2008/11/20 20:32:40 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc
===================================================================
--- trunk/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc	(revision 1005)
+++ trunk/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc	(revision 1007)
@@ -25,5 +25,5 @@
 //
 // $Id: G4ionEffectiveCharge.cc,v 1.24 2008/12/18 13:01:46 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // -------------------------------------------------------------------
