Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4AlphaEvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4AlphaEvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4AlphaEvaporationChannel_h
@@ -43,9 +44,8 @@
 public:
   // only available constructor
-  G4AlphaEvaporationChannel() : G4EvaporationChannel(4,2,"alpha",
-						     &theEvaporationProbability,&theCoulombBarrier) {};
+  G4AlphaEvaporationChannel();
 
   // destructor
-  ~G4AlphaEvaporationChannel() {};
+  virtual ~G4AlphaEvaporationChannel();
 
 private:
@@ -54,10 +54,6 @@
   G4AlphaEvaporationChannel(const G4AlphaEvaporationChannel & right);
 
-
-public:
   G4bool operator==(const G4AlphaEvaporationChannel & right) const;
   G4bool operator!=(const G4AlphaEvaporationChannel & right) const;
-
-private:
 
   G4AlphaCoulombBarrier theCoulombBarrier;	
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4AlphaEvaporationProbability.hh	(revision 1347)
@@ -24,8 +24,14 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4AlphaEvaporationProbability.hh,v 1.14 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
+//
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
 //
 #ifndef G4AlphaEvaporationProbability_h
@@ -42,5 +48,6 @@
   G4AlphaEvaporationProbability();
 
-  ~G4AlphaEvaporationProbability() {}
+  virtual ~G4AlphaEvaporationProbability();
+
 private:  
   // Copy constructor
@@ -51,32 +58,29 @@
   G4bool operator!=(const G4AlphaEvaporationProbability &right) const;
 
-
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const  G4Fragment & fragment, G4double K);
 
-  G4double GetOpt0(const G4double K);
-  G4double GetOpt12(const G4double K);
-  G4double GetOpt34(const G4double K);
+  G4double GetOpt0(G4double K);
+  G4double GetOpt12(G4double K);
+  G4double GetOpt34(G4double K);
+  
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
+ 
+  virtual G4double CalcBetaParam(const G4Fragment & fragment)  ;
+ 
+  G4double CCoeficient(G4int aZ) ;
+  
+  //data members
+    
+  G4AlphaCoulombBarrier theCoulombBarrier;
 
-  
- virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
- 
- virtual G4double CalcBetaParam(const G4Fragment & fragment)  ;
- 
-  G4double CCoeficient(const G4double aZ) ;
-  
-//data members
-    
-      G4AlphaCoulombBarrier theCoulombBarrier;
-
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
 
 };
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4DeuteronEvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4DeuteronEvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4DeuteronEvaporationChannel_h
@@ -43,9 +44,8 @@
 public:
   // only available constructor
-  G4DeuteronEvaporationChannel() : G4EvaporationChannel(2,1,"deuteron",
-							&theEvaporationProbability,&theCoulombBarrier) {};
+  G4DeuteronEvaporationChannel();
 
   // destructor
-  ~G4DeuteronEvaporationChannel() {};
+  virtual ~G4DeuteronEvaporationChannel();
 
 private:
@@ -54,9 +54,6 @@
   G4DeuteronEvaporationChannel(const G4DeuteronEvaporationChannel & right);
 
-public:
   G4bool operator==(const G4DeuteronEvaporationChannel & right) const;
   G4bool operator!=(const G4DeuteronEvaporationChannel & right) const;
-
-private:
 
   G4DeuteronCoulombBarrier theCoulombBarrier;
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4DeuteronEvaporationProbability.hh	(revision 1347)
@@ -24,8 +24,14 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4DeuteronEvaporationProbability.hh,v 1.14 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
+//
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
 //
 
@@ -43,5 +49,6 @@
   G4DeuteronEvaporationProbability();
 
-  ~G4DeuteronEvaporationProbability() {}
+  virtual ~G4DeuteronEvaporationProbability();
+
 private:  
   // Copy constructor
@@ -55,30 +62,27 @@
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const  G4Fragment & fragment, G4double K);
 
-  G4double GetOpt0(const G4double K);
-  G4double GetOpt12(const G4double K);
-  G4double GetOpt34(const G4double K);
+  G4double GetOpt0(G4double K);
+  G4double GetOpt12(G4double K);
+  G4double GetOpt34(G4double K);
 
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
+ 
+  virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
+ 
+  G4double CCoeficient(G4int aZ) ;
   
- virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
- 
- virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
- 
-  G4double CCoeficient(const G4double aZ) ;
-  
-//data members
+  //data members
 
-      G4DeuteronCoulombBarrier theCoulombBarrier; 
+  G4DeuteronCoulombBarrier theCoulombBarrier; 
 
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
 };
 
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4Evaporation.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4Evaporation.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4Evaporation.hh	(revision 1347)
@@ -26,5 +26,5 @@
 //
 // $Id: G4Evaporation.hh,v 1.12 2010/05/11 11:34:09 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationChannel.hh	(revision 1347)
@@ -24,4 +24,8 @@
 // ********************************************************************
 //
+// $Id: G4EvaporationChannel.hh,v 1.11 2010/11/17 12:19:08 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+//
 //J.M. Quesada (August2008). Based on:
 //
@@ -29,5 +33,7 @@
 // by V. Lara (Oct 1998)
 //
-
+// 17-11-2010 V.Ivanchenko in constructor replace G4VEmissionProbability by 
+//            G4EvaporationProbability and do not new and delete probability
+//            object at each call; use G4Pow
 
 #ifndef G4EvaporationChannel_h
@@ -35,20 +41,8 @@
 
 #include "G4VEvaporationChannel.hh"
-#include "G4VEmissionProbability.hh"
 #include "G4EvaporationProbability.hh"
-#include "G4NeutronEvaporationProbability.hh"
-#include "G4ProtonEvaporationProbability.hh"
-#include "G4DeuteronEvaporationProbability.hh"
-#include "G4TritonEvaporationProbability.hh"
-#include "G4He3EvaporationProbability.hh"
-#include "G4AlphaEvaporationProbability.hh"
-#include "G4VLevelDensityParameter.hh"
 #include "G4VCoulombBarrier.hh"
-#include "G4EvaporationLevelDensityParameter.hh"
-#include "G4NucleiProperties.hh"
-#include "Randomize.hh"
-#include "G4ParticleTable.hh"
-#include "G4IonTable.hh"
 
+class G4EvaporationLevelDensityParameter;
 
 class G4EvaporationChannel : public G4VEvaporationChannel
@@ -56,24 +50,20 @@
 public:
   // constructor
-
-
-  G4EvaporationChannel(const G4int theA, const G4int theZ, const G4String & aName,
-		       G4VEmissionProbability * aEmissionStrategy,
+  G4EvaporationChannel(G4int theA, G4int theZ, const G4String & aName,
+		       G4EvaporationProbability * aEmissionStrategy,
 	               G4VCoulombBarrier * aCoulombBarrier);
 public:
   // destructor
-  ~G4EvaporationChannel();
+  virtual ~G4EvaporationChannel();
   
-  void SetEmissionStrategy(G4VEmissionProbability * aEmissionStrategy)
+  inline void SetEmissionStrategy(G4EvaporationProbability * aEmissionStrategy)
   {theEvaporationProbabilityPtr = aEmissionStrategy;}
 
-  void SetCoulombBarrierStrategy(G4VCoulombBarrier * aCoulombBarrier)
+  inline void SetCoulombBarrierStrategy(G4VCoulombBarrier * aCoulombBarrier)
   {theCoulombBarrierPtr = aCoulombBarrier;} 
-  
-
-  
+    
 protected:
   // default constructor
-  G4EvaporationChannel() {};
+  G4EvaporationChannel();
   
 private:
@@ -93,13 +83,9 @@
   G4FragmentVector * BreakUp(const G4Fragment & theNucleus);
 
-  // void SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity);
- 
 public:
-
 
   inline G4double GetEmissionProbability(void) const 
   {return EmissionProbability;}
-  
-  
+    
   inline G4double GetMaximalKineticEnergy(void) const 
   { return MaximalKineticEnergy; }
@@ -108,14 +94,14 @@
   
   // Calculate Binding Energy for separate fragment from nucleus
-  G4double CalcBindingEnergy(const G4int anA, const G4int aZ);
+  G4double CalcBindingEnergy(G4int anA, G4int aZ);
 
   // Calculate maximal kinetic energy that can be carried by fragment (in MeV)
-  G4double CalcMaximalKineticEnergy(const G4double U);
+  G4double CalcMaximalKineticEnergy(G4double U);
 
   // Samples fragment kinetic energy.
-    G4double  GetKineticEnergy(const G4Fragment & aFragment);
+  G4double  GetKineticEnergy(const G4Fragment & aFragment);
 
   // This has to be removed and put in Random Generator
-  G4ThreeVector IsotropicVector(const G4double Magnitude  = 1.0);
+  G4ThreeVector IsotropicVector(G4double Magnitude  = 1.0);
 
 	// Data Members
@@ -132,18 +118,18 @@
   G4int theZ;
 
+  G4double EvaporatedMass;
+  G4double ResidualMass;
 
   // For evaporation probability calcualation
-  G4VEmissionProbability * theEvaporationProbabilityPtr;
+  G4EvaporationProbability * theEvaporationProbabilityPtr;
 
   // For Level Density calculation
- // G4bool MyOwnLevelDensity;
+  // G4bool MyOwnLevelDensity;
   G4VLevelDensityParameter * theLevelDensityPtr;
-
 
   // For Coulomb Barrier calculation
   G4VCoulombBarrier * theCoulombBarrierPtr;
   G4double CoulombBarrier;
-  
- 
+   
   //---------------------------------------------------
 
@@ -161,8 +147,6 @@
   G4double EmissionProbability;
 
-
   // Maximal Kinetic Energy that can be carried by fragment
   G4double MaximalKineticEnergy;
-
 
 };
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationDefaultGEMFactory.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationDefaultGEMFactory.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationDefaultGEMFactory.hh	(revision 1347)
@@ -26,5 +26,5 @@
 //
 // $Id: G4EvaporationDefaultGEMFactory.hh,v 1.1 2009/07/27 10:20:13 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationFactory.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationFactory.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationFactory.hh	(revision 1347)
@@ -26,5 +26,5 @@
 //
 // $Id: G4EvaporationFactory.hh,v 1.4 2010/04/27 11:43:16 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4EvaporationProbability.hh	(revision 1347)
@@ -24,4 +24,7 @@
 // ********************************************************************
 //
+// $Id: G4EvaporationProbability.hh,v 1.13 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
 //J.M. Quesada (August2008). Based on:
 //
@@ -44,31 +47,17 @@
 public:
   // Only available constructor
-  G4EvaporationProbability(const G4int anA, const G4int aZ, const G4double aGamma,G4VCoulombBarrier * aCoulombBarrier) : 
-    theA(anA),
-    theZ(aZ),
-    Gamma(aGamma)
-,  theCoulombBarrierptr(aCoulombBarrier) 
-  {
-    theEvapLDPptr = new G4EvaporationLevelDensityParameter;
+  G4EvaporationProbability(G4int anA, G4int aZ, G4double aGamma,
+			   G4VCoulombBarrier * aCoulombBarrier); 
 
-    
-  }
+  virtual ~G4EvaporationProbability();
 
-  ~G4EvaporationProbability() 
-  {
-    if (theEvapLDPptr != 0) delete theEvapLDPptr;
-
-  }
-
-
+  inline G4int GetZ(void) const { return theZ; }
 	
-  G4double GetZ(void) const { return theZ; }
-	
-  G4double GetA(void) const { return theA;} 
+  inline G4int GetA(void) const { return theA;} 
 
 protected:
   
   // Default constructor
-  G4EvaporationProbability() {}
+  G4EvaporationProbability();
 
 private:
@@ -82,17 +71,18 @@
 public:
 
- G4double ProbabilityDistributionFunction( const G4Fragment & aFragment, const G4double K);
+  G4double ProbabilityDistributionFunction( const G4Fragment & aFragment, G4double K);
 
- G4double EmissionProbability(const G4Fragment & fragment, const G4double anEnergy);
+  G4double EmissionProbability(const G4Fragment & fragment, G4double anEnergy);
 
 private:
 
-  G4double CalculateProbability(const G4Fragment & fragment, const G4double MaximalKineticEnergy );
+  G4double CalculateProbability(const G4Fragment & fragment, G4double MaximalKineticEnergy );
 
-  G4double IntegrateEmissionProbability(const G4Fragment & aFragment, const G4double & Low, const G4double & Up );
+  G4double IntegrateEmissionProbability(const G4Fragment & aFragment, 
+					const G4double & Low, const G4double & Up );
 
 protected:
 
- virtual G4double CrossSection( const  G4Fragment & fragment, const G4double K )= 0;  
+ virtual G4double CrossSection( const  G4Fragment & fragment, G4double K )= 0;  
 
  virtual G4double CalcAlphaParam(const G4Fragment & fragment)=0 ;
@@ -102,8 +92,5 @@
 private:
 
-  // Data Members
-
-  G4VLevelDensityParameter * theEvapLDPptr;
-	
+  // Data Members	
   G4int theA;
   G4int theZ;
@@ -113,12 +100,8 @@
   G4double Gamma;
 
-//The Coulomb Barrier
-         G4VCoulombBarrier * theCoulombBarrierptr;
-
+  //The Coulomb Barrier
+  G4VCoulombBarrier * theCoulombBarrierptr;
 
 };
 
-
-
-
 #endif
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4He3EvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4He3EvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4He3EvaporationChannel_h
@@ -43,22 +44,19 @@
 public:
   // only available constructor
-  G4He3EvaporationChannel() : G4EvaporationChannel(3,2,"He3",
-						   &theEvaporationProbability,&theCoulombBarrier) {};
+  G4He3EvaporationChannel();
 
   // destructor
-  ~G4He3EvaporationChannel() {};
+  virtual ~G4He3EvaporationChannel();
 
 private:
+
   const G4He3EvaporationChannel & operator=(const G4He3EvaporationChannel & right);  
 
   G4He3EvaporationChannel(const G4He3EvaporationChannel & right);
 
-public:
   G4bool operator==(const G4He3EvaporationChannel & right) const;
   G4bool operator!=(const G4He3EvaporationChannel & right) const;
 
-private:
-
-    G4He3CoulombBarrier theCoulombBarrier;
+  G4He3CoulombBarrier theCoulombBarrier;
 	
   G4He3EvaporationProbability theEvaporationProbability;
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4He3EvaporationProbability.hh	(revision 1347)
@@ -24,8 +24,14 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4He3EvaporationProbability.hh,v 1.14 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
+//
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
 //
 #ifndef G4He3EvaporationProbability_h
@@ -42,5 +48,6 @@
   G4He3EvaporationProbability();
 
-  ~G4He3EvaporationProbability() {}
+  virtual ~G4He3EvaporationProbability();
+
 private:  
   // Copy constructor
@@ -51,33 +58,29 @@
   G4bool operator!=(const G4He3EvaporationProbability &right) const;
 
-
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const  G4Fragment & fragment, G4double K);
 
-  G4double GetOpt0(const G4double K);
-  G4double GetOpt12(const G4double K);
-  G4double GetOpt34(const G4double K);
+  G4double GetOpt0(G4double K);
+  G4double GetOpt12(G4double K);
+  G4double GetOpt34(G4double K);
 
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
+ 
+  virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
+ 
+  G4double CCoeficient(G4int aZ) ;
   
- virtual G4double CalcAlphaParam(const G4Fragment & fragment) ;
- 
- virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
- 
-  G4double CCoeficient(const G4double aZ) ;
-  
-//data members
+  //data members
    
-      G4He3CoulombBarrier theCoulombBarrier;
+  G4He3CoulombBarrier theCoulombBarrier;
 
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
 };
 
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4NeutronEvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4NeutronEvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4NeutronEvaporationChannel_h
@@ -43,22 +44,19 @@
 public:
   // only available constructor
-  G4NeutronEvaporationChannel() : G4EvaporationChannel(1,0,"neutron",
-						       &theEvaporationProbability,&theCoulombBarrier) {};
+  G4NeutronEvaporationChannel();
 
   // destructor
-  ~G4NeutronEvaporationChannel() {};
+  virtual ~G4NeutronEvaporationChannel();
 
 private:
+
   const G4NeutronEvaporationChannel & operator=(const G4NeutronEvaporationChannel & right);  
 
   G4NeutronEvaporationChannel(const G4NeutronEvaporationChannel & right);
 
-public:
   G4bool operator==(const G4NeutronEvaporationChannel & right) const;
   G4bool operator!=(const G4NeutronEvaporationChannel & right) const;
 
-private:
-
- G4NeutronCoulombBarrier theCoulombBarrier;
+  G4NeutronCoulombBarrier theCoulombBarrier;
 	
   G4NeutronEvaporationProbability theEvaporationProbability;
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4NeutronEvaporationProbability.hh	(revision 1347)
@@ -24,8 +24,14 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4NeutronEvaporationProbability.hh,v 1.15 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
+//
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
 //
 
@@ -43,5 +49,6 @@
   G4NeutronEvaporationProbability();
 		
-  ~G4NeutronEvaporationProbability() {}
+  virtual ~G4NeutronEvaporationProbability();
+
 private:  
   
@@ -54,29 +61,24 @@
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const  G4Fragment & fragment, G4double K);
 
-  G4double GetOpt12(const G4double K);
-  G4double GetOpt34(const G4double K);
+  G4double GetOpt12(G4double K);
+  G4double GetOpt34(G4double K);
 
- virtual G4double CalcAlphaParam(const G4Fragment & fragment);
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment);
  
- virtual G4double CalcBetaParam(const G4Fragment & fragment);
+  virtual G4double CalcBetaParam(const G4Fragment & fragment);
  
-  
-//data members
+  //data members
 
-      G4NeutronCoulombBarrier theCoulombBarrier; 
+  G4NeutronCoulombBarrier theCoulombBarrier; 
 
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-
-
-
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
 };
 
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4ProtonEvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4ProtonEvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4ProtonEvaporationChannel_h
@@ -43,23 +44,19 @@
 public:
   // only available constructor
-  G4ProtonEvaporationChannel() : G4EvaporationChannel(1,1,"proton",
-						      &theEvaporationProbability,&theCoulombBarrier) {};
+  G4ProtonEvaporationChannel();
 
   // destructor
-  ~G4ProtonEvaporationChannel() {};
+  virtual ~G4ProtonEvaporationChannel();
 
 private:
+
   const G4ProtonEvaporationChannel & operator=(const G4ProtonEvaporationChannel & right);  
 
   G4ProtonEvaporationChannel(const G4ProtonEvaporationChannel & right);
 
-public:
   G4bool operator==(const G4ProtonEvaporationChannel & right) const;
   G4bool operator!=(const G4ProtonEvaporationChannel & right) const;
 
-
-private:
-
-   G4ProtonCoulombBarrier  theCoulombBarrier;
+  G4ProtonCoulombBarrier  theCoulombBarrier;
  
   G4ProtonEvaporationProbability  theEvaporationProbability;
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4ProtonEvaporationProbability.hh	(revision 1347)
@@ -24,8 +24,14 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4ProtonEvaporationProbability.hh,v 1.14 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
+//
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
 //
 
@@ -43,5 +49,6 @@
   G4ProtonEvaporationProbability();
 
-  ~G4ProtonEvaporationProbability() {}
+  virtual ~G4ProtonEvaporationProbability();
+
 private:  
   // Copy constructor
@@ -52,36 +59,31 @@
   G4bool operator!=(const G4ProtonEvaporationProbability &right) const;
 
-
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const  G4Fragment & fragment, G4double K);
 
-  G4double GetOpt0(const G4double K);
-  G4double GetOpt1(const G4double K);
-  G4double GetOpt2(const G4double K);
-  G4double GetOpt3(const G4double K);
+  G4double GetOpt0(G4double K);
+  G4double GetOpt1(G4double K);
+  G4double GetOpt2(G4double K);
+  G4double GetOpt3(G4double K);
 
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment)  ;
+ 
+  virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
+ 
+  G4double CCoeficient(G4int aZ) ;
   
- virtual G4double CalcAlphaParam(const G4Fragment & fragment)  ;
- 
- virtual G4double CalcBetaParam(const G4Fragment & fragment) ;
- 
-  G4double CCoeficient(const G4double aZ) ;
-  
-//data members
+  //data members
 
-      G4ProtonCoulombBarrier theCoulombBarrier; 
+  G4ProtonCoulombBarrier theCoulombBarrier; 
 
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-      G4double U;
-
-
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
+  G4double U;
 
 };
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationChannel.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationChannel.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationChannel.hh	(revision 1347)
@@ -25,10 +25,11 @@
 //
 //
-// $Id: G4TritonEvaporationChannel.hh,v 1.8 2008/09/19 13:32:54 ahoward Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4TritonEvaporationChannel.hh,v 1.9 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #ifndef G4TritonEvaporationChannel_h
@@ -43,9 +44,8 @@
 public:
   // only available constructor
-  G4TritonEvaporationChannel() : G4EvaporationChannel(3,1,"triton",
-						      &theEvaporationProbability,&theCoulombBarrier) {};
+  G4TritonEvaporationChannel();
 
   // destructor
-  ~G4TritonEvaporationChannel() {};
+  virtual ~G4TritonEvaporationChannel();
 
 private:
@@ -54,9 +54,6 @@
   G4TritonEvaporationChannel(const G4TritonEvaporationChannel & right);
 
-public:
   G4bool operator==(const G4TritonEvaporationChannel & right) const;
   G4bool operator!=(const G4TritonEvaporationChannel & right) const;
-
-private:
 
   G4TritonCoulombBarrier theCoulombBarrier;
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationProbability.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationProbability.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4TritonEvaporationProbability.hh	(revision 1347)
@@ -24,9 +24,16 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4TritonEvaporationProbability.hh,v 1.14 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
+// Modified:
+// 17-11-2010 V.Ivanchenko integer Z and A
+
+
 #ifndef G4TritonEvaporationProbability_h
 #define G4TritonEvaporationProbability_h 1
@@ -42,5 +49,6 @@
   G4TritonEvaporationProbability();
 
-  ~G4TritonEvaporationProbability() {}
+  virtual ~G4TritonEvaporationProbability();
+
 private:  
   // Copy constructor
@@ -54,35 +62,31 @@
 private:
 
-  virtual G4double CrossSection(const  G4Fragment & fragment, const  G4double K);
+  virtual G4double CrossSection(const G4Fragment & fragment, G4double K);
 
-  G4double GetOpt0(const G4double K);
-  G4double GetOpt12(const G4double K);
-  G4double GetOpt34(const G4double K);
+  G4double GetOpt0(G4double K);
+  G4double GetOpt12(G4double K);
+  G4double GetOpt34(G4double K);
 
   
- virtual G4double CalcAlphaParam(const G4Fragment & fragment)  ;
+  virtual G4double CalcAlphaParam(const G4Fragment & fragment)  ;
  
- virtual G4double CalcBetaParam(const G4Fragment & fragment)  ;
+  virtual G4double CalcBetaParam(const G4Fragment & fragment)  ;
  
-  G4double CCoeficient(const G4double aZ) ;
+  G4double CCoeficient(G4int aZ) ;
   
-//data members
+  //data members
+      
+  G4TritonCoulombBarrier theCoulombBarrier;
 
-      
-      G4TritonCoulombBarrier theCoulombBarrier;
-
-      G4double ResidualA;
-      G4double ResidualZ; 
-      G4double theA;
-      G4double theZ;
-      G4double ResidualAthrd;
-      G4double FragmentA;
-      G4double FragmentAthrd;
-
+  G4int ResidualA;
+  G4int ResidualZ; 
+  G4int theA;
+  G4int theZ;
+  G4double ResidualAthrd;
+  G4int FragmentA;
+  G4double FragmentAthrd;
 
 };
 
-
 #endif
 
-
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4UnstableFragmentBreakUp.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4UnstableFragmentBreakUp.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4UnstableFragmentBreakUp.hh	(revision 1347)
@@ -25,5 +25,5 @@
 //
 // $Id: G4UnstableFragmentBreakUp.hh,v 1.2 2010/05/11 11:26:15 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4VEvaporation.hh
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4VEvaporation.hh	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/include/G4VEvaporation.hh	(revision 1347)
@@ -24,7 +24,6 @@
 // ********************************************************************
 //
-//
-// $Id: G4VEvaporation.hh,v 1.6 2010/04/27 14:00:40 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4VEvaporation.hh,v 1.8 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
@@ -66,7 +65,8 @@
   // for superimposed Coulomb Barrier for inverse cross sections 	
   inline void UseSICB(G4bool use) { useSICB = use; }	
+
 protected:
-   G4int OPTxs;
-   G4bool useSICB;
+  G4int OPTxs;
+  G4bool useSICB;
 
 };
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationChannel.cc	(revision 1347)
@@ -25,35 +25,19 @@
 //
 //
-// $Id: G4AlphaEvaporationChannel.cc,v 1.4 2006/06/29 20:10:17 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4AlphaEvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4AlphaEvaporationChannel.hh"
 
+G4AlphaEvaporationChannel::G4AlphaEvaporationChannel() 
+: G4EvaporationChannel(4,2,"alpha",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4AlphaEvaporationChannel & G4AlphaEvaporationChannel::operator=(const G4AlphaEvaporationChannel & )
-{
-  throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationChannel::operator= meant to not be accessable");
-  return *this;
-}
+G4AlphaEvaporationChannel::~G4AlphaEvaporationChannel() 
+{}
 
-G4AlphaEvaporationChannel::G4AlphaEvaporationChannel(const G4AlphaEvaporationChannel & ) : G4EvaporationChannel()
-{
-  throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4AlphaEvaporationChannel::operator==(const G4AlphaEvaporationChannel &right ) const 
-{
-  return (this == (G4AlphaEvaporationChannel *) &right);
-  //  return false;
-}
-
-G4bool G4AlphaEvaporationChannel::operator!=(const G4AlphaEvaporationChannel &right ) const 
-{
-  return (this != (G4AlphaEvaporationChannel *) &right);
-  //  return true;
-}
-
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4AlphaEvaporationProbability.cc,v 1.18 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 #include "G4AlphaEvaporationProbability.hh"
@@ -36,64 +40,43 @@
 G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() :
     G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier
-{
+{}
+
+G4AlphaEvaporationProbability::~G4AlphaEvaporationProbability()
+{}
+
+G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)  
+  { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());}
 	
-}
-
-
-G4AlphaEvaporationProbability::G4AlphaEvaporationProbability(const G4AlphaEvaporationProbability &): G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-
-
-const G4AlphaEvaporationProbability & G4AlphaEvaporationProbability::
-operator=(const G4AlphaEvaporationProbability &) 
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4AlphaEvaporationProbability::operator==(const G4AlphaEvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4AlphaEvaporationProbability::operator!=(const G4AlphaEvaporationProbability &) const
-{
-    return true;
-}
-
-
- G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)  
-  { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
+G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) 
+  { return 0.0; }
+
+G4double G4AlphaEvaporationProbability::CCoeficient(G4int aZ) 
+{
+  // Data comes from 
+  // Dostrovsky, Fraenkel and Friedlander
+  // Physical Review, vol 116, num. 3 1959
+  // 
+  // const G4int size = 5;
+  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
+  //	G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
+  G4double C = 0.0;
 	
- G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) 
-  { return 0.0; }
-
-G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ) 
-{
-    // Data comes from 
-    // Dostrovsky, Fraenkel and Friedlander
-    // Physical Review, vol 116, num. 3 1959
-    // 
-    // const G4int size = 5;
-    // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
-    //	G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
-    G4double C = 0.0;
-	
-	
-    if (aZ <= 30) {
-	C = 0.10;
-    } else if (aZ <= 50) {
-	C = 0.1 + -((aZ-50.)/20.)*0.02;
-    } else if (aZ < 70) {
-	C = 0.08 + -((aZ-70.)/20.)*0.02;
-    } else {
-	C = 0.06;
-    }
-    return C;
+  if (aZ <= 30) 
+    {
+      C = 0.10;
+    }
+  else if (aZ <= 50)
+    {
+      C = 0.1 - (aZ-30)*0.001;
+    }
+  else if (aZ < 70)
+    {
+      C = 0.08 - (aZ-50)*0.001;
+    }
+  else 
+    {
+      C = 0.06;
+    }
+  return C;
 }
 
@@ -104,16 +87,15 @@
 //OPT=3,4 Kalbach's parameterization 
 // 
-G4double G4AlphaEvaporationProbability::CrossSection(const  G4Fragment & fragment, 
-						     const  G4double K)
+G4double 
+G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K)
 {
   theA=GetA();
   theZ=GetZ();
-  ResidualA=fragment.GetA()-theA;
-  ResidualZ=fragment.GetZ()-theZ; 
-  
-  ResidualAthrd=std::pow(ResidualA,0.33333);
-  FragmentA=fragment.GetA();
-  FragmentAthrd=std::pow(FragmentA,0.33333);
-  
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
+  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
   
   if (OPTxs==0) {std::ostringstream errOs;
@@ -133,19 +115,17 @@
 }
 
-
-//
-//********************* OPT=1,2 : Chatterjee's cross section ************************ 
+//
+//********************* OPT=1,2 : Chatterjee's cross section ********************
 //(fitting to cross section from Bechetti & Greenles OM potential)
 
-G4double G4AlphaEvaporationProbability::GetOpt12(const  G4double K)
-{
-// c     ** alpha from huizenga and igo
+G4double G4AlphaEvaporationProbability::GetOpt12(G4double K)
+{
   G4double Kc=K;
-  
-  // JMQ xsec is set constat above limit of validity
-  if (K>50) Kc=50;
-  
+
+  // JMQ xsec is set constant above limit of validity
+  if (K > 50*MeV) { Kc = 50*MeV; }
+
   G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
-  
+
   G4double     p0 = 10.95;
   G4double     p1 = -85.2;
@@ -160,37 +140,34 @@
   G4double     delta=1.2;          
 
- 
   Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
   p = p0 + p1/Ec + p2/(Ec*Ec);
   landa = landa0*ResidualA + landa1;
-  mu = mu0*std::pow(ResidualA,mu1);
-  nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
+  G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 
+  mu = mu0*resmu1;
+  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
   q = landa - nu/(Ec*Ec) - 2*p*Ec;
   r = mu + 2*nu/Ec + p*(Ec*Ec);
-  
+
   ji=std::max(Kc,Ec);
   if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
   else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
-                 
+  
   if (xs <0.0) {xs=0.0;}
-  
+              
   return xs;
-  
 }
 
 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
-G4double G4AlphaEvaporationProbability::GetOpt34(const  G4double K)
+G4double G4AlphaEvaporationProbability::GetOpt34(G4double K)
 // c     ** alpha from huizenga and igo
 {
-  
   G4double landa, mu, nu, p , signor(1.),sig;
   G4double ec,ecsq,xnulam,etest(0.),a; 
   G4double b,ecut,cut,ecut2,geom,elab;
 
-
   G4double     flow = 1.e-18;
   G4double     spill= 1.e+18;
 
-  G4double       p0 = 10.95;
+  G4double     p0 = 10.95;
   G4double     p1 = -85.2;
   G4double     p2 = 1146.;
@@ -204,5 +181,5 @@
   
   G4double      ra=1.20;
-  
+        
   //JMQ 13/02/09 increase of reduced radius to lower the barrier
   // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
@@ -211,32 +188,33 @@
   p = p0 + p1/ec + p2/ecsq;
   landa = landa0*ResidualA + landa1;
-  a = std::pow(ResidualA,mu1);
+  a = fG4pow->powZ(ResidualA,mu1);
   mu = mu0 * a;
   nu = a* (nu0+nu1*ec+nu2*ecsq);  
   xnulam = nu / landa;
-  if (xnulam > spill) xnulam=0.;
-  if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
-  
+  if (xnulam > spill) { xnulam=0.; }
+  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
+
   a = -2.*p*ec + landa - nu/ecsq;
   b = p*ecsq + mu + 2.*nu/ec;
   ecut = 0.;
   cut = a*a - 4.*p*b;
-  if (cut > 0.) ecut = std::sqrt(cut);
+  if (cut > 0.) { ecut = std::sqrt(cut); }
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-//JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
-//ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
-//  if (cut < 0.) ecut2 = ecut - 2.;
-  if (cut < 0.) ecut2 = ecut;
-  elab = K * FragmentA / ResidualA;
+  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
+  // ecut<0 means that there is no cut with energy axis, i.e. xs is set 
+  // to 0 bellow minimum
+  //  if (cut < 0.) ecut2 = ecut - 2.;
+  if (cut < 0.) { ecut2 = ecut; }
+  elab = K * FragmentA / G4double(ResidualA);
   sig = 0.;
   
   if (elab <= ec) { //start for E<Ec
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
   }           //end for E<Ec
   else {           //start for E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-    if (xnulam < flow || elab < etest) return sig;
+    if (xnulam < flow || elab < etest) { return sig; }
     geom = std::sqrt(theA*K);
     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
@@ -245,6 +223,4 @@
   }           //end for E>Ec
   return sig;
-  
-}
-
-//   ************************** end of cross sections ******************************* 
+}
+
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationChannel.cc	(revision 1347)
@@ -25,34 +25,19 @@
 //
 //
-// $Id: G4DeuteronEvaporationChannel.cc,v 1.4 2006/06/29 20:10:21 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4DeuteronEvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4DeuteronEvaporationChannel.hh"
 
+G4DeuteronEvaporationChannel::G4DeuteronEvaporationChannel() 
+: G4EvaporationChannel(2,1,"deuteron",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4DeuteronEvaporationChannel & G4DeuteronEvaporationChannel::operator=(const G4DeuteronEvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4DeuteronEvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
+G4DeuteronEvaporationChannel::~G4DeuteronEvaporationChannel() 
+{}
 
-G4DeuteronEvaporationChannel::G4DeuteronEvaporationChannel(const G4DeuteronEvaporationChannel & ) : G4EvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4DeuteronEvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4DeuteronEvaporationChannel::operator==(const G4DeuteronEvaporationChannel & right) const 
-{
-    return (this == (G4DeuteronEvaporationChannel *) &right);
-    //  return false;
-}
-
-G4bool G4DeuteronEvaporationChannel::operator!=(const G4DeuteronEvaporationChannel & right) const 
-{
-    return (this != (G4DeuteronEvaporationChannel *) &right);
-    //  return true;
-}
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4DeuteronEvaporationProbability.cc,v 1.20 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 
@@ -38,62 +42,38 @@
 G4DeuteronEvaporationProbability::G4DeuteronEvaporationProbability() :
     G4EvaporationProbability(2,1,3,&theCoulombBarrier) // A,Z,Gamma (fixed JMQ)
-{    	}
-G4DeuteronEvaporationProbability::G4DeuteronEvaporationProbability(const G4DeuteronEvaporationProbability &) : G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4DeuteronEvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-const G4DeuteronEvaporationProbability & G4DeuteronEvaporationProbability::
-operator=(const G4DeuteronEvaporationProbability &)
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4DeuteronEvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4DeuteronEvaporationProbability::operator==(const G4DeuteronEvaporationProbability &) const
-{
-    return false;
-}
-
-
-G4bool G4DeuteronEvaporationProbability::operator!=(const G4DeuteronEvaporationProbability &) const
-{
-    return true;
-}
-
+{}
+
+G4DeuteronEvaporationProbability::~G4DeuteronEvaporationProbability()
+{}
 
 G4double G4DeuteronEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
 {
-    return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));
-}
-
+  return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());
+}
 
 G4double G4DeuteronEvaporationProbability::CalcBetaParam(const G4Fragment & ) 
 {
-    return 0.0;
-}
-
-
-G4double G4DeuteronEvaporationProbability::CCoeficient(const G4double aZ) 
-{
-    // Data comes from 
-    // Dostrovsky, Fraenkel and Friedlander
-    // Physical Review, vol 116, num. 3 1959
-    // 
-    // const G4int size = 5;
-    // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
-    // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
-    // C for deuteron is equal to C for protons divided by 2
-    G4double C = 0.0;
+  return 0.0;
+}
+
+G4double G4DeuteronEvaporationProbability::CCoeficient(G4int aZ) 
+{
+  // Data comes from 
+  // Dostrovsky, Fraenkel and Friedlander
+  // Physical Review, vol 116, num. 3 1959
+  // 
+  // const G4int size = 5;
+  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
+  // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
+  // C for deuteron is equal to C for protons divided by 2
+  G4double C = 0.0;
 	
-    if (aZ >= 70) {
-	C = 0.10;
-    } else {
-	C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
-    }
+  if (aZ >= 70) {
+    C = 0.10;
+  } else {
+    C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
+  }
 	
-    return C/2.0;
+  return C/2.0;
 	
 }
@@ -106,89 +86,85 @@
 //OPT=3,4 Kalbach's parameterization 
 // 
-G4double G4DeuteronEvaporationProbability::CrossSection(const  G4Fragment & fragment, const  G4double K)
-{
-       theA=GetA();
-       theZ=GetZ();
-       ResidualA=fragment.GetA()-theA;
-       ResidualZ=fragment.GetZ()-theZ; 
+G4double 
+G4DeuteronEvaporationProbability::CrossSection(const  G4Fragment & fragment, G4double K)
+{
+  theA=GetA();
+  theZ=GetZ();
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
+  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
+
+  if (OPTxs==0) {std::ostringstream errOs;
+  errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (deuterons)!!"  
+	<<G4endl;
+  throw G4HadronicException(__FILE__, __LINE__, errOs.str());
+  return 0.;}
+  if( OPTxs==1 || OPTxs==2) return G4DeuteronEvaporationProbability::GetOpt12( K);
+  else if (OPTxs==3 || OPTxs==4)  return G4DeuteronEvaporationProbability::GetOpt34( K);
+  else{
+    std::ostringstream errOs;
+    errOs << "BAD Deuteron CROSS SECTION OPTION AT EVAPORATION!!"  <<G4endl;
+    throw G4HadronicException(__FILE__, __LINE__, errOs.str());
+    return 0.;
+  }
+}
+
+//
+//********************* OPT=1,2 : Chatterjee's cross section ********************
+//(fitting to cross section from Bechetti & Greenles OM potential)
+
+G4double G4DeuteronEvaporationProbability::GetOpt12(G4double K)
+{
+  G4double Kc = K;
+
+  // JMQ xsec is set constat above limit of validity
+  if (K > 50*MeV) { Kc = 50*MeV; }
+
+  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
  
-       ResidualAthrd=std::pow(ResidualA,0.33333);
-       FragmentA=fragment.GetA();
-       FragmentAthrd=std::pow(FragmentA,0.33333);
-
-       if (OPTxs==0) {std::ostringstream errOs;
-         errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (deuterons)!!"  <<G4endl;
-         throw G4HadronicException(__FILE__, __LINE__, errOs.str());
-         return 0.;}
-       if( OPTxs==1 || OPTxs==2) return G4DeuteronEvaporationProbability::GetOpt12( K);
-       else if (OPTxs==3 || OPTxs==4)  return G4DeuteronEvaporationProbability::GetOpt34( K);
-       else{
-         std::ostringstream errOs;
-         errOs << "BAD Deuteron CROSS SECTION OPTION AT EVAPORATION!!"  <<G4endl;
-         throw G4HadronicException(__FILE__, __LINE__, errOs.str());
-         return 0.;
-       }
-}
-
-
-//********************* OPT=1,2 : Chatterjee's cross section ************************ 
-//(fitting to cross section from Bechetti & Greenles OM potential)
-
-G4double G4DeuteronEvaporationProbability::GetOpt12(const  G4double K)
-{
-
-  G4double Kc=K;
-
-// JMQ xsec is set constat above limit of validity
- if (K>50) Kc=50;
-
- G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
-
- 
- G4double    p0 = -38.21;
- G4double    p1 = 922.6;
- G4double    p2 = -2804.;
- G4double    landa0 = -0.0323;
- G4double    landa1 = -5.48;
- G4double    mu0 = 336.1;
- G4double    mu1 = 0.48;
- G4double    nu0 = 524.3;
- G4double    nu1 = -371.8;
- G4double    nu2 = -5.924;  
- G4double    delta=1.2;            
- 
-
- Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
- p = p0 + p1/Ec + p2/(Ec*Ec);
- landa = landa0*ResidualA + landa1;
- mu = mu0*std::pow(ResidualA,mu1);
- nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
- q = landa - nu/(Ec*Ec) - 2*p*Ec;
- r = mu + 2*nu/Ec + p*(Ec*Ec);
- 
- ji=std::max(Kc,Ec);
- if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
- else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
+  G4double    p0 = -38.21;
+  G4double    p1 = 922.6;
+  G4double    p2 = -2804.;
+  G4double    landa0 = -0.0323;
+  G4double    landa1 = -5.48;
+  G4double    mu0 = 336.1;
+  G4double    mu1 = 0.48;
+  G4double    nu0 = 524.3;
+  G4double    nu1 = -371.8;
+  G4double    nu2 = -5.924;  
+  G4double    delta=1.2;            
+
+  Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
+  p = p0 + p1/Ec + p2/(Ec*Ec);
+  landa = landa0*ResidualA + landa1;
+  G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 
+  mu = mu0*resmu1;
+  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
+  q = landa - nu/(Ec*Ec) - 2*p*Ec;
+  r = mu + 2*nu/Ec + p*(Ec*Ec);
+
+  ji=std::max(Kc,Ec);
+  if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
+  else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
                  
- if (xs <0.0) {xs=0.0;}
- 
- return xs;
-
-}
-
+  if (xs <0.0) {xs=0.0;}
+              
+  return xs;
+}
 
 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
-G4double G4DeuteronEvaporationProbability::GetOpt34(const  G4double K)
+G4double G4DeuteronEvaporationProbability::GetOpt34(G4double K)
 //     ** d from o.m. of perey and perey
 {
 
-  G4double landa, mu, nu, p , signor(1.),sig;
+  G4double landa, mu, nu, p ,signor(1.),sig;
   G4double ec,ecsq,xnulam,etest(0.),a; 
   G4double b,ecut,cut,ecut2,geom,elab;
 
-
   G4double     flow = 1.e-18;
   G4double     spill= 1.e+18;
-
 
   G4double     p0 = 0.798;
@@ -202,20 +178,19 @@
   G4double     nu1 = -474.5;
   G4double     nu2 = -3.592;      
-  
-  G4double      ra=0.80;
+ 
+  G4double     ra=0.80;
         
   //JMQ 13/02/09 increase of reduced radius to lower the barrier
-  //  ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
-   ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
-
+  // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
+  ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
   ecsq = ec * ec;
   p = p0 + p1/ec + p2/ecsq;
   landa = landa0*ResidualA + landa1;
-  a = std::pow(ResidualA,mu1);
+  a = fG4pow->powZ(ResidualA,mu1);
   mu = mu0 * a;
   nu = a* (nu0+nu1*ec+nu2*ecsq);  
   xnulam = nu / landa;
-  if (xnulam > spill) xnulam=0.;
-  if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
+  if (xnulam > spill) { xnulam=0.; }
+  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
 
   a = -2.*p*ec + landa - nu/ecsq;
@@ -223,21 +198,22 @@
   ecut = 0.;
   cut = a*a - 4.*p*b;
-  if (cut > 0.) ecut = std::sqrt(cut);
+  if (cut > 0.) { ecut = std::sqrt(cut); }
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-//JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
-//ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
-//  if (cut < 0.) ecut2 = ecut - 2.;
-  if (cut < 0.) ecut2 = ecut;
-  elab = K * FragmentA / ResidualA;
+  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
+  //ecut<0 means that there is no cut with energy axis, i.e. xs is set 
+  //to 0 bellow minimum
+  //  if (cut < 0.) ecut2 = ecut - 2.;
+  if (cut < 0.) { ecut2 = ecut; }
+  elab = K * FragmentA / G4double(ResidualA);
   sig = 0.;
 
   if (elab <= ec) { //start for E<Ec
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
   }           //end for E<Ec
   else {           //start for E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-    if (xnulam < flow || elab < etest) return sig;
+    if (xnulam < flow || elab < etest) { return sig; }
     geom = std::sqrt(theA*K);
     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
@@ -246,6 +222,4 @@
   }           //end for E>Ec
   return sig;
-  
-}
-
-//   ************************** end of cross sections ******************************* 
+}
+
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc	(revision 1347)
@@ -25,6 +25,6 @@
 //
 //
-// $Id: G4Evaporation.cc,v 1.25 2010/06/09 11:56:47 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4Evaporation.cc,v 1.26 2010/11/23 18:10:10 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
@@ -142,10 +142,10 @@
     G4int Z = theResidualNucleus->GetZ_asInt();
     G4double abun = nist->GetIsotopeAbundance(Z, A); 
-    /*
-    G4cout << "### G4Evaporation::BreakItUp step " << ia << " Z= " << Z
-	   << " A= " << A << " Eex(MeV)= " 
-	   << theResidualNucleus->GetExcitationEnergy()
-	   << " aban= " << abun << G4endl;
-    */
+    
+    // G4cout << "### G4Evaporation::BreakItUp step " << ia << " Z= " << Z
+    //	   << " A= " << A << " Eex(MeV)= " 
+    //	   << theResidualNucleus->GetExcitationEnergy()
+    //	   << " aban= " << abun << G4endl;
+   
     if(theResidualNucleus->GetExcitationEnergy() <= minExcitation && 
        (abun > 0.0)) 
@@ -184,4 +184,5 @@
     // do evaporation chain and reset total probability
     if(0.0 < totprob && probabilities[0] == totprob) {
+      //G4cout << "Start gamma evaporation" << G4endl;
       theTempResult = (*theChannels)[0]->BreakUpFragment(theResidualNucleus);
       if(theTempResult) {
@@ -228,4 +229,5 @@
     // single photon evaporation, primary pointer is kept
     if(0 == i) {
+      //G4cout << "Single gamma" << G4endl;
       G4Fragment* gamma = (*theChannels)[0]->EmittedFragment(theResidualNucleus);
       if(gamma) { theResult->push_back(gamma); }
@@ -233,4 +235,5 @@
       // fission, return results to the main loop if fission is succesful
     } else if(1 == i) {
+      //G4cout << "Fission" << G4endl;
       theTempResult = (*theChannels)[1]->BreakUp(*theResidualNucleus);
       if(theTempResult) {
@@ -248,4 +251,5 @@
       // other channels
     } else {
+      //G4cout << "Channel # " << i << G4endl;
       theTempResult = (*theChannels)[i]->BreakUp(*theResidualNucleus);
       if(theTempResult) {
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationChannel.cc	(revision 1347)
@@ -24,4 +24,6 @@
 // ********************************************************************
 //
+// $Id: G4EvaporationChannel.cc,v 1.19 2010/11/24 15:30:49 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 //J.M. Quesada (August2008). Based on:
@@ -30,18 +32,24 @@
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
-// JMQ (06 September 2008) Also external choices have been added for 
-// superimposed Coulomb barrier (if useSICB is set true, by default is false) 
-
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 06-09-2008 J.M. Quesada Also external choices have been added for superimposed 
+//                 Coulomb barrier (if useSICB is set true, by default is false) 
+// 17-11-2010 V.Ivanchenko in constructor replace G4VEmissionProbability by 
+//            G4EvaporationProbability and do not new and delete probability
+//            object at each call; use G4Pow
 
 #include "G4EvaporationChannel.hh"
 #include "G4PairingCorrection.hh"
-
-
-
-G4EvaporationChannel::G4EvaporationChannel(const G4int anA, const G4int aZ, const G4String & aName,
-					   G4VEmissionProbability * aEmissionStrategy,
-                                           G4VCoulombBarrier * aCoulombBarrier):
+#include "G4NucleiProperties.hh"
+#include "G4Pow.hh"
+#include "G4EvaporationLevelDensityParameter.hh"
+#include "Randomize.hh"
+#include "G4Alpha.hh"
+
+G4EvaporationChannel::G4EvaporationChannel(G4int anA, G4int aZ, 
+					   const G4String & aName,
+					   G4EvaporationProbability* aEmissionStrategy,
+                                           G4VCoulombBarrier* aCoulombBarrier):
     G4VEvaporationChannel(aName),
     theA(anA),
@@ -52,6 +60,24 @@
     MaximalKineticEnergy(-1000.0)
 { 
-    theLevelDensityPtr = new G4EvaporationLevelDensityParameter;
-//    MyOwnLevelDensity = true;  
+  ResidualA = 0;
+  ResidualZ = 0;
+  ResidualMass = CoulombBarrier=0.0;
+  EvaporatedMass = G4NucleiProperties::GetNuclearMass(theA, theZ);
+  theLevelDensityPtr = new G4EvaporationLevelDensityParameter;
+}
+
+G4EvaporationChannel::G4EvaporationChannel():
+    G4VEvaporationChannel(""),
+    theA(0),
+    theZ(0),
+    theEvaporationProbabilityPtr(0),
+    theCoulombBarrierPtr(0),
+    EmissionProbability(0.0),
+    MaximalKineticEnergy(-1000.0)
+{ 
+  ResidualA = 0;
+  ResidualZ = 0;
+  EvaporatedMass = ResidualMass = CoulombBarrier = 0.0;
+  theLevelDensityPtr = new G4EvaporationLevelDensityParameter;
 }
 
@@ -60,34 +86,4 @@
   delete theLevelDensityPtr;
 }
-
-G4EvaporationChannel::G4EvaporationChannel(const G4EvaporationChannel & ) : G4VEvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationChannel::copy_costructor meant to not be accessable");
-}
-
-const G4EvaporationChannel & G4EvaporationChannel::operator=(const G4EvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
-
-G4bool G4EvaporationChannel::operator==(const G4EvaporationChannel & right) const 
-{
-    return (this == (G4EvaporationChannel *) &right);
-    //  return false;
-}
-
-G4bool G4EvaporationChannel::operator!=(const G4EvaporationChannel & right) const 
-{
-    return (this != (G4EvaporationChannel *) &right);
-    //  return true;
-}
-
-//void G4EvaporationChannel::SetLevelDensityParameter(G4VLevelDensityParameter * aLevelDensity)
-//  {
-//    if (MyOwnLevelDensity) delete theLevelDensityPtr;
-//    theLevelDensityPtr = aLevelDensity;
-//    MyOwnLevelDensity = false;
-//  }
 
 void G4EvaporationChannel::Initialize(const G4Fragment & fragment)
@@ -98,9 +94,10 @@
   theEvaporationProbabilityPtr->UseSICB(useSICB);
   
-  
-  G4int FragmentA = static_cast<G4int>(fragment.GetA());
-  G4int FragmentZ = static_cast<G4int>(fragment.GetZ());
+  G4int FragmentA = fragment.GetA_asInt();
+  G4int FragmentZ = fragment.GetZ_asInt();
   ResidualA = FragmentA - theA;
   ResidualZ = FragmentZ - theZ;
+  //G4cout << "G4EvaporationChannel::Initialize Z= " << theZ << " A= " << theA 
+  //	 << " FragZ= " << FragmentZ << " FragA= " << FragmentA << G4endl;
   
   //Effective excitation energy
@@ -108,17 +105,18 @@
     G4PairingCorrection::GetInstance()->GetPairingCorrection(FragmentA,FragmentZ);
   
-  
   // Only channels which are physically allowed are taken into account 
   if (ResidualA <= 0 || ResidualZ <= 0 || ResidualA < ResidualZ ||
       (ResidualA == ResidualZ && ResidualA > 1) || ExEnergy <= 0.0) {
-    CoulombBarrier=0.0;
+    CoulombBarrier = ResidualMass = 0.0;
     MaximalKineticEnergy = -1000.0*MeV;
     EmissionProbability = 0.0;
   } else {
+    ResidualMass = G4NucleiProperties::GetNuclearMass(ResidualA, ResidualZ);
+    G4double FragmentMass = fragment.GetGroundStateMass();
     CoulombBarrier = theCoulombBarrierPtr->GetCoulombBarrier(ResidualA,ResidualZ,ExEnergy);
     // Maximal Kinetic Energy
-    MaximalKineticEnergy = CalcMaximalKineticEnergy
-      (G4ParticleTable::GetParticleTable()->
-       GetIonTable()->GetNucleusMass(FragmentZ,FragmentA)+ExEnergy);
+    MaximalKineticEnergy = CalcMaximalKineticEnergy(FragmentMass + ExEnergy);
+    //MaximalKineticEnergy = ExEnergy + fragment.GetGroundStateMass() 
+    //  - EvaporatedMass - ResidualMass;
     
     // Emission probability
@@ -131,8 +129,8 @@
       limit= CoulombBarrier;
     else limit=0.;
+    limit = std::max(limit, FragmentMass - ResidualMass - EvaporatedMass);
   
     // The threshold for charged particle emission must be  set to 0 if Coulomb 
     //cutoff  is included in the cross sections
-    //if (MaximalKineticEnergy <= 0.0) EmissionProbability = 0.0;  
     if (MaximalKineticEnergy <= limit) EmissionProbability = 0.0;
     else { 
@@ -142,4 +140,5 @@
     }
   }
+  //G4cout << "G4EvaporationChannel:: probability= " << EmissionProbability << G4endl; 
   
   return;
@@ -148,39 +147,25 @@
 G4FragmentVector * G4EvaporationChannel::BreakUp(const G4Fragment & theNucleus)
 {
-  G4double EvaporatedKineticEnergy=GetKineticEnergy(theNucleus);
-  
-  G4double EvaporatedMass = G4ParticleTable::GetParticleTable()->GetIonTable()->
-    GetIonMass(theZ,theA);
-  G4double EvaporatedEnergy = EvaporatedKineticEnergy + EvaporatedMass;
-  
+  /*
+  G4double Ecm = GetKineticEnergy(theNucleus) + ResidualMass + EvaporatedMass;
+  
+  G4double EvaporatedEnergy = 
+    ((Ecm-ResidualMass)*(Ecm+ResidualMass) + EvaporatedMass*EvaporatedMass)/(2*Ecm);
+  */
+  G4double EvaporatedEnergy = GetKineticEnergy(theNucleus) + EvaporatedMass;
+
   G4ThreeVector momentum(IsotropicVector
-                         (std::sqrt(EvaporatedKineticEnergy*
-                                    (EvaporatedKineticEnergy+2.0*EvaporatedMass))));
-  
-  momentum.rotateUz(theNucleus.GetMomentum().vect().unit());
+                         (std::sqrt((EvaporatedEnergy - EvaporatedMass)*
+                                    (EvaporatedEnergy + EvaporatedMass))));
   
   G4LorentzVector EvaporatedMomentum(momentum,EvaporatedEnergy);
-  EvaporatedMomentum.boost(theNucleus.GetMomentum().boostVector());
+  G4LorentzVector ResidualMomentum = theNucleus.GetMomentum();
+  EvaporatedMomentum.boost(ResidualMomentum.boostVector());
   
   G4Fragment * EvaporatedFragment = new G4Fragment(theA,theZ,EvaporatedMomentum);
-#ifdef PRECOMPOUND_TEST
-  EvaporatedFragment->SetCreatorModel(G4String("G4Evaporation"));
-#endif
-  // ** And now the residual nucleus ** 
-  G4double theExEnergy = theNucleus.GetExcitationEnergy();
-  G4double theMass = G4ParticleTable::GetParticleTable()->GetIonTable()->
-    GetNucleusMass(static_cast<G4int>(theNucleus.GetZ()),
-                   static_cast<G4int>(theNucleus.GetA()));
-  G4double ResidualEnergy = theMass + 
-    (theExEnergy - EvaporatedKineticEnergy) - EvaporatedMass;
-  
-  G4LorentzVector ResidualMomentum(-momentum,ResidualEnergy);
-  ResidualMomentum.boost(theNucleus.GetMomentum().boostVector());
-  
-  G4Fragment * ResidualFragment = new G4Fragment(ResidualA, ResidualZ, ResidualMomentum );
-  
-#ifdef PRECOMPOUND_TEST
-  ResidualFragment->SetCreatorModel(G4String("ResidualNucleus"));
-#endif
+  ResidualMomentum -= EvaporatedMomentum;
+
+  G4Fragment * ResidualFragment = new G4Fragment(ResidualA, ResidualZ, ResidualMomentum);
+ 
   G4FragmentVector * theResult = new G4FragmentVector;
   
@@ -211,14 +196,10 @@
 /////////////////////////////////////////
 // Calculates the maximal kinetic energy that can be carried by fragment.
-G4double G4EvaporationChannel::CalcMaximalKineticEnergy(const G4double NucleusTotalE)
-{
-  G4double ResidualMass = G4ParticleTable::GetParticleTable()->
-    GetIonTable()->GetNucleusMass( ResidualZ, ResidualA );
-  G4double EvaporatedMass = G4ParticleTable::GetParticleTable()->
-    GetIonTable()->GetNucleusMass( theZ, theA );
-
+G4double G4EvaporationChannel::CalcMaximalKineticEnergy(G4double NucleusTotalE)
+{
   // This is the "true" assimptotic kinetic energy (from energy conservation)	
-  G4double Tmax = (NucleusTotalE*NucleusTotalE + EvaporatedMass*EvaporatedMass - 		
-                   ResidualMass*ResidualMass)/(2.0*NucleusTotalE) - EvaporatedMass;
+  G4double Tmax = 
+    ((NucleusTotalE-ResidualMass)*(NucleusTotalE+ResidualMass) + EvaporatedMass*EvaporatedMass)
+    /(2.0*NucleusTotalE) - EvaporatedMass;
   
   //JMQ (13-09-08) bug fixed: in the original version the Tmax is calculated
@@ -245,8 +226,8 @@
     
     
-    if (MaximalKineticEnergy < 0.0)   
+    if (MaximalKineticEnergy < 0.0) {
       throw G4HadronicException(__FILE__, __LINE__, 
                                 "G4EvaporationChannel::CalcKineticEnergy: maximal kinetic at the Coulomb barrier is less than 0");
-    
+    }
     G4double Rb = 4.0*theLevelDensityPtr->
       LevelDensityParameter(ResidualA+theA,ResidualZ+theZ,MaximalKineticEnergy)*
@@ -263,6 +244,6 @@
       G4double Q2 = 1.0;
       if (theZ == 0) { // for emitted neutron
-        G4double Beta = (2.12/std::pow(G4double(ResidualA),2./3.) - 0.05)*MeV/
-          (0.76 + 2.2/std::pow(G4double(ResidualA),1./3.));
+        G4double Beta = (2.12/G4Pow::GetInstance()->Z23(ResidualA) - 0.05)*MeV/
+          (0.76 + 2.2/G4Pow::GetInstance()->Z13(ResidualA));
         Q1 = 1.0 + Beta/(MaximalKineticEnergy);
         Q2 = Q1*std::sqrt(Q1);
@@ -277,16 +258,18 @@
   } else if (OPTxs==1 || OPTxs==2 || OPTxs==3 || OPTxs==4) {
     
-    G4double V;
-    if(useSICB) V= CoulombBarrier;
-    else V=0.;
-    //If Coulomb barrier is just included  in the cross sections
-    // 	G4double V=0.;
+    // Coulomb barrier is just included  in the cross sections
+    G4double V = 0;
+    if(useSICB) { V= CoulombBarrier; }
+
+    V = std::max(V, aFragment.GetGroundStateMass()-EvaporatedMass-ResidualMass);
 
     G4double Tmax=MaximalKineticEnergy;
     G4double T(0.0);
     G4double NormalizedProbability(1.0);
-    
+
+    // VI: This is very ineffective - create new objects at each call to the method    
+    /*
     // A pointer is created in order to access the distribution function.
-    G4EvaporationProbability * G4EPtemp;
+    G4EvaporationProbability * G4EPtemp = 0;
     
     if (theA==1 && theZ==0) G4EPtemp=new G4NeutronEvaporationProbability();
@@ -305,15 +288,18 @@
       G4EPtemp->SetOPTxs(OPTxs);
       G4EPtemp->UseSICB(useSICB);
-
+    */
+
+    // use local pointer and not create a new one
     do
       {  
         T=V+G4UniformRand()*(Tmax-V);
-        NormalizedProbability=G4EPtemp->ProbabilityDistributionFunction(aFragment,T)/
-          (this->GetEmissionProbability());
+        NormalizedProbability = 
+	  theEvaporationProbabilityPtr->ProbabilityDistributionFunction(aFragment,T)/
+          GetEmissionProbability();
         
       }
     while (G4UniformRand() > NormalizedProbability);
-   delete G4EPtemp;
-   return T;
+    //   delete G4EPtemp;
+    return T;
   } else{
     std::ostringstream errOs;
@@ -323,16 +309,16 @@
 }
 
-G4ThreeVector G4EvaporationChannel::IsotropicVector(const G4double Magnitude)
+G4ThreeVector G4EvaporationChannel::IsotropicVector(G4double Magnitude)
     // Samples a isotropic random vectorwith a magnitud given by Magnitude.
     // By default Magnitude = 1.0
 {
-    G4double CosTheta = 1.0 - 2.0*G4UniformRand();
-    G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta);
-    G4double Phi = twopi*G4UniformRand();
-    G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta,
-			 Magnitude*std::sin(Phi)*SinTheta,
-			 Magnitude*CosTheta);
-    return Vector;
-            }
+  G4double CosTheta = 1.0 - 2.0*G4UniformRand();
+  G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta);
+  G4double Phi = twopi*G4UniformRand();
+  G4ThreeVector Vector(Magnitude*std::cos(Phi)*SinTheta,
+		       Magnitude*std::sin(Phi)*SinTheta,
+		       Magnitude*CosTheta);
+  return Vector;
+}
 
 
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationDefaultGEMFactory.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationDefaultGEMFactory.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationDefaultGEMFactory.cc	(revision 1347)
@@ -26,5 +26,5 @@
 //
 // $Id: G4EvaporationDefaultGEMFactory.cc,v 1.2 2010/04/27 11:43:16 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationFactory.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationFactory.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationFactory.cc	(revision 1347)
@@ -26,5 +26,5 @@
 //
 // $Id: G4EvaporationFactory.cc,v 1.5 2010/04/27 11:43:16 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc	(revision 1347)
@@ -44,67 +44,59 @@
 #include "G4IonTable.hh"
 
-
-G4EvaporationProbability::G4EvaporationProbability(const G4EvaporationProbability &) : G4VEmissionProbability()
+G4EvaporationProbability::G4EvaporationProbability(G4int anA, G4int aZ, 
+						   G4double aGamma,
+						   G4VCoulombBarrier * aCoulombBarrier) 
+  : theA(anA),
+    theZ(aZ),
+    Gamma(aGamma),
+    theCoulombBarrierptr(aCoulombBarrier) 
+{}
+
+G4EvaporationProbability::G4EvaporationProbability()
+  : theA(0),
+    theZ(0),
+    Gamma(0.0),
+    theCoulombBarrierptr(0) 
+{}
+
+G4EvaporationProbability::~G4EvaporationProbability() 
+{}
+  
+G4double 
+G4EvaporationProbability::EmissionProbability(const G4Fragment & fragment, G4double anEnergy)
 {
-    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-
-
-const G4EvaporationProbability & G4EvaporationProbability::
-operator=(const G4EvaporationProbability &)
+  G4double EmissionProbability = 0.0;
+  G4double MaximalKineticEnergy = anEnergy;
+
+  if (MaximalKineticEnergy > 0.0 && fragment.GetExcitationEnergy() > 0.0) {
+    EmissionProbability = CalculateProbability(fragment, MaximalKineticEnergy);
+
+  }
+  return EmissionProbability;
+}
+
+////////////////////////////////////
+
+// Computes the integrated probability of evaporation channel
+G4double 
+G4EvaporationProbability::CalculateProbability(const G4Fragment & fragment, 
+					       G4double MaximalKineticEnergy)
 {
-    throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4EvaporationProbability::operator==(const G4EvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4EvaporationProbability::operator!=(const G4EvaporationProbability &) const
-{
-    return true;
-}
-  
-G4double G4EvaporationProbability::EmissionProbability(const G4Fragment & fragment, const G4double anEnergy)
-{
-    G4double EmissionProbability = 0.0;
-    G4double MaximalKineticEnergy = anEnergy;
-
-    if (MaximalKineticEnergy > 0.0 && fragment.GetExcitationEnergy() > 0.0) {
-	EmissionProbability = CalculateProbability(fragment, MaximalKineticEnergy);
-
-    }
-    return EmissionProbability;
-}
-
-////////////////////////////////////
-
-// Computes the integrated probability of evaporation channel
-G4double G4EvaporationProbability::CalculateProbability(const G4Fragment & fragment, const G4double MaximalKineticEnergy)
-{
-    G4double ResidualA = fragment.GetA() - theA;
-    G4double ResidualZ = fragment.GetZ() - theZ;
-    G4double U = fragment.GetExcitationEnergy();
+  G4int ResidualA = fragment.GetA_asInt() - theA;
+  G4int ResidualZ = fragment.GetZ_asInt() - theZ;
+  G4double U = fragment.GetExcitationEnergy();
    
- if (OPTxs==0) {
-
-	
-    G4double NuclearMass = G4ParticleTable::GetParticleTable()->GetIonTable()->GetNucleusMass(theZ,theA);
-
-
-    G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection(static_cast<G4int>(fragment.GetA()),
-									       static_cast<G4int>(fragment.GetZ()));
-
-    G4double SystemEntropy = 2.0*std::sqrt(theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(fragment.GetA()),
-									   static_cast<G4int>(fragment.GetZ()),U)*
-				      (U-delta0));
+  if (OPTxs==0) {
+
+    G4double NuclearMass = fragment.ComputeGroundStateMass(theZ,theA);
+
+    G4double delta0 = fPairCorr->GetPairingCorrection(fragment.GetA_asInt(),
+						      fragment.GetZ_asInt());
+
+    G4double SystemEntropy = 2.0*std::sqrt(
+      theEvapLDPptr->LevelDensityParameter(fragment.GetA_asInt(),fragment.GetZ_asInt(),U)*
+      (U-delta0));
 								  
-
-    G4double RN = 1.5*fermi;
+    const G4double RN = 1.5*fermi;
 
     G4double Alpha = CalcAlphaParam(fragment);
@@ -112,18 +104,16 @@
 	
     G4double Rmax = MaximalKineticEnergy;
-    G4double a = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(ResidualA),
-						      static_cast<G4int>(ResidualZ),
-						      Rmax);
-    G4double GlobalFactor = static_cast<G4double>(Gamma) * (Alpha/(a*a)) *
-	(NuclearMass*RN*RN*std::pow(ResidualA,2./3.))/
-	(2.*pi* hbar_Planck*hbar_Planck);
+    G4double a = theEvapLDPptr->LevelDensityParameter(ResidualA,ResidualZ,Rmax);
+    G4double GlobalFactor = Gamma * Alpha/(a*a) *
+	(NuclearMass*RN*RN*fG4pow->Z23(ResidualA))/
+	(twopi* hbar_Planck*hbar_Planck);
     G4double Term1 = (2.0*Beta*a-3.0)/2.0 + Rmax*a;
     G4double Term2 = (2.0*Beta*a-3.0)*std::sqrt(Rmax*a) + 2.0*a*Rmax;
 	
     G4double ExpTerm1 = 0.0;
-    if (SystemEntropy <= 600.0) ExpTerm1 = std::exp(-SystemEntropy);
+    if (SystemEntropy <= 600.0) { ExpTerm1 = std::exp(-SystemEntropy); }
 	
     G4double ExpTerm2 = 2.*std::sqrt(a*Rmax) - SystemEntropy;
-    if (ExpTerm2 > 700.0) ExpTerm2 = 700.0;
+    if (ExpTerm2 > 700.0) { ExpTerm2 = 700.0; }
     ExpTerm2 = std::exp(ExpTerm2);
 	
@@ -134,23 +124,25 @@
  } else if (OPTxs==1 || OPTxs==2 ||OPTxs==3 || OPTxs==4) {
 
-   G4double limit;
-   if (useSICB) limit=theCoulombBarrierptr->GetCoulombBarrier(G4lrint(ResidualA),G4lrint(ResidualZ),U);
-   else limit=0.;
-
-   if (MaximalKineticEnergy <= limit)  return 0.0;
-
-
-   // if Coulomb barrier cutoff is superimposed for all cross sections the limit is the Coulomb Barrier
+   G4double EvaporatedMass = fragment.ComputeGroundStateMass(theZ,theA);
+   G4double ResidulalMass = fragment.ComputeGroundStateMass(ResidualZ,ResidualA);
+   G4double limit = std::max(0.0,fragment.GetGroundStateMass()-EvaporatedMass-ResidulalMass);
+   if (useSICB) {
+     limit = std::max(limit,theCoulombBarrierptr->GetCoulombBarrier(ResidualA,ResidualZ,U));
+   }
+
+   if (MaximalKineticEnergy <= limit) { return 0.0; }
+
+   // if Coulomb barrier cutoff is superimposed for all cross sections 
+   // then the limit is the Coulomb Barrier
    G4double LowerLimit= limit;
 
-   //  MaximalKineticEnergy: asimptotic value (already accounted for in G4EvaporationChannel)     
+   //MaximalKineticEnergy: asimptotic value (already accounted for in G4EvaporationChannel)     
 
    G4double UpperLimit = MaximalKineticEnergy;
 
-
    G4double Width = IntegrateEmissionProbability(fragment,LowerLimit,UpperLimit);
 
    return Width;
- } else{
+ } else {
    std::ostringstream errOs;
    errOs << "Bad option for cross sections at evaporation"  <<G4endl;
@@ -163,7 +155,7 @@
 
 G4double G4EvaporationProbability::
-IntegrateEmissionProbability(const G4Fragment & fragment, const G4double & Low, const G4double & Up )
+IntegrateEmissionProbability(const G4Fragment & fragment, 
+			     const G4double & Low, const G4double & Up )
 {
-
   static const G4int N = 10;
   // 10-Points Gauss-Legendre abcisas and weights
@@ -212,43 +204,46 @@
 //New method (OPT=1,2,3,4)
 
-G4double G4EvaporationProbability::ProbabilityDistributionFunction( const G4Fragment & fragment, const G4double K)
+G4double 
+G4EvaporationProbability::ProbabilityDistributionFunction( const G4Fragment & fragment, 
+							   G4double K)
 { 
-
+  G4int ResidualA = fragment.GetA_asInt() - theA;
+  G4int ResidualZ = fragment.GetZ_asInt() - theZ;  
+  G4double U = fragment.GetExcitationEnergy();
+  //G4cout << "### G4EvaporationProbability::ProbabilityDistributionFunction" << G4endl;
+  //G4cout << "FragZ= " << fragment.GetZ_asInt() << " FragA= " << fragment.GetA_asInt()
+  //	 << " Z= " << theZ << "  A= " << theA << G4endl;
+  //G4cout << "PC " << fPairCorr << "   DP " << theEvapLDPptr << G4endl;
+
+  // if(K <= theCoulombBarrierptr->GetCoulombBarrier(ResidualA,ResidualZ,U)) return 0.0;
+
+  G4double delta1 = fPairCorr->GetPairingCorrection(ResidualA,ResidualZ);
  
-
-
-  G4double ResidualA = fragment.GetA() - theA;
-  G4double ResidualZ = fragment.GetZ() - theZ;  
-  G4double U = fragment.GetExcitationEnergy();
-
-  //        if(K <= theCoulombBarrierptr->GetCoulombBarrier(G4lrint(ResidualA),G4lrint(ResidualZ),U)) return 0.0;   
-
-  G4double delta1 = G4PairingCorrection::GetInstance()->GetPairingCorrection(static_cast<G4int>(ResidualA),static_cast<G4int>(ResidualZ));
-
- 
-  G4double delta0 = G4PairingCorrection::GetInstance()->GetPairingCorrection(static_cast<G4int>(fragment.GetA()),static_cast<G4int>(fragment.GetZ()));
-
-  
-  G4double ParticleMass = G4ParticleTable::GetParticleTable()->GetIonTable()->GetNucleusMass(theZ,theA);
-
-  G4double theSeparationEnergy= G4NucleiProperties::GetMassExcess(static_cast<G4int>(theA),static_cast<G4int>(theZ)) +
-    G4NucleiProperties::GetMassExcess(static_cast<G4int>(ResidualA),static_cast<G4int>(ResidualZ)) -
-    G4NucleiProperties::GetMassExcess(static_cast<G4int>(fragment.GetA()),static_cast<G4int>(fragment.GetZ()));
-
-  G4double a0 = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(fragment.GetA()),static_cast<G4int>(fragment.GetZ()),U - delta0);
-
-  G4double a1 = theEvapLDPptr->LevelDensityParameter(static_cast<G4int>(ResidualA),static_cast<G4int>(ResidualZ),U - theSeparationEnergy - delta1);
-  
-  
-  G4double E0=U-delta0;
-
-  G4double E1=U-theSeparationEnergy-delta1-K;
-
-  if (E1<0.) return 0.;
+  G4double delta0 = fPairCorr->GetPairingCorrection(fragment.GetA_asInt(),
+						    fragment.GetZ_asInt());
+
+  
+  G4double ParticleMass = fragment.ComputeGroundStateMass(theZ,theA);
+  G4double ResidualMass = fragment.ComputeGroundStateMass(ResidualZ,ResidualA);
+
+  G4double theSeparationEnergy = ParticleMass + ResidualMass 
+    - fragment.GetGroundStateMass();
+
+  G4double a0 = theEvapLDPptr->LevelDensityParameter(fragment.GetA_asInt(),
+						     fragment.GetZ_asInt(),
+						     U - delta0);
+
+  G4double a1 = theEvapLDPptr->LevelDensityParameter(ResidualA, ResidualZ,
+						     U - theSeparationEnergy - delta1);
+  
+  
+  G4double E0 = U - delta0;
+
+  G4double E1 = U - theSeparationEnergy - delta1 - K;
+
+  if (E1<0.) { return 0.; }
 
   //JMQ 14/02/09 BUG fixed: hbarc should be in the denominator instead of hbar_Planck 
   //Without 1/hbar_Panck remains as a width
-  //  G4double  Prob=Gamma*ParticleMass/((pi*hbar_Planck)*(pi*hbar_Planck)*
-  //std::exp(2*std::sqrt(a0*E0)))*K*CrossSection(fragment,K)*std::exp(2*std::sqrt(a1*E1))*millibarn;
 
   G4double Prob=Gamma*ParticleMass/((pi*hbarc)*(pi*hbarc)*std::exp(2*std::sqrt(a0*E0)))
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationChannel.cc	(revision 1347)
@@ -25,35 +25,19 @@
 //
 //
-// $Id: G4He3EvaporationChannel.cc,v 1.4 2006/06/29 20:10:33 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4He3EvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4He3EvaporationChannel.hh"
 
+G4He3EvaporationChannel::G4He3EvaporationChannel() 
+: G4EvaporationChannel(3,2,"He3",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4He3EvaporationChannel & G4He3EvaporationChannel::operator=(const G4He3EvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
+G4He3EvaporationChannel::~G4He3EvaporationChannel() 
+{}
 
-G4He3EvaporationChannel::G4He3EvaporationChannel(const G4He3EvaporationChannel & ) : G4EvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4He3EvaporationChannel::operator==(const G4He3EvaporationChannel & right) const 
-{
-    return (this == (G4He3EvaporationChannel *) &right);
-    //  return false;
-}
-
-G4bool G4He3EvaporationChannel::operator!=(const G4He3EvaporationChannel & right) const 
-{
-    return (this != (G4He3EvaporationChannel *) &right);
-    //  return true;
-}
-
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4He3EvaporationProbability.cc,v 1.18 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 #include "G4He3EvaporationProbability.hh"
@@ -36,64 +40,45 @@
 G4He3EvaporationProbability::G4He3EvaporationProbability() :
    G4EvaporationProbability(3,2,2,&theCoulombBarrier) // A,Z,Gamma,&theCoulombBarrier
-{
-
-}
-
-G4He3EvaporationProbability::G4He3EvaporationProbability(const G4He3EvaporationProbability &) : G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-
-
-const G4He3EvaporationProbability & G4He3EvaporationProbability::
-operator=(const G4He3EvaporationProbability &)
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4He3EvaporationProbability::operator==(const G4He3EvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4He3EvaporationProbability::operator!=(const G4He3EvaporationProbability &) const
-{
-    return true;
-}
-
-  G4double G4He3EvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)  
-  { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
+{}
+
+G4He3EvaporationProbability::~G4He3EvaporationProbability() 
+{}
+
+G4double G4He3EvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)  
+  { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());}
 	
-  G4double G4He3EvaporationProbability::CalcBetaParam(const G4Fragment & )  
+G4double G4He3EvaporationProbability::CalcBetaParam(const G4Fragment & )  
   { return 0.0; }
 
 
-G4double G4He3EvaporationProbability::CCoeficient(const G4double aZ) 
-{
-    // Data comes from 
-    // Dostrovsky, Fraenkel and Friedlander
-    // Physical Review, vol 116, num. 3 1959
-    // 
-    // const G4int size = 5;
-    // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
-    //	G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
-    // C for He3 is equal to C for alpha times 4/3
-    G4double C = 0.0;
+G4double G4He3EvaporationProbability::CCoeficient(G4int aZ) 
+{
+  // Data comes from 
+  // Dostrovsky, Fraenkel and Friedlander
+  // Physical Review, vol 116, num. 3 1959
+  // 
+  // const G4int size = 5;
+  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
+  //	G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
+  // C for He3 is equal to C for alpha times 4/3
+  G4double C = 0.0;
 	
-	
-    if (aZ <= 30) {
-	C = 0.10;
-    } else if (aZ <= 50) {
-	C = 0.1 + -((aZ-50.)/20.)*0.02;
-    } else if (aZ < 70) {
-	C = 0.08 + -((aZ-70.)/20.)*0.02;
-    } else {
-	C = 0.06;
-    }
-    return C*(4.0/3.0);
+  if (aZ <= 30)
+    {
+      C = 0.10;
+    }
+  else if (aZ <= 50)
+    {
+      C = 0.1 - (aZ - 30)*0.001;
+    }
+  else if (aZ < 70)
+    {
+      C = 0.08 - (aZ - 50)*0.001;
+    }
+  else
+    {
+      C = 0.06;
+    }
+  return C*(4.0/3.0);
 }
 
@@ -104,71 +89,73 @@
 //OPT=3,4 Kalbach's parameterization 
 // 
-G4double G4He3EvaporationProbability::CrossSection(const  G4Fragment & fragment, const  G4double K)
-{
-       theA=GetA();
-       theZ=GetZ();
-       ResidualA=fragment.GetA()-theA;
-       ResidualZ=fragment.GetZ()-theZ; 
- 
-       ResidualAthrd=std::pow(ResidualA,0.33333);
-       FragmentA=fragment.GetA();
-       FragmentAthrd=std::pow(FragmentA,0.33333);
-
-
-       if (OPTxs==0) {std::ostringstream errOs;
-         errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (He3's)!!"  
-	       <<G4endl;
-         throw G4HadronicException(__FILE__, __LINE__, errOs.str());
-         return 0.;}
-       if( OPTxs==1 || OPTxs==2) return G4He3EvaporationProbability::GetOpt12( K);
-       else if (OPTxs==3 || OPTxs==4)  return G4He3EvaporationProbability::GetOpt34( K);
-       else{
-         std::ostringstream errOs;
-         errOs << "BAD He3's CROSS SECTION OPTION AT EVAPORATION!!"  <<G4endl;
-         throw G4HadronicException(__FILE__, __LINE__, errOs.str());
-         return 0.;
-       }
-}
-//
-//********************* OPT=1,2 : Chatterjee's cross section ************************ 
+G4double 
+G4He3EvaporationProbability::CrossSection(const  G4Fragment & fragment, G4double K)
+{
+
+  theA=GetA();
+  theZ=GetZ();
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
+  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
+
+  if (OPTxs==0) {std::ostringstream errOs;
+  errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (He3's)!!"  
+	<<G4endl;
+  throw G4HadronicException(__FILE__, __LINE__, errOs.str());
+  return 0.;}
+  if( OPTxs==1 || OPTxs==2) return G4He3EvaporationProbability::GetOpt12( K);
+  else if (OPTxs==3 || OPTxs==4)  return G4He3EvaporationProbability::GetOpt34( K);
+  else{
+    std::ostringstream errOs;
+    errOs << "BAD He3's CROSS SECTION OPTION AT EVAPORATION!!"  <<G4endl;
+    throw G4HadronicException(__FILE__, __LINE__, errOs.str());
+    return 0.;
+  }
+}
+
+//********************* OPT=1,2 : Chatterjee's cross section *****************
 //(fitting to cross section from Bechetti & Greenles OM potential)
 
 G4double G4He3EvaporationProbability::GetOpt12(const  G4double K)
 {
-
-G4double Kc=K;
-
-// JMQ xsec is set constat above limit of validity
- if (K>50) Kc=50;
-
- G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
-
- G4double     p0 = -3.06;
- G4double     p1 = 278.5;
- G4double     p2 = -1389.;
- G4double     landa0 = -0.00535;
- G4double     landa1 = -11.16;
- G4double     mu0 = 555.5;
- G4double     mu1 = 0.40;
- G4double     nu0 = 687.4;
- G4double     nu1 = -476.3;
- G4double     nu2 = 0.509;    
- G4double     delta=1.2;              
-
-      Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
-      p = p0 + p1/Ec + p2/(Ec*Ec);
-      landa = landa0*ResidualA + landa1;
-      mu = mu0*std::pow(ResidualA,mu1);
-      nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
-      q = landa - nu/(Ec*Ec) - 2*p*Ec;
-      r = mu + 2*nu/Ec + p*(Ec*Ec);
-
-   ji=std::max(Kc,Ec);
-   if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
-   else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
-   
-   if (xs <0.0) {xs=0.0;}
+  G4double Kc = K;
+
+  // JMQ xsec is set constat above limit of validity
+  if (K > 50*MeV) { Kc = 50*MeV; }
+
+  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
+
+  G4double     p0 = -3.06;
+  G4double     p1 = 278.5;
+  G4double     p2 = -1389.;
+  G4double     landa0 = -0.00535;
+  G4double     landa1 = -11.16;
+  G4double     mu0 = 555.5;
+  G4double     mu1 = 0.40;
+  G4double     nu0 = 687.4;
+  G4double     nu1 = -476.3;
+  G4double     nu2 = 0.509;    
+  G4double     delta=1.2;              
+
+  Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
+  p = p0 + p1/Ec + p2/(Ec*Ec);
+  landa = landa0*ResidualA + landa1;
+
+  G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 
+  mu = mu0*resmu1;
+  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
+  q = landa - nu/(Ec*Ec) - 2*p*Ec;
+  r = mu + 2*nu/Ec + p*(Ec*Ec);
+  
+  ji=std::max(Kc,Ec);
+  if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
+  else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
+  
+  if (xs <0.0) {xs=0.0;}
               
-   return xs;
+  return xs;
 
 }
@@ -178,13 +165,10 @@
 //c     ** 3he from o.m. of gibson et al
 {
-  
   G4double landa, mu, nu, p , signor(1.),sig;
   G4double ec,ecsq,xnulam,etest(0.),a; 
   G4double b,ecut,cut,ecut2,geom,elab;
-  
-  
+
   G4double     flow = 1.e-18;
   G4double     spill= 1.e+18;
-
 
   G4double     p0 = -2.88;
@@ -200,5 +184,5 @@
   
   G4double      ra=0.80;
-  
+        
   //JMQ 13/02/09 increase of reduced radius to lower the barrier
   // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
@@ -207,10 +191,10 @@
   p = p0 + p1/ec + p2/ecsq;
   landa = landa0*ResidualA + landa1;
-  a = std::pow(ResidualA,mu1);
+  a = fG4pow->powZ(ResidualA,mu1);
   mu = mu0 * a;
   nu = a* (nu0+nu1*ec+nu2*ecsq);  
   xnulam = nu / landa;
-  if (xnulam > spill) xnulam=0.;
-  if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
+  if (xnulam > spill) { xnulam=0.; }
+  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
   
   a = -2.*p*ec + landa - nu/ecsq;
@@ -221,18 +205,19 @@
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-//JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
-//ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
-//  if (cut < 0.) ecut2 = ecut - 2.;
-  if (cut < 0.) ecut2 = ecut;
-  elab = K * FragmentA / ResidualA;
+  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
+  // ecut<0 means that there is no cut with energy axis, i.e. xs is set
+  // to 0 bellow minimum
+  //  if (cut < 0.) ecut2 = ecut - 2.;
+  if (cut < 0.) { ecut2 = ecut; }
+  elab = K * FragmentA /G4double(ResidualA);
   sig = 0.;
-
+  
   if (elab <= ec) { //start for E<Ec
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
   }           //end for E<Ec
   else {           //start for E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-    if (xnulam < flow || elab < etest) return sig;
+    if (xnulam < flow || elab < etest) { return sig; }
     geom = std::sqrt(theA*K);
     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
@@ -243,5 +228,2 @@
   
 }
-
-//   ************************** end of cross sections ******************************* 
-
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationChannel.cc	(revision 1347)
@@ -25,35 +25,18 @@
 //
 //
-// $Id: G4NeutronEvaporationChannel.cc,v 1.4 2006/06/29 20:10:37 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4NeutronEvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4NeutronEvaporationChannel.hh"
 
+G4NeutronEvaporationChannel::G4NeutronEvaporationChannel() 
+: G4EvaporationChannel(1,0,"neutron",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4NeutronEvaporationChannel & G4NeutronEvaporationChannel::operator=(const G4NeutronEvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4NeutronEvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
-
-G4NeutronEvaporationChannel::G4NeutronEvaporationChannel(const G4NeutronEvaporationChannel & ) : G4EvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4NeutronEvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4NeutronEvaporationChannel::operator==(const G4NeutronEvaporationChannel & right) const 
-{
-    return (this == (G4NeutronEvaporationChannel *) &right);
-    //  return false;
-}
-
-G4bool G4NeutronEvaporationChannel::operator!=(const G4NeutronEvaporationChannel & right) const 
-{
-    return (this != (G4NeutronEvaporationChannel *) &right);
-    //  return true;
-}
-
+G4NeutronEvaporationChannel::~G4NeutronEvaporationChannel() 
+{}
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4NeutronEvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4NeutronEvaporationProbability.cc,v 1.16 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 #include "G4NeutronEvaporationProbability.hh"
@@ -36,43 +40,19 @@
 G4NeutronEvaporationProbability::G4NeutronEvaporationProbability() :
     G4EvaporationProbability(1,0,2,&theCoulombBarrier) // A,Z,Gamma,&theCoulombBarrier
-{
-  
-}
-
-
-G4NeutronEvaporationProbability::G4NeutronEvaporationProbability(const G4NeutronEvaporationProbability &) : G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4NeutronEvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-
-
-const G4NeutronEvaporationProbability & G4NeutronEvaporationProbability::
-operator=(const G4NeutronEvaporationProbability &)
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4NeutronEvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4NeutronEvaporationProbability::operator==(const G4NeutronEvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4NeutronEvaporationProbability::operator!=(const G4NeutronEvaporationProbability &) const
-{
-    return true;
-}
-
- G4double G4NeutronEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
-  { return 0.76+2.2/std::pow(static_cast<G4double>(fragment.GetA()-GetA()),1.0/3.0);}
-
+{}
+
+G4NeutronEvaporationProbability::~G4NeutronEvaporationProbability()
+{}
+
+G4double G4NeutronEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
+{ 
+  return 0.76+2.2/fG4pow->Z13(fragment.GetA_asInt()-GetA());
+}
 	
-  G4double G4NeutronEvaporationProbability::CalcBetaParam(const G4Fragment &  fragment) 
-  { return (2.12/std::pow(static_cast<G4double>(fragment.GetA()-GetA()),2.0/3.0) - 0.05)*MeV/
-      CalcAlphaParam(fragment); }
-
+G4double G4NeutronEvaporationProbability::CalcBetaParam(const G4Fragment &  fragment) 
+{ 
+  return (2.12/fG4pow->Z23(fragment.GetA_asInt()-GetA()) - 0.05)*MeV/
+    CalcAlphaParam(fragment); 
+}
 
 ////////////////////////////////////////////////////////////////////////////////////
@@ -82,15 +62,15 @@
 //OPT=3,4 Kalbach's parameterization 
 // 
- G4double G4NeutronEvaporationProbability::CrossSection(const  G4Fragment & fragment, const  G4double K)
+G4double 
+G4NeutronEvaporationProbability::CrossSection(const  G4Fragment & fragment, G4double K)
 { 
   theA=GetA();
   theZ=GetZ();
-  ResidualA=fragment.GetA()-theA;
-  ResidualZ=fragment.GetZ()-theZ; 
- 
-  ResidualAthrd=std::pow(ResidualA,0.33333);
-  FragmentA=fragment.GetA();
-  FragmentAthrd=std::pow(FragmentA,0.33333);
-
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
+  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
 
   if (OPTxs==0) {std::ostringstream errOs;
@@ -107,20 +87,16 @@
   }
 }
-
-
-
-
-
-
-//********************* OPT=1,2 : Chatterjee's cross section ************************ 
+ 
+//********************* OPT=1,2 : Chatterjee's cross section ***************
 //(fitting to cross section from Bechetti & Greenles OM potential)
 
-G4double G4NeutronEvaporationProbability::GetOpt12(const  G4double K)
+G4double G4NeutronEvaporationProbability::GetOpt12(G4double K)
 {
-
   G4double Kc=K;
 
-// JMQ  xsec is set constat above limit of validity
-  if (K>50) Kc=50;
+  // Pramana (Bechetti & Greenles) for neutrons is chosen 
+
+  // JMQ  xsec is set constat above limit of validity
+  if (K > 50*MeV) { Kc = 50*MeV; }
 
   G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2,xs;
@@ -143,13 +119,11 @@
     errOs <<"  xsec("<<Kc<<" MeV) ="<<xs <<G4endl;
     throw G4HadronicException(__FILE__, __LINE__, errOs.str());
-  }
+              }
   return xs;
 }
 
-
 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
-G4double G4NeutronEvaporationProbability::GetOpt34(const  G4double K)
+G4double G4NeutronEvaporationProbability::GetOpt34(G4double K)
 {
-
   G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2;
   G4double p, p0, p1, p2;
@@ -157,5 +131,5 @@
   G4double b,ecut,cut,ecut2,geom,elab;
 
-//safety initialization
+  //safety initialization
   landa0=0;
   landa1=0;
@@ -169,12 +143,8 @@
   p2=0.;
 
-
   flow = 1.e-18;
   spill= 1.0e+18; 
 
-  
-
-// PRECO xs for neutrons is choosen
-
+  // PRECO xs for neutrons is choosen
   p0 = -312.;
   p1= 0.;
@@ -188,6 +158,6 @@
   nu2 = 1280.8; 
 
-  if (ResidualA < 40.) signor=0.7+ResidualA*0.0075;
-  if (ResidualA > 210.) signor = 1. + (ResidualA-210.)/250.;
+  if (ResidualA < 40)  { signor =0.7 + ResidualA*0.0075; }
+  if (ResidualA > 210) { signor = 1. + (ResidualA-210)/250.; }
   landa = landa0/ResidualAthrd + landa1;
   mu = mu0*ResidualAthrd + mu1*ResidualAthrd*ResidualAthrd;
@@ -195,5 +165,5 @@
 
   // JMQ very low energy behaviour corrected (problem  for A (apprx.)>60)
-  if (nu < 0.)nu=-nu;
+  if (nu < 0.) { nu=-nu; }
 
   ec = 0.5;
@@ -202,9 +172,7 @@
   xnulam = 1.;
   etest = 32.;
-//          ** etest is the energy above which the rxn cross section is
-//          ** compared with the geometrical limit and the max taken.
-//          ** xnulam here is a dummy value to be used later.
-
-
+  //          ** etest is the energy above which the rxn cross section is
+  //          ** compared with the geometrical limit and the max taken.
+  //          ** xnulam here is a dummy value to be used later.
 
   a = -2.*p*ec + landa - nu/ecsq;
@@ -212,24 +180,24 @@
   ecut = 0.;
   cut = a*a - 4.*p*b;
-  if (cut > 0.) ecut = std::sqrt(cut);
+  if (cut > 0.) { ecut = std::sqrt(cut); }
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-  if (cut < 0.) ecut2 = ecut - 2.;
-  elab = K * FragmentA / ResidualA;
+  if (cut < 0.) { ecut2 = ecut - 2.; }
+  elab = K * FragmentA / G4double(ResidualA);
   sig = 0.;
   if (elab <= ec) { //start for E<Ec 
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;    
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; } 
   }              //end for E<Ec
   else {           //start for  E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-    if (xnulam < flow || elab < etest) return sig;
+    if (xnulam < flow || elab < etest) { return sig; }
     geom = std::sqrt(theA*K);
     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
     geom = 31.416 * geom * geom;
     sig = std::max(geom,sig);
+
   }
-  return sig;}
-
-//   ************************** end of cross sections ******************************* 
-
+  return sig;
+}
+
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationChannel.cc	(revision 1347)
@@ -25,36 +25,18 @@
 //
 //
-// $Id: G4ProtonEvaporationChannel.cc,v 1.4 2006/06/29 20:10:41 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4ProtonEvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4ProtonEvaporationChannel.hh"
 
+G4ProtonEvaporationChannel::G4ProtonEvaporationChannel() 
+: G4EvaporationChannel(1,1,"proton",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4ProtonEvaporationChannel & G4ProtonEvaporationChannel::operator=(const G4ProtonEvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4ProtonEvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
-
-G4ProtonEvaporationChannel::G4ProtonEvaporationChannel(const G4ProtonEvaporationChannel & ) : G4EvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4ProtonEvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4ProtonEvaporationChannel::operator==(const G4ProtonEvaporationChannel & right) const 
-{
-    return (this == (G4ProtonEvaporationChannel *) &right);
-    //  return false;
-}
-
-G4bool G4ProtonEvaporationChannel::operator!=(const G4ProtonEvaporationChannel & right) const 
-{
-    return (this != (G4ProtonEvaporationChannel *) &right);
-    //  return true;
-}
-
-
+G4ProtonEvaporationChannel::~G4ProtonEvaporationChannel() 
+{}
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4ProtonEvaporationProbability.cc,v 1.17 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 #include "G4ProtonEvaporationProbability.hh"
@@ -36,55 +40,33 @@
 G4ProtonEvaporationProbability::G4ProtonEvaporationProbability() :
     G4EvaporationProbability(1,1,2,&theCoulombBarrier) // A,Z,Gamma,&theCoulombBarrier
-{
-   
-}
-
-G4ProtonEvaporationProbability::G4ProtonEvaporationProbability(const G4ProtonEvaporationProbability &) : G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4ProtonEvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-const G4ProtonEvaporationProbability & G4ProtonEvaporationProbability::
-operator=(const G4ProtonEvaporationProbability &)
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4ProtonEvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4ProtonEvaporationProbability::operator==(const G4ProtonEvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4ProtonEvaporationProbability::operator!=(const G4ProtonEvaporationProbability &) const
-{
-    return true;
-}
-
-  G4double G4ProtonEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
-  { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
-	
-  G4double G4ProtonEvaporationProbability::CalcBetaParam(const G4Fragment & )  
+{}
+
+G4ProtonEvaporationProbability::~G4ProtonEvaporationProbability() 
+{}
+
+G4double G4ProtonEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
+  { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());}
+	
+G4double G4ProtonEvaporationProbability::CalcBetaParam(const G4Fragment & )  
   { return 0.0; }
 
-  G4double G4ProtonEvaporationProbability::CCoeficient(const G4double aZ) 
-{
-    // Data comes from 
-    // Dostrovsky, Fraenkel and Friedlander
-    // Physical Review, vol 116, num. 3 1959
-    // 
-    // const G4int size = 5;
-    // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
-    // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
-    G4double C = 0.0;
-	
-    if (aZ >= 70) {
-	C = 0.10;
-    } else {
-	C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
-    }
-	
-    return C;
+G4double G4ProtonEvaporationProbability::CCoeficient(G4int aZ) 
+{
+  // Data comes from 
+  // Dostrovsky, Fraenkel and Friedlander
+  // Physical Review, vol 116, num. 3 1959
+  // 
+  // const G4int size = 5;
+  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
+  // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
+  G4double C = 0.0;
+	
+  if (aZ >= 70) {
+    C = 0.10;
+  } else {
+    C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
+  }
+	
+  return C;
 	
 }
@@ -97,17 +79,19 @@
 //OPT=3 Kalbach's parameterization
 // 
-G4double G4ProtonEvaporationProbability::CrossSection(const  G4Fragment & fragment, const  G4double K)
-{
-//  G4cout<<" In G4ProtonEVaporationProbability OPTxs="<<OPTxs<<G4endl;
-//  G4cout<<" In G4ProtonEVaporationProbability useSICB="<<useSICB<<G4endl;
+G4double 
+G4ProtonEvaporationProbability::CrossSection(const  G4Fragment & fragment, G4double K)
+{
+  //  G4cout<<" In G4ProtonEVaporationProbability OPTxs="<<OPTxs<<G4endl;
+  //  G4cout<<" In G4ProtonEVaporationProbability useSICB="<<useSICB<<G4endl;
 
   theA=GetA();
   theZ=GetZ();
-  ResidualA=fragment.GetA()-theA;
-  ResidualZ=fragment.GetZ()-theZ; 
- 
-  ResidualAthrd=std::pow(ResidualA,0.33333);
-  FragmentA=fragment.GetA();
-  FragmentAthrd=std::pow(FragmentA,0.33333);
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
+  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
+
   U=fragment.GetExcitationEnergy();
 
@@ -126,13 +110,14 @@
   }
 }
-//********************* OPT=1 : Chatterjee's cross section ************************ 
+
+//********************* OPT=1 : Chatterjee's cross section *********************
 //(fitting to cross section from Bechetti & Greenles OM potential)
 
-G4double G4ProtonEvaporationProbability::GetOpt1(const  G4double K)
+G4double G4ProtonEvaporationProbability::GetOpt1(G4double K)
 {
   G4double Kc=K; 
 
-// JMQ  xsec is set constat above limit of validity
-  if (K>50)  Kc=50;
+  // JMQ  xsec is set constat above limit of validity
+  if (K > 50*MeV) { Kc = 50*MeV; }
 
   G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2,xs;
@@ -154,6 +139,8 @@
   p = p0 + p1/Ec + p2/(Ec*Ec);
   landa = landa0*ResidualA + landa1;
-  mu = mu0*std::pow(ResidualA,mu1);
-  nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
+
+  G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 
+  mu = mu0*resmu1;
+  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
   q = landa - nu/(Ec*Ec) - 2*p*Ec;
   r = mu + 2*nu/Ec + p*(Ec*Ec);
@@ -162,29 +149,26 @@
   if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
   else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
-   if (xs <0.0) {xs=0.0;}
-
-   return xs; 
-
-}
-
-
-
-//************* OPT=2 : Wellisch's proton reaction cross section ************************ 
-
-G4double G4ProtonEvaporationProbability::GetOpt2(const  G4double K)
-{
-
-  G4double rnpro,rnneu,eekin,ekin,ff1,ff2,ff3,r0,fac,fac1,fac2,b0,xine_th(0);
+  if (xs <0.0) {xs=0.0;}
+
+  return xs; 
+}
+
+//************* OPT=2 : Welisch's proton reaction cross section ***************
+
+G4double G4ProtonEvaporationProbability::GetOpt2(G4double K)
+{
+
+  G4double eekin,ekin,ff1,ff2,ff3,r0,fac,fac1,fac2,b0,xine_th(0);
  
-//This is redundant when the Coulomb  barrier is overimposed to all cross sections 
-//It should be kept when Coulomb barrier only imposed at OPTxs=2, this is why ..
-
-         if(!useSICB && K <= theCoulombBarrier.GetCoulombBarrier(G4lrint(ResidualA),G4lrint(ResidualZ),U)) return xine_th=0.0;
+  // This is redundant when the Coulomb  barrier is overimposed to all 
+  // cross sections 
+  // It should be kept when Coulomb barrier only imposed at OPTxs=2
+
+  if(!useSICB && K<=theCoulombBarrier.GetCoulombBarrier(ResidualA,ResidualZ,U)) 
+    { return 0.0; }
 
   eekin=K;
-  rnpro=ResidualZ;
-  rnneu=ResidualA-ResidualZ;
+  G4int rnneu=ResidualA-ResidualZ;
   ekin=eekin/1000;
-
   r0=1.36*1.e-15;
   fac=pi*r0*r0;
@@ -192,17 +176,17 @@
   fac1=b0*(1.-1./ResidualAthrd);
   fac2=1.;
-  if(rnneu > 1.5) fac2=std::log(rnneu);
+  if(rnneu > 1.5) { fac2 = fG4pow->logZ(rnneu); }
   xine_th= 1.e+31*fac*fac2*(1.+ResidualAthrd-fac1);
   xine_th=(1.-0.15*std::exp(-ekin))*xine_th/(1.00-0.0007*ResidualA);	
-  ff1=0.70-0.0020*ResidualA ;
-  ff2=1.00+1/ResidualA;
-  ff3=0.8+18/ResidualA-0.002*ResidualA;
+  ff1=0.70-0.0020*ResidualA;
+  ff2=1.00+1/G4double(ResidualA);
+  ff3=0.8+18/G4double(ResidualA)-0.002*ResidualA;
   fac=1.-(1./(1.+std::exp(-8.*ff1*(std::log10(ekin)+1.37*ff2))));
   xine_th=xine_th*(1.+ff3*fac);
-  ff1=1.-1/ResidualA-0.001*ResidualA;
-  ff2=1.17-2.7/ResidualA-0.0014*ResidualA;
+  ff1=1.-1/G4double(ResidualA)-0.001*ResidualA;
+  ff2=1.17-2.7/G4double(ResidualA)-0.0014*ResidualA;
   fac=-8.*ff1*(std::log10(ekin)+2.0*ff2);
   fac=1./(1.+std::exp(fac));
-  xine_th=xine_th*fac;               
+  xine_th=xine_th*fac;            
   if (xine_th < 0.0){
     std::ostringstream errOs;
@@ -212,15 +196,12 @@
     throw G4HadronicException(__FILE__, __LINE__, errOs.str());
   }
-
   return xine_th;
-            
-}
-
+}
 
 // *********** OPT=3 : Kalbach's cross sections (from PRECO code)*************
 G4double G4ProtonEvaporationProbability::GetOpt3(const  G4double K)
 {
-//     ** p from  becchetti and greenlees (but modified with sub-barrier
-//     ** correction function and xp2 changed from -449)
+  //     ** p from  becchetti and greenlees (but modified with sub-barrier
+  //     ** correction function and xp2 changed from -449)
 
   G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2;
@@ -236,6 +217,6 @@
   nu1 = -182.4;
   nu2 = -1.872;
-
-// parameters for  proton cross section refinement 
+  
+  // parameters for  proton cross section refinement 
   G4double afit,bfit,a2,b2;
   afit=-0.0785656;
@@ -243,57 +224,56 @@
   a2= -0.00089076;
   b2= 0.0231597;  
-
+  
   G4double ec,ecsq,xnulam,etest(0.),ra(0.),a,w,c,signor(1.),signor2,sig; 
   G4double b,ecut,cut,ecut2,geom,elab;
-
-
+    
   G4double	flow = 1.e-18;
   G4double       spill= 1.e+18; 
-
-
-  if (ResidualA <= 60.)  signor = 0.92;
-  else if (ResidualA < 100.) signor = 0.8 + ResidualA*0.002;
-
-
+   
+  if (ResidualA <= 60)      { signor = 0.92; }
+  else if (ResidualA < 100) { signor = 0.8 + ResidualA*0.002; }
+  
   ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
   ecsq = ec * ec;
   p = p0 + p1/ec + p2/ecsq;
   landa = landa0*ResidualA + landa1;
-  a = std::pow(ResidualA,mu1);
+  a = fG4pow->powZ(ResidualA,mu1);
   mu = mu0 * a;
   nu = a* (nu0+nu1*ec+nu2*ecsq);
- 
+  
   c =std::min(3.15,ec*0.5);
   w = 0.7 * c / 3.15; 
-
+  
   xnulam = nu / landa;
-  if (xnulam > spill) xnulam=0.;
-  if (xnulam >= flow) etest =std::sqrt(xnulam) + 7.;
-
+  if (xnulam > spill) { xnulam=0.; }
+  if (xnulam >= flow) { etest =std::sqrt(xnulam) + 7.; }
+  
   a = -2.*p*ec + landa - nu/ecsq;
   b = p*ecsq + mu + 2.*nu/ec;
   ecut = 0.;
   cut = a*a - 4.*p*b;
-  if (cut > 0.) ecut = std::sqrt(cut);
+  if (cut > 0.) { ecut = std::sqrt(cut); }
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-//JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
-//ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
-//  if (cut < 0.) ecut2 = ecut - 2.;
- if (cut < 0.) ecut2 = ecut;
-  elab = K * FragmentA / ResidualA;
+  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
+  // ecut<0 means that there is no cut with energy axis, i.e. xs is set 
+  // to 0 bellow minimum
+  //  if (cut < 0.) ecut2 = ecut - 2.;
+  if (cut < 0.) { ecut2 = ecut; }
+  elab = K * FragmentA /G4double(ResidualA);
   sig = 0.;
   if (elab <= ec) { //start for E<Ec 
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
+    
     signor2 = (ec-elab-c) / w;
     signor2 = 1. + std::exp(signor2);
-    sig = sig / signor2;     
-                       }       //end for E<=Ec
-  else            {           //start for  E>Ec
+    sig = sig / signor2;
+  }              //end for E<=Ec
+  else{           //start for  E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-
-    if (xnulam < flow || elab < etest)
-     {
+    
+    if (xnulam < flow || elab < etest) 
+      {
         if (sig <0.0) {sig=0.0;}
         return sig;
@@ -303,10 +283,7 @@
     geom = 31.416 * geom * geom;
     sig = std::max(geom,sig);
-
+    
   }   //end for E>Ec
- return sig;}
-
-
-
-//   ************************** end of cross sections ******************************* 
-
+  return sig;
+}
+
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationChannel.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationChannel.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationChannel.cc	(revision 1347)
@@ -25,33 +25,19 @@
 //
 //
-// $Id: G4TritonEvaporationChannel.cc,v 1.4 2006/06/29 20:10:45 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4TritonEvaporationChannel.cc,v 1.5 2010/11/17 12:14:59 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Nov. 1999)
 //
+// 17-11-2010 V.Ivanchenko moved constructor and destructor to source and cleanup
 
 #include "G4TritonEvaporationChannel.hh"
 
+G4TritonEvaporationChannel::G4TritonEvaporationChannel() 
+: G4EvaporationChannel(3,1,"triton",&theEvaporationProbability,&theCoulombBarrier) 
+{}
 
-const G4TritonEvaporationChannel & G4TritonEvaporationChannel::
-operator=(const G4TritonEvaporationChannel & )
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4TritonEvaporationChannel::operator= meant to not be accessable");
-    return *this;
-}
+G4TritonEvaporationChannel::~G4TritonEvaporationChannel() 
+{}
 
-G4TritonEvaporationChannel::G4TritonEvaporationChannel(const G4TritonEvaporationChannel & ) : G4EvaporationChannel()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4TritonEvaporationChannel::CopyConstructor meant to not be accessable");
-}
-
-G4bool G4TritonEvaporationChannel::operator==(const G4TritonEvaporationChannel & right) const 
-{
-    return (this == (G4TritonEvaporationChannel *) &right);
-}
-
-G4bool G4TritonEvaporationChannel::operator!=(const G4TritonEvaporationChannel & right) const 
-{
-    return (this != (G4TritonEvaporationChannel *) &right);
-}
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc	(revision 1347)
@@ -24,11 +24,15 @@
 // ********************************************************************
 //
-//J.M. Quesada (August2008). Based on:
+// $Id: G4TritonEvaporationProbability.cc,v 1.18 2010/11/17 11:06:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
+//
+// J.M. Quesada (August2008). Based on:
 //
 // Hadronic Process: Nuclear De-excitations
 // by V. Lara (Oct 1998)
 //
-// Modif (03 September 2008) by J. M. Quesada for external choice of inverse 
-// cross section option
+// Modified:
+// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
+// 17-11-2010 V.Ivanchenko integer Z and A
 
 #include "G4TritonEvaporationProbability.hh"
@@ -36,60 +40,38 @@
 G4TritonEvaporationProbability::G4TritonEvaporationProbability() :
     G4EvaporationProbability(3,1,2,&theCoulombBarrier) // A,Z,Gamma,&theCoulombBarrier
-{
-
-}
-
-G4TritonEvaporationProbability::G4TritonEvaporationProbability(const G4TritonEvaporationProbability &) : G4EvaporationProbability()
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4TritonEvaporationProbability::copy_constructor meant to not be accessable");
-}
-
-
-
-
-const G4TritonEvaporationProbability & G4TritonEvaporationProbability::
-operator=(const G4TritonEvaporationProbability &)
-{
-    throw G4HadronicException(__FILE__, __LINE__, "G4TritonEvaporationProbability::operator= meant to not be accessable");
-    return *this;
-}
-
-
-G4bool G4TritonEvaporationProbability::operator==(const G4TritonEvaporationProbability &) const
-{
-    return false;
-}
-
-G4bool G4TritonEvaporationProbability::operator!=(const G4TritonEvaporationProbability &) const
-{
-    return true;
-}
-
-   G4double G4TritonEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
-  { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
+{}
+
+G4TritonEvaporationProbability::~G4TritonEvaporationProbability()
+{}
+
+G4double G4TritonEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
+{ 
+  return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());
+}
 	
-  G4double G4TritonEvaporationProbability::CalcBetaParam(const G4Fragment & ) 
-  { return 0.0; }
-
-G4double G4TritonEvaporationProbability::CCoeficient(const G4double aZ) 
-{
-    // Data comes from 
-    // Dostrovsky, Fraenkel and Friedlander
-    // Physical Review, vol 116, num. 3 1959
-    // 
-    // const G4int size = 5;
-    // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
-    // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
-    // C for triton is equal to C for protons divided by 3
-    G4double C = 0.0;
+G4double G4TritonEvaporationProbability::CalcBetaParam(const G4Fragment & ) 
+{ 
+  return 0.0; 
+}
+
+G4double G4TritonEvaporationProbability::CCoeficient(G4int aZ) 
+{
+  // Data comes from 
+  // Dostrovsky, Fraenkel and Friedlander
+  // Physical Review, vol 116, num. 3 1959
+  // 
+  // const G4int size = 5;
+  // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
+  // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
+  // C for triton is equal to C for protons divided by 3
+  G4double C = 0.0;
 	
-    if (aZ >= 70) {
-	C = 0.10;
-    } else {
-	C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
-    }
+  if (aZ >= 70) {
+    C = 0.10;
+  } else {
+    C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
+  }
 	
-    return C/3.0;
-	
+  return C/3.0;
 }
 
@@ -100,16 +82,16 @@
 //OPT=3,4 Kalbach's parameterization 
 // 
-G4double G4TritonEvaporationProbability::CrossSection(const  G4Fragment & fragment, const  G4double K)
+G4double 
+G4TritonEvaporationProbability::CrossSection(const  G4Fragment & fragment, G4double K)
 {
   theA=GetA();
   theZ=GetZ();
-  ResidualA=fragment.GetA()-theA;
-  ResidualZ=fragment.GetZ()-theZ; 
+  ResidualA=fragment.GetA_asInt()-theA;
+  ResidualZ=fragment.GetZ_asInt()-theZ; 
   
-  ResidualAthrd=std::pow(ResidualA,0.33333);
-  FragmentA=fragment.GetA();
-  FragmentAthrd=std::pow(FragmentA,0.33333);
-
-  
+  ResidualAthrd=fG4pow->Z13(ResidualA);
+  FragmentA=fragment.GetA_asInt();
+  FragmentAthrd=fG4pow->Z13(FragmentA);
+
   if (OPTxs==0) {std::ostringstream errOs;
     errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (tritons)!!"  
@@ -128,59 +110,55 @@
 
 //
-//********************* OPT=1,2 : Chatterjee's cross section ************************ 
+//********************* OPT=1,2 : Chatterjee's cross section *****************
 //(fitting to cross section from Bechetti & Greenles OM potential)
 
-G4double G4TritonEvaporationProbability::GetOpt12(const  G4double K)
-{
-
+G4double G4TritonEvaporationProbability::GetOpt12(G4double K)
+{
   G4double Kc=K;
 
-// JMQ xsec is set constat above limit of validity
-  if (K>50) Kc=50;
-
- G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
-//G4double Eo(0),epsilon1(0),epsilon2(0),discri(0);
-
+  // JMQ xsec is set constat above limit of validity
+  if (K > 50*MeV) { Kc=50*MeV; }
+
+  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
  
- G4double    p0 = -11.04;
- G4double    p1 = 619.1;
- G4double    p2 = -2147.;
- G4double    landa0 = -0.0426;
- G4double    landa1 = -10.33;
- G4double    mu0 = 601.9;
- G4double    mu1 = 0.37;
- G4double    nu0 = 583.0;
- G4double    nu1 = -546.2;
- G4double    nu2 = 1.718;  
- G4double    delta=1.2;            
-
- Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
- p = p0 + p1/Ec + p2/(Ec*Ec);
- landa = landa0*ResidualA + landa1;
- mu = mu0*std::pow(ResidualA,mu1);
- nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
- q = landa - nu/(Ec*Ec) - 2*p*Ec;
- r = mu + 2*nu/Ec + p*(Ec*Ec);
-
- ji=std::max(Kc,Ec);
- if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
- else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
- 
- if (xs <0.0) {xs=0.0;}
- 
- return xs;
-
+  G4double    p0 = -11.04;
+  G4double    p1 = 619.1;
+  G4double    p2 = -2147.;
+  G4double    landa0 = -0.0426;
+  G4double    landa1 = -10.33;
+  G4double    mu0 = 601.9;
+  G4double    mu1 = 0.37;
+  G4double    nu0 = 583.0;
+  G4double    nu1 = -546.2;
+  G4double    nu2 = 1.718;  
+  G4double    delta=1.2;            
+
+  Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
+  p = p0 + p1/Ec + p2/(Ec*Ec);
+  landa = landa0*ResidualA + landa1;
+
+  G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 
+  mu = mu0*resmu1;
+  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
+  q = landa - nu/(Ec*Ec) - 2*p*Ec;
+  r = mu + 2*nu/Ec + p*(Ec*Ec);
+  
+  ji=std::max(Kc,Ec);
+  if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
+  else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
+                 
+  if (xs <0.0) {xs=0.0;}
+              
+  return xs;
 }
 
 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
-G4double G4TritonEvaporationProbability::GetOpt34(const  G4double K)
+G4double G4TritonEvaporationProbability::GetOpt34(G4double K)
 //     ** t from o.m. of hafele, flynn et al
 {
-  
   G4double landa, mu, nu, p , signor(1.),sig;
   G4double ec,ecsq,xnulam,etest(0.),a; 
   G4double b,ecut,cut,ecut2,geom,elab;
-  
-  
+
   G4double     flow = 1.e-18;
   G4double     spill= 1.e+18;
@@ -205,32 +183,33 @@
   p = p0 + p1/ec + p2/ecsq;
   landa = landa0*ResidualA + landa1;
-  a = std::pow(ResidualA,mu1);
+  a = fG4pow->powZ(ResidualA,mu1);
   mu = mu0 * a;
   nu = a* (nu0+nu1*ec+nu2*ecsq);  
   xnulam = nu / landa;
-  if (xnulam > spill) xnulam=0.;
-  if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
-  
+  if (xnulam > spill) { xnulam=0.; }
+  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
+ 
   a = -2.*p*ec + landa - nu/ecsq;
   b = p*ecsq + mu + 2.*nu/ec;
   ecut = 0.;
   cut = a*a - 4.*p*b;
-  if (cut > 0.) ecut = std::sqrt(cut);
+  if (cut > 0.) { ecut = std::sqrt(cut); }
   ecut = (ecut-a) / (p+p);
   ecut2 = ecut;
-//JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
-//ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
-//  if (cut < 0.) ecut2 = ecut - 2.;
-  if (cut < 0.) ecut2 = ecut;
-  elab = K * FragmentA / ResidualA;
+  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
+  // ecut<0 means that there is no cut with energy axis, i.e. xs is set 
+  // to 0 bellow minimum
+  //  if (cut < 0.) ecut2 = ecut - 2.;
+  if (cut < 0.) { ecut2 = ecut; }
+  elab = K * FragmentA / G4double(ResidualA);
   sig = 0.;
-
+ 
   if (elab <= ec) { //start for E<Ec
-    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
+    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
   }           //end for E<Ec
-  else {           //start for E>Ec  
+  else {           //start for E>Ec
     sig = (landa*elab+mu+nu/elab) * signor;
     geom = 0.;
-    if (xnulam < flow || elab < etest) return sig;
+    if (xnulam < flow || elab < etest) { return sig; }
     geom = std::sqrt(theA*K);
     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
@@ -239,7 +218,4 @@
   }           //end for E>Ec
   return sig;
-  
-}
-
-//   ************************** end of cross sections ******************************* 
-
+}
+
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4UnstableFragmentBreakUp.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4UnstableFragmentBreakUp.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4UnstableFragmentBreakUp.cc	(revision 1347)
@@ -25,5 +25,5 @@
 //
 // $Id: G4UnstableFragmentBreakUp.cc,v 1.8 2010/06/25 09:46:09 gunter Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // -------------------------------------------------------------------
Index: trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4VEvaporation.cc
===================================================================
--- trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4VEvaporation.cc	(revision 1340)
+++ trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4VEvaporation.cc	(revision 1347)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4VEvaporation.cc,v 1.7 2010/04/27 14:00:40 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03-ref-09 $
+// $Id: G4VEvaporation.cc,v 1.8 2010/10/29 17:35:03 vnivanch Exp $
+// GEANT4 tag $Name: geant4-09-04-ref-00 $
 //
 // Hadronic Process: Nuclear De-excitations
@@ -33,5 +33,5 @@
 #include "G4VEvaporation.hh"
 
-G4VEvaporation::G4VEvaporation() 
+G4VEvaporation::G4VEvaporation():OPTxs(3),useSICB(false)
 {}
 
