Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 3445)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 3446)
@@ -47,4 +47,12 @@
      - displaying saturation also for not-valid pixels in GetPixelContent
 
+   * msignal/MExtractedSignalCam.[h,cc]
+   * msignal/MExtractSignal.[h,cc]
+   * msignal/MExtractSignal2.[h,cc]
+   * mananlysis/MHPedestalCam.cc
+   * mcalib/MCalibrationChargeCam.cc
+     - in SetUsedFADCSlices, also the window (hi-and logain) is set. 
+       This because MExtractSignal2 set the whole window which was much 
+       bigger than the actually used one. This bug is now removed.
 
 
Index: /trunk/MagicSoft/Mars/manalysis/MHPedestalCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MHPedestalCam.cc	(revision 3445)
+++ /trunk/MagicSoft/Mars/manalysis/MHPedestalCam.cc	(revision 3446)
@@ -160,5 +160,5 @@
   
 
-  Float_t slices = (Float_t)signal->GetNumUsedFADCSlices();
+  Float_t slices = signal->GetNumUsedHiGainFADCSlices();
 
   if (slices == 0.)
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 3445)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 3446)
@@ -235,6 +235,6 @@
     SETBIT(fFlags, kHiLoGainCalibration);
 
-    fNumHiGainSamples  = 0;
-    fNumLoGainSamples  = 0;
+    fNumHiGainSamples  = 0.;
+    fNumLoGainSamples  = 0.;
     fConversionHiLo    = 0;
 
@@ -336,5 +336,6 @@
   fNumHiGainSamples  =  fSignals->GetNumUsedHiGainFADCSlices();
   fNumLoGainSamples  =  fSignals->GetNumUsedLoGainFADCSlices();
-  fSqrtHiGainSamples =  TMath::Sqrt((Float_t)fNumHiGainSamples);
+  fSqrtHiGainSamples =  TMath::Sqrt(fNumHiGainSamples);
+  fSqrtLoGainSamples =  TMath::Sqrt(fNumLoGainSamples);
   
   UInt_t npixels     = fGeom->GetNumPixels();
@@ -424,7 +425,7 @@
       {
 	  pix.SetPedestal(ped  * fNumLoGainSamples,
-			  prms * TMath::Sqrt((Float_t)fNumLoGainSamples),
+			  prms * fSqrtLoGainSamples,
 			  prms * fNumLoGainSamples / num);
-	  pix.SetNumLoGainSamples((Float_t)fNumLoGainSamples);
+	  pix.SetNumLoGainSamples(fNumLoGainSamples);
           pix.ApplyLoGainConversion();
       }
@@ -432,5 +433,5 @@
       {
 	  pix.SetPedestal(ped  * fNumHiGainSamples,
-			  prms * TMath::Sqrt((Float_t)fNumHiGainSamples),
+			  prms * fSqrtHiGainSamples,
 			  prms * fNumHiGainSamples / num);
       }
@@ -471,7 +472,7 @@
   {
       avinnerpix->SetPedestal(avinnerped/avinnernum  * fNumLoGainSamples,
-			 avinnerprms/avinnernum * TMath::Sqrt((Float_t)fNumLoGainSamples),
-			 avinnerprms/avinnernum * TMath::Sqrt((Float_t)fNumLoGainSamples/avinnernum));
-      avinnerpix->SetNumLoGainSamples((Float_t)fNumLoGainSamples);
+			      avinnerprms/avinnernum * fSqrtLoGainSamples,
+			      avinnerprms/avinnernum * fSqrtLoGainSamples/avinnernum);
+      avinnerpix->SetNumLoGainSamples(fNumLoGainSamples);
       avinnerpix->ApplyLoGainConversion();
   }
@@ -479,6 +480,6 @@
   {
       avinnerpix->SetPedestal(avinnerped/avinnernum  * fNumHiGainSamples,
-			 avinnerprms/avinnernum * TMath::Sqrt((Float_t)fNumHiGainSamples),
-			 avinnerprms/avinnernum * TMath::Sqrt((Float_t)fNumHiGainSamples/avinnernum));
+                              avinnerprms/avinnernum * fSqrtHiGainSamples,
+         	              avinnerprms/avinnernum * fSqrtHiGainSamples/avinnernum);
   }
 
@@ -486,7 +487,7 @@
   {
       avouterpix->SetPedestal(avouterped/avouternum  * fNumLoGainSamples,
-			      avouterprms/avouternum * TMath::Sqrt((Float_t)fNumLoGainSamples),
-			      avouterprms/avouternum * TMath::Sqrt((Float_t)fNumLoGainSamples/avouternum));
-      avouterpix->SetNumLoGainSamples((Float_t)fNumLoGainSamples);
+			      avouterprms/avouternum * fSqrtLoGainSamples,
+			      avouterprms/avouternum * fSqrtLoGainSamples/avouternum);
+      avouterpix->SetNumLoGainSamples(fNumLoGainSamples);
       avouterpix->ApplyLoGainConversion();
   }
@@ -494,6 +495,6 @@
   {
       avouterpix->SetPedestal(avouterped/avouternum  * fNumHiGainSamples,
-			      avouterprms/avouternum * TMath::Sqrt((Float_t)fNumHiGainSamples),
-			      avouterprms/avouternum * TMath::Sqrt((Float_t)fNumHiGainSamples/avouternum));
+			      avouterprms/avouternum * fSqrtHiGainSamples,
+			      avouterprms/avouternum * fSqrtHiGainSamples/avouternum);
   }
 
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCam.cc	(revision 3445)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCam.cc	(revision 3446)
@@ -317,4 +317,5 @@
 		<< "   Reduced Sigma: "        << pix->GetRSigmaCharge() 
 		<< "   Nr Phe's: "             << pix->GetPheFFactorMethod() 
+                << " Saturated? :" << pix->IsHiGainSaturation() 
 		<< endl;
           id++;
@@ -342,4 +343,5 @@
 		<< "   Reduced Sigma: "        << pix->GetRSigmaCharge() 
 		<< "   Nr Phe's: "             << pix->GetPheFFactorMethod() 
+                << " Saturated? :" << pix->IsHiGainSaturation() 
 		<< endl;
             id++;
@@ -366,4 +368,5 @@
 		<< "   Reduced Sigma: "        << pix->GetRSigmaCharge() 
 		<< "   Nr Phe's: "             << pix->GetPheFFactorMethod() 
+                << " Saturated? :" << pix->IsHiGainSaturation() 
 		<< endl;
 	    id++;
@@ -702,10 +705,7 @@
       break;
     case 34:
-      if ((*this)[idx].IsExcluded() || !(*fBadPixels)[idx].IsCalibrationSignalOK())
-        return kFALSE;
-      if ((*this)[idx].IsHiGainSaturation())
-        val = 1;
-      else
-        return kFALSE;
+      if ((*this)[idx].IsExcluded())
+        return kFALSE;
+      val = (*this)[idx].IsHiGainSaturation();
       break;
     case 35:
Index: /trunk/MagicSoft/Mars/msignal/MExtractSignal.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractSignal.cc	(revision 3445)
+++ /trunk/MagicSoft/Mars/msignal/MExtractSignal.cc	(revision 3446)
@@ -109,6 +109,6 @@
         return kFALSE;
 
-    fSignals->SetUsedFADCSlices(fHiGainFirst, fHiGainFirst+fNumHiGainSamples-1,
-                                fLoGainFirst, fLoGainFirst+fNumLoGainSamples-1);
+    fSignals->SetUsedFADCSlices(fHiGainFirst, fHiGainFirst+fNumHiGainSamples-1, (Float_t)fNumHiGainSamples,
+                                fLoGainFirst, fLoGainFirst+fNumLoGainSamples-1, (Float_t)fNumLoGainSamples);
 
     fPedestals = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
Index: /trunk/MagicSoft/Mars/msignal/MExtractSignal2.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractSignal2.cc	(revision 3445)
+++ /trunk/MagicSoft/Mars/msignal/MExtractSignal2.cc	(revision 3446)
@@ -77,5 +77,5 @@
 }
 
-void MExtractSignal2::SetRange(Byte_t hifirst, Byte_t hilast, Byte_t lofirst, Byte_t lolast, Byte_t windowsize)
+void MExtractSignal2::SetRange(Byte_t hifirst, Byte_t hilast, Byte_t windowh, Byte_t lofirst, Byte_t lolast, Byte_t windowl)
 {
 
@@ -86,29 +86,43 @@
     fLoGainFirst = lofirst;
 
-   
-    fWindowSize = windowsize & ~1;
-
-    if (fWindowSize != windowsize)
-      *fLog << warn << "MExtractSignal2::SetRange - window size has to be even, set to: " << int(fWindowSize) << " samples " << endl;
+    fWindowSizeHiGain = windowh & ~1;
+    fWindowSizeLoGain = windowl & ~1;
+
+    if (fWindowSizeHiGain != windowh)
+      *fLog << warn << "MExtractSignal2::SetRange - Hi Gain window size has to be even, set to: " 
+            << int(fWindowSizeHiGain) << " samples " << endl;
     
-    if (fWindowSize<2) 
-    {
-      fWindowSize = 2;
-      *fLog << warn << "MExtractSignal2::SetRange - window size set to two samples" << endl;
-    }
-
-    if (fWindowSize > fNumHiGainSamples)
-    {
-      fWindowSize = fNumLoGainSamples & ~1;
-      *fLog << warn << "MExtractSignal2::SetRange - window size set to " << int(fWindowSize) << " samples " << endl;
-    }
+    if (fWindowSizeLoGain != windowl)
+      *fLog << warn << "MExtractSignal2::SetRange - Lo Gain window size has to be even, set to: " 
+            << int(fWindowSizeLoGain) << " samples " << endl;
     
-    if (fWindowSize > fNumLoGainSamples)
-    {
-      fWindowSize = fNumLoGainSamples & ~1;
-      *fLog << warn << "MExtractSignal2::SetRange - window size set to " << int(fWindowSize) << " samples " << endl;
-    }
-
-    fWindowSizeSqrt = TMath::Sqrt((Float_t)fWindowSize);
+    if (fWindowSizeHiGain<2) 
+    {
+      fWindowSizeHiGain = 2;
+      *fLog << warn << "MExtractSignal2::SetRange - Hi Gain window size set to two samples" << endl;
+    }
+
+    if (fWindowSizeLoGain<2) 
+    {
+      fWindowSizeLoGain = 2;
+      *fLog << warn << "MExtractSignal2::SetRange - Lo Gain window size set to two samples" << endl;
+    }
+
+    if (fWindowSizeHiGain > fNumHiGainSamples)
+    {
+      fWindowSizeHiGain = fNumHiGainSamples & ~1;
+      *fLog << warn << "MExtractSignal2::SetRange - Hi Gain window size set to " 
+            << int(fWindowSizeHiGain) << " samples " << endl;
+    }
+    
+    if (fWindowSizeLoGain > fNumLoGainSamples)
+    {
+      fWindowSizeLoGain = fNumLoGainSamples & ~1;
+      *fLog << warn << "MExtractSignal2::SetRange - Lo Gain window size set to " 
+            << int(fWindowSizeLoGain) << " samples " << endl;
+    }
+
+    fWindowSqrtHiGain = TMath::Sqrt((Float_t)fWindowSizeHiGain);
+    fWindowSqrtLoGain = TMath::Sqrt((Float_t)fWindowSizeLoGain);
 
 }
@@ -141,6 +155,6 @@
         return kFALSE;
 
-    fSignals->SetUsedFADCSlices(fHiGainFirst, fHiGainFirst+fNumHiGainSamples-1,
-                                fLoGainFirst, fLoGainFirst+fNumLoGainSamples-1);
+    fSignals->SetUsedFADCSlices(fHiGainFirst, fHiGainFirst+fNumHiGainSamples-1, (Float_t)fWindowSizeHiGain,
+                                fLoGainFirst, fLoGainFirst+fNumLoGainSamples-1, (Float_t)fWindowSizeLoGain);
 
     fPedestals = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
@@ -158,5 +172,5 @@
 }
 
-void MExtractSignal2::FindSignal(Byte_t *ptr, Byte_t size, Int_t &max, Int_t &sat) const
+void MExtractSignal2::FindSignal(Byte_t *ptr, Byte_t size, Byte_t window, Int_t &max, Int_t &sat) const
 {
     const Byte_t *end = ptr + size;
@@ -169,5 +183,5 @@
     sat = 0;
     Byte_t *p = ptr;
-    while (p<ptr+fWindowSize)
+    while (p<ptr+window)
     {
         sum += *p;
@@ -189,7 +203,7 @@
     //
     max=sum;
-    for (p=ptr; p+fWindowSize<end; p++)
-    {
-        sum += *(p+fWindowSize) - *p;
+    for (p=ptr; p+window<end; p++)
+    {
+        sum += *(p+window) - *p;
         if (sum>max)
             max = sum;
@@ -214,5 +228,5 @@
         //
         Int_t sumhi, sathi;
-        FindSignal(pixel.GetHiGainSamples()+fHiGainFirst, fNumHiGainSamples, sumhi, sathi);
+        FindSignal(pixel.GetHiGainSamples()+fHiGainFirst, fNumHiGainSamples, fWindowSizeHiGain, sumhi, sathi);
 
         Int_t sumlo=0;
@@ -220,5 +234,5 @@
         if (pixel.HasLoGain())
         {
-            FindSignal(pixel.GetLoGainSamples()+fLoGainFirst, fNumLoGainSamples, sumlo, satlo);
+            FindSignal(pixel.GetLoGainSamples()+fLoGainFirst, fNumLoGainSamples, fWindowSizeLoGain, sumlo, satlo);
             if (satlo)
                 sat++;
@@ -239,6 +253,6 @@
         // Set extracted signal with pedestal substracted
         //
-        pix.SetExtractedSignal(sumhi - pedes*fWindowSize, pedrms*fWindowSizeSqrt,
-                               sumlo - pedes*fWindowSize, pedrms*fWindowSizeSqrt);
+        pix.SetExtractedSignal(sumhi - pedes*fWindowSizeHiGain, pedrms*fWindowSqrtHiGain,
+                               sumlo - pedes*fWindowSizeLoGain, pedrms*fWindowSqrtLoGain);
 
         pix.SetGainSaturation(sathi, sathi, satlo);
Index: /trunk/MagicSoft/Mars/msignal/MExtractSignal2.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractSignal2.h	(revision 3445)
+++ /trunk/MagicSoft/Mars/msignal/MExtractSignal2.h	(revision 3446)
@@ -37,10 +37,13 @@
     Byte_t  fNumLoGainSamples;  // Number of lo gain to be used
 
-    Byte_t  fWindowSize;            // Number of gains in window
-    Float_t fWindowSizeSqrt;        // Sqaure root of number of gains in window
+    Byte_t  fWindowSizeHiGain;  // Number of Hi Gain slices in window
+    Float_t fWindowSqrtHiGain;  // Sqaure root of number of Hi Gain slices in window
+
+    Byte_t  fWindowSizeLoGain;  // Number of Lo Gain slices in window
+    Float_t fWindowSqrtLoGain;  // Sqaure root of number of Lo Gain slices in window
 
     Byte_t  fSaturationLimit;
 
-    void   FindSignal(Byte_t *ptr, Byte_t size, Int_t &max, Int_t &sat) const;
+    void   FindSignal(Byte_t *ptr, Byte_t size, Byte_t window, Int_t &max, Int_t &sat) const;
 
     Int_t  PreProcess(MParList *pList);
@@ -50,5 +53,6 @@
     MExtractSignal2(const char *name=NULL, const char *title=NULL);
 
-    void SetRange(Byte_t hifirst=fgFirst, Byte_t hilast=fgLast, Byte_t lofirst=fgFirst, Byte_t lolast=fgLast, Byte_t window_size=fgWindowSize);
+    void SetRange(Byte_t hifirst=fgFirst, Byte_t hilast=fgLast, Byte_t windowh=fgWindowSize,
+                  Byte_t lofirst=fgFirst, Byte_t lolast=fgLast, Byte_t windowl=fgWindowSize);
     void SetSaturationLimit(Byte_t lim) { fSaturationLimit = lim; }
 
Index: /trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.h	(revision 3445)
+++ /trunk/MagicSoft/Mars/msignal/MExtractedSignalCam.h	(revision 3446)
@@ -24,4 +24,7 @@
     Byte_t fLastUsedSliceLoGain;
 
+    Float_t fUsedWindowHiGain;
+    Float_t fUsedWindowLoGain;
+    
 public:
 
@@ -36,21 +39,22 @@
     Int_t GetSize() const;
 
-    Byte_t GetNumUsedFADCSlices() const       { return fLastUsedSliceHiGain-fFirstUsedSliceHiGain+1; }
-    Byte_t GetNumUsedHiGainFADCSlices() const { return fLastUsedSliceHiGain-fFirstUsedSliceHiGain+1; }
-    Byte_t GetNumUsedLoGainFADCSlices() const { return fLastUsedSliceLoGain-fFirstUsedSliceLoGain+1; }
+    Float_t GetNumUsedHiGainFADCSlices() const { return fUsedWindowHiGain; }
+    Float_t GetNumUsedLoGainFADCSlices() const { return fUsedWindowLoGain; }
 
     Byte_t GetFirstUsedSliceHiGain() const    { return fFirstUsedSliceHiGain; }
-    Byte_t GetLastUsedSliceHiGain() const     { return fLastUsedSliceHiGain; }
+    Byte_t GetFirstUsedSliceLoGain() const    { return fFirstUsedSliceLoGain; }
 
-    Byte_t GetFirstUsedSliceLoGain() const    { return fFirstUsedSliceLoGain; }
-    Byte_t GetLastUsedSliceLoGain() const     { return fLastUsedSliceLoGain; }
+    Byte_t GetLastUsedSliceHiGain()  const    { return fLastUsedSliceHiGain; }
+    Byte_t GetLastUsedSliceLoGain()  const    { return fLastUsedSliceLoGain; }
 
-    void   SetUsedFADCSlices(Byte_t firsth, Byte_t lasth, 
-                             Byte_t firstl, Byte_t lastl)
+    void   SetUsedFADCSlices(Byte_t firsth, Byte_t lasth, Float_t winh,
+                             Byte_t firstl, Byte_t lastl, Float_t winl)
     {
       fFirstUsedSliceHiGain    = firsth;
       fLastUsedSliceHiGain     = lasth;
+      fUsedWindowHiGain        = winh;
       fFirstUsedSliceLoGain    = firstl;
       fLastUsedSliceLoGain     = lastl;
+      fUsedWindowLoGain        = winl;
     }
 
