Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 6167)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 6168)
@@ -70,5 +70,5 @@
 using namespace std;
 
-const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainFirst  = 2;
+const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainFirst  = 0;
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgHiGainLast   = 16;
 const Byte_t  MExtractTimeAndChargeSlidingWindow::fgLoGainFirst  = 2;
@@ -209,5 +209,4 @@
   
   Float_t max = 0;  // highest integral content of all windows
-  Int_t count = 0;
   sat         = 0;
 
@@ -222,4 +221,5 @@
   //
   Int_t ids = fHiGainFirst;
+  Float_t *sample = fHiGainSignal.GetArray();
 
   while (p<first+fWindowSizeHiGain)
@@ -228,5 +228,5 @@
       const Float_t signal = (Float_t)*p - PedMean[(ids++ + abflag) & 0x1];      
       sum                 += signal;
-      fHiGainSignal[count] = signal;
+      *sample++            = signal;
       
       if (*p > fMaxBinContent)
@@ -236,8 +236,9 @@
         if (!sat)
             sat = ids-2;
-      
-      count++;
-    }
-
+    }
+
+  if (IsNoiseCalculation())
+    return;
+   
   //
   // Check for saturation in all other slices
@@ -253,7 +254,4 @@
     }
 
-  if (IsNoiseCalculation())
-    return;
-   
   //
   // Calculate the i-th sum as
@@ -261,5 +259,5 @@
   // This is fast and accurate (because we are using int's)
   //
-  count          = 0;
+  Int_t count    = 0;
   max            = sum;
   Int_t idx      =  0;  // idx of the first slice of the maximum window
@@ -269,6 +267,6 @@
       
       const Float_t signal = (Float_t)*(p+fWindowSizeHiGain) - PedMean[(ids++ + abflag) & 0x1];      
-      sum                 += signal - fHiGainSignal[count];
-      fHiGainSignal[count + fWindowSizeHiGain] = signal;
+      sum                 += signal - *(sample-fWindowSizeHiGain);
+      *sample++            = signal;
       
       if (sum>max)
@@ -280,56 +278,29 @@
     }
   
-  if (fHiLoLast != 0)
-    {
-      
-      // 
-      // overlap bins
-      // 
-      Byte_t *l = logain;
-      
-      while (p < end && l < logain+fHiLoLast)
+  // 
+  // overlap bins
+  // 
+  Byte_t *l = logain;
+  while (l < logain+fHiLoLast)
+    {
+      
+      const Float_t signal = (Float_t)*l - PedMean[(ids++ + abflag) & 0x1];          
+      sum                 += signal - *(sample-fWindowSizeHiGain);
+      *sample++            = signal;
+
+      if (*l > fMaxBinContent)
+        fMaxBinContent = *logain;
+      
+      if (*l++ >= fSaturationLimit)
+        if (!sat)
+          sat = ids-2;
+      
+      if (sum>max)
         {
-          
-          const Float_t signal = (Float_t)*l - PedMean[(ids++ + abflag) & 0x1];          
-          sum                 += signal - fHiGainSignal[count];
-          fHiGainSignal[count + fWindowSizeHiGain] = signal;
-
-          if (*l > fMaxBinContent)
-	    fMaxBinContent = *logain;
-
-          if (*l++ >= fSaturationLimit)
-            if (!sat)
-              sat = ids-2;
-          
-          if (sum>max)
-            {
-              max   = sum;
-              idx   = count+1;
-            }
-          count++;
-          p++;
+          max   = sum;
+          idx   = count+1;
         }
-      
-      if (fHiLoLast > (Byte_t)fWindowSizeHiGain)
-        {
-          while (l < logain + fHiLoLast)
-            {
-              const Float_t signal = (Float_t)*l - PedMean[(ids++ + abflag) & 0x1];          
-              sum                 += signal - fHiGainSignal[count];
-              fHiGainSignal[count+fWindowSizeHiGain] = signal;
-
-              if (*l++ >= fSaturationLimit)
-                if (!sat)
-                  sat = ids-2;
-
-              if (sum>max)
-                {
-                  max   = sum;
-                  idx   = count+1;
-                }
-              count++;
-            } /* while (l < logain + fHiLoLast) */
-        } /* if (fHiLoLast > fWindowSizeHiGain) */
-    } /* if (fHiLoLast != 0) */
+      count++;
+    } /* while (l<logain+fHiLoLast) */
 
   //
