Index: trunk/MagicSoft/Mars/mpointing/MPointingPosCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mpointing/MPointingPosCalc.cc	(revision 7109)
+++ trunk/MagicSoft/Mars/mpointing/MPointingPosCalc.cc	(revision 7115)
@@ -34,4 +34,13 @@
 //  * Real Data: Copy the nominal poiting position (Nominal Zd, Nominal Az
 //               in MReportDrive) to MPointingPosition
+//
+// We do a trick: Because it is not guranteed, that MReadReports calls
+//  ReInit before the first event from the drive-tree is read (because
+//  the first data event may have a time-stamp later than the first
+//  drive event) we always assume that the current run is a data run.
+//  If the assumption is true fReport should be initialized correctly.
+//  For MC runs this should never happen, Because they are read though
+//  MReadMarsFile which gurantees, that ReInit is always called before
+//  Process. If we encounter such a case we stop execution.
 //
 // Future: Interpolate the pointing position for each event between two
@@ -81,5 +90,4 @@
     {
     case MRawRunHeader::kRTData:
-        fReport = (MReportDrive*)plist->FindObject("MReportDrive");
         if (!fReport)
         {
@@ -121,4 +129,9 @@
 {
     fPosition = (MPointingPos*)plist->FindCreateObj("MPointingPos");
+    fReport   = (MReportDrive*)plist->FindObject("MReportDrive");
+
+    // We use kRTNone here as a placeholder for data runs.
+    fRunType  = MRawRunHeader::kRTNone;
+
     return fPosition ? kTRUE : kFALSE;
 }
@@ -130,14 +143,14 @@
 Int_t MPointingPosCalc::Process()
 {
-    if (!fReport && fRunType == MRawRunHeader::kRTData)
-    {
-        *fLog << warn << "WARNING - MPointingPosCalc::Process was called BEFORE the first" << endl;
-        *fLog <<         "          data event was read (means ReInit was executed!" << endl;
-        return kTRUE;
-    }
-
     switch (fRunType)
     {
+    case MRawRunHeader::kRTNone:
     case MRawRunHeader::kRTData:
+        if (!fReport)
+        {
+            *fLog << warn;
+            *fLog << "MPointingPosCalc::Process: fReport==NULL && fRunType!=kRTMonteCarlo... abort!" << endl;
+            return kERROR;
+        }
         fPosition->SetLocalPosition(fReport->GetNominalZd(), fReport->GetNominalAz());
         fPosition->SetSkyPosition(fReport->GetRa(), fReport->GetDec());
@@ -145,4 +158,10 @@
 
     case MRawRunHeader::kRTMonteCarlo:
+        if (!fMcEvt)
+        {
+            *fLog << warn;
+            *fLog << "MPointingPosCalc::Process: fMcEvt==NULL && fRunType==kRTMonteCarlo... abort!" << endl;
+            return kERROR;
+        }
         fPosition->SetLocalPosition(fMcEvt->GetTelescopeTheta()*TMath::RadToDeg(), fMcEvt->GetTelescopePhi()*TMath::RadToDeg());
         return kTRUE;
