Index: trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MArrivalTimeCam.cc	(revision 7876)
@@ -128,5 +128,5 @@
         idx++;
 
-        if (!pix->IsValid())
+        if (!pix->IsArrivalTimeValid())
             continue;
 
@@ -147,5 +147,5 @@
     case 0:
         val = pix.GetArrivalTimeHiGain();
-        return pix.IsHiGainValid();
+        return pix.IsHiGainValid() && !pix.IsHiGainSaturated();
 
     case 1:
@@ -155,5 +155,5 @@
     case 2:
         val = pix.GetArrivalTimeLoGain();
-        return pix.IsLoGainValid();
+        return pix.IsLoGainValid() && !pix.IsLoGainSaturated();
 
     case 3:
@@ -164,17 +164,22 @@
     case 6:
         val = pix.GetArrivalTime();
-        return pix.IsValid();
+        return pix.IsArrivalTimeValid();
 
         // This is for the case the signal has been
         // extracted from lo- and hi-gain
     case 7:
+        // Lo- and hi-gain must be successfully extracted
         if (!pix.IsLoGainValid() || !pix.IsHiGainValid())
+            return kFALSE;
+
+        // Lo- and hi-gain must not be saturated
+        if (pix.IsLoGainSaturated() || pix.IsHiGainSaturated())
             return kFALSE;
 
         val = pix.GetArrivalTimeLoGain()-pix.GetArrivalTimeHiGain();
 
-        if (pix.GetArrivalTimeHiGain()<3 || pix.GetArrivalTimeHiGain()>12 ||
-            pix.GetArrivalTimeLoGain()<3 || pix.GetArrivalTimeLoGain()>12)
-            return kFALSE;
+//        if (pix.GetArrivalTimeHiGain()<3 || pix.GetArrivalTimeHiGain()>12 ||
+//            pix.GetArrivalTimeLoGain()<3 || pix.GetArrivalTimeLoGain()>12)
+//            return kFALSE;
 
         val = pix.GetArrivalTimeLoGain()-pix.GetArrivalTimeHiGain();
Index: trunk/MagicSoft/Mars/msignal/MArrivalTimePix.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MArrivalTimePix.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MArrivalTimePix.cc	(revision 7876)
@@ -90,7 +90,34 @@
 }
 
-Bool_t MArrivalTimePix::IsValid() const
+Float_t MArrivalTimePix::GetArrivalTime() const
 {
-    return (!IsLoGainUsed() && fArrivalTimeHiGainError >= 0) || (IsLoGainUsed() && fArrivalTimeLoGainError >= 0);
+    // If hi-gain is not saturated and has successfully been
+    // extracted use the hi-gain arrival time
+    if (!IsHiGainSaturated() && IsHiGainValid())
+        return GetArrivalTimeHiGain();
+
+    // If hi-gain could not be used ans the lo-gain could
+    // not be extracted return
+    if (!IsLoGainValid())
+        return 0;
+
+    // in all other cases use the lo-gain arrival time
+    return GetArrivalTimeLoGain();
+}
+
+Bool_t MArrivalTimePix::IsArrivalTimeValid() const
+{
+    // If hi-gain is not saturated and has successfully been
+    // extracted use the hi-gain arrival time
+    if (!IsHiGainSaturated() && IsHiGainValid())
+        return kTRUE;
+
+    // If hi-gain could not be used ans the lo-gain could
+    // not be extracted return kFALSE (no valid arrival time)
+    if (!IsLoGainValid())
+        return kFALSE;
+
+    // in all other cases use the lo-gain arrival time
+    return kTRUE;
 }
 
Index: trunk/MagicSoft/Mars/msignal/MArrivalTimePix.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MArrivalTimePix.h	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MArrivalTimePix.h	(revision 7876)
@@ -47,13 +47,15 @@
     Float_t GetArrivalTimeLoGainError() const { return fArrivalTimeLoGainError; }
 
-    Float_t GetArrivalTime()            const { return IsLoGainUsed() ? fArrivalTimeLoGain : fArrivalTimeHiGain; }
+    Float_t GetArrivalTime()            const;
+    Bool_t  IsArrivalTimeValid()        const;
 
     Byte_t GetNumHiGainSaturated()      const { return fNumHiGainSaturated; }
     Byte_t GetNumLoGainSaturated()      const { return fNumLoGainSaturated; }
 
-    Bool_t IsLoGainUsed()               const { return fNumHiGainSaturated > 0; }
-    Bool_t IsLoGainValid()              const { return fArrivalTimeLoGainError>=0 && fNumLoGainSaturated==0; }
-    Bool_t IsHiGainValid()              const { return fArrivalTimeHiGainError>=0 && fNumHiGainSaturated==0; }
-    Bool_t IsValid()                    const;   
+    Bool_t IsHiGainSaturated()          const { return fNumHiGainSaturated>0; }
+    Bool_t IsLoGainSaturated()          const { return fNumLoGainSaturated>0; }
+
+    Bool_t IsLoGainValid()              const { return fArrivalTimeLoGainError>=0; }
+    Bool_t IsHiGainValid()              const { return fArrivalTimeHiGainError>=0; }
 
     ClassDef(MArrivalTimePix, 1)	// Storage Container for ArrivalTime information of one pixel
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 7876)
@@ -399,5 +399,7 @@
         {
           maxpos = ids-fHiGainFirst-1;
-          fMaxBinContent = *p;
+          // range-fWindowSizeHiGain+1 == fHiLoLast isn't it?
+          if (maxpos > 1 && maxpos < (range - fWindowSizeHiGain + 1))
+              fMaxBinContent = *p;
         }
 
@@ -420,6 +422,8 @@
           if (*logain > fMaxBinContent)
             { 
-              maxpos = ids-fHiGainFirst-1;
-              fMaxBinContent = *logain;
+                maxpos = ids-fHiGainFirst-1;
+                // range-fWindowSizeHiGain+1 == fHiLoLast isn't it?
+                //if (maxpos > 1 && maxpos < (range - fWindowSizeHiGain + 1))
+                //    fMaxBinContent = *logain;
             }
           
@@ -1088,4 +1092,5 @@
         // between every two FADC slices, instead of numerically
     }
+
     sum *= step; // Transform sum in integral
     return sum;
@@ -1105,5 +1110,5 @@
 
     // The order is important. In some cases (limlo-/limup-check) it can
-    // happen than max<0. In this case we start at 0
+    // happen that max<0. In this case we start at 0
     if (start > max)
         start = max;
Index: trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.cc	(revision 7876)
@@ -144,5 +144,5 @@
         idx++;
 
-        if (!pix->IsValid())
+        if (!pix->IsLoGainValid() && ! pix->IsHiGainValid())
             continue;
 
@@ -163,5 +163,5 @@
     case 0:
         val = pix.GetExtractedSignalHiGain();
-        return pix.IsHiGainValid();
+        return pix.IsHiGainValid() && !pix.IsHiGainSaturated();
 
     case 1:
@@ -171,5 +171,5 @@
     case 2:
         val = pix.GetExtractedSignalLoGain();
-        return pix.IsLoGainValid();
+        return pix.IsLoGainValid() && !pix.IsLoGainSaturated();
 
     case 3:
@@ -180,7 +180,13 @@
         // extracted from lo- and hi-gain
     case 4:
+        // Lo- and hi-gain must be successfully extracted
         if (!pix.IsLoGainValid() || !pix.IsHiGainValid())
             return kFALSE;
 
+        // Lo- and hi-gain must not be saturated
+        if (pix.IsLoGainSaturated() || pix.IsHiGainSaturated())
+            return kFALSE;
+
+        // Both signals must have a positive value
         if (pix.GetExtractedSignalLoGain()<=0 || pix.GetExtractedSignalHiGain()<=0)
             return kFALSE;
Index: trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.cc	(revision 7876)
@@ -47,4 +47,5 @@
 
 static const Float_t gkSignalInitializer = -99999.9;
+
 // ------------------------------------------------------------------------
 //
@@ -95,9 +96,4 @@
 }
 
-Bool_t MExtractedSignalPix::IsValid() const
-{
-    return (!IsLoGainUsed() && fExtractedSignalHiGainError >= 0) || (IsLoGainUsed() && fExtractedSignalLoGainError >= 0);
-}
-
 void MExtractedSignalPix::SetGainSaturation(Byte_t higain, Byte_t logain)
 {
Index: trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MExtractedSignalPix.h	(revision 7876)
@@ -39,8 +39,9 @@
   Byte_t GetNumLoGainSaturated()          const { return fNumLoGainSaturated;          }
 
-  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;   
+  Bool_t IsHiGainSaturated()              const { return fNumHiGainSaturated>0;        }
+  Bool_t IsLoGainSaturated()              const { return fNumLoGainSaturated>0;        }
+
+  Bool_t IsLoGainValid()                  const { return fExtractedSignalLoGainError>=0; }
+  Bool_t IsHiGainValid()                  const { return fExtractedSignalHiGainError>=0; }
 
   ClassDef(MExtractedSignalPix, 3) // Storage Container for Extracted Signal information of one pixel
Index: trunk/MagicSoft/Mars/msignal/MSignalCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalCam.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MSignalCam.cc	(revision 7876)
@@ -656,4 +656,5 @@
         break;
 
+        /*
     case 10: // lo gain time
         if (pix->IsPixelUnmapped() || !pix->IsLoGainUsed() ||
@@ -672,4 +673,5 @@
         val = pix->GetArrivalTime();
         return kTRUE;
+        */
 
     default:
Index: trunk/MagicSoft/Mars/msignal/MSignalPix.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalPix.cc	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MSignalPix.cc	(revision 7876)
@@ -93,5 +93,4 @@
     fPhot       =  0;
     fErrPhot    =  0;
-    fLoGainUsed = kFALSE;
 }
 
Index: trunk/MagicSoft/Mars/msignal/MSignalPix.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalPix.h	(revision 7864)
+++ trunk/MagicSoft/Mars/msignal/MSignalPix.h	(revision 7876)
@@ -20,6 +20,4 @@
     Float_t  fArrivalTime;   // Calibrated Arrival Time
 
-    Bool_t   fLoGainUsed;      //! Is lo gain used
-
 public:
     MSignalPix(Float_t phot=0, Float_t errphot=0);
@@ -34,5 +32,4 @@
         pix.fPhot       = fPhot;
         pix.fErrPhot    = fErrPhot;
-        pix.fLoGainUsed = fLoGainUsed;
     }
 
@@ -60,7 +57,4 @@
     void    SetArrivalTime(Float_t tm)    { MMath::ReducePrecision(tm); fArrivalTime = tm; }
 
-    void    SetLoGainUsed(Bool_t b=kTRUE) { fLoGainUsed=b;      }
-    Bool_t  IsLoGainUsed() const          { return fLoGainUsed; }
-
     void    AddNumPhotons(Float_t f)      { fPhot += f; }
     void    Scale(Float_t f)              { fPhot /= f; }
