diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx index 69bcb90d68480df3d2c600943435e55e1c535b28..df12e94c196548018844e2e1e5f788ccca9fc5c8 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