Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 5380)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 5381)
@@ -59,4 +59,8 @@
      - automatically get correct range for pedestal extraction 
        (MPedCalcFromLoGain) from Signal Extractor
+
+   * mjobs/MJPedestal.cc:
+     - simplified a complicated if-else-construction towards a
+       correct setting of ranges also for the calibration of the signal.
 
 
Index: /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5380)
+++ /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5381)
@@ -332,5 +332,10 @@
         apply.SetGeometry(geom);
     MBadPixelsMerge        merge(&badpix);
+
     MPedCalcFromLoGain     pedlo;
+    pedlo.SetPedestalUpdate(kTRUE);
+    // FIXME: How to get the fixed value 15 automatically?
+    pedlo.SetExtractWindow(15, (Int_t)static_cast<MExtractor*>(extractor1)->GetNumHiGainSamples());
+
     MMcPedestalCopy        pcopy;
     MTaskEnv taskenv1("ExtractSignal");
Index: /trunk/MagicSoft/Mars/mjobs/MJPedestal.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 5380)
+++ /trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 5381)
@@ -503,20 +503,19 @@
 Bool_t MJPedestal::CheckEnvLocal()
 {
-
-  SetDataCheck(GetEnv("DataCheck", fDataCheck));
-  
-  if (HasEnv("DataCheckDisplay"))
-    fDisplayType = GetEnv("DataCheckDisplay", kFALSE) ? kDataCheckDisplay : kNormalDisplay;
-
-  if (HasEnv("UseData"))
-    fExtractType = GetEnv("UseData",kFALSE) ? kUseData : kUsePedRun;
-  
-  if (HasEnv("UseExtractor"))
-    if (GetEnv("UseExtractor",kFALSE))
-      fExtractType = kUseExtractor;
-
-  SetNoStorage   ( GetEnv("DisableOutput", IsNoStorage()   ));
-  
-  return kTRUE;
+    SetDataCheck(GetEnv("DataCheck", fDataCheck));
+
+    if (HasEnv("DataCheckDisplay"))
+        fDisplayType = GetEnv("DataCheckDisplay", kFALSE) ? kDataCheckDisplay : kNormalDisplay;
+
+    if (HasEnv("UseData"))
+        fExtractType = GetEnv("UseData",kFALSE) ? kUseData : kUsePedRun;
+
+    if (HasEnv("UseExtractor"))
+        if (GetEnv("UseExtractor",kFALSE))
+            fExtractType = kUseExtractor;
+
+    SetNoStorage(GetEnv("DisableOutput", IsNoStorage()));
+
+    return kTRUE;
 }
 
@@ -666,42 +665,37 @@
 
     MTaskEnv taskenv("ExtractPedestal");
-    if (IsUseData())
-      taskenv.SetDefault(&pedlogain);
-    else if (IsUseExtractor())
-      taskenv.SetDefault(fExtractor);
-    else
-      taskenv.SetDefault(&pedcalc);
-
-    if (fExtractor)
-    {
-      if (IsUseData())
-        pedlogain.SetExtractWindow(15,(Int_t)fExtractor->GetNumHiGainSamples());          
-      else if (IsUsePedRun())
+    switch (fExtractType)
+    {
+    case kUseData:
+        taskenv.SetDefault(&pedlogain);
+        if (!fExtractor)
+            break;
+        pedlogain.SetExtractWindow(15,(Int_t)fExtractor->GetNumHiGainSamples());
+        break;
+
+    case kUsePedRun:
+        if (!fExtractor)
+            break;
+        taskenv.SetDefault(&pedcalc);
+        pedcalc.SetWindowSize((Int_t)fExtractor->GetNumHiGainSamples());
+        pedcalc.SetRange(fExtractor->GetHiGainFirst(), fExtractor->GetHiGainLast());
+        break;
+
+    case kUseExtractor:
+        if (!fExtractor)
         {
-          pedcalc.SetWindowSize((Int_t)fExtractor->GetNumHiGainSamples());
-          pedcalc.SetRange(fExtractor->GetHiGainFirst(), fExtractor->GetHiGainLast());
+            *fLog << err << GetDescriptor();
+            *fLog << "Extraction Type kUseExtractor is chosen, but no extractor has been handed over" << endl;
+            return kFALSE;
         }
-      else if (IsUseExtractor())
-        if (!fExtractor->IsNoiseCalculation())
-          {
-            *fLog << err << GetDescriptor() 
-                  << "Extraction Type kUseExtractor is chosen, but the extractor has no flag kNoiseCalculation set! " << endl;
-            return kFALSE;
-          }
-    }
-    else if (IsUseExtractor())
-      {
-        *fLog << err << GetDescriptor()
-              << "Extraction Type kUseExtractor is chosen, but no extractor has been handed over" << endl;
-        return kFALSE;
-      }
-    
-  /*
-    else
-    {
+        taskenv.SetDefault(fExtractor);
+        if (fExtractor->IsNoiseCalculation())
+            break;
+
         *fLog << warn << GetDescriptor();
-        *fLog << ": No extractor has been chosen, take default number of FADC samples " << endl;
-    }
-    */
+        *fLog <<"Extraction type is kUseExtractor, but extractor has kNoiseCalculation not set... set." << endl;
+        fExtractor->SetNoiseCalculation();
+        return kFALSE;
+    }
 
     tlist.AddToList(&geomapl);
Index: /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc
===================================================================
--- /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5380)
+++ /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5381)
@@ -576,15 +576,14 @@
 //
 //  The following resources are available:
-//    FirstCheckWindowSlice: 0
-//    LastCheckWindowSlice: 29
-//    ExtractWindowFirst:   15
-//    ExtractWindowSize:     6
-//    NumEventsDump:
+//    FirstCheckWindowSlice:  0
+//    LastCheckWindowSlice:  29
+//    ExtractWindowFirst:    15
+//    ExtractWindowSize:      6
+//    NumEventsDump:        500
+//    MaxSignalVar:          40
+//    PedestalUpdate:       yes
 //
 Int_t MPedCalcFromLoGain::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
 {
-    if (MExtractor::ReadEnv(env, prefix, print)==kERROR)
-        return kERROR;
-
     Bool_t rc=kFALSE;
 
@@ -653,4 +652,3 @@
     *fLog << "Max allowed signal variation: " << fMaxSignalVar << endl;
     *fLog << "Pedestal Update is " << (fPedestalUpdate?"on":"off") << endl;
-    MExtractor::Print(o);
-}
+}
Index: /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h
===================================================================
--- /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h	(revision 5380)
+++ /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.h	(revision 5381)
@@ -2,6 +2,6 @@
 #define MARS_MPedCalcFromLoGain
 
-#ifndef MARS_MExtractor
-#include "MExtractor.h"
+#ifndef MARS_MTask
+#include "MTask.h"
 #endif
 
@@ -15,8 +15,10 @@
 
 class MGeomCam;
-class MBadPixelsCam;
+class MPedestalCam;
+class MRawEvtData;
 class MRawEvtPixelIter;
+class MRawRunHeader;
 
-class MPedCalcFromLoGain : public MExtractor
+class MPedCalcFromLoGain : public MTask
 {
     static const UShort_t fgCheckWinFirst;    // First FADC slice to check for signal (currently set to: 0)
@@ -26,12 +28,15 @@
     static const UShort_t fgMaxSignalVar;     // The maximum difference between the highest and lowest slice
 
-    MGeomCam *fGeom;                          // Camera geometry
+    MGeomCam      *fGeom;        //! Camera geometry
+    MPedestalCam  *fPedestals;   //! Pedestals of all pixels in the camera
+    MRawEvtData   *fRawEvt;      //! Raw event data (time slices)
+    MRawRunHeader *fRunHeader;   //! RunHeader information
 
-    UInt_t   fNumEventsDump;                  // Number of event after which MPedestalCam gets updated
+    UInt_t   fNumEventsDump;     // Number of event after which MPedestalCam gets updated
 
     UShort_t fMaxSignalVar;
     UShort_t fCheckWinFirst;
     UShort_t fCheckWinLast;
-    UShort_t fExtractWinSize;                 // Number of slices to calculate the pedestal from
+    UShort_t fExtractWinSize;    // Number of slices to calculate the pedestal from
     UShort_t fExtractWinFirst;
     UShort_t fExtractWinLast;
Index: /trunk/MagicSoft/Mars/msignal/MExtractor.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractor.cc	(revision 5380)
+++ /trunk/MagicSoft/Mars/msignal/MExtractor.cc	(revision 5381)
@@ -403,4 +403,5 @@
     }
 
+    // Be carefull: Returning kERROR is not forseen in derived classes
     return rc;
 }
Index: /trunk/MagicSoft/Mars/msignal/MExtractor.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractor.h	(revision 5380)
+++ /trunk/MagicSoft/Mars/msignal/MExtractor.h	(revision 5381)
@@ -78,10 +78,10 @@
   Bool_t  IsNoiseCalculation () const { return fNoiseCalculation; }
   
-  virtual void SetRange    ( Byte_t hifirst=0, Byte_t hilast=0, Byte_t lofirst=0, Byte_t lolast=0 );
+  virtual void SetRange(Byte_t hifirst=0, Byte_t hilast=0, Byte_t lofirst=0, Byte_t lolast=0);
 
-  void SetOffsetLoGain ( const Float_t f=fgOffsetLoGain) { fOffsetLoGain = f; }
-  void SetSaturationLimit  ( Byte_t       lim=fgSaturationLimit        ) { fSaturationLimit  = lim;  }
-  void SetNamePedestalCam ( const char *name=fgNamePedestalCam.Data()) { fNamePedestalCam = name; }
-  void SetNoiseCalculation( const Bool_t b=kFALSE )   {   fNoiseCalculation = b;   }
+  void SetOffsetLoGain(const Float_t f=fgOffsetLoGain)  { fOffsetLoGain = f; }
+  void SetSaturationLimit(Byte_t lim=fgSaturationLimit) { fSaturationLimit  = lim; }
+  void SetNamePedestalCam(const char *name=fgNamePedestalCam.Data()) { fNamePedestalCam = name; }
+  void SetNoiseCalculation(const Bool_t b=kTRUE)        { fNoiseCalculation = b; }
 
   void Print(Option_t *o="") const;
