diff --git a/NPLib/Detectors/Samurai/CMakeLists.txt b/NPLib/Detectors/Samurai/CMakeLists.txt
index 639fd771a6cacc88c3dfd0f1bcc7e981089be24f..3492bd26990d0b5a4c79621470a287e1f7e4ed6c 100644
--- a/NPLib/Detectors/Samurai/CMakeLists.txt
+++ b/NPLib/Detectors/Samurai/CMakeLists.txt
@@ -1,5 +1,8 @@
 add_custom_command(OUTPUT TSamuraiHodoscopeDataDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiHodoscopeData.h TSamuraiHodoscopeDataDict.cxx TSamuraiHodoscopeData.rootmap libNPSamurai.dylib DEPENDS TSamuraiHodoscopeData.h)
 
+
+add_custom_command(OUTPUT SamuraiFieldMapDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh SamuraiFieldMap.h SamuraiFieldMapDict.cxx SamuraiFieldMap.rootmap libNPSamurai.dylib DEPENDS SamuraiFieldMap.h)
+
 add_custom_command(OUTPUT TSamuraiHodoscopePhysicsDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiHodoscopePhysics.h TSamuraiHodoscopePhysicsDict.cxx TSamuraiHodoscopePhysics.rootmap libNPSamurai.dylib DEPENDS TSamuraiHodoscopePhysics.h)
 
 add_custom_command(OUTPUT TSamuraiBDCDataDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiBDCData.h TSamuraiBDCDataDict.cxx TSamuraiBDCData.rootmap libNPSamurai.dylib DEPENDS TSamuraiBDCData.h)
@@ -14,8 +17,8 @@ add_custom_command(OUTPUT TSamuraiFDC0DataDict.cxx COMMAND ${CMAKE_BINARY_DIR}/s
 
 add_custom_command(OUTPUT TSamuraiFDC0PhysicsDict.cxx COMMAND ${CMAKE_BINARY_DIR}/scripts/build_dict.sh TSamuraiFDC0Physics.h TSamuraiFDC0PhysicsDict.cxx TSamuraiFDC0Physics.rootmap libNPSamurai.dylib DEPENDS TSamuraiFDC0Physics.h)
 
-add_library(NPSamurai SHARED TSamuraiHodoscopeData.cxx TSamuraiBDCData.cxx TSamuraiBDCPhysics.cxx TSamuraiBDCDataDict.cxx TSamuraiBDCPhysicsDict.cxx TSamuraiFDC2Data.cxx TSamuraiFDC2DataDict.cxx TSamuraiHodoscopePhysics.cxx TSamuraiHodoscopePhysicsDict.cxx TSamuraiFDC2Physics.cxx TSamuraiHodoscopeDataDict.cxx TSamuraiFDC2PhysicsDict.cxx TSamuraiFDC0Data.cxx TSamuraiFDC0DataDict.cxx TSamuraiFDC0Physics.cxx TSamuraiFDC0PhysicsDict.cxx)
+add_library(NPSamurai SHARED SamuraiFieldMapDict.cxx SamuraiFieldMap.cxx TSamuraiHodoscopeData.cxx TSamuraiBDCData.cxx TSamuraiBDCPhysics.cxx TSamuraiBDCDataDict.cxx TSamuraiBDCPhysicsDict.cxx TSamuraiFDC2Data.cxx TSamuraiFDC2DataDict.cxx TSamuraiHodoscopePhysics.cxx TSamuraiHodoscopePhysicsDict.cxx TSamuraiFDC2Physics.cxx TSamuraiHodoscopeDataDict.cxx TSamuraiFDC2PhysicsDict.cxx TSamuraiFDC0Data.cxx TSamuraiFDC0DataDict.cxx TSamuraiFDC0Physics.cxx TSamuraiFDC0PhysicsDict.cxx)
 
 target_link_libraries(NPSamurai ${ROOT_LIBRARIES} NPCore NPTrackReconstruction) 
-install(FILES TSamuraiBDCData.h TSamuraiBDCPhysics.h TSamuraiHodoscopeData.h TSamuraiHodoscopePhysics.h TSamuraiFDC2Data.h TSamuraiFDC2Physics.h  TSamuraiFDC0Data.h TSamuraiFDC0Physics.h SamuraiDCIndex.h DESTINATION ${CMAKE_INCLUDE_OUTPUT_DIRECTORY})
+install(FILES SamuraiFieldMap.h TSamuraiBDCData.h TSamuraiBDCPhysics.h TSamuraiHodoscopeData.h TSamuraiHodoscopePhysics.h TSamuraiFDC2Data.h TSamuraiFDC2Physics.h  TSamuraiFDC0Data.h TSamuraiFDC0Physics.h SamuraiDCIndex.h DESTINATION ${CMAKE_INCLUDE_OUTPUT_DIRECTORY})
 
diff --git a/NPLib/Detectors/Samurai/SamuraiFieldMap.cxx b/NPLib/Detectors/Samurai/SamuraiFieldMap.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..bd6acff292c7f9c1df382d328086883252599aff
--- /dev/null
+++ b/NPLib/Detectors/Samurai/SamuraiFieldMap.cxx
@@ -0,0 +1,141 @@
+/*****************************************************************************
+ * Copyright (C) 2009-2021   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  : May  2021                                                *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class hold Samurai field map data                                   *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *   
+ *                                                                           *
+ *****************************************************************************/
+
+#include "SamuraiFieldMap.h"
+#include <fstream>
+#include <iostream>
+using namespace std;
+
+ClassImp(SamuraiFieldMap);
+
+////////////////////////////////////////////////////////////////////////////////
+SamuraiFieldMap::SamuraiFieldMap(std::string file){
+  LoadMap(file);
+}
+////////////////////////////////////////////////////////////////////////////////
+void SamuraiFieldMap::LoadMap(std::string file){
+  if(file.find(".bin")!=std::string::npos)
+    LoadBinary(file);
+  else
+    LoadAscii(file);
+}
+////////////////////////////////////////////////////////////////////////////////
+std::vector<float>& SamuraiFieldMap::GetB(std::vector<float>& pos){
+  static vector<float> nullv ={0,0,0};
+  auto it=m_field.find(pos);
+  if(it!=m_field.end()){
+   return it->second;
+  }
+  else 
+    return nullv;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void SamuraiFieldMap::LoadAscii(std::string file){
+  ifstream in(file.c_str());
+  if(!in.is_open()){
+    cout << "Error: failed to load samurai field map " << file << endl;
+    exit(1);
+  }
+  
+  cout << "//////// Loading Ascii Samurai field map " << file << endl; 
+  float x,y,z,Bx,By,Bz;
+
+  m_x_max=m_y_max=m_z_max=-1e32;
+  m_x_min=m_y_min=m_z_min=1e32;
+  unsigned int  count =0 ;
+
+  // ignore 8 first line 
+  string buffer;
+  for(unsigned int i = 0 ; i < 8 ; i++){
+    getline(in,buffer);
+  }
+
+  while(in >> x >> y >> z >> Bx >> By >> Bz){
+    if(++count%50000==0)
+      cout << "\r  - Loading " << count << " values " << flush; 
+    vector<float> p = {x,y,z};
+    vector<float> B = {Bx,By,Bz};
+    m_field[p]=B;
+    if(x<m_x_min)
+      m_x_min=x;
+    if(x>m_x_max)
+      m_x_max=x;  
+    if(y<m_y_min)
+      m_y_min=y;
+    if(y>m_y_max)
+      m_y_max=y;  
+    if(z<m_z_min)
+      m_z_min=z;
+    if(z>m_z_max)
+      m_z_max=z;  
+  }
+
+      cout << "\r  - " << count << " values loaded" << endl; 
+      in.close();
+}
+////////////////////////////////////////////////////////////////////////////////
+void SamuraiFieldMap::LoadBinary(std::string file){
+  ifstream in(file.c_str(),std::ifstream::binary);
+  if(!in.is_open()){
+    cout << "Error: failed to load samurai field map " << file << endl;
+    exit(1);
+  }
+  
+  cout << "//////// Loading Binary Samurai field map " << file << endl; 
+  float x,y,z,Bx,By,Bz;
+
+  m_x_max=m_y_max=m_z_max=-1e32;
+  m_x_min=m_y_min=m_z_min=1e32;
+  unsigned int  count =0 ;
+  while(!in.eof()){
+
+    if(++count%50000==0)
+      cout << "\r  - Loading " << count << " values " << flush; 
+
+    in.read((char*)&x,sizeof(x));
+    in.read((char*)&y,sizeof(y));
+    in.read((char*)&z,sizeof(z));
+    in.read((char*)&Bx,sizeof(Bx));
+    in.read((char*)&By,sizeof(By));
+    in.read((char*)&Bz,sizeof(Bz));
+
+    vector<float> p = {x,y,z};
+    vector<float> B = {Bx,By,Bz};
+    m_field[p]=B;
+    if(x<m_x_min)
+      m_x_min=x;
+    if(x>m_x_max)
+      m_x_max=x;  
+    if(y<m_y_min)
+      m_y_min=y;
+    if(y>m_y_max)
+      m_y_max=y;  
+    if(z<m_z_min)
+      m_z_min=z;
+    if(z>m_z_max)
+      m_z_max=z;  
+  }
+      cout << "\r  - " << count << " values loaded" << endl; 
+      cout << "  - min(" << m_x_min <<";"<< m_y_min <<";" << m_z_min<< ") max(" << m_x_max <<";"<< m_y_max <<";" << m_z_max<< ")" << endl; 
+      in.close();
+}
diff --git a/NPLib/Detectors/Samurai/SamuraiFieldMap.h b/NPLib/Detectors/Samurai/SamuraiFieldMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..ee48d2d688df85f1e5a5c6fe74262aaf7fb9bc96
--- /dev/null
+++ b/NPLib/Detectors/Samurai/SamuraiFieldMap.h
@@ -0,0 +1,57 @@
+#ifndef SamuraiFieldMap_h
+#define SamuraiFieldMap_h
+/*****************************************************************************
+ * Copyright (C) 2009-2021   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  : May  2021                                                *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class hold Samurai field map data                                   *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *   
+ *                                                                           *
+ *****************************************************************************/
+
+#include"TObject.h"
+#include<string>
+#include<vector>
+#include<map>
+
+class SamuraiFieldMap{
+
+  public:
+    SamuraiFieldMap(){};
+    SamuraiFieldMap(std::string file);
+    ~SamuraiFieldMap(){};
+  
+  public: // Map reading
+    void LoadMap(std::string file);
+    void LoadAscii(std::string file);
+    void LoadBinary(std::string file);
+
+  private:
+    // map[Pos]=B;
+    std::map<std::vector<float>,std::vector<float>> m_field;
+    float m_x_max,m_y_max,m_z_max,m_x_min,m_y_min,m_z_min;
+
+  public:
+    std::vector<float>& GetB(std::vector<float>& pos);
+    inline std::vector<float>& GetB(float x,float y ,float z){
+      std::vector<float> pos = {x,y,z};
+      return GetB(pos);
+    };
+
+    ClassDef(SamuraiFieldMap,1);
+};
+
+#endif
diff --git a/NPLib/Detectors/Samurai/TSamuraiHodoscopePhysics.h b/NPLib/Detectors/Samurai/TSamuraiHodoscopePhysics.h
index 1e21c32ea5cd4e88b07faf29dcf2859ee8681a96..542198b365f50e80f2772585114fceccc41ba771 100644
--- a/NPLib/Detectors/Samurai/TSamuraiHodoscopePhysics.h
+++ b/NPLib/Detectors/Samurai/TSamuraiHodoscopePhysics.h
@@ -1,7 +1,7 @@
 #ifndef TSamuraiHodoscopePHYSICS_H
 #define TSamuraiHodoscopePHYSICS_H
 /*****************************************************************************
- * Copyright (C) 2009-2019   this file is part of the NPTool Project         *
+ * Copyright (C) 2009-2021   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             *
diff --git a/Projects/S034/Analysis.cxx b/Projects/S034/Analysis.cxx
index 9094323d62dc7f379e8f5af977d281d87fcb00f5..eef3038757c0ee65991937660b9bf27b60cb9639 100644
--- a/Projects/S034/Analysis.cxx
+++ b/Projects/S034/Analysis.cxx
@@ -43,6 +43,7 @@ void Analysis::Init(){
    FDC0 = (TSamuraiFDC0Physics*) m_DetectorManager->GetDetector("SAMURAIFDC0");
    FDC2 = (TSamuraiFDC2Physics*) m_DetectorManager->GetDetector("SAMURAIFDC2");
    Hodo = (TSamuraiHodoscopePhysics*) m_DetectorManager->GetDetector("SAMURAIHOD");
+   m_field.LoadMap("field_map/180702-2,40T-3000.table.bin");
 
    InitOutputBranch();
    InitInputBranch();
diff --git a/Projects/S034/Analysis.h b/Projects/S034/Analysis.h
index 6c893a7b90ce7a5c4b6ee1eb726e5077e4dddfee..e5ace49dd1dce98fb0a3ffd6c1386eb528669aa2 100644
--- a/Projects/S034/Analysis.h
+++ b/Projects/S034/Analysis.h
@@ -28,6 +28,7 @@
 #include"TSamuraiFDC0Physics.h"
 #include"TSamuraiFDC2Physics.h"
 #include"TSamuraiHodoscopePhysics.h"
+#include"SamuraiFieldMap.h"
 
 class Analysis: public NPL::VAnalysis{
   public:
@@ -48,7 +49,7 @@ class Analysis: public NPL::VAnalysis{
     TSamuraiFDC0Physics* FDC0;
     TSamuraiFDC2Physics* FDC2;
     TSamuraiHodoscopePhysics* Hodo;
- 
+    SamuraiFieldMap m_field ;
   private: // output variable
     double Brho;
     double Beta_f;
diff --git a/Projects/S034/field_map/ascii2bin.cxx b/Projects/S034/field_map/ascii2bin.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..ef2e7ea617bb37e4ca3eba1a43ee6088355af8f9
--- /dev/null
+++ b/Projects/S034/field_map/ascii2bin.cxx
@@ -0,0 +1,38 @@
+void ascii2bin(){
+  std::string file ="180702-2,40T-3000.table";
+  ifstream in(file.c_str());
+  if(!in.is_open()){
+    cout << "Error: failed to load samurai field map " << file << endl;
+    exit(1);
+  }
+  
+  cout << "//////// Loading Samurai Field Map " << file << endl; 
+  float x,y,z,Bx,By,Bz;
+  std::string name = file+".bin";
+  ofstream out(name.c_str(),std::ofstream::binary);
+
+  unsigned int  count =0 ;
+
+  // ignore 8 first line 
+  string buffer;
+  for(unsigned int i = 0 ; i < 8 ; i++){
+    getline(in,buffer);
+  }
+
+  while(in >> x >> y >> z >> Bx >> By >> Bz){
+    if(++count%10000==0)
+      cout << "\r  - Loading " << count << " values " << flush; 
+    out.write((char*)&x,sizeof(x));
+    out.write((char*)&y,sizeof(y));
+    out.write((char*)&z,sizeof(z));
+    out.write((char*)&Bx,sizeof(Bx));
+    out.write((char*)&By,sizeof(By));
+    out.write((char*)&Bz,sizeof(Bz));
+     //out << x << y << z << Bx << By << Bz;
+  }
+
+      cout << "\r  - " << count << " values loaded" << endl; 
+
+  out.close();
+  in.close();
+}