Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 5239)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 5240)
@@ -35,4 +35,10 @@
      - fixed a bug in the binning of the low-gain events, affected 
        the relative times in case of high-gain saturation.
+
+   * msignal/MExtractTimeAndCharge.[h,cc]
+     - fix the range for the low-gain extraction dynamically by 
+       using the calculated time of the high-gain extraction. This 
+       should solve the problem reported by Nuria for the extractors
+       deriving from this class.   
 
 
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5240)
@@ -121,5 +121,5 @@
                               fLoGainFirst, fLoGainLast, fNumLoGainSamples);
 
-  *fLog << endl;
+  *fLog << dec << endl;
   *fLog << inf << GetDescriptor() << ": Taking " << fNumHiGainSamples
         << " HiGain samples from slice " << (Int_t)fHiGainFirst
@@ -185,11 +185,25 @@
       Byte_t satlo=0;
       
-      const Bool_t logainabflag = (higainabflag + pixel.GetNumHiGainSamples()) & 0x1;
-
-      FindTimeAndChargeLoGain(pixel.GetLoGainSamples()+fLoGainFirst, 
-                              sumlo, deltasumlo, 
-                              timelo, deltatimelo, 
-                              satlo, ped, logainabflag);
-
+      //
+      // Adapt the low-gain extraction range from the obtained high-gain time
+      //
+      if (pixel.HasLoGain())
+        {
+          fLoGainFirstSave = fLoGainFirst;
+          fLoGainFirst     = (Int_t)(timehi+fOffsetLoGain-2.);
+          fLoGainFirst     = fLoGainFirst < fLoGainFirstSave ? fLoGainFirstSave : fLoGainFirst;
+          
+          if ( fLoGainFirst < fLoGainLast )
+            {
+              const Bool_t logainabflag = (higainabflag + pixel.GetNumHiGainSamples()) & 0x1;
+              FindTimeAndChargeLoGain(pixel.GetLoGainSamples()+fLoGainFirst, 
+                                      sumlo, deltasumlo, 
+                                      timelo, deltatimelo, 
+                                      satlo, ped, logainabflag);
+            }
+          
+          fLoGainFirst     = fLoGainFirstSave;
+        }
+      
       MExtractedSignalPix &pix = (*fSignals)[pixid];
       MArrivalTimePix     &tix = (*fArrTime)[pixid];      
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5240)
@@ -9,4 +9,8 @@
 class MExtractTimeAndCharge : public MExtractTime
 {
+private:
+
+  Byte_t fLoGainFirstSave;            // First Low-Gain FADC slice obtained by position of high-gain signal
+
 protected:
 
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 5240)
@@ -37,5 +37,5 @@
 //   fHiGainFirst =  fgHiGainFirst =  0 
 //   fHiGainLast  =  fgHiGainLast  =  14
-//   fLoGainFirst =  fgLoGainFirst =  3 
+//   fLoGainFirst =  fgLoGainFirst =  2 
 //   fLoGainLast  =  fgLoGainLast  =  14
 //
@@ -63,5 +63,5 @@
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainFirst  = 2;
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainLast   = 14;
-const Byte_t  MExtractTimeAndChargeSlidingWindow::fgLoGainFirst  = 3;
+const Byte_t  MExtractTimeAndChargeSlidingWindow::fgLoGainFirst  = 2;
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgLoGainLast   = 14;
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainWindowSize = 6;
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h	(revision 5240)
@@ -14,5 +14,5 @@
   static const Byte_t fgHiGainFirst;      //! Default for fHiGainFirst  (now set to: 2)
   static const Byte_t fgHiGainLast;       //! Default for fHiGainLast   (now set to: 14)
-  static const Byte_t fgLoGainFirst;      //! Default for fLOGainFirst  (now set to: 3)
+  static const Byte_t fgLoGainFirst;      //! Default for fLOGainFirst  (now set to: 2)
   static const Byte_t fgLoGainLast;       //! Default for fLoGainLast   (now set to: 14)
   static const Byte_t fgHiGainWindowSize; //! The extraction window Hi-Gain
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5240)
@@ -118,5 +118,5 @@
 //        fHiGainFirst =  2 
 //        fHiGainLast  =  14
-//        fLoGainFirst =  3 
+//        fLoGainFirst =  2 
 //        fLoGainLast  =  14
 //
@@ -157,5 +157,5 @@
 const Byte_t  MExtractTimeAndChargeSpline::fgHiGainFirst  = 2;
 const Byte_t  MExtractTimeAndChargeSpline::fgHiGainLast   = 14;
-const Byte_t  MExtractTimeAndChargeSpline::fgLoGainFirst  = 3;
+const Byte_t  MExtractTimeAndChargeSpline::fgLoGainFirst  = 2;
 const Byte_t  MExtractTimeAndChargeSpline::fgLoGainLast   = 14;
 const Float_t MExtractTimeAndChargeSpline::fgResolution   = 0.01;
@@ -762,5 +762,5 @@
   // Don't start if the maxpos is too close to the left limit.
   //
-  if (sat || maxpos < 2)
+  if (sat || maxpos < 1)
     {
       time =  IsExtractionType(kMaximum) 
@@ -770,4 +770,10 @@
     }
       
+  if (maxpos < 2 && IsExtractionType(kHalfMaximum))
+    {
+      time = (Float_t)(fLoGainFirst + maxpos - 1);
+      return;
+    }
+
   Float_t pp;
 
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 5239)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 5240)
@@ -14,5 +14,5 @@
   static const Byte_t  fgHiGainFirst;    //! Default for fHiGainFirst  (now set to: 2)
   static const Byte_t  fgHiGainLast;     //! Default for fHiGainLast   (now set to: 14)
-  static const Byte_t  fgLoGainFirst;    //! Default for fLOGainFirst  (now set to: 3)
+  static const Byte_t  fgLoGainFirst;    //! Default for fLoGainFirst  (now set to: 2)
   static const Byte_t  fgLoGainLast;     //! Default for fLoGainLast   (now set to: 14)
   static const Float_t fgResolution;     //! Default for fResolution   (now set to: 0.003)
