Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5651)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5652)
@@ -46,4 +46,6 @@
 #include "MGeomPix.h"
 
+#include "MLog.h"
+
 #include <TOrdCollection.h>
 #include <TGraphErrors.h>
@@ -147,22 +149,12 @@
 // -------------------------------------------------------------------
 //
-// Returns a TGraphErrors with the number of photo-electrons vs. 
-// the extracted signal of pixel "pixid". 
-//
-TGraphErrors *MCalibrationIntensityChargeCam::GetPhePerCharge( const UInt_t pixid, const MCalibrationCam::PulserColor_t col)
-{
-  
-  Int_t size = 0;
-  
-  if (col == MCalibrationCam::kNONE)
-    size = GetSize();
-  else
-    for (Int_t i=0;i<GetSize();i++)
-      {
-        MCalibrationChargeCam *cam = (MCalibrationChargeCam*)GetCam(i);
-        if (cam->GetPulserColor() == col)
-          size++;
-      }
-
+// Returns a TGraphErrors with the mean effective number of photo-electrons divided by 
+// the mean charge of that pixel vs. the mean number of photo-electrons.
+//
+TGraphErrors *MCalibrationIntensityChargeCam::GetPhePerCharge( const UInt_t pixid, const MGeomCam &geom, const MCalibrationCam::PulserColor_t col)
+{
+  
+  Int_t size = CountNumValidEntries(pixid,col);
+  
   if (size == 0)
     return NULL;
@@ -173,5 +165,7 @@
   TArrayF sigerr(size);
   
-  for (Int_t i=0;i<size;i++)
+  Int_t cnt = 0;
+
+  for (Int_t i=0;i<GetSize();i++)
     {
       //
@@ -186,5 +180,5 @@
       // Get the calibration pix from the calibration cam
       //
-      MCalibrationChargePix &pix = (MCalibrationChargePix&)(*cam)[pixid];
+      const MCalibrationChargePix &pix = (MCalibrationChargePix&)(*cam)[pixid];
       //
       // Don't use bad pixels
@@ -196,19 +190,27 @@
       // converted value!
       //
-      sig   [i] = pix.GetConvertedMean();
-      sigerr[i] = pix.GetConvertedMeanErr();
-      //
-      const Float_t phe = pix.GetPheFFactorMethod();
-      const Float_t err = pix.GetPheFFactorMethodErr();
+      const Int_t aidx = geom[pixid].GetAidx();
+      const MCalibrationChargePix &apix = (MCalibrationChargePix&)cam->GetAverageArea(aidx);
+
+      const Float_t q    = pix.GetConvertedMean();
+      const Float_t qerr = pix.GetConvertedMeanErr();
+      //
+      const Float_t phe = apix.GetPheFFactorMethod();
+      const Float_t err = apix.GetPheFFactorMethodErr();
+
+      sig[cnt]       = q;
+      sigerr[cnt]    = qerr;
+      phepersig[cnt] = q > 0.00001 ? phe/q : -1.;
+
       Float_t var = 0.;
-      
-      phepersig[i]    = sig[i] > 0. ? pix.GetPheFFactorMethod()/sig[i] : -1.;
-      if (sig[i] > 0. && phe > 0.)
+
+      if (q > 0.00001 && phe > 0.00001)
         {
-          var = err * err / phe / phe + sigerr[i]*sigerr[i]/sig[i]/sig[i];
-          if (var > 0.001)
-            var = TMath::Sqrt(var)*phepersig[i];
+          var = err * err / phe / phe + qerr*qerr/q/q;
+          if (var > 0.00001)
+            var = TMath::Sqrt(var)*phepersig[cnt];
         }
-      phepersigerr[i] = var;
+      phepersigerr[cnt] = var;
+      cnt++;
     }
   
@@ -217,6 +219,6 @@
                                      sigerr.GetArray(),phepersigerr.GetArray());
   gr->SetTitle(Form("%s%3i","Pixel ",pixid));
-  gr->GetXaxis()->SetTitle("Q [FADC counts]");
-  gr->GetYaxis()->SetTitle("photo-electrons / Q [FADC cts ^{-1}]");      
+  gr->GetXaxis()->SetTitle("<photo-electrons> [1]");
+  gr->GetYaxis()->SetTitle("<photo-electrons> / Q [FADC cts^{-1}]");      
   return gr;
 }
@@ -412,5 +414,5 @@
 
 
-Int_t MCalibrationIntensityChargeCam::CountNumValidEntries(const UInt_t pixid, const MCalibrationCam::PulserColor_t col)
+Int_t MCalibrationIntensityChargeCam::CountNumValidEntries(const UInt_t pixid, const MCalibrationCam::PulserColor_t col) const
 {
 
@@ -420,14 +422,21 @@
     {
       const MCalibrationChargeCam *cam = (MCalibrationChargeCam*)GetCam(i);
-      const MCalibrationChargePix  &pix    = (MCalibrationChargePix&)(*cam)[pixid];
+      const MCalibrationChargePix &pix = (MCalibrationChargePix&)(*cam)[pixid];
 
       if (col == MCalibrationCam::kNONE)
-        if (pix.IsFFactorMethodValid())
-          nvalid++;
-      else
-        if (cam->GetPulserColor() == col)
+        {
           if (pix.IsFFactorMethodValid())
             nvalid++;
-    }
+        }
+      else
+        {
+          if (cam->GetPulserColor() == col)
+            {
+              if (pix.IsFFactorMethodValid())
+                nvalid++;
+            }
+        }
+    }
+  
   return nvalid;
 }
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h	(revision 5651)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.h	(revision 5652)
@@ -44,9 +44,9 @@
     ((MCalibrationChargeCam*)GetCam())->SetNumPhotonsPINDiodeMethodErr(f); }   
 
-  Int_t CountNumValidEntries(const UInt_t pixid, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
+  Int_t CountNumValidEntries(const UInt_t pixid, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE) const;
   
   TGraphErrors *GetRazmikPlot( const UInt_t pixid );
   TGraphErrors *GetPheVsCharge( const UInt_t pixid, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
-  TGraphErrors *GetPhePerCharge( const UInt_t pixid, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
+  TGraphErrors *GetPhePerCharge( const UInt_t pixid, const MGeomCam &geom, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
   TGraphErrors *GetPheVsChargePerArea( const Int_t aidx, const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
   TH2F         *GetRazmikPlotResults( const Int_t aidx, const MGeomCam &geom );
