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