Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 9329)
+++ trunk/MagicSoft/Mars/Changelog	(revision 9330)
@@ -81,4 +81,7 @@
      - consequently removed the kCT1Pulser bit
 
+  * mpedestal/MMcPedestalCopy.[h,cc]:
+    - fixed for MUX MCs (the pedestal has to be scaled)
+    - added option to process ceres data
 
 
Index: trunk/MagicSoft/Mars/mpedestal/MMcPedestalCopy.cc
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MMcPedestalCopy.cc	(revision 9329)
+++ trunk/MagicSoft/Mars/mpedestal/MMcPedestalCopy.cc	(revision 9330)
@@ -73,23 +73,4 @@
 // --------------------------------------------------------------------------
 //
-// Check for the run type. Return kTRUE if it is a MC run or if there
-// is no MC run header (old camera files) kFALSE in case of a different
-// run type
-//
-Bool_t MMcPedestalCopy::CheckRunType(MParList *pList) const
-{
-    const MRawRunHeader *run = (MRawRunHeader*)pList->FindObject(AddSerialNumber("MRawRunHeader"));
-    if (!run)
-    {
-      *fLog << warn << dbginf << "Warning - cannot check file type, " 
-	    << AddSerialNumber("MRawRunHeader") << " not found." << endl;
-        return kTRUE;
-    }
-
-    return run->IsMonteCarloRun();
-}
-
-// --------------------------------------------------------------------------
-//
 // Make sure that there is a MPedestalCam object in the parameter list.
 //
@@ -106,12 +87,55 @@
 Bool_t MMcPedestalCopy::ReInit(MParList *pList)
 {
+    const MRawRunHeader *run = (MRawRunHeader*)pList->FindObject(AddSerialNumber("MRawRunHeader"));
+    if (!run)
+    {
+        *fLog << warn << dbginf << "Warning - cannot check file type, " << AddSerialNumber("MRawRunHeader") << " not found." << endl;
+        return kTRUE;
+    }
+
     //
     // If it is no MC file skip this function...
     //
-    if (!CheckRunType(pList))
-      {
-	*fLog << inf << "This is no MC file... skipping." << endl;
+    if (!run->IsMonteCarloRun())
+    {
+        *fLog << inf << "This is no MC file... skipping." << endl;
         return kTRUE;
-      }
+    }
+
+    MPedestalCam *pedcam = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
+    if (!pedcam)
+    {
+        *fLog << err << "MPedestalCam not found... aborting." << endl;
+        return kFALSE;
+    }
+
+    // Get MMcRunHeader to check camera version
+    MMcRunHeader *mcrun = (MMcRunHeader*)pList->FindObject(AddSerialNumber("MMcRunHeader"));
+
+    // Check if it is a ceres file
+    if (mcrun && mcrun->GetCamVersion()==UShort_t(-1))
+    {
+        *fLog << inf << "This is a ceres file... subtracting Baseline from ElectronicNoise [MPedestalCam]." << endl;
+
+        MPedestalCam *noise = (MPedestalCam*)pList->FindObject(AddSerialNumber("ElectronicNoise"), "MPedestalCam");
+        if (!noise)
+        {
+            *fLog << err << "ElectronicNoise [MPedestalCam] not found... aborting." << endl;
+            return kFALSE;
+        }
+
+        const int num = pedcam->GetSize();
+        for (int i=0; i<num; i++)
+        {
+            const MPedestalPix &n = (*noise)[i];
+
+            (*pedcam)[i].Set(n.GetPedestal()/run->GetScale(),
+                             n.GetPedestalRms()/run->GetScale());
+        }
+
+        pedcam->SetReadyToSave();
+
+        return kTRUE;
+    }
 
     //
@@ -126,33 +150,19 @@
     }
 
-    MPedestalCam *pedcam = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
-    if (!pedcam)
-    {
-        *fLog << err << "MPedestalCam not found... aborting." << endl;
-        return kFALSE;
-    }
-
-    MMcRunHeader *mcrun = (MMcRunHeader*)pList->FindObject(AddSerialNumber("MMcRunHeader"));
     if (!mcrun)
-      *fLog << warn << dbginf << AddSerialNumber("MMcRunHeader") 
-	    << " not found... assuming camera<0.7" << endl;
-
-    const int num = pedcam->GetSize();
+        *fLog << warn << dbginf << AddSerialNumber("MMcRunHeader") << " not found... assuming camera<0.7" << endl;
 
     const Bool_t camver70 = mcrun && mcrun->GetCamVersion()>=70;
 
+    const int num = pedcam->GetSize();
     for (int i=0; i<num; i++)
     {
-        MPedestalPix &pix = (*pedcam)[i];
-
         // Here one should compute the Pedestal taking into account how
         // the MC makes the transformation analogic-digital for the FADC.
         // This is done only once per file -> not time critical.
-
         const Float_t pedest = fadc->GetPedestal(i);
         const Float_t sigma  = camver70 ? fadc->GetPedestalRmsHigh(i) : fadc->GetElecNoise(i);
 
-        pix.Set(pedest, sigma);
-
+        (*pedcam)[i].Set(pedest/run->GetScale(), sigma/run->GetScale());
     }
 
