Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 3879)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 3880)
@@ -22,4 +22,5 @@
    * msignal/MExtractor.h
      - make SetRange virtual
+     - check for range w.r.t. ranges given in the run header in ReInit
 
    * msignal/MExtractFixedWindow.[h,cc]
Index: /trunk/MagicSoft/Mars/msignal/MExtractor.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractor.cc	(revision 3879)
+++ /trunk/MagicSoft/Mars/msignal/MExtractor.cc	(revision 3880)
@@ -57,4 +57,5 @@
 #include "MRawEvtData.h"
 #include "MRawEvtPixelIter.h"
+#include "MRawRunHeader.h"
 
 #include "MPedestalCam.h"
@@ -110,11 +111,19 @@
 Int_t MExtractor::PreProcess(MParList *pList)
 {
+
     fRawEvt = (MRawEvtData*)pList->FindObject(AddSerialNumber("MRawEvtData"));
     if (!fRawEvt)
-    {
+      {
         *fLog << err << AddSerialNumber("MRawEvtData") << " not found... aborting." << endl;
         return kFALSE;
-    }
-
+      }
+    
+    fRunHeader = (MRawRunHeader*)pList->FindObject(AddSerialNumber("MRawRunHeader"));
+    if (!fRunHeader)
+      {
+        *fLog << err << AddSerialNumber("MRawRunHeader") << " not found... aborting." << endl;
+        return kFALSE;
+      }
+    
 
     fSignals = (MExtractedSignalCam*)pList->FindCreateObj(AddSerialNumber("MExtractedSignalCam"));
@@ -135,4 +144,42 @@
     return kTRUE;
 }
+
+Bool_t MExtractor::ReInit(MParList *pList)
+{
+  
+  Int_t lastdesired   = (Int_t)fHiGainLast;
+  Int_t lastavailable = (Int_t)fRunHeader->GetNumSamplesHiGain()-1;
+  
+  if (lastdesired > lastavailable)
+    {
+      const Int_t diff = lastdesired - lastavailable;
+      *fLog << endl;
+      *fLog << warn << GetDescriptor()
+            << Form("%s%2i%s%2i%s%2i%s",": Selected Hi Gain FADC Window [",
+                    (int)fHiGainFirst,",",lastdesired,
+                    "] ranges out of the available limits: [0,",lastavailable,"].") << endl;
+      *fLog << GetDescriptor() << ": Will reduce the upper edge to " << (int)(fHiGainLast - diff) << endl;
+      SetRange(fHiGainFirst, fHiGainLast-diff, fLoGainFirst, fLoGainLast);
+    }
+
+  lastdesired   = (Int_t)(fLoGainLast);
+  lastavailable = (Int_t)fRunHeader->GetNumSamplesLoGain()-1;
+  
+  if (lastdesired > lastavailable)
+    {
+      const Int_t diff = lastdesired - lastavailable;
+      *fLog << endl; 
+      *fLog << warn << GetDescriptor()
+            << Form("%s%2i%s%2i%s%2i%s",": Selected Lo Gain FADC Window [",
+                    (int)fLoGainFirst,",",lastdesired,
+                    "] ranges out of the available limits: [0,",lastavailable,"].") << endl;
+      *fLog << GetDescriptor() << ": Will reduce the upper edge to " << (int)(fLoGainLast - diff) << endl;
+      SetRange(fHiGainFirst, fHiGainLast, fLoGainFirst, fLoGainLast-diff);
+    }
+
+  return kTRUE;
+}
+
+
 
 void MExtractor::FindSignalHiGain(Byte_t *firstused, Int_t &sum, Byte_t &sat) const
Index: /trunk/MagicSoft/Mars/msignal/MExtractor.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractor.h	(revision 3879)
+++ /trunk/MagicSoft/Mars/msignal/MExtractor.h	(revision 3880)
@@ -49,4 +49,5 @@
 
     virtual Int_t  PreProcess(MParList *pList);
+    virtual Bool_t ReInit(MParList *pList);
     virtual Int_t  Process();
     virtual void   StreamPrimitive(ofstream &out) const;
