Index: trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 3387)
@@ -1973,6 +1973,8 @@
         {
             line.PaintLineNDC(0, -0.00, 1, -0.00);
-            ps.SetTextAlign(23); // cent bottom
-            ps.TextNDC(0.5, -0.005, txt);
+            ps.SetTextAlign(11); // left top
+            ps.TextNDC(0, -0.005, txt);
+            ps.SetTextAlign(31); // right top
+            ps.TextNDC(1, -0.005, "(c) 2000-2004, Thomas Bretz");
         }
 
Index: trunk/MagicSoft/Mars/mgeom/MGeomCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mgeom/MGeomCam.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mgeom/MGeomCam.cc	(revision 3387)
@@ -66,4 +66,6 @@
     : fNumPixels(0), fCamDist(0), fConvMm2Deg(0)
 {
+    fName  = "MGeomCam";
+    fTitle = "Storage container for a camera geometry";
 }
 
@@ -77,5 +79,5 @@
 {
     fName  = name  ? name  : "MGeomCam";
-    fTitle = title ? title : "Storage container for  a camera geometry";
+    fTitle = title ? title : "Storage container for a camera geometry";
 
     //
Index: trunk/MagicSoft/Mars/mgeom/MGeomMirror.cc
===================================================================
--- trunk/MagicSoft/Mars/mgeom/MGeomMirror.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mgeom/MGeomMirror.cc	(revision 3387)
@@ -128,2 +128,25 @@
     fReflectivity = ref;
 }
+
+TVector3 MGeomMirror::GetReflection(const TVector3 &star, Double_t dist)
+{
+    if (fReflector==TRotation())
+    {
+        fReflector = TRotation(); // unit matrix
+        fReflector.Rotate(TMath::Pi(), GetMirrorNorm());
+    }
+
+    // Reflect star on the mirror (done by a rotation
+    // around the normal vector of the mirror center
+    TVector3 light(star);
+    light *= fReflector;
+
+    if (dist<0)
+        return light;
+
+    // calculate distance to the camera
+    const TVector3 &pos = GetMirrorCenter();
+    const Double_t d = (dist - pos.Z()) / light.Z();
+
+    return light*d + pos;
+}
Index: trunk/MagicSoft/Mars/mgeom/MGeomMirror.h
===================================================================
--- trunk/MagicSoft/Mars/mgeom/MGeomMirror.h	(revision 3386)
+++ trunk/MagicSoft/Mars/mgeom/MGeomMirror.h	(revision 3387)
@@ -10,6 +10,6 @@
 #endif
 
-#ifndef ROOT_TVector3
-#include <TVector3.h>
+#ifndef ROOT_TRotation
+#include <TRotation.h>
 #endif
 
@@ -17,23 +17,25 @@
 {
 private:
-    Int_t   fMirrorId;    // the Mirror Id
+    Int_t   fMirrorId;     // the Mirror Id
 
-    Float_t fFocalDist;   // [cm] focal distance of that mirror
-    Float_t fSX;          // [cm] curvilinear coordinate of mirror's center in X
-    Float_t fSY;          // [cm] curvilinear coordinate of mirror's center in Y
-    Float_t fX;           // [cm] x coordinate of the center of the mirror
-    Float_t fY;           // [cm] y coordinate of the center of the mirror
-    Float_t fZ;           // [cm] z coordinate of the center of the mirror
-    Float_t fThetaN;      // polar theta angle of the direction where the mirror points to
-    Float_t fPhiN;        // polar phi angle of the direction where the mirror points to
-    Float_t fXN;          // xn coordinate of the normal vector in the center
-    Float_t fYN;          // yn coordinate of the normal vector in the center
-    Float_t fZN;          // zn coordinate of the normal vector in the center
-                          // Note: fXN^2*fYN^2*fZN^2 = 1
-    Float_t fDeviationX;  // [cm] deviation in x of the spot of a single mirror on the camera plane
-    Float_t fDeviationY;  // [cm] deviation in y of the spot of a single mirror on the camera plane
+    Float_t fFocalDist;    // [cm] focal distance of that mirror
+    Float_t fSX;           // [cm] curvilinear coordinate of mirror's center in X
+    Float_t fSY;           // [cm] curvilinear coordinate of mirror's center in Y
+    Float_t fX;            // [cm] x coordinate of the center of the mirror
+    Float_t fY;            // [cm] y coordinate of the center of the mirror
+    Float_t fZ;            // [cm] z coordinate of the center of the mirror
+    Float_t fThetaN;       // polar theta angle of the direction where the mirror points to
+    Float_t fPhiN;         // polar phi angle of the direction where the mirror points to
+    Float_t fXN;           // xn coordinate of the normal vector in the center
+    Float_t fYN;           // yn coordinate of the normal vector in the center
+    Float_t fZN;           // zn coordinate of the normal vector in the center
+                           // Note: fXN^2*fYN^2*fZN^2 = 1
+    Float_t fDeviationX;   // [cm] deviation in x of the spot of a single mirror on the camera plane
+    Float_t fDeviationY;   // [cm] deviation in y of the spot of a single mirror on the camera plane
 
-    TArrayF fWavelength;  // List of wavelength
-    TArrayF fReflectivity;// Mirror reflectivity
+    TArrayF fWavelength;   // List of wavelength
+    TArrayF fReflectivity; // Mirror reflectivity
+
+    TRotation fReflector;  //! Store this for acceleration
 
 public:
@@ -55,4 +57,6 @@
     TVector3 GetMirrorNorm() const   { return TVector3(fXN, fYN, fZN); }
 
+    TVector3 GetReflection(const TVector3 &star, Double_t dist=-1);
+
     ClassDef(MGeomMirror, 2)  // geometry class describing one mirror
 };
Index: trunk/MagicSoft/Mars/mjobs/MJCalibration.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 3387)
@@ -465,5 +465,5 @@
     if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
     {
-        *fLog << err << "Number of files found doesn't metch number of runs... abort." << endl;
+        *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
         return kFALSE;
     }
Index: trunk/MagicSoft/Mars/mjobs/MJExtractSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJExtractSignal.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mjobs/MJExtractSignal.cc	(revision 3387)
@@ -289,5 +289,5 @@
     if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
     {
-        *fLog << err << "Number of files found doesn't metch number of runs... abort." << endl;
+        *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
         return kFALSE;
     }
@@ -418,5 +418,5 @@
     if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
     {
-        *fLog << err << "Number of files found doesn't metch number of runs... abort." << endl;
+        *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
         return kFALSE;
     }
@@ -500,5 +500,5 @@
     if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
     {
-        *fLog << err << "Number of files found doesn't metch number of runs... abort." << endl;
+        *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
         return kFALSE;
     }
Index: trunk/MagicSoft/Mars/mjobs/MJPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 3387)
@@ -314,5 +314,5 @@
     if (fRuns->GetNumRuns() != fRuns->GetNumEntries())
     {
-        *fLog << err << "Number of files found doesn't metch number of runs... abort." << endl;
+        *fLog << err << "Number of files found doesn't match number of runs... abort." << endl;
         return kFALSE;
     }
Index: trunk/MagicSoft/Mars/mraw/MRawFileWrite.cc
===================================================================
--- trunk/MagicSoft/Mars/mraw/MRawFileWrite.cc	(revision 3386)
+++ trunk/MagicSoft/Mars/mraw/MRawFileWrite.cc	(revision 3387)
@@ -179,5 +179,5 @@
     //
     TTree *rh = new TTree("RunHeaders", "Run headers of all runs in this file");
-    rh->Branch("MRawRunHeader", "MRawRunHeader", &fRawRunHeader, 32000);
+    rh->Branch("MRawRunHeader.", "MRawRunHeader", &fRawRunHeader, 32000);
     rh->Fill();
     //rh->Write();
