Index: /trunk/Mars/fact/analysis/merpp_file.C
===================================================================
--- /trunk/Mars/fact/analysis/merpp_file.C	(revision 18077)
+++ /trunk/Mars/fact/analysis/merpp_file.C	(revision 18077)
@@ -0,0 +1,94 @@
+#include "MLogManip.h"
+
+void merpp(TString &froot, const char *id, const char *faux)
+{
+    gLog.Separator(froot+" - "+TString(id));
+
+    TFile file(froot);
+    if (file.IsZombie())
+    {
+        gLog << err << "merpp: Invalid file '" << froot << "'" << endl;
+        return;
+    }
+
+    MRawRunHeader *h = NULL;
+    TTree *tree = file.Get("RunHeaders");
+    if (!tree)
+    {
+        gLog << err << "merpp: Tree 'RunHeaders' not found... skipped." << endl;
+        return;
+    }
+
+    if (tree->GetEntries()!=1)
+    {
+        gLog << err << "merpp: Number of RunHeaders do not match 1... skipped." << endl;
+        return;
+    }
+
+    tree->SetBranchAddress("MRawRunHeader.", &h);
+    tree->GetEntry(0);
+
+    if (file.Get(id))
+    {
+        gLog << warn << "WARNING - Tree '" << id << "' already existing... skipped." << endl;
+        return;
+    }
+
+    file.Close();
+
+    UInt_t night = h->GetRunNumber();
+
+    TString ffits = Form("/fact/aux/%4d/%02d/%02d/%6d.%s.fits",
+                         night/10000, (night/100)%100, night%100, night, faux);
+
+    TString report = Form("MReport%s", id);
+    TString time   = Form("MTime%s",   id);
+
+    gLog << all;
+    gLog << " --- Fits file: " << ffits << endl;
+    gLog << " --- Root file: " << froot << endl;
+    gLog << " --- Tree:      " << id << " (" << faux << ")" << endl;
+
+    MReportFitsRead read(ffits);
+    read.SetReportName(report);
+    read.SetTimeStart(h->GetRunStart());
+    read.SetTimeStop(h->GetRunEnd());
+
+    // FIXME: Write also last event BEFORE start of run
+
+    MWriteRootFile write(froot, "UPDATE");
+    write.AddContainer(report, id);
+    write.AddContainer(time,   id);
+
+    MParList plist;
+    MTaskList tlist;
+    plist.AddToList(&tlist);
+
+    tlist.AddToList(&read);
+    tlist.AddToList(&write);
+
+    MEvtLoop loop;
+    loop.SetParList(&plist);
+
+    if (!loop.Eventloop())
+        return;
+}
+
+int merpp_file(const char *datafile)
+{
+    // ------------------------------------------------------
+
+    gLog.Separator("Merpp");
+    gLog << all;
+    gLog << "Merge slow control data of ";
+    gLog << datafile << endl;
+    gLog << endl;
+
+    merpp(datafile, "Weather",      "MAGIC_WEATHER_DATA");
+    merpp(datafile, "Drive",        "DRIVE_CONTROL_TRACKING_POSITION");
+    merpp(datafile, "Rates",        "FTM_CONTROL_TRIGGER_RATES");
+    merpp(datafile, "Temperatures", "FSC_CONTROL_TEMPERATURE");
+    merpp(datafile, "Humidity",     "FSC_CONTROL_HUMIDITY");
+
+    return 0;
+}
