Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 4962)
+++ trunk/MagicSoft/Mars/Changelog	(revision 4963)
@@ -49,4 +49,8 @@
    * mhcalib/MHCalibrationPix.[h,cc]
      - changed function name SetSaturated to AddSaturated
+
+   * mhcalib/MHCalibrationChargeCam.cc
+   * mhcalib/MHCalibrationRelTimeCam.cc
+     - take cloning of averaged sectors out of the Clone() function
 
    * mbadpixels/MBadPixelsIntensityCam.[h,cc]
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.cc	(revision 4962)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.cc	(revision 4963)
@@ -75,4 +75,5 @@
 #include <TPaveText.h>
 #include <TPaveStats.h>
+#include <TGraph.h>
 
 #include <TVector.h>
@@ -264,32 +265,77 @@
 }
 
-// --------------------------------------------------------------------------
-//
-// Empty function to overload MHCalibrationChargePix::Reset()
-//
-void MHCalibrationChargeBlindPix::Reset()
-{
-}
-
-
-// --------------------------------------------------------------------------
-//
-// Use the MHGausEvents::Clone function and clone additionally the rest of the 
-// data members.
-//
+#if 0
+// --------------------------------------------------------------------------
+//
+// ATTENTION: This nasty Clone function is necessary since the ROOT cloning 
+//            lead to crashes on SOME machines (unfortunately not mine...).
+//            This function is a workaround in order to achieve the correct 
+//            DrawClone() behaviour.
+// 
 TObject *MHCalibrationChargeBlindPix::Clone(const char *name) const
 {
 
-  MHCalibrationChargeBlindPix &pix = (MHCalibrationChargeBlindPix&)*MHCalibrationPix::Clone(name);
+  MHCalibrationChargeBlindPix &pix = 
+    *new MHCalibrationChargeBlindPix(name ? name : fName.Data(),fTitle.Data());
+
   // 
-  // Copy data members
+  // Copy MHGausEvents data members
+  //
+  pix.fBinsAfterStripping   = fBinsAfterStripping;
+  pix.fCurrentSize          = fCurrentSize;
+  pix.fFlags                = fFlags;
+  pix.fPowerProbabilityBins = fPowerProbabilityBins;
+
+  if (fHPowerProbability)
+    pix.fHPowerProbability=(TH1I*)fHPowerProbability->Clone();
+  
+  if (fPowerSpectrum)
+    pix.fPowerSpectrum = new TArrayF(*fPowerSpectrum);
+
+  pix.fEvents = fEvents;
+
+  if (fFGausFit)
+    pix.fFGausFit=(TF1*)fFGausFit->Clone();
+  if (fFExpFit)
+    pix.fFExpFit=(TF1*)fFExpFit->Clone();
+
+  pix.fFirst = fFirst;
+
+  if (fGraphEvents)
+    pix.fGraphEvents=(TGraph*)fGraphEvents->Clone();
+  if (fGraphPowerSpectrum)
+    pix.fGraphPowerSpectrum=(TGraph*)fGraphPowerSpectrum->Clone();
+
+  pix.fHGausHist = fHGausHist;
+
+  pix.fLast      = fLast;
+  pix.fMean      = fMean;
+  pix.fMeanErr   = fMeanErr;
+  pix.fNbins     = fNbins;
+  pix.fNDFLimit  = fNDFLimit;
+  pix.fSigma     = fSigma;
+  pix.fSigmaErr  = fSigmaErr;
+  pix.fProb      = fProb;
+  pix.fProbLimit = fProbLimit;
+
+  // 
+  // Copy MHCalibrationPix data members
+  //
+  pix.fEventFrequency       = fEventFrequency;
+  pix.fBlackoutLimit        = fBlackoutLimit; 
+  pix.fSaturated            = fSaturated;     
+  pix.fPickupLimit          = fPickupLimit;   
+  pix.fPixId                = fPixId;        
+
+  // 
+  // Copy MHCalibrationChargeBlindPix data members
   //
   pix.fSinglePheCut         =  fSinglePheCut;
   pix.fNumSinglePheLimit    =  fNumSinglePheLimit;    
 
-  pix.fASinglePheFADCSlices =  fASinglePheFADCSlices; 
-  pix.fAPedestalFADCSlices  =  fAPedestalFADCSlices;  
+  fASinglePheFADCSlices.Copy(pix.fASinglePheFADCSlices); 
+  fAPedestalFADCSlices.Copy( pix.fAPedestalFADCSlices);  
  
-  pix.fSinglePheFit = (TF1*)fSinglePheFit->Clone();
+  pix.fSinglePheFit   = (TF1*)fSinglePheFit->Clone();
 
   pix.fNumSinglePhes  = fNumSinglePhes;  
@@ -314,8 +360,8 @@
   pix.fMeanPedestalErr  = fMeanPedestalErr;  
   pix.fSigmaPedestalErr = fSigmaPedestalErr; 
-  pix.fFlags            = fFlags;            
 
   return &pix;
 }
+#endif
 
 /*
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h	(revision 4962)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeBlindPix.h	(revision 4963)
@@ -94,7 +94,7 @@
 
   void Clear(Option_t *o="");  
-  void Reset();
-  
-  TObject *Clone(const char *) const;
+  void Reset() {}
+  
+  //  TObject *Clone(const char *) const;
 
   Bool_t SetupFill(const MParList *pList);
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeCam.cc	(revision 4962)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationChargeCam.cc	(revision 4963)
@@ -1468,5 +1468,5 @@
 {
 
-  TLine *green1 = new TLine(refline[0],0.1,refline[0],0.9*hist->GetMaximum());
+  TLine *green1 = new TLine(refline[0],0.,refline[0],0.9*hist->GetMaximum());
   green1->SetBit(kCanDelete);
   green1->SetLineColor(kGreen);
@@ -1475,5 +1475,5 @@
   green1->Draw();
 
-  TLine *green5 = new TLine(refline[6],0.1,refline[6],0.9*hist->GetMaximum());
+  TLine *green5 = new TLine(refline[6],0.,refline[6],0.9*hist->GetMaximum());
   green5->SetBit(kCanDelete);
   green5->SetLineColor(8);
@@ -1482,5 +1482,5 @@
   green5->Draw();
 
-  TLine *blue1   = new TLine(refline[1],0.1,refline[1],0.9*hist->GetMaximum());
+  TLine *blue1   = new TLine(refline[1],0.,refline[1],0.9*hist->GetMaximum());
   blue1->SetBit(kCanDelete);
   blue1->SetLineColor(227);
@@ -1489,5 +1489,5 @@
   blue1->Draw();
 
-  TLine *blue5   = new TLine(refline[2],0.1,refline[2],0.9*hist->GetMaximum());
+  TLine *blue5   = new TLine(refline[2],0.,refline[2],0.9*hist->GetMaximum());
   blue5->SetBit(kCanDelete);
   blue5->SetLineColor(68);
@@ -1496,5 +1496,5 @@
   blue5->Draw();
 
-  TLine *blue10   = new TLine(refline[3],0.1,refline[3],0.9*hist->GetMaximum());
+  TLine *blue10   = new TLine(refline[3],0.,refline[3],0.9*hist->GetMaximum());
   blue10->SetBit(kCanDelete);
   blue10->SetLineColor(4);
@@ -1503,5 +1503,5 @@
   blue10->Draw();
 
-  TLine *uv10    = new TLine(refline[4],0.1,refline[4],0.9*hist->GetMaximum());
+  TLine *uv10    = new TLine(refline[4],0.,refline[4],0.9*hist->GetMaximum());
   uv10->SetBit(kCanDelete);
   uv10->SetLineColor(106);
@@ -1510,5 +1510,5 @@
   uv10->Draw();
 
-  TLine *ct1    = new TLine(refline[5],0.1,refline[5],0.9*hist->GetMaximum());
+  TLine *ct1    = new TLine(refline[5],0.,refline[5],0.9*hist->GetMaximum());
   ct1->SetBit(kCanDelete);
   ct1->SetLineColor(6);
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.cc	(revision 4962)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.cc	(revision 4963)
@@ -108,4 +108,14 @@
 #include "MBadPixelsPix.h"
 
+#include <TPad.h>
+#include <TVirtualPad.h>
+#include <TCanvas.h>
+#include <TStyle.h>
+#include <TF1.h>
+#include <TLine.h>
+#include <TLatex.h>
+#include <TLegend.h>
+#include <TGraph.h>
+
 ClassImp(MHCalibrationRelTimeCam);
 
@@ -154,4 +164,62 @@
   SetHistXTitle(gsHistXTitle.Data());
   SetHistYTitle(gsHistYTitle.Data());
+
+}
+
+// --------------------------------------------------------------------------
+//
+// Our own clone function is necessary since root 3.01/06 or Mars 0.4
+// I don't know the reason. 
+//
+// Creates new MHCalibrationRelTimeCam
+//
+TObject *MHCalibrationRelTimeCam::Clone(const char *name) const
+{
+
+  const Int_t navhi = fAverageHiGainAreas->GetEntries();
+  const Int_t navlo = fAverageLoGainAreas->GetEntries();
+  const Int_t nsehi = fAverageHiGainSectors->GetEntries();
+  const Int_t nselo = fAverageLoGainSectors->GetEntries();
+  
+  //
+  // FIXME, this might be done faster and more elegant, by direct copy.
+  //
+  MHCalibrationRelTimeCam *cam = new MHCalibrationRelTimeCam();
+
+  cam->fAverageHiGainAreas->Expand(navhi);
+  cam->fAverageHiGainSectors->Expand(nsehi);
+
+  for (int i=0; i<navhi; i++)
+    (*cam->fAverageHiGainAreas)  [i] = (*fAverageHiGainAreas)  [i]->Clone();
+  for (int i=0; i<nsehi; i++)
+    (*cam->fAverageHiGainSectors)[i] = (*fAverageHiGainSectors)[i]->Clone();
+
+  if (IsLoGain())
+    {
+      cam->fAverageLoGainAreas->Expand(navlo);
+      cam->fAverageLoGainSectors->Expand(nselo);
+      
+      for (int i=0; i<navlo; i++)
+        (*cam->fAverageLoGainAreas)  [i] = (*fAverageLoGainAreas)  [i]->Clone();
+      for (int i=0; i<nselo; i++)
+        (*cam->fAverageLoGainSectors)[i] = (*fAverageLoGainSectors)[i]->Clone();
+    }
+
+  cam->fAverageAreaNum         = fAverageAreaNum;
+  cam->fAverageAreaSat         = fAverageAreaSat;
+  cam->fAverageAreaSigma       = fAverageAreaSigma;      
+  cam->fAverageAreaSigmaVar    = fAverageAreaSigmaVar;   
+  cam->fAverageAreaRelSigma    = fAverageAreaRelSigma;
+  cam->fAverageAreaRelSigmaVar = fAverageAreaRelSigmaVar;   
+  cam->fAverageSectorNum       = fAverageSectorNum;      
+  cam->fRunNumbers             = fRunNumbers;
+
+  *fLog << err << "COLOR: " << fColor << endl;
+
+  cam->fColor                  = fColor;
+  cam->fPulserFrequency        = fPulserFrequency;
+  cam->fFlags                  = fFlags;
+
+  return cam;
 
 }
@@ -284,5 +352,5 @@
         { 
           const Float_t reltime = pix.GetArrivalTimeLoGain() - reftime;
-          histhi.SetSaturated(1); 
+          histhi.AddSaturated(1); 
           histlo.FillHistAndArray(reltime);
           fSumarealo  [aidx]   += reltime;
@@ -524,2 +592,172 @@
  (*this)[idx].DrawClone();
 }
+
+// -----------------------------------------------------------------------------
+// 
+// Default draw:
+//
+// Displays the averaged areas, both High Gain and Low Gain 
+//
+// Calls the Draw of the fAverageHiGainAreas and fAverageLoGainAreas objects with options
+//
+void MHCalibrationRelTimeCam::Draw(const Option_t *opt)
+{
+
+  const Int_t nareas = fAverageHiGainAreas->GetEntries();
+  if (nareas == 0)
+    return;
+
+  TString option(opt);
+  option.ToLower();
+
+  if (!option.Contains("datacheck"))
+    {
+      MHCalibrationCam::Draw(opt);
+      return;
+    }
+
+  // 
+  // From here on , the datacheck - Draw
+  //
+  TVirtualPad *pad = gPad ? gPad : MH::MakeDefCanvas(this);  
+  pad->SetBorderMode(0);
+  pad->Divide(1,nareas);
+
+  //
+  // Loop over inner and outer pixels
+  //  
+  for (Int_t i=0; i<nareas;i++) 
+     {
+       
+       pad->cd(i+1);
+       
+       MHCalibrationPix &hipix = GetAverageHiGainArea(i);
+       //
+       // Ask for Hi-Gain saturation
+       //
+       if (hipix.GetSaturated() > fNumHiGainSaturationLimit*hipix.GetHGausHist()->GetEntries() && IsLoGain())
+         {
+           MHCalibrationPix &lopix = GetAverageLoGainArea(i);
+           DrawDataCheckPixel(lopix,0.);
+         }
+       else
+         DrawDataCheckPixel(hipix,0.);
+    }      
+}
+
+// -----------------------------------------------------------------------------
+// 
+// Draw the average pixel for the datacheck:
+//
+// Displays the averaged areas, both High Gain and Low Gain 
+//
+// Calls the Draw of the fAverageHiGainAreas and fAverageLoGainAreas objects with options
+//
+void MHCalibrationRelTimeCam::DrawDataCheckPixel(MHCalibrationPix &pix, const Float_t refline)
+{
+  
+  TVirtualPad *newpad = gPad;
+  newpad->Divide(1,2);
+  newpad->cd(1);
+  
+  gPad->SetTicks();
+  if (!pix.IsEmpty() && !pix.IsOnlyOverflow() && !pix.IsOnlyUnderflow())
+    gPad->SetLogy();
+
+  TH1F *hist = pix.GetHGausHist();
+  
+  TH1F *null = new TH1F("Null",hist->GetTitle(),100,pix.GetFirst() < -3.0 ? -3.0 : pix.GetFirst(),
+                        pix.GetLast() > 3.0 ? 3.0 : pix.GetLast());
+
+  null->SetMaximum(1.1*hist->GetMaximum());
+  null->SetDirectory(NULL);
+  null->SetBit(kCanDelete);
+  null->SetStats(kFALSE);
+  //
+  // set the labels bigger
+  //
+  TAxis *xaxe = null->GetXaxis();
+  TAxis *yaxe = null->GetYaxis();
+  xaxe->CenterTitle();
+  yaxe->CenterTitle();    
+  xaxe->SetTitleSize(0.07);
+  yaxe->SetTitleSize(0.07);    
+  xaxe->SetTitleOffset(0.7);
+  yaxe->SetTitleOffset(0.55);    
+  xaxe->SetLabelSize(0.06);
+  yaxe->SetLabelSize(0.06);    
+
+  xaxe->SetTitle(hist->GetXaxis()->GetTitle());
+  yaxe->SetTitle(hist->GetYaxis()->GetTitle());  
+
+  null->Draw();
+  hist->Draw("same");
+
+  gStyle->SetOptFit();
+
+  TF1 *fit = pix.GetFGausFit();
+
+  if (fit)
+  {
+    switch ( fColor )
+      {
+      case MCalibrationCam::kGREEN:
+        fit->SetLineColor(kGreen);
+        break;
+      case MCalibrationCam::kBLUE:
+        fit->SetLineColor(kBlue);
+        break;
+      case MCalibrationCam::kUV:  
+        fit->SetLineColor(106);
+        break;
+      case MCalibrationCam::kCT1: 
+        fit->SetLineColor(006);
+        break;
+      default:
+        fit->SetLineColor(kRed);
+      }
+    fit->Draw("same");
+  }
+
+  //  DisplayRefLines(null,refline);
+
+  gPad->Modified();
+  gPad->Update();
+
+  newpad->cd(2);
+  gPad->SetTicks();
+
+  TH1F *null2 = new TH1F("Null2",hist->GetTitle(),100,0.,pix.GetEvents()->GetSize()/pix.GetEventFrequency());
+
+  null2->SetMinimum(pix.GetMean()-10.*pix.GetSigma());
+  null2->SetMaximum(pix.GetMean()+10.*pix.GetSigma());
+  null2->SetDirectory(NULL);
+  null2->SetBit(kCanDelete);
+  null2->SetStats(kFALSE);
+  //
+  // set the labels bigger
+  //
+  TAxis *xaxe2 = null2->GetXaxis();
+  TAxis *yaxe2 = null2->GetYaxis();
+  xaxe2->CenterTitle();
+  yaxe2->CenterTitle();    
+  xaxe2->SetTitleSize(0.07);
+  yaxe2->SetTitleSize(0.07);    
+  xaxe2->SetTitleOffset(0.7);
+  yaxe2->SetTitleOffset(0.55);    
+  xaxe2->SetLabelSize(0.06);
+  yaxe2->SetLabelSize(0.06);    
+
+  pix.CreateGraphEvents();
+  TGraph *gr = pix.GetGraphEvents();
+
+  xaxe2->SetTitle(gr->GetXaxis()->GetTitle());
+  yaxe2->SetTitle(gr->GetYaxis()->GetTitle());  
+
+  null2->Draw();
+
+  pix.DrawEvents("same");
+
+  return;
+}
+
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.h	(revision 4962)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationRelTimeCam.h	(revision 4963)
@@ -14,4 +14,5 @@
 #endif
 
+class TH1F;
 class MGeomCam;
 class MHCalibrationRelTimeCam : public MHCalibrationCam
@@ -46,4 +47,6 @@
   Bool_t FinalizeHists();
   void   FinalizeBadPixels();
+
+  void   DrawDataCheckPixel(MHCalibrationPix &pix, const Float_t refline);
   
 public:
@@ -51,4 +54,6 @@
   MHCalibrationRelTimeCam(const char *name=NULL, const char *title=NULL);
   ~MHCalibrationRelTimeCam() {}
+
+  TObject *Clone(const char *name="") const;
 
   UInt_t GetReferencePixel() const { return fReferencePixel; }
@@ -59,5 +64,8 @@
   Bool_t GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type=0) const;
   void DrawPixelContent(Int_t idx) const;
-  
+
+  // Draw
+  void Draw(const Option_t *opt);
+
   ClassDef(MHCalibrationRelTimeCam, 1)	// Histogram class for Relative Time Camera Calibration
 };
