Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 6679)
+++ trunk/MagicSoft/Mars/Changelog	(revision 6680)
@@ -37,4 +37,8 @@
    * mhcalib/MHCalibrationHiLoCam.cc
      - set default range up to 30.
+
+   * mhcalib/MHCalibrationChargeBlindPix.h
+     - take the TVectors out of the streamer, to be exectuable with 
+       root.04.02
 
  2005/02/24 Thomas Hengstebeck
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 6679)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.cc	(revision 6680)
@@ -83,6 +83,5 @@
 }
 
-TGraphErrors *MCalibrationIntensityRelTimeCam::GetTimeResVsCharge( const UInt_t pixid, const MCalibrationIntensityChargeCam &chargecam,
-                                  const MCalibrationCam::PulserColor_t col)
+TGraphErrors *MCalibrationIntensityRelTimeCam::GetTimeResVsCharge( const UInt_t pixid, const MCalibrationIntensityChargeCam &chargecam, const MCalibrationCam::PulserColor_t col)
 {
 
@@ -178,4 +177,173 @@
       return NULL;
     }
+
+  if (col == MCalibrationCam::kBLUE)
+    size -= 5;
+  if (col == MCalibrationCam::kNONE)
+    size -= 5;
+  
+  const Float_t sqrt2   = 1.414;
+  const Float_t fadc2ns = 3.333;
+  const Float_t norm    = fadc2ns / sqrt2;
+
+  TArrayD res(size);
+  TArrayD reserr(size);
+  TArrayD sig(size);
+  TArrayD sigerr(size);
+  
+  Int_t cnt = 0;
+
+  TH1D *h = 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 (relcam->GetPulserColor() != col && col != MCalibrationCam::kNONE)
+        continue;
+
+      const MCalibrationChargePix &apix = (MCalibrationChargePix&)cam->GetAverageArea(aidx);
+      const Double_t phe          = (Double_t)apix.GetPheFFactorMethod();
+      const Double_t pheerr       = (Double_t)apix.GetPheFFactorMethodErr();
+
+      if (relcam->GetPulserColor() == MCalibrationCam::kBLUE)
+	if (aidx == 0)
+	  {
+	    if (phe > 100. && phe < 190.)
+	      continue;
+	  }
+	else
+	  {
+	    if (phe > 200. && phe < 480.)
+	      continue;
+	  }
+
+      if (relcam->GetPulserColor() == MCalibrationCam::kUV)
+	*fLog << inf << "NUMBER: " << i << endl;
+
+      sig[cnt]       = phe;
+      sigerr[cnt]    = pheerr;
+
+      Double_t resol  = 0.;
+      Double_t resol2 = 0.;
+      Double_t var    = 0.;
+      Int_t    num    = 0;
+
+      MHCamera camres(geom,"CamRes","Time Resolution;Time Resolution [ns];channels");
+      //
+      // Get the area calibration pix from the calibration cam
+      //
+      for (Int_t j=0; j<cam->GetSize(); j++)
+        {
+          const MCalibrationChargePix &pix = (MCalibrationChargePix&)(*cam)[j];
+          const MCalibrationRelTimePix &relpix = (MCalibrationRelTimePix&)(*relcam)[j];
+          //
+          // Don't use bad pixels
+          //
+          if (!pix.IsFFactorMethodValid())
+            continue;
+          //
+          //
+          if (aidx != geom[j].GetAidx())
+            continue;
+          
+          const Double_t pres = (Double_t)relpix.GetTimePrecision();
+
+          resol  += pres;
+          resol2 += pres;
+          num++;
+          
+          camres.Fill(j,pres);
+          camres.SetUsed(j);
+        }
+      
+      if (num > 100)
+        {
+          resol /= num;
+          var  = (resol2 - resol*resol*num) / (num-1);
+
+          res[cnt] = resol;
+          if (var > 0.)
+            reserr[cnt] = TMath::Sqrt(var);
+          else
+            reserr[cnt] = 0.;
+
+          //
+          // Make also a Gauss-fit to the distributions. The RMS can be determined by 
+          // outlier, thus we look at the sigma and the RMS and take the smaller one, afterwards.
+          // 
+          h = camres.ProjectionS(TArrayI(),TArrayI(1,&aidx),"_py",750);
+          h->SetDirectory(NULL);
+          h->Fit("gaus","QL");
+          TF1 *fit = h->GetFunction("gaus");
+
+          Double_t ci2   = fit->GetChisquare();
+          Double_t sigma = fit->GetParameter(2);
+
+          if (ci2 > 500. || sigma > reserr[cnt])
+            {
+              h->Fit("gaus","QLM");
+              fit = h->GetFunction("gaus");
+
+              ci2   = fit->GetChisquare();
+              sigma = fit->GetParameter(2);
+            }
+          
+          const Double_t mean  = fit->GetParameter(1);
+          const Int_t ndf      = fit->GetNDF();
+          
+          *fLog << inf << "Mean number photo-electrons: " << sig[cnt] << endl;
+          *fLog << inf << "Time Resolution area idx: " << aidx << " Results: " << endl;
+          *fLog << inf << "Mean: " << Form("%4.3f",mean) 
+                << "+-" << Form("%4.3f",fit->GetParError(1))
+                << "  Sigma: " << Form("%4.3f",sigma) << "+-" << Form("%4.3f",fit->GetParError(2)) 
+                << "  Chisquare: " << Form("%4.3f",fit->GetChisquare()) << "  NDF  : " << ndf << endl;          
+
+          delete h;
+          gROOT->GetListOfFunctions()->Remove(fit);
+
+          if ((sigma < reserr[cnt] || reserr[cnt]<0.001) && ndf > 2)
+            {
+              res   [cnt] = mean;
+              reserr[cnt] = sigma;
+            }
+	  else
+	    *fLog << warn << "Do not take fit results, but Mean and RMS: " << Form("%4.3f",res[cnt]) << "+-" << Form("%4.3f",reserr[cnt]) << endl;
+
+          res[cnt]    *= norm;
+          reserr[cnt] *= norm;
+	  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;
+}
+
+TGraphErrors *MCalibrationIntensityRelTimeCam::GetTimeResVsSqrtPhePerArea( const Int_t aidx,const MCalibrationIntensityChargeCam &chargecam, const MGeomCam &geom, const MCalibrationCam::PulserColor_t col)
+{
+  
+  const Int_t size = CountNumEntries(col);
+  
+  if (size == 0)
+    return NULL;
+
+  const Int_t asiz = chargecam.CountNumEntries(col);
+
+  if (size != asiz)
+    {
+      *fLog << err << GetDescriptor() << ": Size mismatch in colour between MCalibrationIntensityRelTimeCam "
+            << "and MCalibrationIntensityChargeCam. " << endl;
+      return NULL;
+    }
   
   const Float_t sqrt2   = 1.414;
@@ -200,13 +368,14 @@
       MCalibrationChargeCam *cam = (MCalibrationChargeCam*)chargecam.GetCam(i);
 
-      if (relcam->GetPulserColor() != col)
+      if (relcam->GetPulserColor() != col && col != MCalibrationCam::kNONE)
         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;
+      const Float_t phesq        = phe > 0. ? TMath::Sqrt(phe) : 0.;
+      const Float_t phesqerr     = phe > 0. ? 0.5*apix.GetPheFFactorMethodErr()/phesq : 0.;
+
+      sig[cnt]       = phesq;
+      sigerr[cnt]    = phesqerr;
 
       Double_t resol  = 0.;
@@ -279,5 +448,5 @@
 
           
-          *fLog << inf << "Mean number photo-electrons: " << sig[cnt] << endl;
+          *fLog << inf << "Sqrt Mean number photo-electrons: " << sig[cnt] << endl;
           *fLog << inf << "Time Resolution area idx: " << aidx << " Results: " << endl;
           *fLog << inf << "Mean: " << Form("%4.3f",mean) 
@@ -310,5 +479,5 @@
                                       sigerr.GetArray(),reserr.GetArray());
   gr->SetTitle(Form("%s%3i","Area Index ",aidx));
-  gr->GetXaxis()->SetTitle("<phes> [1]");
+  gr->GetXaxis()->SetTitle("Sqrt(<phes>) [1]");
   gr->GetYaxis()->SetTitle("Time Resolution [ns]");      
   return gr;
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 6679)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityRelTimeCam.h	(revision 6680)
@@ -23,5 +23,10 @@
   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);
+
+  TGraphErrors *GetTimeResVsSqrtPhePerArea( const Int_t aidx, const MCalibrationIntensityChargeCam &chargecam,
                                            const MGeomCam &geom,
                                            const MCalibrationCam::PulserColor_t col=MCalibrationCam::kNONE);
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationPulseTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationPulseTimeCam.cc	(revision 6679)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationPulseTimeCam.cc	(revision 6680)
@@ -144,7 +144,6 @@
 
           *fLog << all 
-                << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Pix  ",pix->GetPixId(),
-                        ":            Mean Time: ",pix->GetMean()," +- ",pix->GetMeanErr(),
-                        "   Time Jitter: ",pix->GetSigma()," +- ",pix->GetSigmaErr())
+                << Form("Pix  %4i:  Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
+                        pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
 		<< endl;
           id++;
@@ -178,7 +177,6 @@
   {
     *fLog << all 
-          << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Area   ",pix->GetPixId(),
-                  ":  Mean Time: ",pix->GetMean()," +- ",pix->GetMeanErr(),
-                  "   Time Jitter: ",pix->GetSigma()," +- ",pix->GetSigmaErr())
+	  << Form("Pix  %4i:  Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
+		  pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
           << endl;
   }
@@ -188,7 +186,6 @@
   {
     *fLog << all 
-          << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Sector ",pix->GetPixId(),
-                  ":  Mean Time: ",pix->GetMean()," +- ",pix->GetMeanErr(),
-                  "   Time Jitter: ",pix->GetSigma()," +- ",pix->GetSigmaErr())
+	  << Form("Pix  %4i:  Mean Time: %4.2f+-%4.2f Time Jitter: %4.2f+-%4.2f",pix->GetPixId(),
+		  pix->GetMean(),pix->GetMeanErr(),pix->GetSigma(),pix->GetSigmaErr())
           << endl;
   }
@@ -231,20 +228,20 @@
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetMean();
+      val = pix.GetHiGainMean();
       break;
     case 1:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetMeanErr();
+      val = pix.GetHiGainMeanErr();
       break;
     case 2:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetSigma();
+      val = pix.GetHiGainSigma();
       break;
     case 3:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetSigmaErr();
+      val = pix.GetHiGainSigmaErr();
       break;
     case 4:
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h	(revision 6679)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h	(revision 6680)
@@ -33,6 +33,6 @@
   Float_t fNumSinglePheLimit;                // Minimum number of single-phe events 
 
-  TVector fASinglePheFADCSlices;             // Averaged FADC slice entries supposed single-phe events
-  TVector fAPedestalFADCSlices;              // Averaged FADC slice entries supposed pedestal   events
+  TVector fASinglePheFADCSlices;             //! Averaged FADC slice entries supposed single-phe events
+  TVector fAPedestalFADCSlices;              //! Averaged FADC slice entries supposed pedestal   events
  
   TF1 *fSinglePheFit;                        // Single Phe Fit (Gaussians convoluted with Poisson) 
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6679)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 6680)
@@ -55,4 +55,5 @@
 #include "MPedestalCam.h"
 #include "MBadPixelsCam.h"
+#include "MArrivalTimeCam.h"
 
 #include "MCalibrationQECam.h"
@@ -79,4 +80,5 @@
 #include "MHCalibrationRelTimeCam.h"
 #include "MHCalibrationPulseTimeCam.h"
+#include "MHCalibrationHiLoCam.h"
 #include "MHCamera.h"
 
@@ -287,7 +289,5 @@
         interlacedcont.Add(&hpndiod);
         if (fIsRelTimesUpdate)
-            interlacedcont.Add(&hrelcam);
-        if (fIsHiLoCalibration)
-            interlacedcont.Add(&hilcam);
+	  interlacedcont.Add(&hrelcam);
     }
 
@@ -395,4 +395,7 @@
     plist.AddToList(&pedcambias);
     plist.AddToList(&pedcamab);
+
+    MArrivalTimeCam timecam;
+    plist.AddToList(&timecam);
 
     // Check for interleaved events
@@ -551,6 +554,5 @@
     MHCamEvent evt6(2, "Unsuitable", "Fraction of unsuitable events per Pixel;;[1]");
     MHCamEvent evt7(0, "Times",      "Calibrated Arrival Time;;T [fadc sl]");
-    MHCamEvent evt8(2, "Conv",       "Calibration Conv. Factors;;[phe/fadc cnts]");
-    MHCamEvent evt9(0, "TimeTest",   "Tested Arrival Time of Cherenkov Events;;[fadc sl]");
+    MHCamEvent evt8(0, "Conv",       "Calibration Conv. Factors;;[phe/fadc cnts]");
 
     evt0.EnableSqrtVariance();
@@ -562,5 +564,4 @@
     evt7.EnableSqrtVariance();
     evt8.EnableSqrtVariance();
-    evt9.EnableSqrtVariance();
 
     MFillH fill0(&evt0, "MPedestalFundamental",    "FillPedFLG");
@@ -573,5 +574,4 @@
     MFillH fill7(&evt7, "MArrivalTime",            "FillTimes");
     MFillH fill8(&evt8, "MCalibConstCam",          "FillConv");
-    MFillH fill9(&evt9, "MCalibrationPulseTimeCam","FillPulseTime");
 
     MTaskEnv fillflorian("FinalFantasy");
@@ -695,5 +695,4 @@
     if (extractor2 || extractor1->InheritsFrom("MExtractTimeAndCharge"))
       tlist2.AddToList(&fill7);
-    tlist2.AddToList(&fill9);
 
     tlist2.AddToList(&fillflorian);
@@ -750,6 +749,30 @@
     DisplayResult(plist);
 
+    if (fPixelCheck)
+      {
+	MHCalibrationPulseTimeCam *pcam = (MHCalibrationPulseTimeCam*)plist.FindObject("MHCalibrationPulseCam");
+	MHCalibrationPix &pix1 = (*pcam)[fCheckedPixId];
+	pix1.DrawClone("");
+	
+	if (fIsHiLoCalibration)
+	  {
+	    MHCalibrationHiLoCam *hcam = (MHCalibrationHiLoCam*)plist.FindObject("MHCalibrationPulseCam");
+	    MHCalibrationPix &pix2 = (*hcam)[fCheckedPixId];
+	    pix2.DrawClone("");
+	  }
+}
+
+
     if (!WriteResult(interlacedcont))
-        return kFALSE;
+      return kFALSE;
+
+    TObjArray addcont;
+    addcont.Add(&pulcam);
+
+    if (fIsHiLoCalibration)
+      addcont.Add(&hilcam);
+
+    if (!WriteResult(addcont))
+      return kFALSE;
 
     // return if job went ok
