Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 5859)
+++ trunk/MagicSoft/Mars/Changelog	(revision 5860)
@@ -33,4 +33,7 @@
     - speed up Process by storing pre-calculated calibration constants
       in arrays (needed 40% of CPU time of the eventloop before, now: 23%) 
+    - added new pointer to different MCalibrationChargeCam used for 
+      updates
+
 
   * mcalib/MCalibCalcFromPast.[h,cc]
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5859)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 5860)
@@ -143,5 +143,5 @@
 //
 MCalibrateData::MCalibrateData(CalibrationMode_t calmode,const char *name, const char *title) 
-    : fGeomCam(NULL),   fBadPixels(NULL), fCalibrations(NULL),
+    : fGeomCam(NULL),   fBadPixels(NULL), fCalibrations(NULL), fCalibUpdate(NULL),
       fQEs(NULL), fSignals(NULL), fCerPhotEvt(NULL), 
       fPedestalFlag(kNo), fSignalType(kPhot), fRenormFactor(1.)
@@ -232,4 +232,6 @@
             return kFALSE;
         }
+
+        SetCalibUpdate( fCalibrations );
     }
 
@@ -433,4 +435,8 @@
 Bool_t MCalibrateData::UpdateConversionFactors()
 {
+
+  *fLog << inf << GetDescriptor() 
+        << ": Updating Conversion Factors... " << endl;
+
     //
     // For the moment, we use only a dummy zenith for the calibration:
@@ -452,11 +458,8 @@
         Float_t calibQEVar    = 0.;
 
+        Float_t calibUpdate   = 1.;
+
         if(fCalibrationMode!=kNone)
           {
-            MCalibrationChargePix &pix = (MCalibrationChargePix&)(*fCalibrations)[pixidx];
-            
-            hiloconv   = pix.GetConversionHiLo   ();
-            hiloconverr= pix.GetConversionHiLoErr();
-            
             if ((*fBadPixels)[pixidx].IsUnsuitable())
               {
@@ -465,4 +468,10 @@
               }
             
+            MCalibrationChargePix &pix   = (MCalibrationChargePix&)(*fCalibrations)[pixidx];
+            MCalibrationChargePix &avpix = (MCalibrationChargePix&)fCalibrations->GetAverageArea(0);
+            
+            hiloconv   = pix.GetConversionHiLo   ();
+            hiloconverr= pix.GetConversionHiLoErr();
+            
             calibConv    = pix.GetMeanConvFADC2Phe();
             calibConvVar = pix.GetMeanConvFADC2PheVar();
@@ -471,10 +480,31 @@
             MCalibrationQEPix &qe = (MCalibrationQEPix&) (*fQEs)[pixidx];
 
+            if (fCalibUpdate)
+              {
+                MCalibrationChargePix &upix = (MCalibrationChargePix&)(*fCalibUpdate)[pixidx];
+                //
+                // Correct for the possible change in amplification of the individual pixels chain
+                // 
+                const Float_t pixmean = upix.GetConvertedMean();
+                calibUpdate = (pixmean == 0.) ? 1. : pix.GetConvertedMean() / pixmean;
+                //
+                // Correct for global shifts in light emission
+                // 
+                MCalibrationChargePix &ugpix = (MCalibrationChargePix&)fCalibUpdate->GetAverageArea(0);
+                MBadPixelsPix         &ubad  = (MBadPixelsPix&)        fCalibUpdate->GetAverageBadArea(0);
+                
+                //                if (ubad.IsUnsuitable())
+                //                  *fLog << err << "Average Area is unsuitable!!!!" << endl;
+
+                const Float_t globmean = avpix.GetConvertedMean();
+                calibUpdate = (globmean == 0.) ? 1. : ugpix.GetConvertedMean() / globmean;
+              }
+
             switch(fCalibrationMode)
               {
               case kFlatCharge:
                 {
-                  MCalibrationChargePix &avpix = (MCalibrationChargePix&)fCalibrations->GetAverageArea(0);
-                  calibConv    = avpix.GetMean() / (pix.GetMean() * fGeomCam->GetPixRatio(pixidx));
+                  calibConv    = avpix.GetConvertedMean() 
+                              / (pix.GetConvertedMean() * fGeomCam->GetPixRatio(pixidx));
                   calibConvVar = (avpix.GetMeanRelVar() + pix.GetMeanRelVar()) * calibConv * calibConv;
                   if (pix.IsFFactorMethodValid())
@@ -531,4 +561,5 @@
                 hiloconv    = 1.;
                 hiloconverr = 0.;
+                calibUpdate = 1.;
                 break;
               } /* switch calibration mode */
@@ -551,5 +582,5 @@
           }
 
-        calibConv *= fRenormFactor;
+        calibConv *= fRenormFactor * calibUpdate;
 
         fHiLoConv     [pixidx] = hiloconv;
