diff --git a/CMakeLists.txt b/CMakeLists.txt
index 724e6acbb4e2693f34e9835332dda714a18320c0..a7ff9d66c6e9c169a35e808145e302c394a670cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,6 +18,30 @@ link_directories(../install/lib)
 link_directories($ENV{NPTOOL_HOME}/$ENV{NPTOOL_ENV}/lib)
 
 
+if(DEFINED ENV{MFMLIB})
+  SET(MFMLIB $ENV{MFMLIB})
+  SET(MFM_DIR $ENV{MFMLIB})
+  MESSAGE(STATUS "The libraries and software will be build using MFM libraries")
+  SET(MFM_LIBRARY_DIR ${MFM_DIR}/lib)
+  # Set MFM_BIN_DIR
+  SET(MFM_BIN_DIR ${MFM_DIR}/bin)
+  # Set MFM_INCLUDE_DIR
+  SET(MFM_INCLUDES ${MFM_DIR}/include)
+  SET(MFM_INCLUDE_DIRS  ${MFM_DIR}/include )
+  SET(MFM_LIBRARIES "-L${MFM_LIBRARY_DIR} -lMFM")
+  LIST(APPEND COMPDEF "WITH_MFM")
+  LIST(APPEND MFMCOMPLIB ${MFM_LIBRARIES})
+  LIST(APPEND INCLUDE_DIR ${MFM_INCLUDE_DIRS})
+  if(EXISTS "${MFM_DIR}/lib/libMFM${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set(MFM_FOUND true)
+  else()
+    set(MFM_FOUND false)
+  endif()
+endif()
+
+
+
+
 ### ROOT ###
 # find package 
 find_package(ROOT QUIET)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 32c2e9bf7ed3ad8cf82ad0958793cbac33e96a06..7c3d69c3422c8c41a5eac3e51e165e3f0219f19f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,10 @@
 add_library(NPZdd SHARED ZddDetector.cxx ZddData.cxx ZddPhysics.cxx)
 target_link_libraries(NPZdd PUBLIC PUBLIC ROOT::RIO ROOT::Tree ROOT::Physics ROOT::Imt NPRoot nptool )
+
+if(MFM_FOUND)
+  target_compile_definitions(NPZdd PUBLIC MFM_FOUND)
+  target_link_libraries(NPZdd PUBLIC ${MFMCOMPLIB})
+endif()
+
 install(DIRECTORY ./ DESTINATION ${CMAKE_INCLUDE_OUTPUT_DIRECTORY} FILES_MATCHING PATTERN "*.h" )
 ROOT_GENERATE_DICTIONARY(ZddDict ZddData.h ZddPhysics.h LINKDEF Zddlinkdef.hh MODULE NPZdd)
diff --git a/src/ZddDetector.cxx b/src/ZddDetector.cxx
index daec5a5fb41c1745c1a7d06fc16171fc4542368a..90b5af64c3abebb4a3b06f1e68bca7f1256f492e 100644
--- a/src/ZddDetector.cxx
+++ b/src/ZddDetector.cxx
@@ -18,65 +18,135 @@ ZddDetector::~ZddDetector() {}
 
 ////////////////////////////////////////////////////////////////////////////////
 void ZddDetector::ReadConfiguration(nptool::InputParser parser) {
-  auto blocks = parser.GetAllBlocksWithToken("zdd");
-
-  vector<string> TokenZDD  = {"R", "Theta"};
-  for(unsigned int i = 0 ; i < blocks.size() ; i++){
-    if (blocks[i]->HasTokenList(TokenZDD)) {
-        double R     = blocks[i]->GetDouble("R", "mm");
-        double Theta = blocks[i]->GetDouble("Theta", "deg");
-        Add_ZDD(R, Theta);
-    }
-    else{
-      cout << "ERROR: check your input file formatting " << endl;
-      exit(1);
+  auto                     blocks = parser.GetAllBlocksWithToken("zdd");
+  std::vector<std::string> token  = {"Type", "Board", "NUMEXOChannel"};
+
+  for (unsigned int i = 0; i < blocks.size(); i++) {
+    if (blocks[i]->HasTokenList(token)) {
+
+      std::string  Type  = blocks[i]->GetString("Type");
+      unsigned int Board = blocks[i]->GetInt("Board");
+
+      std::vector<int> NUMEXOChannel = blocks[i]->GetVectorInt("NUMEXOChannel");
+      unsigned int     NUMEXOChannel_size = NUMEXOChannel.size();
+
+      for (unsigned int j = 0; j < NUMEXOChannel_size; j++) {
+        unsigned int index = Board * 1e3 + (unsigned int)NUMEXOChannel[j];
+        SetNumexoMap(Type, Board, (unsigned int)NUMEXOChannel[j]);
+        // m_BoardDataTypeMap[index] = "ZDD";
+      }
     }
   }
+
   ReadAnalysisConfig();
 }
 
+////////////////////////////////////////////////////////////////////////////////
+void ZddDetector::SetNumexoMap(std::string Type, unsigned int Board,
+                               unsigned int NUMEXOChannel) {
+  unsigned int index = Board * 1e3 + NUMEXOChannel;
+  m_NumexoMap[index] = Type;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string ZddDetector::GetTypeFromNumexoMap(unsigned int Board,
+                                              unsigned int Channel) {
+  unsigned int index = Board * 1e3 + Channel;
+  std::string  Type  = m_NumexoMap[index];
+  return Type;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void ZddDetector::BuildRawEvent(const std::string& daq_name,
+                                const std::string& st_type_key,
+                                void*              commonframe) {
+#ifdef MFM_FOUND
+  int type_key = ((MFMCommonFrame*)commonframe)->GetFrameType();
+  if (type_key == MFM_REA_GENE_FRAME_TYPE) {
+    TreatFrame((MFMCommonFrame*)commonframe);
+  }
+#endif
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void ZddDetector::TreatFrame(void* commonframe) {
+#ifdef MFM_FOUND
+
+  std::shared_ptr<MFMReaGenericFrame> ReaFrame = std::make_shared<MFMReaGenericFrame>();
+  ReaFrame->SetAttributs(((MFMCommonFrame*)commonframe)->GetPointHeader());
+
+  int                Board   = -1;
+  int                Channel = -1;
+  unsigned short     E  = 0;
+  unsigned long long TS      = 0;
+  int                Time    = -1;
+
+  Board   = ReaFrame->GetBoardId();
+  Channel = ReaFrame->GetTGCristalId();
+  E  = ReaFrame->GetEnergy();
+  TS      = ReaFrame->GetTimeStamp();
+  Time    = ReaFrame->GetTime();
+
+  std::string Type = GetTypeFromNumexoMap(Board, Channel);
+
+  if (Type == "PL") {
+    m_RawData->SetZDDPL(Channel, E, TS);
+  } else if (Type == "IC") {
+    m_RawData->SetZDDIC(Channel, E, TS);
+  } else if (Type == "DC") {
+    m_RawData->SetZDDDC(Channel, E, TS);
+  } else if (Type == "EXO") {
+    m_RawData->SetZDDEXO(Channel, E, TS);
+  }
+
+#endif
+}
 
 void ZddDetector::BuildPhysicalEvent() {
 
-//   if (NPOptionManager::getInstance()->IsReader() == true) {
-//     m_RawData = &(**r_ReaderEventData);
-//   }
+  //   if (NPOptionManager::getInstance()->IsReader() == true) {
+  //     m_RawData = &(**r_ReaderEventData);
+  //   }
   // apply thresholds and calibration
   PreTreat();
 
   // match energy and time together
   Match_IC1();
-  if(m_PhysicsData->IC_Nbr.size() > 0)
+  if (m_PhysicsData->IC_Nbr.size() > 0)
     Match_PL();
   // Treat_DC();
 }
 
 ///////////////////////////////////////////////////////////////////////////
-void ZddDetector::Treat_DC(){
- /* // Dont have anything to modify for the moment
-  unsigned int mysizeDC = m_CalData->GetMultDrift();
-  for(int i = 0; i < mysizeDC; i++){
-    DC_DetectorNumber.push_back(m_CalData->GetDrift_DetectorNbr(i));
-    DC_DriftTime.push_back(m_CalData->Get_DriftTime(i));
-  }*/
+void ZddDetector::Treat_DC() {
+  /* // Dont have anything to modify for the moment
+   unsigned int mysizeDC = m_CalData->GetMultDrift();
+   for(int i = 0; i < mysizeDC; i++){
+     DC_DetectorNumber.push_back(m_CalData->GetDrift_DetectorNbr(i));
+     DC_DriftTime.push_back(m_CalData->Get_DriftTime(i));
+   }*/
 }
 ///////////////////////////////////////////////////////////////////////////
-void ZddDetector::Match_IC(){
-//////////////////////////////// Currently Simply matching if mult = 5, could be improved to treat mult > 5
-  if(m_CalData->GetZDD_ICMult() == 5){
-    // CHecking that each IC is only encountered once and then sorting them in the right order with the map
-    for(unsigned int i = 0; i < m_CalData->GetZDD_ICMult(); i++){
-    if(SortIC.find(m_CalData->GetZDD_ICN(i)) != SortIC.end()){
-      SortIC.clear();
-      break;
-    }
-    SortIC[m_CalData->GetZDD_ICN(i)] = std::make_pair(m_CalData->GetZDD_ICE(i),m_CalData->GetZDD_ICTS(i));
+void ZddDetector::Match_IC() {
+  //////////////////////////////// Currently Simply matching if mult = 5, could
+  /// be improved to treat mult > 5
+  if (m_CalData->GetZDD_ICMult() == 5) {
+    // CHecking that each IC is only encountered once and then sorting them in
+    // the right order with the map
+    for (unsigned int i = 0; i < m_CalData->GetZDD_ICMult(); i++) {
+      if (SortIC.find(m_CalData->GetZDD_ICN(i)) != SortIC.end()) {
+        SortIC.clear();
+        break;
+      }
+      SortIC[m_CalData->GetZDD_ICN(i)]
+          = std::make_pair(m_CalData->GetZDD_ICE(i), m_CalData->GetZDD_ICTS(i));
     }
     // Adding the IC info to the std::vectors
     m_PhysicsData->ICSum = 0;
-    for(auto it = SortIC.begin(); it != SortIC.end(); ++it){
-      m_PhysicsData->ICSum+= (it->second).first;
-      // std::cout << "Test " << it->first << " " << it->second.first << std::endl;
+    for (auto it = SortIC.begin(); it != SortIC.end(); ++it) {
+      m_PhysicsData->ICSum += (it->second).first;
+      // std::cout << "Test " << it->first << " " << it->second.first <<
+      // std::endl;
       m_PhysicsData->IC_Nbr.push_back(it->first);
       m_PhysicsData->IC_E.push_back((it->second).first);
       m_PhysicsData->IC_TS.push_back((it->second).second);
@@ -84,51 +154,56 @@ void ZddDetector::Match_IC(){
   }
 }
 
-void ZddDetector::Match_IC1(){
-//////////////////////////////// Currently Simply matching if mult = 5, could be improved to treat mult > 5
-    // CHecking that each IC is only encountered once and then sorting them in the right order with the map
-    for(unsigned int i = 0; i < m_CalData->GetZDD_ICMult(); i++){
-    if(SortIC.find(m_CalData->GetZDD_ICN(i)) == SortIC.end()){
-        SortIC[m_CalData->GetZDD_ICN(i)] = std::make_pair(m_CalData->GetZDD_ICE(i),m_CalData->GetZDD_ICTS(i));
-      }
+void ZddDetector::Match_IC1() {
+  //////////////////////////////// Currently Simply matching if mult = 5, could
+  /// be improved to treat mult > 5
+  // CHecking that each IC is only encountered once and then sorting them in the
+  // right order with the map
+  for (unsigned int i = 0; i < m_CalData->GetZDD_ICMult(); i++) {
+    if (SortIC.find(m_CalData->GetZDD_ICN(i)) == SortIC.end()) {
+      SortIC[m_CalData->GetZDD_ICN(i)]
+          = std::make_pair(m_CalData->GetZDD_ICE(i), m_CalData->GetZDD_ICTS(i));
     }
-    // Adding the IC info to the std::vectors
-    m_PhysicsData->ICSum = 0;
-    for(auto it = SortIC.begin(); it != SortIC.end(); ++it){
-    m_PhysicsData->ICSum+= (it->second).first;
+  }
+  // Adding the IC info to the std::vectors
+  m_PhysicsData->ICSum = 0;
+  for (auto it = SortIC.begin(); it != SortIC.end(); ++it) {
+    m_PhysicsData->ICSum += (it->second).first;
     m_PhysicsData->IC_Nbr.push_back(it->first);
     m_PhysicsData->IC_E.push_back((it->second).first);
     m_PhysicsData->IC_TS.push_back((it->second).second);
-    }
+  }
 }
 
-void ZddDetector::Match_PL(){
-  for(unsigned int i = 0; i < m_CalData->GetZDD_PLMult(); i++){
-    SortPL[m_CalData->GetZDD_PLN(i)] = std::make_pair(m_CalData->GetZDD_PLE(i),m_CalData->GetZDD_PLTS(i));
+void ZddDetector::Match_PL() {
+  for (unsigned int i = 0; i < m_CalData->GetZDD_PLMult(); i++) {
+    SortPL[m_CalData->GetZDD_PLN(i)]
+        = std::make_pair(m_CalData->GetZDD_PLE(i), m_CalData->GetZDD_PLTS(i));
   }
-  for(auto it = SortPL.begin(); it != SortPL.end(); ++it){
-  m_PhysicsData->PL_Nbr.push_back(it->first);
-  m_PhysicsData->PL_E.push_back((it->second).first);
-  m_PhysicsData->PL_TS.push_back((it->second).second);
+  for (auto it = SortPL.begin(); it != SortPL.end(); ++it) {
+    m_PhysicsData->PL_Nbr.push_back(it->first);
+    m_PhysicsData->PL_E.push_back((it->second).first);
+    m_PhysicsData->PL_TS.push_back((it->second).second);
   }
 }
 
-void ZddDetector::PreTreat() {
-  ClearPreTreatedData();
-}
+void ZddDetector::PreTreat() { ClearPreTreatedData(); }
 
 ///////////////////////////////////////////////////////////////////////////
-void ZddDetector::PreTreatEnergy(std::string Detector){
+void ZddDetector::PreTreatEnergy(std::string Detector) {
   /*unsigned int mysize = m_RawData->GetMultEnergy(Detector);
   for (UShort_t i = 0; i < mysize ; ++i) {
     if (m_RawData->Get_Energy(Detector, i) > m_E_RAW_Threshold) {
-      Double_t Energy = Cal->ApplyCalibration("ZDD/ENERGY"+nptool::itoa(m_RawData->GetE_DetectorNbr(Detector, i)),m_RawData->Get_Energy(Detector, i));
-      if (Energy > m_E_Threshold) {
+      Double_t Energy =
+  Cal->ApplyCalibration("ZDD/ENERGY"+nptool::itoa(m_RawData->GetE_DetectorNbr(Detector,
+  i)),m_RawData->Get_Energy(Detector, i)); if (Energy > m_E_Threshold) {
         if(Detector == "IC")
-          m_CalData->Set_IC_Energy(m_RawData->GetE_DetectorNbr(Detector, i), Energy);
+          m_CalData->Set_IC_Energy(m_RawData->GetE_DetectorNbr(Detector, i),
+  Energy);
 
         else if(Detector == "Plastic")
-          m_CalData->Set_Plastic_Energy(m_RawData->GetE_DetectorNbr(Detector, i), Energy);
+          m_CalData->Set_Plastic_Energy(m_RawData->GetE_DetectorNbr(Detector,
+  i), Energy);
       }
     }
   }
@@ -136,18 +211,19 @@ void ZddDetector::PreTreatEnergy(std::string Detector){
 }
 
 ///////////////////////////////////////////////////////////////////////////
-void ZddDetector::PreTreatTime(std::string Detector){
-/*  unsigned int mysize = m_RawData->GetMultTime(Detector);
-  for (UShort_t i = 0; i < mysize; ++i) {
-    Double_t Time= Cal->ApplyCalibration("ZDD/TIME"+nptool::itoa(m_RawData->GetT_DetectorNbr(Detector, i)),m_RawData->Get_Time(Detector,i));
-    if(Detector == "IC")
-      m_CalData->Set_IC_Time(m_RawData->GetT_DetectorNbr(Detector, i), Time);
-    else if(Detector == "Plastic")
-      m_CalData->Set_Plastic_Time(m_RawData->GetT_DetectorNbr(Detector, i), Time);
-    else if(Detector == "DC")
-      m_CalData->Set_DC_Time(m_RawData->GetT_DetectorNbr(Detector, i), Time);
-  }
-*/
+void ZddDetector::PreTreatTime(std::string Detector) {
+  /*  unsigned int mysize = m_RawData->GetMultTime(Detector);
+    for (UShort_t i = 0; i < mysize; ++i) {
+      Double_t Time=
+    Cal->ApplyCalibration("ZDD/TIME"+nptool::itoa(m_RawData->GetT_DetectorNbr(Detector,
+    i)),m_RawData->Get_Time(Detector,i)); if(Detector == "IC")
+        m_CalData->Set_IC_Time(m_RawData->GetT_DetectorNbr(Detector, i), Time);
+      else if(Detector == "Plastic")
+        m_CalData->Set_Plastic_Time(m_RawData->GetT_DetectorNbr(Detector, i),
+    Time); else if(Detector == "DC")
+        m_CalData->Set_DC_Time(m_RawData->GetT_DetectorNbr(Detector, i), Time);
+    }
+  */
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -162,63 +238,62 @@ void ZddDetector::ReadAnalysisConfig() {
   AnalysisConfigFile.open(FileName.c_str());
 
   if (!AnalysisConfigFile.is_open()) {
-    cout << " No ConfigZDD.dat found: Default parameter loaded for Analayis " << FileName << endl;
+    cout << " No ConfigZDD.dat found: Default parameter loaded for Analayis "
+         << FileName << endl;
     return;
   }
   cout << " Loading user parameter for Analysis from ConfigZDD.dat " << endl;
 
   //// Save it in a TAsciiFile
-  //TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig();
-  //asciiConfig->AppendLine("%%% ConfigZDD.dat %%%");
-  //asciiConfig->Append(FileName.c_str());
-  //asciiConfig->AppendLine("");
-  // read analysis config file
-  string LineBuffer,DataBuffer,whatToDo;
+  // TAsciiFile* asciiConfig =
+  // RootOutput::getInstance()->GetAsciiFileAnalysisConfig();
+  // asciiConfig->AppendLine("%%% ConfigZDD.dat %%%");
+  // asciiConfig->Append(FileName.c_str());
+  // asciiConfig->AppendLine("");
+  //  read analysis config file
+  string LineBuffer, DataBuffer, whatToDo;
   while (!AnalysisConfigFile.eof()) {
     // Pick-up next line
     getline(AnalysisConfigFile, LineBuffer);
 
     // search for "header"
     string name = "ConfigZDD";
-    if (LineBuffer.compare(0, name.length(), name) == 0) 
+    if (LineBuffer.compare(0, name.length(), name) == 0)
       ReadingStatus = true;
 
     // loop on tokens and data
-    while (ReadingStatus ) {
-      whatToDo="";
+    while (ReadingStatus) {
+      whatToDo = "";
       AnalysisConfigFile >> whatToDo;
 
       // Search for comment symbol (%)
       if (whatToDo.compare(0, 1, "%") == 0) {
-        AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' );
+        AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n');
       }
 
-      else if (whatToDo=="IC_E_RAW_THRESHOLD") {
+      else if (whatToDo == "IC_E_RAW_THRESHOLD") {
         AnalysisConfigFile >> DataBuffer;
         m_IC_E_RAW_Threshold = atof(DataBuffer.c_str());
         cout << whatToDo << " " << m_IC_E_RAW_Threshold << endl;
-      }
-      else if (whatToDo=="PL_E_RAW_THRESHOLD") {
+      } else if (whatToDo == "PL_E_RAW_THRESHOLD") {
         AnalysisConfigFile >> DataBuffer;
         m_PL_E_RAW_Threshold = atof(DataBuffer.c_str());
         cout << whatToDo << " " << m_PL_E_RAW_Threshold << endl;
-      }
-      else if (whatToDo=="DC_E_RAW_THRESHOLD") {
+      } else if (whatToDo == "DC_E_RAW_THRESHOLD") {
         AnalysisConfigFile >> DataBuffer;
         m_DC_E_RAW_Threshold = atof(DataBuffer.c_str());
         cout << whatToDo << " " << m_DC_E_RAW_Threshold << endl;
-      }
-      else if (whatToDo=="EXO_E_RAW_THRESHOLD") {
+      } else if (whatToDo == "EXO_E_RAW_THRESHOLD") {
         AnalysisConfigFile >> DataBuffer;
         m_EXO_E_RAW_Threshold = atof(DataBuffer.c_str());
         cout << whatToDo << " " << m_EXO_E_RAW_Threshold << endl;
-      }
-      else if (whatToDo=="MAP_IC") {
+      } else if (whatToDo == "MAP_IC") {
         AnalysisConfigFile >> DataBuffer;
-        Map_IC[atoi(DataBuffer.substr(0,1).c_str())] = atoi(DataBuffer.substr(1,1).c_str());
-        cout << whatToDo << " " << atoi(DataBuffer.substr(0,1).c_str()) << " " << atoi(DataBuffer.substr(1,1).c_str()) << endl;
-      }
-      else if (whatToDo=="E_THRESHOLD") {
+        Map_IC[atoi(DataBuffer.substr(0, 1).c_str())]
+            = atoi(DataBuffer.substr(1, 1).c_str());
+        cout << whatToDo << " " << atoi(DataBuffer.substr(0, 1).c_str()) << " "
+             << atoi(DataBuffer.substr(1, 1).c_str()) << endl;
+      } else if (whatToDo == "E_THRESHOLD") {
         AnalysisConfigFile >> DataBuffer;
         m_E_Threshold = atof(DataBuffer.c_str());
         cout << whatToDo << " " << m_E_Threshold << endl;
diff --git a/src/ZddDetector.h b/src/ZddDetector.h
index a52a0837805b0c433fcd8395e8c33d0a2cf2189d..adc3ed291afb4968d4797bb88f938f25924870e8 100644
--- a/src/ZddDetector.h
+++ b/src/ZddDetector.h
@@ -18,6 +18,11 @@
 #include "TVector2.h"
 #include "TVector3.h"
 
+// MFM
+#ifdef MFM_FOUND
+#include "MFMAllFrames.h"
+#endif
+
 namespace zdd {
 
 class ZddDetector : public nptool::VDetector {
@@ -40,7 +45,7 @@ public: // inherrited from nptool::VDetector
   void ReadConfiguration(nptool::InputParser);
 
   //  Add Parameter to the CalibrationManger
-  void AddParameterToCalibrationManager(){};
+  void AddParameterToCalibrationManager() {};
 
   //  Activated associated Branches and link it to the private member
   //  DetectorData address In this method mother Branches (Detector) AND
@@ -60,6 +65,24 @@ public: // inherrited from nptool::VDetector
   //  address
   void InitializeDataOutputPhysics(std::shared_ptr<nptool::VDataOutput>);
 
+  //  This method is called at each event of a conversion to fill in the data
+  //  class
+  void BuildRawEvent(const std::string& daq_name, const std::string& label,
+                     void* commonframe);
+
+  void SetNumexoMap(std::string Type, unsigned int Board,
+                    unsigned int NUMEXOChannel);
+
+  std::string GetTypeFromNumexoMap(unsigned int Board, unsigned int Channel);
+  void TreatFrame(void* commonframe);
+
+#ifdef MFM_FOUND
+  MFMMergeFrame*  MergeFrame;
+  MFMCommonFrame* InsideFrame;
+#endif
+
+  std::map<unsigned int, std::string> m_NumexoMap;
+
   //  This method is called at each event read from the Input Tree. Aim is to
   //  build treat Raw dat in order to extract physical parameter.
   void BuildPhysicalEvent();
@@ -67,8 +90,8 @@ public: // inherrited from nptool::VDetector
   void PreTreat();
   void ClearPreTreatedData() { m_CalData->Clear(); }
   //  Those two method all to clear the Event Physics or Data
-  void ClearEventPhysics(){};
-  void ClearEventData(){};
+  void ClearEventPhysics() { m_PhysicsData->Clear(); };
+  void ClearEventData() { m_RawData->Clear(); };
 
   void Treat_DC();
   // Matching IC
@@ -124,18 +147,18 @@ private:
   // 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(){};
+  void InitSpectra() {};
   // Fill the spectra hold by the spectra class
-  void FillSpectra(){};
+  void FillSpectra() {};
   // Write the spectra to a file
-  void WriteSpectra(){};
+  void WriteSpectra() {};
   // Used for Online mainly, perform check on the histo and for example change
   // their color if issues are found
-  void CheckSpectra(){};
+  void CheckSpectra() {};
   // Used for Online only, clear all the spectra hold by the Spectra class
-  void ClearSpectra(){};
+  void ClearSpectra() {};
   // Used for interoperability with other framework
-  void SetRawDataPointer(void*){};
+  void SetRawDataPointer(void*) {};
 
 private:
 private: //   Parameter used in the analysis
diff --git a/src/ZddPhysics.cxx b/src/ZddPhysics.cxx
index 2f45eaf8bb60f268e34fa56ae4001462d54845a6..360cc7b67e1c9617ab85fa6d5c18b82cefb886a8 100644
--- a/src/ZddPhysics.cxx
+++ b/src/ZddPhysics.cxx
@@ -1,16 +1,16 @@
 #include "ZddPhysics.h"
 
 ///////////////////////////////////////////////////////////////////////////
-// void ZddDetector::Clear() {
-//   m_PhysicsData->IC_Nbr.clear();
-//   m_PhysicsData->IC_E.clear();
-//   m_PhysicsData->IC_TS.clear();
-//   m_PhysicsData->PL_Nbr.clear();
-//   m_PhysicsData->PL_E.clear();
-//   m_PhysicsData->PL_TS.clear();
-//   m_PhysicsData->ICSum = 0;
-//   SortIC.clear();
-//   SortPL.clear();
-//   DC_DetectorNumber.clear();
-//   DC_DriftTime.clear();
-// }
+void zdd::ZddPhysics::Clear() {
+  IC_Nbr.clear();
+  IC_E.clear();
+  IC_TS.clear();
+  PL_Nbr.clear();
+  PL_E.clear();
+  PL_TS.clear();
+  ICSum = 0;
+  // SortIC.clear();
+  // SortPL.clear();
+  DC_DetectorNumber.clear();
+  DC_DriftTime.clear();
+}