Index: /trunk/Mars/mjoptim/MJOptimizeDisp.cc
===================================================================
--- /trunk/Mars/mjoptim/MJOptimizeDisp.cc	(revision 18041)
+++ /trunk/Mars/mjoptim/MJOptimizeDisp.cc	(revision 18042)
@@ -83,6 +83,9 @@
 #include "MParameterCalc.h"
 #include "MFillH.h"
+#include "MContinue.h"
+#include "MWriteRootFile.h"
 
 // filters
+#include "MFilterList.h"
 #include "MFDataMember.h"
 
@@ -216,9 +219,80 @@
     //hist.GetAlphaFitter().Print("result");
 
+    if (fNameOut.IsNull())
+        return kTRUE;
+
+    fLog->Separator("Writing result");
+
+    MTaskList tlist;
+    MParList plist;
+    plist.AddToList(&tlist);
+    plist.AddToList(&geom);
+
+    MReadTree read2("Events");
+    read2.DisableAutoScheme();
+    read2.AddFiles(read);
+    tlist.AddToList(&read2);
+
+    MFilterList flist;
+    flist.AddToList(fPreCuts);
+    flist.SetName("PreCuts");
+    flist.SetInverted(kTRUE);
+
+    MContinue cont(&flist);
+    tlist.AddToList(&cont);
+
+    TString r(rule);
+
+    TIter Next(&fRules);
+    TObject *o=0;
+    Int_t num = 0;
+    while ((o=Next()))
+    {
+        r.ReplaceAll(Form("M[%d]", num), Form("M%d.fVal", num));
+
+        MParameterCalc *c = new MParameterCalc(o->GetName(), Form("CalcM%d", num));
+        c->SetNameParameter(Form("M%d", num++));
+        c->SetBit(kCanDelete);
+        tlist.AddToList(c);
+    }
+
+    MParameterCalc calcr(r, "CalcDisp");
+    calcr.SetVariables(GetParameters());
+    calcr.SetNameParameter("Disp");
+
+    MParameterCalc calct("MHillasSrc.fDist^2*MGeomCam.fConvMm2Deg^2 + Disp.fVal^2 - 2*MHillasSrc.fDist*MGeomCam.fConvMm2Deg*Disp.fVal*cos(MHillasSrc.fAlpha*TMath::DegToRad())", "CalcTheta");
+    calct.SetNameParameter("ThetaSquared");
+
+    tlist.AddToList(&calcr);
+    tlist.AddToList(&calct);
+
+    tlist.AddToList(fTestTasks);
+
+    MWriteRootFile write(fNameOut);
+    write.AddContainer("MHillas",      "Events");
+    write.AddContainer("MHillasSrc",   "Events");
+    write.AddContainer("MHillasExt",   "Events");
+    write.AddContainer("MImagePar",    "Events");
+    write.AddContainer("MNewImagePar", "Events");
+    write.AddContainer("Disp",         "Events");
+    write.AddContainer("ThetaSquared", "Events");
+    write.AddContainer("MMcEvt",       "Events");
+    write.AddContainer("DataType",     "Events");
+    write.AddContainer("Weight",       "Events");
+    write.AddContainer("FileId",       "Events");
+    write.AddContainer("EvtNumber",    "Events");
+    tlist.AddToList(&write);
+
+    MEvtLoop loop2;
+    loop2.SetDisplay(fDisplay);
+    loop2.SetParList(&plist);
+    if (!oop2.Eventloop())
+        return;
+
     // Store result if requested
-    TObjArray cont;
+    TObjArray arr;
     if (fDisplay)
-        cont.Add(fDisplay);
-    cont.Add(&calc1);
-    return WriteContainer(cont, fNameOut);
+        arr.Add(fDisplay);
+    arr.Add(&calc1);
+    return WriteContainer(arr, fNameOut);
 }
