diff --git a/NPLib/Tiara/TTiaraBarrelPhysics.cxx b/NPLib/Tiara/TTiaraBarrelPhysics.cxx
index ab3322589cbef1e22b2a6b57e96b37ca071b6619..828ae0bcdafdb530b52bbb6a1b7621b1c7831f40 100644
--- a/NPLib/Tiara/TTiaraBarrelPhysics.cxx
+++ b/NPLib/Tiara/TTiaraBarrelPhysics.cxx
@@ -66,10 +66,10 @@ void TTiaraBarrelPhysics::BuildSimplePhysicalEvent(){
 
 ///////////////////////////////////////////////////////////////////////////
 void TTiaraBarrelPhysics::BuildPhysicalEvent(){
- PreTreat();
+  PreTreat();
 
 
- /*  
+  /*  
       if( CheckEvent() == 1 ){
       vector< TVector2 > couple = Match_Ring_Sector() ;
       EventMultiplicity = couple.size();
@@ -130,31 +130,29 @@ void TTiaraBarrelPhysics::PreTreat(){
 
   // Match Stick Calibration
   // Gain Calibration
-  
-  unsigned int  size = m_EventData-> GetFrontUpstreamEMult();
-  for(unsigned int i = 0 ; i < size; i++){  
-    double E = Cal_Strip_Upstream_E(i) ;
-    cout << m_EventData->GetFrontUpstreamEEnergy(i)  << " " << E << endl ;
-    if( m_EventData->GetFrontUpstreamEEnergy(i) > m_Strip_E_RAW_Threshold 
-        && E > m_Strip_E_Threshold){
-      m_PreTreatedData->SetFrontUpstreamEEnergy(E);
-      m_PreTreatedData->SetFrontUpstreamEDetectorNbr(m_EventData->GetFrontUpstreamEDetectorNbr(i));
-      m_PreTreatedData->SetFrontDownstreamEStripNbr(m_EventData->GetFrontDownstreamEStripNbr(i));
-    }
-  }
-  
-  size = m_EventData-> GetFrontDownstreamEMult();
-  for(unsigned int i = 0 ; i < size; i++){  
-    double E = Cal_Strip_Downstream_E(i) ;
-    if( m_EventData->GetFrontDownstreamEEnergy(i) > m_Strip_E_RAW_Threshold 
-        && E > m_Strip_E_Threshold){
-      m_PreTreatedData->SetFrontDownstreamEEnergy(E);
-      m_PreTreatedData->SetFrontDownstreamEDetectorNbr(m_EventData->GetFrontDownstreamEDetectorNbr(i));
-      m_PreTreatedData->SetFrontDownstreamEStripNbr(m_EventData->GetFrontDownstreamEStripNbr(i));
+
+  unsigned int sizeU = m_EventData-> GetFrontUpstreamEMult();
+  unsigned int sizeD = m_EventData-> GetFrontDownstreamEMult();
+
+  for(unsigned int i = 0 ; i < sizeU ; i++){  
+    for(unsigned int j = 0 ; j < sizeD ; j++){  
+      double EU = Cal_Strip_Upstream_E(i) ;
+      double ED = Cal_Strip_Downstream_E(j) ;
+      if(EU>0 && ED>0)
+      if(m_EventData->GetFrontUpstreamEDetectorNbr(i) == m_EventData->GetFrontDownstreamEDetectorNbr(j) )
+        if(m_EventData->GetFrontUpstreamEStripNbr(i) == m_EventData->GetFrontDownstreamEStripNbr(j)){
+          Strip_E.push_back(EU+ED);
+
+                   double POS =CalibrationManager::getInstance()->ApplyResistivePositionCalibration("TIARABARREL/B"+itoa(m_EventData->GetFrontUpstreamEDetectorNbr(i))+"_STRIP"+itoa(m_EventData->GetFrontUpstreamEDetectorNbr(i))+"_POS",(ED-EU)/(EU+ED));
+
+           Strip_Pos.push_back(POS); 
+          Strip_N.push_back(m_EventData->GetFrontUpstreamEStripNbr(i));
+          DetectorNumber.push_back(m_EventData->GetFrontUpstreamEDetectorNbr(i));
+      }
     }
   }
-
   // Position
+  
   // Ballistic Deficit correction
 }
 
@@ -479,26 +477,15 @@ map< vector<TString>,TH1* > TTiaraBarrelPhysics::GetSpectra() {
 ///////////////////////////////////////////////////////////////////////////
 void TTiaraBarrelPhysics::AddParameterToCalibrationManager(){
   CalibrationManager* Cal = CalibrationManager::getInstance();
-
-
   // E and T
   for(int i = 0 ; i < m_NumberOfDetector ; ++i){
     for( int j = 0 ; j < 4 ; ++j){
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_UPSTREAM"+itoa(j+1)+"_E","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_E")   ;
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_UPSTREAM"+itoa(j+1)+"_T","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_T")   ;
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_E","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_E")   ;
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_T","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_T")   ;
-    }
-  }
+      Cal->AddParameter("TIARABARREL","B"+itoa(i+1)+"_UPSTREAM"+itoa(j+1)+"_E","TIARABARREL_B"+itoa(i+1)+"_UPSTREAM"+itoa(j+1)+"_E")   ;
+      Cal->AddParameter("TIARABARREL","B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_E","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_E")   ;
 
-  // POS
-  for(int i = 0 ; i < m_NumberOfDetector ; ++i){
-    for( int j = 0 ; j < 4 ; ++j){
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_UPSTREAM"+itoa(j+1)+"_POS","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_POS")   ;
-      Cal->AddParameter("TIARABARREL_B", itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_POS","TIARABARREL_B"+itoa(i+1)+"_DOWNSTREAM"+itoa(j+1)+"_POS")   ;
+      Cal->AddParameter("TIARABARREL","B"+itoa(i+1)+"_STRIP"+itoa(j+1)+"_POS","TIARABARREL_B"+itoa(i+1)+"_STRIP"+itoa(j+1)+"_POS")   ;
     }
   }
-
   return;
 
 }
@@ -632,12 +619,12 @@ string TTiaraBarrelPhysics::itoa(unsigned int value){
 }
 ///////////////////////////////////////////////////////////////////////////////
 double TTiaraBarrelPhysics::Cal_Strip_Upstream_E(const int i){
-  return CalibrationManager::getInstance()->ApplyCalibration(   "TIARABARREL/B" + itoa( m_EventData->GetFrontUpstreamEDetectorNbr(i) ) + "_UPSTREAM" + itoa( m_EventData->GetFrontUpstreamEStripNbr(i) ) + "_E",
+  return CalibrationManager::getInstance()->ApplyCalibration("TIARABARREL/B" + itoa( m_EventData->GetFrontUpstreamEDetectorNbr(i) ) + "_UPSTREAM" + itoa( m_EventData->GetFrontUpstreamEStripNbr(i) ) + "_E",
       m_EventData->GetFrontUpstreamEEnergy(i) );
 }
 ///////////////////////////////////////////////////////////////////////////////
 double TTiaraBarrelPhysics::Cal_Strip_Downstream_E(const int i){
-  return CalibrationManager::getInstance()->ApplyCalibration(   "TIARABARREL/B" + itoa( m_EventData->GetFrontDownstreamEDetectorNbr(i) ) + "_DOWNSTREAM" + itoa( m_EventData->GetFrontDownstreamEStripNbr(i) ) + "_E",
+  return CalibrationManager::getInstance()->ApplyCalibration("TIARABARREL/B" + itoa( m_EventData->GetFrontDownstreamEDetectorNbr(i) ) + "_DOWNSTREAM" + itoa( m_EventData->GetFrontDownstreamEStripNbr(i) ) + "_E",
       m_EventData->GetFrontDownstreamEEnergy(i) );
 }
 
diff --git a/NPLib/Tiara/TTiaraBarrelSpectra.cxx b/NPLib/Tiara/TTiaraBarrelSpectra.cxx
index e4a3ce93ab95350eb3d449a92f3c621df16bac56..40b1c26b11dfe65418074072e88135179dfa2f79 100644
--- a/NPLib/Tiara/TTiaraBarrelSpectra.cxx
+++ b/NPLib/Tiara/TTiaraBarrelSpectra.cxx
@@ -120,6 +120,17 @@ void TTiaraBarrelSpectra::InitPreTreatedSpectra(){
 
 ////////////////////////////////////////////////////////////////////////////////
 void TTiaraBarrelSpectra::InitPhysicsSpectra(){
+string BaseFamily = "/TIARA/BARREL/PHY/";
+string name ;
+  //// E POS ////
+  // Inner Barrel
+  for(unsigned int i  = 0 ; i < fNumberOfDetector ; i++){
+    for(unsigned int j = 0 ; j < fInnerBarrelStrip;j++){
+      name = Form("IB%d_EPOS%d_CAL",i+1,j+1);
+      AddHisto2D(name, name,10000,-10,10,100,0,10,BaseFamily);
+    }
+  }
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -209,22 +220,20 @@ void TTiaraBarrelSpectra::FillRawSpectra(TTiaraBarrelData* RawData){
 
 ////////////////////////////////////////////////////////////////////////////////
 void TTiaraBarrelSpectra::FillPreTreatedSpectra(TTiaraBarrelData* PreTreatedData){
-/*string BaseFamily = "/TIARA/BARREL/CAL/";
-string name ;
-  //// E POS ////
-  // Inner Barrel
-  for(unsigned int i  = 0 ; i < fNumberOfDetector ; i++){
-    for(unsigned int j = 0 ; j < fInnerBarrelStrip;j++){
-      name = Form("IB%d_EPOS%d_CAL",i+1,j+1);
-      AddHisto2D(name, name,100,0,1,100,0,50,BaseFamily+"POS");
-    }
-  }
-
-*/
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 void TTiaraBarrelSpectra::FillPhysicsSpectra(TTiaraBarrelPhysics* Physics){
+string family = "/TIARA/BARREL/PHY/";
+string name ;
+  //// E POS ////
+  // Inner Barrel
+  unsigned int size = Physics->Strip_E.size();
+  for(unsigned int i  = 0 ; i < Physics->Strip_E.size() ; i++){
+      name = Form("IB%d_EPOS%d_CAL",Physics->DetectorNumber[i],Physics->Strip_N[i]);
+        GetHisto(family,name)
+        ->Fill(Physics->Strip_Pos[i],Physics->Strip_E[i]);
+    }
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/NPLib/Tools/CalibrationManager.cxx b/NPLib/Tools/CalibrationManager.cxx
index 0b96798ee9bfdd545a986eeab08adaf0d0da630d..a03478b2a61c9ae7b8be73053c8fb64a4997fd1e 100644
--- a/NPLib/Tools/CalibrationManager.cxx
+++ b/NPLib/Tools/CalibrationManager.cxx
@@ -62,8 +62,7 @@ CalibrationManager::CalibrationManager(string configFileName)
       return;
    }
 
-   else 
-   {
+   else { 
       cout << "Reading list of file from :" << configFileName << endl; 
       while (!inputConfigFile.eof()) {
          getline(inputConfigFile, lineBuffer);
@@ -175,16 +174,14 @@ void CalibrationManager::LoadParameterFromFile()
                         
                     //   Search word in the token list
                     it=fToken.find(DataBuffer);
-                  
-                    //   if the word is find, values are read
+                                      //   if the word is find, values are read
                     if( it!=fToken.end() )
-                       {
+                      { 
                           vector<double> Coeff ;
-                          while( !theLine.eof() )
-                             {
+                          while( !theLine.eof() ){
                                 theLine >> DataBuffer ; Coeff.push_back( atof(DataBuffer.c_str()) ) ;
-                             }
-                           
+                          }
+                         
                           //   Check this parameter is not already define
                           if( fCalibrationCoeff.find(it->second) != fCalibrationCoeff.end() ) 
                              cout << "WARNING: Parameter " << it->second << " Already found. It will be rewritted " << endl;
@@ -214,9 +211,10 @@ double CalibrationManager::ApplyCalibration(const string& ParameterPath , const
       // If the find methods return the end iterator it's mean the parameter was not found
       if(it == fCalibrationCoeff.end() )
          {
-         /*   cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ;
+       /*     cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ;
             cout << " ERROR: PARAMETER " << ParameterPath << " IS NOT FOUND IN THE CALIBRATION DATA BASE  " << endl ;
-            cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ;*/
+            cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl;
+exit(1); */
             
             return RawValue ;
          }
@@ -238,6 +236,38 @@ double CalibrationManager::ApplyCalibration(const string& ParameterPath , const
       
    }
 
+//////////////////////////////////////////////////////////////////
+double CalibrationManager::ApplyResistivePositionCalibration(const string& ParameterPath , const double& DeltaRawValue){
+      map< string , vector<double> >::iterator it ;
+      
+      //   Find the good parameter in the Map
+      // Using Find method of stl is the fastest way
+      it = fCalibrationCoeff.find(ParameterPath)  ;
+      
+      // If the find methods return the end iterator it's mean the parameter was not found
+      if(it == fCalibrationCoeff.end() )
+         {
+       /*     cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ;
+            cout << " ERROR: PARAMETER " << ParameterPath << " IS NOT FOUND IN THE CALIBRATION DATA BASE  " << endl ;
+            cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl;
+exit(1); */
+            
+            return DeltaRawValue ;
+         }
+      
+      // Else we take the second part of the element (first is index, ie: parameter path)
+      // Second is the vector of Coeff
+      vector<double> Coeff = it->second  ;
+      
+      // Check that the number of coeff is ok
+      if(Coeff.size()!=2) return DeltaRawValue ; 
+      
+      double CalibratedValue = (DeltaRawValue-Coeff[0])/(Coeff[1]-Coeff[0]) ;
+      return CalibratedValue ;
+      
+   }
+
+
 //////////////////////////////////////////////////////////////////
 bool CalibrationManager::ApplyThreshold(const string& ParameterPath, const double& RawValue)
 {
diff --git a/NPLib/Tools/CalibrationManager.h b/NPLib/Tools/CalibrationManager.h
index 02b82e75843d8deb51d573b33c979e4c72f500d8..df2c0a6052da7b68523db215e10a9fcaf8576587 100644
--- a/NPLib/Tools/CalibrationManager.h
+++ b/NPLib/Tools/CalibrationManager.h
@@ -59,12 +59,9 @@ class CalibrationManager
          // call like : myCalibrationManager->ApplyCalibration( "MUST2/Telescope5_Si_X38_E" , RawEnergy )
          // return the Calibrated value
          double ApplyCalibration(const string& ParameterPath , const double& RawValue);
-
+         double ApplyResistivePositionCalibration(const string& ParameterPath , const double& RawValue);
          bool ApplyThreshold(const string& ParameterPath, const double& RawValue);
-
          double GetPedestal(const string& ParameterPath);
-
-      
       
       public:   //   To be called after initialisation
          //   Loop over the file list and catch the file used for calibration