Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5659)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityChargeCam.cc	(revision 5660)
@@ -507,4 +507,9 @@
 
 
+// --------------------------------------------------------------------
+//
+// Returns the number of camera entries matching the required colour 
+// and the requirement that pixel "pixid" has been correctly calibrated
+//
 Int_t MCalibrationIntensityChargeCam::CountNumValidEntries(const UInt_t pixid, const MCalibrationCam::PulserColor_t col) const
 {
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5659)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 5660)
@@ -40,6 +40,15 @@
 #include "MCalibrationIntensityRelTimeCam.h"
 #include "MCalibrationRelTimeCam.h"
+#include "MCalibrationChargeCam.h"
+#include "MCalibrationRelTimePix.h"
+#include "MCalibrationChargePix.h"
+
+#include "MGeomCam.h"
+#include "MGeomPix.h"
+
+#include "MLogManip.h"
 
 #include <TOrdCollection.h>
+#include <TGraphErrors.h>
 
 ClassImp(MCalibrationIntensityRelTimeCam);
@@ -70,2 +79,180 @@
 }
 
+TGraphErrors *MCalibrationIntensityRelTimeCam::GetTimeResVsCharge( const UInt_t pixid, const MCalibrationIntensityChargeCam &chargecam,
+                                  const MCalibrationCam::PulserColor_t col)
+{
+
+  if (chargecam.GetSize() != GetSize())
+    {
+      *fLog << err << GetDescriptor() << ": Size mismatch between MCalibrationIntensityRelTimeCam "
+            << "and MCalibrationIntensityChargeCam. " << endl;
+      return NULL;
+    }
+  
+  Int_t size = CountNumEntries(col);
+  
+  if (size == 0)
+    return NULL;
+
+  if (size != chargecam.CountNumEntries(col))
+    {
+      *fLog << err << GetDescriptor() << ": Size mismatch in colour between MCalibrationIntensityRelTimeCam "
+            << "and MCalibrationIntensityChargeCam. " << endl;
+      return NULL;
+    }
+  
+  const Int_t nvalid = chargecam.CountNumValidEntries(pixid,col);
+
+  if (nvalid == 0)
+    {
+      *fLog << err << GetDescriptor() << ": Only un-calibrated events in pixel: " << pixid << endl;
+      return NULL;
+    }
+
+  TArrayF res(nvalid);
+  TArrayF reserr(nvalid);
+  TArrayF sig(nvalid);
+  TArrayF sigerr(nvalid);
+
+  const Float_t sqrt2   = 1.414;
+  const Float_t fadc2ns = 3.333;
+  
+  Int_t cnt = 0;
+  
+  for (Int_t i=0;i<GetSize();i++)
+    {
+      //
+      // Get the calibration cam from the intensity cam
+      //
+      MCalibrationChargeCam *cam     = (MCalibrationChargeCam*)chargecam.GetCam(i);
+      MCalibrationRelTimeCam *relcam = (MCalibrationRelTimeCam*)GetCam(i);
+
+      if (col != MCalibrationCam::kNONE)
+        if (relcam->GetPulserColor() != col)
+          continue;
+      //
+      // Get the calibration pix from the calibration cam
+      //
+      MCalibrationChargePix  &pix    = (MCalibrationChargePix&)(*cam)[pixid];
+      MCalibrationRelTimePix &relpix = (MCalibrationRelTimePix&)(*relcam)[pixid];
+      //
+      // Don't use bad pixels
+      //
+      if (!pix.IsFFactorMethodValid())
+        continue;
+      //
+      res[cnt]    = relpix.GetTimePrecision() / sqrt2 * fadc2ns;
+      reserr[cnt] = relpix.GetTimePrecisionErr() / sqrt2 * fadc2ns;
+      //
+      sig   [cnt] = pix.GetPheFFactorMethod();
+      sigerr[cnt] = pix.GetPheFFactorMethodErr();
+      cnt++;
+    }
+
+  TGraphErrors *gr = new TGraphErrors(nvalid,
+                                     sig.GetArray(),res.GetArray(),
+                                     sigerr.GetArray(),reserr.GetArray());
+  gr->SetTitle(Form("%s%3i","Pixel ",pixid));
+  gr->GetXaxis()->SetTitle("<Photo-electrons> [1]");
+  gr->GetYaxis()->SetTitle("Time Resolution [ns]");      
+  return gr;
+}
+
+
+TGraphErrors *MCalibrationIntensityRelTimeCam::GetTimeResVsChargePerArea( const Int_t aidx,const MCalibrationIntensityChargeCam &chargecam, const MGeomCam &geom, const MCalibrationCam::PulserColor_t col)
+{
+  
+  Int_t size = CountNumEntries(col);
+  
+  if (size == 0)
+    return NULL;
+
+  if (size != chargecam.CountNumEntries(col))
+    {
+      *fLog << err << GetDescriptor() << ": Size mismatch in colour between MCalibrationIntensityRelTimeCam "
+            << "and MCalibrationIntensityChargeCam. " << endl;
+      return NULL;
+    }
+  
+  const Float_t sqrt2   = 1.414;
+  const Float_t fadc2ns = 3.333;
+  
+  TArrayF res(size);
+  TArrayF reserr(size);
+  TArrayF sig(size);
+  TArrayF sigerr(size);
+  
+  Int_t cnt = 0;
+
+  for (Int_t i=0;i<GetSize();i++)
+    {
+      //
+      // Get the calibration cam from the intensity cam
+      //
+      MCalibrationRelTimeCam *relcam = (MCalibrationRelTimeCam*)GetCam(i);
+      MCalibrationChargeCam *cam = (MCalibrationChargeCam*)chargecam.GetCam(i);
+
+      if (col != MCalibrationCam::kNONE)
+        if (relcam->GetPulserColor() != col)
+          continue;
+
+      const MCalibrationChargePix &apix = (MCalibrationChargePix&)cam->GetAverageArea(aidx);
+      const Float_t phe          = apix.GetPheFFactorMethod();
+      const Float_t pheerr       = apix.GetPheFFactorMethodErr();
+
+      sig[cnt]       = phe;
+      sigerr[cnt]    = pheerr;
+
+      Double_t resol  = 0.;
+      Double_t resol2 = 0.;
+      Double_t var    = 0.;
+      Int_t    num    = 0;
+     //
+      // Get the area calibration pix from the calibration cam
+      //
+      for (Int_t i=0; i<cam->GetSize(); i++)
+        {
+          const MCalibrationChargePix &pix = (MCalibrationChargePix&)(*cam)[i];
+          const MCalibrationRelTimePix &relpix = (MCalibrationRelTimePix&)(*relcam)[i];
+          //
+          // Don't use bad pixels
+          //
+          if (!pix.IsFFactorMethodValid())
+            continue;
+          //
+          //
+          if (aidx != geom[i].GetAidx())
+            continue;
+          
+          resol  += relpix.GetTimePrecision();
+          resol2 += relpix.GetTimePrecision()*relpix.GetTimePrecision();
+          num++;
+        }
+      
+      if (num > 1)
+        {
+          resol /= num;
+          var  = (resol2 - resol*resol*num) / (num-1);
+
+          res[cnt] = resol * fadc2ns / sqrt2;
+          if (var > 0.)
+            reserr[cnt] = TMath::Sqrt(var)/ sqrt2 * fadc2ns;
+          else
+            reserr[cnt] = 0.;
+        }
+      else
+        {
+          res[cnt]    = -1.;
+          reserr[cnt] = 0.;
+        }
+      cnt++;
+    }
+  
+  TGraphErrors *gr = new TGraphErrors(size,
+                                      sig.GetArray(),res.GetArray(),
+                                      sigerr.GetArray(),reserr.GetArray());
+  gr->SetTitle(Form("%s%3i","Area Index ",aidx));
+  gr->GetXaxis()->SetTitle("<phes> [1]");
+  gr->GetYaxis()->SetTitle("Time Resolution [ns]");      
+  return gr;
+}
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 5659)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 5660)
@@ -6,4 +6,9 @@
 #endif
 
+#ifndef MARS_MCalibrationIntensityChargeCam
+#include "MCalibrationIntensityChargeCam.h"
+#endif
+
+class TGraphErrors;
 class MCalibrationIntensityRelTimeCam : public MCalibrationIntensityCam
 {
@@ -16,4 +21,10 @@
   MCalibrationIntensityRelTimeCam(const char *name=NULL, const char *title=NULL);
 
+  TGraphErrors *GetTimeResVsCharge( const UInt_t pixid, const MCalibrationIntensityChargeCam &chargecam,
+                                    const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
+  TGraphErrors *GetTimeResVsChargePerArea( const Int_t aidx, const MCalibrationIntensityChargeCam &chargecam,
+                                           const MGeomCam &geom,
+                                           const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
+
   ClassDef(MCalibrationIntensityRelTimeCam, 1) // Container Intensity Rel.Times Calibration Results Camera
 };
