diff --git a/NPLib/CATS/TCATSPhysics.h b/NPLib/CATS/TCATSPhysics.h
index 3093d666965de8aed3c341235e9076aa96a0914f..68469386491419d2ff5ad443ee1bc454283be282 100644
--- a/NPLib/CATS/TCATSPhysics.h
+++ b/NPLib/CATS/TCATSPhysics.h
@@ -163,6 +163,9 @@ class TCATSPhysics : public TObject, public NPA::VDetector
 
       void BuildSimplePhysicalEvent();
 
+      // Same as above but for online analysis
+      void BuildOnlinePhysicalEvent()  {BuildSimplePhysicalEvent();};
+
       //   Those two method all to clear the Event Physics or Data
       void ClearEventPhysics() {Clear();}      
       void ClearEventData()    {m_EventData->Clear();}    
diff --git a/NPLib/ChateauCristal/Makefile b/NPLib/ChateauCristal/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..31eb3779b49b8c6e7f9bb32ed98b4fed95bea5e8
--- /dev/null
+++ b/NPLib/ChateauCristal/Makefile
@@ -0,0 +1,43 @@
+include ../Makefile.arch
+
+#------------------------------------------------------------------------------
+SHARELIB      =  libChateauCristalData.so	libChateauCristalPhysics.so
+
+all:            $(SHARELIB)
+#------------------------------------------------------------------------------
+############### Detector ##############
+
+## ChateauCristal ##
+libChateauCristalData.so:	TChateauCristalData.o	TChateauCristalDataDict.o
+		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@
+
+TChateauCristalDataDict.cxx:	TChateauCristalData.h
+			rootcint -f $@ -c $^
+
+libChateauCristalPhysics.so:	TChateauCristalPhysics.o	TChateauCristalPhysicsDict.o
+		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@
+
+TChateauCristalPhysicsDict.cxx: TChateauCristalPhysics.h
+			rootcint -f $@ -c $^
+
+# dependances
+TChateauCristalData.o:		TChateauCristalData.cxx	TChateauCristalData.h
+TChateauCristalDataDict.o:		TChateauCristalDataDict.cxx	TChateauCristalDataDict.h
+TChateauCristalPhysics.o:	TChateauCristalPhysics.cxx	TChateauCristalPhysics.h
+#######################################
+
+############# Clean and More ##########
+clean:
+	@rm -f core *~ *.o *Dict*
+
+distclean:
+	  make clean; rm -f *.so
+
+.SUFFIXES: .$(SrcSuf)
+
+###
+
+.$(SrcSuf).$(ObjSuf):
+	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
+
+
diff --git a/NPLib/ChateauCristal/TChateauCristalData.cxx b/NPLib/ChateauCristal/TChateauCristalData.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..c76ba284d0a9143ed17969b40a0130c06c8e4e39
--- /dev/null
+++ b/NPLib/ChateauCristal/TChateauCristalData.cxx
@@ -0,0 +1,56 @@
+#include <iostream>
+#include "TChateauCristalData.h"
+
+/*****************************************************************************
+ * Copyright (C) 2009   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: M. Labiche    contact address: marc.labiche@stfc.ac.uk   *
+ *                                                                           *
+ * Creation Date  : 04/12/2009                                               *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class describes the raw data of the ChateauCristal detector         *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+
+ClassImp(TChateauCristalData)
+
+TChateauCristalData::TChateauCristalData()
+{
+    fChateauCristal_EDetectorNbr.clear();
+    fChateauCristal_Energy.clear();
+    fChateauCristal_TDetectorNbr.clear();
+    fChateauCristal_Time.clear();
+}
+
+TChateauCristalData::~TChateauCristalData()
+{
+}
+
+void TChateauCristalData::Clear()
+{
+    fChateauCristal_EDetectorNbr.clear();
+    fChateauCristal_Energy.clear();
+    fChateauCristal_TDetectorNbr.clear();
+    fChateauCristal_Time.clear();
+}
+
+void TChateauCristalData::Dump() const
+{
+   cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl;
+
+   for (unsigned short i = 0; i<fChateauCristal_Energy.size(); i ++) {
+     cout << "ChateauCristal Energy Number " << fChateauCristal_EDetectorNbr[i] << " Energy: " << fChateauCristal_Energy[i] << endl;
+     cout << "ChateauCristal Time Number " << fChateauCristal_TDetectorNbr[i] << " Time: "<< fChateauCristal_Time[i] << endl;
+   }
+}
\ No newline at end of file
diff --git a/NPLib/ChateauCristal/TChateauCristalData.h b/NPLib/ChateauCristal/TChateauCristalData.h
new file mode 100644
index 0000000000000000000000000000000000000000..8c2fd64c88fea97adff9e23ca9e33124834078a5
--- /dev/null
+++ b/NPLib/ChateauCristal/TChateauCristalData.h
@@ -0,0 +1,64 @@
+#ifndef __ChateauCristalDATA__
+#define __ChateauCristalDATA__
+/*****************************************************************************
+ * Copyright (C) 2009   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: M. Labiche    contact address: marc.labiche@stfc.ac.uk   *
+ *                                                                           *
+ * Creation Date  : 04/12/2009                                               *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class describes the raw data of the ChateauCristal detector         *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+#include <vector>
+
+#include "TObject.h"
+using namespace std ;
+
+
+class TChateauCristalData : public TObject {
+
+ private:
+   vector<UShort_t>   fChateauCristal_EDetectorNbr;
+   vector<Double_t>   fChateauCristal_Energy;
+   vector<UShort_t>   fChateauCristal_TDetectorNbr;
+   vector<Double_t>   fChateauCristal_Time;
+
+ public:
+   TChateauCristalData();
+   virtual ~TChateauCristalData();
+
+   void   Clear();
+   void   Clear(const Option_t*) {};
+   void   Dump() const;
+
+   /////////////////////           SETTERS           ////////////////////////
+   void   SetChateauCristalEDetectorNbr(const UShort_t DetNbr)    {fChateauCristal_EDetectorNbr.push_back(DetNbr);}
+   void   SetChateauCristalEnergy      (const Double_t Energy)	   {fChateauCristal_Energy.push_back(Energy);}
+   void   SetChateauCristalTDetectorNbr(const UShort_t DetNbr)    {fChateauCristal_TDetectorNbr.push_back(DetNbr);}
+   void   SetChateauCristalTime        (const Double_t Time)      {fChateauCristal_Time.push_back(Time);}
+
+   /////////////////////           GETTERS           ////////////////////////
+   UShort_t  GetChateauCristalEnergyMult()		                  const {return fChateauCristal_EDetectorNbr.size();}
+   UShort_t  GetChateauCristalEDetectorNbr(const Int_t i)         const {return fChateauCristal_EDetectorNbr[i];}
+   Double_t   GetChateauCristalEnergy(const Int_t i)   	         const {return fChateauCristal_Energy[i];}
+
+   UShort_t   GetChateauCristalTimeMult()		                     const {return fChateauCristal_TDetectorNbr.size();}
+   UShort_t   GetChateauCristalTDetectorNbr(const Int_t i)        const {return fChateauCristal_TDetectorNbr[i];}
+   Double_t   GetChateauCristalTime(const Int_t i)	               const {return fChateauCristal_Time[i];}
+   
+   ClassDef(TChateauCristalData,1)  // ChateauCristalData structure
+};
+
+#endif
diff --git a/NPLib/ChateauCristal/TChateauCristalPhysics.cxx b/NPLib/ChateauCristal/TChateauCristalPhysics.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..b7eb23f0346dc91e01c9de6d49250a87f3129191
--- /dev/null
+++ b/NPLib/ChateauCristal/TChateauCristalPhysics.cxx
@@ -0,0 +1,383 @@
+/*****************************************************************************
+ * Copyright (C) 2009-2010   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: E611                                                     *
+ *                                                                           *
+ * Creation Date  : May 2012                                                 *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class holds Chateau de Cristal Physics                              *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+
+// NPL
+#include "TChateauCristalPhysics.h"
+#include "RootOutput.h"
+#include "RootInput.h"
+
+// C++
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include <limits>
+#include <stdlib.h>
+#include <cmath>
+using namespace std;
+using namespace ChateauCristal_LOCAL;
+
+//  ROOT
+#include "TChain.h"
+
+//  transform an integer to a string
+string itoa(int value)
+{
+   std::ostringstream o;
+   if (!(o << value))
+      return ""  ;
+   return o.str();
+}
+
+ClassImp(TChateauCristalPhysics)
+
+///////////////////////////////////////////////////////////////////////////
+TChateauCristalPhysics::TChateauCristalPhysics()
+{    
+   NumberOfDetectors = 0;
+   EventData = new TChateauCristalData;
+   PreTreatedData = new TChateauCristalData;
+   EventPhysics = this;
+   E_Threshold = 0.;
+   Pedestal_Threshold = 0;
+}
+
+///////////////////////////////////////////////////////////////////////////
+TChateauCristalPhysics::~TChateauCristalPhysics()
+{}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::Clear()
+{
+   DetectorNumber  .clear() ;
+   Energy          .clear() ;
+   Time            .clear() ;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::ReadConfiguration(string Path) 
+{
+   ifstream ConfigFile           ;
+   ConfigFile.open(Path.c_str()) ;
+   string LineBuffer             ;
+   string DataBuffer             ;
+   string AngleFile;
+
+   bool check_A       = false;
+   bool ReadingStatus = false;
+
+   while (!ConfigFile.eof()) {
+
+      getline(ConfigFile, LineBuffer);
+
+      //  If line is a Start Up ChateauCristal bloc, Reading toggle to true      
+      if (LineBuffer.compare(0, 14, "ChateauCristal") == 0) //whole array at once
+         //if (LineBuffer.compare(0, 4, "BAF2") == 0) //individual detector
+      {
+         cout << "Chateau de Cristal found: " << endl   ;        
+         //         NumberOfDetectors=64;//simplify matters to read whole array at once sf
+         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=="BAF2") {
+         //       cout << "WARNING: Another Telescope is founnd before standard sequence of Token, Error may occured in detector definition" << endl ;
+         //       ReadingStatus = false ;
+         //     }
+
+         //  File angle method 
+
+         if (DataBuffer.compare(0, 12, "ANGLES_FILE=") == 0) {
+            check_A = true;
+            ConfigFile >> DataBuffer ;
+            AngleFile = DataBuffer;
+
+            cout << "File angle used : " << DataBuffer << endl;
+         }
+
+         //  End File angle Method
+
+         /////////////////////////////////////////////////
+         //   If All necessary information there, toggle out
+         if (check_A)
+         {
+            ReadingStatus = false;
+
+            ///Add The previously define telescope
+
+            AddModule(AngleFile);
+
+            check_A = false;
+         }
+      }
+   }
+
+   InitializeStandardParameter() ;
+   ReadAnalysisConfig()          ;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::AddParameterToCalibrationManager()
+{
+   CalibrationManager* Cal = CalibrationManager::getInstance();
+
+   for(int i = 0 ; i < NumberOfDetectors ; ++i){
+      Cal->AddParameter("ChateauCristal", "Detector"+itoa(i+1)+"_E","ChateauCristal_DETECTOR_"+itoa(i+1)+"_E")  ;
+      Cal->AddParameter("ChateauCristal", "Detector"+itoa(i+1)+"_T","ChateauCristal_DETECTOR_"+itoa(i+1)+"_T")  ;  
+   }
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::InitializeRootInputRaw()
+{
+   TChain* inputChain = RootInput::getInstance()->GetChain();
+   inputChain->SetBranchStatus ( "ChateauCristal"     , true );
+   inputChain->SetBranchStatus ( "fChateauCristal_*"  , true );
+   inputChain->SetBranchAddress( "ChateauCristal"     , &EventData );
+}     
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::InitializeRootInputPhysics()
+{
+   TChain* inputChain = RootInput::getInstance()->GetChain();
+   inputChain->SetBranchStatus ( "ChateauCristal"          , true );
+   inputChain->SetBranchStatus ( "DetectorNumber", true );
+   inputChain->SetBranchStatus ( "Energy"        , true );
+   inputChain->SetBranchStatus ( "Time"          , true );
+   inputChain->SetBranchAddress( "ChateauCristal"          , &EventPhysics );
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::InitializeRootOutput()
+{
+   TTree* outputTree = RootOutput::getInstance()->GetTree()      ;
+   outputTree->Branch( "ChateauCristal" , "TChateauCristalPhysics" , &EventPhysics )  ;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::BuildPhysicalEvent()
+{
+   BuildSimplePhysicalEvent()  ;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::BuildSimplePhysicalEvent()
+{
+   PreTreat();
+
+   for(unsigned int i = 0 ; i <   PreTreatedData->GetChateauCristalEnergyMult() ; ++i)
+   {
+      DetectorNumber  .push_back(   PreTreatedData->GetChateauCristalEDetectorNbr(i) )  ;
+      Energy          .push_back(   PreTreatedData->GetChateauCristalEnergy(i)       )  ; 
+      // Look for associated time
+      for(unsigned int j = 0 ; j <   PreTreatedData->GetChateauCristalTimeMult() ; ++j )
+      {
+         if(PreTreatedData->GetChateauCristalEDetectorNbr(i) == PreTreatedData->GetChateauCristalTDetectorNbr(j))
+            Time.push_back(PreTreatedData->GetChateauCristalTime(j));
+      }                        
+   }
+   return;    
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::PreTreat()
+{
+   ClearPreTreatedData();
+
+   //  E
+   for(int i = 0 ; i < EventData->GetChateauCristalEnergyMult() ; ++i)
+   {
+      if(EventData->GetChateauCristalEnergy(i) > Pedestal_Threshold && ChannelStatus[EventData->GetChateauCristalEDetectorNbr(i)-1])
+      {
+         double E = fChateauCristal_E(EventData , i); 
+         if( E > E_Threshold )
+         {
+            PreTreatedData->SetChateauCristalEDetectorNbr( EventData->GetChateauCristalEDetectorNbr(i) )  ;
+            PreTreatedData->SetChateauCristalEnergy( E )                                              ;
+         }
+      } 
+   }
+
+   //  T
+   for(int i = 0 ; i < EventData->GetChateauCristalTimeMult() ; ++i)
+   {
+      if(ChannelStatus[EventData->GetChateauCristalTDetectorNbr(i)-1])
+      {
+         PreTreatedData->SetChateauCristalTDetectorNbr( EventData->GetChateauCristalTDetectorNbr(i) )  ;
+         PreTreatedData->SetChateauCristalTime( fChateauCristal_T(EventData , i) )                         ;
+      }
+   }
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::InitializeStandardParameter()
+{
+   //  Enable all channels
+   bool TempChannelStatus;
+   ChannelStatus.clear();
+   TempChannelStatus=true;
+   for(int i = 0 ; i < NumberOfDetectors ; ++i)   
+      ChannelStatus[i] = TempChannelStatus;
+}
+
+///////////////////////////////////////////////////////////////////////////
+void TChateauCristalPhysics::ReadAnalysisConfig()
+{
+   bool ReadingStatus = false;
+
+   // path to file
+   string FileName = string(getenv("E611")) + string("/configs/ConfigChateauCristal.dat");
+   //string FileName = "./configs/ConfigChateauCristal.dat";
+
+   // open analysis config file
+   ifstream AnalysisConfigFile;
+   AnalysisConfigFile.open(FileName.c_str());
+
+   if (!AnalysisConfigFile.is_open()) {
+      cout << "No ConfigChateauCristal.dat found: default parameters loaded for analysis " << FileName << endl;
+      return;
+   }
+   cout << "Loading user parameters for analysis from ConfigChateauCristal.dat " << endl;
+
+   // Save it in a TAsciiFile
+   TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig();
+   asciiConfig->AppendLine("%%% ConfigChateauCristal.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"
+      if (LineBuffer.compare(0, 9, "ConfigChateauCristal") == 0) ReadingStatus = true;
+
+      // loop on tokens and data
+      while (ReadingStatus) {
+
+         whatToDo= "" ;
+         AnalysisConfigFile >> whatToDo;
+
+         // Search for comment symbol (%)
+         if (whatToDo.compare(0, 1, "%") == 0) {
+            AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' );
+         }
+
+         else if (whatToDo=="PEDESTAL_THRESHOLD") {
+            AnalysisConfigFile >> DataBuffer;
+            Pedestal_Threshold = atoi(DataBuffer.c_str() );
+            cout << "PEDESTAL THRESHOLD  " << Pedestal_Threshold << endl;
+         }
+
+         else if (whatToDo=="DISABLE") {
+            AnalysisConfigFile >> DataBuffer;
+            cout << whatToDo << "  " << DataBuffer << endl;
+            int Detector = atoi(DataBuffer.substr(2,1).c_str());
+            bool ChannelStatusBuffer;
+            ChannelStatusBuffer=false;
+            ChannelStatus[Detector-1] = ChannelStatusBuffer;
+         }
+
+         else {
+            ReadingStatus = false;
+         }
+      }
+   }
+}   
+
+
+
+void TChateauCristalPhysics::AddModule(string AngleFile)
+{
+   ifstream file;
+   //  TString filename = Form("posBaptiste/angles_exogam_clover%d.txt",NumberOfClover);
+   //  TString filename = Form("posz42_simu50mm/angles_exogam_clover%d.txt",NumberOfClover);
+   //  TString filename = Form("posz42_exp_stat_demiring/angles_exogam_clover%d.txt",NumberOfClover);
+
+   string path = "posz42_exp_stat_demiring/";
+   TString filename = path + AngleFile;
+
+   cout << filename << endl;
+   file.open(filename);
+   if (!file) cout << filename << " was not opened" << endl;
+
+   map<int, double> mapDetectorAngleCorrec, mapDetectorAngleGeo;
+
+
+   double angle_correc, angle_geo; 
+   string buffer;
+   int det;
+
+   while (!file.eof()) {
+      file >> buffer >> det >> angle_correc >> angle_geo;
+      mapDetectorAngleCorrec[det] = angle_correc; 
+      mapDetectorAngleGeo[det]    = angle_geo; 
+      NumberOfDetectors++;
+   }
+
+   file.close();
+}
+
+
+
+double TChateauCristalPhysics::DopplerCorrection(double E, double Theta)
+{
+   double Pi = 3.141592654 ;
+
+   double E_corr = 0;
+   //double beta = 0.197;     // baptiste value
+   double beta = 0.23;
+   double gamma = 1./ sqrt(1-beta*beta);
+
+   E_corr = gamma * E * ( 1. - beta * cos(Theta*Pi/180.));
+
+   return E_corr;
+}
+
+///////////////////////////////////////////////////////////////////////////
+double ChateauCristal_LOCAL::fChateauCristal_E( const TChateauCristalData* EventData , const int i )
+{
+   return CalibrationManager::getInstance()->ApplyCalibration("ChateauCristal/Detector" + itoa( EventData->GetChateauCristalEDetectorNbr(i) ) +"_E",  
+         EventData->GetChateauCristalEnergy(i) );
+}
+
+double ChateauCristal_LOCAL::fChateauCristal_T( const TChateauCristalData* EventData , const int i )
+{
+   return CalibrationManager::getInstance()->ApplyCalibration("ChateauCristal/Detector" + itoa( EventData->GetChateauCristalTDetectorNbr(i) ) +"_T",  
+         EventData->GetChateauCristalTime(i) );
+}  
+
+
+
diff --git a/NPLib/ChateauCristal/TChateauCristalPhysics.h b/NPLib/ChateauCristal/TChateauCristalPhysics.h
new file mode 100644
index 0000000000000000000000000000000000000000..2c56c2ab94dcc517d1b04c4a703ca317bad0f901
--- /dev/null
+++ b/NPLib/ChateauCristal/TChateauCristalPhysics.h
@@ -0,0 +1,134 @@
+#ifndef __ChateauCristalPhysics__
+#define __ChateauCristalPhysics__
+/*****************************************************************************
+ * Copyright (C) 2009-2010   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@ipno.in2p3.fr       *
+ *                                                                           *
+ * Creation Date  : November 2009                                            *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Description:                                                              *
+ *                                                                           *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+
+//   STL
+#include <vector>
+using namespace std ;
+//   ROOT
+#include "TObject.h"
+//   NPL
+#include "TChateauCristalData.h"
+#include "../include/VDetector.h"
+#include "../include/CalibrationManager.h"
+
+class TChateauCristalPhysics : public TObject, public NPA::VDetector
+{
+ public:   //   Constructor and Destructor
+   TChateauCristalPhysics();
+   ~TChateauCristalPhysics();
+
+ public:   //   Calibrated Data
+   vector<UShort_t>   DetectorNumber;
+   vector<Double_t>   Energy;
+   vector<Double_t>   Time;
+
+   map<Int_t, Double_t> mapDetectorAngleCorrec; //!
+   map<Int_t, Double_t> mapDetectorAngleGeo;    //!
+
+ public:   //   inherited from VDetector
+   // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token
+   void ReadConfiguration(string);
+      
+   // Add Parameter to the CalibrationManager
+   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()    {EventData->Clear();}
+
+ public: //   Specific to ChateauCristal
+   // Clear The PreTeated object
+   void ClearPreTreatedData()   {PreTreatedData->Clear();}
+      
+   // 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();
+
+   // Give an external TChateauCristalData object to TChateauCristalPhysics, needed for online analysis
+   void SetRawDataPointer(TChateauCristalData* rawDataPointer) {EventData = rawDataPointer;}
+ 
+   // Retrieve pre-treated data
+   TChateauCristalData* GetPreTreatedData() const {return PreTreatedData;}
+
+ protected:
+   double DopplerCorrection(double Energy, double Theta);
+
+   // Add a BaF2 module
+   void AddModule(string AngleFile);
+
+private:   // Data not written in the tree
+   int           NumberOfDetectors;//!
+   TChateauCristalData*    EventData;//!
+   TChateauCristalData*    PreTreatedData;//!
+   TChateauCristalPhysics* EventPhysics;//!
+
+   double E_Threshold;//!
+   double Pedestal_Threshold;//!
+            
+ private: //  Map of activated Channel
+   map< int, bool > ChannelStatus;//!
+    
+ public:  
+   void Clear();
+   void Clear(const Option_t*) {};
+   
+   ClassDef(TChateauCristalPhysics,1)  // ChateauCristalPhysics structure
+};
+
+
+namespace ChateauCristal_LOCAL
+{
+   double fChateauCristal_E( const TChateauCristalData* EventData , const int i );
+   double fChateauCristal_T( const TChateauCristalData* EventData , const int i );
+}
+
+#endif