diff --git a/Inputs/EventGenerator/10He.reaction b/Inputs/EventGenerator/10He.reaction
index 2c89aa85c0eaa4890c09a387316198103333f977..2c1407b0f4d2339fef7a3ead00cc6e449d203b9a 100644
--- a/Inputs/EventGenerator/10He.reaction
+++ b/Inputs/EventGenerator/10He.reaction
@@ -19,7 +19,7 @@ TransfertToResonance
 	ResonanceDecayA= 8
 	CrossSectionPath= 11Li(d,3He)10He.txt	
 	ShootLight= 1
-	ShootHeavy= 0
+	ShootHeavy= 1
 	ShootDecayProduct= 0
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis
index e7e4203f337d08defae3c3a0881fd02356ad2e21..d51b188c1934e2ff218e2522d79f8f1102b40e96 100755
Binary files a/NPAnalysis/10He_Riken/Analysis and b/NPAnalysis/10He_Riken/Analysis differ
diff --git a/NPAnalysis/10He_Riken/include/DetectorManager.hh b/NPAnalysis/10He_Riken/include/DetectorManager.hh
deleted file mode 100644
index eb49f01ef92509cd0531f4f12c7eace833047e61..0000000000000000000000000000000000000000
--- a/NPAnalysis/10He_Riken/include/DetectorManager.hh
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef DetectorManager_h
-#define DetectorManager_h
-
-//	NPL
-#include "VDetector.h"
-
-//	STL
-#include <string>
-#include <map>
-
-using namespace std ;
-using namespace NPA ;
-
-// This class manage a map of virtual detector
-
-class DetectorManager
-	{
-		public:
-			DetectorManager()		;
-			~DetectorManager()		;
-			
-		public:
-			//	Read stream at Path and pick-up Token declaration of Detector
-			void	ReadConfigurationFile(string Path)	;
-			void	BuildPhysicalEvent()				;
-			void	BuildSimplePhysicalEvent()			;
-			void	InitializeRootInput()				;
-			void	InitializeRootOutput()				;
-			void	AddDetector(string,VDetector*)		;
-			void	ClearEventPhysics()					;
-			void	ClearEventData()					;
-
-		public:	//	The map containning all detectors
-			//	Using a Map one can access to any detector using its name
-			map<string,VDetector*>	m_Detector	;
-				
-	};
-
-#endif 
diff --git a/NPAnalysis/10He_Riken/include/ObjectManager.hh b/NPAnalysis/10He_Riken/include/ObjectManager.hh
index a574b5198d434aee3dd43eb5d14532eb53345557..c61e480db4743573a1b0290c7757247286083df2 100644
--- a/NPAnalysis/10He_Riken/include/ObjectManager.hh
+++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh
@@ -6,7 +6,7 @@
 // -------------------------------------- VARIOUS INCLUDE ---------------------------------------
 
 // NPA
-#include "DetectorManager.hh"
+#include "DetectorManager.h"
 
 // STL C++
 #include <iostream>
diff --git a/NPAnalysis/10He_Riken/src/Analysis.cc b/NPAnalysis/10He_Riken/src/Analysis.cc
index fff2be80b9eface95fc334174485f0490c498e9a..09c9e496b761fb4e4ee10544d5a6787c2396ac46 100644
--- a/NPAnalysis/10He_Riken/src/Analysis.cc
+++ b/NPAnalysis/10He_Riken/src/Analysis.cc
@@ -30,7 +30,7 @@ int main(int argc,char** argv)
 	Li10Reaction	->	ReadConfigurationFile("9Li-dp-10Li.reaction")		;
 
 	//	Instantiate the detector using a file 
-	DetectorManager* myDetector = new DetectorManager 			  ;
+	NPA::DetectorManager* myDetector = new DetectorManager 			  ;
 	myDetector	->	ReadConfigurationFile(detectorfileName)		;
 
 	//	Instantiate the Calibration Manger using a file
@@ -107,6 +107,9 @@ int main(int argc,char** argv)
 			myDetector -> BuildPhysicalEvent()				;
 			////
 			
+			
+			
+			
 /*			// Target (from initial condition)
 			XTarget = Init->GetICPositionX(0);
 			YTarget = Init->GetICPositionY(0);
diff --git a/NPAnalysis/10He_Riken/src/DetectorManager.cc b/NPAnalysis/10He_Riken/src/DetectorManager.cc
deleted file mode 100644
index 49447f19abc5453ebf3dbf3898089d01e681ca37..0000000000000000000000000000000000000000
--- a/NPAnalysis/10He_Riken/src/DetectorManager.cc
+++ /dev/null
@@ -1,249 +0,0 @@
-#include "DetectorManager.hh"
-
-//	STL
-#include <iostream>
-#include <fstream>
-#include <cstdlib>
-
-//	Detector	
-#include "TMust2Physics.h"
-#include "TSSSDPhysics.h"
-#include "TPlasticPhysics.h"
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Default Constructor and Destructor
-DetectorManager::DetectorManager()	
-	{}
-	
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-DetectorManager::~DetectorManager()
-	{}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Read stream at ConfigFile and pick-up Token declaration of Detector
-void	DetectorManager::ReadConfigurationFile(string Path)	
-	{
-		////////General Reading needs////////
-	   string LineBuffer;
-	   string DataBuffer;
-
-	   /////////Boolean////////////////////
-	   bool MUST2           		= false  ;
-	   bool AddThinSi       		= false  ;
-	   bool ScintillatorPlastic	= false  ;
-	   bool GeneralTarget   		= false  ;
-	   bool GPDTracker      		= false  ;	// Gaspard Tracker
-	   //////////////////////////////////////////////////////////////////////////////////////////
-	   // added by Nicolas [07/05/09]
-	   string GlobalPath = getenv("NPTOOL");
-	   Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path;
-	   ifstream ConfigFile;
-	   ConfigFile.open(Path.c_str());
-
-	   if (ConfigFile.is_open())
-	   	{
-	   		cout << "/////////////////////////////" << endl;
-	      	cout << " Configuration file " << Path << " loading " << endl;
-	   	}	
-	   	
-	   else 
-	   	{
-	      cout << " Error, no configuration file" << Path << " found" << endl;
-	      return;
-	   	}
-
-
-	   while (!ConfigFile.eof()) {
-	      //Pick-up next line
-	      getline(ConfigFile, LineBuffer);cout << LineBuffer<<endl;
-	      //Search for comment Symbol: %
-	      if (LineBuffer.compare(0, 1, "%") == 0) {   /*Do  Nothing*/ ;}
-
-	    /*  ////////////////////////////////////////////
-	      //////////// Search for Gaspard ////////////
-	      ////////////////////////////////////////////
-	      else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) {
-	         GPDTracker = true ;
-	         cout << "//////// Gaspard Tracker ////////" << endl   ;
-
-	         // Instantiate the new array as a VDetector Object
-	         VDetector* myDetector = new GaspardTracker()                  ;
-
-	         // Read Position of Telescope
-	         ConfigFile.close()                                 ;
-	         myDetector->ReadConfiguration(Path)                   ;
-	         ConfigFile.open(Path.c_str())                      ;
-
-	         // Add array to the VDetector Vector
-	         AddDetector(myDetector)                            ;
-	      }*/
-
-	      ////////////////////////////////////////////
-	      //////// Search for MUST2 Array  ////////
-	      ////////////////////////////////////////////
-	      else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) {
-	         MUST2 = true ;
-	         cout << "//////// MUST2 Array ////////" << endl   << endl   ;
-
-	         // Instantiate the new array as a VDetector Object
-	         VDetector* myDetector = new TMust2Physics()                 ;
-
-	         // Read Position of Telescope
-	         ConfigFile.close()                                    ;
-	         myDetector->ReadConfiguration(Path)                      ;
-	         ConfigFile.open(Path.c_str())                         ;
-
-	         // Add array to the VDetector Vector
-	         AddDetector("MUST2" , myDetector)                               ;
-	      }
-
-	    	////////////////////////////////////////////
-	      ////////// Search for ThinSi (SSSD)/////////
-	      ////////////////////////////////////////////
-	      else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) {
-	         AddThinSi = true ;
-	         cout << "//////// Thin Si ////////" << endl << endl   ;
-
-	         // Instantiate the new array as a VDetector Object
-	         VDetector* myDetector = new TSSSDPhysics()                  ;
-
-	         // Read Position of Telescope
-	         ConfigFile.close()                                 ;
-	         myDetector->ReadConfiguration(Path)                   ;
-	         ConfigFile.open(Path.c_str())                      ;
-
-	         // Add array to the VDetector Vector
-	         AddDetector("SSSD",myDetector)                            ;
-	      }
-	      
-	      
-	      ////////////////////////////////////////////
-	      ///////////// Search for Plastic ///////////
-	      ////////////////////////////////////////////
-	      else if (LineBuffer.compare(0, 19, "ScintillatorPlastic") == 0 && ScintillatorPlastic == false) {
-	         ScintillatorPlastic = true 														;
-	         cout << "//////// Plastic ////////" << endl << endl   	;
-
-	         // Instantiate the new array as a VDetector Object
-	         VDetector* myDetector = new TPlasticPhysics()          ;
-	         // Read Position of Telescope
-	         ConfigFile.close()                                 		;
-	         myDetector->ReadConfiguration(Path)                   	;
-	         ConfigFile.open(Path.c_str())                      		;
-
-	         // Add array to the VDetector Vector
-	         AddDetector("Plastic",myDetector)                      ;
-	      }
-
-	 /*     ////////////////////////////////////////////
-	      //////////// Search for Target /////////////
-	      ////////////////////////////////////////////
-
-	      else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) {
-	         GeneralTarget = true ;
-	         cout << "////////// Target ///////////" << endl   << endl   ;
-
-	         // Instantiate the new array as a VDetector Objects
-	         VDetector* myDetector = new Target()                     ;
-
-	         // Read Position and target specification
-	         ConfigFile.close()                                    ;
-	         myDetector->ReadConfiguration(Path)                      ;
-	         ConfigFile.open(Path.c_str())                         ;
-
-	         m_TargetThickness = ((Target*)myDetector)->GetTargetThickness()   ;
-	         m_TargetRadius    = ((Target*)myDetector)->GetTargetRadius()   ;
-	         m_TargetX        = ((Target*)myDetector)->GetTargetX()         ;
-	         m_TargetY        = ((Target*)myDetector)->GetTargetY()         ;
-	         m_TargetZ        = ((Target*)myDetector)->GetTargetZ()         ;
-
-	         // Add target to the VDetector Vector
-	         AddDetector(myDetector)                               ;
-	      }*/
-
-	      //Nothing understandable
-	      //else ;
-	   }
-
-		ConfigFile.close();
-		
-		InitializeRootInput();
-		InitializeRootOutput();
-		
-		return   ;
-	}
-	
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-
-void	DetectorManager::BuildPhysicalEvent()						
-	{	
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->BuildPhysicalEvent()	;	
-			}           
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-	
-void	DetectorManager::BuildSimplePhysicalEvent()					
-	{
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->BuildSimplePhysicalEvent()	;	
-			}    
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-	
-void	DetectorManager::InitializeRootInput()						
-	{
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->InitializeRootInput()	;	
-			}    
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-
-void	DetectorManager::InitializeRootOutput()						
-	{
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->InitializeRootOutput()	;	
-			}   
-		
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-	
-void	DetectorManager::AddDetector(string DetectorName , VDetector* newDetector)	
-	{
-		m_Detector[DetectorName] = newDetector ;
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void	DetectorManager::ClearEventPhysics()	
-	{
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->ClearEventPhysics()	;	
-			}   
-		
-	}
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void	DetectorManager::ClearEventData()
-	{
-		map<string,VDetector*>::iterator it	;
-		
-		for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) 
-			{
-				it->second->ClearEventData()	;	
-			}   
-		
-	}
-			
diff --git a/NPAnalysis/10He_Riken/src/GNUmakefile b/NPAnalysis/10He_Riken/src/GNUmakefile
index 8241a5d3adecbc7f45413fd8667f6645dac119e0..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644
--- a/NPAnalysis/10He_Riken/src/GNUmakefile
+++ b/NPAnalysis/10He_Riken/src/GNUmakefile
@@ -16,12 +16,7 @@ CXXFLAGS += -I$(NPAINCLUDES)
 CXXFLAGS += -I$(NPLIB)/include
 
 LDFLAGS  = `root-config --libs` -lMathMore
-LDFLAGS+= -L$(NPLIB)/lib -lCalibrationManager -lVDetector -lIORoot -lReaction -lEnergyLoss \
-			-lMust2Data -lMust2Physics \
-			-lAnnularS1Data -lGaspardData \
-			-lPlasticData -lPlasticPhysics \
-			-lSSSDData -lSSSDPhysics \
-			-lInitialConditions -lInteractionCoordinates
+LDFLAGS+= `$(NPLIB)/liblist`
 LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) 
 
 SRC= $(wildcard *.cc)
diff --git a/NPAnalysis/Gaspard/include/DetectorManager.hh b/NPAnalysis/Gaspard/include/DetectorManager.hh
deleted file mode 100644
index ac36b1394a69114a0d893e527a2f03ee278842d7..0000000000000000000000000000000000000000
--- a/NPAnalysis/Gaspard/include/DetectorManager.hh
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef DetectorManager_h
-#define DetectorManager_h
-
-//	NPL
-#include "VDetector.h"
-
-//	STL
-#include <string>
-#include <map>
-
-using namespace std ;
-using namespace NPA ;
-
-// This class manage a map of virtual detector
-
-class DetectorManager
-{
-public:
-   DetectorManager();
-   ~DetectorManager();
-
-public:
-   // Read stream at Path and pick-up Token declaration of Detector
-   void	ReadConfigurationFile(string Path);
-   void	BuildPhysicalEvent();
-   void	BuildSimplePhysicalEvent();
-   void	InitializeRootInput();
-   void	InitializeRootOutput();
-   void	AddDetector(string,VDetector*);
-   void	ClearEventPhysics();
-   void	ClearEventData();
-
-public:	
-   // The map containning all detectors
-   // Using a Map one can access to any detector using its name
-   map<string,VDetector*> m_Detector;
-
-   // Special treatment for the target for the moment
-   // If necessary we should change it to treat it as 
-   // a full "detector"
-private:
-   double m_TargetThickness;
-   double m_TargetAngle;
-   double m_TargetRadius;
-   string m_TargetMaterial;
-   double m_TargetX;
-   double m_TargetY;
-   double m_TargetZ;
-
-public:
-   double GetTargetThickness()     {return m_TargetThickness;}
-   string GetTargetMaterial()      {return m_TargetMaterial;}
-   double GetTargetRadius()        {return m_TargetRadius;}
-   double GetTargetAngle()         {return m_TargetAngle;}
-   double GetTargetX()             {return m_TargetX;}
-   double GetTargetY()             {return m_TargetY;}
-   double GetTargetZ()             {return m_TargetZ;}
-};
-
-#endif 
diff --git a/NPAnalysis/Gaspard/include/ObjectManager.hh b/NPAnalysis/Gaspard/include/ObjectManager.hh
index 49ee8e46c54b88087f434cbcdddaa5cfe9ddd589..beaa696da29c95da8214bffd50b8990f0cd8217e 100644
--- a/NPAnalysis/Gaspard/include/ObjectManager.hh
+++ b/NPAnalysis/Gaspard/include/ObjectManager.hh
@@ -6,7 +6,7 @@
 // -------------------------------------- VARIOUS INCLUDE ---------------------------------------
 
 // NPA
-#include "DetectorManager.hh"
+#include "DetectorManager.h"
 #include "GaspardTracker.h"
 
 // STL C++
diff --git a/NPAnalysis/Gaspard/src/Analysis.cc b/NPAnalysis/Gaspard/src/Analysis.cc
index e48e84cd5552069a54884b68bdb8ff8c2b73487d..fd5fa023e10a1a60c23a092593a36c8a452ced69 100644
--- a/NPAnalysis/Gaspard/src/Analysis.cc
+++ b/NPAnalysis/Gaspard/src/Analysis.cc
@@ -27,7 +27,7 @@ int main(int argc,char** argv)
    myReaction->ReadConfigurationFile(reactionfileName);
 
    // Initialize the detector
-   DetectorManager* myDetector = new DetectorManager;
+   NPA::DetectorManager* myDetector = new DetectorManager;
    myDetector->ReadConfigurationFile(detectorfileName);
 
    // Print target thickness
@@ -58,7 +58,7 @@ int main(int argc,char** argv)
    cout << "Number of entries to be analysed: " << nentries << endl;
 
    for (int i = 0; i < nentries; i ++) {
-      if (i%10000 == 0 && i!=0) cout << "\r" << i << " analysed events" << flush;
+      if (i%10000 == 0 && i!=0) cout << "\r" << i << " analyzed events" << flush;
       chain -> GetEntry(i);
 
       // Treat Gaspard event
diff --git a/NPAnalysis/Gaspard/src/DetectorManager.cc b/NPAnalysis/Gaspard/src/DetectorManager.cc
deleted file mode 100644
index 353fd3437f0ffc71e57882b3142c71ed14941e91..0000000000000000000000000000000000000000
--- a/NPAnalysis/Gaspard/src/DetectorManager.cc
+++ /dev/null
@@ -1,309 +0,0 @@
-#include "DetectorManager.hh"
-
-//	STL
-#include <iostream>
-#include <fstream>
-#include <cstdlib>
-
-//	Detector	
-#include "TMust2Physics.h"
-#include "GaspardTracker.h"
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Default Constructor
-DetectorManager::DetectorManager()	
-{
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-//	Default Desstructor
-DetectorManager::~DetectorManager()
-{
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Read stream at ConfigFile and pick-up Token declaration of Detector
-void DetectorManager::ReadConfigurationFile(string Path)	
-{
-   ////////General Reading needs////////
-   string LineBuffer;
-   string DataBuffer;
-
-   /////////Boolean////////////////////
-   bool MUST2           = false  ;
-   bool AddThinSi       = false  ;
-   bool GeneralTarget   = false  ;
-   bool GPDTracker      = false  ;	// Gaspard Tracker
-
-   //////////////////////////////////////////////////////////////////////////////////////////
-   string GlobalPath = getenv("NPTOOL");
-   Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path;
-   ifstream ConfigFile;
-   ConfigFile.open(Path.c_str());
-
-   if (ConfigFile.is_open()) {
-      cout << "/////////////////////////////" << endl;
-      cout << " Configuration file " << Path << " loading " << endl;
-   }
-   else {
-      cout << " Error, no configuration file" << Path << " found" << endl;
-      return;
-   }
-
-
-   while (!ConfigFile.eof()) {
-      // Pick-up next line
-      getline(ConfigFile, LineBuffer);
-      //Search for comment Symbol: %
-      if (LineBuffer.compare(0, 1, "%") == 0) {   /*Do  Nothing*/ ;}
-
-      ////////////////////////////////////////////
-      //////////// Search for Gaspard ////////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) {
-         GPDTracker = true ;
-         cout << "//////// Gaspard Tracker ////////" << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new GaspardTracker();
-
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("GASPARD", myDetector);
-      }
-
-      ////////////////////////////////////////////
-      //////// Search for MUST2 Array  ////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) {
-         MUST2 = true;
-         cout << "//////// MUST2 Array ////////" << endl << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new TMust2Physics();
-
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("MUST2", myDetector);
-      }
-
-/*      ////////////////////////////////////////////
-      ////////// Search for Add.ThinSi ///////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) {
-         AddThinSi = true ;
-         cout << "//////// Thin Si ////////" << endl << endl   ;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new ThinSi()                  ;
-
-         // Read Position of Telescope
-         ConfigFile.close()                                 ;
-         myDetector->ReadConfiguration(Path)                   ;
-         ConfigFile.open(Path.c_str())                      ;
-
-         // Add array to the VDetector Vector
-         AddDetector(myDetector)                            ;
-      }
-*/
-      ////////////////////////////////////////////
-      //////////// Search for Target /////////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) {
-         GeneralTarget = true ;
-         cout << "////////// Target ///////////" << endl << endl;
-
-         // jump one line
-         getline(ConfigFile, LineBuffer);
-         getline(ConfigFile, LineBuffer);
-
-         bool check_Thickness = false;
-         bool check_Angle     = false;
-         bool check_Radius    = false;
-         bool check_Material  = false;
-         bool check_X         = false;
-         bool check_Y         = false;
-         bool check_Z         = false;
-
-         bool ReadingStatusTarget = true;
-         while (ReadingStatusTarget) {
-            ConfigFile >> DataBuffer;
-
-            // Search for comment Symbol %
-            if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;}
-
-            else if (DataBuffer.compare(0, 10, "THICKNESS=") == 0) {
-               check_Thickness = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetThickness = atof(DataBuffer.c_str()) * micrometer;
-               m_TargetThickness = atof(DataBuffer.c_str());
-               cout << "Target Thickness: " << m_TargetThickness << endl;
-            }
-
-            else if (DataBuffer.compare(0, 6, "ANGLE=") == 0) {
-               check_Angle = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetAngle = atof(DataBuffer.c_str()) * deg;
-               m_TargetAngle = atof(DataBuffer.c_str());
-               cout << "Target Angle: " << m_TargetAngle << endl;
-            }
-
-            else if (DataBuffer.compare(0, 7, "RADIUS=") == 0) {
-               check_Radius = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetRadius = atof(DataBuffer.c_str()) * mm;
-               m_TargetRadius = atof(DataBuffer.c_str());
-               cout << "Target Radius: " <<  m_TargetRadius << endl;
-            }
-
-            else if (DataBuffer.compare(0, 9, "MATERIAL=") == 0) {
-               check_Material = true ;
-               ConfigFile >> DataBuffer;
-               m_TargetMaterial = DataBuffer;
-               cout << "Target Material: " << m_TargetMaterial << endl;
-            }
-
-            else if (DataBuffer.compare(0, 2, "X=") == 0) {
-               check_X = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetX = atoi(DataBuffer.c_str()) * mm;
-               m_TargetX = atoi(DataBuffer.c_str());
-               cout << "Target Coordinates (mm): ( " << m_TargetX << " ; ";
-            }
-
-            else if (DataBuffer.compare(0, 2, "Y=") == 0) {
-               check_Y = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetY = atoi(DataBuffer.c_str()) * mm;
-               m_TargetY = atoi(DataBuffer.c_str());
-               cout << m_TargetY << " ; ";
-            }
-
-            else if (DataBuffer.compare(0, 2, "Z=") == 0) {
-               check_Z = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetZ = atoi(DataBuffer.c_str()) * mm;
-               m_TargetZ = atoi(DataBuffer.c_str());
-               cout  << m_TargetZ << " )" << endl;
-            }
-
-            ///////////////////////////////////////////////////
-            // If no Target Token and no comments, toggle out
-            else {
-               ReadingStatusTarget = false; 
-               cout << "WARNING : Wrong Token Sequence: Getting out " << endl;
-            }
-
-            ///////////////////////////////////////////////////
-            // If all Token found toggle out
-            if (check_Thickness && check_Radius && check_Material && check_X && check_Y && check_Z)
-               ReadingStatusTarget = false;
-
-         }
-      }
-
-      //Nothing understandable
-      //else ;
-   }
-
-   ConfigFile.close();
-
-   InitializeRootInput();
-   InitializeRootOutput();
-
-   return;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-void DetectorManager::BuildPhysicalEvent()						
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->BuildPhysicalEvent();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::BuildSimplePhysicalEvent()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->BuildSimplePhysicalEvent();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::InitializeRootInput()						
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->InitializeRootInput();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-void DetectorManager::InitializeRootOutput()	
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->InitializeRootOutput();
-   }   
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector)
-{
-   m_Detector[DetectorName] = newDetector;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::ClearEventPhysics()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->ClearEventPhysics();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::ClearEventData()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->ClearEventData();
-   }
-}
-			
diff --git a/NPAnalysis/Gaspard/src/GNUmakefile b/NPAnalysis/Gaspard/src/GNUmakefile
index ee550bf803157a516ec56215da44d876d99bbe28..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644
--- a/NPAnalysis/Gaspard/src/GNUmakefile
+++ b/NPAnalysis/Gaspard/src/GNUmakefile
@@ -16,11 +16,7 @@ CXXFLAGS += -I$(NPAINCLUDES)
 CXXFLAGS += -I$(NPLIB)/include
 
 LDFLAGS  = `root-config --libs` -lMathMore
-LDFLAGS+= -L$(NPLIB)/lib -lVDetector -lIORoot -lReaction -lEnergyLoss \
-			-lMust2Data -lMust2Physics \
-			-lGaspardData -lGaspardPhysics \
-			-lAnnularS1Data \
-			-lInitialConditions -lInteractionCoordinates
+LDFLAGS+= `$(NPLIB)/liblist`
 LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) 
 
 SRC= $(wildcard *.cc)
diff --git a/NPAnalysis/Template/include/DetectorManager.hh b/NPAnalysis/Template/include/DetectorManager.hh
deleted file mode 100644
index ac36b1394a69114a0d893e527a2f03ee278842d7..0000000000000000000000000000000000000000
--- a/NPAnalysis/Template/include/DetectorManager.hh
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef DetectorManager_h
-#define DetectorManager_h
-
-//	NPL
-#include "VDetector.h"
-
-//	STL
-#include <string>
-#include <map>
-
-using namespace std ;
-using namespace NPA ;
-
-// This class manage a map of virtual detector
-
-class DetectorManager
-{
-public:
-   DetectorManager();
-   ~DetectorManager();
-
-public:
-   // Read stream at Path and pick-up Token declaration of Detector
-   void	ReadConfigurationFile(string Path);
-   void	BuildPhysicalEvent();
-   void	BuildSimplePhysicalEvent();
-   void	InitializeRootInput();
-   void	InitializeRootOutput();
-   void	AddDetector(string,VDetector*);
-   void	ClearEventPhysics();
-   void	ClearEventData();
-
-public:	
-   // The map containning all detectors
-   // Using a Map one can access to any detector using its name
-   map<string,VDetector*> m_Detector;
-
-   // Special treatment for the target for the moment
-   // If necessary we should change it to treat it as 
-   // a full "detector"
-private:
-   double m_TargetThickness;
-   double m_TargetAngle;
-   double m_TargetRadius;
-   string m_TargetMaterial;
-   double m_TargetX;
-   double m_TargetY;
-   double m_TargetZ;
-
-public:
-   double GetTargetThickness()     {return m_TargetThickness;}
-   string GetTargetMaterial()      {return m_TargetMaterial;}
-   double GetTargetRadius()        {return m_TargetRadius;}
-   double GetTargetAngle()         {return m_TargetAngle;}
-   double GetTargetX()             {return m_TargetX;}
-   double GetTargetY()             {return m_TargetY;}
-   double GetTargetZ()             {return m_TargetZ;}
-};
-
-#endif 
diff --git a/NPAnalysis/Template/include/ObjectManager.hh b/NPAnalysis/Template/include/ObjectManager.hh
index e4691fc6829265abe30dd55a175e8bad8a7d391f..ee1ba8ba62fe8cd52b8a65687631edc5a5321de6 100644
--- a/NPAnalysis/Template/include/ObjectManager.hh
+++ b/NPAnalysis/Template/include/ObjectManager.hh
@@ -6,7 +6,7 @@
 // -------------------------------------- VARIOUS INCLUDE ---------------------------------------
 
 // NPA
-#include "DetectorManager.hh"
+#include "DetectorManager.h"
 
 // STL C++
 #include <iostream>
diff --git a/NPAnalysis/Template/src/Analysis.cc b/NPAnalysis/Template/src/Analysis.cc
index a22fa769ce0dcb2e48fa16b4b59c6a1fa7c84c6e..16f32300f37ea75d7e45962aa128f2c13448657c 100644
--- a/NPAnalysis/Template/src/Analysis.cc
+++ b/NPAnalysis/Template/src/Analysis.cc
@@ -27,7 +27,7 @@ int main(int argc,char** argv)
 	myReaction	->	ReadConfigurationFile(reactionfileName)		;
 
 		//	Instantiate the detector using a file 
-	DetectorManager* myDetector = new DetectorManager 			;
+	NPA::DetectorManager* myDetector = new DetectorManager 			;
 	myDetector	->	ReadConfigurationFile(detectorfileName)		;
 	
 	//	Get the formed Chained Tree and Treat it
@@ -35,8 +35,8 @@ int main(int argc,char** argv)
 	int i;	
 	for ( i = 0 ; i < Chain -> GetEntries() ; i ++ )
 		{
-			if( i%10000 == 0 && i!=0) cout << i << " Event annalysed " << endl ;						
-			Chain -> GetEntry(i);
+			if( i%10000 == 0 && i!=0) cout << "\r Event Analyzed:" << i << flush;					
+			Chain -> GetEntry(i);			
 			
 			myDetector -> ClearEventPhysics()				;
 			myDetector -> BuildPhysicalEvent()				;
diff --git a/NPAnalysis/Template/src/DetectorManager.cc b/NPAnalysis/Template/src/DetectorManager.cc
deleted file mode 100644
index 29791b9684f60c2a2fb5550e3aa36477a05008b0..0000000000000000000000000000000000000000
--- a/NPAnalysis/Template/src/DetectorManager.cc
+++ /dev/null
@@ -1,330 +0,0 @@
-#include "DetectorManager.hh"
-
-//	STL
-#include <iostream>
-#include <fstream>
-#include <cstdlib>
-
-//	Detector	
-#include "TMust2Physics.h"
-#include "TSSSDPhysics.h"
-#include "TPlasticPhysics.h"
-#include "GaspardTracker.h"
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Default Constructor
-DetectorManager::DetectorManager()	
-{
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-//	Default Desstructor
-DetectorManager::~DetectorManager()
-{
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-//	Read stream at ConfigFile and pick-up Token declaration of Detector
-void DetectorManager::ReadConfigurationFile(string Path)	
-{
-   ////////General Reading needs////////
-   string LineBuffer;
-   string DataBuffer;
-
-   /////////Boolean////////////////////
-   bool MUST2               = false;
-   bool AddThinSi           = false;
-   bool ScintillatorPlastic = false;
-   bool GeneralTarget       = false;
-   bool GPDTracker          = false;
-
-   //////////////////////////////////////////////////////////////////////////////////////////
-   string GlobalPath = getenv("NPTOOL");
-   Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path;
-   ifstream ConfigFile;
-   ConfigFile.open(Path.c_str());
-
-   if (ConfigFile.is_open()) {
-      cout << "/////////////////////////////" << endl;
-      cout << " Configuration file " << Path << " loading " << endl;
-   }
-   else {
-      cout << " Error, no configuration file" << Path << " found" << endl;
-      return;
-   }
-
-
-   while (!ConfigFile.eof()) {
-      // Pick-up next line
-      getline(ConfigFile, LineBuffer);
-      //Search for comment Symbol: %
-      if (LineBuffer.compare(0, 1, "%") == 0) {   /*Do  Nothing*/ ;}
-
-      ////////////////////////////////////////////
-      //////////// Search for Gaspard ////////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) {
-         GPDTracker = true ;
-         cout << "//////// Gaspard Tracker ////////" << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new GaspardTracker();
-
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("GASPARD", myDetector);
-      }
-
-      ////////////////////////////////////////////
-      //////// Search for MUST2 Array  ////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) {
-         MUST2 = true;
-         cout << "//////// MUST2 Array ////////" << endl << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new TMust2Physics();
-
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("MUST2", myDetector);
-      }
-
-      ////////////////////////////////////////////
-      ////////// Search for ThinSi (SSSD)/////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) {
-         AddThinSi = true ;
-         cout << "//////// Thin Si ////////" << endl << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new TSSSDPhysics();
-
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("SSSD", myDetector);
-      }
-
-      ////////////////////////////////////////////
-      ///////////// Search for Plastic ///////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 19, "ScintillatorPlastic") == 0 && ScintillatorPlastic == false) {
-         ScintillatorPlastic = true;
-         cout << "//////// Plastic ////////" << endl << endl;
-
-         // Instantiate the new array as a VDetector Object
-         VDetector* myDetector = new TPlasticPhysics();
-         // Read Position of Telescope
-         ConfigFile.close();
-         myDetector->ReadConfiguration(Path);
-         ConfigFile.open(Path.c_str());
-
-         // Add array to the VDetector Vector
-         AddDetector("Plastic", myDetector);
-      }
-
-      ////////////////////////////////////////////
-      //////////// Search for Target /////////////
-      ////////////////////////////////////////////
-      else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) {
-         GeneralTarget = true ;
-         cout << "////////// Target ///////////" << endl << endl;
-
-         // jump one line
-         getline(ConfigFile, LineBuffer);
-         getline(ConfigFile, LineBuffer);
-
-         bool check_Thickness = false;
-         bool check_Angle     = false;
-         bool check_Radius    = false;
-         bool check_Material  = false;
-         bool check_X         = false;
-         bool check_Y         = false;
-         bool check_Z         = false;
-
-         bool ReadingStatusTarget = true;
-         while (ReadingStatusTarget) {
-            ConfigFile >> DataBuffer;
-
-            // Search for comment Symbol %
-            if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;}
-
-            else if (DataBuffer.compare(0, 10, "THICKNESS=") == 0) {
-               check_Thickness = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetThickness = atof(DataBuffer.c_str()) * micrometer;
-               m_TargetThickness = atof(DataBuffer.c_str());
-               cout << "Target Thickness: " << m_TargetThickness << endl;
-            }
-
-            else if (DataBuffer.compare(0, 6, "ANGLE=") == 0) {
-               check_Angle = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetAngle = atof(DataBuffer.c_str()) * deg;
-               m_TargetAngle = atof(DataBuffer.c_str());
-               cout << "Target Angle: " << m_TargetAngle << endl;
-            }
-
-            else if (DataBuffer.compare(0, 7, "RADIUS=") == 0) {
-               check_Radius = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetRadius = atof(DataBuffer.c_str()) * mm;
-               m_TargetRadius = atof(DataBuffer.c_str());
-               cout << "Target Radius: " <<  m_TargetRadius << endl;
-            }
-
-            else if (DataBuffer.compare(0, 9, "MATERIAL=") == 0) {
-               check_Material = true ;
-               ConfigFile >> DataBuffer;
-               m_TargetMaterial = DataBuffer;
-               cout << "Target Material: " << m_TargetMaterial << endl;
-            }
-
-            else if (DataBuffer.compare(0, 2, "X=") == 0) {
-               check_X = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetX = atoi(DataBuffer.c_str()) * mm;
-               m_TargetX = atoi(DataBuffer.c_str());
-               cout << "Target Coordinates (mm): ( " << m_TargetX << " ; ";
-            }
-
-            else if (DataBuffer.compare(0, 2, "Y=") == 0) {
-               check_Y = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetY = atoi(DataBuffer.c_str()) * mm;
-               m_TargetY = atoi(DataBuffer.c_str());
-               cout << m_TargetY << " ; ";
-            }
-
-            else if (DataBuffer.compare(0, 2, "Z=") == 0) {
-               check_Z = true ;
-               ConfigFile >> DataBuffer;
-//               m_TargetZ = atoi(DataBuffer.c_str()) * mm;
-               m_TargetZ = atoi(DataBuffer.c_str());
-               cout  << m_TargetZ << " )" << endl;
-            }
-
-            ///////////////////////////////////////////////////
-            // If no Target Token and no comments, toggle out
-            else {
-               ReadingStatusTarget = false; 
-               cout << "WARNING : Wrong Token Sequence: Getting out " << endl;
-            }
-
-            ///////////////////////////////////////////////////
-            // If all Token found toggle out
-            if (check_Thickness && check_Radius && check_Material && check_X && check_Y && check_Z)
-               ReadingStatusTarget = false;
-
-         }
-      }
-
-      //Nothing understandable
-      //else ;
-   }
-
-   ConfigFile.close();
-
-   InitializeRootInput();
-   InitializeRootOutput();
-
-   return;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-void DetectorManager::BuildPhysicalEvent()						
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->BuildPhysicalEvent();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::BuildSimplePhysicalEvent()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->BuildSimplePhysicalEvent();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::InitializeRootInput()						
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->InitializeRootInput();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////	
-void DetectorManager::InitializeRootOutput()	
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->InitializeRootOutput();
-   }   
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector)
-{
-   m_Detector[DetectorName] = newDetector;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::ClearEventPhysics()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->ClearEventPhysics();
-   }
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DetectorManager::ClearEventData()
-{
-   map<string,VDetector*>::iterator it;
-
-   for (it = m_Detector.begin(); it != m_Detector.end(); ++it) {
-      it->second->ClearEventData();
-   }
-}
-			
diff --git a/NPAnalysis/Template/src/GNUmakefile b/NPAnalysis/Template/src/GNUmakefile
index 64161040364258195986d9b30dcdd687e7d3befb..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644
--- a/NPAnalysis/Template/src/GNUmakefile
+++ b/NPAnalysis/Template/src/GNUmakefile
@@ -16,13 +16,7 @@ CXXFLAGS += -I$(NPAINCLUDES)
 CXXFLAGS += -I$(NPLIB)/include
 
 LDFLAGS  = `root-config --libs` -lMathMore
-LDFLAGS+= -L$(NPLIB)/lib -lVDetector -lIORoot -lReaction -lEnergyLoss \
-			-lMust2Data -lMust2Physics \
-			-lSSSDData -lSSSDPhysics \
-			-lPlasticData -lPlasticPhysics \
-			-lAnnularS1Data \
-			-lGaspardData -lGaspardPhysics \
-			-lInitialConditions -lInteractionCoordinates
+LDFLAGS+= `$(NPLIB)/liblist`
 LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) 
 
 SRC= $(wildcard *.cc)
diff --git a/NPDocumentation/NPTool_UserGuide.tex b/NPDocumentation/NPTool_UserGuide.tex
index 5de778589ad18ba5aaceed155d4044b2a7486748..2cb7509df6eee96de09c591d4e0e9374d4162de0 100755
--- a/NPDocumentation/NPTool_UserGuide.tex
+++ b/NPDocumentation/NPTool_UserGuide.tex
@@ -38,9 +38,15 @@
 \chapter[NPTool]{NPTool}
 \section {Introduction}
 
-NPTool, Nuclear Physics Tool, aim to be a coherent set of programm usefull for Nuclear Physicist, especially those studying structure experimentally. Because each experiment is differents, people get used to exchange code and modified it to their needs. What NPT do is provinding an (try to be) universal framework so user can add their own functionnalities and share it with their collaborators. Geant4 and ROOT are now popular toolkit among the community, that's why NPTool use them widely and try to give a step by step process to use them efficiently.
+NPTool, Nuclear Physics Tool, aim to be a coherent set of programm usefull for Nuclear Physicist, especially those studying structure experimentally. 
+Because each experiment is differents, people get used to exchange code and modified it to their needs. 
+What NPT do is provinding an (try to be) universal framework so user can add their own functionnalities and share it with their collaborators. 
+Geant4 and ROOT are now popular toolkit among the community, that's why NPTool use them widely and try to give a step by step process to use them efficiently.
 
-In NPTool analysis and simulation are linked together. The proposed way of working is to generate an experiment like set of data and then annalysing with the future analysis code. Working this way help saving time by doing the biggest part of the analysis work in advance. It also help to understand what happen during analysis. 
+In NPTool analysis and simulation are linked together. 
+The proposed way of working is to generate an experiment like set of data and then annalysing with the future analysis code. 
+Working this way help saving time by doing the biggest part of the analysis work in advance. 
+It also help to understand what happen during analysis. 
 
 				\begin{figure}[!htbp]
 					\centering
@@ -57,9 +63,11 @@ In NPTool analysis and simulation are linked together. The proposed way of worki
 				
 				
 \section{The directory layout}
-	NPTool come with a specific directory layout. The different make file and source are made to use this layout, using the environment variable. Here is the standard layout:
+	NPTool come with a specific directory layout. 
+	The different make file and source are made to use this layout, using the environment variable. 
+	Here is the standard layout:
 		\begin{itemize}
-			\item[-] NPLib : hold the libraries used both in NPA and NPS (NB: those librairies can be use in your own independant code if you need)
+			\item[-] NPLib : hold the libraries used both in NPA and NPS (NB: those librairies can be use in your own independant code if needed)
 			\item[-] NPSimulation : hold the NPSimulation code
 			\item[-] NPAnalysis: this folder contain one folder for each analysis project, feel free to make new one on the basis of the template one for instance
 			\item[-] Inputs: this folder contain several folder, one for each type of intput, where you can find the input file used by the programm
@@ -69,29 +77,47 @@ In NPTool analysis and simulation are linked together. The proposed way of worki
 			\item[-] \_MTN: you can some time find this folder, it not exactly part of the NPTool project, and is used only if you are working on the monotone data base (ie: if you are a contributor)
 			\item[] 		
 		\end{itemize}
-
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter[NPLib]{NPLib}
+	\section{Introduction}
+	
+	NPLib is the core package of NPTool, it contain several classes used in both analysis and simulation programm.
+	NPTool versatility relly on this common core, its allow both programm to speak the same language in some way and also reduce drastically the amount of file since they are shared.
+	NPLib is widely build on top of ROOT,GSL and CLHEP (by order of importance), but not on Geant4.
+	
+	\section{the directory layout}
+	
+	\section{Step by step from TDUMMYDetectorData class}
+		\subsection{step 1}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 				
 \chapter[NPSimulation]{NPSimulation}
 
 \section{Introduction}
 
-NPSimulation is build on top of Geant4. It's provide a coherent and modular sets of classes that can be easily modified for your purpose.
+NPSimulation is build on top of Geant4. 
+It's provide a coherent and modular sets of classes that can be easily modified for your purpose.
 
 \subsection{ The way it's work }
 
-Because NPS is build on top of Geant4, you need C++ knowledge and Geant4 skills to understand how NPS work. NPS is a build as a modular basis that fit Nuclear Physicist needs: 
+Because NPS is build on top of Geant4, you need C++ knowledge and Geant4 skills to understand how NPS work. 
+NPS is a build as a modular basis that fit Nuclear Physicist needs: 
 	\begin{itemize}
 		\item Generate Nuclear Physics Event (such as a transfert, a beam, an ion source,... ) 
 		\item Mange Detectors geometry (Number of module, positionning...)
 	\end{itemize}
 NPTool
-NPS used two input files, one for the EventGenerator, and one for the Detectors Geometry. Those file are regroup in the \$NPT/Input directory wher you can find the EventGenerator and the DetectorConfiguration folder. If you want to add a new case you just have to create a new file in those directory. Note that files in the input directory are token readable file. It mean that they are not compile with the code, just read at each programm lauch. This way you can change the position of your detector or the energy of your beam for example without recompile the code. You can also quickly exchange your file with collaborators.
+NPS used two input files, one for the EventGenerator, and one for the Detectors Geometry. 
+Those file are regroup in the \$NPT/Input directory wher you can find the EventGenerator and the DetectorConfiguration folder. 
+If you want to add a new case you just have to create a new file in those directory. 
+Note that files in the input directory are token readable file. It mean that they are not compile with the code, just read at each programm lauch. 
+This way you can change the position of your detector or the energy of your beam for example without recompile the code. 
+You can also quickly exchange your file with collaborators.
 
 \section{ Running a simulation with existing detectors and event generator }
 
-Running a NPSimulation is quite simple, first, start a console terminal (shell) and put your self in the NPS directory. If you have add the environment variable correctly you can use the \emph{NPS} short cut that open the NPSimulation directory.
+Running a NPSimulation is quite simple, first, start a console terminal (shell) and put your self in the NPS directory.
+If you have add the environment variable correctly you can use the \emph{NPS} short cut that open the NPSimulation directory.
 	
 	\begin{verbatim}
 			[myName@myDomain ~]$ NPS
@@ -101,7 +127,9 @@ Running a NPSimulation is quite simple, first, start a console terminal (shell)
 	
 \emph{NB: order of arguments is essential. Both file need to be in the associated directory (see previous section).}
 
-\emph{Simulation} is their a shortcut (or alias) added in the environment variable. In fact Geant4 generate the binari file in the path \$NPS/bin/YourSystem/ where "YourSystem" depend of you compilator and OS (for example \emph{Linux-g++}). Thats why we use a convinient shortcut.
+\emph{Simulation} is their a shortcut (or alias) added in the environment variable. 
+In fact Geant4 generate the binari file in the path \$NPS/bin/YourSystem/ where "YourSystem" depend of you compilator and OS (for example \emph{Linux-g++}). 
+Thats why we use a convinient shortcut.
 
 After typing that command you will have a typical shell output of Geant4
 \begin{verbatim}
@@ -113,26 +141,37 @@ Geant4 version Name: geant4-09-01-patch-03 (12-September-2008)
 *************************************************************
 \end{verbatim}
 
-Followed by the echo of what are in your input file. Check their that the token are well detected and everything correctly instantiate.
+Followed by the echo of what are in your input file. 
+Check their that the token are well detected and everything correctly instantiate.
 
 Then you have some standard Geant4 output again and the idle consol where you can tape any of the common Geant4 command, such as launching a run of 100 event:
 \begin{verbatim}
 Idle> run/beamOn 100
 \end{verbatim}
 
-If you want to display the tracking of particle in the differente volume and check the Energy loss you can type the following line. Keep in mind that display slow down the computation.
+If you want to display the tracking of particle in the differente volume and check the Energy loss you can type the following line. 
+Keep in mind that display slow down the computation.
 
 \begin{verbatim}
 Idle> tracking/verbose 1
 \end{verbatim}
 
-The simulation will use the configured EventGenerator describe in your input file to generate events. Geant4 will deal with the particle tracking, energy loss, decay,... and the NPS framework generate an output ROOT file in the \$NPT/Output/Simulation directory. Default name for this file is mySimul.root. Since the file is regenerated at each execution, one need to rename it in order to keep it.
+The simulation will use the configured EventGenerator describe in your input file to generate events. 
+Geant4 will deal with the particle tracking, energy loss, decay,... 
+and the NPS framework generate an output ROOT file in the \$NPT/Output/Simulation directory. Default name for this file is mySimul.root. 
+Since the file is regenerated at each execution, one need to rename it in order to keep it.
 
 \section{ Adding a detector to NPS }
 
 \subsection{ the VDetector class}
 
-First you can have a look to the VDetector.hh file in the \$NPS/include directory. All the detector inherited from this Virtual class (V in VDetector stand for that, following the Geant4 naming convention). A virtual class described what should be the standard features of the inherited object. In this case their is 5 methods: Note thats those method are virtual, wich mean they are not implemented within this virtual class but in the daughter class. That allow to have the same method implemented differently for each detector. The " = 0 " following the class header mean that compilation failed if the daugter class do not have its own method definition (wich can be eventually empty). A Vector of VDetector is manage by the DetectorConstruction file (see DetectorConstruction.hh and .cc) wich call those method automatically.
+First you can have a look to the VDetector.hh file in the \$NPS/include directory. 
+All the detector inherited from this Virtual class (V in VDetector stand for that, following the Geant4 naming convention). 
+A virtual class described what should be the standard features of the inherited object. 
+In this case their is 5 methods: Note thats those method are virtual, wich mean they are not implemented within this virtual class but in the daughter class. 
+That allow to have the same method implemented differently for each detector. 
+The " = 0 " following the class header mean that compilation failed if the daugter class do not have its own method definition (wich can be eventually empty).
+A Vector of VDetector is manage by the DetectorConstruction file (see DetectorConstruction.hh and .cc) wich call those method automatically.
 
 	\begin{itemize}
 		\item[] ReadConfiguration(string): Read the file describing the Detector Configuration, ie: number of detector, position, and other option
@@ -140,25 +179,39 @@ First you can have a look to the VDetector.hh file in the \$NPS/include director
 		\item[] ReadSensitive(const G4Event*): Read the scorer associate the to the sensitive method
 	\end{itemize}
 	
-The two last methods are followed by a "{}" wich mean you are free to implemented or not. If not they will remain empty.
+The two last methods are followed by a "{}" wich mean you are free to implemented or not. 
+If not they will remain empty.
 	\begin{itemize}
 		\item[] InitializeRootOutput(): Instantiate a new Root Data object (see NPLib) and associate it to a new branch
 		\item[] InitializeScorers(): Initialize the scorer (see GeneralScorer.hh and Geant4 Documentation)
 	\end{itemize}
 
 \section{ Step by Step from the DUMMYDetector class}
-	The DUMMYDetector is a simple example of detector class manage in NPSimulation. We will use this class as a starting point for adding your new detector
+	The DUMMYDetector is a simple example of detector class manage in NPSimulation. 
+	We will use this class as a starting point for adding your new detector
 
 	\subsection{Step 1 : copying}
-		An easy step, just copy the file DummyDetector.cc and DummyDetector.hh in the NPSimulation/src and NPSimulation/include directory. Then rename them after your detector name, let say WonderfulDetector for the rest of the exemple. Open them with your favorite editor and use the replace function to replace all the DUMMYDetector occurence by your detector name, WondenfulDetector. You almost have finnish...
+		An easy step, just copy the file DummyDetector.cc and DummyDetector.hh in the NPSimulation/src and NPSimulation/include directory. 
+		Then rename them after your detector name, let say WonderfulDetector for the rest of the exemple. 
+		Open them with your favorite editor and use the replace function to replace all the DUMMYDetector occurence by your detector name, WondenfulDetector. 
+		You almost have finnish...
 
 	\subsection{Step 2 : adding your detector to the Detector Construction}
-		In order to allow the detector construction ton instantiate detector of yours you have to "tell him" to search for such detector. Open the DetectorConstruction.cc file in the NPSimulation/src directory. Have a look at the preprocessor includes, their is a list of all the detector avaible, just add a line with your file :
+		In order to allow the detector construction ton instantiate detector of yours you have to "tell him" to search for such detector. 
+		Open the DetectorConstruction.cc file in the NPSimulation/src directory. 
+		Have a look at the preprocessor includes, their is a list of all the detector avaible, just add a line with your file :
 	\begin{verbatim}
 	#include "WinderfulDetector.hh"
 	\end{verbatim}
 
-		Now DetectorConstruction know the WonderfulDetector class, but do not know how to find it in an input file. Have look to the DetectorConstruction::ReadConfigurationFile method. In this method Detector construction is reading the detector input file and looking for what kind of detector are presents. Every time a new kind of detector is detected, a new array of this kind is instantiate and inialize via is own ReadConfiguration method. For that, every class need an "array starting" token, wich should be different of the "module starting" token. In our case we will choose "WonderfulArray" as an array starting token. In order to avoid infinite loop of adding and adding the same detector again and again we need a boolean check, that simply check this kind of array is not already instantiate. First, add one of this boolean, lets called it cWonderful, your code should look like that
+		Now DetectorConstruction know the WonderfulDetector class, but do not know how to find it in an input file. 
+		Have look to the DetectorConstruction::ReadConfigurationFile method. 
+		In this method Detector construction is reading the detector input file and looking for what kind of detector are presents. 
+		Every time a new kind of detector is detected, a new array of this kind is instantiate and inialize via is own ReadConfiguration method. 
+		For that, every class need an "array starting" token, wich should be different of the "module starting" token. 
+		In our case we will choose "WonderfulArray" as an array starting token. 
+		In order to avoid infinite loop of adding and adding the same detector again and again we need a boolean check, that simply check this kind of array is not already instantiate. 
+		First, add one of this boolean, lets called it cWonderful, your code should look like that
 
 	\begin{verbatim}
 		/////////Checking Boolean////////////////////
@@ -228,10 +281,22 @@ The two last methods are followed by a "{}" wich mean you are free to implemente
 
 	\end{verbatim}
 
-	The TWonderfulDetectorData class probably do not exist yet. So you will have to create one, for that, follow the tutorial in the NPLib chapter. If this class do not exist and you do not want to create one right now, simply use the TDUMMYDetectorData class instead (do not forget to change also the preprocessort include as well).
+	The TWonderfulDetectorData class probably do not exist yet. 
+	So you will have to create one, for that, follow the tutorial in the NPLib chapter. 
+	If this class do not exist and you do not want to create one right now, simply use the TDUMMYDetectorData class instead (do not forget to change also the preprocessort include as well).
 
 	\subsection{Step 4 : Token definition}
-		NPS use input file with token detection. For each detector there is at least two token, we already see one in the previous part, the array starting token. You will need a second one, the module starting one, let choose "WonderfulModule". So have a look at the WonderfulDetector::ReadCOnfiguration method. In this method a loop over the config file is made, once the module starting bloc is fine, the ReadingStatus is set to true, wich mean we toggle to a module token search mode. Generally speaking the "\%" simbole is used as a comment symbole and every caracter after this symbole will be skipped until the end of line. This is the first token search. Then come the search for another module starting search, here a security to avoid wrong token sequence. Then come the list of all token. You can add as many token as you need following the same model. Just add one for exercise your self,
+		NPS use input file with token detection. 
+		For each detector there is at least two token, we already see one in the previous part, the array starting token. 
+		You will need a second one, the module starting one, let choose "WonderfulModule". 
+		So have a look at the WonderfulDetector::ReadCOnfiguration method. 
+		In this method a loop over the config file is made, once the module starting bloc is fine, the ReadingStatus is set to true, wich mean we toggle to a module token search mode. 
+		Generally speaking the "\%" simbole is used as a comment symbole and every caracter after this symbole will be skipped until the end of line. 
+		This is the first token search. 
+		Then come the search for another module starting search, here a security to avoid wrong token sequence. 
+		Then come the list of all token. 
+		You can add as many token as you need following the same model. 
+		Just add one for exercise your self,
 
 		\begin{description}
 			\item[1:] Copying the THETA token bloc
@@ -243,16 +308,23 @@ The two last methods are followed by a "{}" wich mean you are free to implemente
 		
 		\subsection{Step 5 : Material definition}
 
-		Just have a look at the InitializeMaterial function. You can here define as many as needed material after adding a private G4Material* object member to your classe. Remember to delete those new object in the detector destructor. Those material can then be used in the volume definition. This way each material are defined only one time per array, assuring a low number of material and therefor a low time running.
+		Just have a look at the InitializeMaterial function. 
+		You can here define as many as needed material after adding a private G4Material* object member to your classe. 
+		Remember to delete those new object in the detector destructor. Those material can then be used in the volume definition. 
+		This way each material are defined only one time per array, assuring a low number of material and therefor a low time running.
 
 		\subsection{Step 6 : Scorer definition}
 	
-	Let's define a Scorer as class object allowing you to perform any kind of measurement.NPSimulation used G4VPScorer (see the G4 documentation for more detail), understand Virtual Primitive Scorer. This virtual class allow Geant4 user to define the kind of scorer they want. Initially scorer were design to allow user to monitor some physical value inside a logical volume without using the ReadSensitive class and ReadOutGeometry. However, dure to their conception, those object was slow and running time quickly increased with the number of scorer... In NPSimulation we improve this system, using a new way of indexing data in scorer and delete them when they are not needed anymore and the running time is acceptable. Moreover, the Scorer simplify the code reading and allow user to come with their own set of scorer file dedicate to their detector. We implement some General Purpose scorer that you can use as well.
+	Let's define a Scorer as class object allowing you to perform any kind of measurement.NPSimulation used G4VPScorer (see the G4 documentation for more detail), understand Virtual Primitive Scorer. 
+	This virtual class allow Geant4 user to define the kind of scorer they want. 
+	Initially scorer were design to allow user to monitor some physical value inside a logical volume without using the ReadSensitive class and ReadOutGeometry. 
+	However, dure to their conception, those object was slow and running time quickly increased with the number of scorer... 
+	In NPSimulation we improve this system, using a new way of indexing data in scorer and delete them when they are not needed anymore and the running time is acceptable. 
+	Moreover, the Scorer simplify the code reading and allow user to come with their own set of scorer file dedicate to their detector. 
+	We implement some General Purpose scorer that you can use as well.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter[NPAnalysis]{NPAnalysis}
 
-\chapter[NPLib]{NPLib}
-
 \end{document}
 
diff --git a/NPEnvironment.bash b/NPEnvironment.bash
index cf4896c979f7f48e16239de60a7f73b7f1c54d52..7e7d5183cfe65ec7f8b4ea15a44bf4993eb59419 100644
--- a/NPEnvironment.bash
+++ b/NPEnvironment.bash
@@ -16,3 +16,4 @@ alias NPT='cd $NPTOOL'
 alias NPL='cd $NPLIB'	
 alias NPS='cd $NPSIM'	
 alias NPA='cd $NPANA'
+ 
diff --git a/NPEnvironment.tchrc b/NPEnvironment.tchrc
index 43f970f282a2c91c5e084885418bc38d3b21683c..61ebdb79c3e740adf51dd1aa66ae63f57e87eab6 100644
--- a/NPEnvironment.tchrc
+++ b/NPEnvironment.tchrc
@@ -7,6 +7,7 @@ setenv NPLIB $NPTOOL/NPLib
 setenv NPSIM $NPTOOL/NPSimulation
 setenv NPANA $NPTOOL/NPAnalysis
 setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:$NPLIB/lib
+source $NPLIB/lib/liblist
 
 # alias
 alias Simulation '$NPSIM/bin/$G4SYSTEM/Simulation'
diff --git a/NPLib/Plastic/TPlasticPhysics.cxx b/NPLib/Plastic/TPlasticPhysics.cxx
index 00ddd0bcf7cb5a0efefb39ca6cacb2004ab44119..093f1ee58f6e74d8d2d0b1353c2b662821bfcbe0 100644
--- a/NPLib/Plastic/TPlasticPhysics.cxx
+++ b/NPLib/Plastic/TPlasticPhysics.cxx
@@ -64,7 +64,6 @@ TPlasticPhysics::~TPlasticPhysics()
 void TPlasticPhysics::Clear()
 	{
 		DetectorNumber	.clear()	;
-		StripNumber			.clear()	;
 		Energy					.clear()	;
 		Time						.clear()	;
 	}
@@ -240,7 +239,6 @@ void TPlasticPhysics::BuildSimplePhysicalEvent()
 					{
 					
 						DetectorNumber	.push_back( EventData->GetPlasticNumber(i) )	;
-						StripNumber			.push_back( EventData->GetPlasticNumber(i)    )	;
 						
 						Energy					.push_back(
 							CalibrationManager::getInstance()->ApplyCalibration(	"Plastic/Detector" + itoa( EventData->GetPlasticNumber(i) ) +"_E",	
diff --git a/NPLib/Plastic/TPlasticPhysics.h b/NPLib/Plastic/TPlasticPhysics.h
index f1eedb765f96dee90100814473df8c6993fbc5fe..a00c34437ad3ac4caa7aee9195a241ec42fd6fdf 100644
--- a/NPLib/Plastic/TPlasticPhysics.h
+++ b/NPLib/Plastic/TPlasticPhysics.h
@@ -43,7 +43,6 @@ class TPlasticPhysics : public TObject, public NPA::VDetector
 	public:	//	Calibrated Data
 
 		vector<UShort_t>	DetectorNumber	;
-		vector<UShort_t>	StripNumber			;
 		vector<Double_t>	Energy					;
 		vector<Double_t>	Time						;
 
diff --git a/NPLib/README b/NPLib/README
index f66fd68731fd498febac8fdd513c7ba77166f0f6..d3f0c965dd76c4b9681bd58368bc6031a3a5c913 100644
--- a/NPLib/README
+++ b/NPLib/README
@@ -70,7 +70,11 @@ VI) InteractionCoordinates
 	output TTree of the G4 simulation.
 
 VII) CalibrationManager
-
+	This directory includes one library:
+	libCalibrationManager.so
+		This folder contain the the class object for managing calibration file.
+	A caliration manager singleton is instantiate in NPAnalysis project.
+	 
 VIII) DummyDetector
 	This directory includes one library:
 		libDUMMYDetector.so
@@ -114,3 +118,8 @@ XI) GASPARD
 		obtained from NPSimulation. This library is *only* used by NPAnalysis.
 
 XII) VDetector
+		This directory includes two libraries:
+		libVDetector.so and libDetectorManager.so
+			VDetector is a virtual class used for analysis purpose. It comes with several standards method definition called in analysis programm automatically.
+			Those method need to be implemented for each detector inheritted from the VDetector class.
+			DetectorManager is a class that manage a vector of VDetector and call there common functions.
diff --git a/NPLib/Tools/NPReaction.cxx b/NPLib/Tools/NPReaction.cxx
index 1eaec349f49062837ab76ddcebbb9574127b1d14..13121b3ec5736bede26ffdb8bb3803707e436e9b 100644
--- a/NPLib/Tools/NPReaction.cxx
+++ b/NPLib/Tools/NPReaction.cxx
@@ -62,6 +62,7 @@ Reaction::Reaction()
    fThetaCM    = 0;
    fExcitation = 0;
    fQValue     = 0;
+   initializePrecomputeVariable();
 }
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 
@@ -113,6 +114,7 @@ void Reaction::SetEveryThing(string name1, string name2, string name3, string na
    CrossSectionSize = CrossSectionBuffer.size();
    CrossSection = new double[CrossSectionSize] ;
    for(int i = 0 ; i <CrossSectionSize ; i++ )	CrossSection[i] = CrossSectionBuffer[i];
+   initializePrecomputeVariable();
 }
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 
@@ -136,33 +138,6 @@ void Reaction::KineRelativistic(double &ThetaLab3, double &EnergieLab3,
 // 2-body relativistic kinematics: direct + inverse
 // EnergieLab3,4 : lab energy in MeV of the 2 ejectiles
 // ThetaLab3,4   : angles in rad
-
-   double m1 = fNoy1->Mass();
-   double m2 = fNoy2->Mass();
-   double m3 = fNoy3->Mass();
-   double m4 = fNoy4->Mass() + fExcitation;
-
-   // center-of-mass velocity
-   double WtotLab = (fBeamEnergy + m1) + m2;
-   double P1 = sqrt(pow(fBeamEnergy,2) + 2*m1*fBeamEnergy);
-   double B = P1 / WtotLab;
-   double G = 1 / sqrt(1 - pow(B,2));
-
-   // total energy of the ejectiles in the center-of-mass
-   double W3cm = (pow(WtotLab,2) + pow(G,2)*(pow(m3,2) - pow(m4,2)))
-   		   / (2 * G * WtotLab);
-   double W4cm = (pow(WtotLab,2) + pow(G,2)*(pow(m4,2) - pow(m3,2)))
-   		   / (2 * G * WtotLab);
-
-   // velocity of the ejectiles in the center-of-mass
-   double beta3cm  = sqrt(1 - pow(m3,2)/pow(W3cm,2));
-   double beta4cm  = sqrt(1 - pow(m4,2)/pow(W4cm,2));
-//   double gamma3cm = 1 / sqrt(1 - pow(beta3cm,2));
-//   double gamma4cm = 1 / sqrt(1 - pow(beta4cm,2));
-
-   // Constants of the kinematics
-   double K3 = B / beta3cm;
-   double K4 = B / beta4cm;
    
    // case of inverse kinematics
    double theta = fThetaCM;
@@ -194,11 +169,6 @@ double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab) cons
 		// EnergyLab in MeV
 		// ThetaLab in rad
 
-		double m1 = fNoy1->Mass()	;
-		double m2 = fNoy2->Mass()	;
-		double m3 = fNoy3->Mass()	;
-		double m4 = fNoy4->Mass()	;	
-
 		double P1 = sqrt(2*m1*fBeamEnergy+(fBeamEnergy*fBeamEnergy))	;
 		double P3 = sqrt(2*m3*EnergyLab+(EnergyLab*EnergyLab))			;
 		double P4 = sqrt(P1*P1+P3*P3-(2*P1*P3*cos(ThetaLab)))			;
@@ -234,11 +204,7 @@ double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab) cons
 double  Reaction::EnergyLabToThetaCM( double EnergyLab , double ExcitationEnergy ) const
 	{
 		if(ExcitationEnergy == -500) ExcitationEnergy = fExcitation; 
-	
-		double m1 = fNoy1->Mass()				;
-		double m2 = fNoy2->Mass()				;
-		double m3 = fNoy3->Mass()				;
-		double m4 = (fNoy4->Mass()+ExcitationEnergy)	;
+
 		double E1 = (fBeamEnergy+m1)			;
 		double E3 = (EnergyLab+m3)				;
 		  
@@ -398,7 +364,34 @@ void Reaction::ReadConfigurationFile(string Path)
 	}
 	
 	
+void Reaction::initializePrecomputeVariable()
+	{
+		 m1 = fNoy1->Mass();
+		 m2 = fNoy2->Mass();
+		 m3 = fNoy3->Mass();
+		 m4 = fNoy4->Mass() + fExcitation;
+
+		// center-of-mass velocity
+		 WtotLab = (fBeamEnergy + m1) + m2;
+		 P1 = sqrt(pow(fBeamEnergy,2) + 2*m1*fBeamEnergy);
+		 B = P1 / WtotLab;
+		 G = 1 / sqrt(1 - pow(B,2));
+
+		// total energy of the ejectiles in the center-of-mass
+		 W3cm = (pow(WtotLab,2) + pow(G,2)*(pow(m3,2) - pow(m4,2)))
+			   / (2 * G * WtotLab);
+		 W4cm = (pow(WtotLab,2) + pow(G,2)*(pow(m4,2) - pow(m3,2)))
+			   / (2 * G * WtotLab);
+
+		// velocity of the ejectiles in the center-of-mass
+		 beta3cm  = sqrt(1 - pow(m3,2)/pow(W3cm,2));
+		 beta4cm  = sqrt(1 - pow(m4,2)/pow(W4cm,2));
+
+		// Constants of the kinematics
+		 K3 = B / beta3cm;
+		 K4 = B / beta4cm;
 	
+	}
 	
 	
 	
diff --git a/NPLib/Tools/NPReaction.h b/NPLib/Tools/NPReaction.h
index d8d638aea81d5107513ad4d008a428af8e34bf3b..20e1136b8bbf8acd7fa5ed467cb5619b49c10640 100644
--- a/NPLib/Tools/NPReaction.h
+++ b/NPLib/Tools/NPReaction.h
@@ -63,26 +63,54 @@ namespace NPL
 			double	 		fThetaCM			;	//	Center-of-mass angle in radian
 			double	 		fExcitation			;	//	Excitation energy in MeV
 			double*			CrossSection		;	//	Differential CrossSection
-			int				CrossSectionSize	;	//	Size of array containing Differention CrossSection
+			int					CrossSectionSize	;	//	Size of array containing Differention CrossSection
 		   
 		public:
 			// Getters and Setters
 			void				SetBeamEnergy		(double efais)	{fBeamEnergy = efais;}
 			void				SetThetaCM			(double angle)	{fThetaCM = angle;}
 			void				SetExcitation		(double exci)	{fExcitation = exci;}
-			double				GetBeamEnergy() 	const		 	{return fBeamEnergy;}
-			double				GetThetaCM() 		const 			{return fThetaCM;}
-			double				GetExcitation() 	const 			{return fExcitation;}
-			double				GetQValue() 		const 			{return fQValue;}
-			Nucleus*			GetNucleus1() 		const 			{return fNoy1;}
-			Nucleus*			GetNucleus2() 		const 			{return fNoy2;}
-			Nucleus*			GetNucleus3() 		const 			{return fNoy3;}
-			Nucleus*			GetNucleus4() 		const 			{return fNoy4;}  
-			double*				GetCrossSection()	const			{return CrossSection;} 
+			double			GetBeamEnergy() 	const		 	{return fBeamEnergy;}
+			double			GetThetaCM() 		const 			{return fThetaCM;}
+			double			GetExcitation() 	const 			{return fExcitation;}
+			double			GetQValue() 		const 			{return fQValue;}
+			Nucleus*		GetNucleus1() 		const 			{return fNoy1;}
+			Nucleus*		GetNucleus2() 		const 			{return fNoy2;}
+			Nucleus*		GetNucleus3() 		const 			{return fNoy3;}
+			Nucleus*		GetNucleus4() 		const 			{return fNoy4;}  
+			double*			GetCrossSection()	const			{return CrossSection;} 
 			int					GetCrossSectionSize()		const			{return CrossSectionSize;} 
 
-			//	Kinematics	//
-		   
+
+
+
+		private:	//	intern precompute variable
+			void initializePrecomputeVariable();
+			double m1 ;
+			double m2 ;
+			double m3 ;
+			double m4 ;
+
+			// center-of-mass velocity
+			double WtotLab ;
+			double P1 ;
+			double B ;
+			double G ;
+
+			// total energy of the ejectiles in the center-of-mass
+			double W3cm ;
+			double W4cm ;
+
+			// velocity of the ejectiles in the center-of-mass
+			double beta3cm  ;
+			double beta4cm  ;
+
+			// Constants of the kinematics
+			double K3 ;
+			double K4 ;
+
+			
+		 public:	//	Kinematics
 			//	Compute ThetaLab and EnergyLab for product of reaction
 			void		KineRelativistic(	double &ThetaLab3	, 
 										 	double &EnergieLab3	,
diff --git a/NPLib/VDetector/Makefile b/NPLib/VDetector/Makefile
index 22ae9d129fec0e265679f9ebce86304c5ea14ee5..b70479c536a19cbe4e6c0071e8f64331f6a90367 100644
--- a/NPLib/VDetector/Makefile
+++ b/NPLib/VDetector/Makefile
@@ -268,18 +268,23 @@ GLIBS         = $(ROOTGLIBS) $(SYSLIBS)
 INCLUDE		= -I$(CLHEP_BASE_DIR)/include
  
 #------------------------------------------------------------------------------
-SHARELIB      =  libVDetector.so 
+SHARELIB      =  libVDetector.so libDetectorManager.so
 
 all:            $(SHARELIB)
 #------------------------------------------------------------------------------
 ############### Detector ##############
 
-## MUST2 ##
+## VDetector ##
 libVDetector.so:	VDetector.o
 		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@	
+	
+## VDetector ##
+libDetectorManager.so:	DetectorManager.o
+		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@	
 			
 # dependances
 VDetector.o:		VDetector.cxx	VDetector.h
+DetectorManager.o: DetectorManager.cxx DetectorManager.h
 #######################################
 
 ############# Clean and More ##########
diff --git a/NPLib/liblist b/NPLib/liblist
new file mode 100755
index 0000000000000000000000000000000000000000..d043d2961764c6803724c932167dddfc7c1f2d87
--- /dev/null
+++ b/NPLib/liblist
@@ -0,0 +1,8 @@
+echo  -L$NPLIB/lib -lVDetector -lDetectorManager -lCalibrationManager -lIORoot -lReaction -lEnergyLoss \
+			-lMust2Data -lMust2Physics \
+			-lSSSDData -lSSSDPhysics \
+			-lPlasticData -lPlasticPhysics \
+			-lAnnularS1Data \
+			-lGaspardData -lGaspardPhysics \
+			-lDUMMYDetectorData \
+			-lInitialConditions -lInteractionCoordinates
diff --git a/NPSimulation/GNUmakefile b/NPSimulation/GNUmakefile
index 3d960a57eaa84261926d4b2d940602785eed134b..fb24e6a62bcdcd5af07c6b674298d5e14aad3d2d 100644
--- a/NPSimulation/GNUmakefile
+++ b/NPSimulation/GNUmakefile
@@ -1,6 +1,6 @@
 # $Id: GNUmakefile,v 1.1 1999/01/07 16:05:40 gunter Exp $
 # --------------------------------------------------------------
-# GNUmakefile for examples module.  Gabriele Cosmo, 06/04/98.
+# GNUmakefile based on examples module by Gabriele Cosmo, 06/04/98.
 # --------------------------------------------------------------
 
 name := Simulation
@@ -11,17 +11,15 @@ ifndef G4INSTALL
   G4INSTALL = ../../..
 endif
 
-#G4 work directory is the path where
-#Result of compilation is put
+# G4 work directory is the path where
+# Result of compilation is put in (./$G4WORKDIR/bin/$G4SYSTEM/)
 # to execute your programm : ./$G4WORKDIR/bin/$G4SYSTEM/Simulation xx.reaction xx.detector
 G4WORKDIR = ./
 
 CPPFLAGS += $(shell root-config --cflags) 
 CPPFLAGS += -I$(NPLIB)/include
-EXTRALIBS = $(shell root-config --glibs) 
-EXTRALIBS += -L$(NPLIB)/lib -lMust2Data -lAnnularS1Data -lGaspardData -lPlasticData -lDUMMYDetectorData -lSSSDData\
-		-lInitialConditions -lInteractionCoordinates \
-		-lReaction -lIORoot
+EXTRALIBS = $(shell root-config --glibs) -lMathMore
+EXTRALIBS += `$(NPLIB)/liblist`
 .PHONY: all
 all: lib bin