diff --git a/NPLib/MUST2/TMust2Physics.cxx b/NPLib/MUST2/TMust2Physics.cxx
index 7371b1082a405223245369fa434584db7d2181e7..8d92e2228cf8cb0c4d0ab6e28ba355a77fdc4850 100644
--- a/NPLib/MUST2/TMust2Physics.cxx
+++ b/NPLib/MUST2/TMust2Physics.cxx
@@ -43,7 +43,7 @@ TMust2Physics::TMust2Physics()
 		EventData 					= new TMust2Data	;
 		PreTreatedData			= new TMust2Data	;
 		EventPhysics 				= this						;
-		NumberOfTelescope		  = 0								;
+		NumberOfTelescope		= 0								;
 		m_MaximumStripMultiplicityAllowed = 0	;
 		m_StripEnergyMatchingTolerance    = 0 ;	
 //                ReadAnalysisConfig();
@@ -1055,12 +1055,9 @@ void TMust2Physics::ReadConfiguration(string Path)
 		         	}
 		         
 		}
-		        
-//		InitializeStandardParameter();        
-//                ReadAnalysisConfig();
 	}
 		InitializeStandardParameter();        
-                ReadAnalysisConfig();
+    ReadAnalysisConfig();
 	
 	cout << endl << "/////////////////////////////" << endl << endl;
 
diff --git a/NPLib/SSSD/TSSSDPhysics.cxx b/NPLib/SSSD/TSSSDPhysics.cxx
index 9ba970a25192fdd0ecb925002a526f0fee21e616..0acd6498c7c100573c20f7ceee743fc34145ed9d 100644
--- a/NPLib/SSSD/TSSSDPhysics.cxx
+++ b/NPLib/SSSD/TSSSDPhysics.cxx
@@ -19,55 +19,58 @@
  *                                                                           *
  *                                                                           *
  *****************************************************************************/
-//	NPL
+//  NPL
 #include "TSSSDPhysics.h"
 #include "RootOutput.h"
 #include "RootInput.h"
 
-//	STL
+//  STL
 #include <iostream>
 #include <sstream>
 #include <fstream>
 #include <limits>
 #include <stdlib.h>
 using namespace std;
-
-//	ROOT
+using namespace LOCAL;
+//  ROOT
 #include "TChain.h"
 
-//	tranform an integer to a string
-		string itoa(int value)
-			{
-			  std::ostringstream o;
-			
-			  if (!(o << value))
-			    return ""	;
-			    
-			  return o.str();
-			}
+//  tranform an integer to a string
+    string itoa(int value)
+      {
+        std::ostringstream o;
+      
+        if (!(o << value))
+          return ""  ;
+          
+        return o.str();
+      }
 
 ClassImp(TSSSDPhysics)
 ///////////////////////////////////////////////////////////////////////////
 TSSSDPhysics::TSSSDPhysics()
-	{		
-		NumberOfDetector = 0 				;
-		EventData = new TSSSDData		;
-		EventPhysics = this					;
-	}
+  {    
+    NumberOfDetector = 0         ;
+    EventData = new TSSSDData    ;
+    PreTreatedData = new TSSSDData    ;
+    EventPhysics = this          ;
+    E_Threshold = 0             ;
+    Pedestal_Threshold = 000;
+  }
 ///////////////////////////////////////////////////////////////////////////
 TSSSDPhysics::~TSSSDPhysics()
-	{}
+  {}
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::Clear()
-	{
-		DetectorNumber	.clear()	;
-		StripNumber			.clear()	;
-		Energy					.clear()	;
-		Time						.clear()	;
-	}
+  {
+    DetectorNumber  .clear()  ;
+    StripNumber      .clear()  ;
+    Energy          .clear()  ;
+    Time            .clear()  ;
+  }
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::ReadConfiguration(string Path) 
-	{
+  {
    ifstream ConfigFile           ;
    ConfigFile.open(Path.c_str()) ;
    string LineBuffer          ;
@@ -87,218 +90,348 @@ void TSSSDPhysics::ReadConfiguration(string Path)
    bool ReadingStatus = false ;
 
  while (!ConfigFile.eof()) 
- 	{
+   {
       
-		getline(ConfigFile, LineBuffer);
-
-		//	If line is a Start Up ThinSi bloc, Reading toggle to true      
-		  	if (LineBuffer.compare(0, 6, "ThinSi") == 0) 
-		    	{
-		      	cout << "Detector found: " << endl   ;        
-		      	ReadingStatus = true ;
-		    	}
-
-		//	Else don't toggle to Reading Block Status
-		else ReadingStatus = false ;
-
-		//	Reading Block
-		while(ReadingStatus)
-			{
-					// Pickup Next Word 
-				ConfigFile >> DataBuffer ;
-
-				//	Comment Line 
-				if (DataBuffer.compare(0, 1, "%") == 0) {	ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );}
-
-					//	Finding another telescope (safety), toggle out
-				else if (DataBuffer.compare(0, 6, "ThinSi") == 0) {
-					cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ;
-					ReadingStatus = false ;
-				}
-
-					 //Position method
-		         else if (DataBuffer.compare(0, 3, "A=") == 0) {
-		            check_A = true;
-		            ConfigFile >> DataBuffer ;
-		            TLX = atof(DataBuffer.c_str()) ;
-		            ConfigFile >> DataBuffer ;
-		            TLY = atof(DataBuffer.c_str()) ;
-		            ConfigFile >> DataBuffer ;
-		            TLZ = atof(DataBuffer.c_str()) ;
-
-		         }
-				
-				else if (DataBuffer.compare(0, 3, "B=") == 0) {
-					check_B = true;
-					ConfigFile >> DataBuffer ;
-					BLX = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					BLY = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					BLZ = atof(DataBuffer.c_str()) ;
-
-				}
-
-				else if (DataBuffer.compare(0, 3, "C=") == 0) {
-					check_C = true;
-					ConfigFile >> DataBuffer ;
-					BRX = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					BRY = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					BRZ = atof(DataBuffer.c_str()) ;
-
-				}
-
-				else if (DataBuffer.compare(0, 3, "D=") == 0) {
-					check_D = true;
-					ConfigFile >> DataBuffer ;
-					TRX = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					TRY = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					TRZ = atof(DataBuffer.c_str()) ;
-
-				}
-
-									
-				//Angle method
-				else if (DataBuffer.compare(0, 6, "THETA=") == 0) {
-					check_Theta = true;
-					ConfigFile >> DataBuffer ;
-					Theta = atof(DataBuffer.c_str()) ;
-				}
-
-				else if (DataBuffer.compare(0, 4, "PHI=") == 0) {
-					check_Phi = true;
-					ConfigFile >> DataBuffer ;
-					Phi = atof(DataBuffer.c_str()) ;
-				}
-
-				else if (DataBuffer.compare(0, 2, "R=") == 0) {
-					check_R = true;
-					ConfigFile >> DataBuffer ;
-					R = atof(DataBuffer.c_str()) ;
-				}
-
-
-				else if (DataBuffer.compare(0, 5, "BETA=") == 0) {
-					check_beta = true;
-					ConfigFile >> DataBuffer ;
-					beta_u = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					beta_v = atof(DataBuffer.c_str()) ;
-					ConfigFile >> DataBuffer ;
-					beta_w = atof(DataBuffer.c_str()) ;
-				}
-		      
-		         	///////////////////////////////////////////////////
-					//	If no Detector Token and no comment, toggle out
-		         else 
-		         	{ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;}
-		         
-		         	/////////////////////////////////////////////////
-		         	//	If All necessary information there, toggle out
-		         
-		         if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) 
-		         	{ 
-				         	ReadingStatus = false; 
-				         	
-				         	///Add The previously define telescope
-		         			//With position method
-				         	 if ((check_A && check_B && check_C && check_D) || !(check_Theta && check_Phi && check_R)) {
-						            	 NumberOfDetector++;
-						         }
-
-					         //with angle method
-					         else if ((check_Theta && check_Phi && check_R) || !(check_A && check_B && check_C && check_D)) {
-						         		  NumberOfDetector++;
-						         }
-						         
-						        //	Reinitialisation of Check Boolean 
-						        
-								check_A = false   ;
-								check_B = false ;
-								check_C = false   ;
-								check_D = false ;
-
-								check_Theta = false   ;
-								check_Phi  = false  ;
-								check_R     = false   ;
-								check_beta = false  ;
-								ReadingStatus = false ;
-							         
-		         	}
-		         	
-						}
-					}
-
+    getline(ConfigFile, LineBuffer);
+
+    //  If line is a Start Up ThinSi bloc, Reading toggle to true      
+        if (LineBuffer.compare(0, 6, "ThinSi") == 0) 
+          {
+            cout << "Detector found: " << endl   ;        
+            ReadingStatus = true ;
+          }
+
+    //  Else don't toggle to Reading Block Status
+    else ReadingStatus = false ;
+
+    //  Reading Block
+    while(ReadingStatus)
+      {
+          // Pickup Next Word 
+        ConfigFile >> DataBuffer ;
+
+        //  Comment Line 
+        if (DataBuffer.compare(0, 1, "%") == 0) {  ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );}
+
+          //  Finding another telescope (safety), toggle out
+        else if (DataBuffer.compare(0, 6, "ThinSi") == 0) {
+          cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ;
+          ReadingStatus = false ;
+        }
+
+           //Position method
+             else if (DataBuffer.compare(0, 3, "A=") == 0) {
+                check_A = true;
+                ConfigFile >> DataBuffer ;
+                TLX = atof(DataBuffer.c_str()) ;
+                ConfigFile >> DataBuffer ;
+                TLY = atof(DataBuffer.c_str()) ;
+                ConfigFile >> DataBuffer ;
+                TLZ = atof(DataBuffer.c_str()) ;
+
+             }
+        
+        else if (DataBuffer.compare(0, 3, "B=") == 0) {
+          check_B = true;
+          ConfigFile >> DataBuffer ;
+          BLX = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          BLY = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          BLZ = atof(DataBuffer.c_str()) ;
+
+        }
+
+        else if (DataBuffer.compare(0, 3, "C=") == 0) {
+          check_C = true;
+          ConfigFile >> DataBuffer ;
+          BRX = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          BRY = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          BRZ = atof(DataBuffer.c_str()) ;
+
+        }
+
+        else if (DataBuffer.compare(0, 3, "D=") == 0) {
+          check_D = true;
+          ConfigFile >> DataBuffer ;
+          TRX = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          TRY = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          TRZ = atof(DataBuffer.c_str()) ;
+
+        }
+
+                  
+        //Angle method
+        else if (DataBuffer.compare(0, 6, "THETA=") == 0) {
+          check_Theta = true;
+          ConfigFile >> DataBuffer ;
+          Theta = atof(DataBuffer.c_str()) ;
+        }
+
+        else if (DataBuffer.compare(0, 4, "PHI=") == 0) {
+          check_Phi = true;
+          ConfigFile >> DataBuffer ;
+          Phi = atof(DataBuffer.c_str()) ;
+        }
+
+        else if (DataBuffer.compare(0, 2, "R=") == 0) {
+          check_R = true;
+          ConfigFile >> DataBuffer ;
+          R = atof(DataBuffer.c_str()) ;
+        }
+
+
+        else if (DataBuffer.compare(0, 5, "BETA=") == 0) {
+          check_beta = true;
+          ConfigFile >> DataBuffer ;
+          beta_u = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          beta_v = atof(DataBuffer.c_str()) ;
+          ConfigFile >> DataBuffer ;
+          beta_w = atof(DataBuffer.c_str()) ;
+        }
+          
+               ///////////////////////////////////////////////////
+          //  If no Detector Token and no comment, toggle out
+             else 
+               {ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;}
+             
+               /////////////////////////////////////////////////
+               //  If All necessary information there, toggle out
+             
+             if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) 
+               { 
+                   ReadingStatus = false; 
+                   
+                   ///Add The previously define telescope
+                   //With position method
+                    if ((check_A && check_B && check_C && check_D) || !(check_Theta && check_Phi && check_R)) {
+                           NumberOfDetector++;
+                     }
+
+                   //with angle method
+                   else if ((check_Theta && check_Phi && check_R) || !(check_A && check_B && check_C && check_D)) {
+                           NumberOfDetector++;
+                     }
+                     
+                    //  Reinitialisation of Check Boolean 
+                    
+                check_A = false   ;
+                check_B = false ;
+                check_C = false   ;
+                check_D = false ;
+
+                check_Theta = false   ;
+                check_Phi  = false  ;
+                check_R     = false   ;
+                check_beta = false  ;
+                ReadingStatus = false ;
+                       
+               }
+               
+            }
+          }
+          
+    InitializeStandardParameter() ;
+    ReadAnalysisConfig()          ;
 }
 
 
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::AddParameterToCalibrationManager()
-	{
-		CalibrationManager* Cal = CalibrationManager::getInstance();
-		
-		for(int i = 0 ; i < NumberOfDetector ; i++)
-			{
-			
-				for( int j = 0 ; j < 16 ; j++)
-					{
-						Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E")	;
-						Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T")	;	
-					}
-		
-			}
-	}
-	
+  {
+    CalibrationManager* Cal = CalibrationManager::getInstance();
+    
+    for(int i = 0 ; i < NumberOfDetector ; i++)
+      {
+      
+        for( int j = 0 ; j < 16 ; j++)
+          {
+            Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E")  ;
+            Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T")  ;  
+          }
+    
+      }
+  }
+  
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::InitializeRootInput()
-	{
-		TChain* inputChain = RootInput::getInstance()->GetChain()	;
-		inputChain->SetBranchStatus ( "ThinSi" 		, true )					;
-		inputChain->SetBranchStatus ( "fSSSD_*" 	, true )					;
-		inputChain->SetBranchAddress( "ThinSi" 		, &EventData )		;
-	}	
+  {
+    TChain* inputChain = RootInput::getInstance()->GetChain()  ;
+    inputChain->SetBranchStatus ( "SSSD"     , true )          ;
+    inputChain->SetBranchStatus ( "fSSSD_*"   , true )          ;
+    inputChain->SetBranchAddress( "SSSD"     , &EventData )    ;
+  }  
 
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::InitializeRootOutput()
-	{
-		TTree* outputTree = RootOutput::getInstance()->GetTree()			;
-		outputTree->Branch( "SSSD" , "TSSSDPhysics" , &EventPhysics )	;
-	}
+  {
+    TTree* outputTree = RootOutput::getInstance()->GetTree()      ;
+    outputTree->Branch( "SSSD" , "TSSSDPhysics" , &EventPhysics )  ;
+  }
 
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::BuildPhysicalEvent()
-	{
-		BuildSimplePhysicalEvent()	;
-	}
+  {
+    BuildSimplePhysicalEvent()  ;
+  }
 
 ///////////////////////////////////////////////////////////////////////////
 void TSSSDPhysics::BuildSimplePhysicalEvent()
-	{
-		if( EventData->GetEnergyMult() == EventData->GetTimeMult() )
-			{
-				for(unsigned int i = 0 ; i < EventData->GetEnergyMult() ; i++)
-					{
-					
-						DetectorNumber	.push_back( EventData->GetEnergyDetectorNbr(i) )	;
-						StripNumber			.push_back( EventData->GetEnergyStripNbr(i)    )	;
-						
-						Energy					.push_back(
-							CalibrationManager::getInstance()->ApplyCalibration(	"SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_E",	
-																																		EventData->GetEnergy(i) )
-																			)	;
-																			
-						Time						.push_back(
-							CalibrationManager::getInstance()->ApplyCalibration(	"SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_T",	
-																																		EventData->GetTime(i) )
-																			)	;
-					}
-			}
-		
-		else return ;
+  {
+        PreTreat();
+
+        for(unsigned int i = 0 ; i <   PreTreatedData->GetEnergyMult() ; i++)
+          {
+          
+            DetectorNumber  .push_back(   PreTreatedData->GetEnergyDetectorNbr(i) )  ;
+            StripNumber     .push_back(   PreTreatedData->GetEnergyStripNbr(i)    )  ;
+            Energy          .push_back(   PreTreatedData->GetEnergy(i)            )  ; 
+            // Look For associate Time
+            for(unsigned int j = 0 ; j <   PreTreatedData->GetTimeMult() ; j ++ )
+              {
+                if(PreTreatedData->GetEnergyDetectorNbr(i) == PreTreatedData->GetTimeDetectorNbr(j) && PreTreatedData->GetEnergyStripNbr(i)==PreTreatedData->GetTimeStripNbr(j))
+                  Time.push_back(PreTreatedData->GetTime(j));
+              }                        
+          }
+    return;    
+  }
+  
+///////////////////////////////////////////////////////////////////////////
+void TSSSDPhysics::PreTreat()
+  {
+    ClearPreTreatedData();
+      
+      //  E
+      for(int i = 0 ; i < EventData->GetEnergyMult() ; i++)
+        {
+          if(ChannelStatus[EventData->GetEnergyDetectorNbr(i)][EventData->GetEnergyStripNbr(i)])
+            {
+	            double E = fSi_E(EventData , i); 
+	            if( E > E_Threshold && EventData->GetEnergy(i) > Pedestal_Threshold)
+	                {
+	                  PreTreatedData->SetEnergyDetectorNbr( EventData->GetEnergyDetectorNbr(i) )  ;
+	                  PreTreatedData->SetEnergyStripNbr( EventData->GetEnergyStripNbr(i) )        ;
+	                  PreTreatedData->SetEnergy( E )                                              ;
+	                }
+		        } 
+		    }
 		
-	}
+	      //  T
+	      for(int i = 0 ; i < EventData->GetTimeMult() ; i++)
+		      {
+		        if(ChannelStatus[EventData->GetEnergyDetectorNbr(i)][EventData->GetEnergyStripNbr(i)])
+		          {
+	              PreTreatedData->SetTimeDetectorNbr( EventData->GetTimeDetectorNbr(i) )  ;
+	              PreTreatedData->SetTimeStripNbr( EventData->GetTimeStripNbr(i) )        ;
+	              PreTreatedData->SetTime( fSi_T(EventData , i) )                         ;
+		          }
+		      }
+  }
 
+///////////////////////////////////////////////////////////////////////////
+void TSSSDPhysics::InitializeStandardParameter()
+  {
+  	//  Enable all channel
+		vector< bool > TempChannelStatus;
+
+		TempChannelStatus.resize(16,true);
+		for(int i = 0 ; i < NumberOfDetector ; i ++)		
+				ChannelStatus[i+1] = TempChannelStatus;
+  }
+///////////////////////////////////////////////////////////////////////////
+void TSSSDPhysics::ReadAnalysisConfig()
+{
+   bool ReadingStatus = false;
+
+   // path to file
+   string FileName = "./configs/ConfigSSSD.dat";
+
+   // open analysis config file
+   ifstream AnalysisConfigFile;
+   AnalysisConfigFile.open(FileName.c_str());
+
+   if (!AnalysisConfigFile.is_open()) {
+      cout << " No ConfigMust2.dat found: Default parameter loaded for Analayis " << FileName << endl;
+      return;
+   }
+   cout << " Loading user parameter for Analysis from ConfigSSSD.dat " << endl;
+
+   // read analysis config file
+   string LineBuffer,DataBuffer;
+   while (!AnalysisConfigFile.eof()) {
+      // Pick-up next line
+      getline(AnalysisConfigFile, LineBuffer);
+
+      // search for "header"
+      if (LineBuffer.compare(0, 11, "ConfigSSSD") == 0) ReadingStatus = true;
+
+      // loop on tokens and data
+      while (ReadingStatus) {
+         AnalysisConfigFile >> DataBuffer;
+
+         // Search for comment symbol (%)
+         if (DataBuffer.compare(0, 1, "%") == 0) {
+            AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' );
+         }
+         
+         else if (DataBuffer.compare(0, 4, "SSSD") == 0) {
+            AnalysisConfigFile >> DataBuffer;
+            string whatToDo = DataBuffer;
+            if (whatToDo.compare(0, 11, "DISABLE_ALL") == 0) {
+               AnalysisConfigFile >> DataBuffer;
+               cout << whatToDo << "  " << DataBuffer << endl;
+               int Detector = atoi(DataBuffer.substr(2,1).c_str());
+               vector< bool > ChannelStatusBuffer;
+               ChannelStatusBuffer.resize(16,false);
+               ChannelStatus[Detector] = ChannelStatusBuffer;
+            }
+            
+          else if (whatToDo.compare(0, 15, "DISABLE_CHANNEL") == 0) {
+               AnalysisConfigFile >> DataBuffer;
+               cout << whatToDo << "  " << DataBuffer << endl;
+               int telescope = atoi(DataBuffer.substr(2,1).c_str());
+               int channel = -1;
+               if (DataBuffer.compare(3,3,"STR") == 0) {
+                  channel = atoi(DataBuffer.substr(8).c_str());
+                  *(ChannelStatus[telescope].begin()+channel) = false;
+               }
+               
+               else {
+                  cout << "Warning: detector type for Must2 unknown!" << endl;
+               }
+            }
+            else {
+               cout << "Warning: don't know what to do (lost in translation)" << endl;
+            }
+         }
+         else {
+            ReadingStatus = false;
+//            cout << "WARNING: Wrong Token Sequence" << endl;
+         }
+      }
+   }
+}	
+
+
+
+	///////////////////////////////////////////////////////////////////////////
+	double LOCAL::fSi_E( TSSSDData* EventData , int i )
+	  {
+	    return CalibrationManager::getInstance()->ApplyCalibration(  "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_E",  
+									    EventData->GetEnergy(i) );
+	  }
+	  
+	  
+	double LOCAL::fSi_T( TSSSDData* EventData , int i )
+	  {
+	    return CalibrationManager::getInstance()->ApplyCalibration(  "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_T",  
+									    EventData->GetTime(i) );
+	  }  
+	  
+	  
+	  
diff --git a/NPLib/SSSD/TSSSDPhysics.h b/NPLib/SSSD/TSSSDPhysics.h
index fa341dc97e52f53da1a3e3d424a379b76a656cc0..8490abc5005e41af00f48c47b76c04c4de351430 100644
--- a/NPLib/SSSD/TSSSDPhysics.h
+++ b/NPLib/SSSD/TSSSDPhysics.h
@@ -33,60 +33,90 @@ using namespace std ;
 #include "../include/VDetector.h"
 #include "../include/CalibrationManager.h"
 
+
 class TSSSDPhysics : public TObject, public NPA::VDetector
 {
-	public:	//	Constructor and Destructor
-		TSSSDPhysics();
-		~TSSSDPhysics();
-
-
-	public:	//	Calibrated Data
+ public:	//	Constructor and Destructor
+   TSSSDPhysics();
+   ~TSSSDPhysics();
 
-		vector<UShort_t>	DetectorNumber	;
-		vector<UShort_t>	StripNumber			;
-		vector<Double_t>	Energy					;
-		vector<Double_t>	Time						;
+ public:	//	Calibrated Data
+   vector<UShort_t>	DetectorNumber;
+   vector<UShort_t>	StripNumber;
+   vector<Double_t>	Energy;
+   vector<Double_t>	Time;
 
-	public:	//	inherrited from VDetector
-		//	Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token
-		void ReadConfiguration(string) 				;
+ public:	//	inherrited from VDetector
+   // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token
+   void ReadConfiguration(string);
 		
-
-		//	Add Parameter to the CalibrationManger
-		void AddParameterToCalibrationManager()	;		
+   // Add Parameter to the CalibrationManger
+   void AddParameterToCalibrationManager();		
 			
 		
-		//	Activated associated Branches and link it to the private member DetectorData address
-		//	In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated
-		void InitializeRootInput() 					;
+   // Activated associated Branches and link it to the private member DetectorData address
+   // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated
+   void InitializeRootInput();
 
+   // Create associated branches and associated private member DetectorPhysics address
+   void InitializeRootOutput();
 
-		//	Create associated branches and associated private member DetectorPhysics address
-		void InitializeRootOutput() 		 		;
-		
+   // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. 
+   void BuildPhysicalEvent();
 		
-		//	This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. 
-		void BuildPhysicalEvent()					;
 		
+   // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...).
+   // This method aimed to be used for analysis performed during experiment, when speed is requiered.
+   // NB: This method can eventually be the same as BuildPhysicalEvent.
+   void BuildSimplePhysicalEvent();
+
+   // Those two method all to clear the Event Physics or Data
+   void ClearEventPhysics()	{Clear();}
+   void ClearEventData()	{EventData->Clear();}
+
+
+ public: //	Specific to SSSD
+   // Clear The PreTeated object
+   void ClearPreTreatedData()	{PreTreatedData->Clear();}
 		
-		//	Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...).
-		//	This method aimed to be used for analysis performed during experiment, when speed is requiered.
-		//	NB: This method can eventually be the same as BuildPhysicalEvent.
-		void BuildSimplePhysicalEvent()				;
-
-		//	Those two method all to clear the Event Physics or Data
-		void ClearEventPhysics()		{Clear();}		
-		void ClearEventData()				{EventData->Clear();}		
-
-	private:	// Data not writted in the tree
-				int								NumberOfDetector	;//!
-				TSSSDData* 	  	EventData					;//!
-				TSSSDPhysics* 	  EventPhysics			;//!
-
-		void	Clear();
-    void  Clear(const Option_t*) {};
+   // Remove bad channel, calibrate the data and apply threshold
+   void PreTreat();
+
+   // Initialize the standard parameter for analysis
+   // ie: all channel enable, maximum multiplicity for strip = number of telescope
+   void InitializeStandardParameter();
+   
+   //	Read the user configuration file; if no file found, load standard one
+	 void ReadAnalysisConfig();
+
+
+ private:	// Data not written in the tree
+   int			      NumberOfDetector;	//!
+   TSSSDData* 	  EventData;		    //!
+   TSSSDData* 	  PreTreatedData;		//!
+   TSSSDPhysics*  EventPhysics;	  	//!
+
+   double 		E_Threshold;		//!
+   double 		Pedestal_Threshold;	//!
+				
+
+ private: //  Map of activated Channel
+   map< int, vector<bool> > ChannelStatus;//!
+    
+ public:  //  Return True if the channel is activated
+   // bool IsValidChannel(int DetectorNbr, int StripNbr) ;
+
+   void	Clear();
+   void  Clear(const Option_t*) {};
 	
-		ClassDef(TSSSDPhysics,1)  // SSSDPhysics structure
+   ClassDef(TSSSDPhysics,1)  // SSSDPhysics structure
 };
 
+
+namespace LOCAL
+{
+   double fSi_E( TSSSDData* EventData , int i );
+   double fSi_T( TSSSDData* EventData , int i );
+}
+
 #endif