Index: trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 8356)
+++ trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 8357)
@@ -1,4 +1,4 @@
 /* ======================================================================== *\
-! $Name: not supported by cvs2svn $:$Id: MExtractPedestal.cc,v 1.26 2007-02-04 15:49:08 tbretz Exp $
+! $Name: not supported by cvs2svn $:$Id: MExtractPedestal.cc,v 1.27 2007-03-03 22:27:50 tbretz Exp $
 ! --------------------------------------------------------------------------
 !
@@ -311,4 +311,28 @@
 }
 
+Bool_t MExtractPedestal::SetRangeFromExtractor(const MExtractor &ext, Bool_t logain)
+{
+    const Bool_t haslogains = ext.GetLoGainFirst()!=0 && ext.GetLoGainLast()!=0;
+
+    Bool_t rc1 = kTRUE;
+    if (!haslogains)
+    {
+        // We assume that in case without lo-gains we
+        // deal with pedestal events only
+        rc1 = SetCheckRange(ext.GetHiGainFirst(), ext.GetHiGainLast());
+    }
+
+    const Int_t f = logain && haslogains ? ext.GetLoGainFirst() : ext.GetHiGainFirst();
+    const Int_t l = logain && haslogains ? ext.GetLoGainLast()  : ext.GetHiGainLast();
+
+    const Int_t w = (l-f+1);
+
+    // Setup to use the hi-gain extraction window in the lo-gain
+    // range (the start of the lo-gain range is added automatically
+    // by MPedCalcFromLoGain)
+    const Bool_t rc2 = SetExtractWindow(f, w);
+
+    return rc1 && rc2;
+}
 
 // --------------------------------------------------------------------------
@@ -556,8 +580,15 @@
             return kFALSE;
 
+        SetRangeFromExtractor(*fExtractor);
+        /*
         // If an extractor is set determin the window size automatically!
         fExtractWinFirst = fExtractor->GetHiGainFirst();
         fExtractWinLast  = fExtractor->GetHiGainLast();
 
+        if (!fExtractor->HasLoGain())
+        {
+            fCheckWinFirst=fExtractWinFirst;
+            fCheckWinLast =fExtractWinLast;
+        }*/
         // fSignal->GetNumSamples() not yet initialized!!!
         const UInt_t num = fRunHeader->GetNumSamplesHiGain()+fRunHeader->GetNumSamplesLoGain();
Index: trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.h
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.h	(revision 8356)
+++ trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.h	(revision 8357)
@@ -15,4 +15,5 @@
 
 class MGeomCam;
+class MExtractor;
 class MPedestalCam;
 class MRawEvtData;
@@ -103,4 +104,6 @@
   void CheckExtractionWindow(UInt_t offset=0);
 
+  Bool_t SetRangeFromExtractor(const MExtractor &ext, Bool_t logain);
+
 public:
   MExtractPedestal(const char *name=NULL, const char *title=NULL);
@@ -112,4 +115,6 @@
   Bool_t SetExtractWindow(UShort_t first, UShort_t size);
   Bool_t SetCheckRange(UShort_t checkfirst=fgCheckWinFirst, UShort_t checklast=fgCheckWinLast);
+
+  virtual Bool_t SetRangeFromExtractor(const MExtractor &ext) = 0;
 
   void SetMaxSignalVar(UShort_t maxvar=40)  { fMaxSignalVar = maxvar;    }
Index: trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h	(revision 8356)
+++ trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h	(revision 8357)
@@ -63,4 +63,9 @@
     void SetPedestalUpdate(Bool_t b=kTRUE) { fPedestalUpdate      = b; }
 
+    Bool_t SetRangeFromExtractor(const MExtractor &ext)
+    {
+        return MExtractPedestal::SetRangeFromExtractor(ext, kTRUE);
+    }
+
     void Print(Option_t *o="") const;
 
Index: trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.h
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.h	(revision 8356)
+++ trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.h	(revision 8357)
@@ -38,4 +38,9 @@
     void Print(Option_t *o="") const;
     void Reset();
+
+    Bool_t SetRangeFromExtractor(const MExtractor &ext)
+    {
+        return MExtractPedestal::SetRangeFromExtractor(ext, kFALSE);
+    }
     
     Int_t Finalize();
Index: trunk/MagicSoft/Mars/msignal/MExtractBlindPixel.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractBlindPixel.cc	(revision 8356)
+++ trunk/MagicSoft/Mars/msignal/MExtractBlindPixel.cc	(revision 8357)
@@ -658,5 +658,5 @@
       {
           // FIXME: fLoGain* is used to determine the FILTER/CHECK range
-          const Int_t numh = pixel.GetNumHiGainSamples();
+          const Int_t numh = fRunHeader->GetNumSamplesHiGain();
 
           const Int_t sum = fSignal->GetIntegralRaw(fBlindPixelIdx[id], fLoGainFirst+numh, fLoGainLast+numh);
Index: trunk/MagicSoft/Mars/msignal/MSignalCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalCalc.cc	(revision 8356)
+++ trunk/MagicSoft/Mars/msignal/MSignalCalc.cc	(revision 8357)
@@ -16,7 +16,7 @@
 !
 !
-!   Author(s): Thomas Bretz  12/2000 <mailto:tbretz@uni-sw.gwdg.de>
-!
-!   Copyright: MAGIC Software Development, 2000-2001
+!   Author(s): Thomas Bretz  12/2000 <mailto:tbretz@astro.uni-wuerzburg.de>
+!
+!   Copyright: MAGIC Software Development, 2000-2007
 !
 !
@@ -115,15 +115,9 @@
     // This must be done in ReInit because in PreProcess the
     // headers are not available
-    const MRawRunHeader *runheader = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
-    if (!runheader)
-        *fLog << warn << dbginf << "Warning - cannot check file type, MRawRunHeader not found." << endl;
-    else
-    {
-        if (runheader->IsMonteCarloRun())
-            return kTRUE;
-    }
+    if (fRunHeader->IsMonteCarloRun())
+        return kTRUE;
 
     fPedestals = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
-    if (runheader && !fPedestals)
+    if (!fPedestals)
         return kFALSE;
 
@@ -144,5 +138,5 @@
         Byte_t *ptr   = pixel.GetHiGainSamples();
         Byte_t *max   = ptr+pixel.GetIdxMaxHiGainSample();
-	Byte_t *end   = ptr+fRawEvt->GetNumHiGainSamples();
+	Byte_t *end   = ptr+fRunHeader->GetNumSamplesHiGain();
         Byte_t *first = max-fBefore;
         Byte_t *last  = max+fAfter;
@@ -185,5 +179,5 @@
             // Area: x9
             ptr = pixel.GetLoGainSamples();
-            end = ptr+fRawEvt->GetNumLoGainSamples();
+            end = ptr+fRunHeader->GetNumSamplesLoGain();
 
             sumb = 0;   // sum background
@@ -213,5 +207,5 @@
             }
 
-            end   = ptr+fRawEvt->GetNumLoGainSamples();
+            end   = ptr+fRunHeader->GetNumSamplesLoGain();
             first = max-fBefore;
             last  = max+fAfter;
@@ -254,5 +248,5 @@
 
         Float_t s   = sb-b;                // signal
-        //Float_t sqs = sqsb-nsb*b;          // sum sqaures signal
+        //Float_t sqs = sqsb-nsb*b;          // sum squares signal
 
         //Float_t mss  = (float)sqs/nsb;     // mean quare signal
@@ -260,5 +254,5 @@
 
         if (sat>1)
-            s*=10; // tgb has measured 9, but Florian said it's 10.
+            s *= 11.3;
 
         Int_t idx = pixel.GetPixelId();
Index: trunk/MagicSoft/Mars/msignal/MSignalCalc.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalCalc.h	(revision 8356)
+++ trunk/MagicSoft/Mars/msignal/MSignalCalc.h	(revision 8357)
@@ -16,5 +16,5 @@
     MPedestalCam  *fPedestals;  // Pedestals of all pixels in the camera
     MRawEvtData   *fRawEvt;     // raw event data (time slices)
-    MSignalCam   *fCerPhotEvt; // Cerenkov Photon Event used for calculation
+    MSignalCam    *fCerPhotEvt; // Cerenkov Photon Event used for calculation
     MRawRunHeader *fRunHeader;  // RunHeader information
 
