Index: trunk/FACT++/src/DataCalib.cc
===================================================================
--- trunk/FACT++/src/DataCalib.cc	(revision 16054)
+++ trunk/FACT++/src/DataCalib.cc	(revision 16055)
@@ -89,7 +89,7 @@
 }
 
-bool DataCalib::Open(const RUN_HEAD* h, const FAD::RunDescription &d)
-{
-    if (h->NPix != 1440)
+bool DataCalib::Open(const RUN_HEAD &h, const FAD::RunDescription &d)
+{
+    if (h.NPix != 1440)
     {
         Error("Number of pixels in header for run "+to_string(GetRunId())+" not 1440.");
@@ -109,8 +109,8 @@
     }
 
-    if (fData.fStep!=2 && h->Nroi != 1024)
+    if (fData.fStep!=2 && h.Nroi != 1024)
     {
         ostringstream msg;
-        msg << "Region of interest of run " << GetRunId() << " not 1024, but " << h->Nroi << " in step " << fData.fStep <<  " ... as it ought to be.";
+        msg << "Region of interest of run " << GetRunId() << " not 1024, but " << h.Nroi << " in step " << fData.fStep <<  " ... as it ought to be.";
         Error(msg);
         return false;
@@ -121,7 +121,7 @@
     // We don't check consistency over several boards because this is done
     // by the eventCheck routine already
-    for (int i=0; i<h->NBoard; i++)
-    {
-        const PEVNT_HEADER &hh = h->FADhead[i];
+    for (int i=0; i<h.NBoard; i++)
+    {
+        const PEVNT_HEADER &hh = h.FADhead[i];
 
         if (hh.start_package_flag==0)
@@ -164,8 +164,8 @@
     fProcessing = true;
 
-    const bool hastm = h->Nroi<=512 && h->NroiTM>=2*h->Nroi;
+    const bool hastm = h.Nroi<=512 && h.NroiTM>=2*h.Nroi;
 
     Reset();
-    InitSize(hastm ? 1600 : 1440, h->Nroi);
+    InitSize(hastm ? 1600 : 1440, h.Nroi);
 
     fData.fRoi   = fNumSamples;
@@ -175,5 +175,5 @@
 }
 
-bool DataCalib::WriteEvt(const EVENT *e)
+bool DataCalib::WriteEvt(const EVENT &e)
 {
     // FIXME: SET StartPix to 0 if StartPix is -1
@@ -181,13 +181,13 @@
     if (fData.fStep==0)
     {
-        AddRel(e->Adc_Data, e->StartPix);
+        AddRel(e.Adc_Data, e.StartPix);
     }
     if (fData.fStep==1)
     {
-        AddRel(e->Adc_Data, e->StartPix, fData.fOffset.data(), fData.fNumOffset);
+        AddRel(e.Adc_Data, e.StartPix, fData.fOffset.data(), fData.fNumOffset);
     }
     if (fData.fStep==2)
     {
-        AddAbs(e->Adc_Data, e->StartPix, fData.fOffset.data(), fData.fNumOffset);
+        AddAbs(e.Adc_Data, e.StartPix, fData.fOffset.data(), fData.fNumOffset);
     }
 
Index: trunk/FACT++/src/DataCalib.h
===================================================================
--- trunk/FACT++/src/DataCalib.h	(revision 16054)
+++ trunk/FACT++/src/DataCalib.h	(revision 16055)
@@ -37,6 +37,6 @@
     static void Update(DimDescribedService &dim, DimDescribedService &runs);
 
-    bool Open(const RUN_HEAD* h, const FAD::RunDescription &d);
-    bool WriteEvt(const EVENT *e);
+    bool Open(const RUN_HEAD &h, const FAD::RunDescription &d);
+    bool WriteEvt(const EVENT &e);
     bool Close(const RUN_TAIL * = 0);
 
@@ -51,4 +51,6 @@
     static bool IsValid() { return fData.IsValid(); }
     static int  GetStep() { return fData.fStep; }
+
+    static const DrsCalibration &GetCalibration() { return fData; }
 };
 
Index: trunk/FACT++/src/DataProcessorImp.cc
===================================================================
--- trunk/FACT++/src/DataProcessorImp.cc	(revision 16054)
+++ trunk/FACT++/src/DataProcessorImp.cc	(revision 16055)
@@ -45,5 +45,5 @@
 // =======================================================================
 
-bool DataDump::Open(const RUN_HEAD* h, const FAD::RunDescription &)
+bool DataDump::Open(const RUN_HEAD &h, const FAD::RunDescription &)
 {
     fFileName = "/dev/null";
@@ -52,10 +52,10 @@
     str << this << " - "
         << "OPEN_FILE #" << GetRunId() << ":"
-        << " Ver=" << h->Version
-        << " Typ=" << h->RunType
-        << " Nb="  << h->NBoard
-        << " Np="  << h->NPix
-        << " NTm=" << h->NTm
-        << " roi=" << h->Nroi;
+        << " Ver=" << h.Version
+        << " Typ=" << h.RunType
+        << " Nb="  << h.NBoard
+        << " Np="  << h.NPix
+        << " NTm=" << h.NTm
+        << " roi=" << h.Nroi;
 
     Debug(str);
@@ -66,5 +66,5 @@
 }
 
-bool DataDump::WriteEvt(const EVENT *e)
+bool DataDump::WriteEvt(const EVENT &e)
 {
     const Time now;
@@ -75,5 +75,5 @@
 
     ostringstream str;
-    str << this << " - EVENT #" << e->EventNum << " / " << e->TriggerNum;
+    str << this << " - EVENT #" << e.EventNum << " / " << e.TriggerNum;
     Debug(str);
 
@@ -93,11 +93,11 @@
 // =======================================================================
 
-bool DataDebug::WriteEvt(const EVENT *e)
+bool DataDebug::WriteEvt(const EVENT &e)
 {
-    cout << "WRITE_EVENT #" << GetRunId() << " (" << e->EventNum << ")" << endl;
-    cout << " Typ=" << e->TriggerType << endl;
-    cout << " roi=" << e->Roi << endl;
-    cout << " trg=" << e->SoftTrig << endl;
-    cout << " tim=" << e->PCTime << endl;
+    cout << "WRITE_EVENT #" << GetRunId() << " (" << e.EventNum << ")" << endl;
+    cout << " Typ=" << e.TriggerType << endl;
+    cout << " roi=" << e.Roi << endl;
+    cout << " trg=" << e.SoftTrig << endl;
+    cout << " tim=" << e.PCTime << endl;
 
     return true;
Index: trunk/FACT++/src/DataProcessorImp.h
===================================================================
--- trunk/FACT++/src/DataProcessorImp.h	(revision 16054)
+++ trunk/FACT++/src/DataProcessorImp.h	(revision 16055)
@@ -4,5 +4,5 @@
 #include "MessageImp.h"
 
-struct _RUN_HEAD;
+struct RUN_HEAD;
 struct _EVENT;
 struct _RUN_TAIL;
@@ -13,5 +13,4 @@
 };
 
-typedef struct _RUN_HEAD RUN_HEAD;
 typedef struct _EVENT    EVENT;
 typedef struct _RUN_TAIL RUN_TAIL;
@@ -20,5 +19,5 @@
 {
     std::string fPath;
-    uint64_t    fNight;
+    uint32_t    fNight;
     uint32_t    fRunId;
 
@@ -36,6 +35,6 @@
     virtual ~DataProcessorImp() { }
 
-    virtual bool Open(const RUN_HEAD* h, const FAD::RunDescription &desc) = 0;
-    virtual bool WriteEvt(const EVENT *) = 0;
+    virtual bool Open(const RUN_HEAD &h, const FAD::RunDescription &desc) = 0;
+    virtual bool WriteEvt(const EVENT &) = 0;
     virtual bool Close(const RUN_TAIL * = 0) = 0;
 
@@ -43,4 +42,5 @@
 
     std::string GetPath() const { return fPath; }
+    uint32_t    GetNight() const { return fNight; }
     uint32_t    GetRunId() const { return fRunId; }
 
@@ -61,6 +61,6 @@
     DataDump(const std::string &path, uint64_t night, uint32_t id, MessageImp &imp) : DataProcessorImp(path, night, id, imp) { }
 
-    bool Open(const RUN_HEAD* h, const FAD::RunDescription &d);
-    bool WriteEvt(const EVENT *e);
+    bool Open(const RUN_HEAD &h, const FAD::RunDescription &d);
+    bool WriteEvt(const EVENT &e);
     bool Close(const RUN_TAIL * = 0);
 };
@@ -71,5 +71,5 @@
     DataDebug(const std::string &path, uint64_t night, uint32_t id, MessageImp &imp) : DataDump(path, night, id, imp) { }
 
-    bool WriteEvt(const EVENT *e);
+    bool WriteEvt(const EVENT &e);
 };
 
Index: trunk/FACT++/src/DataWriteFits.cc
===================================================================
--- trunk/FACT++/src/DataWriteFits.cc	(revision 16054)
+++ trunk/FACT++/src/DataWriteFits.cc	(revision 16055)
@@ -32,5 +32,5 @@
 //! @param h a pointer to the RUN_HEAD structure that contains the informations relative to this run
 //
-bool DataWriteFits::Open(const RUN_HEAD* h, const FAD::RunDescription &d)
+bool DataWriteFits::Open(const RUN_HEAD &h, const FAD::RunDescription &d)
 {
     if (fConv)
@@ -40,5 +40,5 @@
     }
 
-    const int16_t realRoiTM = (h->NroiTM >= 2*h->Nroi && h->Nroi<=512) ? h->Nroi : 0;
+    const int16_t realRoiTM = (h.NroiTM >= 2*h.Nroi && h.Nroi<=512) ? h.Nroi : 0;
 
     fFile.AddColumn('I', "EventNum");
@@ -52,11 +52,11 @@
     fFile.AddColumn('S', "StartCellData",       NPIX);
     fFile.AddColumn('S', "StartCellTimeMarker", NTMARK);
-    fFile.AddColumn('S', "Data",                h->NPix*h->Nroi);	
-    fFile.AddColumn('S', "TimeMarker",          h->NTm*realRoiTM);
+    fFile.AddColumn('S', "Data",                h.NPix*h.Nroi);	
+    fFile.AddColumn('S', "TimeMarker",          h.NTm*realRoiTM);
 
     // Write length of physical pipeline (1024)
     fConv = new Converter(Converter::ToFormat(fFile.GetColumnTypes()));
 
-    const size_t sz = (h->NPix*h->Nroi + h->NTm*realRoiTM)*2;
+    const size_t sz = (h.NPix*h.Nroi + h.NTm*realRoiTM)*2;
     if (fConv->GetSize()-sz+4!=sizeof(EVENT))
     {
@@ -86,15 +86,15 @@
     try
     {
-        fFile.WriteKey("BLDVER",   h->Version,  "Builder version");
+        fFile.WriteKey("BLDVER",   h.Version,  "Builder version");
         fFile.WriteKey("RUNID",    GetRunId(),  "Run number");
-//        fFile.WriteKey("RUNTYPE",  h->RunType,  "Type of run");
-        fFile.WriteKey("NBOARD",   h->NBoard,   "Number of acquisition boards");
-        fFile.WriteKey("NPIX",     h->NPix,     "Number of pixels");
-        fFile.WriteKey("NTMARK",   h->NTm,      "Number of time marker channels");
+//        fFile.WriteKey("RUNTYPE",  h.RunType,  "Type of run");
+        fFile.WriteKey("NBOARD",   h.NBoard,   "Number of acquisition boards");
+        fFile.WriteKey("NPIX",     h.NPix,     "Number of pixels");
+        fFile.WriteKey("NTMARK",   h.NTm,      "Number of time marker channels");
         fFile.WriteKey("NCELLS",   1024,        "Maximum number of slices per pixels");
-        fFile.WriteKey("NROI",     h->Nroi,     "Number of slices per pixels");
+        fFile.WriteKey("NROI",     h.Nroi,     "Number of slices per pixels");
         fFile.WriteKey("NROITM",   realRoiTM,   "Number of slices per time-marker");
 
-        const uint16_t realOffset = (h->NroiTM > h->Nroi) ?  h->NroiTM - 2*h->Nroi : 0;
+        const uint16_t realOffset = (h.NroiTM > h.Nroi) ?  h.NroiTM - 2*h.Nroi : 0;
         fFile.WriteKey("TMSHIFT",  realOffset,  "Shift of the start of the time marker readout wrt to data");
 
@@ -119,7 +119,7 @@
         // DAC
 
-        for (int i=0; i<h->NBoard; i++)
+        for (int i=0; i<h.NBoard; i++)
         {
-            const PEVNT_HEADER &hh = h->FADhead[i];
+            const PEVNT_HEADER &hh = h.FADhead[i];
 
             // Header values whihc won't change during the run
@@ -133,7 +133,7 @@
 
         // FIXME: Calculate average ref clock frequency
-        for (int i=0; i<h->NBoard; i++)
+        for (int i=0; i<h.NBoard; i++)
         {
-            const PEVNT_HEADER &hh = h->FADhead[i];
+            const PEVNT_HEADER &hh = h.FADhead[i];
 
             if (hh.start_package_flag==0)
@@ -158,7 +158,7 @@
         double avg = 0;
         int    cnt = 0;
-        for (int i=0; i<h->NBoard; i++)
+        for (int i=0; i<h.NBoard; i++)
         {
-            const PEVNT_HEADER &hh = h->FADhead[i];
+            const PEVNT_HEADER &hh = h.FADhead[i];
 
             if (hh.start_package_flag==0)
@@ -198,34 +198,34 @@
 //! @param e the pointer to the EVENT
 //
-bool DataWriteFits::WriteEvt(const EVENT *e)
+bool DataWriteFits::WriteEvt(const EVENT &e)
 {
     if (!fFile.AddRow())
         return false;
 
-    if (e->TriggerType && !(e->TriggerType & FAD::EventHeader::kAll))
+    if (e.TriggerType && !(e.TriggerType & FAD::EventHeader::kAll))
         fTriggerCounter[0]++;
-    else  if ((e->TriggerType&FAD::EventHeader::kPedestal) && !(e->TriggerType&FAD::EventHeader::kTIM))
+    else  if ((e.TriggerType&FAD::EventHeader::kPedestal) && !(e.TriggerType&FAD::EventHeader::kTIM))
         fTriggerCounter[1]++;
-    else if (e->TriggerType & FAD::EventHeader::kLPext)
+    else if (e.TriggerType & FAD::EventHeader::kLPext)
         fTriggerCounter[2]++;
-    else if (e->TriggerType & (FAD::EventHeader::kTIM|FAD::EventHeader::kPedestal))
+    else if (e.TriggerType & (FAD::EventHeader::kTIM|FAD::EventHeader::kPedestal))
         fTriggerCounter[3]++;
-    else if (e->TriggerType & FAD::EventHeader::kLPint)
+    else if (e.TriggerType & FAD::EventHeader::kLPint)
         fTriggerCounter[4]++;
-    else if (e->TriggerType & FAD::EventHeader::kExt1)
+    else if (e.TriggerType & FAD::EventHeader::kExt1)
         fTriggerCounter[5]++;
-    else if (e->TriggerType & FAD::EventHeader::kExt2)
+    else if (e.TriggerType & FAD::EventHeader::kExt2)
         fTriggerCounter[6]++;
     else
         fTriggerCounter[7]++;
 
-    memcpy(fTstop, &e->PCTime, 2*sizeof(uint32_t));
+    memcpy(fTstop, &e.PCTime, 2*sizeof(uint32_t));
     if (fTstart[0]==0)
         memcpy(fTstart, fTstop, 2*sizeof(uint32_t));
 
-    const int realRoiTM = (e->RoiTM > e->Roi) ? e->Roi : 0;
-    const size_t sz = sizeof(EVENT) + sizeof(e->StartPix)*e->Roi+sizeof(e->StartTM)*realRoiTM; //ETIENNE from RoiTm to Roi
-
-    const vector<char> data = fConv->ToFits(reinterpret_cast<const char*>(e)+4, sz-4);
+    const int realRoiTM = (e.RoiTM > e.Roi) ? e.Roi : 0;
+    const size_t sz = sizeof(EVENT) + sizeof(e.StartPix)*e.Roi+sizeof(e.StartTM)*realRoiTM; //ETIENNE from RoiTm to Roi
+
+    const vector<char> data = fConv->ToFits(reinterpret_cast<const char*>(&e)+4, sz-4);
 
     return fFile.WriteData(data.data(), data.size());
Index: trunk/FACT++/src/DataWriteFits.h
===================================================================
--- trunk/FACT++/src/DataWriteFits.h	(revision 16054)
+++ trunk/FACT++/src/DataWriteFits.h	(revision 16055)
@@ -35,6 +35,6 @@
     ~DataWriteFits();
 
-    bool Open(const RUN_HEAD* h, const FAD::RunDescription &d);
-    bool WriteEvt(const EVENT *e);
+    bool Open(const RUN_HEAD &h, const FAD::RunDescription &d);
+    bool WriteEvt(const EVENT &e);
     bool Close(const RUN_TAIL *rt = 0);
 };
Index: trunk/FACT++/src/DataWriteFits2.cc
===================================================================
--- trunk/FACT++/src/DataWriteFits2.cc	(revision 16054)
+++ trunk/FACT++/src/DataWriteFits2.cc	(revision 16055)
@@ -1,3 +1,5 @@
 #include "DataWriteFits2.h"
+
+#include <boost/filesystem.hpp>
 
 #include "HeadersFAD.h"
@@ -24,7 +26,7 @@
 }
 
-void DataWriteFits2::WriteHeader(const RUN_HEAD* h, const FAD::RunDescription &d)
-{
-    const int16_t realRoiTM = (h->NroiTM >= 2*h->Nroi && h->Nroi<=512) ? h->Nroi : 0;
+void DataWriteFits2::WriteHeader(const RUN_HEAD &h, const FAD::RunDescription &d)
+{
+    const int16_t realRoiTM = (h.NroiTM >= 2*h.Nroi && h.Nroi<=512) ? h.Nroi : 0;
 
     fFile.AddColumnInt("EventNum", "uint32", "FAD board event counter");
@@ -38,8 +40,8 @@
     fFile.AddColumnShort(NPIX, "StartCellData", "uint16", "DRS4 start cell of readout");
     fFile.AddColumnShort(NTMARK, "StartCellTimeMarker", "uint16", "DRS4 start cell of readout time marker");
-    fFile.AddColumnShort(h->NPix*h->Nroi, "Data", "int16", "Digitized data");
-    fFile.AddColumnShort(h->NTm*realRoiTM, "TimeMarker", "int16", "Digitized time marker - if available");
-
-    const size_t sz = (h->NPix*h->Nroi + h->NTm*realRoiTM)*2;
+    fFile.AddColumnShort(h.NPix*h.Nroi, "Data", "int16", "Digitized data");
+    fFile.AddColumnShort(h.NTm*realRoiTM, "TimeMarker", "int16", "Digitized time marker - if available");
+
+    const size_t sz = (h.NPix*h.Nroi + h.NTm*realRoiTM)*2;
     if (fFile.GetBytesPerRow()-sz+4!=sizeof(EVENT))
     {
@@ -54,14 +56,14 @@
 
     // ================ Header keys for raw-data =================
-    fFile.SetInt("BLDVER",   h->Version,  "Builder version");
+    fFile.SetInt("BLDVER",   h.Version,  "Builder version");
     fFile.SetInt("RUNID",    GetRunId(),  "Run number");
-    fFile.SetInt("NBOARD",   h->NBoard,   "Number of acquisition boards");
-    fFile.SetInt("NPIX",     h->NPix,     "Number of pixels");
-    fFile.SetInt("NTMARK",   h->NTm,      "Number of time marker channels");
+    fFile.SetInt("NBOARD",   h.NBoard,   "Number of acquisition boards");
+    fFile.SetInt("NPIX",     h.NPix,     "Number of pixels");
+    fFile.SetInt("NTMARK",   h.NTm,      "Number of time marker channels");
     fFile.SetInt("NCELLS",   1024,        "Maximum number of slices per pixels");
-    fFile.SetInt("NROI",     h->Nroi,     "Number of slices per pixels");
+    fFile.SetInt("NROI",     h.Nroi,     "Number of slices per pixels");
     fFile.SetInt("NROITM",   realRoiTM,   "Number of slices per time-marker");
 
-    const uint16_t realOffset = (h->NroiTM > h->Nroi) ?  h->NroiTM - 2*h->Nroi : 0;
+    const uint16_t realOffset = (h.NroiTM > h.Nroi) ?  h.NroiTM - 2*h.Nroi : 0;
     fFile.SetInt("TMSHIFT",  realOffset,  "Shift of marker readout w.r.t. to data");
 
@@ -86,7 +88,7 @@
     // DAC
 
-    for (int i=0; i<h->NBoard; i++)
-    {
-        const PEVNT_HEADER &hh = h->FADhead[i];
+    for (int i=0; i<h.NBoard; i++)
+    {
+        const PEVNT_HEADER &hh = h.FADhead[i];
 
         ostringstream sout;
@@ -100,7 +102,7 @@
 
     // FIXME: Calculate average ref clock frequency
-    for (int i=0; i<h->NBoard; i++)
-    {
-        const PEVNT_HEADER &hh = h->FADhead[i];
+    for (int i=0; i<h.NBoard; i++)
+    {
+        const PEVNT_HEADER &hh = h.FADhead[i];
 
         if (hh.start_package_flag==0)
@@ -124,7 +126,7 @@
     double avg = 0;
     int    cnt = 0;
-    for (int i=0; i<h->NBoard; i++)
-    {
-        const PEVNT_HEADER &hh = h->FADhead[i];
+    for (int i=0; i<h.NBoard; i++)
+    {
+        const PEVNT_HEADER &hh = h.FADhead[i];
 
         if (hh.start_package_flag==0)
@@ -160,9 +162,15 @@
 //! @param h a pointer to the RUN_HEAD structure that contains the informations relative to this run
 //
-bool DataWriteFits2::Open(const RUN_HEAD* h, const FAD::RunDescription &d)
+bool DataWriteFits2::Open(const RUN_HEAD &h, const FAD::RunDescription &d)
 {
     //Form filename, based on runid and run-type
     fFileName = FormFileName("fits");
 
+    if (boost::filesystem::exists(fFileName))
+    {
+        Error("ofits - file '"+fFileName+"' already exists.");
+        return false;
+    }
+
     try
     {
@@ -209,33 +217,33 @@
 //! @param e the pointer to the EVENT
 //
-bool DataWriteFits2::WriteEvt(const EVENT *e)
-{
-    if (e->TriggerType && !(e->TriggerType & FAD::EventHeader::kAll))
+bool DataWriteFits2::WriteEvt(const EVENT &e)
+{
+    if (e.TriggerType && !(e.TriggerType & FAD::EventHeader::kAll))
         fTriggerCounter[0]++;
-    else  if ((e->TriggerType&FAD::EventHeader::kPedestal) && !(e->TriggerType&FAD::EventHeader::kTIM))
+    else  if ((e.TriggerType&FAD::EventHeader::kPedestal) && !(e.TriggerType&FAD::EventHeader::kTIM))
         fTriggerCounter[1]++;
-    else if (e->TriggerType & FAD::EventHeader::kLPext)
+    else if (e.TriggerType & FAD::EventHeader::kLPext)
         fTriggerCounter[2]++;
-    else if (e->TriggerType & (FAD::EventHeader::kTIM|FAD::EventHeader::kPedestal))
+    else if (e.TriggerType & (FAD::EventHeader::kTIM|FAD::EventHeader::kPedestal))
         fTriggerCounter[3]++;
-    else if (e->TriggerType & FAD::EventHeader::kLPint)
+    else if (e.TriggerType & FAD::EventHeader::kLPint)
         fTriggerCounter[4]++;
-    else if (e->TriggerType & FAD::EventHeader::kExt1)
+    else if (e.TriggerType & FAD::EventHeader::kExt1)
         fTriggerCounter[5]++;
-    else if (e->TriggerType & FAD::EventHeader::kExt2)
+    else if (e.TriggerType & FAD::EventHeader::kExt2)
         fTriggerCounter[6]++;
     else
         fTriggerCounter[7]++;
 
-    memcpy(fTstop, &e->PCTime, 2*sizeof(uint32_t));
+    memcpy(fTstop, &e.PCTime, 2*sizeof(uint32_t));
     if (fTstart[0]==0)
         memcpy(fTstart, fTstop, 2*sizeof(uint32_t));
 
-    const int realRoiTM = (e->RoiTM > e->Roi) ? e->Roi : 0;
-    const size_t sz = sizeof(EVENT) + sizeof(e->StartPix)*e->Roi+sizeof(e->StartTM)*realRoiTM; //ETIENNE from RoiTm to Roi
-
-    try
-    {
-        fFile.WriteRow(reinterpret_cast<const char*>(e)+4, sz-4);
+    const int realRoiTM = (e.RoiTM > e.Roi) ? e.Roi : 0;
+    const size_t sz = sizeof(EVENT) + sizeof(e.StartPix)*e.Roi+sizeof(e.StartTM)*realRoiTM; //ETIENNE from RoiTm to Roi
+
+    try
+    {
+        fFile.WriteRow(reinterpret_cast<const char*>(&e)+4, sz-4);
     }
     catch (const exception &ex)
Index: trunk/FACT++/src/DataWriteFits2.h
===================================================================
--- trunk/FACT++/src/DataWriteFits2.h	(revision 16054)
+++ trunk/FACT++/src/DataWriteFits2.h	(revision 16055)
@@ -16,5 +16,5 @@
     uint32_t fTstop[2];
 
-    void WriteHeader(const RUN_HEAD* h, const FAD::RunDescription &d);
+    void WriteHeader(const RUN_HEAD &h, const FAD::RunDescription &d);
     void WriteFooter(const RUN_TAIL *rt);
 
@@ -27,6 +27,6 @@
     }
 
-    bool Open(const RUN_HEAD* h, const FAD::RunDescription &d);
-    bool WriteEvt(const EVENT *e);
+    bool Open(const RUN_HEAD &h, const FAD::RunDescription &d);
+    bool WriteEvt(const EVENT &e);
     bool Close(const RUN_TAIL *rt = 0);
 
Index: trunk/FACT++/src/DataWriteRaw.cc
===================================================================
--- trunk/FACT++/src/DataWriteRaw.cc	(revision 16054)
+++ trunk/FACT++/src/DataWriteRaw.cc	(revision 16055)
@@ -19,5 +19,5 @@
 }
 
-bool DataWriteRaw::Open(const RUN_HEAD *h, const FAD::RunDescription &)
+bool DataWriteRaw::Open(const RUN_HEAD &h, const FAD::RunDescription &)
 {
     const string name = FormFileName("bin");
@@ -52,10 +52,10 @@
 
     WriteBlockHeader(kRunHeader, 1, 0, sizeof(RUN_HEAD)-sizeof(PEVNT_HEADER*));
-    fOut.write(reinterpret_cast<const char*>(h), sizeof(RUN_HEAD)-sizeof(PEVNT_HEADER*));
+    fOut.write(reinterpret_cast<const char*>(&h), sizeof(RUN_HEAD)-sizeof(PEVNT_HEADER*));
 
     for (int i=0; i<40; i++)
     {
         WriteBlockHeader(kBoardHeader, 1, i, sizeof(PEVNT_HEADER));
-        fOut.write(reinterpret_cast<const char*>(h->FADhead+i), sizeof(PEVNT_HEADER));
+        fOut.write(reinterpret_cast<const char*>(h.FADhead+i), sizeof(PEVNT_HEADER));
     }
 
@@ -79,10 +79,10 @@
 }
 
-bool DataWriteRaw::WriteEvt(const EVENT *evt)
+bool DataWriteRaw::WriteEvt(const EVENT &e)
 {
-    const int sh = sizeof(EVENT)-2 + NPIX*evt->Roi*2;
+    const int sh = sizeof(EVENT)-2 + NPIX*e.Roi*2;
 
     WriteBlockHeader(kEvent, 1, fCounter++, sh);
-    fOut.write(reinterpret_cast<const char*>(evt)+2, sh);
+    fOut.write(reinterpret_cast<const char*>(&e)+2, sh);
     return true;
 }
Index: trunk/FACT++/src/DataWriteRaw.h
===================================================================
--- trunk/FACT++/src/DataWriteRaw.h	(revision 16054)
+++ trunk/FACT++/src/DataWriteRaw.h	(revision 16055)
@@ -81,6 +81,6 @@
     };
 
-    bool Open(const RUN_HEAD *h, const FAD::RunDescription &d);
-    bool WriteEvt(const EVENT *evt);
+    bool Open(const RUN_HEAD &h, const FAD::RunDescription &d);
+    bool WriteEvt(const EVENT &evt);
     bool Close(const RUN_TAIL *tail= 0);
 };
