diff --git a/NPLib/Detectors/Samurai/CMakeLists.txt b/NPLib/Detectors/Samurai/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ca70656ac2a7e8da587584f91eb59f2beda36b0d
--- /dev/null
+++ b/NPLib/Detectors/Samurai/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_custom_command(OUTPUT TSamuraiFDC2DataDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiFDC2Data.h TSamuraiFDC2DataDict.cxx TSamuraiFDC2Data.rootmap libNPSamurai.dylib DEPENDS TSamuraiFDC2Data.h)
+
+add_custom_command(OUTPUT TSamuraiFDC2PhysicsDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiFDC2Physics.h TSamuraiFDC2PhysicsDict.cxx TSamuraiFDC2Physics.rootmap libNPSamurai.dylib DEPENDS TSamuraiFDC2Physics.h)
+
+add_library(NPSamurai SHARED TSamuraiFDC2Data.cxx TSamuraiFDC2DataDict.cxx TSamuraiFDC2Physics.cxx TSamuraiFDC2PhysicsDict.cxx)
+
+target_link_libraries(NPSamurai ${ROOT_LIBRARIES} NPCore) 
+install(FILES TSamuraiFDC2Data.h TSamuraiFDC2Physics.h  DESTINATION ${CMAKE_INCLUDE_OUTPUT_DIRECTORY})
+
diff --git a/NPLib/Detectors/Samurai/TSamuraiFDC2Data.cxx b/NPLib/Detectors/Samurai/TSamuraiFDC2Data.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..262e7e534b69e58786375e6b80a34fdbbff9f20e
--- /dev/null
+++ b/NPLib/Detectors/Samurai/TSamuraiFDC2Data.cxx
@@ -0,0 +1,59 @@
+#include "TSamuraiFDC2Data.h"
+#include <iostream>
+
+TSamuraiFDC2Data::TSamuraiFDC2Data(){};
+TSamuraiFDC2Data::~TSamuraiFDC2Data(){};
+
+////////////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Data::SetData(const int& Det, const int& Layer, const int& Wire, const double& Time, const int& Edge){
+  fDC_DetectorNbr.push_back(Det);
+  fDC_LayerNbr.push_back(Layer); 
+  fDC_WireNbr.push_back(Wire); 
+  fDC_Time.push_back(Time); 
+  fDC_Edge.push_back(Edge); 
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Data::Clear(){
+  fDC_DetectorNbr.clear();
+  fDC_LayerNbr.clear();
+  fDC_WireNbr.clear();
+  fDC_Time.clear();
+  fDC_Edge.clear();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Data::Print(){
+  using namespace std;
+
+  cout << " -- Event:" << endl;
+  cout << "   - Multiplicity: " << Mult() << endl;
+
+}
+////////////////////////////////////////////////////////////////////////////////
+unsigned int TSamuraiFDC2Data::MultLayer(unsigned int det , unsigned int layer, int edge){
+  unsigned int mult=0;
+  unsigned int size = fDC_DetectorNbr.size();
+  for(unsigned int i = 0 ; i< size ; i++ ){
+    if(fDC_DetectorNbr[i]==det)
+      if(fDC_LayerNbr[i]==layer)
+        if(fDC_Edge[i]==edge && edge!=-1) // edge type is specified (0 or 1)
+          mult++;
+        else if(edge==-1)// edge type is not specified
+          mult++;
+  }
+  return mult;
+
+}
+////////////////////////////////////////////////////////////////////////////////
+std::vector<int> TSamuraiFDC2Data::GetWire(unsigned int det , unsigned int layer){
+  std::vector<int> wires;
+  unsigned int size = fDC_DetectorNbr.size();
+  for(unsigned int i = 0 ; i< size ; i++ ){
+    if(fDC_DetectorNbr[i]==det)
+      if(fDC_LayerNbr[i]==layer)
+        wires.push_back(fDC_WireNbr[i]);
+  }
+  return wires;
+}
+ClassImp(TSamuraiFDC2Data); 
diff --git a/NPLib/Detectors/Samurai/TSamuraiFDC2Data.h b/NPLib/Detectors/Samurai/TSamuraiFDC2Data.h
new file mode 100644
index 0000000000000000000000000000000000000000..7edfc6f9cb1353fa69d888237eb762f25613dee2
--- /dev/null
+++ b/NPLib/Detectors/Samurai/TSamuraiFDC2Data.h
@@ -0,0 +1,37 @@
+#ifndef TDCDATA_H
+#define TDCDATA_H
+#include "TObject.h"
+#include <vector>
+class TSamuraiFDC2Data: public TObject{
+  public:
+    TSamuraiFDC2Data();
+    ~TSamuraiFDC2Data();
+
+  private:
+    std::vector<int> fDC_DetectorNbr;
+    std::vector<int> fDC_LayerNbr;
+    std::vector<int> fDC_WireNbr;
+    std::vector<double> fDC_Time;
+    std::vector<int> fDC_Edge;
+  
+  public:
+    void Clear();
+    void Print();
+    void Clear(const Option_t*) {};
+    void Dump() const{};
+  
+  public:
+    void SetData(const int& Det, const int& Layer, const int& Wire, const double& Time, const int& Edge);
+    unsigned int Mult(){return fDC_DetectorNbr.size();};
+    unsigned int MultLayer(unsigned int det , unsigned int layer, int edge=-1);
+    std::vector<int> GetWire(unsigned int det , unsigned int layer);
+    int const GetDetectorNbr(const unsigned int& i){return fDC_DetectorNbr[i];};
+    int const GetLayerNbr(const unsigned int& i){return fDC_LayerNbr[i];};
+    int const GetWireNbr(const unsigned int& i){return fDC_WireNbr[i];};
+    double const GetTime(const unsigned int& i){return fDC_Time[i];};
+    int const GetEdge(const unsigned int& i){return fDC_Edge[i];};
+
+    ClassDef(TSamuraiFDC2Data,1); 
+};
+
+#endif
diff --git a/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.cxx b/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..c8c34464c4dc19667bdcd830e83dceffe8fc7475
--- /dev/null
+++ b/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.cxx
@@ -0,0 +1,205 @@
+/*****************************************************************************
+ * Copyright (C) 2009-2016   this file is part of the NPTool Project         *
+ *                                                                           *
+ * For the licensing terms see $NPTOOL/Licence/NPTool_Licence                *
+ * For the list of contributors see $NPTOOL/Licence/Contributors             *
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Original Author: Adrien MATTA  contact address: matta@lpccaen.in2p3.fr    *
+ *                                                                           *
+ * Creation Date  : October 2020                                             *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class hold SamuraiFDC2 treated data                                 *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *****************************************************************************/
+#include "TSamuraiFDC2Physics.h"
+
+//   STL
+#include <sstream>
+#include <iostream>
+#include <cmath>
+#include <stdlib.h>
+#include <limits>
+
+//   NPL
+#include "RootInput.h"
+#include "RootOutput.h"
+#include "TAsciiFile.h"
+#include "NPOptionManager.h"
+#include "NPDetectorFactory.h"
+//   ROOT
+#include "TChain.h"
+///////////////////////////////////////////////////////////////////////////
+
+ClassImp(TSamuraiFDC2Physics)
+  ///////////////////////////////////////////////////////////////////////////
+  TSamuraiFDC2Physics::TSamuraiFDC2Physics(){
+    m_EventData         = new TSamuraiFDC2Data ;
+    m_PreTreatedData    = new TSamuraiFDC2Data ;
+    m_EventPhysics      = this ;
+    //m_Spectra           = NULL;
+  }
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::BuildSimplePhysicalEvent(){
+  BuildPhysicalEvent();
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::BuildPhysicalEvent(){
+  PreTreat();
+  return;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::PreTreat(){
+  ClearPreTreatedData();
+  unsigned int size = m_EventData->Mult();
+  for(unsigned int i = 0 ; i < size ; i++){
+    // EDGE=0 is the leading edge, IE, the real time.
+    // EDGE=1 is the trailing edge, so it helps build Tot
+    if(m_EventData->GetEdge(i)==0){
+      int det   = m_EventData->GetDetectorNbr(i); 
+      int layer = m_EventData->GetLayerNbr(i); 
+      int wire  = m_EventData->GetWireNbr(i); 
+      double time = m_EventData->GetTime(i);
+      double etime = 0;
+      // look for matching trailing edge   
+      for(unsigned int j = 0 ; j < size ; j++){
+        if(m_EventData->GetEdge(j)==1){
+          int edet   = m_EventData->GetDetectorNbr(j); 
+          int elayer = m_EventData->GetLayerNbr(j); 
+          int ewire  = m_EventData->GetWireNbr(j); 
+          // same wire
+          if(wire==ewire && layer==elayer && det==edet){
+            etime = m_EventData->GetTime(j); 
+          }    
+          
+        //if(etime<time)
+        //  break;
+        //else
+        //  etime=0;
+        }
+      }
+      // a valid wire must have an edge
+      if(etime && time){
+        Detector.push_back(det);
+        Layer.push_back(layer);       
+        Wire.push_back(wire);
+        Time.push_back(time);
+        ToT.push_back(time-etime);
+        }
+    }
+
+  }
+  return;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::Clear(){
+  Detector.clear();
+  Layer.clear();
+  Wire.clear();
+  Time.clear();
+  ToT.clear();
+  ParticleDirection.clear();
+  MiddlePosition.clear();
+}
+///////////////////////////////////////////////////////////////////////////
+
+////   Innherited from VDetector Class   ////
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::ReadConfiguration(NPL::InputParser parser){
+}
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::InitSpectra(){  
+  //m_Spectra = new TSamuraiFDC2Spectra(m_NumberOfDetector);
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::FillSpectra(){  
+  //  m_Spectra -> FillRawSpectra(m_EventData);
+  //  m_Spectra -> FillPreTreatedSpectra(m_PreTreatedData);
+  //  m_Spectra -> FillPhysicsSpectra(m_EventPhysics);
+}
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::CheckSpectra(){  
+  //  m_Spectra->CheckSpectra();  
+}
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::ClearSpectra(){  
+  // To be done
+}
+///////////////////////////////////////////////////////////////////////////
+map< string , TH1*> TSamuraiFDC2Physics::GetSpectra() {
+  /*  if(m_Spectra)
+      return m_Spectra->GetMapHisto();
+      else{
+      map< string , TH1*> empty;
+      return empty;
+      }*/
+  map< string , TH1*> empty;
+  return empty;
+
+} 
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::WriteSpectra(){
+  // m_Spectra->WriteSpectra();
+}
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::AddParameterToCalibrationManager(){
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::InitializeRootInputRaw(){
+  TChain* inputChain = RootInput::getInstance()->GetChain()   ;
+  inputChain->SetBranchStatus( "SamuraiFDC2" , true );
+  // The following line is necessary only for system were the tree is splitted
+  // (older root version). The found argument silenced the Branches not found
+  // warning for non splitted tree.
+  if(inputChain->FindBranch("fDC_*"))
+    inputChain->SetBranchStatus( "fDC_*",true);
+  inputChain->SetBranchAddress( "SamuraiFDC2" , &m_EventData );
+
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::InitializeRootInputPhysics(){
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TSamuraiFDC2Physics::InitializeRootOutput(){
+  TTree* outputTree = RootOutput::getInstance()->GetTree();
+  outputTree->Branch( "SamuraiFDC2" , "TSamuraiFDC2Physics" , &m_EventPhysics );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//            Construct Method to be pass to the DetectorFactory              //
+////////////////////////////////////////////////////////////////////////////////
+NPL::VDetector* TSamuraiFDC2Physics::Construct(){
+  return (NPL::VDetector*) new TSamuraiFDC2Physics();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//            Registering the construct method to the factory                 //
+////////////////////////////////////////////////////////////////////////////////
+extern "C"{
+  class proxy_samuraiFDC2{
+    public:
+      proxy_samuraiFDC2(){
+        NPL::DetectorFactory::getInstance()->AddToken("SAMURAIFDC2","Samurai");
+        NPL::DetectorFactory::getInstance()->AddDetector("SAMURAIFDC2",TSamuraiFDC2Physics::Construct);
+      }
+  };
+
+  proxy_samuraiFDC2 p_samuraiFDC2;
+}
+
diff --git a/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.h b/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.h
new file mode 100644
index 0000000000000000000000000000000000000000..134bdaf6e4a51a2d1fca4df5f1c0c2a09f5757ce
--- /dev/null
+++ b/NPLib/Detectors/Samurai/TSamuraiFDC2Physics.h
@@ -0,0 +1,147 @@
+#ifndef TSAMURAIFDC2PHYSICS_H
+#define TSAMURAIFDC2PHYSICS_H
+/*****************************************************************************
+ * Copyright (C) 2009-2016    this file is part of the NPTool Project        *
+ *                                                                           *
+ * For the licensing terms see $NPTOOL/Licence/NPTool_Licence                *
+ * For the list of contributors see $NPTOOL/Licence/Contributors             *
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Original Author: Adrien MATTA  contact address: matta@lpccaen.in2p3.fr    *
+ *                                                                           *
+ * Creation Date  : October 2020                                             *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class hold SamuraiFDC2 treated data                                 *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *  
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+// STL
+#include <vector>
+
+// NPL
+#include "TSamuraiFDC2Data.h"
+//#include "TSamuraiFDC2Spectra.h"
+#include "NPCalibrationManager.h"
+#include "NPVDetector.h"
+#include "NPInputParser.h"
+// ROOT 
+#include "TVector2.h" 
+#include "TVector3.h" 
+#include "TObject.h"
+#include "TCanvas.h"
+#include "TRandom3.h"
+// Forward declaration
+//class TSamuraiFDC2Spectra;
+
+
+using namespace std ;
+
+class TSamuraiFDC2Physics : public TObject, public NPL::VDetector{
+  public:
+    TSamuraiFDC2Physics();
+    ~TSamuraiFDC2Physics() {};
+
+  public: 
+    void Clear();   
+    void Clear(const Option_t*) {};
+
+  public:
+    //   Provide Physical Multiplicity
+    vector<int> Detector;
+    vector<int> Layer;
+    vector<int> Wire;
+    vector<double> Time;
+    vector<double> ToT;
+
+    // Computed variable
+    vector<TVector3> ParticleDirection;
+    vector<TVector3> MiddlePosition;
+
+  public:
+    // Projected position at given Z plan
+    TVector3 ProjectedPosition(double Z);
+
+  public: //   Innherited from VDetector Class
+
+    // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token
+    void ReadConfiguration(NPL::InputParser) ;
+
+
+    // 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 InitializeRootInputRaw() ;
+
+    // Activated associated Branches and link it to the private member DetectorPhysics address
+    // In this method mother Branches (Detector) AND daughter leaf (parameter) have to be activated
+    void InitializeRootInputPhysics() ;
+
+    // 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() ;
+
+    // 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() ;
+
+    // Same as above but for online analysis
+    void BuildOnlinePhysicalEvent()  {BuildPhysicalEvent();};
+
+    // Those two method all to clear the Event Physics or Data
+    void ClearEventPhysics() {Clear();}      
+    void ClearEventData()    {m_EventData->Clear();}   
+
+    // Method related to the TSpectra classes, aimed at providing a framework for online applications
+    // Instantiate the Spectra class and the histogramm throught it
+    void InitSpectra();
+    // Fill the spectra hold by the spectra class
+    void FillSpectra();
+    // Used for Online mainly, perform check on the histo and for example change their color if issues are found
+    void CheckSpectra();
+    // Used for Online only, clear all the spectra hold by the Spectra class
+    void ClearSpectra();
+    // Write Spectra to file
+    void WriteSpectra();
+
+  public:      //   Specific to SamuraiFDC2 Array
+
+    //   Clear The PreTeated object
+    void ClearPreTreatedData()   {m_PreTreatedData->Clear();}
+
+    //   Remove bad channel, calibrate the data and apply threshold
+    void PreTreat();
+
+    // Retrieve raw and pre-treated data
+    TSamuraiFDC2Data* GetRawData()        const {return m_EventData;}
+    TSamuraiFDC2Data* GetPreTreatedData() const {return m_PreTreatedData;}
+
+  private:   //   Root Input and Output tree classes
+    TSamuraiFDC2Data*         m_EventData;//!
+    TSamuraiFDC2Data*         m_PreTreatedData;//!
+    TSamuraiFDC2Physics*      m_EventPhysics;//!
+
+
+  private: // Spectra Class
+   // TSamuraiFDC2Spectra* m_Spectra; // !
+
+  public: // Spectra Getter
+    map< string , TH1*> GetSpectra(); 
+
+  public: // Static constructor to be passed to the Detector Factory
+    static NPL::VDetector* Construct();
+    ClassDef(TSamuraiFDC2Physics,1)  // SamuraiFDC2Physics structure
+};
+
+#endif
diff --git a/Projects/Strasse/PhysicsListOption.txt b/Projects/Strasse/PhysicsListOption.txt
index 56772eef01e5db197b2641b663872b7d1506c70f..ff38d11c7d6361c44a8d00159a7a5543a22c25cd 100644
--- a/Projects/Strasse/PhysicsListOption.txt
+++ b/Projects/Strasse/PhysicsListOption.txt
@@ -8,4 +8,4 @@ StoppingPhysics 0
 OpticalPhysics 0
 HadronPhysicsINCLXX 0
 HadronPhysicsQGSP_BIC_HP 0
-Decay 0
+Decay 1