Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 7886)
+++ trunk/MagicSoft/Mars/Changelog	(revision 7887)
@@ -18,4 +18,21 @@
 
                                                  -*-*- END OF LINE -*-*-
+ 2006/08/19 Thomas Bretz
+
+   * mastro/MAstroCatalog.cc:
+     - replaced all ifstream by MZlib to allow reading gzip
+       compressed catalogs
+
+   * mbase/MString.[h,cc]:
+     - changed function Form() 
+     - renamed old function Form() to Format()
+
+   * mastro/MAstroCatalog.cc, mbase/MParContainer.cc,
+     mbase/MStatusDisplay.cc, mbase/MTask.cc, mpointing/MHSrcPosCam.cc
+     mpointing/MPointingPos.cc:
+     - replaced MString::Form by new function name MString::Format
+
+
+
  2006/08/18 Thomas Bretz
 
Index: trunk/MagicSoft/Mars/NEWS
===================================================================
--- trunk/MagicSoft/Mars/NEWS	(revision 7886)
+++ trunk/MagicSoft/Mars/NEWS	(revision 7887)
@@ -30,4 +30,8 @@
    - callisto: Callisto now raises an error if one of the input files could
      not be opened.
+
+   - callisto: In some rare cases it could happen that in the hi-gain
+     extraction of the digital filter the extractor returned nonsense
+     results due a wrong initializion of a variable
 
    - callisto: The lo-gains have been marked as valid in some cases 
Index: trunk/MagicSoft/Mars/mastro/MAstroCatalog.cc
===================================================================
--- trunk/MagicSoft/Mars/mastro/MAstroCatalog.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mastro/MAstroCatalog.cc	(revision 7887)
@@ -129,5 +129,4 @@
 
 #include <errno.h>      // strerror
-#include <fstream>      // ifstream
 #include <stdlib.h>     // ati, atof
 #include <limits.h>     // INT_MAX (Suse 7.3/gcc 2.95)
@@ -144,4 +143,6 @@
 #include "MLog.h"
 #include "MLogManip.h"
+
+#include "MZlib.h"      // MZlib <ifstream>
 
 #include "MTime.h"
@@ -261,5 +262,5 @@
     gLog << inf << "Reading Xephem catalog: " << catalog << endl;
 
-    ifstream fin(catalog);
+    MZlib fin(catalog);
     if (!fin)
     {
@@ -342,5 +343,5 @@
     gLog << inf << "Reading NGC2000 catalog: " << catalog << endl;
 
-    ifstream fin(catalog);
+    MZlib fin(catalog);
     if (!fin)
     {
@@ -406,5 +407,5 @@
     gLog << inf << "Reading Bright Star Catalog (BSC5) catalog: " << catalog << endl;
 
-    ifstream fin(catalog);
+    MZlib fin(catalog);
     if (!fin)
     {
@@ -478,5 +479,5 @@
     gLog << inf << "Reading Heasarc PPM catalog: " << catalog << endl;
 
-    ifstream fin(catalog);
+    MZlib fin(catalog);
     if (!fin)
     {
@@ -582,5 +583,5 @@
     gLog << inf << "Reading MAstroCatalog compressed catalog: " << catalog << endl;
 
-    ifstream fin(catalog);
+    MZlib fin(catalog);
     if (!fin)
     {
@@ -735,5 +736,5 @@
     if (!str.IsNull())
         str += ":  ";
-    str += MString::Form("Ra=%.2fh  Dec=%.1fd  Mag=%.1f", ra, dec, mag);
+    str += MString::Format("Ra=%.2fh  Dec=%.1fd  Mag=%.1f", ra, dec, mag);
     if (txt)
     {
Index: trunk/MagicSoft/Mars/mbase/MParContainer.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParContainer.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mbase/MParContainer.cc	(revision 7887)
@@ -230,5 +230,5 @@
     //
     return (TString)o.GetName()==o.ClassName() ? (TString)o.ClassName() :
-        MString::Form("%s [%s]", o.GetName(), o.ClassName());
+        MString::Format("%s [%s]", o.GetName(), o.ClassName());
 }
 
Index: trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 7887)
@@ -253,14 +253,14 @@
     filemenu->AddSeparator();
 
-    const TString fname(MString::Form("Save %s.", gROOT->GetName()));
+    const TString fname(MString::Format("Save %s.", gROOT->GetName()));
     MGPopupMenu *savemenu = new MGPopupMenu(gClient->GetRoot());
-    savemenu->AddEntry(MString::Form("%s&ps",  fname.Data()),  kFileSaveAsPS);
-    savemenu->AddEntry(MString::Form("%sp&df", fname.Data()),  kFileSaveAsPDF);
-    savemenu->AddEntry(MString::Form("%s&svg", fname.Data()),  kFileSaveAsSVG);
+    savemenu->AddEntry(MString::Format("%s&ps",  fname.Data()),  kFileSaveAsPS);
+    savemenu->AddEntry(MString::Format("%sp&df", fname.Data()),  kFileSaveAsPDF);
+    savemenu->AddEntry(MString::Format("%s&svg", fname.Data()),  kFileSaveAsSVG);
     savemenu->AddSeparator();
-    savemenu->AddEntry(MString::Form("%sp&ng", fname.Data()),  kFileSaveAsPNG);
-    savemenu->AddEntry(MString::Form("%s&gif", fname.Data()),  kFileSaveAsGIF);
-    savemenu->AddEntry(MString::Form("%s&jpg", fname.Data()),  kFileSaveAsJPG);
-    savemenu->AddEntry(MString::Form("%s&xpm", fname.Data()),  kFileSaveAsXPM);
+    savemenu->AddEntry(MString::Format("%sp&ng", fname.Data()),  kFileSaveAsPNG);
+    savemenu->AddEntry(MString::Format("%s&gif", fname.Data()),  kFileSaveAsGIF);
+    savemenu->AddEntry(MString::Format("%s&jpg", fname.Data()),  kFileSaveAsJPG);
+    savemenu->AddEntry(MString::Format("%s&xpm", fname.Data()),  kFileSaveAsXPM);
     //savemenu->AddEntry("Save status.x&cf",  kFileSaveAsXCF);
     //savemenu->AddEntry("Save status.&tiff", kFileSaveAsTIFF);
@@ -268,6 +268,6 @@
     savemenu->AddEntry("Save status.&xml",  kFileSaveAsXML);
     savemenu->AddSeparator();
-    savemenu->AddEntry(MString::Form("%s&C",    fname.Data()), kFileSaveAsC);
-    savemenu->AddEntry(MString::Form("%s&root", fname.Data()), kFileSaveAsRoot);
+    savemenu->AddEntry(MString::Format("%s&C",    fname.Data()), kFileSaveAsC);
+    savemenu->AddEntry(MString::Format("%s&root", fname.Data()), kFileSaveAsRoot);
     savemenu->Associate(this);
 
@@ -292,14 +292,14 @@
     tabmenu->AddSeparator();
 
-    const TString fname2(MString::Form("Save %s-i.", gROOT->GetName()));
+    const TString fname2(MString::Format("Save %s-i.", gROOT->GetName()));
     MGPopupMenu *savemenu2 = new MGPopupMenu(gClient->GetRoot());
-    savemenu2->AddEntry(MString::Form("%s&ps",  fname2.Data()),  kTabSaveAsPS);
-    savemenu2->AddEntry(MString::Form("%sp&df", fname2.Data()),  kTabSaveAsPDF);
-    savemenu2->AddEntry(MString::Form("%s&svg", fname2.Data()),  kTabSaveAsSVG);
+    savemenu2->AddEntry(MString::Format("%s&ps",  fname2.Data()),  kTabSaveAsPS);
+    savemenu2->AddEntry(MString::Format("%sp&df", fname2.Data()),  kTabSaveAsPDF);
+    savemenu2->AddEntry(MString::Format("%s&svg", fname2.Data()),  kTabSaveAsSVG);
     savemenu2->AddSeparator();
-    savemenu2->AddEntry(MString::Form("%sp&ng", fname2.Data()),  kTabSaveAsPNG);
-    savemenu2->AddEntry(MString::Form("%s&gif", fname2.Data()),  kTabSaveAsGIF);
-    savemenu2->AddEntry(MString::Form("%s&jpg", fname2.Data()),  kTabSaveAsJPG);
-    savemenu2->AddEntry(MString::Form("%s&xpm", fname2.Data()),  kTabSaveAsXPM);
+    savemenu2->AddEntry(MString::Format("%sp&ng", fname2.Data()),  kTabSaveAsPNG);
+    savemenu2->AddEntry(MString::Format("%s&gif", fname2.Data()),  kTabSaveAsGIF);
+    savemenu2->AddEntry(MString::Format("%s&jpg", fname2.Data()),  kTabSaveAsJPG);
+    savemenu2->AddEntry(MString::Format("%s&xpm", fname2.Data()),  kTabSaveAsXPM);
     //savemenu->AddEntry("Save status.x&cf",  kFileSaveAsXCF);
     //savemenu->AddEntry("Save status.&tiff", kFileSaveAsTIFF);
@@ -307,6 +307,6 @@
     savemenu->AddEntry("Save status.&xml",  kFileSaveAsXML);
     savemenu2->AddSeparator();
-    savemenu2->AddEntry(MString::Form("%s&C",    fname2.Data()), kTabSaveAsC);
-    savemenu2->AddEntry(MString::Form("%s&root", fname2.Data()), kTabSaveAsRoot);
+    savemenu2->AddEntry(MString::Format("%s&C",    fname2.Data()), kTabSaveAsC);
+    savemenu2->AddEntry(MString::Format("%s&root", fname2.Data()), kTabSaveAsRoot);
     savemenu2->Associate(this);
 
@@ -440,5 +440,5 @@
 
     // Add MARS version
-    TGLabel *l = new TGLabel(f, MString::Form("Official Release: V%s", MARSVER));
+    TGLabel *l = new TGLabel(f, MString::Format("Official Release: V%s", MARSVER));
     fList->Add(l);
 
@@ -451,5 +451,5 @@
 
     // Add root version
-    l = new TGLabel(f, MString::Form("Using ROOT v%s", ROOTVER));
+    l = new TGLabel(f, MString::Format("Using ROOT v%s", ROOTVER));
     fList->Add(l);
 
@@ -660,5 +660,5 @@
 void MStatusDisplay::SetStatusLine2(const MParContainer &cont)
 {
-    SetStatusLine2(MString::Form("%s: %s", cont.GetDescriptor().Data(), cont.GetTitle()));
+    SetStatusLine2(MString::Format("%s: %s", cont.GetDescriptor().Data(), cont.GetTitle()));
 }
 
@@ -1097,5 +1097,5 @@
     {
         // Tell the X-Requester how to call this method
-        TString str = MString::Form("%d", (ULong_t)f);
+        TString str = MString::Format("%d", (ULong_t)f);
 
         TMethodCall call(IsA(), "UpdateTab", "NULL");
@@ -1272,5 +1272,5 @@
     gSystem->Unlink(tmp);
 
-    SetStatusLine2(MString::Form("Done (%dpage(s))", pages));
+    SetStatusLine2(MString::Format("Done (%dpage(s))", pages));
 
     return pages;
@@ -1380,5 +1380,5 @@
 
     // Code taken from TGTextEdit::Print
-    const TString pipe = MString::Form("a2ps -o%s", name.Data());
+    const TString pipe = MString::Format("a2ps -o%s", name.Data());
     FILE *p = gSystem->OpenPipe(pipe, "w");
     if (!p)
@@ -1493,5 +1493,5 @@
 
     case kFileTab:
-        AddTab(MString::Form("%d", fTab->GetNumberOfTabs()));
+        AddTab(MString::Format("%d", fTab->GetNumberOfTabs()));
         return kTRUE;
 
@@ -1683,5 +1683,5 @@
         SetStatusLine2("");
         *fLog << inf << "Saving log... " << flush;
-        if (fLogBox->GetText()->Save(MString::Form("%s.log", gROOT->GetName())))
+        if (fLogBox->GetText()->Save(MString::Format("%s.log", gROOT->GetName())))
         {
             *fLog << "done." << endl;
@@ -1699,5 +1699,5 @@
         SetStatusLine2("");
         *fLog << inf << "Appending log... " << flush;
-        if (fLogBox->GetText()->Append(MString::Form("%s.log", gROOT->GetName())))
+        if (fLogBox->GetText()->Append(MString::Format("%s.log", gROOT->GetName())))
         {
             *fLog << "done." << endl;
@@ -1948,5 +1948,5 @@
 void MStatusDisplay::UpdateMemory() const
 {
-    const TString path = MString::Form("/proc/%d/status", gSystem->GetPid());
+    const TString path = MString::Format("/proc/%d/status", gSystem->GetPid());
     if (gSystem->AccessPathName(path, kFileExists))
         return;
@@ -1970,5 +1970,5 @@
         val /= 1000;
     }
-    const TString txt = MString::Form("%.1f%c", val, type);
+    const TString txt = MString::Format("%.1f%c", val, type);
     fStatusBar->SetText(txt, 2);
 }
@@ -2464,5 +2464,5 @@
         }
 
-        SetStatusLine2(MString::Form("Tab #%d", i));
+        SetStatusLine2(MString::Format("Tab #%d", i));
 
         //
@@ -2526,5 +2526,5 @@
         PSToolsTextNDC(*ps, 0.5, 1.015, TString("MARS - Magic Analysis and Reconstruction Software - ")+d.AsString());
         ps->SetTextAlign(31); // right top
-        PSToolsTextNDC(*ps, 1, 1.015, MString::Form("Page No.%i (%i)  ", page++, i));
+        PSToolsTextNDC(*ps, 1, 1.015, MString::Format("Page No.%i (%i)  ", page++, i));
         line.PaintLineNDC(0, 1.01, 1, 1.01);
 
@@ -2570,5 +2570,5 @@
         *fLog << inf << "done." << endl;
 
-    SetStatusLine2(MString::Form("Done (%dpages)", page-1));
+    SetStatusLine2(MString::Format("Done (%dpages)", page-1));
 
     return page-1;
@@ -2675,5 +2675,5 @@
         }
 
-        SetStatusLine2(MString::Form("Tab #%d", i));
+        SetStatusLine2(MString::Format("Tab #%d", i));
 
         //
@@ -2771,5 +2771,5 @@
         }
 
-        SetStatusLine2(MString::Form("Tab #%d", i));
+        SetStatusLine2(MString::Format("Tab #%d", i));
 
         //
Index: trunk/MagicSoft/Mars/mbase/MString.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MString.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mbase/MString.cc	(revision 7887)
@@ -120,5 +120,5 @@
 // M/TString.
 //
-MString MString::Form(const char *fmt, ...)
+MString MString::Format(const char *fmt, ...)
 {
     va_list ap;
@@ -129,2 +129,15 @@
     return ret;
 }
+
+// --------------------------------------------------------------------------
+//
+// This is my implementation for root versions prior to 5.12/00 where
+// TString::Form didn't exist.
+//
+void MString::Form(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+
+    Print(fmt, ap);
+}
Index: trunk/MagicSoft/Mars/mbase/MString.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MString.h	(revision 7886)
+++ trunk/MagicSoft/Mars/mbase/MString.h	(revision 7887)
@@ -18,7 +18,7 @@
     MString &Print(const char *fmt, ...);
 
-#ifndef __CINT__
-    static MString Form(const char *fmt, ...);
-#endif
+    static MString Format(const char *fmt, ...);
+
+    void Form(const char *fmt, ...);
 
     ClassDef(MString, 1) // Tool to make Form() thread safe against other TStrings
Index: trunk/MagicSoft/Mars/mbase/MTask.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 7887)
@@ -361,9 +361,9 @@
     //
     if (fName==ClassName())
-        return fSerialNumber==0 ? (TString)ClassName() : MString::Form("%s;%d", ClassName(), fSerialNumber);
+        return fSerialNumber==0 ? (TString)ClassName() : MString::Format("%s;%d", ClassName(), fSerialNumber);
 
     return fSerialNumber>0 ?
-        MString::Form("%s;%d [%s]", fName.Data(), fSerialNumber, ClassName()) :
-        MString::Form("%s [%s]",    fName.Data(), ClassName());
+        MString::Format("%s;%d [%s]", fName.Data(), fSerialNumber, ClassName()) :
+        MString::Format("%s [%s]",    fName.Data(), ClassName());
 }
 
Index: trunk/MagicSoft/Mars/mpointing/MHSrcPosCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MHSrcPosCam.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mpointing/MHSrcPosCam.cc	(revision 7887)
@@ -113,5 +113,5 @@
 
     const TString src = pos->GetString("radec");
-    fHist.SetTitle(MString::Form("SrcPos distribution in camera: %s", src.Data()));
+    fHist.SetTitle(MString::Format("SrcPos distribution in camera: %s", src.Data()));
 
     fHist.Reset();
Index: trunk/MagicSoft/Mars/mpointing/MPointingPos.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MPointingPos.cc	(revision 7886)
+++ trunk/MagicSoft/Mars/mpointing/MPointingPos.cc	(revision 7887)
@@ -100,20 +100,20 @@
 
     if (opt.Contains("ra", TString::kIgnoreCase))
-        rc += MString::Form(" Ra=%s", MAstro::GetStringHor(fRa).Data());
+        rc += MString::Format(" Ra=%s", MAstro::GetStringHor(fRa).Data());
 
     if (opt.Contains("ha", TString::kIgnoreCase))
-        rc += MString::Form(" Ha=%s", MAstro::GetStringHor(fHa).Data());
+        rc += MString::Format(" Ha=%s", MAstro::GetStringHor(fHa).Data());
 
     if (opt.Contains("dec", TString::kIgnoreCase))
-        rc += MString::Form(" Dec=%s", MAstro::GetStringDeg(fDec).Data());
+        rc += MString::Format(" Dec=%s", MAstro::GetStringDeg(fDec).Data());
 
     if (opt.Contains("zd", TString::kIgnoreCase))
-        rc += MString::Form(" Zd=%s", MAstro::GetStringDeg(fZd).Data());
+        rc += MString::Format(" Zd=%s", MAstro::GetStringDeg(fZd).Data());
 
     if (opt.Contains("az", TString::kIgnoreCase))
-        rc += MString::Form(" Az=%s", MAstro::GetStringDeg(fAz).Data());
+        rc += MString::Format(" Az=%s", MAstro::GetStringDeg(fAz).Data());
 
     if (fTitle!=gsDefTitle)
-        rc += MString::Form(" <%s>", fTitle.Data());
+        rc += MString::Format(" <%s>", fTitle.Data());
 
     return rc.Strip(TString::kBoth);
