Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 4578)
+++ trunk/MagicSoft/Mars/Changelog	(revision 4579)
@@ -19,4 +19,31 @@
 
                                                  -*-*- END OF LINE -*-*-
+
+
+  2004/08/11: Hendrik Bartko
+  * mcalib/MCalibrateData.[h,cc]:
+    - add SetPedestalType to choose whether to calibrate the pedestal 
+      for each run or each event
+    - add EnablePedestalType to enable to calibrate the pedestal for 
+      each run or each event
+    - add DisablePedestalType to disable to calibrate the pedestal for 
+      each run or each event
+    - add TestFlag test whether to do the run and / or event pedestal
+      calculation
+    - add SetNamePedADCRunContainer to change name of pedestal input 
+      container for run pedestals
+    - add SetNamePedADCEventContainer to change name of pedestal input 
+      container for event pedestals
+    - add SetNamePedPhotRunContainer to change name of pedestal output 
+      container for run pedestals
+    - add SetNamePedPhotEventContainer to change name of pedestal output 
+      container for run pedestals
+   * mbadpixels/MBadPixelsCalc.cc:
+     - in MBadPixelsCalc::Process() called the MPedPhotCam::ReCalc to
+       calculate the mean values of the pedestal and RMS for the 
+areas
+       and sectors of the camera.
+
+
 
   2004/08/10: Thomas Bretz
Index: trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 4578)
+++ trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 4579)
@@ -257,9 +257,10 @@
 Int_t MBadPixelsCalc::Process()
 {
-    if (fPedestalLevel>0)
-        CheckPedestalRms();
-
-    return kTRUE;
-}
-
-
+  if (fPedestalLevel>0){
+    CheckPedestalRms();
+    fPedPhotCam->ReCalc(*fGeomCam,fBadPixels);
+  }
+  return kTRUE;
+}
+
+
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 4578)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 4579)
@@ -20,4 +20,5 @@
 !   Author(s): Wolfgang Wittek 02/2004 <mailto:wittek@mppmu.mpg.de>
 !   Author(s): Markus Gaug     04/2004 <mailto:markus@ifae.es>
+!   Author(s): Hendrik Bartko  08/2004 <mailto:hbartko@mppmu.mpg.de>
 !
 !   Copyright: MAGIC Software Development, 2000-2004
@@ -88,5 +89,5 @@
 MCalibrateData::MCalibrateData(CalibrationMode_t calmode,const char *name, const char *title) 
     : fCam(NULL), fPedestal(NULL), fBadPixels(NULL), fCalibrations(NULL), fSignals(NULL), 
-      fPedPhot(NULL), fCerPhotEvt(NULL), fCalibrationMode(calmode)
+      fPedPhot(NULL), fCerPhotEvt(NULL), fCalibrationMode(calmode), fFlags(kRun), fNamePedADCRunContainer("MPedestalCam"), fNamePedADCEventContainer("MPedestalCamFromData"), fNamePedPhotRunContainer("MPedPhotCam"), fNamePedPhotEventContainer("MPedPhotCamFromData")
 {
     fName  = name  ? name  : "MCalibrateData";
@@ -111,10 +112,30 @@
 Int_t MCalibrateData::PreProcess(MParList *pList)
 {
-    fPedestal = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
+
+  // input containers
+
+
+  if (TestFlag(kRun))
+  {
+    fPedestal = (MPedestalCam*)pList->FindObject(fNamePedADCRunContainer, AddSerialNumber("MPedestalCam"));
     if (!fPedestal)
-    {
-      *fLog << err << AddSerialNumber("MPedestalCam") << " not found ... aborting" << endl;
-        return kFALSE;
-    }
+    {  
+      *fLog << err << "container 'MPedestalCam'" 
+	    << " not found ... aborting" << endl;
+      return kFALSE;
+    }
+  }
+
+
+  if (TestFlag(kEvent))
+  {
+    fPedestalFromData = (MPedestalCam*)pList->FindObject(fNamePedADCEventContainer, AddSerialNumber("MPedestalCam"));
+    if (!fPedestalFromData)
+    {
+      *fLog << err << "container 'MPedestalCamFromData'" 
+	    << " not found ... aborting" << endl;
+      return kFALSE;
+    }
+  }
 
 
@@ -150,7 +171,28 @@
     }
 
-    fPedPhot = (MPedPhotCam*)pList->FindCreateObj(AddSerialNumber("MPedPhotCam"));
-    if (!fPedPhot)
-        return kFALSE;
+    // output containers
+
+    if (TestFlag(kRun))
+    {
+      fPedPhot = (MPedPhotCam*)pList->FindCreateObj(AddSerialNumber("MPedPhotCam"), fNamePedPhotRunContainer);
+      if (!fPedPhot)
+      {
+	*fLog << err << "container 'MPedPhotCam'" 
+	      << " not found ... aborting" << endl;
+        return kFALSE;
+      }
+    }
+
+
+    if (TestFlag(kEvent))
+    {  
+      fPedPhotFromData = (MPedPhotCam*)pList->FindCreateObj(AddSerialNumber("MPedPhotCam"), fNamePedPhotEventContainer);
+      if (!fPedPhotFromData)
+      {
+	*fLog << err << "container 'MPedPhotCamFromData'" 
+	      << " not found ... aborting" << endl;
+        return kFALSE;
+      }
+    }
 
     fCerPhotEvt = (MCerPhotEvt*)pList->FindCreateObj(AddSerialNumber("MCerPhotEvt"));
@@ -185,4 +227,7 @@
     }
 
+
+  if (TestFlag(kRun))
+  {
   //---------------------------------------------
   // fill MPedPhot container using the informations from
@@ -240,4 +285,5 @@
 
   fPedPhot->SetReadyToSave();
+  }
 
   return kTRUE;
@@ -376,4 +422,70 @@
   fCerPhotEvt->SetReadyToSave();
   
+
+
+  if(TestFlag(kEvent)) 
+  {
+
+  //---------------------------------------------
+  // fill MPedPhot(FromData) container using the informations from
+  // MPedestalCam, MExtractedSignalCam and MCalibrationCam
+
+  fNumUsedHiGainFADCSlices = fSignals->GetNumUsedHiGainFADCSlices();
+
+  // is pixid equal to pixidx ?
+  if (    (Int_t)(fPedestal->GetSize()) != fSignals->GetSize())
+  {
+    *fLog << err << "MCalibrateData::ReInit(); sizes of MPedestalCam and MCalibrationCam are different" 
+          << endl;
+  } 
+
+  /*
+  *fLog << all << "MCalibrateData::ReInit(); fill MPedPhotCam container"
+        << endl;
+  *fLog << all << "     fNumUsedHiGainADCSlices = " 
+        <<  fNumUsedHiGainFADCSlices << endl;
+  *fLog << all << "     pixid, calibrationConversionFactor, ped, pedRMS, pedphot, pedphotRMS :"
+        << endl;
+  */
+  for (Int_t pixid=0; pixid<fPedestalFromData->GetSize(); pixid++)
+  {
+    const MPedestalPix    &ped = (*fPedestalFromData)[pixid];
+
+    // pedestals/(used FADC slices)   in [ADC] counts
+    Float_t pedes  = ped.GetPedestal()    * fNumUsedHiGainFADCSlices;
+    Float_t pedrms = ped.GetPedestalRms() * sqrt(fNumUsedHiGainFADCSlices);
+
+    //----------------------------------
+    // get phe/ADC conversion factor
+
+    Float_t hiloconv;
+    Float_t hiloconverr;
+    Float_t calibConv;
+    Float_t calibFFactor;
+
+    if ( !GetConversionFactor(pixid, hiloconv, hiloconverr,
+			      calibConv, calibFFactor ))
+      continue;
+
+    //---------------------------------- 
+
+    // pedestals/(used FADC slices)   in [number of photons] 
+    Float_t pedphot    = pedes  * calibConv;
+    Float_t pedphotrms = pedrms * calibConv;
+
+    (*fPedPhotFromData)[pixid].Set(pedphot, pedphotrms);
+
+    //    *fLog << all << pixid << ",  " << calibConv << ",  "
+    //      << ped.GetPedestal() << ",  " << ped.GetPedestalRms() << ",  " 
+    //       << pedphot << ",  " << pedphotrms << endl;
+  }
+
+  //---------------------------------------------
+
+  fPedPhotFromData->SetReadyToSave();
+
+  }
+
+
   return kTRUE;
 }
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 4578)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.h	(revision 4579)
@@ -37,4 +37,5 @@
     MGeomCam              *fCam;
     MPedestalCam          *fPedestal;     // Pedestals/slice [ADC counts]
+    MPedestalCam          *fPedestalFromData;  // Pedestals/slice [ADC counts]
     MBadPixelsCam         *fBadPixels;    // Bad Pixels information
     MCalibrationChargeCam *fCalibrations; // Calibration constants
@@ -43,4 +44,5 @@
 
     MPedPhotCam           *fPedPhot;      // Pedestals/(used slices) [photons]
+    MPedPhotCam           *fPedPhotFromData;// Pedestals/(used slices) [photons]
     MCerPhotEvt           *fCerPhotEvt;   // Cerenkov Photon Event used for calculation
 
@@ -50,4 +52,12 @@
     Float_t  fConversionHiLo;
     UShort_t fCalibrationMode;
+
+    Int_t        fFlags;            // Flags defining to calibrate the pedestal each event or each run
+ 
+    TString fNamePedADCRunContainer;           // name of the 'MPedestalCam' container
+    TString fNamePedADCEventContainer;         // name of the 'MPedestalCam' container
+    TString fNamePedPhotRunContainer;          // name of the 'MPedestalCam' container
+    TString fNamePedPhotEventContainer;        // name of the 'MPedestalCam' container
+
 
     Bool_t GetConversionFactor(UInt_t, 
@@ -63,8 +73,28 @@
     static const CalibrationMode_t kDefault = kBlindPixel;
 
+    enum PedestalType_t{
+      kRun = BIT(0),
+      kEvent = BIT(1)
+    };
+   
+
+
     MCalibrateData(CalibrationMode_t calmode = kDefault,const char *name=NULL, const char *title=NULL);
 
     void SetConversionHiLo(Float_t conv) { fConversionHiLo = conv; };
     void SetCalibrationMode(CalibrationMode_t calmode=kDefault){ fCalibrationMode=calmode;};
+
+    void SetPedestalType(PedestalType_t i) { fFlags  =  i; } // Int_t f
+    void EnablePedestalType(PedestalType_t i)   { fFlags |=  i; } // Int_t f
+    void DisablePedestalType(PedestalType_t i)  { fFlags &= ~i; } // Int_t f
+    Bool_t TestFlag(PedestalType_t i) const { return fFlags&i; }
+
+
+    void SetNamePedADCRunContainer(const char *name)    { fNamePedADCRunContainer = name; }
+    void SetNamePedADCEventContainer(const char *name)    { fNamePedADCEventContainer = name; }
+
+    void SetNamePedPhotRunContainer(const char *name)    { fNamePedPhotRunContainer = name; }
+    void SetNamePedPhotEventContainer(const char *name)    { fNamePedPhotEventContainer = name; }
+    
     
     ClassDef(MCalibrateData, 0)   // Task to calculate cerenkov photons using calibration constants
