Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc	(revision 5742)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc	(revision 5743)
@@ -260,5 +260,5 @@
       end = logain + fHiLoLast;
 
-      ids = fHiGainFirst;
+      ids = fHiGainFirst + range;
       sample = fHiGainSignal.GetArray();
       while (logain<end)
@@ -266,5 +266,4 @@
 
           *sample++ = (Float_t)*logain - pedmean[(ids++ + abflag) & 0x1];
-          range++;
 
           if (*logain > max)
@@ -276,9 +275,11 @@
           if (*logain++ >= fSaturationLimit)
             sat++;
-        }
-    }
-
-  //
-  // allow one saturated slice 
+
+          range++;
+        }
+    }
+
+  //
+  // allow no saturated slice 
   //
   if (sat > 0)
@@ -291,8 +292,8 @@
   if (IsNoiseCalculation())
     {
-      if (fRandomIter == 10)
+      if (fRandomIter == fBinningResolution)
         fRandomIter = 0;
       for (Int_t ids=0; ids < fWindowSizeHiGain; ids++)
-      {
+        {
           const Int_t   idx = fBinningResolutionHiGain*ids + fRandomIter;
           sum              += fAmpWeightsHiGain [idx]*fHiGainSignal[ids]; 
@@ -425,12 +426,14 @@
 
   //
-  // Slide with a window of size fWindowSizeHiGain over the sample 
+  // Slide with a window of size fWindowSizeLoGain over the sample 
   // and multiply the entries with the corresponding weights
   //
   if (IsNoiseCalculation())
     {
+      if (fRandomIter == fBinningResolutionLoGain)
+        fRandomIter = 0;
       for (Int_t ids=0; ids < fWindowSizeLoGain; ids++)
         {
-          const Int_t   idx = fBinningResolutionHiGain*ids + fRandomIter;
+          const Int_t   idx = fBinningResolutionLoGain*ids + fRandomIter;
           sum              += fAmpWeightsLoGain [idx]*fLoGainSignal[ids]; 
         }
