diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis
index 592ab93c584150d90ec51a9f190d63e0e5f2bfa5..17a18c713490b00b1f4bb3098d55b3ae7fc7d93b 100755
Binary files a/NPAnalysis/10He_Riken/Analysis and b/NPAnalysis/10He_Riken/Analysis differ
diff --git a/NPAnalysis/10He_Riken/include/ObjectManager.hh b/NPAnalysis/10He_Riken/include/ObjectManager.hh
index 1ab104dbca5e056560ffb6817dff20c3d12d574d..336fb8c7142848ae3f053a591911a9684948e3f2 100644
--- a/NPAnalysis/10He_Riken/include/ObjectManager.hh
+++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh
@@ -109,17 +109,21 @@ namespace ENERGYLOSS
 	
 	//	3He Energy Loss
 			EnergyLoss He3TargetWind = EnergyLoss 	(	"He3_Mylar.G4table" 		,
+																								"G4Table",
 																									10000	 				);
 		
 			EnergyLoss He3TargetGaz = EnergyLoss 		(	"He3_D2.G4table" 	,
+																								"G4Table",
 																									10000	 				);
 			
 			EnergyLoss He3StripAl   = EnergyLoss 	(	"3He_Al.txt" 			,
+																							"LISE",
 																							10000						,
 																							1						,
 																							3						);
 														
 			EnergyLoss He3StripSi   = EnergyLoss 	(	"3He_Si.txt" 			,
+																							"LISE",
 																							10000						,
 																							1					,
 																							3						);
@@ -150,16 +154,19 @@ namespace ENERGYLOSS
 														
 		//	proton Energy Loss
 			EnergyLoss protonTargetWind = EnergyLoss 	(	"proton_Mylar.txt"	 		,
+															"LISE",
 															1000		 				,
 															1						,
 															1							);
 		
 			EnergyLoss protonTargetGaz = EnergyLoss 	(	"proton_D2gaz_1b_26K.txt" 	,
+																"LISE",
 															1000		 				,
 															1						,
 															1							);
 			
 			EnergyLoss protonStripAl   = EnergyLoss 	(	"proton_Al.txt" 			,
+															"LISE",
 															100							,
 															1							,
 															1							);
diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx
index 6285a02477045bc726fc3ccc8bf6059010bc5018..f41ac75f9b09e671ac9c8875d142358d2934c5a2 100644
--- a/NPLib/Tools/NPEnergyLoss.cxx
+++ b/NPLib/Tools/NPEnergyLoss.cxx
@@ -56,7 +56,7 @@ EnergyLoss::~EnergyLoss()
 	{}
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 
-EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 ,  int LiseColumn , int NumberOfMass) 
+EnergyLoss::EnergyLoss(string Path , string Source, int NumberOfSlice=100 ,  int LiseColumn , int NumberOfMass) 
 	{ 
 	
 	fNumberOfSlice = NumberOfSlice ; 
@@ -67,105 +67,86 @@ EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 ,  int LiseColumn , i
 	
 	cout << "///////////////////////////////// " << endl ;
 	cout << "Initialising an EnergyLoss object " << endl ;
-	
-	 //If LiseColumn is set to 0 File type is expected to be from SRIM or Geant4
-	 if (LiseColumn == 0)
-	 	{
-				// Opening dE/dX file
+		
+		ifstream TableFile	;
+		TableFile.open(Path.c_str())	;
 
-			ifstream TableFile	;
-			TableFile.open(Path.c_str())	;
+ 		// Opening dE/dX file
+	 if(!TableFile) cout << "ERROR: TABLE FILE NOT FOUND" << endl; 
+	  
+	 if (Source == "G4Table")
+	 	{
+	   	cout << "Reading Energy Loss File: " << Path << endl ;
+			// Reading Data
+			double energy, total;
+			string dummy;
+			//skipped first line
+			getline(TableFile,dummy);
+			while ( TableFile >> energy)
+	     {
+				fEnergy.push_back ( energy*MeV )				;
+				TableFile >> total;
+				fdEdX_Total.push_back ( total*MeV/micrometer )	;
+				}
+	   
+	  		// Close File
+	   		TableFile.close();
+				   	
+			}
+			
+		else if (Source == "SRIM")	
+	   	{
+				// Reading Data
+				double energy, nuclear, electronic;
+				string unit, dummy;
+				
+				while ( TableFile >> energy >> unit 
+						>> electronic >> nuclear 
+						>> dummy >> dummy >> dummy 
+				    	>> dummy >> dummy >> dummy )
+				     {
+						if ( unit == "keV" ) energy = energy*keV				;
+						if ( unit == "MeV" ) energy = energy*MeV				;
+						if ( unit == "GeV" ) energy = energy*GeV				;
+						fEnergy				.push_back ( energy )				;
+						fdEdX_Nuclear		.push_back ( nuclear ) 				;
+						fdEdX_Electronic	.push_back ( electronic ) 			;
+						fdEdX_Total			.push_back ( nuclear + electronic )	;
+					}
+		   
+		  		// Close File
+		   		TableFile.close();
+	   	}
 
-			if ( !TableFile )
-			    {
-					cout << "Failed to open file " << Path << endl;
-					return;
-			    }	
-			 		   	else
-				   	{
-				   	cout << "Reading Energy Loss File: " << Path << endl ;
-						// Reading Data
-						double energy, total;
-						string dummy;
-						//skipped first line
-						getline(TableFile,dummy);
-						while ( TableFile >> energy)
-						     {
-								fEnergy.push_back ( energy*MeV )				;
-								TableFile >> total;
-								fdEdX_Total.push_back ( total*MeV/micrometer )	;
+		else if(Source == "LISE")
+			{
+		   	cout << "Reading Energy Loss File: " << Path << endl ;
+				// Reading Data
+				double energy=0, energyloss=0;
+				string dummy;				
+				// skipping comment first line		
+				getline(TableFile,dummy);
+				
+				while ( TableFile >> energy )
+					{ 
+						for (int k = 0 ; k < 11 ; k++ )
+							{
+								TableFile >> dummy ;
+								if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ;
 							}
-				   
-				  		// Close File
-				   		TableFile.close();
-				   	}
-		/*	else
-			   	{
-					// Reading Data
-					double energy, nuclear, electronic;
-					string unit, dummy;
-					
-					while ( TableFile >> energy >> unit 
-							>> electronic >> nuclear 
-							>> dummy >> dummy >> dummy 
-					    	>> dummy >> dummy >> dummy )
-					     {
-							if ( unit == "keV" ) energy = energy*keV				;
-							if ( unit == "MeV" ) energy = energy*MeV				;
-							if ( unit == "GeV" ) energy = energy*GeV				;
-							fEnergy				.push_back ( energy )				;
-							fdEdX_Nuclear		.push_back ( nuclear ) 				;
-							fdEdX_Electronic	.push_back ( electronic ) 			;
-							fdEdX_Total			.push_back ( nuclear + electronic )	;
-						}
-			   
-			  		// Close File
-			   		TableFile.close();
-			   	}*/
-			   
+						fEnergy.push_back (energy*MeV) ;
+						fdEdX_Total.push_back(energyloss*MeV/micrometer);
+					}
+		   
+		  		// Close File
+		   		TableFile.close();
+			}
 			
-		}
-		
-		//Else File is expected to be from Lise, and LiseColumn gives which model to take
 		else
 			{
-				// Opening dE/dX file
-
-				ifstream TableFile	;
-				TableFile.open(Path.c_str())	;
-
-				if ( !TableFile )
-				    {
-						cout << "Failed to open file " << Path << endl;
-						return;
-				    }	
-				   
-				else
-				   	{ 
-				   	cout << "Reading Energy Loss File: " << Path << endl ;
-						// Reading Data
-						double energy=0, energyloss=0;
-						string dummy;				
-						// skipping comment first line		
-						getline(TableFile,dummy);
-						
-						while ( TableFile >> energy )
-							{ 
-								for (int k = 0 ; k < 11 ; k++ )
-									{
-										TableFile >> dummy ;
-										if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ;
-									}
-								fEnergy.push_back (energy*MeV) ;
-								fdEdX_Total.push_back(energyloss*MeV/micrometer);
-							}
-				   
-				  		// Close File
-				   		TableFile.close();
-				   	}
-					
-			
+				cout << "ERROR : Wrong Source Type" << endl ;
 			}
+			
 			fInter = new Interpolator( fEnergy , fdEdX_Total	)		;
 			cout << "///////////////////////////////// " << endl ;
 	}
diff --git a/NPLib/Tools/NPEnergyLoss.h b/NPLib/Tools/NPEnergyLoss.h
index 005b0b2b8ce447f763edf9814a1a25555be16c46..080c3298a0ccd631bff74667bd76eda58f40b028 100644
--- a/NPLib/Tools/NPEnergyLoss.h
+++ b/NPLib/Tools/NPEnergyLoss.h
@@ -60,10 +60,11 @@ namespace NPL
 		 
 		 public :	//	Constructor
 		   EnergyLoss();
-		   EnergyLoss(   string Path 		,	//	Path of dE/dX table file
-		   				 int NumberOfSlice	,   //	Low number = Faster, High Number = more accurate / typical: 100 to 1000
-		   				 int LiseColumns=0	,	//	Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file
-		   				 int NumberOfMass=1	);	//	Number of mass A of the nucleus (used only for Lise file)	
+		   EnergyLoss(   	string Path 				,	//	Path of dE/dX table file
+		   								string Source  			, // Type of file : Geant4,Lise,SRIM
+		   				 				int NumberOfSlice		, //	Low number = Faster, High Number = more accurate / typical: 100 to 1000
+		   								int LiseColumns=0		,	//	Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file
+		   				 				int NumberOfMass=1	);//	Number of mass A of the nucleus (used only for Lise file)	
 		   ~EnergyLoss();
 		 
 		 private :	//	dE/dX, slice parameter
diff --git a/NPSimulation/src/EventGeneratorBeam.cc b/NPSimulation/src/EventGeneratorBeam.cc
index b3da7f51cfae0e30bb09efac0fb64eab9350296d..a8c8db2784d1220bd6c98a6e5744e76339d8e86f 100644
--- a/NPSimulation/src/EventGeneratorBeam.cc
+++ b/NPSimulation/src/EventGeneratorBeam.cc
@@ -185,6 +185,11 @@ void EventGeneratorBeam::ReadConfiguration(string Path)
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 void EventGeneratorBeam::GenerateEvent(G4Event* anEvent, G4ParticleGun* particleGun)
 {
+			//--------------write the DeDx Table -------------------
+  if(m_Target!=0)
+  	m_Target->WriteDEDXTable(m_particle ,0, m_BeamEnergy+4*m_BeamEnergySpread);
+
+
    m_InitConditions->Clear();
    
    ///////////////////////////////////////////////////////////////////////
diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc
index db689adb86849fbe9e54a42e5c13ccd3bcc52c79..894f882a5727d920bd1ac0f2b1f87dc7c838b37c 100644
--- a/NPSimulation/src/EventGeneratorTransfert.cc
+++ b/NPSimulation/src/EventGeneratorTransfert.cc
@@ -326,6 +326,27 @@ while(ReadingStatus){
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun)
 {	
+	//	If first time, write the DeDx table
+	if(anEvent->GetEventID()==0)
+		{
+			//-------------- Before living, wrtie the DeDx Table -------------------
+
+			G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ;
+		  G4int LightAx = m_Reaction->GetNucleus3()->GetA() ;
+		  
+		  G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ;
+		  G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ;
+		  
+		  if(m_Target!=0)
+		  	{
+		  		m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread);
+		  		m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread);
+		  	}
+		
+		}
+
+
+
    // Clear contents of Precedent event (now stored in ROOTOutput)
    m_InitConditions->Clear();
 
diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc
index 06e8d7de224b836008e544cb366405389235aa49..270f2eadae742b4d751c5211cbee822406692ce2 100644
--- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc
+++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc
@@ -69,7 +69,7 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance()
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 EventGeneratorTransfertToResonance::~EventGeneratorTransfertToResonance()
 {
-   //------------- Default Destructor ------------
+  //------------- Default Destructor ------------
 	delete m_InitConditions;
 	delete m_Reaction ;
 }
@@ -77,13 +77,7 @@ EventGeneratorTransfertToResonance::~EventGeneratorTransfertToResonance()
 void	EventGeneratorTransfertToResonance::SetTarget(Target* Target) 
    {
    	if(Target!=0)	
-   		{
    			m_Target = Target;
-   			G4int LightZ = m_Reaction->GetNucleus3()->GetZ() ;
-  			G4int LightA = m_Reaction->GetNucleus3()->GetA() ;
-   			m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZ,LightA, 0.) ,0, m_BeamEnergy);
-   		}
-   
    }
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance(	  string  	name1          		,
@@ -377,9 +371,24 @@ while(ReadingStatus){
 void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun)
 {
 
-				G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ;
-  			G4int LightAx = m_Reaction->GetNucleus3()->GetA() ;
-   			m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, 550);
+	//	If first time, write the DeDx table
+	if(anEvent->GetEventID()==0)
+		{
+			//-------------- Before living, wrtie the DeDx Table -------------------
+
+			G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ;
+		  G4int LightAx = m_Reaction->GetNucleus3()->GetA() ;
+		  
+		  G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ;
+		  G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ;
+		  
+		  if(m_Target!=0)
+		  	{
+		  		m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread);
+		  		m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread);
+		  	}
+		
+		}
 
    // Clear contents of Precedent event (now stored in ROOTOutput)
    m_InitConditions->Clear();
diff --git a/NPSimulation/src/Target.cc b/NPSimulation/src/Target.cc
index 122bbe8bf06c9e69ad45939b3cbe61ddc2d1962b..51eba32448deaa208974316e2729fddc5e7b8902 100644
--- a/NPSimulation/src/Target.cc
+++ b/NPSimulation/src/Target.cc
@@ -653,8 +653,7 @@ void Target::WriteDEDXTable(G4ParticleDefinition* Particle ,G4double Emin,G4doub
 //							G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_WindowsMaterial);
 							  G4double dedx = emCalculator.ComputeDEDX(	E, Particle ,
                        																		"ionIoni",  m_WindowsMaterial);
-cout << dedx<<endl ;
-							File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ;
+								File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ;
 						}
 			}
 		File.close();