Index: /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.cc	(revision 3882)
+++ /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.cc	(revision 3883)
@@ -28,5 +28,14 @@
 //  MExtractFixedWindow
 //
-//  Extracts the signal from a fixed window
+//  Extracts the signal from a fixed window in a given range.
+//
+//  Call: SetRange(fHiGainFirst, fHiGainLast, fLoGainFirst, fLoGainLast) 
+//  to modify the ranges. 
+//  Defaults are: 
+// 
+//   fHiGainFirst =  fgHiGainFirst =  3 
+//   fHiGainLast  =  fgHiGainLast  =  14
+//   fLoGainFirst =  fgLoGainFirst =  3 
+//   fLoGainLast  =  fgLoGainLast  =  14
 //
 //////////////////////////////////////////////////////////////////////////////
Index: /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.h	(revision 3882)
+++ /trunk/MagicSoft/Mars/msignal/MExtractFixedWindow.h	(revision 3883)
@@ -31,4 +31,6 @@
   MExtractFixedWindow(const char *name=NULL, const char *title=NULL);
 
+  void SetRange(Byte_t hifirst=0, Byte_t hilast=0, Byte_t lofirst=0, Byte_t lolast=0);
+  
   ClassDef(MExtractFixedWindow, 0) // Signal Extractor for a fixed extraction window
 };
Index: /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.cc	(revision 3882)
+++ /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.cc	(revision 3883)
@@ -40,4 +40,5 @@
 #include "MLogManip.h"
 
+
 ClassImp(MExtractSlidingWindow);
 
@@ -55,4 +56,6 @@
 //
 MExtractSlidingWindow::MExtractSlidingWindow(const char *name, const char *title)
+    : fWindowSizeHiGain(fgHiGainWindowSize), 
+      fWindowSizeLoGain(fgLoGainWindowSize)
 {
 
@@ -61,6 +64,17 @@
 
   SetRange(fgHiGainFirst, fgHiGainLast, fgLoGainFirst, fgLoGainLast);
-  SetWindowSize();
-
+}
+
+void MExtractSlidingWindow::SetRange(Byte_t hifirst, Byte_t hilast, Byte_t lofirst, Byte_t lolast)
+{
+
+  MExtractor::SetRange(hifirst,hilast,lofirst,lolast);
+
+  //
+  // Redo the checks if the window is still inside the ranges
+  //
+
+  SetWindowSize(fWindowSizeHiGain,fWindowSizeLoGain);
+  
 }
 
@@ -72,30 +86,53 @@
 
   if (fWindowSizeHiGain != windowh)
-    *fLog << warn << "MExtractSignal2::SetRange - Hi Gain window size has to be even, set to: " 
+    *fLog << warn << GetDescriptor() << ": Hi Gain window size has to be even, set to: " 
           << int(fWindowSizeHiGain) << " samples " << endl;
   
-    if (fWindowSizeLoGain != windowl)
-      *fLog << warn << "MExtractSignal2::SetRange - Lo Gain window size has to be even, set to: " 
-            << int(fWindowSizeLoGain) << " samples " << endl;
+  if (fWindowSizeLoGain != windowl)
+    *fLog << warn << GetDescriptor() << ": Lo Gain window size has to be even, set to: " 
+          << int(fWindowSizeLoGain) << " samples " << endl;
     
-    if (fWindowSizeHiGain<2) 
-      {
-        fWindowSizeHiGain = 2;
-      *fLog << warn << "MExtractSignal2::SetRange - Hi Gain window size set to two samples" << endl;
-      }
+  const Byte_t availhirange = (fHiGainLast-fHiGainFirst+1) & ~1;
+  const Byte_t availlorange = (fLoGainLast-fLoGainFirst+1) & ~1;
+
+  if (fWindowSizeHiGain > availhirange)
+    {
+      *fLog << warn << GetDescriptor() 
+            << Form("%s%2i%s%2i%s%2i%s",": Hi Gain window size: ",(int)fWindowSizeHiGain,
+                    " is bigger than available range: [",(int)fHiGainFirst,",",(int)fHiGainLast,"]") << endl;
+      *fLog << warn << GetDescriptor() 
+            << ": Will set window size to: " << (int)availhirange << endl;
+      fWindowSizeHiGain = availhirange;
+    }
+  
+  if (fWindowSizeLoGain > availlorange)
+    {
+      *fLog << warn << GetDescriptor() 
+            << Form("%s%2i%s%2i%s%2i%s",": Lo Gain window size: ",(int)fWindowSizeLoGain,
+                    " is bigger than available range: [",(int)fLoGainFirst,",",(int)fLoGainLast,"]") << endl;
+      *fLog << warn << GetDescriptor() 
+            << ": Will set window size to: " << (int)availlorange << endl;
+      fWindowSizeLoGain = availlorange;
+    }
+  
+  if (fWindowSizeHiGain<2) 
+    {
+      fWindowSizeHiGain = 2;
+      *fLog << warn << GetDescriptor() << ": Hi Gain window size set to two samples" << endl;
+    }
+  
+  if (fWindowSizeLoGain<2) 
+    {
+      fWindowSizeLoGain = 2;
+      *fLog << warn << GetDescriptor() << ": Lo 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;
-    }
-    
-    fNumHiGainSamples = (Float_t)fWindowSizeHiGain;
-    fNumLoGainSamples = (Float_t)fWindowSizeLoGain;
-    
-    fSqrtHiGainSamples = TMath::Sqrt(fNumHiGainSamples);
-    fSqrtLoGainSamples = TMath::Sqrt(fNumLoGainSamples);
-}
-
+  fNumHiGainSamples = (Float_t)fWindowSizeHiGain;
+  fNumLoGainSamples = (Float_t)fWindowSizeLoGain;
+  
+  fSqrtHiGainSamples = TMath::Sqrt(fNumHiGainSamples);
+  fSqrtLoGainSamples = TMath::Sqrt(fNumLoGainSamples);
+
+}
 
 
Index: /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.h	(revision 3882)
+++ /trunk/MagicSoft/Mars/msignal/MExtractSlidingWindow.h	(revision 3883)
@@ -23,7 +23,9 @@
   void   FindSignalLoGain(Byte_t *ptr, Int_t &max, Byte_t &sat) const;  
 
+  
 public:
   MExtractSlidingWindow(const char *name=NULL, const char *title=NULL);
 
+  void SetRange(Byte_t hifirst=0, Byte_t hilast=0, Byte_t lofirst=0, Byte_t lolast=0);
   void SetWindowSize(Byte_t windowh=fgHiGainWindowSize,
                      Byte_t windowl=fgLoGainWindowSize);
