Index: trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonElasticXS.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonElasticXS.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonElasticXS.hh	(revision 962)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4BGGNucleonElasticXS.hh,v 1.1 2007/03/13 15:19:30 vnivanch Exp $
-// GEANT4 tag $Name:  $
+// $Id: G4BGGNucleonElasticXS.hh,v 1.2 2008/12/01 16:50:23 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 // -------------------------------------------------------------------
@@ -60,4 +60,5 @@
 class G4GlauberGribovCrossSection;
 class G4NucleonNuclearCrossSection;
+class G4HadronNucleonXsc;
 
 class G4BGGNucleonElasticXS : public G4VCrossSectionDataSet
@@ -93,10 +94,17 @@
   void Initialise();
 
-  G4double thEnergy;  // threshold of Glauber model
-  G4double theFac[93];
+  G4double CoulombFactor(G4double kinEnergy, G4double A);
+
+  G4double fGlauberEnergy;  
+  G4double fLowEnergy;  
+  G4double theGlauberFac[93];
+  G4double theCoulombFac[93];
 
   const G4ParticleDefinition*     particle;
   G4GlauberGribovCrossSection*    fGlauber;
   G4NucleonNuclearCrossSection*   fNucleon;
+  G4HadronNucleonXsc*             fHadron;
+  G4bool                          isProton;
+  G4bool                          isInitialized;
 };
 
@@ -104,8 +112,9 @@
 
 inline
-G4bool G4BGGNucleonElasticXS::IsApplicable(const G4DynamicParticle* dp, 
-					   const G4Element*  elm)
+G4bool G4BGGNucleonElasticXS::IsApplicable(const G4DynamicParticle*, 
+					   const G4Element*)
 {
-  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
+  return true;
+  //  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
 }
 
@@ -113,8 +122,9 @@
 
 inline
-G4bool G4BGGNucleonElasticXS::IsZAApplicable(const G4DynamicParticle* dp, 
-					     G4double Z, G4double/* A*/)
+G4bool G4BGGNucleonElasticXS::IsZAApplicable(const G4DynamicParticle*, 
+					     G4double /*Z*/, G4double/* A*/)
 {
-  return (dp->GetDefinition() == particle && Z > 1.5);
+  return true;
+  //  return (dp->GetDefinition() == particle);
 }
 
Index: trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonInelasticXS.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonInelasticXS.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4BGGNucleonInelasticXS.hh	(revision 962)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4BGGNucleonInelasticXS.hh,v 1.1 2007/03/13 15:19:30 vnivanch Exp $
-// GEANT4 tag $Name:  $
+// $Id: G4BGGNucleonInelasticXS.hh,v 1.2 2008/12/01 16:50:23 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 // -------------------------------------------------------------------
@@ -60,4 +60,5 @@
 class G4GlauberGribovCrossSection;
 class G4NucleonNuclearCrossSection;
+class G4HadronNucleonXsc;
 
 class G4BGGNucleonInelasticXS : public G4VCrossSectionDataSet
@@ -93,10 +94,17 @@
   void Initialise();
 
-  G4double thEnergy;  // threshold of Glauber model
-  G4double theFac[93];
+  G4double CoulombFactor(G4double kinEnergy, G4double A);
+
+  G4double fGlauberEnergy;  
+  G4double fLowEnergy;  
+  G4double theGlauberFac[93];
+  G4double theCoulombFac[93];
 
   const G4ParticleDefinition*     particle;
   G4GlauberGribovCrossSection*    fGlauber;
   G4NucleonNuclearCrossSection*   fNucleon;
+  G4HadronNucleonXsc*             fHadron;
+  G4bool                          isProton;
+  G4bool                          isInitialized;
 };
 
@@ -104,8 +112,9 @@
 
 inline
-G4bool G4BGGNucleonInelasticXS::IsApplicable(const G4DynamicParticle* dp, 
-					     const G4Element*  elm)
+G4bool G4BGGNucleonInelasticXS::IsApplicable(const G4DynamicParticle*, 
+					     const G4Element*)
 {
-  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
+  return true;
+  //  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
 }
 
@@ -113,8 +122,9 @@
 
 inline
-G4bool G4BGGNucleonInelasticXS::IsZAApplicable(const G4DynamicParticle* dp, 
-					       G4double Z, G4double/* A*/)
+G4bool G4BGGNucleonInelasticXS::IsZAApplicable(const G4DynamicParticle*, 
+					       G4double /*Z*/, G4double/* A*/)
 {
-  return (dp->GetDefinition() == particle && Z > 1.5);
+  return true;
+  //  return (dp->GetDefinition() == particle);
 }
 
Index: trunk/source/processes/hadronic/cross_sections/include/G4BGGPionElasticXS.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4BGGPionElasticXS.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4BGGPionElasticXS.hh	(revision 962)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4BGGPionElasticXS.hh,v 1.1 2007/03/13 15:19:30 vnivanch Exp $
-// GEANT4 tag $Name:  $
+// $Id: G4BGGPionElasticXS.hh,v 1.2 2008/12/01 16:50:23 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 // -------------------------------------------------------------------
@@ -60,4 +60,5 @@
 class G4GlauberGribovCrossSection;
 class G4UPiNuclearCrossSection;
+class G4HadronNucleonXsc;
 
 class G4BGGPionElasticXS : public G4VCrossSectionDataSet
@@ -93,10 +94,17 @@
   void Initialise();
 
-  G4double thEnergy;  // threshold of Glauber model
-  G4double theFac[93];
+  G4double CoulombFactor(G4double kinEnergy, G4double A);
+
+  G4double fGlauberEnergy;  
+  G4double fLowEnergy;  
+  G4double theGlauberFac[93];
+  G4double theCoulombFac[93];
 
   const G4ParticleDefinition*     particle;
   G4GlauberGribovCrossSection*    fGlauber;
   G4UPiNuclearCrossSection*       fPion;
+  G4HadronNucleonXsc*             fHadron;
+  G4bool                          isPiplus;
+  G4bool                          isInitialized;
 };
 
@@ -104,8 +112,9 @@
 
 inline
-G4bool G4BGGPionElasticXS::IsApplicable(const G4DynamicParticle* dp, 
-					const G4Element*  elm)
+G4bool G4BGGPionElasticXS::IsApplicable(const G4DynamicParticle*, 
+					const G4Element*)
 {
-  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
+  return true;
+  //return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
 }
 
@@ -113,8 +122,9 @@
 
 inline
-G4bool G4BGGPionElasticXS::IsZAApplicable(const G4DynamicParticle* dp, 
-					  G4double Z, G4double/* A*/)
+G4bool G4BGGPionElasticXS::IsZAApplicable(const G4DynamicParticle*, 
+					  G4double /*Z*/, G4double/* A*/)
 {
-  return (dp->GetDefinition() == particle && Z > 1.5);
+  return true;
+  //  return (dp->GetDefinition() == particle);
 }
 
Index: trunk/source/processes/hadronic/cross_sections/include/G4BGGPionInelasticXS.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4BGGPionInelasticXS.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4BGGPionInelasticXS.hh	(revision 962)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4BGGPionInelasticXS.hh,v 1.1 2007/03/13 15:19:30 vnivanch Exp $
-// GEANT4 tag $Name:  $
+// $Id: G4BGGPionInelasticXS.hh,v 1.2 2008/12/01 16:50:23 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 // -------------------------------------------------------------------
@@ -60,4 +60,5 @@
 class G4GlauberGribovCrossSection;
 class G4UPiNuclearCrossSection;
+class G4HadronNucleonXsc;
 
 class G4BGGPionInelasticXS : public G4VCrossSectionDataSet
@@ -93,10 +94,17 @@
   void Initialise();
 
-  G4double thEnergy;  // threshold of Glauber model
-  G4double theFac[93];
+  G4double CoulombFactor(G4double kinEnergy, G4double A);
+
+  G4double fGlauberEnergy;  
+  G4double fLowEnergy;  
+  G4double theGlauberFac[93];
+  G4double theCoulombFac[93];
 
   const G4ParticleDefinition*     particle;
   G4GlauberGribovCrossSection*    fGlauber;
   G4UPiNuclearCrossSection*       fPion;
+  G4HadronNucleonXsc*             fHadron;
+  G4bool                          isPiplus;
+  G4bool                          isInitialized;
 };
 
@@ -104,8 +112,9 @@
 
 inline
-G4bool G4BGGPionInelasticXS::IsApplicable(const G4DynamicParticle* dp, 
-					const G4Element*  elm)
+G4bool G4BGGPionInelasticXS::IsApplicable(const G4DynamicParticle*, 
+					  const G4Element*)
 {
-  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
+  return true;
+  //  return IsZAApplicable(dp, elm->GetZ(), elm->GetN());
 }
 
@@ -113,8 +122,9 @@
 
 inline
-G4bool G4BGGPionInelasticXS::IsZAApplicable(const G4DynamicParticle* dp, 
-					  G4double Z, G4double/* A*/)
+G4bool G4BGGPionInelasticXS::IsZAApplicable(const G4DynamicParticle*, 
+					    G4double /*Z*/, G4double/* A*/)
 {
-  return (dp->GetDefinition() == particle && Z > 1.5);
+  return true;
+  // return (dp->GetDefinition() == particle);
 }
 
@@ -123,6 +133,6 @@
 inline
 G4double G4BGGPionInelasticXS::GetCrossSection(const G4DynamicParticle* dp, 
-					     const G4Element* elm, 
-					     G4double temp)
+					       const G4Element* elm, 
+					       G4double temp)
 {
   return GetIsoZACrossSection(dp, elm->GetZ(), elm->GetN(), temp);
Index: trunk/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh	(revision 962)
@@ -24,4 +24,20 @@
 // ********************************************************************
 //
+// $Id: G4CrossSectionDataStore.hh,v 1.14 2009/01/24 11:54:47 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
+//
+// -------------------------------------------------------------------
+//
+// GEANT4 Class header file
+//
+//
+// File name:     G4CrossSectionDataStore
+//
+//
+// Modifications:
+// 23.01.2009 V.Ivanchenko move constructor and destructor to source,
+//                         use STL vector instead of C-array
+//
+
 // Class Description
 // This is the class to which cross section data sets may be registered. 
@@ -40,5 +56,7 @@
 #include "G4Material.hh"
 #include "G4VCrossSectionDataSet.hh"
+#include <vector>
 
+class G4Nucleus;
 
 class G4CrossSectionDataStore
@@ -46,52 +64,50 @@
 public:
 
-   G4CrossSectionDataStore() :
-      NDataSetList(0), verboseLevel(0)
-   {}
+  G4CrossSectionDataStore();
 
-   ~G4CrossSectionDataStore()
-   {}
+  ~G4CrossSectionDataStore();
 
-   G4double GetCrossSection(const G4DynamicParticle*, 
-                            const G4Element*, G4double aTemperature);
+  G4double GetCrossSection(const G4DynamicParticle*, 
+			   const G4Element*, G4double aTemperature);
 
-   G4double GetCrossSection(const G4DynamicParticle*, 
-                            const G4Isotope*, G4double aTemperature);
+  G4double GetCrossSection(const G4DynamicParticle*, 
+			   const G4Isotope*, G4double aTemperature);
 
-   G4double GetCrossSection(const G4DynamicParticle*, 
-                            G4double Z, G4double A, G4double aTemperature);
+  G4double GetCrossSection(const G4DynamicParticle*, 
+			   G4double Z, G4double A, G4double aTemperature);
 
-   // to replace GetMicroscopicCrossSection
-   G4double GetCrossSection(const G4DynamicParticle*, const G4Material*);
+  // to replace GetMicroscopicCrossSection
+  G4double GetCrossSection(const G4DynamicParticle*, const G4Material*);
 
-   std::pair<G4double/*Z*/, G4double/*A*/> 
-   SelectRandomIsotope(const G4DynamicParticle*, const G4Material*);
+  //std::pair<G4double/*Z*/, G4double/*A*/> 
+  // SelectRandomIsotope(const G4DynamicParticle*, const G4Material*);
 
-   void AddDataSet(G4VCrossSectionDataSet*);
+  G4Element* SampleZandA(const G4DynamicParticle*, const G4Material*,
+			 G4Nucleus& target);
 
-   void BuildPhysicsTable(const G4ParticleDefinition&);
+  void AddDataSet(G4VCrossSectionDataSet*);
 
-   void DumpPhysicsTable(const G4ParticleDefinition&);
+  void BuildPhysicsTable(const G4ParticleDefinition&);
 
-   void SetVerboseLevel(G4int value)
-   {
-      verboseLevel = value;
-   }
+  void DumpPhysicsTable(const G4ParticleDefinition&);
 
-   G4int GetVerboseLevel()
-   {
-      return verboseLevel;
-   }
+  inline void SetVerboseLevel(G4int value)
+  {
+    verboseLevel = value;
+  }
+
+  inline G4int GetVerboseLevel()
+  {
+    return verboseLevel;
+  }
 
 private:
 
+  G4VCrossSectionDataSet* whichDataSetInCharge(const G4DynamicParticle*, 
+					       const G4Element*);
 
-   G4VCrossSectionDataSet* whichDataSetInCharge(const G4DynamicParticle*, 
-                            const G4Element*);
-
-   enum { NDataSetMax = 100 };
-   G4VCrossSectionDataSet* DataSetList[NDataSetMax];
-   G4int NDataSetList;
-   G4int verboseLevel;
+  std::vector<G4VCrossSectionDataSet*> DataSetList;
+  G4int NDataSetList;
+  G4int verboseLevel;
 };
 
Index: trunk/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh	(revision 962)
@@ -25,5 +25,5 @@
 //
 //
-// GEANT4 tag $Name:  $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 //
@@ -41,5 +41,4 @@
 #include "G4ParticleTable.hh"
 #include "G4NucleiProperties.hh"
-#include "G4NucleiPropertiesTable.hh"
 #include <vector>
 #include "Randomize.hh"
Index: trunk/source/processes/hadronic/cross_sections/include/G4GlauberGribovCrossSection.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4GlauberGribovCrossSection.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4GlauberGribovCrossSection.hh	(revision 962)
@@ -118,9 +118,26 @@
   G4double GetNucleusRadius(G4double At);
 
+  inline G4double GetParticleBarCorTot( const G4ParticleDefinition* theParticle, G4double Z );
+  inline G4double GetParticleBarCorIn( const G4ParticleDefinition* theParticle, G4double Z );
+
+  inline void SetEnergyLowerLimit(G4double E ){fLowerLimit=E;};
+
 private:
 
   const G4double fUpperLimit;
-  const G4double fLowerLimit; 
+  G4double fLowerLimit; 
   const G4double fRadiusConst;
+
+  static const G4double fNeutronBarCorrectionTot[93];
+  static const G4double fNeutronBarCorrectionIn[93];
+
+  static const G4double fProtonBarCorrectionTot[93];
+  static const G4double fProtonBarCorrectionIn[93];
+
+  static const G4double fPionPlusBarCorrectionTot[93];
+  static const G4double fPionPlusBarCorrectionIn[93];
+
+  static const G4double fPionMinusBarCorrectionTot[93];
+  static const G4double fPionMinusBarCorrectionIn[93];
 
   G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
@@ -160,4 +177,8 @@
 };
 
+////////////////////////////////////////////////////////////////
+//
+// Inlines
+
 inline
 G4double G4GlauberGribovCrossSection::GetElasticGlauberGribov(
@@ -168,4 +189,6 @@
 }
 
+/////////////////////////////////////////////////////////////////
+
 inline
 G4double G4GlauberGribovCrossSection::GetInelasticGlauberGribov(
@@ -176,3 +199,47 @@
 }
 
+/////////////////////////////////////////////////////////////////////
+//
+// return correction at Tkin = 90*GeV GG -> Barashenkov tot xsc, when it 
+// is available, else return 1.0
+
+
+inline G4double G4GlauberGribovCrossSection::GetParticleBarCorTot( 
+                          const G4ParticleDefinition* theParticle, G4double Z )
+{
+  G4int iZ = G4int(Z);
+
+  if( iZ >= 2 && iZ <= 92)
+  {
+    if(      theParticle == theProton ) return fProtonBarCorrectionTot[iZ]; 
+    else if( theParticle == theNeutron) return fNeutronBarCorrectionTot[iZ]; 
+    else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionTot[iZ];
+    else if( theParticle == thePiMinus) return fPionMinusBarCorrectionTot[iZ];
+    else return 1.0;
+  }
+  else return 1.0;
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// return correction at Tkin = 90*GeV GG -> Barashenkov in xsc, when it 
+// is available, else return 1.0
+
+
+inline G4double G4GlauberGribovCrossSection::GetParticleBarCorIn( 
+                          const G4ParticleDefinition* theParticle, G4double Z )
+{
+  G4int iZ = G4int(Z);
+
+  if( iZ >= 2 && iZ <= 92)
+  {
+    if(      theParticle == theProton ) return fProtonBarCorrectionIn[iZ]; 
+    else if( theParticle == theNeutron) return fNeutronBarCorrectionIn[iZ]; 
+    else if( theParticle == thePiPlus ) return fPionPlusBarCorrectionIn[iZ];
+    else if( theParticle == thePiMinus) return fPionMinusBarCorrectionIn[iZ];
+    else return 1.0;
+  }
+  else return 1.0;
+}
+
 #endif
Index: trunk/source/processes/hadronic/cross_sections/include/G4HadronCrossSections.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4HadronCrossSections.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4HadronCrossSections.hh	(revision 962)
@@ -25,5 +25,5 @@
 //
 //
-// GEANT4 tag $Name:  $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 //
Index: trunk/source/processes/hadronic/cross_sections/include/G4PhotoNuclearCrossSection.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4PhotoNuclearCrossSection.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4PhotoNuclearCrossSection.hh	(revision 962)
@@ -25,5 +25,5 @@
 //
 //
-// GEANT4 tag $Name:  $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
 //
@@ -37,11 +37,8 @@
 
 #include "G4VCrossSectionDataSet.hh"
-/////////#include "G4HadronCrossSections.hh"
 #include "G4DynamicParticle.hh"
 #include "G4Element.hh"
-//#include "G4QPDGCode.hh"
 #include "G4ParticleTable.hh"
 #include "G4NucleiProperties.hh"
-#include "G4NucleiPropertiesTable.hh"
 #include <vector>
 
@@ -82,5 +79,4 @@
 private:
   G4int    GetFunctions(G4double a, G4double* y, G4double* z);
-  //G4double LinearFit(G4double X, G4int N, const G4double* XN, const G4double* YN);
   G4double EquLinearFit(G4double X, G4int N,const G4double X0,const G4double XD, const G4double* Y);
   G4double ThresholdEnergy(G4int Z, G4int N);
@@ -100,5 +96,4 @@
   static std::vector <G4double*> HEN;   // Vector of pointers to the HighEnPhotonuclearCrossSect
 
-  //G4HadronCrossSections* theHadronCrossSections;
 };
 
Index: trunk/source/processes/hadronic/cross_sections/include/G4UPiNuclearCrossSection.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4UPiNuclearCrossSection.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4UPiNuclearCrossSection.hh	(revision 962)
@@ -105,4 +105,5 @@
   G4double           elow;
   G4double           elowest;
+  G4double           APower[92];
 
   const G4ParticleDefinition* piPlus;
Index: trunk/source/processes/hadronic/cross_sections/include/G4VCrossSectionDataSet.hh
===================================================================
--- trunk/source/processes/hadronic/cross_sections/include/G4VCrossSectionDataSet.hh	(revision 819)
+++ trunk/source/processes/hadronic/cross_sections/include/G4VCrossSectionDataSet.hh	(revision 962)
@@ -24,7 +24,20 @@
 // ********************************************************************
 //
+// $Id: G4VCrossSectionDataSet.hh,v 1.13 2009/01/24 11:54:47 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
-// GEANT4 physics abstract class: G4VCrossSectionData -- header file
-// F.W. Jones, TRIUMF, 20-JAN-97
+// -------------------------------------------------------------------
+//
+// GEANT4 Class header file
+//
+//
+// File name:    G4VCrossSectionDataSet
+//
+// Author  F.W. Jones, TRIUMF, 20-JAN-97
+//
+// Modifications:
+// 23.01.2009 V.Ivanchenko move constructor and destructor to source
+//
+ 
 //
 // Class Description
@@ -43,56 +56,51 @@
 class G4VCrossSectionDataSet
 {
-public:
-
-   G4VCrossSectionDataSet() :
-      verboseLevel(0)
-   {}
-
-   virtual ~G4VCrossSectionDataSet()
-   {}
-
 public: //with description
 
-   // The following methods need to be implemented for each new data set.
-   virtual
-   G4bool IsApplicable(const G4DynamicParticle*, const G4Element*) = 0;
+  G4VCrossSectionDataSet();
 
-   virtual
-   G4bool IsZAApplicable(const G4DynamicParticle*, G4double /*Z*/, G4double /*A*/);
+  virtual ~G4VCrossSectionDataSet();
 
-   virtual
-   G4double GetCrossSection(const G4DynamicParticle*, 
-                            const G4Element*, 
-			    G4double aTemperature = 0.) = 0;
+  // The following methods need to be implemented for each new data set.
+  virtual
+  G4bool IsApplicable(const G4DynamicParticle*, const G4Element*) = 0;
 
-   virtual
-   G4double GetIsoCrossSection(const G4DynamicParticle*, const G4Isotope*, 
-	         	       G4double aTemperature = 0.);
+  virtual
+  G4bool IsZAApplicable(const G4DynamicParticle*, G4double /*Z*/, G4double /*A*/);
 
-   virtual
-   G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
-                                 G4double /*A*/, G4double aTemperature = 0.);
+  virtual
+  G4double GetCrossSection(const G4DynamicParticle*, 
+			   const G4Element*, 
+			   G4double aTemperature = 0.) = 0;
 
-   virtual
-   void BuildPhysicsTable(const G4ParticleDefinition&) = 0;
+  virtual
+  G4double GetIsoCrossSection(const G4DynamicParticle*, const G4Isotope*, 
+			      G4double aTemperature = 0.);
 
-   virtual
-   void DumpPhysicsTable(const G4ParticleDefinition&) = 0;
+  virtual
+  G4double GetIsoZACrossSection(const G4DynamicParticle*, G4double /*Z*/,
+				G4double /*A*/, G4double aTemperature = 0.);
+
+  virtual
+  void BuildPhysicsTable(const G4ParticleDefinition&) = 0;
+
+  virtual
+  void DumpPhysicsTable(const G4ParticleDefinition&) = 0;
 
 public: // Without Description
 
-   void SetVerboseLevel(G4int value)
-   {
-      verboseLevel = value;
-   }
+  inline void SetVerboseLevel(G4int value)
+  {
+    verboseLevel = value;
+  }
 
-   G4int GetVerboseLevel()
-   {
-      return verboseLevel;
-   }
+  inline G4int GetVerboseLevel()
+  {
+    return verboseLevel;
+  }
 
 protected:
 
-   G4int verboseLevel;
+  G4int verboseLevel;
 };
 
