Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 5029)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 5030)
@@ -20,8 +20,45 @@
                                                  -*-*- END OF LINE -*-*-
 
+ 2004/09/15: Thomas Bretz
+
+   * callisto.rc:
+     - added new line for intensity calibration
+     - fixed MJPedestalY.ExtractPedestal.PedestalUpdate (should be 'no')
+     
+   * mbase/MEvtLoop.cc:
+     - changed such that returning kCONTINUE in MTaskList::Process
+     is allowed
+
+   * mbase/MTaskList.cc:
+     - changed to return kCONTINUE if Task returned kCONTINUE
+
+   * mcalib/MCalibrate.cc, mcalib/MCalibrationChargeCalc.cc:
+     - cosmetics to output
+
+   * mcalib/MCalibrateData.[h,cc]:
+     - added an output/skip in case more than 90% of all pixels have
+       been skipped
+
+   * mjobs/MJCalibrateSignal.[h,cc]:
+     - fixed to read the MJCalibration output
+     - simplified reading container
+
+   * mjobs/MJCalibration.[h,cc]:
+     - simplified writing container
+
+   * mjobs/MJob.[h,cc]:
+     - added WriteContainer
+     - added ReadContainer
+
+   * mpedestal/MPedCalcFromLoGain.cc:
+     - initialize default number of dump events (500)
+     - log status of task in PreProcess
+
+
+
  2004/09/15: Markus Gaug
   
    * mjobs/MJCalibration.cc
-     - data chekc plot for the rel. time calibration
+     - data check plot for the rel. time calibration
 
    * mhcalib/MHCalibrationCam.cc
@@ -31,4 +68,5 @@
    * mhcalib/MHCalibrationChargeCam.cc
      - simply calls to IntensityCam somewhat
+
 
 
@@ -40,4 +78,6 @@
        Sorry!
 
+
+
  2004/09/14: Antonio Stamerra
 
@@ -51,4 +91,6 @@
      - added readIPR
 		
+
+
 
  2004/09/14: Markus Gaug
@@ -83,9 +125,5 @@
 
    * mhbase/MH.cc
-     - took out the search for histogram with the same name in 
-       ProjectARray. Always create new histogram whihc has to be 
-       deleted afterwards.
      - removed an infinite loop created some hours before.
-
 
    * mhcalib/MHGausEvents.[h,cc]
@@ -95,4 +133,5 @@
    * mhcalib/MHCalibrationPix.[h,cc]
      - take out fEventFrequency
+
 
 
Index: /trunk/MagicSoft/Mars/callisto.rc
===================================================================
--- /trunk/MagicSoft/Mars/callisto.rc	(revision 5029)
+++ /trunk/MagicSoft/Mars/callisto.rc	(revision 5030)
@@ -50,4 +50,6 @@
 # Switch on relative time calibration
 MJCalibration.RelTimeCalibration: Yes
+# Switch on intensity calibration
+#MJCalibration.IntensityCalibration: Yes
 # Set color to be used
 #MJCalibration.Color:
@@ -172,6 +174,5 @@
 
 MJPedestalY.ExtractPedestal: MPedCalcFromLoGain
-MJPedestalY.ExtractPedestal.PedestalUpdate:   yes
-MJPedestalY.ExtractPedestal.NumEventsDump:   500
+MJPedestalY.ExtractPedestal.PedestalUpdate:   no
 
 # -------------------------------------------------------------------------
Index: /trunk/MagicSoft/Mars/mbase/MEvtLoop.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 5030)
@@ -453,9 +453,13 @@
     UInt_t dummy   = maxcnt;
 
-    Int_t rc = kTRUE;
+    Int_t rc=kTRUE;
     if (maxcnt==0)
         // process first and increment if sucessfull
-        while ((rc=fTaskList->Process())==kTRUE)
+        while (1)
         {
+            rc=fTaskList->Process();
+            if (rc!=kTRUE && rc!=kCONTINUE)
+                break;
+
             numcnts++;
             if (!ProcessGuiEvents(++dummy))
@@ -464,6 +468,10 @@
     else
         // check for number and break if unsuccessfull
-        while (dummy-- && (rc=fTaskList->Process())==kTRUE)
+        while (dummy--)
         {
+            rc=fTaskList->Process();
+            if (rc!=kTRUE && rc!=kCONTINUE)
+                break;
+
             numcnts++;
             if (!ProcessGuiEvents(maxcnt - dummy))
Index: /trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 5030)
@@ -565,5 +565,5 @@
     // loop over all tasks for processing
     //
-    Bool_t rc = kTRUE;
+    Int_t rc = kTRUE;
     while ( (task=(MTask*)Next()) )
     {
@@ -610,5 +610,5 @@
             // something occured: skip the rest of the tasks for this event
             //
-            rc = kTRUE;
+            rc = kCONTINUE;
             break;
 
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrate.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrate.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrate.cc	(revision 5030)
@@ -163,6 +163,5 @@
   if(fCalibrationMode == kBlindPixel && !fQEs->IsBlindPixelMethodValid())
     {
-      *fLog << warn << GetDescriptor() 
-            << "Warning: Blind pixel calibration method not valid, switching to F-factor method" << endl;
+      *fLog << warn << "WARNING - Blind pixel calibration method not valid, switching to F-factor method" << endl;
       fCalibrationMode = kFfactor;
     }
@@ -170,6 +169,5 @@
   if(fCalibrationMode == kPinDiode && !fQEs->IsPINDiodeMethodValid())
     { 
-      *fLog << warn << GetDescriptor() 
-            << "Warning: PIN diode calibration method not valid, switching to F-factor method" << endl;
+      *fLog << warn << "WARNING - PIN diode calibration method not valid, switching to F-factor method" << endl;
       fCalibrationMode = kFfactor;
     }
@@ -177,6 +175,5 @@
   if(fCalibrationMode == kCombined && !fQEs->IsCombinedMethodValid())
     { 
-      *fLog << warn << GetDescriptor() 
-            << "Warning: Combined calibration method not valid, switching to F-factor method" << endl;
+      *fLog << warn << "WARNING - Combined calibration method not valid, switching to F-factor method" << endl;
       fCalibrationMode = kFfactor;
     }
@@ -201,29 +198,22 @@
       break;
     case kPinDiode:
-      *fLog << err << GetDescriptor() 
-                    << ": PIN Diode Calibration mode not yet available " << endl;
+      *fLog << err << "PIN Diode Calibration mode not yet available " << endl;
       return kFALSE;
       break;
     case kCombined:
-      *fLog << err << GetDescriptor() 
-                    << ": Combined Calibration mode not yet available " << endl;
+      *fLog << err << "Combined Calibration mode not yet available " << endl;
       return kFALSE;
       break;
 	case kFlatCharge:
-      *fLog << warn << GetDescriptor() 
-                    << ": WARNING: Flat-fielding charges - only for Keiichi!!" << endl;
+      *fLog << warn << "WARNING - Flat-fielding charges - only for Keiichi!!" << endl;
       break;
     case kDummy:
-      *fLog << warn << GetDescriptor() 
-                    << ": WARNING: Dummy calibration, no calibration applied!!" << endl;
+      *fLog << warn << "WARNING - Dummy calibration, no calibration applied!!" << endl;
       break;
     case kNone:
-      *fLog << warn << GetDescriptor() 
-                    << ": WARNING: No calibration applied!!" << endl;
+      *fLog << warn << "WARNING - No calibration applied!!" << endl;
       break;
     default:
-      *fLog << warn << GetDescriptor() 
-            << ": WARNING: Calibration mode value ("
-            <<fCalibrationMode<<") not known" << endl;
+      *fLog << warn << "WARNING - Calibration mode value (" <<fCalibrationMode<<") not known" << endl;
       return kFALSE;
     }
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5030)
@@ -356,10 +356,6 @@
         hiloconverr= pix.GetConversionHiLoErr();
 
-        if (fBadPixels)
-        {
-            MBadPixelsPix &bad = (*fBadPixels)[pixidx];
-            if (bad.IsUnsuitable())
-                return kFALSE;
-        }
+        if ((*fBadPixels)[pixidx].IsUnsuitable())
+            return kFALSE;
 
         calibConv    = pix.GetMeanConvFADC2Phe();
@@ -367,5 +363,5 @@
         calibFFactor = pix.GetMeanFFactorFADC2Phot();
 
-        MCalibrationQEPix &qe  = (MCalibrationQEPix&) (*fQEs)[pixidx];
+        MCalibrationQEPix &qe = (MCalibrationQEPix&) (*fQEs)[pixidx];
 
         switch(fCalibrationMode)
@@ -439,8 +435,8 @@
 }
 
-void MCalibrateData::Calibrate(Bool_t data, Bool_t pedestal) const
+Int_t MCalibrateData::Calibrate(Bool_t data, Bool_t pedestal) const
 {
     if (!data && !pedestal)
-        return;
+        return kTRUE;
 
     const UInt_t  npix       = fSignals->GetSize();
@@ -454,9 +450,13 @@
     Float_t calibFFactor;
 
+    UInt_t skip = 0;
     for (UInt_t pixidx=0; pixidx<npix; pixidx++)
     {
         if (!GetConversionFactor(pixidx, hiloconv, hiloconverr,
                                  calibConv, calibConvErr, calibFFactor))
+        {
+            skip++;
             continue;
+        }
 
         if (data)
@@ -517,4 +517,10 @@
     }
 
+    if (skip>npix*0.9)
+    {
+        *fLog << warn << "WARNING - GetConversionFactor has skipped more than 90% of the pixels... skip." << endl;
+        return kCONTINUE;
+    }
+
     if (pedestal)
         fPedPhot->SetReadyToSave();
@@ -525,4 +531,5 @@
         fCerPhotEvt->SetReadyToSave();
     }
+    return kTRUE;
 }
 
@@ -546,6 +553,5 @@
      */
 
-    Calibrate(fCalibrationMode!=kSkip, TestPedestalFlag(kEvent));
-    return kTRUE;
+    return Calibrate(fCalibrationMode!=kSkip, TestPedestalFlag(kEvent));
 }
 
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrateData.h
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 5030)
@@ -53,5 +53,5 @@
   TString  fNamePedPhotContainer;           // name of fPedPhot
 
-  void Calibrate(Bool_t data, Bool_t pedestal) const;
+  Int_t Calibrate(Bool_t data, Bool_t pedestal) const;
   
   Bool_t GetConversionFactor(UInt_t, Float_t &, Float_t &, Float_t &, Float_t &, Float_t &) const;
@@ -91,5 +91,5 @@
   void   EnablePedestalType(PedestalType_t i)     { fPedestalFlag |=  i;      }
   void   SetPedestalFlag(PedestalType_t i=kRun)   { fPedestalFlag  =  i;      }
-  Bool_t TestPedestalFlag(PedestalType_t i) const { return fPedestalFlag & i; }
+  Bool_t TestPedestalFlag(PedestalType_t i) const { return fPedestalFlag&i ? kTRUE : kFALSE; }
   
   void   SetCalibrationMode ( CalibrationMode_t calmode=kDefault ) { fCalibrationMode=calmode; }
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 5030)
@@ -466,6 +466,5 @@
         {
           *fLog << endl;
-          *fLog << warn << GetDescriptor() 
-                << ": No MCalibrationBlindCam found... no Blind Pixel method! " << endl;
+          *fLog << warn << "No MCalibrationBlindCam found... no Blind Pixel method! " << endl;
           return kFALSE;
         }
@@ -492,6 +491,5 @@
     {
       *fLog << endl;
-      *fLog << warn << GetDescriptor() 
-            << ": MCalibrationChargePINDiode not found... no PIN Diode method! " << endl;
+      *fLog << "MCalibrationChargePINDiode not found... no PIN Diode method! " << endl;
     }
   
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc	(revision 5030)
@@ -66,7 +66,5 @@
   fCams = new TObjArray;
   fCams->SetOwner();
-  
-}
-
+}
 
 // --------------------------------------------------------------------------
Index: /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5030)
@@ -56,5 +56,5 @@
   fName  = name  ? name  : "MCalibrationIntensityRelTimeCam";
   fTitle = title ? title : "Results of the Intensity Calibration";
-
+  
   InitSize(1);
 }
Index: /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5030)
@@ -54,8 +54,17 @@
 #include "MPedestalCam.h"
 #include "MBadPixelsCam.h"
+
+#include "MCalibrationChargePINDiode.h"
+
 #include "MCalibrationQECam.h"
+#include "MCalibrationBlindCam.h"
 #include "MCalibrationChargeCam.h"
 #include "MCalibrationRelTimeCam.h"
-
+/*
+#include "MCalibrationIntensityQECam.h"
+#include "MCalibrationIntensityBlindCam.h"
+#include "MCalibrationIntensityChargeCam.h"
+#include "MCalibrationIntensityRelTimeCam.h"
+*/
 #include "MReadReports.h"
 #include "MReadMarsFile.h"
@@ -114,11 +123,10 @@
 }
 
-Bool_t MJCalibrateSignal::ReadCalibration(MCalibrationCam &calcam,
-                                          MCalibrationCam &qecam,
-                                          MCalibrationCam &tmcam,
-                                          MBadPixelsCam &badpix, MTask* &ext1, MTask* &ext2, TString &geom) const
+Bool_t MJCalibrateSignal::ReadCalibration(TObjArray &l, MBadPixelsCam &cam, MTask* &ext1, MTask* &ext2, TString &geom) const
 {
     const TString fname = Form("%s/calib%06d.root", fPathIn.Data(), fSequence.GetSequence());
 
+    *fLog << inf << "Reading from file: " << fname << endl;
+
     TFile file(fname, "READ");
     if (!file.IsOpen())
@@ -128,25 +136,4 @@
     }
 
-    if (calcam.Read("MCalibrationChargeCam")<=0)
-    {
-        *fLog << err << dbginf << "ERROR - Unable to read MCalibrationChargeCam from file " << fname << endl;
-        return kFALSE;
-    }
-    if (qecam.Read("MCalibrationQECam")<=0)
-    {
-        *fLog << err << dbginf << "ERROR - Unable to read MCalibrationQECam from file " << fname << endl;
-        return kFALSE;
-    }
-    if (tmcam.Read("MCalibrationRelTimeCam")<=0)
-    {
-        *fLog << err << dbginf << "ERROR - Unable to read MCalibrationRelTimeCam from file " << fname << endl;
-        return kFALSE;
-    }
-    if (badpix.Read("MBadPixelsCam")<=0)
-    {
-        *fLog << err << dbginf << "ERROR - Unable to read MBadPixelsCam from file " << fname << endl;
-        return kFALSE;
-    }
-
     TObject *o = file.Get("ExtractSignal");
     if (o && !o->InheritsFrom(MExtractor::Class()))
@@ -178,5 +165,7 @@
     geom = o ? o->ClassName() : "";
 
-    return kTRUE;
+    TObjArray cont(l);
+    cont.Add(&cam);
+    return ReadContainer(cont);
 }
 
@@ -219,8 +208,16 @@
 
     // Read File
-    MCalibrationChargeCam  calcam;
-    MCalibrationQECam      qecam;
-    MCalibrationRelTimeCam tmcam;
-    MBadPixelsCam          badpix;
+    /*
+     MCalibrationIntensityChargeCam      calcam;
+     MCalibrationIntensityQECam          qecam;
+     MCalibrationIntensityBlindCam       bndcam;
+     MCalibrationIntensityRelTimeCam     tmcam;
+     */
+    MCalibrationChargeCam      calcam;
+    MCalibrationQECam          qecam;
+    MCalibrationBlindCam       bndcam;
+    MCalibrationChargePINDiode pind;
+    MCalibrationRelTimeCam     tmcam;
+    MBadPixelsCam              badpix;
 
     MTask *extractor1=0;
@@ -228,6 +225,15 @@
     TString geom;
 
-    if (!ReadCalibration(calcam, qecam, tmcam, badpix, extractor1, extractor2, geom))
-        return kFALSE;
+    TObjArray calibcont;
+    calibcont.Add(&calcam);
+    calibcont.Add(&qecam);
+    calibcont.Add(&bndcam);
+    calibcont.Add(&pind);
+    calibcont.Add(&tmcam);
+
+    if (!ReadCalibration(calibcont, badpix, extractor1, extractor2, geom))
+        return kFALSE;
+
+    badpix.Print();
 
     *fLog << all;
@@ -261,9 +267,7 @@
     MParList plist;
     plist.AddToList(this); // take care of fDisplay!
-    plist.AddToList(&calcam);
-    plist.AddToList(&qecam);     
-    plist.AddToList(&tmcam);
     plist.AddToList(&badcam);
     plist.AddToList(&pedcam);
+    plist.AddToList(&calibcont);
 
     // Setup Tasklist
Index: /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 5029)
+++ /trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 5030)
@@ -7,4 +7,5 @@
 
 class TEnv;
+class TList;
 
 class MTask;
@@ -14,8 +15,4 @@
 class MPedestalCam;
 class MBadPixelsCam;
-class MCalibrationCam;
-class MCalibrationQECam;
-class MCalibrationRelTimeCam;
-class MCalibrationChargeCam;
 
 class MJCalibrateSignal : public MJob
@@ -23,8 +20,6 @@
 private:
     Bool_t WriteResult();
-    Bool_t ReadCalibration(MCalibrationCam &calcam,
-                           MCalibrationCam &qecam, MCalibrationCam &tmcam,
-                           MBadPixelsCam &badpix, MTask* &ext1, MTask* &ext2,
-                           TString &geom) const;
+    Bool_t ReadCalibration(TObjArray &o, MBadPixelsCam &bpix,
+                           MTask* &ext1, MTask* &ext2, TString &geom) const;
 
 public:
Index: /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 5030)
@@ -1453,7 +1453,7 @@
 
     SetRelTimeCalibration(GetEnv("RelTimeCalibration", IsRelTimes()));
+    SetIntensity(GetEnv("IntensityCalibration", IsIntensity()));
     SetDataCheck(GetEnv("Datacheck", IsDataCheck()));
     SetDebug(GetEnv("Debug", IsDebug()));
-    SetIntensity(GetEnv("Intensity", IsIntensity()));
 
     SetUseBlindPixel(GetEnv("UseBlindPixel", IsUseBlindPixel()));
@@ -1491,5 +1491,4 @@
   if (run < gkSecondBlindPixelInstallation)
     {
-
       MCalibrationBlindCamOneOldStyle blindresults;
       if (IsIntensity())
@@ -1505,5 +1504,4 @@
   else if (run < gkThirdBlindPixelInstallation)
     {
-
       MCalibrationBlindCamTwoNewStyle blindresults;
 
@@ -2031,119 +2029,31 @@
     *fLog << inf << "ok." << endl;
 
+    TObjArray cont;
     if (IsIntensity())
-      {
-        *fLog << inf << " - MBadPixelsIntensityCam..." << flush;
-        if (fIntensBadCam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MBadPixelsIntensityCam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-
-        *fLog << inf << " - MCalibrationIntensityChargeCam..." << flush;
-        if (fIntensCalibCam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationIntensityChargeCam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-
-        *fLog << inf << " - MCalibrationIntensityQECam..." << flush;
-        if (fIntensQECam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationIntensityQECam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-        *fLog << inf << " - MCalibrationIntensityBlindCam..." << flush;
-        if (fIntensBlindCam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationIntensityBlindCam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-      }
+    {
+        cont.Add(&fIntensBadCam);
+        cont.Add(&fIntensCalibCam);
+        cont.Add(&fIntensQECam);
+        cont.Add(&fIntensBlindCam);
+    }
     else
-      {
-        *fLog << inf << " - MCalibrationChargeCam..." << flush;
-        if (fCalibrationCam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationChargeCam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-
-        *fLog << inf << " - MCalibrationQECam..." << flush;
-        if (fQECam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationQECam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-
-        *fLog << inf << " - MCalibrationBlindCam..." << flush;
-        if (fCalibrationBlindCam.Write()<=0)
-          {
-            *fLog << err << "Unable to write MCalibrationBlindCam to " << oname << endl;
-            return kFALSE;
-          }
-        *fLog << inf << "ok." << endl;
-      }
-    
-    *fLog << inf << " - MCalibrationChargePINDiode..." << flush;
-    if (fCalibrationPINDiode.Write()<=0)
-      {
-        *fLog << err << "Unable to write MCalibrationChargePINDiode to " << oname << endl;
-        return kFALSE;
-    }
-    *fLog << inf << "ok." << endl;
-
-    *fLog << inf << " - MBadPixelsCam..." << flush;
-    if (fBadPixels.Write()<=0)
-    {
-        *fLog << err << "Unable to write MBadPixelsCam to " << oname << endl;
-        return kFALSE;
-    }
-    *fLog << inf << "ok." << endl;
+    {
+        cont.Add(&fCalibrationCam);
+        cont.Add(&fQECam);
+        cont.Add(&fCalibrationBlindCam);
+    }
+    cont.Add(&fCalibrationPINDiode);
+    cont.Add(&fBadPixels);
+    if (IsRelTimes())
+          cont.Add(IsIntensity() ? (TObject*)&fIntensRelTimeCam : (TObject*)&fRelTimeCam);
 
     if (!geom)
-        *fLog << warn << " - WARNING: MGeomCam... not found!" << endl;
-    {
-        *fLog << inf << " - MGeomCam..." << flush;
-        if (geom->Write()<=0)
-        {
-            *fLog << err << "Unable to write MGeomCam to " << oname << endl;
-            return kFALSE;
-        }
-        *fLog << inf << "ok." << endl;
-    }
-
-    if (IsRelTimes())
-    {
-      if (IsIntensity())
-        {
-          *fLog << inf << " - MCalibrationIntensityRelTimeCam..." << flush;
-          if (fIntensRelTimeCam.Write()<=0)
-            {
-              *fLog << err << "Unable to write MCalibrationIntensityRelTimeCam to " << oname << endl;
-              return kFALSE;
-            }
-          *fLog << inf << "ok." << endl;
-        }
-      else
-        {
-          *fLog << inf << " - MCalibrationRelTimeCam..." << flush;
-          if (fRelTimeCam.Write()<=0)
-            {
-              *fLog << err << "Unable to write MCalibrationRelTimeCam to " << oname << endl;
-              return kFALSE;
-            }
-          *fLog << inf << "ok." << endl;
-        }
-      
-    }
+        *fLog << warn << " - WARNING - MGeomCam... not found!" << endl;
+    else
+        cont.Add(geom);
+
+    return WriteContainer(cont);
 
     return kTRUE;
-
 }
 
Index: /trunk/MagicSoft/Mars/mjobs/MJob.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJob.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mjobs/MJob.cc	(revision 5030)
@@ -33,5 +33,8 @@
 
 #include <TEnv.h>
+#include <TFile.h>
 #include <TSystem.h>
+
+#include "MIter.h"
 
 #include "MLog.h"
@@ -169,2 +172,48 @@
     return loop.ReadEnv(*fEnv, fEnvPrefix, fEnvDebug) ? kTRUE : kFALSE;
 }
+
+Bool_t MJob::WriteContainer(TCollection &list) const
+{
+    if (!gFile)
+    {
+        *fLog << err << dbginf << "ERROR - No file open (gFile==0)" << endl;
+        return kFALSE;
+    }
+
+    MIter Next(&list);
+    MParContainer *o=0;
+    while ((o=Next()))
+    {
+        *fLog << inf << " - Writing " << o->GetDescriptor() << "..." << flush;
+        if (o->Write()<=0)
+        {
+            *fLog << err << dbginf << "ERROR - Writing " << o->GetDescriptor() << " to file " << gFile->GetName() << endl;
+            return kFALSE;
+        }
+        *fLog << "done." << endl;
+    }
+    return kTRUE;
+}
+
+Bool_t MJob::ReadContainer(TCollection &list) const
+{
+    if (!gFile)
+    {
+        *fLog << err << dbginf << "ERROR - No file open (gFile==0)" << endl;
+        return kFALSE;
+    }
+
+    MIter Next(&list);
+    MParContainer *o=0;
+    while ((o=Next()))
+    {
+        *fLog << inf << " - Reading " << o->GetDescriptor() << "..." << flush;
+        if (o->Read(o->GetName())<=0)
+        {
+            *fLog << err << dbginf << "ERROR - Writing " << o->GetDescriptor() << " to file " << gFile->GetName() << endl;
+            return kFALSE;
+        }
+        *fLog << "done." << endl;
+    }
+    return kTRUE;
+}
Index: /trunk/MagicSoft/Mars/mjobs/MJob.h
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJob.h	(revision 5029)
+++ /trunk/MagicSoft/Mars/mjobs/MJob.h	(revision 5030)
@@ -38,4 +38,7 @@
     virtual Bool_t CheckEnvLocal() { return kTRUE; }
 
+    Bool_t WriteContainer(TCollection &list) const;
+    Bool_t ReadContainer(TCollection &list) const;
+
 public:
     MJob(const char *name=NULL, const char *title=NULL);
Index: /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc
===================================================================
--- /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5029)
+++ /trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5030)
@@ -196,4 +196,5 @@
     SetMaxHiGainVar();
     SetPedestalUpdate(kTRUE);
+    SetNumEventsDump(500);
 
     Clear();
@@ -362,4 +363,9 @@
         fNumEventsDump=1000;
     }
+
+    *fLog << inf << "Continous update switched " << (fPedestalUpdate?"on":"off");
+    if (fPedestalUpdate)
+        *fLog << " (dump each " << fNumEventsDump << " events)" << endl;
+    *fLog << endl;
 
     return kTRUE;
