Index: /trunk/FACT++/src/EventBuilderWrapper.h
===================================================================
--- /trunk/FACT++/src/EventBuilderWrapper.h	(revision 11699)
+++ /trunk/FACT++/src/EventBuilderWrapper.h	(revision 11700)
@@ -129,4 +129,6 @@
     static vector<int32_t> fTrgOff;
 
+    static vector<float>   fStats;
+
     static uint32_t fNumOffset;
     static uint32_t fNumGain;
@@ -135,10 +137,42 @@
     static int fStep;
 
+    DimDescribedService &fDim;
+
 public:
-    DataFileCalib(uint32_t id, MessageImp &imp) : DataFileImp(id, imp)
-    {
-    }
-
-    static void Restart() { fStep = 0; }
+    DataFileCalib(uint32_t id, DimDescribedService &dim, MessageImp &imp) : DataFileImp(id, imp), fDim(dim)
+    {
+    }
+
+    static void Restart()
+    {
+        // Default gain:
+        // 0.575*[45590]*2.5V / 2^16 = 0.99999 V
+        fOffset.assign(1440*1024, 0);
+        fGain.assign  (1440*1024, 2);
+        fTrgOff.assign(1440*1024, 0);
+
+        fNumOffset = 1;
+        fNumGain   = 1;
+        fNumTrgOff = 1;
+
+        reinterpret_cast<uint32_t*>(fStats.data())[0] = 0;
+        reinterpret_cast<uint32_t*>(fStats.data())[1] = 0;
+        reinterpret_cast<uint32_t*>(fStats.data())[2] = 0;
+
+        int i=0;
+        while (i<1024*1440*2+3)  // Set mean and RMS to 0
+            fStats[i++] = 0;
+        while (i<1024*1440*3+3)
+            fStats[i++] = 0.5; // Set mean to 0.5
+        while (i<1024*1440*6+3)
+            fStats[i++] = 0;   // Set everything else to 0
+
+        fStep = 0;
+    }
+
+    static void Update(DimDescribedService &dim)
+    {
+        dim.Update(fStats);
+    }
 
     bool OpenFile(RUN_HEAD* h)
@@ -169,17 +203,4 @@
         InitSize(1440, 1024);
 
-        if (fStep==0)
-        {
-            // Default gain:
-            // 0.575*[45590]*2.5V / 2^16 = 0.99999 V
-            fOffset.assign(1440*1024, 0);
-            fGain.assign  (1440*1024, 2);
-            fTrgOff.assign(1440*1024, 0);
-
-            fNumOffset = 1;
-            fNumGain   = 1;
-            fNumTrgOff = 1;
-        }
-
         return true;
     }
@@ -209,4 +230,6 @@
             fOffset.assign(fSum.begin(), fSum.end());
             fNumOffset = fNumEntries;
+            reinterpret_cast<uint32_t*>(fStats.data())[0] = GetRunId();;
+            GetSampleStats(fStats.data()+3, 0.5);
         }
         if (fStep==1)
@@ -214,5 +237,7 @@
             fGain.assign(fSum.begin(), fSum.end());
             fNumGain = fNumEntries*1000;
+            reinterpret_cast<uint32_t*>(fStats.data())[1] = GetRunId();;
             // Scale from Volt to Millivolt
+            GetSampleStats(fStats.data()+1024*1440*2+3, 0.5);
         }
         if (fStep==2)
@@ -220,5 +245,10 @@
             fTrgOff.assign(fSum.begin(), fSum.end());
             fNumTrgOff = fNumEntries;
-        }
+            reinterpret_cast<uint32_t*>(fStats.data())[2] = GetRunId();;
+            GetSampleStats(fStats.data()+1024*1440*4+3, 0.5);
+        }
+
+        fDim.Update(fStats);
+
         fStep++;
 
@@ -248,4 +278,5 @@
 vector<int32_t> DataFileCalib::fGain  (1440*1024, 2);
 vector<int32_t> DataFileCalib::fTrgOff(1440*1024, 0);
+vector<float>   DataFileCalib::fStats (1440*1024*6+3);
 
 uint32_t DataFileCalib::fNumOffset = 1;
@@ -939,4 +970,5 @@
     DimDescribedService fDimRoi;
     DimDescribedService fDimDac;
+    DimDescribedService fDimDrsCalibration;
     DimDescribedService fDimStatistics1;
     DimDescribedService fDimStatistics2;
@@ -991,4 +1023,5 @@
         fDimRoi         ("FAD_CONTROL/REGION_OF_INTEREST", "S:2",  ""),
         fDimDac         ("FAD_CONTROL/DAC",                "S:336", ""),
+        fDimDrsCalibration("FAD_CONTROL/DRS_CALIBRATION",  "I:3;F:1474560;F:1474560;F:1474560;F:1474560;F:1474560;F:1474560", ""),
         fDimStatistics1 ("FAD_CONTROL/STATISTICS1",        "I:3;I:5;X:4;I:3;I:3;I:40;I:1;I:2;C:40;I:40;I:40;X:40", ""),
         fDimStatistics2 ("FAD_CONTROL/STATISTICS2",        "I:1;I:280;X:40;I:40;I:4;I:4;I:2;I:2;I:3;C:40",  ""),
@@ -1204,5 +1237,9 @@
         fFileFormat = f;
         if (fFileFormat==kCalib)
+        {
             DataFileCalib::Restart();
+            DataFileCalib::Update(fDimDrsCalibration);
+            fMsg.Message("Resetted DRS calibration.");
+        }
     }
 
@@ -1311,5 +1348,5 @@
         case kFits:  file = new DataFileFits(runid,  fMsg); break;
 	case kRaw:   file = new DataFileRaw(runid,   fMsg); break;
-	case kCalib: file = new DataFileCalib(runid, fMsg); break;
+	case kCalib: file = new DataFileCalib(runid, fDimDrsCalibration, fMsg); break;
         }
 
@@ -1567,4 +1604,5 @@
         Time newt;
 
+        // FIXME: Only send events if the have newer run-numbers
         if (newt<oldt+boost::posix_time::seconds(1))
             return 0;
