Index: trunk/MagicSoft/Mars/manalysis/MEnergyEstParam.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MEnergyEstParam.h	(revision 5728)
+++ trunk/MagicSoft/Mars/manalysis/MEnergyEstParam.h	(revision 5729)
@@ -58,4 +58,6 @@
     void SetCoeffB(const TArrayD &arr);
 
+    void SetVariables(const TArrayD &arr) { SetCoeff(arr); }
+
     Double_t GetCoeff(Int_t i) { return i<fA.GetSize()? fA[i] : fB[i-fA.GetSize()]; }
 
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5728)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5729)
@@ -66,6 +66,6 @@
 //     SetPedestalFlag(MCalibrateData::kEvent)  (calibration is done for each event)
 //
-//   By calling SetNamePedestalCam() and/or SetNamePedPhotCam() you
-//   can control the name of the MPedestalCam and/or MPedPhotCam container which is used.
+//   By calling AddPedestal() you can control the name of the
+//   MPedestalCam and/or MPedPhotCam container which is used.
 //
 //   Assume you want to calibrate "MPedestalCam" once and "MPedestalFromLoGain" [MPedestalCam]
@@ -76,6 +76,5 @@
 //     MCalibrateData cal2;
 //     cal2.SetCalibrationMode(MCalibrateData::kSkip);
-//     cal2.SetNamePedestalCam("MPedestalFromLoGain");
-//     cal2.SetNamePedPhotCam("MPedPhotFromLoGain")
+//     cal2.AddPedestal("FromLoGain");
 //     cal2.SetPedestalFlag(MCalibrateData::kEvent);
 //
@@ -133,7 +132,4 @@
 using namespace std;
 
-const TString MCalibrateData::fgNamePedestalCam  = "MPedestalCam";
-const TString MCalibrateData::fgNamePedPhotCam = "MPedPhotCam";
-
 // --------------------------------------------------------------------------
 //
@@ -145,11 +141,8 @@
 // - fCalibrationMode to kDefault
 // - fPedestalFlag to kNo
-// - fNamePedADCRunContainer    to "MPedestalCam"  
-// - fNamePedPhotRunContainer   to "MPedPhotCam"    
 //
 MCalibrateData::MCalibrateData(CalibrationMode_t calmode,const char *name, const char *title) 
-    : fGeomCam(NULL),   fPedestalMean(NULL), fPedestalRms(NULL),
-      fBadPixels(NULL), fCalibrations(NULL), fQEs(NULL), fSignals(NULL), 
-      fPedPhot(NULL),   fCerPhotEvt(NULL), fPedestalFlag(kNo)
+    : fGeomCam(NULL),   fBadPixels(NULL), fCalibrations(NULL),
+    fQEs(NULL), fSignals(NULL), fCerPhotEvt(NULL), fPedestalFlag(kNo)
 {
 
@@ -159,6 +152,20 @@
   SetCalibrationMode(calmode);
 
-  SetNamePedestalCam();
-  SetNamePedPhotCam();
+  fNamesPedestal.SetOwner();
+}
+
+void MCalibrateData::AddPedestal(const char *name)
+{
+    TString ped(name);
+    TString pho(name);
+    ped.Prepend("MPedestal");
+    pho.Prepend("MPedPhot");
+
+    fNamesPedestal.Add(new TNamed(ped, pho));
+}
+
+void MCalibrateData::AddPedestal(const char *pedestal, const char *pedphot)
+{
+    fNamesPedestal.Add(new TNamed(pedestal, pedphot));
 }
 
@@ -226,32 +233,38 @@
     }
 
-    //fPedestalMean = 0;
-    //fPedestalRms  = 0;
-    fPedPhot  = 0;
+    if (fNamesPedestal.GetSize()>0 && fPedestalFlag==kNo)
+    {
+        *fLog << warn << "Pedestal list contains entries, but mode is set to kNo... setting to kEvent." << endl;
+        fPedestalFlag = kEvent;
+    }
+
     if (fPedestalFlag)
     {
-        if (!fPedestalMean)
-        {
-            fPedestalMean = (MPedestalCam*)pList->FindObject(AddSerialNumber(fNamePedestalCam), "MPedestalCam");
-            if (!fPedestalMean)
+        if (fNamesPedestal.GetSize()==0)
+        {
+            *fLog << inf << "No container names specified... using default: MPedestalCam and MPedPhotCam." << endl;
+            AddPedestal();
+        }
+
+        fPedestalCams.Clear();
+        fPedPhotCams.Clear();
+
+        TIter Next(&fNamesPedestal);
+        TObject *o=0;
+        while ((o=Next()))
+        {
+            TObject *pedcam = pList->FindObject(AddSerialNumber(o->GetName()), "MPedestalCam");
+            if (!pedcam)
             {
-                *fLog << err << AddSerialNumber(fNamePedestalCam) << " [MPedestalCam] not found ... aborting" << endl;
+                *fLog << err << AddSerialNumber(o->GetName()) << " [MPedestalCam] not found ... aborting" << endl;
                 return kFALSE;
             }
-        }
-
-        if (!fPedestalRms)
-        {
-            fPedestalRms = (MPedestalCam*)pList->FindObject(AddSerialNumber(fNamePedestalCam), "MPedestalCam");
-            if (!fPedestalRms)
-            {
-                *fLog << err << AddSerialNumber(fNamePedestalCam) << " [MPedestalCam] not found ... aborting" << endl;
+            TObject *pedphot = pList->FindCreateObj("MPedPhotCam", AddSerialNumber(o->GetTitle()));
+            if (!pedphot)
                 return kFALSE;
-            }
-        }
-
-        fPedPhot = (MPedPhotCam*)pList->FindCreateObj("MPedPhotCam", AddSerialNumber(fNamePedPhotCam));
-        if (!fPedPhot)
-            return kFALSE;
+
+            fPedestalCams.Add(pedcam);
+            fPedPhotCams.Add(pedphot);
+        }
     }
 
@@ -281,14 +294,14 @@
 
     // Sizes might have changed
-    if (fPedestalFlag && (Int_t)fPedestalMean->GetSize() != fSignals->GetSize())
-    {
-        *fLog << err << "Size mismatch of MPedestalCam for Mean and MCalibrationCam... abort." << endl;
-        return kFALSE;
-    }
-
-    if (fPedestalFlag && (Int_t)fPedestalRms->GetSize() != fSignals->GetSize())
-    {
-        *fLog << err << "Size mismatch of MPedestalCam for RMS and MCalibrationCam... abort." << endl;
-        return kFALSE;
+    if (fPedestalFlag)
+    {
+        TIter Next(&fPedestalCams);
+        MPedestalCam *cam=0;
+        while ((cam=(MPedestalCam*)Next()))
+        if ((Int_t)cam->GetSize() != fSignals->GetSize())
+        {
+            *fLog << err << "Size mismatch of " << cam->GetDescriptor() << " and MCalibrationCam... abort." << endl;
+            return kFALSE;
+        }
     }
 
@@ -523,4 +536,5 @@
         if (pedestal)
         {
+            /*
             // pedestals/(used FADC slices)   in [ADC] counts
             const Float_t pedes  = (*fPedestalMean)[pixidx].GetPedestal()   * slices;
@@ -534,4 +548,25 @@
 
             (*fPedPhot)[pixidx].Set(pedphot, pedphotrms);
+            */
+            TIter NextPed(&fPedestalCams);
+            TIter NextPhot(&fPedPhotCams);
+
+            MPedestalCam *pedestal = 0;
+            MPedPhotCam  *pedphot  = 0;
+
+            while ((pedestal=(MPedestalCam*)NextPed()) &&
+                   (pedphot =(MPedPhotCam*)NextPhot()))
+            {
+                // pedestals/(used FADC slices)   in [ADC] counts
+                const Float_t pedes  = (*pedestal)[pixidx].GetPedestal()    * slices;
+                const Float_t pedrms = (*pedestal)[pixidx].GetPedestalRms() * sqrtslices;
+
+                // pedestals/(used FADC slices)   in [number of photons]
+                const Float_t mean = pedes  * calibConv;
+                const Float_t rms  = pedrms * calibConv;
+
+                (*pedphot)[pixidx].Set(mean, rms);
+                pedphot->SetReadyToSave();
+            }
         }
     }
@@ -542,7 +577,4 @@
         return kCONTINUE;
     }
-
-    if (pedestal)
-        fPedPhot->SetReadyToSave();
 
     if (data)
@@ -610,14 +642,10 @@
     }
 
-    if (fNamePedestalCam != fgNamePedestalCam)
-    {
-        out << "   " << GetUniqueName() << ".SetNamePedestalCam(";
-        out << fNamePedestalCam << ");" << endl;
-    }
-
-    if (fNamePedPhotCam  != fgNamePedPhotCam)
-    {
-        out << "   " << GetUniqueName() << ".SetNamePedPhotCam(";
-        out << fNamePedPhotCam << ");" << endl;
+    TIter Next(&fNamesPedestal);
+    TObject *o=0;
+    while ((o=Next()))
+    {
+        out << "   " << GetUniqueName() << ".AddPedestal(\"";
+        out << o->GetName() << "\", \"" << o->GetTitle() << "\");" << endl;
     }
 }
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 5728)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 5729)
@@ -34,23 +34,17 @@
 {
 private:
-  static const TString fgNamePedestalCam;    //! "MPedestalCam"
-  static const TString fgNamePedPhotCam;     //! "MPedPhotCam"
+  MGeomCam              *fGeomCam;       //! Camera geometry container
+  MBadPixelsCam         *fBadPixels;     //! Bad Pixels information
+  MCalibrationChargeCam *fCalibrations;  //! Calibration constants
+  MCalibrationQECam     *fQEs;           //! Quantum efficiencies
+  MExtractedSignalCam   *fSignals;       //! Integrated charge in FADCs counts
+  MCerPhotEvt           *fCerPhotEvt;    //! Cerenkov Photon Event used for calculation
   
-  MGeomCam              *fGeomCam;          //! Camera geometry container
-  MPedestalCam          *fPedestalMean;     //! Pedestals/slice [ADC counts]
-  MPedestalCam          *fPedestalRms;      //! Pedestals/slice [ADC counts]
-  MBadPixelsCam         *fBadPixels;        //! Bad Pixels information
-  MCalibrationChargeCam *fCalibrations;     //! Calibration constants
-  MCalibrationQECam     *fQEs;              //! Quantum efficiencies
-  MExtractedSignalCam   *fSignals;          //! Integrated charge in FADCs counts
+  UShort_t fCalibrationMode;             // Flag defining the calibration mode (CalibrationMode_t)
+  Byte_t   fPedestalFlag;                // Flags defining to calibrate the pedestal each event or each run
   
-  MPedPhotCam           *fPedPhot;          //! Pedestals/(used slices) [photons]
-  MCerPhotEvt           *fCerPhotEvt;       //! Cerenkov Photon Event used for calculation
-  
-  UShort_t fCalibrationMode;                // Flag defining the calibration mode (CalibrationMode_t)
-  Byte_t   fPedestalFlag;                   // Flags defining to calibrate the pedestal each event or each run
-  
-  TString  fNamePedestalCam;            // name of fPedestal
-  TString  fNamePedPhotCam;           // name of fPedPhot
+  TList fNamesPedestal;                  // Names of input and output pedestal conatainer
+  TList fPedestalCams;                   //! List of pointers to input MPedestalCam
+  TList fPedPhotCams;                    //! List of pointers to corresponding output MPedPhotCam
 
   Int_t Calibrate(Bool_t data, Bool_t pedestal) const;
@@ -95,17 +89,8 @@
   
   void   SetCalibrationMode ( CalibrationMode_t calmode=kDefault ) { fCalibrationMode=calmode; }
-  
-  void   SetNamePedestalCam(const char *name=fgNamePedestalCam.Data())
-  {
-      fNamePedestalCam  = name;
-  }
-  void SetPedestalCamMean(MPedestalCam *cam) { fPedestalMean = cam; }
-  void SetPedestalCamRms(MPedestalCam *cam)  { fPedestalRms  = cam; }
 
-  void   SetNamePedPhotCam(const char *name=fgNamePedPhotCam.Data())
-  {
-      fNamePedPhotCam   = name;
-  }
-  
+  void   AddPedestal(const char *name="Cam");
+  void   AddPedestal(const char *pedestal, const char *pedphot);
+
   ClassDef(MCalibrateData, 0)   // Task to calibrate FADC counts into Cherenkov photons 
 };
