From 8c34dcb778f3a84904680eb7a529da423faf193a Mon Sep 17 00:00:00 2001
From: matta <matta@npt>
Date: Fri, 19 Nov 2010 13:32:17 +0000
Subject: [PATCH] *Changing code in NPL::EnergyLoss::Slow  * code is now
 coherente with EvaluateInitialEnergy function

---
 NPLib/Tools/NPEnergyLoss.cxx | 58 ++++++++++++++++++++++++++----------
 1 file changed, 43 insertions(+), 15 deletions(-)

diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx
index 69bcb90d6..df12e94c1 100644
--- a/NPLib/Tools/NPEnergyLoss.cxx
+++ b/NPLib/Tools/NPEnergyLoss.cxx
@@ -237,25 +237,53 @@ double EnergyLoss::Slow(	double Energy 			, // Energy of the detected particle
 		   					double Angle			) // Particle Angle
 		   					const
 	{
-		TargetThickness = TargetThickness / cos(Angle)  					;
-		double SliceThickness = TargetThickness / (double)fNumberOfSlice 	;
-		
-		Interpolator* s = new Interpolator( fEnergy , fdEdX_Total	)		;
+//    //	Lise file are given in MeV/u
+//		//	For SRIM and geant4 file fNumberOfMass = 1 whatever is the nucleus, file are given in MeV
+//		Energy = Energy / (double) fNumberOfMass ;
+//	
+//		if (Angle > halfpi) Angle = pi-Angle								;	
+//	
+//		TargetThickness = TargetThickness / cos(Angle)  					;
+//		double SliceThickness = TargetThickness / (double)fNumberOfSlice 	;
+//		
+//		//Interpolator* s = new Interpolator( fEnergy , fdEdX_Total	)		;
+//		
+////		double InitialEnergy = Energy										;
+////		//double slow = 0.													;
+//		   
+//		for (int i = 0; i < fNumberOfSlice ; i++) 
+//			{
+//			   // double de = s->Eval(Energy) * SliceThickness;
+//			    double de = fInter->Eval(Energy) * SliceThickness	;
+//			   // slow 	+= de	;
+//			    Energy	-= de/fNumberOfMass	;
+//			    // If ion do not cross the target
+////			    if (Energy < 0) 	{slow = InitialEnergy; break;}
+//        if (Energy < 0) 	{Energy=0; break;}
+//			}
+//		   
+//	//	delete s		;
+//		return slow	;
+
+    //	Lise file are given in MeV/u
+		//	For SRIM and geant4 file fNumberOfMass = 1 whatever is the nucleus, file are given in MeV
+		Energy = Energy / (double) fNumberOfMass ;
+	
+		if (Angle > halfpi) Angle = pi-Angle								;
+		TargetThickness = TargetThickness / ( cos(Angle) ) 					;
 		
-		double InitialEnergy = Energy										;
-		double slow = 0.													;
-		   
+		double SliceThickness = TargetThickness / (double)fNumberOfSlice 	;
+
 		for (int i = 0; i < fNumberOfSlice ; i++) 
 			{
-			    double de = s->Eval(Energy) * SliceThickness;
-			    slow 	+= de	;
-			    Energy	-= de	;
-			    // If ion do not cross the target
-			    if (Energy < 0) 	{slow = InitialEnergy; break;}
+			    double de = fInter->Eval(Energy) * SliceThickness	;
+			    Energy	 -= de/fNumberOfMass											;
+			    
+			    if(Energy<0) {Energy=0;break;}
 			}
-		   
-		delete s		;
-		return slow	;
+			
+		return (Energy*fNumberOfMass)	;
+
 	}
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 double EnergyLoss::EvaluateInitialEnergy(	double Energy 					, // Energy of the detected particle
-- 
GitLab