Index: trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc	(revision 7832)
+++ trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc	(revision 7842)
@@ -138,36 +138,52 @@
 Bool_t MArrivalTimeCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
 {
+    if (idx>=GetSize())
+        return kFALSE;
+
+    const MArrivalTimePix &pix = (*this)[idx];
+
     switch (type)
     {
     case 0:
-        val = (*this)[idx].GetArrivalTimeHiGain();
-        break;
+        val = pix.GetArrivalTimeHiGain();
+        return pix.IsHiGainValid();
+
     case 1:
-        val = (*this)[idx].GetArrivalTimeHiGainError();
-        break;
+        val = pix.GetArrivalTimeHiGainError();
+        return val>0;
+
     case 2:
-        val = (*this)[idx].GetArrivalTimeLoGain();
-        break;
+        val = pix.GetArrivalTimeLoGain();
+        return pix.IsLoGainValid();
+
     case 3:
-        val = (*this)[idx].GetArrivalTimeLoGainError();
-        break;
+        val = pix.GetArrivalTimeLoGainError();
+        return val>0;
+
     case 4:
     case 6:
-	if ((*this)[idx].GetNumHiGainSaturated() > 0)
-	    val = (*this)[idx].GetArrivalTimeLoGain();
-	else
-	    val = (*this)[idx].GetArrivalTimeHiGain();
-        break;
+        val = pix.GetArrivalTime();
+        return pix.IsValid();
+
+        // This is for the case the signal has been
+        // extracted from lo- and hi-gain
     case 7:
-        if ((*this)[idx].GetNumHiGainSaturated() == 0)
+        if (!pix.IsLoGainValid() || !pix.IsHiGainValid())
             return kFALSE;
 
-        val = (*this)[idx].GetArrivalTimeHiGain()-(*this)[idx].GetArrivalTimeLoGain();
-        return kTRUE;
+        val = pix.GetArrivalTimeLoGain()-pix.GetArrivalTimeHiGain();
+
+        if (pix.GetArrivalTimeHiGain()<3 || pix.GetArrivalTimeHiGain()>12 ||
+            pix.GetArrivalTimeLoGain()<3 || pix.GetArrivalTimeLoGain()>12)
+            return kFALSE;
+
+        val = pix.GetArrivalTimeLoGain()-pix.GetArrivalTimeHiGain();
+        return TMath::Abs(val)<2; // FIXME: Is this a good value?
 
     default:
 	return kFALSE;
     }
-    return val>=0;
+
+    return kFALSE;
 }
 
Index: trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc	(revision 7832)
+++ trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc	(revision 7842)
@@ -154,22 +154,41 @@
 Bool_t MExtractedSignalCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
 {
+    if (idx>=GetSize())
+        return kFALSE;
+
+    const MExtractedSignalPix &pix = (*this)[idx];
+
     switch (type)
     {
     case 0:
-        val = (*this)[idx].GetExtractedSignalHiGain();
-        break;
+        val = pix.GetExtractedSignalHiGain();
+        return pix.IsHiGainValid();
+
     case 1:
-        val = (*this)[idx].GetExtractedSignalHiGainError();
-        break;
+        val = pix.GetExtractedSignalHiGainError();
+        return val>0;
+
     case 2:
-        val = (*this)[idx].GetExtractedSignalLoGain();
-        break;
+        val = pix.GetExtractedSignalLoGain();
+        return pix.IsLoGainValid();
+
     case 3:
-        val = (*this)[idx].GetExtractedSignalLoGainError();
-        break;
+        val = pix.GetExtractedSignalLoGainError();
+        return val>0;
+
+        // This is for the case the signal has been
+        // extracted from lo- and hi-gain
+    case 4:
+        if (!pix.IsLoGainValid() || !pix.IsHiGainValid())
+            return kFALSE;
+
+        val = pix.GetExtractedSignalHiGain()/pix.GetExtractedSignalLoGain();
+        return pix.GetExtractedSignalLoGain()>2 && val<25;
+
     default:
 	return kFALSE;
     }
-    return val>=0;
+
+    return kFALSE;
 }
 
Index: trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h	(revision 7832)
+++ trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h	(revision 7842)
@@ -15,6 +15,6 @@
   Float_t fExtractedSignalLoGainError; // error of the mean value of the extracted signal
 
-  Byte_t fNumHiGainSaturated;
-  Byte_t fNumLoGainSaturated;
+  Byte_t fNumHiGainSaturated;          // Number of first hi-gain slice which has saturated (could be negative if already the first slice saturates)
+  Byte_t fNumLoGainSaturated;          // Number of first lo-gain slices which have saturated
 
 public:
@@ -40,4 +40,6 @@
 
   Bool_t IsLoGainUsed()                   const { return fNumHiGainSaturated>0;        }
+  Bool_t IsLoGainValid()                  const { return fExtractedSignalLoGainError>=0 && fNumLoGainSaturated==0; }
+  Bool_t IsHiGainValid()                  const { return fExtractedSignalHiGainError>=0 && fNumHiGainSaturated==0; }
   Bool_t IsValid()                        const;   
 
