Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 6947)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 6948)
@@ -21,4 +21,39 @@
 
                                                  -*-*- END OF LINE -*-*-
+
+ 2005/04/18 Thomas Bretz
+
+   * manalysis/MCompProbCalc.cc, mbadpixels/MBadPixelsCalc.cc,
+     mbadpixels/MBadPixelsTreat.cc:
+     - some fixes to documentation (THtml complained about missing
+       classes)
+
+   * mbase/MStatusArray.[h,cc]:
+     - implemented some functions to print contents of StatusArray
+       and/or tab/canvas.
+
+   * mhbase/MFillH.cc:
+     - remove fH from ListOfPrimitives before adding Clone in
+       PostProcess
+
+   * mhbase/MH.[h,cc]:
+     - implemented new member function RemoveFromPad (necessary
+       if a class should support same-option)
+
+   * mimage/MHHillas.cc, mimage/MHHillasExt.cc, mimage/MHHillasSrc.cc,
+     mimage/MHImagePar.cc, mimage/MHNewImagePar.cc, mimage/MHVsSize.cc:
+     - fixed naming in case of same-option in Draw
+     - remove previous histograms from pad in case of same-option
+
+   * mjobs/MJCut.[h,cc]:
+     - write all binnings in WriteResult
+     - write MHillasExt to output
+     - BinningWidth, BinningLength and BinningDist added
+
+   * mjobs/MJOptimize.[h,cc]:
+     - fixed a typo in output
+     - allow to exchange Test-/Train-Sample
+
+
 
  2005/04/14 Thomas Bretz
Index: /trunk/MagicSoft/Mars/NEWS
===================================================================
--- /trunk/MagicSoft/Mars/NEWS	(revision 6947)
+++ /trunk/MagicSoft/Mars/NEWS	(revision 6948)
@@ -55,5 +55,7 @@
 
    - fixed some slowdown in calibrating data with interleaved events from
-     Jan and Dec.
+     Jan and Dec. As a workaround made the pretty palette the default. 
+     The inverse Deep Blue Sea has a bug which slows down long calibration
+     runs a lot.
 
    - implemented new values from new starguider report as defined
@@ -64,7 +66,4 @@
      you'll get the correct units (arcmin) but a different result
      than with old versions (wrong units))
-
-   - As a workaround made the pretty palette the default. The inverse
-     Deep Blue Sea has a bug which slows down long calibration runs a lot.
 
    - Now the status display can also write PNG, JPEG and XPM (other file
Index: /trunk/MagicSoft/Mars/manalysis/MCompProbCalc.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MCompProbCalc.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/manalysis/MCompProbCalc.cc	(revision 6948)
@@ -79,5 +79,4 @@
 //  - MHCompProb
 //  - all data values which were used to build the MHCompProb
-//  - MHadronness
 //
 Int_t MCompProbCalc::PreProcess(MParList *plist)
@@ -138,5 +137,5 @@
 //  - For all data members multiply the probabilities.
 //  - For normalization take the n-th root of the result.
-//  - This is the hadroness stored in the MHadronness container
+//  - This is the hadroness stored in the Hadronness container
 //
 Int_t MCompProbCalc::Process()
Index: /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 6948)
@@ -68,6 +68,4 @@
 #include "MGeomPix.h"
 
-//#include "MSigmabar.h"
-
 #include "MPedPhotCam.h"
 #include "MPedPhotPix.h"
Index: /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.cc	(revision 6948)
@@ -88,6 +88,4 @@
 #include "MBadPixelsCam.h"
 
-//#include "MArrivalTime.h"
-
 ClassImp(MBadPixelsTreat);
 
Index: /trunk/MagicSoft/Mars/mbase/MStatusArray.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MStatusArray.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mbase/MStatusArray.cc	(revision 6948)
@@ -198,2 +198,37 @@
     return FindObjectInCanvas(object, object, 0);
 }
+
+// --------------------------------------------------------------------------
+//
+// Print recursively all objects in this and sub-pads
+//
+void MStatusArray::PrintObjectsInPad(const TCollection *list, const TString &name, Int_t lvl) const
+{
+    TIter Next(list);
+    TObject *o=0;
+    while ((o=Next()))
+    {
+        const Bool_t print = name.IsNull() || name==(TString)o->GetName();
+        if (print)
+        {
+            if (lvl>0)
+                gLog << setw(lvl) << ' ';
+            gLog << o->ClassName() << ": " << o->GetName() << " <" << Next.GetOption() << "> (" << o << ")" << endl;
+        }
+
+        if (o->InheritsFrom(TVirtualPad::Class()))
+            PrintObjectsInPad(((TVirtualPad*)o)->GetListOfPrimitives(), print?"":name, lvl+1);
+    }
+}
+
+// --------------------------------------------------------------------------
+//
+// Print recursively all objects in this and sub-pads. If !option.IsNull()
+// only objects in the corresponding pad are printed.
+//
+void MStatusArray::Print(Option_t *option) const
+{
+    const TString opt(option);
+
+    PrintObjectsInPad(this, opt);
+}
Index: /trunk/MagicSoft/Mars/mbase/MStatusArray.h
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MStatusArray.h	(revision 6947)
+++ /trunk/MagicSoft/Mars/mbase/MStatusArray.h	(revision 6948)
@@ -15,4 +15,5 @@
 {
 private:
+    void     PrintObjectsInPad(const TCollection *list, const TString &name, Int_t lvl=0) const;
     TObject *FindObjectInPad(TVirtualPad *pad, const char *object, TClass *base) const;
     TClass  *GetClass(const char *name) const;
@@ -28,4 +29,6 @@
     TObject *FindObjectInCanvas(const char *object, const char *canvas) const;
 
+    void Print(Option_t *o="") const;
+
     TObject *FindObject(const char *object, const char *base) const;
     TObject *FindObject(const char *object) const;
Index: /trunk/MagicSoft/Mars/mhbase/MH.cc
===================================================================
--- /trunk/MagicSoft/Mars/mhbase/MH.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mhbase/MH.cc	(revision 6948)
@@ -191,4 +191,23 @@
 // --------------------------------------------------------------------------
 //
+// Search in gPad for all objects with the name name and remove all of them
+// (TList::Remove)
+//
+void MH::RemoveFromPad(const char *name)
+{
+    if (!gPad)
+        return;
+
+    TList *list = gPad->GetListOfPrimitives();
+    if (!list)
+        return;
+
+    TObject *obj = 0;
+    while ((obj = gPad->FindObject(name)))
+        list->Remove(obj);
+}
+
+// --------------------------------------------------------------------------
+//
 // Applies a given binning to a 1D-histogram
 //
@@ -572,5 +591,7 @@
 // Tries to find a MBinning container with the name "Binning"+name
 // in the given parameter list. If it was found it is applied to the
-// given histogram. This is only valid for 1D-histograms
+// given histogram. This is only valid for 1D-histograms.
+// If the binning is found, but it IsDefault() kTRUE is returned, but
+// no binning is applied.
 //
 Bool_t MH::ApplyBinning(const MParList &plist, TString name, TH1 *h)
@@ -588,4 +609,7 @@
         return kFALSE;
     }
+
+    if (bins->IsDefault())
+        return kTRUE;
 
     SetBinning(h, bins);
Index: /trunk/MagicSoft/Mars/mhbase/MH.h
===================================================================
--- /trunk/MagicSoft/Mars/mhbase/MH.h	(revision 6947)
+++ /trunk/MagicSoft/Mars/mhbase/MH.h	(revision 6948)
@@ -57,4 +57,6 @@
                                   UInt_t w=625, UInt_t h=440,
                                   Bool_t usescreenfactor=kFALSE);
+
+    static void RemoveFromPad(const char *name);
 
     // FIXME: * --> & !!!
Index: /trunk/MagicSoft/Mars/mimage/MHHillas.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHHillas.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHHillas.cc	(revision 6948)
@@ -303,8 +303,14 @@
     else
     {
+        fLength->SetName("LengthSame");
+        fWidth->SetName("WidthSame");
+        fDistC->SetName("DistCSame");
+        fDelta->SetName("DeltaSame");
+        fSize->SetName("SizeSame");
+        fCenter->SetName("CenterSame");
+
         fDistC->SetLineColor(kGreen);
         fSize->SetLineColor(kGreen);
         fDelta->SetLineColor(kGreen);
-
         fWidth->SetLineColor(kMagenta);
         fLength->SetLineColor(kCyan);
@@ -313,8 +319,11 @@
     pad->cd(1);
     gPad->SetBorderMode(0);
+    RemoveFromPad("WidthSame");
+    RemoveFromPad("LengthSame");
     MH::DrawSame(*fWidth, *fLength, "Width'n'Length", same);
 
     pad->cd(2);
     gPad->SetBorderMode(0);
+    RemoveFromPad("DistCSame");
     fDistC->Draw(same?"same":"");
 
@@ -323,4 +332,5 @@
     gPad->SetLogx();
     gPad->SetLogy();
+    RemoveFromPad("SizeSame");
     fSize->Draw(same?"same":"");
 
@@ -339,4 +349,5 @@
                 h->SetMarkerColor(kBlack);
             }*/
+            RemoveFromPad("CenterSame");
             fCenter->SetMarkerColor(kGreen);
             fCenter->Draw("same");
@@ -357,4 +368,5 @@
     pad->cd(5);
     gPad->SetBorderMode(0);
+    RemoveFromPad("DeltaSame");
     fDelta->Draw(same?"same":"");
 
@@ -363,6 +375,6 @@
         delete gPad;
 
-    pad->Modified();
-    pad->Update();
+    //pad->Modified();
+    //pad->Update();
 }
 
Index: /trunk/MagicSoft/Mars/mimage/MHHillasExt.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHHillasExt.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHHillasExt.cc	(revision 6948)
@@ -83,7 +83,7 @@
 
     fHAsym.SetName("Asymmetry");
-    fHM3Long.SetName("3rd Mom Long");
-    fHM3Trans.SetName("3rd Mom Trans");
-    fHMaxDist.SetName("Max Dist");
+    fHM3Long.SetName("M3l");
+    fHM3Trans.SetName("M3t");
+    fHMaxDist.SetName("MaxDist");
 
     fHAsym.SetTitle("Asymmetry");
@@ -259,7 +259,10 @@
     else
     {
+        fHAsym.SetName("AsymmetrySame");
+        fHM3Long.SetName("M3lSame");
+        fHM3Trans.SetName("M3tSame");
+        fHMaxDist.SetName("MaxDistSame");
         fHM3Long.SetLineColor(kMagenta);
         fHM3Trans.SetLineColor(kCyan);
-
         fHAsym.SetLineColor(kBlue);
         fHMaxDist.SetLineColor(kBlue);
@@ -268,12 +271,16 @@
     pad->cd(1);
     gPad->SetBorderMode(0);
+    RemoveFromPad("M3lSame");
+    RemoveFromPad("M3tSame");
     MH::DrawSame(fHM3Long, fHM3Trans, "3^{rd} Moments", same);
 
     pad->cd(3);
     gPad->SetBorderMode(0);
+    RemoveFromPad("AsymmetrySame");
     fHAsym.Draw(same?"same":"");
 
     pad->cd(2);
     gPad->SetBorderMode(0);
+    RemoveFromPad("MaxDistSame");
     fHMaxDist.Draw(same?"same":"");
 
Index: /trunk/MagicSoft/Mars/mimage/MHHillasSrc.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHHillasSrc.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHHillasSrc.cc	(revision 6948)
@@ -156,5 +156,5 @@
     fCosDA->Fill(h.GetCosDeltaAlpha(), w);
     fDCA  ->Fill(fUseMmScale ? h.GetDCA() : fMm2Deg*h.GetDCA(), w);
-    fDCADelta ->Fill(h.GetDCADelta(), w);
+    fDCADelta->Fill(h.GetDCADelta(), w);
 
     return kTRUE;
@@ -231,4 +231,9 @@
     else
     {
+        fAlpha->SetName("AlphaSame");
+        fDist ->SetName("DistSame");
+        fCosDA->SetName("CosDASame");
+        fDCA  ->SetName("DCASame");
+        fDCADelta->SetName("DCADeltaSame");
         fAlpha->SetLineColor(kGreen);
         fDist->SetLineColor(kGreen);
@@ -240,12 +245,15 @@
     pad->cd(1);
     gPad->SetBorderMode(0);
+    RemoveFromPad("AlphaSame");
     fAlpha->Draw(same?"same":"");
 
     pad->cd(2);
     gPad->SetBorderMode(0);
+    RemoveFromPad("DistSame");
     fDist->Draw(same?"same":"");
 
     pad->cd(3);
     gPad->SetBorderMode(0);
+    RemoveFromPad("DCASame");
     fDCA->Draw(same?"same":"");
 
@@ -258,8 +266,10 @@
     p->cd(1);
     gPad->SetBorderMode(0);
+    RemoveFromPad("CosDASame");
     fCosDA->Draw(same?"same":"");
 
     p->cd(2);
     gPad->SetBorderMode(0);
+    RemoveFromPad("DCADeltaSame");
     fDCADelta->Draw(same?"same":"");
 }
Index: /trunk/MagicSoft/Mars/mimage/MHImagePar.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHImagePar.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHImagePar.cc	(revision 6948)
@@ -232,10 +232,16 @@
     else
     {
+        fHistSatHi.SetName("SatHiSame");
+        fHistSatLo.SetName("SatLoSame");
+        fHistIslands.SetName("IslandsSame");
+        fHistSizeSubIslands.SetName("SizeSubSame");
+        fHistSizeMainIsland.SetName("SizeMainSame");
+        fHistNumSP.SetName("NumSPSame");
+        fHistSizeSP.SetName("SizeSPSame");
+
         fHistSatHi.SetLineColor(kMagenta);
         fHistSatLo.SetLineColor(kCyan);
-
         fHistSizeMainIsland.SetLineColor(kMagenta);
         fHistSizeSubIslands.SetLineColor(kCyan);
-
         fHistIslands.SetLineColor(kGreen);
         fHistNumSP.SetLineColor(kGreen);
@@ -245,4 +251,6 @@
     pad->cd(1);
     gPad->SetBorderMode(0);
+    RemoveFromPad("SatHiSame");
+    RemoveFromPad("SatLoSame");
     MH::DrawSame(fHistSatHi, fHistSatLo, "Saturating Pixels", same);
     fHistSatHi.SetMinimum();    // switch off to allow log-scale
@@ -252,4 +260,6 @@
     pad->cd(4);
     gPad->SetBorderMode(0);
+    RemoveFromPad("SizeSubSame");
+    RemoveFromPad("SizeMainSame");
     MH::DrawSame(fHistSizeMainIsland, fHistSizeSubIslands, "Sizes...", same);
     fHistSizeMainIsland.SetMinimum();    // switch off to allow log-scale
@@ -265,7 +275,9 @@
         pad->GetPad(2)->cd(1);
         gPad->SetBorderMode(0);
+        RemoveFromPad("NumSPSame");
         fHistNumSP.Draw(same?"same":"");
         pad->GetPad(2)->cd(2);
         gPad->SetBorderMode(0);
+        RemoveFromPad("SizeSPSame");
         fHistSizeSP.Draw(same?"same":"");
     }
@@ -273,4 +285,5 @@
     pad->cd(3);
     gPad->SetBorderMode(0);
+    RemoveFromPad("IslandsSame");
     fHistIslands.Draw(same?"same":"");
 }
Index: /trunk/MagicSoft/Mars/mimage/MHNewImagePar.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHNewImagePar.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHNewImagePar.cc	(revision 6948)
@@ -309,13 +309,19 @@
     else
     {
+        fHistLeakage1.SetName("Leakage1Same");
+        fHistLeakage2.SetName("Leakage2Same");
+        fHistUsedPix.SetName("UsedPixSame");
+        fHistCorePix.SetName("CorePixSame");
+        fHistUsedArea.SetName("UsedAreaSame");
+        fHistCoreArea.SetName("CoreAreaSame");
+        fHistConc1.SetName("Conc1Same");
+        fHistConc.SetName("Conc2Same");
+
         fHistLeakage1.SetLineColor(kMagenta);
         fHistLeakage1.SetLineColor(kCyan);
-
         fHistCorePix.SetLineColor(kMagenta);
         fHistUsedPix.SetLineColor(kCyan);
-
         fHistConc1.SetLineColor(kMagenta);
         fHistConc.SetLineColor(kCyan);
-
         fHistCoreArea.SetLineColor(kMagenta);
         fHistUsedArea.SetLineColor(kCyan);
@@ -326,4 +332,6 @@
     TAxis &x = *fHistLeakage1.GetXaxis();
     x.SetRangeUser(0.0, x.GetXmax());
+    RemoveFromPad("Leakage1Same");
+    RemoveFromPad("Leakage2Same");
     MH::DrawSame(fHistLeakage1, fHistLeakage2, "Leakage1 and Leakage2", same);
     fHistLeakage1.SetMinimum();
@@ -333,12 +341,18 @@
     pad->cd(2);
     gPad->SetBorderMode(0);
+    RemoveFromPad("UsedPixSame");
+    RemoveFromPad("CorePixSame");
     MH::DrawSame(fHistCorePix, fHistUsedPix, "Number of core/used Pixels", same);
 
     pad->cd(3);
     gPad->SetBorderMode(0);
+    RemoveFromPad("Conc1Same");
+    RemoveFromPad("Conc2Same");
     MH::DrawSame(fHistConc1, fHistConc, "Concentrations", same);
 
     pad->cd(4);
     gPad->SetBorderMode(0);
+    RemoveFromPad("CoreAreaSame");
+    RemoveFromPad("UsedAreaSame");
     MH::DrawSame(fHistCoreArea, fHistUsedArea, "Area of core/used Pixels", same);
 }
Index: /trunk/MagicSoft/Mars/mimage/MHVsSize.cc
===================================================================
--- /trunk/MagicSoft/Mars/mimage/MHVsSize.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mimage/MHVsSize.cc	(revision 6948)
@@ -269,4 +269,8 @@
     else
     {
+        fLength.SetName("LengthSame");
+        fWidth.SetName("WidthSame");
+        fDist.SetName("DistSame");
+        fConc1.SetName("Conc1Same");
         fDist.SetMarkerColor(kBlue);
         fConc1.SetMarkerColor(kBlue);
@@ -278,4 +282,5 @@
     gPad->SetBorderMode(0);
     gPad->SetLogx();
+    RemoveFromPad("LengthSame");
     fLength.Draw(same?"same":"");
 
@@ -283,4 +288,5 @@
     gPad->SetBorderMode(0);
     gPad->SetLogx();
+    RemoveFromPad("WidthSame");
     fWidth.Draw(same?"same":"");
 
@@ -288,4 +294,5 @@
     gPad->SetBorderMode(0);
     gPad->SetLogx();
+    RemoveFromPad("DistSame");
     fDist.Draw(same?"same":"");
 
@@ -294,4 +301,5 @@
     gPad->SetLogx();
     gPad->SetLogy();
+    RemoveFromPad("Conc1Same");
     fConc1.Draw(same?"same":"");
 }
Index: /trunk/MagicSoft/Mars/mjobs/MJCut.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCut.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mjobs/MJCut.cc	(revision 6948)
@@ -227,7 +227,14 @@
 // analysis number num, see GetOutputFile()
 //
-Bool_t MJCut::WriteResult(UInt_t num) const
+Bool_t MJCut::WriteResult(const MParList &plist, UInt_t num) const
 {
     TObjArray arr;
+
+    TIter Next(plist);
+    TObject *o=0;
+    while ((o=Next()))
+        if (o->InheritsFrom(MBinning::Class()))
+            arr.Add(o);
+
     return WriteContainer(arr, GetOutputFile(num), "UPDATE");
 }
@@ -278,4 +285,5 @@
     write->AddContainer("MHillas",        "Events");
     write->AddContainer("MHillasSrc",     "Events");
+    write->AddContainer("MHillasExt",     "Events");
     write->AddContainer("MPointingPos",   "Events");
     write->AddContainer("MHillasSrcAnti", "Events", kFALSE);
@@ -293,4 +301,17 @@
 }
 
+void MJCut::DisplayResult(const MParList &plist) const
+{
+    /*
+     TObject *h1 = plist.FindObject("MHHillasOffPre",  "MHHillas");
+     TObject *h2 = plist.FindObject("MHHillasOffPost", "MHHillas");
+     TObject *h3 = plist.FindObject("MHVsSizeOffPost", "MHVsSize");
+     TObject *h4 = plist.FindObject("MHHilExtOffPost", "MHHillasExt");
+     TObject *h5 = plist.FindObject("MHHilSrcOffPost", "MHHillasSrc");
+     TObject *h6 = plist.FindObject("MHImgParOffPost", "MHImagePar");
+     TObject *h7 = plist.FindObject("MHNewParOffPost", "MHNewImagePar");
+     */
+}
+
 Bool_t MJCut::ProcessFile(const MDataSet &set)
 {
@@ -342,14 +363,16 @@
     MBinning bins3(50, 0,  60,   "BinningTheta",     "cos");
     MBinning bins4("BinningFalseSource");
-    //MBinning bins5("BinningWidth");
-    //MBinning bins6("BinningLength");
-    //MBinning bins7("BinningDist");
+    MBinning bins5("BinningWidth");
+    MBinning bins6("BinningLength");
+    MBinning bins7("BinningDist");
+    MBinning bins8("BinningMaxDist");
     plist.AddToList(&bins1);
     plist.AddToList(&bins2);
     plist.AddToList(&bins3);
     plist.AddToList(&bins4);
-    //plist.AddToList(&bins5);
-    //plist.AddToList(&bins6);
-    //plist.AddToList(&bins7);
+    plist.AddToList(&bins5);
+    plist.AddToList(&bins6);
+    plist.AddToList(&bins7);
+    plist.AddToList(&bins8);
 
     // --------------------------------------------------------------------------------
@@ -623,7 +646,9 @@
     tlist.PrintStatistics();
 
+    DisplayResult(plist);
+
     // FIXME: Perform fit and plot energy dependant alpha plots
     // and fit result to new tabs!
-    if (!WriteResult(set.GetNumAnalysis()))
+    if (!WriteResult(plist, set.GetNumAnalysis()))
         return kFALSE;
 
Index: /trunk/MagicSoft/Mars/mjobs/MJCut.h
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCut.h	(revision 6947)
+++ /trunk/MagicSoft/Mars/mjobs/MJCut.h	(revision 6948)
@@ -8,4 +8,5 @@
 class MTask;
 class MDataSet;
+class MParList;
 class MWriteRootFile;
 
@@ -18,4 +19,5 @@
     Bool_t  fIsWobble;
     Bool_t  fFullDisplay;
+    //Bool_t  fSubstraction;
 
     TString fNameSummary;
@@ -30,5 +32,6 @@
     void    SetupWriter(MWriteRootFile *write, const char *name) const;
     Bool_t  WriteTasks(UInt_t num, TObjArray &cont) const;
-    Bool_t  WriteResult(UInt_t num) const;
+    Bool_t  WriteResult(const MParList &plist, UInt_t num) const;
+    void    DisplayResult(const MParList &plist) const;
 
     Bool_t  CanStoreSummary() const { return !fPathOut.IsNull() && fStoreSummary; }
@@ -46,4 +49,5 @@
     void EnableWobbleMode(Bool_t b=kTRUE)        { fIsWobble     = b; }
     void EnableFullDisplay(Bool_t b=kTRUE)       { fFullDisplay  = b; }
+    //void EnableSubstraction(Bool_t b=kTRUE)      { fSubstraction = b; }
 
     void SetNameSummaryFile(const char *name="");
Index: /trunk/MagicSoft/Mars/mjobs/MJOptimize.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJOptimize.cc	(revision 6947)
+++ /trunk/MagicSoft/Mars/mjobs/MJOptimize.cc	(revision 6948)
@@ -228,5 +228,5 @@
 }
 
-MJOptimize::MJOptimize() : fDebug(-1), fNumEvents(0), fType(kSimplex), fNumMaxCalls(0), fTolerance(0), fTestTrain(kFALSE)
+MJOptimize::MJOptimize() : fDebug(-1), fNumEvents(0), fType(kSimplex), fNumMaxCalls(0), fTolerance(0), fTestTrain(0)
 {
     fRules.SetOwner();
@@ -661,5 +661,5 @@
     case kMigrad:    txt += "Migrad";    break;
     case kMinimize:  txt += "Minimize";  break;
-    case kMinos:     txt += "Minot";     break;
+    case kMinos:     txt += "Minos";     break;
     case kImprove:   txt += "Improve";   break;
     case kSimplex:   txt += "Simplex";   break;
@@ -682,6 +682,6 @@
     // In case the reader is the matrix loop and testrain is enabled
     // switch on even mode...
-    if (loop && fTestTrain)
-        loop->SetOperationMode(MMatrixLoop::kEven);
+    if (loop && TMath::Abs(fTestTrain)>0)
+        loop->SetOperationMode(fTestTrain>0?MMatrixLoop::kEven:MMatrixLoop::kOdd);
 
     if (!Optimize(evtloop))
@@ -696,8 +696,8 @@
     // In case the reader is the matrix loop and testrain is enabled
     // switch on odd mode...
-    if (!loop || !fTestTrain)
+    if (!loop || fTestTrain==0)
         return kTRUE;
 
-    loop->SetOperationMode(MMatrixLoop::kOdd);
+    loop->SetOperationMode(fTestTrain<0?MMatrixLoop::kEven:MMatrixLoop::kOdd);
 
     // Done already in Fcn
Index: /trunk/MagicSoft/Mars/mjobs/MJOptimize.h
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJOptimize.h	(revision 6947)
+++ /trunk/MagicSoft/Mars/mjobs/MJOptimize.h	(revision 6948)
@@ -84,5 +84,5 @@
     UInt_t  fNumMaxCalls;
     Float_t fTolerance;
-    Bool_t  fTestTrain;
+    Int_t   fTestTrain;
 
     Bool_t Optimize(MEvtLoop &evtloop);
@@ -110,5 +110,5 @@
     void SetNumMaxCalls(UInt_t num=0) { fNumMaxCalls=num; }
     void SetTolerance(Float_t tol=0)  { fTolerance=tol; }
-    void EnableTestTrain(Bool_t b=kTRUE) { fTestTrain=b; }
+    void EnableTestTrain(Int_t b=2)   { fTestTrain=b; }
 
     // Parameter access
