Index: trunk/MagicSoft/Mars/mpointing/MPointing.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MPointing.cc	(revision 8720)
+++ trunk/MagicSoft/Mars/mpointing/MPointing.cc	(revision 8725)
@@ -18,5 +18,5 @@
 !   Author(s): Thomas Bretz, 2003 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
-!   Copyright: MAGIC Software Development, 2000-2004
+!   Copyright: MAGIC Software Development, 2000-2007
 !
 !
@@ -63,6 +63,18 @@
 //    Double_t fAcec ; // [rad] Azimuth Centering Error (cos)
 //
-//    Double_t fMagic1;// [rad] ZA Hysteresis
+//    Double_t fMagic1;// [rad] MAGIC culmination hysteresis
 //    Double_t fMagic2;// [rad] undefined
+//
+//    Double_t fDx;    // [rad] X-offset in camera (for starguider calibration)
+//    Double_t fDy;    // [rad] Y-offset in camera (for starguider calibration)
+//
+//
+//  Class Version 2:
+//  ----------------
+//    + fPx
+//    + fPy
+//    + fDx
+//    + fDy
+//
 //
 ////////////////////////////////////////////////////////////////////////////
@@ -70,6 +82,4 @@
 
 #include <fstream>
-
-#include <TVector3.h>
 
 #include <TMinuit.h>
@@ -90,6 +100,4 @@
 #define DEBUG(txt)
 
-const Int_t MPointing::fgNumPar=19;
-
 void MPointing::Init(const char *name, const char *title)
 {
@@ -97,47 +105,55 @@
     fTitle = title ? title : "Pointing correction model for the MAGIC telescope";
 
-    fCoeff = new Double_t*[fgNumPar];
-    fNames = new TString[fgNumPar];
-    fDescr = new TString[fgNumPar];
-
-    fCoeff[ 0] = &fIa;      fNames[ 0] = "IA";
-    fCoeff[ 1] = &fIe;      fNames[ 1] = "IE";
-    fCoeff[ 2] = &fFlop;    fNames[ 2] = "FLOP";
-    fCoeff[ 3] = &fAn;      fNames[ 3] = "AN";
-    fCoeff[ 4] = &fAw;      fNames[ 4] = "AW";
-    fCoeff[ 5] = &fNpae;    fNames[ 5] = "NPAE";
-    fCoeff[ 6] = &fCa;      fNames[ 6] = "CA";
-    fCoeff[ 7] = &fTf;      fNames[ 7] = "TF";
-    fCoeff[ 8] = &fTx;      fNames[ 8] = "TX";
-    fCoeff[ 9] = &fEces;    fNames[ 9] = "ECES";
-    fCoeff[10] = &fAces;    fNames[10] = "ACES";
-    fCoeff[11] = &fEcec;    fNames[11] = "ECEC";
-    fCoeff[12] = &fAcec;    fNames[12] = "ACEC";
-    fCoeff[13] = &fNrx;     fNames[13] = "NRX";
-    fCoeff[14] = &fNry;     fNames[14] = "NRY";
-    fCoeff[15] = &fCrx;     fNames[15] = "CRX";
-    fCoeff[16] = &fCry;     fNames[16] = "CRY";
-    fCoeff[17] = &fMagic1;  fNames[17] = "MAGIC1";
-    fCoeff[18] = &fMagic2;  fNames[18] = "MAGIC2";
-
-    fDescr[ 0] =  "Index Error Azimuth";
-    fDescr[ 1] =  "Index Error Zenith Distance";
-    fDescr[ 2] =  "Vertical Sag";
-    fDescr[ 3] =  "Azimuth Axis Misalignment (N-S)";
-    fDescr[ 4] =  "Azimuth Axis Misalignment (E-W)";
-    fDescr[ 5] =  "Az-El Nonperpendicularity";
-    fDescr[ 6] =  "Left-Right Collimation Error";
-    fDescr[ 7] =  "Tube fluxture (sin)";
-    fDescr[ 8] =  "Tube fluxture (tan)";
-    fDescr[ 9] =  "Elevation Centering Error (sin)";
-    fDescr[10] =  "Azimuth Centering Error (sin)";
-    fDescr[11] =  "Elevation Centering Error (cos)";
-    fDescr[12] =  "Azimuth Centering Error (cos)";
-    fDescr[13] =  "Nasmyth rotator displacement (horizontal)";
-    fDescr[14] =  "Nasmyth rotator displacement (vertical)";
-    fDescr[15] =  "Alt/Az Coude Displacement (N-S)";
-    fDescr[16] =  "Alt/Az Coude Displacement (E-W)";
-    fDescr[17] =  "n/a <ZA Hysteresis>";
-    fDescr[18] =  "n/a";
+    fCoeff = new Double_t*[kNumPar];
+    fNames = new TString[kNumPar];
+    fDescr = new TString[kNumPar];
+
+    fCoeff[kIA]     = &fIa;      fNames[kIA]     = "IA";
+    fCoeff[kIE]     = &fIe;      fNames[kIE]     = "IE";
+    fCoeff[kFLOP]   = &fFlop;    fNames[kFLOP]   = "FLOP";
+    fCoeff[kAN]     = &fAn;      fNames[kAN]     = "AN";
+    fCoeff[kAW]     = &fAw;      fNames[kAW]     = "AW";
+    fCoeff[kNPAE]   = &fNpae;    fNames[kNPAE]   = "NPAE";
+    fCoeff[kCA]     = &fCa;      fNames[kCA]     = "CA";
+    fCoeff[kTF]     = &fTf;      fNames[kTF]     = "TF";
+    fCoeff[kTX]     = &fTx;      fNames[kTX]     = "TX";
+    fCoeff[kECES]   = &fEces;    fNames[kECES]   = "ECES";
+    fCoeff[kACES]   = &fAces;    fNames[kACES]   = "ACES";
+    fCoeff[kECEC]   = &fEcec;    fNames[kECEC]   = "ECEC";
+    fCoeff[kACEC]   = &fAcec;    fNames[kACEC]   = "ACEC";
+    fCoeff[kNRX]    = &fNrx;     fNames[kNRX]    = "NRX";
+    fCoeff[kNRY]    = &fNry;     fNames[kNRY]    = "NRY";
+    fCoeff[kCRX]    = &fCrx;     fNames[kCRX]    = "CRX";
+    fCoeff[kCRY]    = &fCry;     fNames[kCRY]    = "CRY";
+    fCoeff[kMAGIC1] = &fMagic1;  fNames[kMAGIC1] = "MAGIC1";
+    fCoeff[kMAGIC2] = &fMagic2;  fNames[kMAGIC2] = "MAGIC2";
+    fCoeff[kPX]     = &fPx;      fNames[kPX]     = "PX";
+    fCoeff[kPY]     = &fPy;      fNames[kPY]     = "PY";
+    fCoeff[kDX]     = &fDx;      fNames[kDX]     = "DX";
+    fCoeff[kDY]     = &fDy;      fNames[kDY]     = "DY";
+
+    fDescr[kIA]     =  "Index Error Azimuth";
+    fDescr[kIE]     =  "Index Error Zenith Distance";
+    fDescr[kFLOP]   =  "Vertical Sag";
+    fDescr[kAN]     =  "Azimuth Axis Misalignment (N-S)";
+    fDescr[kAW]     =  "Azimuth Axis Misalignment (E-W)";
+    fDescr[kNPAE]   =  "Az-El Nonperpendicularity";
+    fDescr[kCA]     =  "Left-Right Collimation Error";
+    fDescr[kTF]     =  "Tube fluxture (sin)";
+    fDescr[kTX]     =  "Tube fluxture (tan)";
+    fDescr[kECES]   =  "Elevation Centering Error (sin)";
+    fDescr[kACES]   =  "Azimuth Centering Error (sin)";
+    fDescr[kECEC]   =  "Elevation Centering Error (cos)";
+    fDescr[kACEC]   =  "Azimuth Centering Error (cos)";
+    fDescr[kNRX]    =  "Nasmyth rotator displacement (horizontal)";
+    fDescr[kNRY]    =  "Nasmyth rotator displacement (vertical)";
+    fDescr[kCRX]    =  "Alt/Az Coude Displacement (N-S)";
+    fDescr[kCRY]    =  "Alt/Az Coude Displacement (E-W)";
+    fDescr[kMAGIC1] =  "MAGIC culmination hysteresis";
+    fDescr[kMAGIC2] =  "n/a";
+    fDescr[kPX]     =  "Starguider calibration fixed offset x";
+    fDescr[kPY]     =  "Starguider calibration fixed offset y";
+    fDescr[kDX]     =  "Starguider calibration additional offset dx";
+    fDescr[kDY]     =  "Starguider calibration additional offset dy";
 }
 
@@ -195,5 +211,5 @@
     *fLog << endl;
 
-    *fLog << "  & = Name            Value                  Sigma" << endl;
+    *fLog << "  & = Name            Value                 Sigma " << endl;
     *fLog << "--------------------------------------------------" << endl;
 
@@ -213,4 +229,6 @@
             break;
 
+        TString sout;
+
         if (str[0]=='#')
             continue;
@@ -218,25 +236,29 @@
         if (str[0]=='&')
         {
-            *fLog << " & ";
+            sout += " & ";
             str.Remove(0);
         }
         else
-            *fLog << "   ";
+            sout += "   ";
 
         if (str[1]=='=')
         {
-            *fLog << "=  ";
+            sout += "=  ";
             str.Remove(0);
         }
         else
-            *fLog << "   ";
+            sout += "   ";
 
         fin >> val;
-        *fLog << str << "\t" << setw(11) << val << "°     \t";
+
+        sout += str;
+        sout += '\t';
+        sout += Form("%11f", val);
+        sout += "°     \t";
         val *= TMath::DegToRad();
 
         // Find parameter
         Int_t n = -1;
-        for (int i=0; i<fgNumPar; i++)
+        for (int i=0; i<kNumPar; i++)
             if (str==fNames[i])
             {
@@ -247,5 +269,8 @@
 
         fin >> val;
-        *fLog << setw(9) << val << "°" << endl;
+        sout += Form("%9f°", val);
+
+        if (*fCoeff[n]!=0 || val>0)
+            *fLog << sout << endl;
 
         if (!fin)
@@ -298,5 +323,5 @@
     fout << "S   00   000000   000000  0000000" << endl;
     fout << setprecision(8);
-    for (int i=0; i<fgNumPar; i++)
+    for (int i=0; i<kNumPar; i++)
     {
         fout << " " << setw(6) << GetVarName(i) << " ";
@@ -684,5 +709,5 @@
 {
     if (n<0)
-        n = fgNumPar;
+        n = kNumPar;
 
     Int_t ierflg = 0;
Index: trunk/MagicSoft/Mars/mpointing/MPointing.h
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MPointing.h	(revision 8720)
+++ trunk/MagicSoft/Mars/mpointing/MPointing.h	(revision 8725)
@@ -4,4 +4,8 @@
 #ifndef ROOT_TArrayD
 #include <TArrayD.h>
+#endif
+
+#ifndef ROOT_TVector2
+#include <TVector2.h>
 #endif
 
@@ -19,5 +23,4 @@
 //#include "coord.h"
 //#else
-#include <TVector2.h>
 class AltAz : public TVector2
 {
@@ -51,5 +54,31 @@
 {
 private:
-    static const Int_t fgNumPar;
+    enum {
+        kIA,           // [rad] Index Error in Elevation
+        kIE,           // [rad] Index Error in Azimuth
+        kFLOP,         // [rad] Vertical Sag
+        kAN,           // [rad] Az-El Nonperpendicularity
+        kAW,           // [rad] Left-Right Collimation Error
+        kNPAE,         // [rad] Azimuth Axis Misalignment (N-S)
+        kCA,           // [rad] Azimuth Axis Misalignment (E-W)
+        kTF,           // [rad] Tube fluxture (sin)
+        kTX,           // [rad] Tube fluxture (tan)
+        kECES,         // [rad] Nasmyth rotator displacement, horizontal
+        kACES,         // [rad] Nasmyth rotator displacement, vertical
+        kECEC,         // [rad] Alt/Az Coude Displacement (N-S)
+        kACEC,         // [rad] Alt/Az Coude Displacement (E-W)
+        kNRX,          // [rad] Elevation Centering Error (sin)
+        kNRY,          // [rad] Azimuth Centering Error (sin)
+        kCRX,          // [rad] Elevation Centering Error (cos)
+        kCRY,          // [rad] Azimuth Centering Error (cos)
+        kMAGIC1,       // [rad] Magic Term (what is it?)
+        kMAGIC2,       // [rad] Magic Term (what is it?)
+        kPX,           // [rad] Starguider calibration fixed offset x
+        kPY,           // [rad] Starguider calibration fixed offset y
+        kDX,           // [rad] Starguider calibration additional offset dx
+        kDY,           // [rad] Starguider calibration additional offset dy
+        kNumPar   // Number of elements
+    };
+
 
     Double_t fIe   ; // [rad] Index Error in Elevation
@@ -73,4 +102,9 @@
     Double_t fMagic2; // [rad] Magic Term (what is it?)
 
+    Double_t fPx;    // [rad] Starguider calibration fixed offset x
+    Double_t fPy;    // [rad] Starguider calibration fixed offset y
+    Double_t fDx;    // [rad] Starguider calibration additional offset dx
+    Double_t fDy;    // [rad] Starguider calibration additional offset dy
+
     Double_t **fCoeff; //!
     TString   *fNames; //!
@@ -83,8 +117,8 @@
     void Clear(Option_t *o="")
     {
-        for (int i=0; i<fgNumPar; i++)
+        for (int i=0; i<kNumPar; i++)
         {
             *fCoeff[i] = 0;
-            fError[i] = 0;
+            fError[i] = -1;
         }
     }
@@ -94,6 +128,6 @@
 
 public:
-    MPointing() { fError.Set(fgNumPar); Init(); Clear(); }
-    MPointing(const char *name) { fError.Set(fgNumPar); Init(); Clear(); Load(name); }
+    MPointing() : fError(kNumPar) { Init(); Clear(); }
+    MPointing(const char *name) : fError(kNumPar) { Init(); Clear(); Load(name); }
     virtual ~MPointing() { delete [] fNames; delete [] fCoeff; delete [] fDescr; }
 
@@ -117,5 +151,5 @@
     ZdAz operator()(const ZdAz &zdaz, void (*fcn)(ZdAz &zdaz, Double_t *par)) const
     {
-        Double_t par[fgNumPar];
+        Double_t par[kNumPar];
         GetParameters(par);
         ZdAz za = zdaz;
@@ -126,5 +160,5 @@
     AltAz operator()(const AltAz &aaz, void (*fcn)(AltAz &aaz, Double_t *par)) const
     {
-        Double_t par[fgNumPar];
+        Double_t par[kNumPar];
         GetParameters(par);
         AltAz aa = aaz;
@@ -135,5 +169,5 @@
     TVector3 operator()(const TVector3 &aaz, void (*fcn)(TVector3 &aaz, Double_t *par)) const
     {
-        Double_t par[fgNumPar];
+        Double_t par[kNumPar];
         GetParameters(par);
         TVector3 v = aaz;
@@ -174,6 +208,6 @@
     }
 
-    void SetParameters(const Double_t *par, Int_t n=fgNumPar);
-    void GetParameters(Double_t *par, Int_t n=fgNumPar) const;
+    void SetParameters(const Double_t *par, Int_t n=kNumPar);
+    void GetParameters(Double_t *par, Int_t n=kNumPar) const;
 
     void SetParameters(const TArrayD &par)
@@ -183,5 +217,5 @@
     void GetParameters(TArrayD &par) const
     {
-        par.Set(fgNumPar);
+        par.Set(kNumPar);
         GetParameters(par.GetArray());
     }
@@ -189,5 +223,5 @@
     {
         par = fError;
-        for (int i=0; i<fgNumPar; i++)
+        for (int i=0; i<kNumPar; i++)
             par[i] *= TMath::RadToDeg();
     }
@@ -217,7 +251,15 @@
      */
 
-    static const Int_t GetNumPar() { return fgNumPar; }
-
-    ClassDef(MPointing, 1) // Pointing Model for MAGIC
+    TVector2 GetDxy() const { return TVector2(fDx, fDy)*TMath::RadToDeg(); }
+
+    Double_t GetPx() const { return fPx*TMath::RadToDeg(); }
+    Double_t GetPy() const { return fPy*TMath::RadToDeg(); }
+
+    Bool_t IsPxValid() const { return fError[kPX]>0; }
+    Bool_t IsPyValid() const { return fError[kPY]>0; }
+
+    static const Int_t GetNumPar() { return kNumPar; }
+
+    ClassDef(MPointing, 2) // Pointing Model for MAGIC
 };
 
Index: trunk/MagicSoft/Mars/mpointing/MPointingDev.h
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MPointingDev.h	(revision 8720)
+++ trunk/MagicSoft/Mars/mpointing/MPointingDev.h	(revision 8725)
@@ -15,6 +15,6 @@
     Double_t fDevAz;  // [deg] Pointing offset azimuth as calculated from starguider dat
 
-    Double_t fDevX;   // [mm]
-    Double_t fDevY;   // [mm]
+    Double_t fDevX;   // [deg] Pointing offset in x
+    Double_t fDevY;   // [deg] Pointing offset in y
 
 public:
@@ -27,4 +27,5 @@
     void SetDevZdAz(Double_t devzd, Double_t devaz) { fDevZd=devzd; fDevAz=devaz; }
     void SetDevXY(Double_t dx, Double_t dy) { fDevX=dx; fDevY=dy; }
+    void SetDevXY(const TVector2 &d) { fDevX=d.X(); fDevY=d.Y(); }
 
     Double_t GetDevZd() const  { return fDevZd; }
Index: trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc	(revision 8720)
+++ trunk/MagicSoft/Mars/mpointing/MSrcPosCalc.cc	(revision 8725)
@@ -388,5 +388,5 @@
 
     if (fDeviation)
-        v -= fDeviation->GetDevXY();
+        v -= fDeviation->GetDevXY()/fGeom->GetConvMm2Deg();
 
     SetSrcPos(v);
