Index: /trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc
===================================================================
--- /trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 5495)
+++ /trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 5496)
@@ -274,5 +274,5 @@
         " raising from " << windows << " to " << flush;
       windows += 1;
-      *fLog << windows+1 << "!" << endl;
+      *fLog << windows << "!" << endl;
       rc = kFALSE;
     }
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5495)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5496)
@@ -160,6 +160,6 @@
 const Byte_t  MExtractTimeAndChargeSpline::fgLoGainLast   = 14;
 const Float_t MExtractTimeAndChargeSpline::fgResolution   = 0.01;
-const Float_t MExtractTimeAndChargeSpline::fgRiseTime     = 2.0;
-const Float_t MExtractTimeAndChargeSpline::fgFallTime     = 4.0;
+const Float_t MExtractTimeAndChargeSpline::fgRiseTime     = 1.5;
+const Float_t MExtractTimeAndChargeSpline::fgFallTime     = 4.5;
 // --------------------------------------------------------------------------
 //
@@ -412,4 +412,36 @@
     }
   
+  Float_t pp;
+
+  fHiGainSecondDeriv[0] = 0.;
+  fHiGainFirstDeriv[0]  = 0.;
+
+  for (Int_t i=1;i<range-1;i++)
+    {
+      pp = fHiGainSecondDeriv[i-1] + 4.;
+      fHiGainSecondDeriv[i] = -1.0/pp;
+      fHiGainFirstDeriv [i] = fHiGainSignal[i+1] - fHiGainSignal[i] - fHiGainSignal[i] + fHiGainSignal[i-1];
+      fHiGainFirstDeriv [i] = (6.0*fHiGainFirstDeriv[i]-fHiGainFirstDeriv[i-1])/pp;
+    }
+
+  fHiGainSecondDeriv[range-1] = 0.;
+
+  for (Int_t k=range-2;k>=0;k--)
+    fHiGainSecondDeriv[k] = fHiGainSecondDeriv[k]*fHiGainSecondDeriv[k+1] + fHiGainFirstDeriv[k];
+  for (Int_t k=range-2;k>=0;k--)
+    fHiGainSecondDeriv[k] /= 6.;
+  
+  if (IsNoiseCalculation() && IsExtractionType(kAmplitude))
+    {
+      //
+      // Take the spline value at the middle of the third slice (to avoid egde effects)
+      // 
+      sum = 0.5*fHiGainSignal[2]
+          + 0.5*fHiGainSignal[3]
+          + (-0.375)*fHiGainSecondDeriv[2] 
+          + (-0.375)*fHiGainSecondDeriv[3];
+      return;
+    }
+
   //
   // Allow no saturated slice 
@@ -417,5 +449,5 @@
   // Don't start if the maxpos is too close to the left limit.
   //
-  if (sat || maxpos < 2)
+  if ((sat || maxpos < 2))
     {
       time =  IsExtractionType(kMaximum) 
@@ -427,24 +459,4 @@
     }
       
-  Float_t pp;
-
-  fHiGainSecondDeriv[0] = 0.;
-  fHiGainFirstDeriv[0]  = 0.;
-
-  for (Int_t i=1;i<range-1;i++)
-    {
-      pp = fHiGainSecondDeriv[i-1] + 4.;
-      fHiGainSecondDeriv[i] = -1.0/pp;
-      fHiGainFirstDeriv [i] = fHiGainSignal[i+1] - fHiGainSignal[i] - fHiGainSignal[i] + fHiGainSignal[i-1];
-      fHiGainFirstDeriv [i] = (6.0*fHiGainFirstDeriv[i]-fHiGainFirstDeriv[i-1])/pp;
-    }
-
-  fHiGainSecondDeriv[range-1] = 0.;
-
-  for (Int_t k=range-2;k>=0;k--)
-    fHiGainSecondDeriv[k] = fHiGainSecondDeriv[k]*fHiGainSecondDeriv[k+1] + fHiGainFirstDeriv[k];
-  for (Int_t k=range-2;k>=0;k--)
-    fHiGainSecondDeriv[k] /= 6.;
-  
   //
   // Now find the maximum  
