Index: trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCalc.cc	(revision 5046)
@@ -265,6 +265,5 @@
 //
 MCalibrationChargeCalc::MCalibrationChargeCalc(const char *name, const char *title)
-    : 
-      fGeom(NULL), fSignal(NULL), fHeader(NULL)
+    : fGeom(NULL), fSignal(NULL), fHeader(NULL)
 {
         
@@ -340,10 +339,7 @@
 //
 // The following container are searched for and execution aborted if not in MParList:
+//  - MRawEvtHeader
 //  - MPedestalCam
-//
-// The following containers are searched and created if they were not found:
-//
-//  - MCalibrationQECam
-//  - MBadPixelsCam
+//  - MExtractedSignalCam
 //
 Int_t MCalibrationChargeCalc::PreProcess(MParList *pList)
@@ -374,11 +370,4 @@
     }
   
-  fHeader = (MRawEvtHeader*)pList->FindObject("MRawEvtHeader");
-  if (!fHeader)
-    {
-      *fLog << err << "MRawEvtHeader not found... abort." << endl;
-      return kFALSE;
-    }
-
 
   return kTRUE;
@@ -390,5 +379,7 @@
 // Search for the following input containers and abort if not existing:
 //  - MGeomCam
-//  - MCalibrationChargeCam
+// -  MCalibrationIntensityChargeCam or MCalibrationChargeCam
+//  - MCalibrationIntensityQECam or MCalibrationQECam 
+//  - MBadPixelsIntensityCam or MBadPixelsCam
 // 
 // Search for the following input containers and give a warning if not existing:
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.cc	(revision 5046)
@@ -41,5 +41,5 @@
 #include "MCalibrationBlindCam.h"
 
-#include <TObjArray.h>
+#include <TOrdCollection.h>
 
 ClassImp(MCalibrationIntensityBlindCam);
@@ -60,7 +60,17 @@
 }
 
+// -------------------------------------------------------------------
+//
+// Add MCalibrationBlindCam's in the ranges from - to. 
+//
+void MCalibrationIntensityBlindCam::Add(const UInt_t from, const UInt_t to)
+{
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationBlindCam,i);
+}
+
 // --------------------------------------------------------------------------
 //
-// Calls TObjArray::Expand() for fCams and initialze one MCalibrationBlindCam
+// Calls TOrdCollection::Expand() for fCams and initialze one MCalibrationBlindCam
 // and copy the entries
 // 
@@ -74,5 +84,4 @@
 
   MCalibrationIntensityCam::InitSize(n);
-  (*fCams)[n-1] = new MCalibrationBlindCam;
 
   MCalibrationBlindCam *newcam = (MCalibrationBlindCam*)GetCam();  
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityBlindCam.h	(revision 5046)
@@ -12,4 +12,8 @@
 class MCalibrationIntensityBlindCam : public MCalibrationIntensityCam
 {
+private:
+
+  void Add(const UInt_t from, const UInt_t tox);
+
 public:
 
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.cc	(revision 5046)
@@ -28,5 +28,5 @@
 // Base class for intensity calibration results 
 //
-// Contains TObjArrays for the following objects:
+// Contains TOrdCollections for the following objects:
 // - fCams:  Array of classes derived from MCalibrationCam, one entry 
 //           per calibration camera result. Has to be created
@@ -43,5 +43,5 @@
 #include "MCalibrationIntensityCam.h"
 
-#include <TObjArray.h>
+#include <TOrdCollection.h>
 
 #include "MGeomCam.h"
@@ -64,5 +64,5 @@
   fTitle = title ? title : "Base container for the Intensity Calibration";
 
-  fCams = new TObjArray;
+  fCams = new TOrdCollection;
   fCams->SetOwner();
   
@@ -188,9 +188,33 @@
 // -------------------------------------------------------------------
 //
-// Calls TObjArray::Expand() for fCams
-//
-void MCalibrationIntensityCam::InitSize(const UInt_t n)
-{
-  fCams->Expand(n);
+// Initialize the objects inside the TOrdCollection using the 
+// virtual function Add().
+//
+// InitSize can only increase the size, but not shrink. 
+// 
+// It can be called more than one time. New Containers are 
+// added only from the current size to the argument i.
+//
+void MCalibrationIntensityCam::InitSize(const UInt_t i)
+{
+
+  const UInt_t save = GetSize();
+
+  if (i==save)
+    return;
+  
+  if (i>save)
+    Add(save,i);
+}
+
+// -------------------------------------------------------------------
+//
+// Add MCalibrationCams in the ranges from - to. In order to initialize
+// from MCalibrationCam derived containers, overwrite this function
+//
+void MCalibrationIntensityCam::Add(const UInt_t from, const UInt_t to)
+{
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationCam,i);
 }
 
@@ -211,10 +235,10 @@
 // --------------------------------------------------------------------------
 //
-// Returns the current size of the TObjArray fCams 
+// Returns the current size of the TOrdCollection fCams 
 // independently if the MCalibrationCam is filled with values or not.
 //
 const Int_t MCalibrationIntensityCam::GetSize() const 
 {
-  return fCams->GetEntriesFast();
+  return fCams->GetSize();
 }
 
@@ -240,5 +264,5 @@
 // --------------------------------------------------------------------------
 //
-// Returns the current size of the TObjArray fAverageAreas of the current camera.
+// Returns the current size of the TOrdCollection fAverageAreas of the current camera.
 //
 const Int_t MCalibrationIntensityCam::GetAverageAreas() const
@@ -285,5 +309,5 @@
 // --------------------------------------------------------------------------
 //
-// Returns the current size of the TObjArray fAverageSectors or the current camera
+// Returns the current size of the TOrdCollection fAverageSectors or the current camera
 //
 const Int_t MCalibrationIntensityCam::GetAverageSectors() const
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityCam.h	(revision 5046)
@@ -18,5 +18,5 @@
 #endif
 
-class TObjArray;
+class TOrdCollection;
 class MCalibrationPix;
 class MBadPixelsPix;
@@ -31,6 +31,7 @@
 protected:  
 
-  TObjArray *fCams;        // Array of MCalibrationCams, one per pulse colour and intensity
+  TOrdCollection *fCams;        // Array of MCalibrationCams, one per pulse colour and intensity
 
+  virtual void Add(const UInt_t from, const UInt_t to);
   virtual void InitSize( const UInt_t n );
   
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5046)
@@ -35,6 +35,6 @@
 // See also: MCalibrationIntensityCam, MCalibrationChargeCam,
 //           MCalibrationChargePix, MCalibrationChargeCalc, MCalibrationQECam
+//           MCalibrationBlindCam, MCalibrationChargePINDiode
 //           MHCalibrationChargePix, MHCalibrationChargeCam              
-//           MCalibrationChargeBlindPix, MCalibrationChargePINDiode
 //
 /////////////////////////////////////////////////////////////////////////////
@@ -42,5 +42,5 @@
 #include "MCalibrationChargeCam.h"
 
-#include <TObjArray.h>
+#include <TOrdCollection.h>
 
 ClassImp(MCalibrationIntensityChargeCam);
@@ -51,5 +51,5 @@
 //
 // Default constructor. 
-// 
+//
 MCalibrationIntensityChargeCam::MCalibrationIntensityChargeCam(const char *name, const char *title)
 {
@@ -57,16 +57,16 @@
   fName  = name  ? name  : "MCalibrationIntensityChargeCam";
   fTitle = title ? title : "Results of the Intensity Calibration";
-
+  
   InitSize(1);
 }
 
-// --------------------------------------------------------------------------
+// -------------------------------------------------------------------
 //
-// Calls TObjArray::Expand() for fCams and initialze one CalibrationChargeCam
+// Add MCalibrationChargeCam's in the ranges from - to. 
 //
-void MCalibrationIntensityChargeCam::InitSize(const UInt_t n)
+void MCalibrationIntensityChargeCam::Add(const UInt_t from, const UInt_t to)
 {
-  MCalibrationIntensityCam::InitSize(n);
-  (*fCams)[n-1] = new MCalibrationChargeCam;
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationChargeCam,i);
 }
 
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h	(revision 5046)
@@ -12,9 +12,11 @@
 class MCalibrationIntensityChargeCam : public MCalibrationIntensityCam
 {
+private:
+
+  void Add(const UInt_t a, const UInt_t b);
+
 public:
 
   MCalibrationIntensityChargeCam(const char *name=NULL, const char *title=NULL);
-
-  void InitSize( const UInt_t n );  
 
   // Setters   
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.cc	(revision 5046)
@@ -41,5 +41,5 @@
 #include "MCalibrationQECam.h"
 
-#include <TObjArray.h>
+#include <TOrdCollection.h>
 
 ClassImp(MCalibrationIntensityQECam);
@@ -59,4 +59,14 @@
 }
 
+// -------------------------------------------------------------------
+//
+// Add MCalibrationQECams in the ranges from - to. 
+//
+void MCalibrationIntensityQECam::Add(const UInt_t from, const UInt_t to)
+{
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationQECam,i);
+}
+
 // --------------------------------------------------------------------------
 //
@@ -73,6 +83,5 @@
 
   MCalibrationIntensityCam::InitSize(n);
-  (*fCams)[n-1] = new MCalibrationQECam;
-
+  
   MCalibrationQECam *newcam = (MCalibrationQECam*)GetCam();  
   
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityQECam.h	(revision 5046)
@@ -12,9 +12,18 @@
 class MCalibrationIntensityQECam : public MCalibrationIntensityCam
 {
+private:
+
+  void Add(const UInt_t from, const UInt_t to);
+
 public:
 
   MCalibrationIntensityQECam(const char *name=NULL, const char *title=NULL);
 
-  void InitSize( const UInt_t n );  
+  void InitSize( const UInt_t n );
+
+  const MArrayD &GetCorningBlues   () const {
+    return ((MCalibrationQECam*)GetCam())->GetCorningBlues();  }
+  const MArrayD &GetCorningReds    () const {
+    return ((MCalibrationQECam*)GetCam())->GetCorningReds();   }
   
   Float_t GetPlexiglassQE          () const {
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5046)
@@ -41,5 +41,5 @@
 #include "MCalibrationRelTimeCam.h"
 
-#include <TObjArray.h>
+#include <TOrdCollection.h>
 
 ClassImp(MCalibrationIntensityRelTimeCam);
@@ -60,13 +60,12 @@
 }
 
-
-// --------------------------------------------------------------------------
+// -------------------------------------------------------------------
 //
-// Calls TObjArray::Expand() for fCams and initialze one CalibrationRelTimeCam
+// Add MCalibrationRelTimeCam's in the ranges from - to. 
 //
-void MCalibrationIntensityRelTimeCam::InitSize(const UInt_t n)
+void MCalibrationIntensityRelTimeCam::Add(const UInt_t from, const UInt_t to)
 {
-  MCalibrationIntensityCam::InitSize(n);
-  (*fCams)[n-1] = new MCalibrationRelTimeCam;
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationRelTimeCam,i);
 }
 
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 5046)
@@ -8,10 +8,12 @@
 class MCalibrationIntensityRelTimeCam : public MCalibrationIntensityCam
 {
+private:
+
+  void Add(const UInt_t from, const UInt_t to);
+
 public:
 
   MCalibrationIntensityRelTimeCam(const char *name=NULL, const char *title=NULL);
 
-  void InitSize( const UInt_t n );    
-  
   ClassDef(MCalibrationIntensityRelTimeCam, 1) // Container Intensity Rel.Times Calibration Results Camera
 };
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.cc	(revision 5046)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.cc	(revision 5046)
@@ -0,0 +1,71 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Markus Gaug   11/2003 <mailto:markus@ifae.es>
+!
+!   Copyright: MAGIC Software Development, 2000-2004
+!
+!
+\* ======================================================================== */
+/////////////////////////////////////////////////////////////////////////////
+//                                                               
+// MCalibrationIntensityTestCam                                               
+//                                                               
+// Storage container for intensity charge calibration results. 
+// 
+// Individual MCalibrationTestCam's can be retrieved with: 
+// - GetCam() yielding the current cam.
+// - GetCam("name") yielding the current camera with name "name".
+// - GetCam(i) yielding the i-th camera.
+//
+// See also: MCalibrationIntensityCam, MCalibrationTestCam,
+//           MCalibrationTestPix, MCalibrationTestCalc, MCalibrationQECam
+//           MHCalibrationTestPix, MHCalibrationTestCam              
+//
+/////////////////////////////////////////////////////////////////////////////
+#include "MCalibrationIntensityTestCam.h"
+#include "MCalibrationTestCam.h"
+
+#include <TOrdCollection.h>
+
+ClassImp(MCalibrationIntensityTestCam);
+
+using namespace std;
+
+// --------------------------------------------------------------------------
+//
+// Default constructor. 
+//
+MCalibrationIntensityTestCam::MCalibrationIntensityTestCam(const char *name, const char *title)
+{
+
+  fName  = name  ? name  : "MCalibrationIntensityTestCam";
+  fTitle = title ? title : "Results of the Intensity Calibration";
+  
+  InitSize(1);
+}
+
+// -------------------------------------------------------------------
+//
+// Add MCalibrationTestCam's in the ranges from - to. 
+//
+void MCalibrationIntensityTestCam::Add(const UInt_t from, const UInt_t to)
+{
+  for (UInt_t i=from; i<to; i++)
+    fCams->AddAt(new MCalibrationTestCam,i);
+}
+
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.h	(revision 5046)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityTestCam.h	(revision 5046)
@@ -0,0 +1,21 @@
+#ifndef MARS_MCalibrationIntensityTestCam
+#define MARS_MCalibrationIntensityTestCam
+
+#ifndef MARS_MCalibrationIntensityCam
+#include "MCalibrationIntensityCam.h"
+#endif
+
+class MCalibrationIntensityTestCam : public MCalibrationIntensityCam
+{
+private:
+  
+  void Add(const UInt_t from, const UInt_t to);
+  
+public:
+
+  MCalibrationIntensityTestCam(const char *name=NULL, const char *title=NULL);
+  
+  ClassDef(MCalibrationIntensityTestCam, 1) // Container Intensity Rel.Times Calibration Results Camera
+};
+
+#endif
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.cc	(revision 5046)
@@ -62,8 +62,8 @@
 
 #include "MCalibrationIntensityRelTimeCam.h"
-
 #include "MCalibrationRelTimeCam.h"
 #include "MCalibrationRelTimePix.h"
 
+#include "MBadPixelsIntensityCam.h"
 #include "MBadPixelsCam.h"
 #include "MBadPixelsPix.h"
@@ -113,4 +113,5 @@
 {
 
+  fIntensBad  = NULL;
   fBadPixels  = NULL;
   fCam        = NULL;
@@ -120,26 +121,4 @@
 
 
-// -----------------------------------------------------------------------------------
-//
-// The following containers are searched and created if they were not found:
-//
-//  - MBadPixelsCam
-//
-Int_t MCalibrationRelTimeCalc::PreProcess(MParList *pList)
-{
-  
-
-  fBadPixels = (MBadPixelsCam*)pList->FindCreateObj("MBadPixelsCam");
-  if (!fBadPixels)
-    {
-      *fLog << err << "Could not find or create MBadPixelsCam ... aborting." << endl;
-      return kFALSE;
-    }
-
-  
-  
-  return kTRUE;
-}
-
 
 // --------------------------------------------------------------------------
@@ -147,5 +126,6 @@
 // Search for the following input containers and abort if not existing:
 //  - MGeomCam
-//  - MCalibrationRelTimeCam
+//  - MCalibrationIntensityRelTimeCam or MCalibrationRelTimeCam 
+//  - MBadPixelsIntensityCam or MBadPixelsCam
 // 
 // It defines the PixId of every pixel in:
@@ -167,4 +147,17 @@
     }
   
+  fIntensBad = (MBadPixelsIntensityCam*)pList->FindObject(AddSerialNumber("MBadPixelsIntensityCam"));
+  if (fIntensBad)
+    *fLog << inf << "Found MBadPixelsIntensityCam ... " << endl;
+  else
+    {
+      fBadPixels = (MBadPixelsCam*)pList->FindObject(AddSerialNumber("MBadPixelsCam"));
+      if (!fBadPixels)
+        {
+          *fLog << err << "Cannot find MBadPixelsCam ... abort." << endl;
+          return kFALSE;
+        }
+    }
+
   fIntensCam = (MCalibrationIntensityRelTimeCam*)pList->FindObject(AddSerialNumber("MCalibrationIntensityRelTimeCam"));
   if (fIntensCam)
@@ -183,11 +176,14 @@
   UInt_t npixels     = fGeom->GetNumPixels();
   
+  MCalibrationRelTimeCam *relcam = fIntensCam 
+    ? (MCalibrationRelTimeCam*)fIntensCam->GetCam()  : fCam;
+  MBadPixelsCam          *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
+
   for (UInt_t i=0; i<npixels; i++)
     {
       
-      MCalibrationRelTimePix &pix = fIntensCam 
-        ? (MCalibrationRelTimePix&)(*fIntensCam)[i]
-        : (MCalibrationRelTimePix&)(*fCam)      [i];
-      MBadPixelsPix          &bad = (*fBadPixels)[i];
+      MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*relcam)[i];
+      MBadPixelsPix          &bad =                          (*badcam)[i];
       
       pix.SetPixId(i);
@@ -203,13 +199,4 @@
     }
 
-  return kTRUE;
-}
-
-// ----------------------------------------------------------------------------------
-//  
-// Nothing to be done in Process, but have a look at MHCalibrationRelTimeCam, instead
-// 
-Int_t MCalibrationRelTimeCalc::Process()
-{
   return kTRUE;
 }
@@ -265,5 +252,9 @@
   else
     fCam      ->SetReadyToSave();
-  fBadPixels->SetReadyToSave();
+
+  if (fIntensBad)
+    fIntensBad->SetReadyToSave();
+  else
+    fBadPixels->SetReadyToSave();
 
   *fLog << inf << endl;
@@ -301,4 +292,9 @@
 {
 
+  MCalibrationRelTimeCam *relcam = fIntensCam 
+    ? (MCalibrationRelTimeCam*)fIntensCam->GetCam()  : fCam;
+  MBadPixelsCam         *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
+
   const UInt_t npixels  = fGeom->GetNumPixels();
   const UInt_t nareas   = fGeom->GetNumAreas();
@@ -316,5 +312,5 @@
   for (UInt_t i=0; i<npixels; i++)
     {
-      MBadPixelsPix &bad = (*fBadPixels)[i];      
+      MBadPixelsPix &bad = (*badcam)[i];      
       const Int_t  aidx  = (*fGeom)[i].GetAidx();
 
@@ -340,8 +336,6 @@
     {
       
-      MCalibrationRelTimePix &pix = fIntensCam 
-        ? (MCalibrationRelTimePix&)(*fIntensCam)[i]
-        : (MCalibrationRelTimePix&)(*fCam)      [i];
-      MBadPixelsPix          &bad = (*fBadPixels)[i];
+      MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*relcam)[i];
+      MBadPixelsPix          &bad =                          (*badcam)[i];
       
       if (pix.IsExcluded())
@@ -390,8 +384,6 @@
     {
       
-      MCalibrationRelTimePix &pix = fIntensCam 
-        ? (MCalibrationRelTimePix&)(*fIntensCam)[i]
-        : (MCalibrationRelTimePix&)(*fCam)      [i];
-      MBadPixelsPix          &bad = (*fBadPixels)[i];
+      MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*relcam)[i];
+      MBadPixelsPix          &bad =                          (*badcam)[i];
       
       if (pix.IsExcluded())
@@ -428,11 +420,14 @@
 {
   
+  MCalibrationRelTimeCam *relcam = fIntensCam 
+    ? (MCalibrationRelTimeCam*)fIntensCam->GetCam()  : fCam;
+  MBadPixelsCam         *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
+
   for (Int_t i=0; i<fBadPixels->GetSize(); i++)
     {
       
-      MBadPixelsPix          &bad = (*fBadPixels)[i];
-      MCalibrationRelTimePix &pix = fIntensCam 
-        ? (MCalibrationRelTimePix&)(*fIntensCam)[i]
-        : (MCalibrationRelTimePix&)(*fCam)      [i];
+      MBadPixelsPix          &bad =                          (*badcam)[i];
+      MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*relcam)[i];
 
       if (bad.IsUncalibrated( MBadPixelsPix::kDeviatingTimeResolution))
@@ -464,11 +459,16 @@
   *fLog << dec << setfill(' ');
 
+  MCalibrationRelTimeCam *relcam = fIntensCam 
+    ? (MCalibrationRelTimeCam*)fIntensCam->GetCam()  : fCam;
+  MBadPixelsCam         *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
+
   const Int_t nareas = fGeom->GetNumAreas();
 
   TArrayI counts(nareas);
 
-  for (Int_t i=0; i<fBadPixels->GetSize(); i++)
-    {
-      MBadPixelsPix &bad = (*fBadPixels)[i];
+  for (Int_t i=0; i<badcam->GetSize(); i++)
+    {
+      MBadPixelsPix &bad = (*badcam)[i];
       if (bad.IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
         {
@@ -479,8 +479,5 @@
 
   for (Int_t aidx=0; aidx<nareas; aidx++)
-    if (fIntensCam)
-      fIntensCam->SetNumUnsuitable(counts[aidx], aidx);
-    else
-      fCam->SetNumUnsuitable(counts[aidx], aidx);
+    relcam->SetNumUnsuitable(counts[aidx], aidx);
 
   if (fGeom->InheritsFrom("MGeomCamMagic"))
@@ -490,7 +487,7 @@
   counts.Reset();
 
-  for (Int_t i=0; i<fBadPixels->GetSize(); i++)
-    {
-      MBadPixelsPix &bad = (*fBadPixels)[i];
+  for (Int_t i=0; i<badcam->GetSize(); i++)
+    {
+      MBadPixelsPix &bad = (*badcam)[i];
       if (bad.IsUnsuitable(MBadPixelsPix::kUnreliableRun))
         {
@@ -501,8 +498,5 @@
 
   for (Int_t aidx=0; aidx<nareas; aidx++)
-    if (fIntensCam)
-      fIntensCam->SetNumUnreliable(counts[aidx], aidx);
-    else
-      fCam->SetNumUnreliable(counts[aidx], aidx);
+    relcam->SetNumUnreliable(counts[aidx], aidx);
 
   *fLog << " " << setw(7) << "Unreliable Pixels:              "
@@ -518,9 +512,12 @@
 {
   
+  MBadPixelsCam         *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
+
   UInt_t countinner = 0;
   UInt_t countouter = 0;
-  for (Int_t i=0; i<fBadPixels->GetSize(); i++)
-    {
-      MBadPixelsPix &bad = (*fBadPixels)[i];
+  for (Int_t i=0; i<badcam->GetSize(); i++)
+    {
+      MBadPixelsPix &bad = (*badcam)[i];
       if (bad.IsUncalibrated(typ))
         {
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationRelTimeCalc.h	(revision 5046)
@@ -22,4 +22,5 @@
 class MCalibrationRelTimeCam;
 class MGeomCam;
+class MBadPixelsIntensityCam;
 class MBadPixelsCam;
 
@@ -36,4 +37,5 @@
   
   // Pointers
+  MBadPixelsIntensityCam     *fIntensBad;        //  Bad Pixels Intensity Cam
   MBadPixelsCam              *fBadPixels;        //  Bad Pixels 
   MCalibrationIntensityRelTimeCam *fIntensCam;   //  Calibrated RelTimes for different intensities
@@ -54,7 +56,5 @@
   void   PrintUncalibrated( MBadPixelsPix::UncalibratedType_t typ, const char *text) const;
 
-  Int_t  PreProcess (MParList *pList);
   Bool_t ReInit     (MParList *pList); 
-  Int_t  Process    ();
   Int_t  PostProcess();
 
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.cc	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.cc	(revision 5046)
@@ -64,7 +64,9 @@
 #include "MHCalibrationTestPix.h"
 
+#include "MCalibrationIntensityTestCam.h"
 #include "MCalibrationTestCam.h"
 #include "MCalibrationTestPix.h"
 
+#include "MBadPixelsIntensityCam.h"
 #include "MBadPixelsCam.h"
 #include "MBadPixelsPix.h"
@@ -88,5 +90,7 @@
 //
 MCalibrationTestCalc::MCalibrationTestCalc(const char *name, const char *title)
-    : fBadPixels(NULL), fTestCam(NULL), fCam(NULL), fGeom(NULL)
+    : fIntensBad(NULL), fBadPixels(NULL), 
+      fTestCam(NULL), fIntensCam(NULL), fCam(NULL), 
+      fGeom(NULL)
 {
         
@@ -102,41 +106,12 @@
 
 
-// -----------------------------------------------------------------------------------
-//
-// The following containers are searched and created if they were not found:
-//
-//  - MBadPixelsCam
-//
-Int_t MCalibrationTestCalc::PreProcess(MParList *pList)
-{
-  
-  // 
-  // Containers that are created in case that they are not there.
-  //
-  fBadPixels = (MBadPixelsCam*)pList->FindCreateObj(AddSerialNumber("MBadPixelsCam"));
-  if (!fBadPixels)
-    {
-      *fLog << err << "Could not find or create MBadPixelsCam ... aborting." << endl;
-      return kFALSE;
-    }
-  
-  fCam = (MCalibrationTestCam*)pList->FindCreateObj("MCalibrationTestCam");
-  if (!fCam)
-    {
-      *fLog << err << "Could not find or create MCalibrationTestCam ... aborting." << endl;
-      return kFALSE;
-    }
-  
-  return kTRUE;
-}
-
-
 // --------------------------------------------------------------------------
 //
 // Search for the following input containers and abort if not existing:
-//  - MGeomCam
-//  - MHCalibrationTestCam
+// - MGeomCam
+// - MHCalibrationTestCam
+// - MCalibrationIntensityTestCam or MCalibrationTestCam 
+// - MBadPixelsIntensityCam or MBadPixelsCam
 // 
-//
 Bool_t MCalibrationTestCalc::ReInit(MParList *pList )
 {
@@ -155,4 +130,31 @@
       *fLog << err << "Maybe you forget to call an MFillH for the MHCalibrationTestCam before..." << endl;
       return kFALSE;
+    }
+
+  fIntensCam = (MCalibrationIntensityTestCam*)pList->FindObject(AddSerialNumber("MCalibrationIntensityTestCam"));
+  if (fIntensCam)
+    *fLog << inf << "Found MCalibrationIntensityTestCam ... " << endl;
+  else
+    {
+      fCam = (MCalibrationTestCam*)pList->FindObject(AddSerialNumber("MCalibrationTestCam"));
+      if (!fCam)
+        {
+          *fLog << err << "Cannot find MCalibrationTestCam ... abort." << endl;
+          *fLog << err << "Maybe you forget to call an MFillH for the MHCalibrationTestCam before..." << endl;
+          return kFALSE;
+        }
+    }
+
+  fIntensBad = (MBadPixelsIntensityCam*)pList->FindObject(AddSerialNumber("MBadPixelsIntensityCam"));
+  if (fIntensBad)
+    *fLog << inf << "Found MBadPixelsIntensityCam ... " << endl;
+  else
+    {
+      fBadPixels = (MBadPixelsCam*)pList->FindObject(AddSerialNumber("MBadPixelsCam"));
+      if (!fBadPixels)
+        {
+          *fLog << err << "Cannot find MBadPixelsCam ... abort." << endl;
+          return kFALSE;
+        }
     }
 
@@ -182,4 +184,7 @@
     return kFALSE;
 
+  MCalibrationTestCam *testcam = fIntensCam 
+    ? (MCalibrationTestCam*)fIntensCam->GetCam()  : fCam;
+
   //
   // Re-direct the output to an ascii-file from now on:
@@ -202,11 +207,11 @@
     {
       *fLog << " " << setw(7) << "Not interpolateable Pixels: " 
-            << Form("%s%3i%s%3i","Inner: ",fCam->GetNumUninterpolated(0),
-                    " Outer: ",fCam->GetNumUninterpolated(1)) << endl;
+            << Form("%s%3i%s%3i","Inner: ",testcam->GetNumUninterpolated(0),
+                    " Outer: ",testcam->GetNumUninterpolated(1)) << endl;
       *fLog << " " << setw(7) << "Biggest not-interpolateable cluster: " 
             << maxbad << endl;
     }
   
-  fCam->SetNumUninterpolatedInMaxCluster(maxbad);
+  testcam->SetNumUninterpolatedInMaxCluster(maxbad);
 
   *fLog << endl;  
@@ -234,4 +239,9 @@
   const UInt_t nareas   = fGeom->GetNumAreas();
   const UInt_t nsectors = fGeom->GetNumSectors();
+
+  MCalibrationTestCam *testcam = fIntensCam 
+    ? (MCalibrationTestCam*)fIntensCam->GetCam()  : fCam;
+  MBadPixelsCam       *badcam    = fIntensBad 
+    ? (MBadPixelsCam*)        fIntensBad->GetCam()  : fBadPixels;
 
   TArrayD lowlim      (nareas);
@@ -256,5 +266,5 @@
       
       MHCalibrationTestPix &hist = (MHCalibrationTestPix&)(*fTestCam)[i];
-      MCalibrationTestPix  &pix =                         (*fCam)[i];
+      MCalibrationTestPix  &pix =  (MCalibrationTestPix &) (*testcam)[i];
       //
       // We assume that the pixels have been interpolated so far. 
@@ -316,5 +326,5 @@
       const Float_t areaerr  = TMath::Sqrt(areavars[aidx]);
       
-      MCalibrationTestPix &avpix = fCam->GetAverageArea(aidx);
+      MCalibrationTestPix &avpix = (MCalibrationTestPix&)testcam->GetAverageArea(aidx);
       avpix.SetNumPhotons   (areamean);
       avpix.SetNumPhotonsErr(areaerr );
@@ -385,5 +395,5 @@
       
       MHCalibrationTestPix &hist = (MHCalibrationTestPix&)(*fTestCam)[i];
-      MCalibrationTestPix  &pix =                         (*fCam)[i];
+      MCalibrationTestPix  &pix =  (MCalibrationTestPix&) (*testcam)[i];
 
       const Int_t    aidx         = (*fGeom)[i].GetAidx();
@@ -401,5 +411,5 @@
                 << Form("%8.2f out of %3.1f sigma limit: ",nphot,fPhotErrLimit)
                 << Form("[%8.2f,%8.2f] pixel%4i",lowlim[aidx],upplim[aidx],i) << endl;
-          MBadPixelsPix &bad = (*fBadPixels)[i];
+          MBadPixelsPix &bad = (*badcam)[i];
           bad.SetUncalibrated( MBadPixelsPix::kDeviatingNumPhots );
           bad.SetUnsuitable  ( MBadPixelsPix::kUnsuitableRun     );
@@ -436,5 +446,5 @@
       
 
-      MCalibrationTestPix &avpix = fCam->GetAverageArea(aidx);
+      MCalibrationTestPix &avpix = (MCalibrationTestPix&)testcam->GetAverageArea(aidx);
 
       if (areavars[aidx] < 0. || areaphotons[aidx] <= 0.)
@@ -479,5 +489,5 @@
         }
       
-      MCalibrationTestPix &avpix = fCam->GetAverageSector(sector);
+      MCalibrationTestPix &avpix = (MCalibrationTestPix&)testcam->GetAverageSector(sector);
 
       if (sectorvars[sector] < 0. || sectorphotons[sector] <= 0.)
@@ -513,4 +523,7 @@
 {
   
+  MCalibrationTestCam *testcam = fIntensCam 
+    ? (MCalibrationTestCam*)fIntensCam->GetCam()  : fCam;
+
   const Int_t areas  = fGeom->GetNumAreas();
   TArrayI *newarr[areas];
@@ -519,8 +532,9 @@
     newarr[aidx] = new TArrayI(0);
 
-  for (Int_t i=0; i<fCam->GetSize(); i++)
+  for (Int_t i=0; i<testcam->GetSize(); i++)
     {
       const Int_t aidx = (*fGeom)[i].GetAidx();
-      if ((*fCam)[i].IsExcluded())
+      MCalibrationTestPix &pix = (MCalibrationTestPix&)(*testcam)[i];
+      if (pix.IsExcluded())
         {
           const Int_t size = newarr[aidx]->GetSize();
@@ -542,5 +556,5 @@
           num++;
         }
-      fCam->SetNumUninterpolated(newarr[aidx]->GetSize(),aidx);
+      testcam->SetNumUninterpolated(newarr[aidx]->GetSize(),aidx);
       *fLog << endl;
     }
@@ -553,14 +567,20 @@
 {
 
+  MCalibrationTestCam *testcam = fIntensCam 
+    ? (MCalibrationTestCam*)fIntensCam->GetCam()  : fCam;
+
   TArrayI arr(0);
   
-  for (Int_t i=0; i<fCam->GetSize(); i++)
-    if ((*fCam)[i].IsExcluded())
-      {
+  for (Int_t i=0; i<testcam->GetSize(); i++)
+    {
+      MCalibrationTestPix &pix = (MCalibrationTestPix&)(*testcam)[i];
+      if (pix.IsExcluded())
+        {
         const Int_t s = arr.GetSize();
         arr.Set(s+1);
         arr[s] = i;
-      }
-
+        }
+    }
+  
   const Int_t size = arr.GetSize();
   
@@ -634,8 +654,4 @@
 }
 
-
-
-
-
 // --------------------------------------------------------------------------
 //
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.h	(revision 5045)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationTestCalc.h	(revision 5046)
@@ -20,5 +20,7 @@
 
 class MHCalibrationTestCam;
+class MCalibrationIntensityTestCam;
 class MCalibrationTestCam;
+class MBadPixelsIntensityCam;
 class MBadPixelsCam;
 class MGeomCam;
@@ -37,8 +39,10 @@
   
   // Pointers
-  MBadPixelsCam         *fBadPixels;   //! Bad Pixels 
-  MHCalibrationTestCam  *fTestCam;     //! Calibrated Photons in the camera
-  MCalibrationTestCam   *fCam;         //! Storage Calibrated Photons in the camera
-  MGeomCam              *fGeom;        //! Camera geometry
+  MBadPixelsIntensityCam       *fIntensBad;   //! Bad Pixels
+  MBadPixelsCam                *fBadPixels;   //! Bad Pixels 
+  MHCalibrationTestCam         *fTestCam;     //! Calibrated Photons in the camera
+  MCalibrationIntensityTestCam *fIntensCam;   //! Storage Calibrated Photons in the camera
+  MCalibrationTestCam          *fCam;         //! Storage Calibrated Photons in the camera
+  MGeomCam                     *fGeom;        //! Camera geometry
 
   // functions
@@ -50,5 +54,4 @@
   void   LoopNeighbours( const TArrayI &arr, TArrayI &known, Int_t &clustersize, const Int_t idx );
   
-  Int_t  PreProcess (MParList *pList);
   Bool_t ReInit     (MParList *pList); 
   Int_t  Process    ();
