Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 6873)
+++ trunk/MagicSoft/Mars/Changelog	(revision 6874)
@@ -21,4 +21,37 @@
 
                                                  -*-*- END OF LINE -*-*-
+ 2005/03/23 Thomas Bretz
+
+   * ganymed.cc:
+     - implemented wobble-mode option
+
+   * mhflux/MAlphaFitter.[h,cc]:
+     - fixed a problem in wobble mode (number of on- minus number
+       of off-entries where calculated as 0)
+     - added some additional resource options for scaling
+     - added some missing const-qualifiers
+
+   * mhflux/MHAlpha.cc:
+     - some cosmetic change to output
+
+   * mjobs/MDataSet.[h,cc]:
+     - added the possibility to add a source name for wobble mode
+       (preliminary)
+     - added reading from *.edb catalog
+
+   * mjobs/MJCalibTest.cc, mjobs/MJCalibrateSignal.cc,
+     mjobs/MJCalibration.cc, mjobs/MJPedestal.cc:
+     - replaced iter.Print("all") by iter.Print()
+
+   * mjobs/MJCut.[h,cc]:
+     - implemented wobble mode
+     - implemented getting source position
+
+   * mpointing/MSrcPosCalc.[h,cc]:
+     - always writa the anti-source position into the parameter list, too
+     - implemented wobble mode (exchange source and anti-source position)
+
+
+
  2005/03/22 Thomas Bretz
 
Index: trunk/MagicSoft/Mars/NEWS
===================================================================
--- trunk/MagicSoft/Mars/NEWS	(revision 6873)
+++ trunk/MagicSoft/Mars/NEWS	(revision 6874)
@@ -97,4 +97,6 @@
        the shower image (MNewImagePar2)
 
+     - implemented wobble-mode in ganymed
+
 
 
Index: trunk/MagicSoft/Mars/ganymed.cc
===================================================================
--- trunk/MagicSoft/Mars/ganymed.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/ganymed.cc	(revision 6874)
@@ -48,4 +48,6 @@
     gLog << " Root Options:" << endl;
     gLog << "   -b                        Batch mode (no graphical output to screen)" << endl<<endl;
+    gLog << " Operation Mode:" << endl;
+    gLog << "   --wobble                  Wobble Mode" << endl << endl;
     gLog << " Options:" << endl;
     gLog.Usage();
@@ -64,5 +66,5 @@
     gLog << "   --res[=filename]          Enable writing of result file (surviving events)" << endl;
     gLog << "   --write-only              Only write output files. No histograms filled." << endl;
-    gLog << "   --print-seq               Print Sequences information" << endl;
+    gLog << "   --print-ds                Print Dataset information" << endl;
     gLog << "   --print-files             Print Files taken from Sequences ('+' found, '-' missing)" << endl;
     gLog << "   --config=ganymed.rc       Resource file [default=ganymed.rc]" << endl;
@@ -103,5 +105,5 @@
     const TString kConfig       = arg.GetStringAndRemove("--config=", "ganymed.rc");
 
-    const Bool_t  kPrintSeq     = arg.HasOnlyAndRemove("--print-seq");
+    const Bool_t  kPrintSeq     = arg.HasOnlyAndRemove("--print-ds");
     const Bool_t  kPrintFiles   = arg.HasOnlyAndRemove("--print-files");
     const Bool_t  kDebugMem     = arg.HasOnlyAndRemove("--debug-mem");
@@ -114,4 +116,6 @@
     const Bool_t  kOverwrite    = arg.HasOnlyAndRemove("-f");
     //const Bool_t  kForceExec  = arg.HasOnlyAndRemove("-ff");
+
+    const Bool_t  kModeWobble   = arg.HasOnlyAndRemove("--wobble");
 
     const Int_t   kNumAnalysis  = arg.GetIntAndRemove("--n=", -1);
@@ -215,4 +219,5 @@
     job.SetNameResultFile(kNameResult);
     job.EnableWriteOnly(kWriteOnly);
+    job.EnableWobbleMode(kModeWobble);
     if (kWriteSummary) // Don't change flag set in SetNameSummaryFile
         job.EnableStorageOfSummary();
Index: trunk/MagicSoft/Mars/mhflux/MAlphaFitter.cc
===================================================================
--- trunk/MagicSoft/Mars/mhflux/MAlphaFitter.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mhflux/MAlphaFitter.cc	(revision 6874)
@@ -213,14 +213,9 @@
 }
 
-Bool_t MAlphaFitter::Fit(TH1D &hon, TH1D &hof, Double_t alpha, Bool_t paint)
-{
-    /*
-     Clear();
-     if (hon.GetEntries()==0)
-     return kFALSE;
-     */
-
+Bool_t MAlphaFitter::Fit(const TH1D &hon, const TH1D &hof, Double_t alpha, Bool_t paint)
+{
     TH1D h(hon);
-    h.Add(&hof, -1);
+    h.Add(&hof, -1); // substracts also number of entries!
+    h.SetEntries(hon.GetEntries());
 
     MAlphaFitter fit(*this);
@@ -558,11 +553,36 @@
         txt = txt.Strip(TString::kBoth);
         txt.ToLower();
-        if (txt==(TString)"Significance")
+        if (txt==(TString)"significance")
             fStrategy = kSignificance;
-        if (txt==(TString)"SignificanceChi2")
+        if (txt==(TString)"significancechi2")
             fStrategy = kSignificanceChi2;
         rc = kTRUE;
     }
 
-    return rc;
-}
+    if (IsEnvDefined(env, prefix, "ScaleMode", print))
+    {
+        TString txt = GetEnvValue(env, prefix, "ScaleMode", "");
+        txt = txt.Strip(TString::kBoth);
+        txt.ToLower();
+        if (txt==(TString)"none")
+            fScaleMode = kNone;
+        if (txt==(TString)"entries")
+            fScaleMode = kEntries;
+        if (txt==(TString)"integral")
+            fScaleMode = kIntegral;
+        if (txt==(TString)"offregion")
+            fScaleMode = kOffRegion;
+        if (txt==(TString)"leastsquare")
+            fScaleMode = kLeastSquare;
+        if (txt==(TString)"userscale")
+            fScaleMode = kUserScale;
+        rc = kTRUE;
+    }
+    if (IsEnvDefined(env, prefix, "Scale", print))
+    {
+        fScaleUser = GetEnvValue(env, prefix, "Scale", fScaleUser);
+        rc = kTRUE;
+    }
+
+    return rc;
+}
Index: trunk/MagicSoft/Mars/mhflux/MAlphaFitter.h
===================================================================
--- trunk/MagicSoft/Mars/mhflux/MAlphaFitter.h	(revision 6873)
+++ trunk/MagicSoft/Mars/mhflux/MAlphaFitter.h	(revision 6874)
@@ -125,5 +125,5 @@
 
     Bool_t Fit(TH1D &h, Bool_t paint=kFALSE);
-    Bool_t Fit(TH1D &on, TH1D &off, Double_t alpha, Bool_t paint=kFALSE);
+    Bool_t Fit(const TH1D &on, const TH1D &off, Double_t alpha, Bool_t paint=kFALSE);
     Bool_t Fit(TH1D &on, TH1D *off, Double_t alpha, Bool_t paint=kFALSE)
     {
Index: trunk/MagicSoft/Mars/mhflux/MHAlpha.cc
===================================================================
--- trunk/MagicSoft/Mars/mhflux/MHAlpha.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mhflux/MHAlpha.cc	(revision 6874)
@@ -827,7 +827,8 @@
     //Bool_t rc = fFit.Fit(*h);
     //delete h;
+
     if (!fFit.FitAlpha(fHAlpha, fOffData))
     {
-        *fLog << warn << "Histogram empty." << endl;
+        *fLog << warn << "MAlphaFitter - Fit failed..." << endl;
         return kTRUE;
     }
Index: trunk/MagicSoft/Mars/mjobs/MDataSet.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MDataSet.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MDataSet.cc	(revision 6874)
@@ -68,4 +68,5 @@
 
 #include <stdlib.h>
+#include <fstream>
 
 #include <TEnv.h>
@@ -77,6 +78,8 @@
 
 #include "MRead.h"
+#include "MAstro.h"
 #include "MDirIter.h"
 #include "MSequence.h"
+#include "MPointingPos.h"
 
 ClassImp(MDataSet);
@@ -113,4 +116,7 @@
         TString name = env.GetValue(Form("Sequence%08d.File", num[i]), "");
         TString dir  = env.GetValue(Form("Sequence%08d.Dir",  num[i]), "");
+
+        gSystem->ExpandPathName(name);
+        gSystem->ExpandPathName(dir);
 
         if (name.IsNull())
@@ -160,9 +166,10 @@
     Split(str, fNumSequencesOff);
 
-
     ResolveSequences(env, fNumSequencesOn,  fSequencesOn);
     ResolveSequences(env, fNumSequencesOff, fSequencesOff);
 
 
+    fNameSource = env.GetValue("SourceName", "");
+    fCatalog    = env.GetValue("Catalog",    "~/Software/data/magic_favorites.edb");
 
     //Print();
@@ -205,4 +212,7 @@
     gLog << endl;
 
+    gLog << "SourceName: " << fNameSource << endl;
+    gLog << "Catalog:    " << fCatalog << endl;
+
     if (!TString(o).Contains("files", TString::kIgnoreCase))
         return;
@@ -242,4 +252,10 @@
     }
 
+    if (gLog.GetDebugLevel()>4)
+    {
+        gLog << dbg << "Files which are searched:" << endl;
+        files.Print();
+    }
+
     return read.AddFiles(files)>0;
 }
@@ -261,2 +277,96 @@
     return AddSequencesToList(fSequencesOff, read, id, raw);
 }
+
+Bool_t MDataSet::GetSourcePos(MPointingPos &pos) const
+{
+    if (!HasSource())
+        return kFALSE;
+
+    TString catalog(fCatalog);
+    gSystem->ExpandPathName(catalog);
+
+    ifstream fin(catalog);
+    if (!fin)
+    {
+        gLog << err << "Cannot open file " << catalog << ": ";
+        gLog << strerror(errno) << endl;
+        return kFALSE;
+    }
+
+    TString ra,dec,epoch;
+
+    Int_t n = 0;
+    while (1)
+    {
+        TString line;
+        line.ReadLine(fin);
+        if (!fin)
+            break;
+
+        n++;
+        line = line.Strip(TString::kBoth);
+
+        if (!line.BeginsWith(fNameSource))
+            continue;
+
+        // CrabNebula,f|L|K0,5:34:32.0,22:0:52,-1.0,2000
+
+        for (int i=0; i<6; i++)
+        {
+            const Ssiz_t p = line.First(',');
+            if (p<0 && i<5)
+            {
+                gLog << err << "Not enough arguments in line #" << n << endl;
+                return kFALSE;
+            }
+
+            switch (i)
+            {
+            case 0:
+            case 1:
+            case 4:
+                break;
+            case 2:
+                ra = line(0, p);
+                break;
+            case 3:
+                dec = line(0, p);
+                break;
+            case 5:
+                epoch = line;
+                break;
+            }
+            line.Remove(0, p+1);
+        }
+
+        if (line.First(',')>=0)
+        {
+            gLog << err << "Too much arguments in line #" << n << endl;
+            return kFALSE;
+        }
+        break;
+    }
+
+    if (epoch!=(TString)"2000")
+    {
+        gLog << err << "Epoch not 2000... not supported." << endl;
+        return kFALSE;
+    }
+
+    Double_t r,d;
+    if (!MAstro::Coordinate2Angle(ra, r))
+    {
+        gLog << err << "ERROR - Interpreting right ascension: " << ra << endl;
+        return kFALSE;
+    }
+    if (!MAstro::Coordinate2Angle(dec, d))
+    {
+        gLog << err << "ERROR - Interpreting declination: " << dec << endl;
+        return kFALSE;
+    }
+
+    pos.SetSkyPosition(r, d);
+    pos.SetTitle(fNameSource);
+
+    return kTRUE;
+}
Index: trunk/MagicSoft/Mars/mjobs/MDataSet.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MDataSet.h	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MDataSet.h	(revision 6874)
@@ -11,4 +11,5 @@
 
 class MRead;
+class MPointingPos;
 
 class MDataSet : public MParContainer
@@ -23,4 +24,9 @@
     TList fSequencesOff;      // list of names and paths of off-sequences
 
+
+    TString  fNameSource;     // Name of source from catalog
+    TString  fCatalog;        // edb catalog (magic_favourites.edb)
+
+
     void Split(TString &runs, TArrayI &data) const;
     void ResolveSequences(TEnv &env, const TArrayI &num, TList &list) const;
@@ -31,8 +37,19 @@
     MDataSet(const char *fname);
 
-    void Print(Option_t *o="") const;
-
+    // Getter
     Bool_t IsValid() const { return fNumAnalysis!=(UInt_t)-1; }
 
+    UInt_t GetNumSequencesOn() const  { return fNumSequencesOn.GetSize(); }
+    UInt_t GetNumSequencesOff() const { return fNumSequencesOff.GetSize(); }
+
+    Bool_t HasOffSequences() const { return GetNumSequencesOff()>0; }
+
+    UInt_t GetNumAnalysis() const { return fNumAnalysis; }
+    void   SetNumAnalysis(UInt_t num) { fNumAnalysis=num; }
+
+    Bool_t HasSource() const { return !fNameSource.IsNull(); }
+    Bool_t GetSourcePos(MPointingPos &pos) const;
+
+    // Setter
     static Bool_t AddSequencesToList(const TList &list, MRead &read, char *id="I", Bool_t raw=kFALSE);
 
@@ -41,12 +58,6 @@
     Bool_t AddFilesOff(MRead &read, char *id="I", Bool_t raw=kFALSE) const;
 
-    UInt_t GetNumSequencesOn() const  { return fNumSequencesOn.GetSize(); }
-    UInt_t GetNumSequencesOff() const { return fNumSequencesOff.GetSize(); }
-
-    Bool_t HasOffSequences() const { return GetNumSequencesOff()>0; }
-
-    // Getter
-    UInt_t GetNumAnalysis() const { return fNumAnalysis; }
-    void   SetNumAnalysis(UInt_t num) { fNumAnalysis=num; }
+    // TObject
+    void Print(Option_t *o="") const;
 
     ClassDef(MDataSet, 0)
Index: trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibTest.cc	(revision 6874)
@@ -330,5 +330,5 @@
             {
                 *fLog << dbg << "Files which are searched:" << endl;
-                iter.Print("all");
+                iter.Print();
             }
           return kFALSE;
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6874)
@@ -330,5 +330,5 @@
             {
                 *fLog << dbg << "Files which are searched:" << endl;
-                iter.Print("all");
+                iter.Print();
             }
             return kFALSE;
Index: trunk/MagicSoft/Mars/mjobs/MJCalibration.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 6874)
@@ -1766,5 +1766,5 @@
             {
                 *fLog << dbg << "Files which are searched:" << endl;
-                iter.Print("all");
+                iter.Print();
             }
             return kFALSE;
Index: trunk/MagicSoft/Mars/mjobs/MJCut.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCut.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJCut.cc	(revision 6874)
@@ -58,4 +58,5 @@
 #include "MDataSet.h"
 #include "MParameters.h"
+#include "MPointingPos.h"
 #include "MObservatory.h"
 
@@ -70,5 +71,5 @@
 MJCut::MJCut(const char *name, const char *title)
     : fStoreSummary(kFALSE), fStoreResult(kFALSE), fWriteOnly(kFALSE),
-    fEstimateEnergy(0), fCalcHadronness(0)
+    fIsWobble(kFALSE), fEstimateEnergy(0), fCalcHadronness(0)
 {
     fName  = name  ? name  : "MJCut";
@@ -243,4 +244,5 @@
     EnableStorageOfSummary(GetEnv("SummaryFile", fStoreSummary));
     EnableStorageOfResult(GetEnv("ResultFile", fStoreResult));
+    EnableWobbleMode(GetEnv("WobbleMode", fIsWobble));
 
     return kTRUE;
@@ -307,4 +309,14 @@
     MObservatory obs;
     plist.AddToList(&obs);
+
+    // Possible source position (eg. Wobble Mode)
+    MPointingPos source("MSourcePos");
+    if (set.GetSourcePos(source))
+    {
+        plist.AddToList(&source);
+        *fLog << inf << "Using Source Position: " << source.GetTitle() << endl;
+    }
+    else
+        *fLog << inf << "No source position applied..." << endl;
 
     // Initialize default binnings
@@ -323,4 +335,6 @@
     MAlphaFitter fit;
     plist.AddToList(&fit);
+    if (fIsWobble)
+        fit.SetScaleMode(MAlphaFitter::kNone);
 
     MFillH falpha("MHAlphaOff [MHAlpha]", "MHillasSrc", "FillAlpha");
@@ -342,5 +356,8 @@
     readoff.AddTree("Drive");
     readoff.AddTree("EffectiveOnTime");
-    set.AddFilesOff(readoff);
+    if (fIsWobble)
+        set.AddFilesOn(readoff);
+    else
+        set.AddFilesOff(readoff);
 
     const TString path(Form("%s/", fPathOut.Data()));
@@ -375,10 +392,18 @@
     // How to get source position from off- and on-data?
     MSrcPosCalc scalc;
+    if (fIsWobble)
+        scalc.SetWobbleMode(); /********************/
     MHillasCalc hcalc;
+    MHillasCalc hcalc2("MHillasCalcAnti");
     hcalc.SetFlags(MHillasCalc::kCalcHillasSrc);
+    hcalc2.SetFlags(MHillasCalc::kCalcHillasSrc);
+    hcalc2.SetNameHillasSrc("MHillasSrcAnti");
+    hcalc2.SetNameSrcPosCam("MSrcPosAnti");
 
     MTaskList tlist2;
     tlist2.AddToList(&scalc);
     tlist2.AddToList(&hcalc);
+    if (fIsWobble)
+        tlist2.AddToList(&hcalc2);
     tlist2.AddToList(&taskenv1);
     tlist2.AddToList(&taskenv2);
@@ -414,5 +439,5 @@
         return kFALSE;
 
-    if (set.HasOffSequences())
+    if (set.HasOffSequences() || fIsWobble)
     {
         // Execute first analysis
@@ -427,5 +452,5 @@
         if (!evtloop.GetDisplay())
         {
-            *fLog << err << GetDescriptor() << ": Execution stopped by used." << endl;
+            *fLog << err << GetDescriptor() << ": Execution stopped by user." << endl;
             return kFALSE;
         }
@@ -439,10 +464,13 @@
     set.AddFilesOn(readon);
 
+    if (fIsWobble)
+        scalc.SetWobbleMode(kFALSE); /********************/
+
     MFillH fill1b("MHHillasOnPre  [MHHillas]", "MHillas", "FillHillasPre");
     MFillH fill2b("MHHillasOnPost [MHHillas]", "MHillas", "FillHillasPost");
     fill1b.SetNameTab("PreCut");
     fill2b.SetNameTab("PostCut");
-    fill1b.SetDrawOption(set.HasOffSequences()?"same":"");
-    fill2b.SetDrawOption(set.HasOffSequences()?"same":"");
+    fill1b.SetDrawOption(set.HasOffSequences()||fIsWobble?"same":"");
+    fill2b.SetDrawOption(set.HasOffSequences()||fIsWobble?"same":"");
 
     MFillH falpha2("MHAlpha", "MHillasSrc", "FillAlpha");
Index: trunk/MagicSoft/Mars/mjobs/MJCut.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCut.h	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJCut.h	(revision 6874)
@@ -16,4 +16,5 @@
     Bool_t  fStoreResult;
     Bool_t  fWriteOnly;
+    Bool_t  fIsWobble;
 
     TString fNameSummary;
@@ -42,4 +43,5 @@
     void EnableStorageOfResult(Bool_t b=kTRUE)   { fStoreResult  = b; } // See SetNameResult
     void EnableWriteOnly(Bool_t b=kTRUE)         { fWriteOnly    = b; }
+    void EnableWobbleMode(Bool_t b=kTRUE)        { fIsWobble     = b; }
 
     void SetNameSummaryFile(const char *name="");
Index: trunk/MagicSoft/Mars/mjobs/MJPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 6874)
@@ -979,5 +979,5 @@
             {
                 *fLog << dbg << "Files which are searched:" << endl;
-                iter.Print("all");
+                iter.Print();
             }
             return kFALSE;
Index: trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc	(revision 6873)
+++ trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc	(revision 6874)
@@ -17,5 +17,5 @@
 !
 !   Author(s): Thomas Bretz 3/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
-!              Abelardo Moralejo 1/2005 <mailto:moralejo@pd.infn.it>
+!   Author(s): Abelardo Moralejo 1/2005 <mailto:moralejo@pd.infn.it>
 !
 !   Copyright: MAGIC Software Development, 2000-2004
@@ -90,5 +90,5 @@
 MSrcPosCalc::MSrcPosCalc(const char *name, const char *title)
     : fObservatory(NULL), fPointPos(NULL), fSourcePos(NULL), fSrcPosCam(NULL),
-    fGeom(NULL), fTime(NULL)
+    fSrcPosAnti(NULL), fGeom(NULL), fTime(NULL), fIsWobbleMode(kFALSE)
 {
     fName  = name  ? name  : "MSrcPosCalc";
@@ -149,4 +149,8 @@
     fSrcPosCam = (MSrcPosCam*)pList->FindCreateObj("MSrcPosCam");
     if (!fSrcPosCam)
+        return kFALSE;
+
+    fSrcPosAnti = (MSrcPosCam*)pList->FindCreateObj("MSrcPosCam", "MSrcPosAnti");
+    if (!fSrcPosAnti)
         return kFALSE;
 
@@ -260,5 +264,4 @@
   // coordinates, since this transformation ignores precession and nutation effects.
   const MAstroSky2Local conv(*fTime, *fObservatory);
-
   pos *= conv;
 
@@ -284,6 +287,16 @@
   // Calculate source position in camera, and convert to mm:
   TVector2 v = CalcXYinCamera(pos0, pos)*fGeom->GetCameraDist()*1000;
-
-  fSrcPosCam->SetXY(v);
+  if (fIsWobbleMode)
+  {
+      fSrcPosAnti->SetXY(v);
+      v *= -1;
+      fSrcPosCam->SetXY(v);
+  }
+  else
+  {
+      fSrcPosCam->SetXY(v);
+      v *= -1;
+      fSrcPosAnti->SetXY(v);
+  }
 
   //     v *= fGeom->GetConvMm2Deg();
Index: trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.h
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.h	(revision 6873)
+++ trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.h	(revision 6874)
@@ -28,6 +28,9 @@
     MPointingPos *fSourcePos;
     MSrcPosCam   *fSrcPosCam;
+    MSrcPosCam   *fSrcPosAnti;
     MGeomCam     *fGeom;
     MTime        *fTime;
+
+    Bool_t fIsWobbleMode;
 
     // MSrcPosCalc
@@ -52,4 +55,5 @@
     void SetSourcePos(Double_t ra, Double_t dec);
     void SetOwner(Bool_t b=kTRUE) { b ? SetBit(kIsOwner) : ResetBit(kIsOwner); } // Make MSrcPosCalc owner of fSourcePos
+    void SetWobbleMode(Bool_t b=kTRUE) { fIsWobbleMode = b; }
 
     ClassDef(MSrcPosCalc, 0) // Calculates the source position in the camera
