diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis
index f5b004c15c19c002bffe3614626ee9f880d82d44..73acf47f2d6e340653baac089ce92f0d1716e695 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 f42981842a9a40aebd4476f7087cedfc4e020c5d..8cef0cdee67777ad8b16301617c9a42042b4adc7 100644
--- a/NPAnalysis/10He_Riken/include/ObjectManager.hh
+++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh
@@ -31,6 +31,7 @@
 #include "NPReaction.h"
 #include "RootInput.h"
 #include "RootOutput.h"
+#include "TInitialConditions.h"
 
 // Use CLHEP System of unit and Physical Constant
 #include "CLHEP/Units/GlobalSystemOfUnits.h"
@@ -104,10 +105,20 @@ namespace ENERGYLOSS
 	{
 	
 		//	Declare your Energy loss here	:
-			EnergyLoss He3Target = EnergyLoss 	(	"3He_Mylar.txt" 	,
-													100 				,
-													1					,
-													3					);
+			EnergyLoss He3TargetWind = EnergyLoss 	(	"3He_Mylar.txt" 	,
+														1000 				,
+														1					,
+														3					);
+		
+			EnergyLoss He3TargetGaz = EnergyLoss 	(	"3He_D2gaz_1b_26K.txt" 	,
+														100 				,
+														1					,
+														3					);
+			
+			EnergyLoss He3StripAl   = EnergyLoss 	(	"3He_Al.txt" 		,
+														100 				,
+														1					,
+														3					);
 	
 	}
 	
diff --git a/NPAnalysis/10He_Riken/src/Analysis.cc b/NPAnalysis/10He_Riken/src/Analysis.cc
index e23f787f3ca8e0b569b3066483ca515d8356bce2..a88cb3a92c65fd92962699030df914937fb7478d 100644
--- a/NPAnalysis/10He_Riken/src/Analysis.cc
+++ b/NPAnalysis/10He_Riken/src/Analysis.cc
@@ -31,50 +31,131 @@ int main(int argc,char** argv)
 	myDetector	->	ReadConfigurationFile(detectorfileName)		;
 	
 	//	Attach more branch to the output
-	double Ex = 0 ; double EE = 0 ; double TT = 0 ; double X = 0 ; double Y = 0 ; int det ;
+	double ThinSi=-1 ;double Ex = 0 ; double EE = 0 ; double TT = 0 ; double X = 0 ; double Y = 0 ; int det ; double ResolTheta=0;
 	RootOutput::getInstance()->GetTree()->Branch("ExcitationEnergy",&Ex,"Ex/D") ;
 	RootOutput::getInstance()->GetTree()->Branch("E",&EE,"EE/D") ;
 	RootOutput::getInstance()->GetTree()->Branch("A",&TT,"TT/D") ;
 	RootOutput::getInstance()->GetTree()->Branch("X",&X,"X/D") ;
 	RootOutput::getInstance()->GetTree()->Branch("Y",&Y,"Y/D") ;
+	RootOutput::getInstance()->GetTree()->Branch("Y",&Y,"Y/D") ;
+	RootOutput::getInstance()->GetTree()->Branch("ThinSi_E",&ThinSi,"ThinSi/D") ;
+	
+	//	Get the formed Chained Tree and Treat it
+	TChain* Chain = RootInput:: getInstance() -> GetChain()	;
 	
 	// Open the ThinSi Branch
-	RootInput::getInstance() -> GetChain()->SetBranchStatus("ThinSiEnergy",true)	;
-	double ThinSi=-1 ;
-	RootInput::getInstance() -> GetChain()->SetBranchAddress("ThinSiEnergy",&ThinSi)	;
+	Chain->SetBranchStatus("ThinSiEnergy",true)	;
+	Chain->SetBranchStatus("InitialConditions",true)	;
+	Chain->SetBranchStatus("fIC_*",true)	;
+
+	 TInitialConditions* Init = new TInitialConditions();
+	Chain->SetBranchAddress("ThinSiEnergy"		,&ThinSi	);
+	Chain->SetBranchAddress("InitialConditions"	,&Init		);
+	
 	
+ double TargetX=0 ; double TargetY=0; double BeamTheta = 0 ; double BeamPhi = 0 ;
+double TrueE=0 ; double TrueTheta=0 ;
+
 	// Get Must2 Pointer:
 	MUST2Array* M2 = (MUST2Array*) myDetector -> m_Detector["MUST2"] ;
-	//	Get the formed Chained Tree and Treat it
-	TChain* Chain = RootInput:: getInstance() -> GetChain()	;
+	
 	int i;	
 	for ( i = 0 ; i < Chain -> GetEntries() ; i ++ )
 		{
 			if( i%10000 == 0 && i!=0) cout << i << " Event annalysed " << endl ;						
 			Chain -> GetEntry(i);
-			
 			myDetector -> ClearEventPhysics()				;
 			myDetector -> BuildPhysicalEvent()				;
 			
-			
 			double E = M2 -> GetEnergyDeposit();
-			TVector3 A = M2 -> GetPositionOfInteraction();
+			TVector3 HitDirection  = M2 -> GetPositionOfInteraction() - TVector3(Init->GetICPositionX(0),Init->GetICPositionY(0),0);
 			
-			if(ThinSi > 0) E = E + ThinSi ;
-			
-			double Theta = ThetaCalculation ( A , TVector3(0,0,1) ) ;
-			
-			E= He3Target.EvaluateInitialEnergy(	E 					, // Energy of the detected particle
-												15*micrometer		, // Target Thickness at 0 degree
-												Theta				);
+			BeamTheta = Init->GetICIncidentAngleTheta(0)*deg ; BeamPhi = Init->GetICIncidentAnglePhi(0)*deg ; 
+
+//			TVector3 BeamDirection = TVector3(cos(BeamPhi)*sin(BeamTheta) , sin(BeamPhi)*sin(BeamTheta) , cos(BeamTheta)) ;	
+			TVector3 BeamDirection = TVector3(0,0,1) ;  BeamDirection.SetTheta(BeamTheta) ; BeamDirection.SetPhi(BeamPhi) ;
+			double Theta = ThetaCalculation ( HitDirection , BeamDirection ) ;				
 
-			if(E>-1000)		Ex = myReaction -> ReconstructRelativistic( E , Theta ) ;
-			else Ex = -100 ;
+			if(E>-1000 && ThinSi>0 )	
+				{
+						
+						E=E+ThinSi;
+						
+//						E= He3StripAl.EvaluateInitialEnergy(		E 					, // Energy of the detected particle
+//																	2*2*0.4*micrometer	, // One for ThinSi and one for Must
+//																	0					);	
+							
+//						E= He3StripAl.EvaluateInitialEnergy(		E 					, // Energy of the detected particle
+//																	2*0.4*micrometer	, // Target Thickness at 0 degree
+//																	0					);
+//				
+//						E= He3TargetWind.EvaluateInitialEnergy( 	E 					, // Energy of the detected particle
+//																 	2*15*micrometer		, // Target Thickness at 0 degree
+//																	Theta				);
+															
+//						E= He3TargetGaz.EvaluateInitialEnergy(		E 					, // Energy of the detected particle
+//																	3*mm				, // Target Thickness at 0 degree
+//																	Theta				);
+				
+							
+					
+					
+					E=E+ThinSi;
+					
+					Ex = myReaction -> ReconstructRelativistic( E , Theta ) ;	
+					X = HitDirection . X();
+					Y = HitDirection . Y();	
+				}
+				
+			else if(ThinSi>0)
+				{
+				
+//					ThinSi= He3StripAl.EvaluateInitialEnergy(	ThinSi 				, // Energy of the detected particle
+//																2*0.4*micrometer	, // Target Thickness at 0 degree
+//																0					);
+//				
+//					ThinSi= He3TargetWind.EvaluateInitialEnergy( ThinSi 			, // Energy of the detected particle
+//																 2*15*micrometer	, // Target Thickness at 0 degree
+//																 Theta				);
+//															
+//						ThinSi= He3TargetGaz.EvaluateInitialEnergy(	ThinSi 			, // Energy of the detected particle
+//																3*mm				, // Target Thickness at 0 degree
+//																Theta				);
+				 
+					E= ThinSi;
+					
+					Ex = myReaction -> ReconstructRelativistic( E , Theta ) ;	
+					X = HitDirection . X();
+					Y = HitDirection . Y();	
+					
+				}
+			if(E>-1000 )
+				{
+				
+				
+				
+//				E= He3StripAl.EvaluateInitialEnergy(	E 					, // Energy of the detected particle
+//														2*0.4*micrometer	, 
+//														0					);	
+//				
+//				E= He3TargetWind.EvaluateInitialEnergy( E 					, // Energy of the detected particle
+//														2*15*micrometer		, // Target Thickness at 0 degree
+//														Theta				);
+//				
+//				E= He3TargetGaz.EvaluateInitialEnergy(	E 					, // Energy of the detected particle
+//														3*mm				, // Target Thickness at 0 degree
+//														Theta				);
+					
+				ResolTheta = Theta/deg - Init->GetICEmittedAngleThetaLabWorldFrame(0);
+				Ex = myReaction -> ReconstructRelativistic( E, Theta ) ;	
+				X = HitDirection . X();
+				Y = HitDirection . Y();	
+				
+				}	
+				
+			else {Ex=-100 ; X = -100 ; Y = -100 ;}
+								
 			EE = E ; TT = Theta/deg ;
-			if(E>-1000){
-			X = A . X();
-			Y = A . Y();}
-			else{X = -1000 ; Y = -1000;}
 			
 			RootOutput::getInstance()->GetTree()->Fill()	;
 			ThinSi = -1 ;
@@ -89,6 +170,6 @@ int main(int argc,char** argv)
 double ThetaCalculation (TVector3 A , TVector3 B)
 	{
 		double Theta = acos( (A.Dot(B)) / (A.Mag()*B.Mag()) ) ;
-		return Theta ;
+		return Theta*rad ;
 	}
 
diff --git a/NPLib/InitialConditions/TInitialConditions.h b/NPLib/InitialConditions/TInitialConditions.h
index 86260d82f9b683a8ffc75c4e7866ad700236d5fb..86db26ad31b7f5faaea8198d0e00481bb2e471bc 100644
--- a/NPLib/InitialConditions/TInitialConditions.h
+++ b/NPLib/InitialConditions/TInitialConditions.h
@@ -94,7 +94,7 @@ public:
    // Vertex of interaction
    Double_t GetICPositionX(Int_t i) 		{return fIC_Position_X.at(i);}
    Double_t GetICPositionY(Int_t i) 		{return fIC_Position_Y.at(i);}
-   Double_t GetICPositionZ(Int_t i)		{return fIC_Position_Z.at(i);}
+   Double_t GetICPositionZ(Int_t i)		    {return fIC_Position_Z.at(i);}
    // Incident particle angles
    Double_t GetICIncidentAngleTheta(Int_t i){return fIC_Incident_Angle_Theta.at(i);}
    Double_t GetICIncidentAnglePhi(Int_t i)	{return fIC_Incident_Angle_Phi.at(i);}
diff --git a/NPLib/MUST2/Must2Array.cxx b/NPLib/MUST2/Must2Array.cxx
index 26f51bae47a771c256e11d79998a6ac3247b0616..8041b3ae25d1a641577b3752687fe79941fbe360 100644
--- a/NPLib/MUST2/Must2Array.cxx
+++ b/NPLib/MUST2/Must2Array.cxx
@@ -373,10 +373,10 @@ void MUST2Array::AddTelescope(	TVector3 C_X1_Y1 		,
 		NumberOfTelescope++;
 	
 		//	Vector U on Telescope Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis)
-		TVector3 U = C_X128_Y1 - C_X1_Y1 				;	
-		U = -U.Unit()									;
+		TVector3 U = C_X1_Y1 - C_X128_Y1 				;	
+		U = U.Unit()									;
 		//	Vector V on Telescope Face (parallele to X Strip)
-		TVector3 V = C_X1_Y128 - C_X1_Y1 				;
+		TVector3 V = C_X128_Y128 - C_X128_Y1 				;
 		V = V.Unit()									;
 
 		//	Position Vector of Strip Center
diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx
index d478a388fb6903425f7c49b5668cde500fa7e964..4e14530371ac83ed11e306f0f4a6447fa25177e4 100644
--- a/NPLib/Tools/NPEnergyLoss.cxx
+++ b/NPLib/Tools/NPEnergyLoss.cxx
@@ -236,7 +236,7 @@ double EnergyLoss::EvaluateInitialEnergy(	double Energy 			, // Energy of the de
 		Energy = Energy / (double) fNumberOfMass ;
 	
 		if (Angle > halfpi) Angle = pi-Angle								;
-		TargetThickness = TargetThickness / ( 2*cos(Angle) ) 				;
+		TargetThickness = TargetThickness / ( cos(Angle) ) 				;
 		double SliceThickness = TargetThickness / (double)fNumberOfSlice 	;
 
 		Interpolator* s = new Interpolator( fEnergy , fdEdX_Total	)		;
diff --git a/NPLib/Tools/NPEnergyLoss.h b/NPLib/Tools/NPEnergyLoss.h
index 7ec6bb53f5e46923fa0ec4e27ed913b099246877..6388a12221827576ba9253265bdf0ad41b8ed48f 100644
--- a/NPLib/Tools/NPEnergyLoss.h
+++ b/NPLib/Tools/NPEnergyLoss.h
@@ -53,7 +53,7 @@ namespace NPL
 		   					const;
 		   					
 		   //	Evaluate Initial Energy of particle before crossing material knowing Angle, final Energy 
-		   //   and Target Thickness. Interaction is supposed to be in the middle of Target.
+		   //   and Target Thickness.
 		   double	EvaluateInitialEnergy(	double energy 			, // Energy of the detected particle
 		   									double TargetThickness	, // Target Thickness at 0 degree
 		   									double Angle			) // Particle Angle
diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc
index 018a695f4620ebdf9485585f55559c5e7730f1db..85b6a3fe84a204d0cae5a699a65c2596aeb1ff35 100644
--- a/NPSimulation/src/EventGeneratorTransfert.cc
+++ b/NPSimulation/src/EventGeneratorTransfert.cc
@@ -334,8 +334,10 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa
 	G4double Ydir =  cos( pi/2. - Beam_phiY   )								;
 	G4double Zdir =  sin( pi/2. - Beam_thetaX ) + sin(  pi/2. - Beam_phiY) 	;
 	
+	
 	G4double Beam_theta = acos ( Zdir / sqrt( Xdir*Xdir + Ydir*Ydir + Zdir*Zdir ) );
-	G4double Beam_phi   = atan2( Ydir , Xdir );   
+	
+	G4double Beam_phi   = atan2( Ydir , Xdir ) ;   
 
    // write angles to ROOT file
    m_InitConditions->SetICIncidentAngleTheta(Beam_theta / deg);
@@ -394,8 +396,7 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa
 
    // write angles/energy to ROOT file
    m_InitConditions->SetICEmittedAngleThetaLabIncidentFrame(ThetaLight / deg);
-   m_InitConditions->SetICEmittedEnergy(EnergyLight);
-
+   m_InitConditions->SetICEmittedEnergy(EnergyLight/MeV);
    //must shoot inside the target.
    G4double z0 = (-m_TargetThickness / 2 + RandFlat::shoot() * m_TargetThickness);
 
diff --git a/NPSimulation/src/ThinSi.cc b/NPSimulation/src/ThinSi.cc
index 432792a656dd312a37724d483a5eaecf7cc7859f..88e236f3fbb5029005967fb0747d278519f864d1 100644
--- a/NPSimulation/src/ThinSi.cc
+++ b/NPSimulation/src/ThinSi.cc
@@ -46,7 +46,7 @@ namespace THINSI
    // Geometry
    const G4double DetectorSize   	= 68*mm           ;
    const G4double SiliconThickness  = 20*micrometer   ;
-   const G4double FrameThickness    = 1*mm            ;
+   const G4double FrameThickness    = 3*mm            ;
    const G4double SiliconSize    	= 50*mm           ;
    const G4double AluThickness      = 0.4*micrometer  ;
    const G4int  NumberOfStrip    	= 32       		  ;
@@ -589,7 +589,7 @@ void ThinSi::ReadSensitive(const G4Event* event)
 {
    G4String DetectorNumber    ;
    bool  checkSi  = false  ;
-
+   m_Energy = 0 ;
 //////////////////////////////////////////////////////////////////////////////////////
 //////////////////////// Used to Read Event Map of detector //////////////////////////
 //////////////////////////////////////////////////////////////////////////////////////
@@ -598,6 +598,8 @@ void ThinSi::ReadSensitive(const G4Event* event)
    std::map<G4int, G4double*>::iterator Energy_itr     ;
    G4THitsMap<G4double>* EnergyHitMap              ;
 
+
+
 //////////////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////////////
    G4int HitNumber = 0;