Index: trunk/source/physics_lists/History
===================================================================
--- trunk/source/physics_lists/History	(revision 850)
+++ trunk/source/physics_lists/History	(revision 921)
@@ -1,3 +1,3 @@
-$Id: History,v 1.65 2008/08/05 10:25:00 vnivanch Exp $
+$Id: History,v 1.74 2008/12/01 17:04:13 vnivanch Exp $
 -------------------------------------------------------------------
 
@@ -15,4 +15,43 @@
      * Reverse chronological order (last date on top), please *
      ----------------------------------------------------------
+
+01-12-2008, V.Ivanchenko phys-lists-V09-01-19
+G4HadronElasticPhysics - fixed adding optional Barashenkov Xsection
+QBBC - added QBBBG option
+
+21-11-2008, V.Ivanchenko phys-lists-V09-01-18
+- Added sigma_c+, sigma_c++ in the list of stable hadrons
+- added interfaces to G4PhysicsListFactory - ALICE requirement
+
+20-11-2008, V.Ivanchenko phys-lists-V09-01-17
+- Added charge exchange process to QBBC Physics Lists
+
+17-11-2008, V.Ivanchenko phys-lists-V09-01-16
+- Added names to string models builders
+
+14-11-2008, V.Ivanchenko phys-lists-V09-01-15
+G4EmStandardPhysics_option1 - disable ApplyCuts option
+G4EmStandardPhysics_option3 - linLossLimit set to be default (0.01)
+G4PhysicsListFactory - added QBBCG
+
+15-10-2008, V.Ivanchenko phys-lists-V09-01-14
+In all EM builders - set inactive for AlongStep for bremsstrahlung and pair
+                     production porcesses for minor CPU improvenment
+
+15-10-2008, V.Ivanchenko phys-lists-V09-01-13
+In all EM builders: added hadron bemsstrahlung and e+e- pair production
+  and e-msc for e+-; 
+G4EmStandardPhysics_option2 - enable "ApplyCuts", disable "SubCutoff" 
+G4EmStandardPhysics_option3 - added G4LowEnergyRayleigh, set 120 bins
+  for tables (60 is the default), StepFunction per particle type
+
+24-09-2008, V.Ivanchenko phys-lists-V09-01-12
+- QBBC temporary variant which is equivalent QGSP_BERT without LHEP
+  for protons, neutrons and pions   
+
+17-09-2008, V.Ivanchenko phys-lists-V09-01-11
+- G4NeutronTrackingCut - added Set methods to define time and energy
+                         limits directly
+- G4HadronInelasticQBBC, QBBC - use FTF with Binary Casacde, improved cout
 
 04-08-2008, V.Ivanchenko phys-lists-V09-01-10 
Index: trunk/source/physics_lists/builders/GNUmakefile
===================================================================
--- trunk/source/physics_lists/builders/GNUmakefile	(revision 850)
+++ trunk/source/physics_lists/builders/GNUmakefile	(revision 921)
@@ -1,3 +1,3 @@
-# $Id: GNUmakefile,v 1.4 2008/05/30 11:01:37 vnivanch Exp $
+# $Id: GNUmakefile,v 1.5 2008/10/15 18:24:11 vnivanch Exp $
 # ---------------------------------------------------------------------------
 # GNUmakefile for physics_lists/builders library.  Gunter Folger 25-Oct-2006.
@@ -39,4 +39,5 @@
             -I$(G4BASE)/processes/electromagnetic/utils/include \
             -I$(G4BASE)/processes/electromagnetic/xrays/include \
+            -I$(G4BASE)/processes/electromagnetic/lowenergy/include \
             -I$(G4BASE)/processes/hadronic/cross_sections/include \
             -I$(G4BASE)/processes/hadronic/stopping/include \
Index: trunk/source/physics_lists/builders/include/G4NeutronTrackingCut.hh
===================================================================
--- trunk/source/physics_lists/builders/include/G4NeutronTrackingCut.hh	(revision 850)
+++ trunk/source/physics_lists/builders/include/G4NeutronTrackingCut.hh	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4NeutronTrackingCut.hh,v 1.1 2006/11/20 17:56:08 gunter Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4NeutronTrackingCut.hh,v 1.2 2008/09/17 18:19:15 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -51,5 +51,4 @@
     virtual ~G4NeutronTrackingCut();
 
-  public: 
     // This method will be invoked in the Construct() method. 
     // each particle type will be instantiated
@@ -61,9 +60,27 @@
   virtual void ConstructProcess();
 
+  inline void SetTimeLimit(G4double);
+  inline void SetKineticEnergyLimit(G4double);
+
 private:
+
   G4NeutronKiller* pNeutronKiller;
+
+  G4double timeLimit;
+  G4double kineticEnergyLimit;
+  
   G4int    verbose;
   G4bool   wasActivated;
 };
+
+inline void G4NeutronTrackingCut::SetTimeLimit(G4double val)
+{
+  timeLimit = val;
+}
+
+inline void G4NeutronTrackingCut::SetKineticEnergyLimit(G4double val)
+{
+  kineticEnergyLimit = val;
+}
 
 #endif
Index: trunk/source/physics_lists/builders/src/G4EmStandardPhysics.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4EmStandardPhysics.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4EmStandardPhysics.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmStandardPhysics.cc,v 1.13 2008/04/22 18:28:37 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4EmStandardPhysics.cc,v 1.16 2008/11/21 16:50:30 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -56,4 +56,5 @@
 #include "G4MultipleScattering.hh"
 #include "G4hMultipleScattering.hh"
+#include "G4eMultipleScattering.hh"
 
 #include "G4eIonisation.hh"
@@ -64,4 +65,6 @@
 #include "G4MuBremsstrahlung.hh"
 #include "G4MuPairProduction.hh"
+#include "G4hBremsstrahlung.hh"
+#include "G4hPairProduction.hh"
 
 #include "G4hIonisation.hh"
@@ -152,13 +155,13 @@
     } else if (particleName == "e-") {
 
-      pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4eMultipleScattering,-1, 1, 1);
       pmanager->AddProcess(new G4eIonisation,        -1, 2, 2);
-      pmanager->AddProcess(new G4eBremsstrahlung(),  -1, 3, 3);
+      pmanager->AddProcess(new G4eBremsstrahlung(),  -1,-3, 3);
 
     } else if (particleName == "e+") {
 
-      pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4eMultipleScattering,-1, 1, 1);
       pmanager->AddProcess(new G4eIonisation,        -1, 2, 2);
-      pmanager->AddProcess(new G4eBremsstrahlung,    -1, 3, 3);
+      pmanager->AddProcess(new G4eBremsstrahlung,    -1,-3, 3);
       pmanager->AddProcess(new G4eplusAnnihilation,   0,-1, 4);
 
@@ -168,6 +171,6 @@
       pmanager->AddProcess(new G4hMultipleScattering,-1, 1, 1);
       pmanager->AddProcess(new G4MuIonisation,       -1, 2, 2);
-      pmanager->AddProcess(new G4MuBremsstrahlung,   -1, 3, 3);
-      pmanager->AddProcess(new G4MuPairProduction,   -1, 4, 4);
+      pmanager->AddProcess(new G4MuBremsstrahlung,   -1,-3, 3);
+      pmanager->AddProcess(new G4MuPairProduction,   -1,-4, 4);
 
     } else if (particleName == "alpha" ||
@@ -177,4 +180,13 @@
       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
       pmanager->AddProcess(new G4ionIonisation,       -1, 2, 2);
+
+    } else if (particleName == "pi+" ||
+               particleName == "pi-" ||
+               particleName == "proton" ) {
+
+      pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4hIonisation,         -1, 2, 2);
+      pmanager->AddProcess(new G4hBremsstrahlung,     -1,-3, 3);
+      pmanager->AddProcess(new G4hPairProduction,     -1,-4, 4);
 
     } else if (particleName == "B+" ||
@@ -187,4 +199,6 @@
                particleName == "anti_omega-" ||
                particleName == "anti_proton" ||
+               particleName == "anti_sigma_c+" ||
+               particleName == "anti_sigma_c++" ||
                particleName == "anti_sigma+" ||
                particleName == "anti_sigma-" ||
@@ -192,11 +206,10 @@
                particleName == "anti_xi-" ||
                particleName == "deuteron" ||
-               particleName == "kaon+" ||
+	       particleName == "kaon+" ||
                particleName == "kaon-" ||
-               particleName == "lambda_c+" ||
+	       particleName == "lambda_c+" ||
                particleName == "omega-" ||
-               particleName == "pi+" ||
-               particleName == "pi-" ||
-               particleName == "proton" ||
+               particleName == "sigma_c+" ||
+               particleName == "sigma_c++" ||
                particleName == "sigma+" ||
                particleName == "sigma-" ||
Index: trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option1.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option1.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option1.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmStandardPhysics_option1.cc,v 1.7 2008/04/22 18:28:38 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4EmStandardPhysics_option1.cc,v 1.11 2008/11/21 16:50:30 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -56,4 +56,5 @@
 #include "G4PhotoElectricEffect.hh"
 
+#include "G4eMultipleScattering.hh"
 #include "G4hMultipleScattering.hh"
 #include "G4MultipleScattering.hh"
@@ -67,4 +68,6 @@
 #include "G4MuBremsstrahlung.hh"
 #include "G4MuPairProduction.hh"
+#include "G4hBremsstrahlung.hh"
+#include "G4hPairProduction.hh"
 
 #include "G4hIonisation.hh"
@@ -158,9 +161,9 @@
       G4eIonisation* eioni = new G4eIonisation();
       eioni->SetStepFunction(0.8, 1.0*mm);
-      G4MultipleScattering* msc = new G4MultipleScattering;
+      G4eMultipleScattering* msc = new G4eMultipleScattering;
       msc->SetStepLimitType(fMinimal);
       pmanager->AddProcess(msc,                   -1, 1, 1);
       pmanager->AddProcess(eioni,                 -1, 2, 2);
-      pmanager->AddProcess(new G4eBremsstrahlung, -1, 3, 3);
+      pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
 
     } else if (particleName == "e+") {
@@ -168,9 +171,9 @@
       G4eIonisation* eioni = new G4eIonisation();
       eioni->SetStepFunction(0.8, 1.0*mm);
-      G4MultipleScattering* msc = new G4MultipleScattering;
+      G4eMultipleScattering* msc = new G4eMultipleScattering;
       msc->SetStepLimitType(fMinimal);
       pmanager->AddProcess(msc,                     -1, 1, 1);
       pmanager->AddProcess(eioni,                   -1, 2, 2);
-      pmanager->AddProcess(new G4eBremsstrahlung,   -1, 3, 3);
+      pmanager->AddProcess(new G4eBremsstrahlung,   -1,-3, 3);
       pmanager->AddProcess(new G4eplusAnnihilation,  0,-1, 4);
 
@@ -180,6 +183,6 @@
       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
       pmanager->AddProcess(new G4MuIonisation,        -1, 2, 2);
-      pmanager->AddProcess(new G4MuBremsstrahlung,    -1, 3, 3);
-      pmanager->AddProcess(new G4MuPairProduction,    -1, 4, 4);
+      pmanager->AddProcess(new G4MuBremsstrahlung,    -1,-3, 3);
+      pmanager->AddProcess(new G4MuPairProduction,    -1,-4, 4);
 
     } else if (particleName == "alpha" ||
@@ -189,4 +192,13 @@
       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
       pmanager->AddProcess(new G4ionIonisation,       -1, 2, 2);
+
+    } else if (particleName == "pi+" ||
+               particleName == "pi-" ||
+               particleName == "proton" ) {
+
+      pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4hIonisation,         -1, 2, 2);
+      pmanager->AddProcess(new G4hBremsstrahlung,     -1,-3, 3);
+      pmanager->AddProcess(new G4hPairProduction,     -1,-4, 4);
 
     } else if (particleName == "B+" ||
@@ -199,4 +211,6 @@
                particleName == "anti_omega-" ||
                particleName == "anti_proton" ||
+               particleName == "anti_sigma_c+" ||
+               particleName == "anti_sigma_c++" ||
                particleName == "anti_sigma+" ||
                particleName == "anti_sigma-" ||
@@ -204,11 +218,10 @@
                particleName == "anti_xi-" ||
                particleName == "deuteron" ||
-               particleName == "kaon+" ||
+	       particleName == "kaon+" ||
                particleName == "kaon-" ||
-               particleName == "lambda_c+" ||
+	       particleName == "lambda_c+" ||
                particleName == "omega-" ||
-               particleName == "pi+" ||
-               particleName == "pi-" ||
-               particleName == "proton" ||
+               particleName == "sigma_c+" ||
+               particleName == "sigma_c++" ||
                particleName == "sigma+" ||
                particleName == "sigma-" ||
@@ -225,4 +238,5 @@
   G4EmProcessOptions opt;
   opt.SetVerbose(verbose);
+  //opt.SetApplyCuts(true);
 }
 
Index: trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option2.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option2.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4EmStandardPhysics_option2.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4EmStandardPhysics_option2.cc,v 1.11 2008/08/05 10:24:44 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4EmStandardPhysics_option2.cc,v 1.15 2008/11/21 17:59:23 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -161,21 +161,19 @@
     } else if (particleName == "e-") {
 
-      pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
       pmanager->AddProcess(new G4eIonisation,         -1, 2, 2);
       pmanager->AddProcess(new G4eBremsstrahlung,     -1,-3, 3);
-      pmanager->AddDiscreteProcess(new G4CoulombScattering());
 
     } else if (particleName == "e+") {
 
-      pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
       pmanager->AddProcess(new G4eIonisation,         -1, 2, 2);
       pmanager->AddProcess(new G4eBremsstrahlung,     -1,-3, 3);
       pmanager->AddProcess(new G4eplusAnnihilation,    0,-1, 4);
-      pmanager->AddDiscreteProcess(new G4CoulombScattering());
 
     } else if (particleName == "mu+" ||
                particleName == "mu-"    ) {
 
-      pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4MuMultipleScattering,-1, 1, 1);
       pmanager->AddProcess(new G4MuIonisation,        -1, 2, 2);
       pmanager->AddProcess(new G4MuBremsstrahlung,    -1,-3, 3);
@@ -194,5 +192,5 @@
                particleName == "proton" ) {
 
-      pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, 1);
+      pmanager->AddProcess(new G4MuMultipleScattering,-1, 1, 1);
       pmanager->AddProcess(new G4hIonisation,         -1, 2, 2);
       pmanager->AddProcess(new G4hBremsstrahlung,     -1,-3, 3);
@@ -208,4 +206,6 @@
                particleName == "anti_omega-" ||
                particleName == "anti_proton" ||
+               particleName == "anti_sigma_c+" ||
+               particleName == "anti_sigma_c++" ||
                particleName == "anti_sigma+" ||
                particleName == "anti_sigma-" ||
@@ -217,4 +217,6 @@
 	       particleName == "lambda_c+" ||
                particleName == "omega-" ||
+               particleName == "sigma_c+" ||
+               particleName == "sigma_c++" ||
                particleName == "sigma+" ||
                particleName == "sigma-" ||
@@ -238,14 +240,14 @@
   // Physics tables
   //
-  opt.SetMinEnergy(100*eV);
-  opt.SetMaxEnergy(100*TeV);
-  opt.SetDEDXBinning(120);
-  opt.SetLambdaBinning(120);
-  opt.SetSplineFlag(true);
+  //opt.SetMinEnergy(100*eV);
+  //opt.SetMaxEnergy(100*TeV);
+  //opt.SetDEDXBinning(84);
+  //opt.SetLambdaBinning(84);
+  //opt.SetSplineFlag(true);
   opt.SetPolarAngleLimit(0.2);
   
   // Energy loss
   //
-  opt.SetLinearLossLimit(0.01);
+  //opt.SetLinearLossLimit(0.01);
   
   // Ionization
Index: trunk/source/physics_lists/builders/src/G4FTFBinaryNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFBinaryNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFBinaryNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 4*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("FTFB");
 
   theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4FTFBinaryPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFBinaryPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFBinaryPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
  {
    theMin = 4*GeV;
-   theModel = new G4TheoFSGenerator;
+   theModel = new G4TheoFSGenerator("FTFB");
 
    theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4FTFBinaryProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFBinaryProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFBinaryProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 4*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("FTFB");
 
   theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4FTFPNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFPNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFPNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 4*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("FTFP");
 
   theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4FTFPPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFPPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFPPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
  {
    theMin = 4*GeV;
-   theModel = new G4TheoFSGenerator;
+   theModel = new G4TheoFSGenerator("FTFP");
 
    theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4FTFPProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFPProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4FTFPProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 4*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("FTFP");
 
   theStringModel = new G4FTFModel;
Index: trunk/source/physics_lists/builders/src/G4HadronElasticPhysics.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4HadronElasticPhysics.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4HadronElasticPhysics.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4HadronElasticPhysics.cc,v 1.8 2008/05/19 10:21:34 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4HadronElasticPhysics.cc,v 1.9 2008/12/01 16:57:22 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -64,4 +64,6 @@
 #include "G4VQCrossSection.hh"
 #include "G4UElasticCrossSection.hh"
+#include "G4BGGNucleonElasticXS.hh"
+#include "G4BGGPionElasticXS.hh"
 
 G4HadronElasticPhysics::G4HadronElasticPhysics(
@@ -123,4 +125,5 @@
   {
     G4ParticleDefinition* particle = theParticleIterator->value();
+    G4ProcessManager* pmanager = particle->GetProcessManager();
     G4String pname = particle->GetParticleName();
     if(pname == "anti_lambda"  ||
@@ -138,7 +141,4 @@
        pname == "lambda"    || 
        pname == "omega-"    || 
-       pname == "pi-"       || 
-       pname == "pi+"       || 
-       pname == "proton"    || 
        pname == "sigma-"    || 
        pname == "sigma+"    || 
@@ -148,5 +148,4 @@
        pname == "triton") {
       
-      G4ProcessManager* pmanager = particle->GetProcessManager();
       if(mname == "elastic") {
 	G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
@@ -159,9 +158,27 @@
       hel->RegisterMe(model);
       pmanager->AddDiscreteProcess(hel);
+      if(verbose > 1)
+	G4cout << "### HadronElasticPhysics added for " 
+	       << particle->GetParticleName() << G4endl;
+
+      // proton case
+    } else if(pname == "proton") {
+      if(mname == "elastic") {
+	G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
+	h->SetQElasticCrossSection(man);
+        hel = h;
+        if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
+      } else {                   
+	hel = new G4HadronElasticProcess("hElastic");
+      }
+      hel->RegisterMe(model);
+      pmanager->AddDiscreteProcess(hel);
+      if(verbose > 1)
+	G4cout << "### HadronElasticPhysics added for " 
+	       << particle->GetParticleName() << G4endl;
 
       // neutron case
     } else if(pname == "neutron") {   
 
-      G4ProcessManager* pmanager = particle->GetProcessManager();
       if(mname == "elastic") {
 	G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
@@ -172,5 +189,5 @@
 	h->SetQElasticCrossSection(nhe->GetCS());
         hel = h;
-        if(glFlag) hel->AddDataSet(new G4UElasticCrossSection(particle));
+        if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
       } else {                   
 	hel = new G4HadronElasticProcess("hElastic");
@@ -191,4 +208,21 @@
 	G4cout << "### HadronElasticPhysics added for " 
 	       << particle->GetParticleName() << G4endl;
+
+      // pion case
+    } else if(pname == "pi+" || pname == "pi-") {
+      if(mname == "elastic") {
+	G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
+	h->SetQElasticCrossSection(man);
+        hel = h;
+        if(glFlag) hel->AddDataSet(new G4BGGPionElasticXS(particle));
+      } else {                   
+	hel = new G4HadronElasticProcess("hElastic");
+      }
+      hel->RegisterMe(model);
+      pmanager->AddDiscreteProcess(hel);
+
+      if(verbose > 1)
+	G4cout << "### HadronElasticPhysics added for " 
+	       << particle->GetParticleName() << G4endl;
     }
   }
Index: trunk/source/physics_lists/builders/src/G4NeutronTrackingCut.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4NeutronTrackingCut.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4NeutronTrackingCut.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4NeutronTrackingCut.cc,v 1.4 2006/11/24 16:30:13 gunter Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4NeutronTrackingCut.cc,v 1.5 2008/09/17 18:19:15 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -47,5 +47,8 @@
 G4NeutronTrackingCut::G4NeutronTrackingCut(const G4String& name, G4int ver)
   :  G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
-{}
+{
+  timeLimit          = 10.*microsecond;
+  kineticEnergyLimit = 0.0;
+}
 
 G4NeutronTrackingCut::~G4NeutronTrackingCut()
@@ -53,5 +56,5 @@
   if(wasActivated) 
   {
-      delete pNeutronKiller;
+    delete pNeutronKiller;
   }    
 }
@@ -59,7 +62,4 @@
 void G4NeutronTrackingCut::ConstructParticle()
 {
-
-// G4cout << "G4NeutronTrackingCut::ConstructParticle" << G4endl;
-
   G4Neutron::NeutronDefinition();
 }
@@ -67,19 +67,22 @@
 void G4NeutronTrackingCut::ConstructProcess()
 {
-  G4double timeLimit     =10*microsecond;
-//  G4double kineticEnergylimit =1*keV;
   if(wasActivated) return;
   wasActivated = true;
 
-  // Add Decay Process
+  // Add Process
+
   pNeutronKiller = new G4NeutronKiller();
   G4ParticleDefinition * particle = G4Neutron::Neutron();
   G4ProcessManager * pmanager = particle->GetProcessManager();
-//      if(verbose > 1)
-        G4cout << "### Adding Neutron tracking cut for " << particle->GetParticleName() << G4endl;
-	G4cout << "###  cut value is " << timeLimit/microsecond << " microseconds" <<  G4endl;
-      pmanager -> AddDiscreteProcess(pNeutronKiller);
-//      pNeutronKiller->SetKinEnergyLimit(kineticEnergylimit);
-      pNeutronKiller->SetTimeLimit(timeLimit);
+
+  if(verbose > 0) {
+    G4cout << "### Adding tracking cuts for " << particle->GetParticleName() 
+	   << "  TimeCut(ns)= " << timeLimit/ns 
+	   << "  KinEnergyCut(MeV)= " <<  kineticEnergyLimit/MeV
+	   <<  G4endl;
+  }
+  pmanager -> AddDiscreteProcess(pNeutronKiller);
+  pNeutronKiller->SetKinEnergyLimit(kineticEnergyLimit);
+  pNeutronKiller->SetTimeLimit(timeLimit);
 }
 
Index: trunk/source/physics_lists/builders/src/G4QGSBinaryNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSBinaryNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSBinaryNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 12*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSB");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSBinaryPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSBinaryPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSBinaryPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 12*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSB");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSBinaryProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSBinaryProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSBinaryProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
  {
    theMin = 12*GeV;
-   theModel = new G4TheoFSGenerator;
+   theModel = new G4TheoFSGenerator("QGSB");
 
    theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCEflowNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCEflowNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCEflowNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 8*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSCElow");
 
   theStringModel= new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCEflowPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCEflowPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCEflowPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 8*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSCEflow");
   
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCEflowProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCEflowProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCEflowProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 8*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSCEflow");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
  {
    theMin = 8*GeV;
-   theModel = new G4TheoFSGenerator;
+   theModel = new G4TheoFSGenerator("QGSC");
 
    theStringModel= new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 8*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSC");
   
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSCProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSCProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSCProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 8*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSC");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSPNeutronBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSPNeutronBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSPNeutronBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 12*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSP");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSPPiKBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSPPiKBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSPPiKBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
 {
   theMin = 12*GeV;
-  theModel = new G4TheoFSGenerator;
+  theModel = new G4TheoFSGenerator("QGSP");
 
   theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/builders/src/G4QGSPProtonBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSPProtonBuilder.cc	(revision 850)
+++ trunk/source/physics_lists/builders/src/G4QGSPProtonBuilder.cc	(revision 921)
@@ -33,5 +33,5 @@
  {
    theMin = 12*GeV;
-   theModel = new G4TheoFSGenerator;
+   theModel = new G4TheoFSGenerator("QGSP");
 
    theStringModel = new G4QGSModel< G4QGSParticipants >;
Index: trunk/source/physics_lists/lists/include/G4HadronInelasticQBBC.hh
===================================================================
--- trunk/source/physics_lists/lists/include/G4HadronInelasticQBBC.hh	(revision 850)
+++ trunk/source/physics_lists/lists/include/G4HadronInelasticQBBC.hh	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4HadronInelasticQBBC.hh,v 1.5 2008/08/05 10:25:00 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4HadronInelasticQBBC.hh,v 1.7 2008/09/24 18:10:51 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -102,11 +102,13 @@
   G4PreCompoundModel* thePreEquilib;
   G4QuasiElasticChannel*    theQuasiElastic;
-  //  G4GeneratorPrecompoundInterface* theCascade;
+  G4GeneratorPrecompoundInterface* preCompound;
   G4BinaryCascade* theCascade;
   G4QStringChipsParticleLevelInterface * theCHIPSCascade;
   G4QGSModel< G4QGSParticipants > * theQGStringModel;
   G4ExcitedStringDecay* theQGStringDecay;
-  G4ExcitedStringDecay* theFTFStringDecay;
-  G4FTFModel*           theFTFStringModel;
+  G4ExcitedStringDecay* theFTFBStringDecay;
+  G4ExcitedStringDecay* theFTFCStringDecay;
+  G4FTFModel*           theFTFBStringModel;
+  G4FTFModel*           theFTFCStringModel;
 
   G4int    verbose;
Index: trunk/source/physics_lists/lists/include/QBBC.icc
===================================================================
--- trunk/source/physics_lists/lists/include/QBBC.icc	(revision 850)
+++ trunk/source/physics_lists/lists/include/QBBC.icc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: QBBC.icc,v 1.12 2008/08/05 10:25:00 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: QBBC.icc,v 1.16 2008/11/25 15:36:19 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -55,4 +55,5 @@
 #include "G4HadronDElasticPhysics.hh"
 #include "G4HadronHElasticPhysics.hh"
+#include "G4ChargeExchangePhysics.hh"
 #include "G4IonBinaryCascadePhysics.hh"
 #include "G4IonPhysics.hh"
@@ -79,12 +80,13 @@
    // Hadron Physics
   if(type == "QBBC") {
-    this->RegisterPhysics( new G4HadronElasticPhysics("hElastic",ver,false,true));
+    this->RegisterPhysics( new G4HadronElasticPhysics("elastic",ver,false,false));
     this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
     this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
-    this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, true,
-		false, false, false, false));
+    this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, false,
+		true, false, false, false));
 
-  } else if(type == "QBBCG") {
-    this->RegisterPhysics( new G4HadronElasticPhysics("hElastic",ver,false,true));
+  } else if(type == "QBBBG") {
+    this->RegisterPhysics( new G4HadronElasticPhysics("elastic",ver,false,true));
+    this->RegisterPhysics( new G4ChargeExchangePhysics(ver,true));
     this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
     this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
@@ -92,24 +94,26 @@
 		false, false, false, true));
 
-  } else if(type == "QBBC_DEL") {
-    this->RegisterPhysics( new G4HadronDElasticPhysics(ver,false));
+  } else if(type == "QBBCG") {
+    this->RegisterPhysics( new G4HadronElasticPhysics("elastic",ver,false,true));
+    this->RegisterPhysics( new G4ChargeExchangePhysics(ver,true));
     this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
     this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
     this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, false,
+		true, false, false, true));
+
+  } else if(type == "QBBCF") {
+    this->RegisterPhysics( new G4HadronElasticPhysics("elastic",ver,false,false));
+    this->RegisterPhysics( new G4ChargeExchangePhysics(ver,false));
+    this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
+    this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
+    this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, true,
 		true, false, false, false));
 
-  } else if(type == "QBBC_HEL") {
-    this->RegisterPhysics( new G4HadronHElasticPhysics(ver,false));
+  } else if(type == "QBBC_HP") {
+    this->RegisterPhysics( new G4HadronElasticPhysics("elastic",ver,true,false));
     this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
     this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
     this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, false,
-		true, false, false, false));
-
-  } else if(type == "QBBC_HP") {
-    this->RegisterPhysics( new G4HadronElasticPhysics("hElastic",ver,true,true));
-    this->RegisterPhysics( new G4QStoppingPhysics("stopping",ver));
-    this->RegisterPhysics( new G4IonBinaryCascadePhysics("ionBIC"));
-    this->RegisterPhysics( new G4HadronInelasticQBBC("inelastic", ver, false,
-		false, false, true, false));
+		true, false, true, false));
 
   } else { 
Index: trunk/source/physics_lists/lists/src/G4HadronInelasticQBBC.cc
===================================================================
--- trunk/source/physics_lists/lists/src/G4HadronInelasticQBBC.cc	(revision 850)
+++ trunk/source/physics_lists/lists/src/G4HadronInelasticQBBC.cc	(revision 921)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4HadronInelasticQBBC.cc,v 1.9 2008/08/05 10:25:00 vnivanch Exp $
-// GEANT4 tag $Name: HEAD $
+// $Id: G4HadronInelasticQBBC.cc,v 1.15 2008/11/21 18:42:36 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-cand-01 $
 //
 //---------------------------------------------------------------------------
@@ -57,4 +57,5 @@
 #include "G4QStringChipsParticleLevelInterface.hh"
 #include "G4StringChipsInterface.hh"
+#include "G4GeneratorPrecompoundInterface.hh"
 #include "G4QGSMFragmentation.hh"
 #include "G4LundStringFragmentation.hh"
@@ -78,16 +79,18 @@
     chipsFlag(chips), hpFlag(hp), glFlag(glauber), wasActivated(false)
 {
-  if(verbose > -1) G4cout << "### HadronInelasticQBBC" << G4endl;
-  //  store = G4HadronProcessStore::Instance();
+  if(verbose > 1) G4cout << "### HadronInelasticQBBC bertFlag= " <<  bertFlag <<G4endl;
   theHPXSecI = 0;
   theHPXSecC = 0;
   theHPXSecF = 0;
   theCascade = 0;
+  preCompound = 0;
   theCHIPSCascade   = 0;
   theQuasiElastic   = 0;
   theQGStringDecay  = 0;
   theQGStringModel  = 0;
-  theFTFStringDecay = 0;
-  theFTFStringModel = 0;
+  theFTFBStringDecay = 0;
+  theFTFBStringModel = 0;
+  theFTFCStringDecay = 0;
+  theFTFCStringModel = 0;
 }
 
@@ -95,10 +98,13 @@
 {
   delete theCascade;
+  delete preCompound;
   delete theCHIPSCascade;
   delete theQuasiElastic;
   delete theQGStringDecay;
   delete theQGStringModel;
-  delete theFTFStringDecay;
-  delete theFTFStringModel;
+  delete theFTFBStringDecay;
+  delete theFTFCStringDecay;
+  delete theFTFBStringModel;
+  delete theFTFCStringModel;
   delete theHPXSecI;
   delete theHPXSecC;
@@ -121,9 +127,12 @@
 
   if(verbose > 1) 
-    G4cout << "### HadronInelasticQBBC Construct Process" << G4endl;
-
-  G4double minEstring  = 4.0*GeV;
-  G4double maxEcascade = 6.0*GeV;
-  //  G4double minFtf      = 7.5*GeV;
+    G4cout << "### HadronInelasticQBBC Construct Process"
+           << " ftfFlag= " << ftfFlag << "  bertFlag= " << bertFlag
+	   << G4endl;
+
+  G4double minEstring  = 9.5*GeV;
+  G4double maxEcascade = 7.5*GeV;
+  G4double minFTF      = 4.5*GeV;
+  G4double maxFTF      = 25.*GeV;
 
   //Binary
@@ -143,13 +152,15 @@
 
   //QGS
-  theCascade = new G4BinaryCascade;
+  theCascade = new G4BinaryCascade();
+  preCompound = new G4GeneratorPrecompoundInterface();
+
   theCHIPSCascade = new G4QStringChipsParticleLevelInterface;
-  G4TheoFSGenerator* theQGSModel = new G4TheoFSGenerator();
+  G4TheoFSGenerator* theQGSModel = new G4TheoFSGenerator("QGSP");
   theQGStringModel  = new G4QGSModel< G4QGSParticipants >;
   theQGStringDecay  = new G4ExcitedStringDecay(new G4QGSMFragmentation());
   theQGStringModel->SetFragmentationModel(theQGStringDecay);
-  theQGSModel->SetTransport(theCHIPSCascade);
-
-  theQuasiElastic = new G4QuasiElasticChannel;
+  theQGSModel->SetTransport(preCompound);
+
+  theQuasiElastic = new G4QuasiElasticChannel();
   theQGSModel->SetQuasiElasticChannel(theQuasiElastic);
   theQGSModel->SetHighEnergyGenerator(theQGStringModel);
@@ -157,15 +168,26 @@
   theQGSModel->SetMaxEnergy(100*TeV);
 
-  //FTF
-  G4TheoFSGenerator* theFTFModel = new G4TheoFSGenerator();
-  theFTFStringModel = new G4FTFModel();
-  theFTFStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
-  theFTFStringModel->SetFragmentationModel(theFTFStringDecay);
-  //theFTFModel->SetTransport(theCHIPSCascade);
-  theFTFModel->SetTransport(theCascade);
-  theFTFModel->SetHighEnergyGenerator(theFTFStringModel);
-  theFTFModel->SetMinEnergy(minEstring);
-  theFTFModel->SetMaxEnergy(100*TeV);
-  //theFTFModel->SetQuasiElasticChannel(theQuasiElastic);
+  //FTFB
+  G4TheoFSGenerator* theFTFBModel = new G4TheoFSGenerator("FTFP");
+  theFTFBStringModel = new G4FTFModel();
+  theFTFBStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
+  theFTFBStringModel->SetFragmentationModel(theFTFBStringDecay);
+
+  //  theFTFBModel->SetTransport(theCascade);
+  theFTFBModel->SetTransport(preCompound);
+  theFTFBModel->SetHighEnergyGenerator(theFTFBStringModel);
+  theFTFBModel->SetMinEnergy(minFTF);
+  theFTFBModel->SetMaxEnergy(100*TeV);
+
+  //FTFP
+  G4TheoFSGenerator* theFTFCModel = new G4TheoFSGenerator("FTFP");
+  theFTFCStringModel = new G4FTFModel();
+  theFTFCStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
+  theFTFCStringModel->SetFragmentationModel(theFTFCStringDecay);
+
+  theFTFCModel->SetTransport(preCompound);
+  theFTFCModel->SetHighEnergyGenerator(theFTFCStringModel);
+  theFTFCModel->SetMinEnergy(minFTF);
+  theFTFCModel->SetMaxEnergy(maxFTF);
 
   theParticleIterator->reset();
@@ -205,6 +227,8 @@
 	hp->AddDataSet(&theXSecP);
 
-        if(ftfFlag) hp->RegisterMe(theFTFModel);
-	else        hp->RegisterMe(theQGSModel);
+	hp->RegisterMe(theQGSModel);
+        hp->RegisterMe(theFTFCModel);
+        //if(ftfFlag) hp->RegisterMe(theFTFCModel);
+	//else        hp->RegisterMe(theQGSModel);
  
 	if(bertFlag) hp->RegisterMe(theBERT);
@@ -216,6 +240,8 @@
       } else if(pname == "neutron") {
 	hp->AddDataSet(&theXSecN);
-        if(ftfFlag) hp->RegisterMe(theFTFModel);
-	else        hp->RegisterMe(theQGSModel);
+	hp->RegisterMe(theQGSModel);
+        hp->RegisterMe(theFTFCModel);
+        //if(ftfFlag) hp->RegisterMe(theFTFCModel);
+	//else        hp->RegisterMe(theQGSModel);
 
 	G4HadronCaptureProcess* theNeutronCapture = 
@@ -260,6 +286,8 @@
       } else if(pname == "pi-" || pname == "pi+") {
 	hp->AddDataSet(&thePiCross);
-        if(ftfFlag) hp->RegisterMe(theFTFModel);
-	else        hp->RegisterMe(theQGSModel);
+	hp->RegisterMe(theQGSModel);
+        hp->RegisterMe(theFTFCModel);
+        //if(ftfFlag) hp->RegisterMe(theFTFCModel);
+	//else        hp->RegisterMe(theQGSModel);
 
         hp->RegisterMe(theBERT);
@@ -274,5 +302,5 @@
 		pname == "kaon0S"    || 
 		pname == "kaon0L") {
-        hp->RegisterMe(theFTFModel);
+        hp->RegisterMe(theFTFBModel);
         hp->RegisterMe(theBERT);
 	//hp->AddDataSet(new G4UInelasticCrossSection(particle));
@@ -284,15 +312,15 @@
 		pname == "xi0") {
 
-	hp->RegisterMe(theFTFModel);
+	hp->RegisterMe(theFTFBModel);
 	hp->RegisterMe(theBERT);
 	//hp->AddDataSet(new G4UInelasticCrossSection(particle));
 
       } else if(pname == "anti_proton" || pname == "anti_neutron") {
-	hp->RegisterMe(theFTFModel);
+	hp->RegisterMe(theFTFBModel);
         hp->RegisterMe(theCHIPS);
 	//hp->AddDataSet(new G4UInelasticCrossSection(particle));
 
       } else {
-	hp->RegisterMe(theFTFModel);
+	hp->RegisterMe(theFTFBModel);
         hp->RegisterMe(theCHIPS);
 	//hp->AddDataSet(new G4UInelasticCrossSection(particle));
