Index: trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh	(revision 1007)
@@ -25,25 +25,23 @@
 //
 //
-// $Id: G4HadronicInteraction.hh,v 1.9 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
-//
-// Hadronic Interaction  abstract base class
-// This class is the base class for the model classes.
-// It sorts out the energy-range for the models and provides
-// class utilities.
-// original by H.P. Wellisch
-// Modified by J.L.Chuma, TRIUMF, 21-Mar-1997
-// Last modified: 3-Apr-1997
-// Added units to energy initialization: J.L. Chuma  04-Apr-97
-// Modified by J.L.Chuma, 05-May-97  to Initialize theBlockedCounter
-// Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes
-// Adding a registry for memory management of hadronic models, HPW 22-Mar-99
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
-//                          and reorder methods in the header 
+// $Id: G4HadronicInteraction.hh,v 1.8 2007/01/11 05:30:01 dennis Exp $
+// GEANT4 tag $Name: geant4-09-02 $
+//
+ // Hadronic Interaction  abstract base class
+ // This class is the base class for the model classes.
+ // It sorts out the energy-range for the models and provides
+ // class utilities.
+ // original by H.P. Wellisch
+ // Modified by J.L.Chuma, TRIUMF, 21-Mar-1997
+ // Last modified: 3-Apr-1997
+ // Added units to energy initialization: J.L. Chuma  04-Apr-97
+ // Modified by J.L.Chuma, 05-May-97  to Initialize theBlockedCounter
+ // Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes
+ // Adding a registry for memory management of hadronic models, HPW 22-Mar-99
 
 // Class Description
 // This is the base class for all hadronic interaction models in geant4.
-// If you want to implement a new way of producing a final state, please,
-//  inherit from here.
+// If you want to implement a new way of producing a final state, please inherit
+// from here.
 // Class Description - End
  
@@ -52,4 +50,5 @@
  
 #include "G4HadFinalState.hh"
+#include "G4DynamicParticle.hh"
 #include "G4ReactionDynamics.hh"
 #include "G4Material.hh"
@@ -57,133 +56,153 @@
 #include "G4Track.hh"
 #include "G4HadProjectile.hh"
-
-class G4HadronicInteraction
-{
+#include "G4HadronicInteractionRegistry.hh"
+#include "G4HadronicException.hh"
+
+ class G4HadronicInteraction
+ {
+ public:
+    
+    G4HadronicInteraction(const G4String& modelName = "HadronicModel") :
+      verboseLevel(0), theMinEnergy(0.0*GeV), theMaxEnergy(25.0*GeV), 
+      isBlocked(false), theModelName(modelName)
+    { 
+      G4HadronicInteractionRegistry::RegisterMe(this);
+    }
+    
+    virtual ~G4HadronicInteraction()
+    {
+      G4HadronicInteractionRegistry::RemoveMe(this);
+    }
+    
+ private:
+    
+    inline G4HadronicInteraction(
+     const G4HadronicInteraction &right )
+    { *this = right; }
+    
+    inline const G4HadronicInteraction & operator=(
+     const G4HadronicInteraction &right )
+    { 
+     G4String text = "unintended use of G4HadronicInteraction::operator=";
+     throw G4HadronicException(__FILE__, __LINE__, text); 
+     return right;
+    }
+    
+ public:
+    
+    inline G4bool operator==(
+     const G4HadronicInteraction &right ) const
+    { return ( this == (G4HadronicInteraction *) &right ); }
+    
+    inline G4bool operator!=(
+     const G4HadronicInteraction &right ) const
+    { return ( this != (G4HadronicInteraction *) &right ); }
+    
+    inline G4double GetMinEnergy() const
+    { return theMinEnergy; }
+    
+    virtual G4double GetMinEnergy( const G4Material *aMaterial,
+                                  const G4Element *anElement ) const;
+    
+    inline void SetMinEnergy( const G4double anEnergy )
+    { theMinEnergy = anEnergy; }
+    
+    virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement );
+    
+    virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial );
+    
+    inline G4double GetMaxEnergy() const
+    { return theMaxEnergy; }
+    
+    virtual G4double GetMaxEnergy( const G4Material *aMaterial,
+                                  const G4Element *anElement ) const;
+    
+    inline void SetMaxEnergy( const G4double anEnergy )
+    { theMaxEnergy = anEnergy; }
+    
+    virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement );
+    
+    virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial );
+  
+    inline const G4HadronicInteraction *GetMyPointer() const
+    { return this; }
+
+    inline G4int GetVerboseLevel() const
+    { return verboseLevel; }
+
+    inline void SetVerboseLevel( G4int value )
+    { verboseLevel = value; }
+
+    inline const G4String& GetModelName() const
+    { return theModelName; }
+
 public: // With description
-
-    
-  G4HadronicInteraction(const G4String& modelName = "HadronicModel");
-    
-  virtual ~G4HadronicInteraction();
-    
-  virtual G4HadFinalState *ApplyYourself(const G4HadProjectile &aTrack, 
-					 G4Nucleus & targetNucleus ) = 0;
-  // This is the interface to implement for final state production code.
-   
-  virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 
-			      G4Nucleus & /*targetNucleus*/)
-  {  return true;}
- 
-  inline G4double GetMinEnergy() const
-  { return theMinEnergy; }
-    
-  virtual G4double GetMinEnergy( const G4Material *aMaterial,
-				 const G4Element *anElement ) const;
-   
-  inline void SetMinEnergy( const G4double anEnergy )
-  { theMinEnergy = anEnergy; }
-    
-  virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement );
-    
-  virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial );
-    
-  inline G4double GetMaxEnergy() const
-  { return theMaxEnergy; }
-    
-  virtual G4double GetMaxEnergy( const G4Material *aMaterial,
-				 const G4Element *anElement ) const;
-    
-  inline void SetMaxEnergy( const G4double anEnergy )
-  { theMaxEnergy = anEnergy; }
-    
-  virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement );
-    
-  virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial );
-  
-  inline const G4HadronicInteraction *GetMyPointer() const
-  { return this; }
-
-  inline G4int GetVerboseLevel() const
-  { return verboseLevel; }
-
-  inline void SetVerboseLevel( G4int value )
-  { verboseLevel = value; }
-
-  inline const G4String& GetModelName() const
-  { return theModelName; }
+    // This is the interface to implement for final state production code.
+    
+    virtual G4HadFinalState *ApplyYourself(
+            const G4HadProjectile &aTrack, G4Nucleus & targetNucleus ) = 0;
     
 public: // Without description
 
-  virtual void DeActivateFor( G4Material *aMaterial );
-    
-  virtual void ActivateFor( G4Material *aMaterial ) 
-  { 
-    Block(); 
-    SetMaxEnergy(GetMaxEnergy(), aMaterial);
-    SetMinEnergy(GetMinEnergy(), aMaterial);
-  }
-
-  virtual void DeActivateFor( G4Element *anElement ); 
-  virtual void ActivateFor( G4Element *anElement )
-  { 
-    Block(); 
-    SetMaxEnergy(GetMaxEnergy(), anElement);
-    SetMinEnergy(GetMinEnergy(), anElement);
-  }
-
-  virtual G4bool IsBlocked( const G4Material *aMaterial ) const;
-
-  virtual G4bool IsBlocked( const G4Element *anElement) const;
-
-  inline G4bool operator==(const G4HadronicInteraction &right ) const
-  { return ( this == (G4HadronicInteraction *) &right ); }
-    
-  inline G4bool operator!=(const G4HadronicInteraction &right ) const
-  { return ( this != (G4HadronicInteraction *) &right ); }
-    
-private:
-    
-  G4HadronicInteraction(const G4HadronicInteraction &right );
-    
-  const G4HadronicInteraction& operator=(const G4HadronicInteraction &right);
-
-protected:
-
-  inline G4bool IsBlocked() const { return isBlocked;}
-  inline void Block() { isBlocked = true; }
-    
-  G4HadFinalState theParticleChange;
-  // the G4HadFinalState object which is modified and returned
-  // by address by the ApplyYourself method,
-  // (instead of aParticleChange as found in G4VProcess)
-    
-  G4int verboseLevel;
-  // control flag for output messages
-  // 0: silent
-  // 1: warning messages
-  // 2: more
-  // (instead of verboseLevel as found in G4VProcess)
-    
-  G4ReactionDynamics theReactionDynamics;
-    
-  // these two have global validity
-  // units are assumed to be MeV
-    
-  G4double theMinEnergy;
-  G4double theMaxEnergy;
-    
-  G4bool isBlocked;
-
-  G4String theModelName;
-    
-private:
+    virtual void DeActivateFor( G4Material *aMaterial );
+    
+    virtual void ActivateFor( G4Material *aMaterial ) 
+    { 
+      Block(); 
+      SetMaxEnergy(GetMaxEnergy(), aMaterial);
+      SetMinEnergy(GetMinEnergy(), aMaterial);
+    }
+
+    virtual void DeActivateFor( G4Element *anElement ); 
+    virtual void ActivateFor( G4Element *anElement )
+    { 
+      Block(); 
+      SetMaxEnergy(GetMaxEnergy(), anElement);
+      SetMinEnergy(GetMinEnergy(), anElement);
+    }
+
+    virtual G4bool IsBlocked( const G4Material *aMaterial ) const;
+
+    virtual G4bool IsBlocked( const G4Element *anElement) const;
+    
+    virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 
+                               G4Nucleus & /*targetNucleus*/){  return true;}
+ protected:
+    
+    G4HadFinalState theParticleChange;
+    // the G4HadFinalState object which is modified and returned
+    // by address by the ApplyYourself method,
+    // (instead of aParticleChange as found in G4VProcess)
+    
+    G4int verboseLevel;
+    // control flag for output messages
+    // 0: silent
+    // 1: warning messages
+    // 2: more
+    // (instead of verboseLevel as found in G4VProcess)
+    
+    G4ReactionDynamics theReactionDynamics;
+    
+    // these two have global validity
+    // units are assumed to be MeV
+    
+    G4double theMinEnergy;
+    G4double theMaxEnergy;
+    
+    G4bool IsBlocked() const { return isBlocked;}
+    void Block() { isBlocked = true; }
+    G4bool isBlocked;
+
+    G4String theModelName;
+    
+ private:
         
-   std::vector<std::pair<G4double, G4Material *> > theMinEnergyList;
-   std::vector<std::pair<G4double, G4Material *> > theMaxEnergyList;
-   std::vector<std::pair<G4double, G4Element *> > theMinEnergyListElements;
-   std::vector<std::pair<G4double, G4Element *> > theMaxEnergyListElements;
-   std::vector<G4Material *> theBlockedList;
-   std::vector<G4Element *> theBlockedListElements;
-};
+    std::vector<std::pair<G4double, G4Material *> > theMinEnergyList;
+    std::vector<std::pair<G4double, G4Material *> > theMaxEnergyList;
+    std::vector<std::pair<G4double, G4Element *> > theMinEnergyListElements;
+    std::vector<std::pair<G4double, G4Element *> > theMaxEnergyListElements;
+    std::vector<G4Material *> theBlockedList;
+    std::vector<G4Element *> theBlockedListElements;
+ };
  
 #endif
Index: trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh	(revision 1007)
@@ -24,13 +24,4 @@
 // ********************************************************************
 //
-// $Id: G4HadronicInteractionRegistry.hh,v 1.4 2009/02/14 19:24:52 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
-//
-// 23-Jan-2009 V.Ivanchenko make the class to be a singleton
-
-// Class Description
-// This is the a singleton class to store all hadronic interactions
-// Class Description - End
-
 #ifndef G4HadronicInteractionRegistry_h
 #define G4HadronicInteractionRegistry_h 1
@@ -38,30 +29,32 @@
 #include <vector>
 #include "globals.hh"
-
 class G4HadronicInteraction;
 
 class G4HadronicInteractionRegistry
 {
-public:
-
-  static G4HadronicInteractionRegistry* Instance();
-  // access 
+  public:
   
   ~G4HadronicInteractionRegistry();
+  
+  static void RegisterMe(G4HadronicInteraction * aModel);
+  static void RemoveMe(G4HadronicInteraction * aModel);
+    
+  protected:
 
-  void Clean();
-  //delete models
-  
-  void RegisterMe(G4HadronicInteraction * aModel);
-  //register new model
+  G4HadronicInteractionRegistry(G4String );
+  static G4HadronicInteractionRegistry & theRegistry();
 
-  void RemoveMe(G4HadronicInteraction * aModel);
-  //deregister model
-    
-private:
+  private:
 
-  G4HadronicInteractionRegistry();
+  //  !!!  can not use "copy constructor" nor "default constructor" !!!!
+       G4HadronicInteractionRegistry(const G4HadronicInteractionRegistry &right) 
+       { nModels = right.nModels; }
+       G4HadronicInteractionRegistry() {nModels = 0;}
 
-  static G4HadronicInteractionRegistry* theInstance;
+  //  !!!  Assignment operation is forbidden !!!
+      const G4HadronicInteractionRegistry & operator=(const G4HadronicInteractionRegistry &) 
+      { return *this;}
+
+  void AddModel(G4HadronicInteraction * aModel);
   
   G4int nModels;
Index: trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh	(revision 1007)
@@ -25,21 +25,20 @@
 //
 //
-// $Id: G4InelasticInteraction.hh,v 1.6 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4InelasticInteraction.hh,v 1.5 2007/01/11 05:30:12 dennis Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
-// Hadronic Process: Inelastic Interaction 
-// This class is an abstract base class, since the pure virtual
-// function ApplyYourself has not been defined yet.
-// original by H.P. Wellisch
-// Modified by J.L. Chuma, TRIUMF, 22-Nov-1996
-// Modified by J.L. Chuma  27-Mar-1997
-// Modified by J.L. Chuma  30-Apr-1997
-// Modified by J.L. Chuma  05-Aug-1997  to pass the original incident particle to
-//                                      CalculateMomenta
-// Modified by J.L. Chuma  05-Jun-1998  to include quasiElastic flag to allow for
-//                                      TwoBody to be called directly, bypassing
-//                                      TwoCluster, and allowing TwoCluster to be
-//                                      called with no secondaries
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
+ // Hadronic Process: Inelastic Interaction 
+ // This class is an abstract base class, since the pure virtual
+ // function ApplyYourself has not been defined yet.
+ // original by H.P. Wellisch
+ // Modified by J.L. Chuma, TRIUMF, 22-Nov-1996
+ // Modified by J.L. Chuma  27-Mar-1997
+ // Modified by J.L. Chuma  30-Apr-1997
+ // Modified by J.L. Chuma  05-Aug-1997  to pass the original incident particle to
+ //                                      CalculateMomenta
+ // Modified by J.L. Chuma  05-Jun-1998  to include quasiElastic flag to allow for
+ //                                      TwoBody to be called directly, bypassing
+ //                                      TwoCluster, and allowing TwoCluster to be
+ //                                      called with no secondaries
  
 #ifndef G4InelasticInteraction_h
@@ -54,13 +53,16 @@
 #include "G4ReactionDynamics.hh"
 
-class G4InelasticInteraction : public G4HadronicInteraction
-{
-public:
+ class G4InelasticInteraction : public G4HadronicInteraction
+ {
+ public:
     
-    G4InelasticInteraction(const G4String& modelName = "LEInelastic"); 
+    G4InelasticInteraction(const G4String& modelName = "LEInelastic") 
+     : G4HadronicInteraction(modelName)
+    { cache = 0.0;}
     
-    virtual ~G4InelasticInteraction();
+    virtual ~G4InelasticInteraction()
+    { }
     
-protected:
+ protected:
     
     G4double Pmltpc( G4int np, G4int nm, G4int nz, G4int n,
@@ -98,10 +100,10 @@
                       G4ReactionProduct &targetParticle,
                       G4bool &incidentHasChanged );
-private:
+   private:
    
       G4double cache;
       G4ThreeVector what;
 
-};
+ };
  
 #endif
Index: trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4V3DNucleus.hh,v 1.6 2008/05/16 14:02:37 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4V3DNucleus_h
Index: trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VHighEnergyGenerator.hh,v 1.4 2006/06/29 20:45:41 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VHighEnergyGenerator_h
Index: trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VIntraNuclearTransportModel.hh,v 1.4 2007/01/11 05:29:46 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // $Id: G4IntraNuclearTransportMode.hh,v 1.0 1998/06/30
Index: trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VKineticNucleon.hh,v 1.4 2006/06/29 20:45:47 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VKineticNucleon_h
Index: trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VNuclearDensity.hh,v 1.4 2006/06/29 20:45:49 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VNuclearDensity_h
Index: trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VPreCompoundModel.hh,v 1.5 2007/01/11 05:29:34 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 
