Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.cc	(revision 4951)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.cc	(revision 4959)
@@ -131,4 +131,8 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Returns size of fHiGainArray
+//
 const Int_t MHCalibrationCam::GetSize() const
 {
@@ -156,4 +160,11 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Calls Reset() for each entry in:
+// - fHiGainArray, fLoGainArray
+// - fAverageHiGainAreas, fAverageLoGainAreas
+// - fAverageHiGainSectors, fAverageLoGainSectors
+//
 void MHCalibrationCam::ResetHists()
 {
@@ -161,13 +172,16 @@
   if (fHiGainArray)
     { fHiGainArray->ForEach(MHCalibrationPix,Reset)();  }
+  if (fAverageHiGainAreas)
+    { fAverageHiGainAreas->ForEach(MHCalibrationPix,Reset)();  }
+  if (fAverageHiGainSectors)
+    { fAverageHiGainSectors->ForEach(MHCalibrationPix,Reset)();  }
+
+  if (!IsLoGain())
+    return;
+
   if (fLoGainArray)
     { fLoGainArray->ForEach(MHCalibrationPix,Reset)();  }
-  
-  if (fAverageHiGainAreas)
-    { fAverageHiGainAreas->ForEach(MHCalibrationPix,Reset)();  }
   if (fAverageLoGainAreas)
     { fAverageLoGainAreas->ForEach(MHCalibrationPix,Reset)();  }
-  if (fAverageHiGainSectors)
-    { fAverageHiGainSectors->ForEach(MHCalibrationPix,Reset)();  }
   if (fAverageLoGainSectors)
     { fAverageLoGainSectors->ForEach(MHCalibrationPix,Reset)();  }
@@ -175,6 +189,4 @@
 }
 
-
-
 // --------------------------------------------------------------------------
 //
@@ -308,11 +320,9 @@
 // --------------------------------------------------------------------------
 //
-// Our own clone function is necessary since root 3.01/06 or Mars 0.4
-// I don't know the reason. 
-//
-// Creates new MHCalibrationCam
-// Deletes the TObjArray's and Clones them individually
-// Copies the TArray's
-// Copies the fPulserFrequency
+// Creates new MHCalibrationCam only for the averaged areas:
+// the rest has to be retrieved directly, e.g. via: 
+//  MHCalibrationCam *cam = MParList::FindObject("MHCalibrationCam");
+//  -  cam->GetAverageSector(5).DrawClone();
+//  -  (*cam)[100].DrawClone()
 //
 TObject *MHCalibrationCam::Clone(const char *) const
@@ -322,7 +332,5 @@
   //  const Int_t nlo   = fLoGainArray->GetEntries();
   const Int_t navhi = fAverageHiGainAreas->GetEntries();
-  const Int_t navlo = fAverageLoGainAreas->GetEntries();
-  const Int_t nsehi = fAverageHiGainSectors->GetEntries();
-  const Int_t nselo = fAverageLoGainSectors->GetEntries();
+  //  const Int_t nsehi = fAverageHiGainSectors->GetEntries();
   
   //
@@ -335,6 +343,6 @@
   cam->fAverageHiGainAreas->Expand(navhi);
   cam->fAverageLoGainAreas->Expand(navlo);
-  cam->fAverageHiGainSectors->Expand(nsehi);
-  cam->fAverageLoGainSectors->Expand(nselo);
+  //  cam->fAverageHiGainSectors->Expand(nsehi);
+  //  cam->fAverageLoGainSectors->Expand(nselo);
 
   /*
@@ -352,22 +360,23 @@
   
   for (int i=0; i<navhi; i++)
-    {
-      //      delete (*cam->fAverageHiGainAreas)[i];
-      (*cam->fAverageHiGainAreas)[i] = (*fAverageHiGainAreas)[i]->Clone();
-    }
-  for (int i=0; i<navlo; i++)
-    {
-      //      delete (*cam->fAverageLoGainAreas)[i];
-      (*cam->fAverageLoGainAreas)[i] = (*fAverageLoGainAreas)[i]->Clone();
-    }
-  for (int i=0; i<nsehi; i++)
-    {
-      //      delete (*cam->fAverageHiGainSectors)[i];
-      (*cam->fAverageHiGainSectors)[i] = (*fAverageHiGainSectors)[i]->Clone();
-    }
-  for (int i=0; i<nselo; i++)
-    {
-      //      delete (*cam->fAverageLoGainSectors)[i];
-      (*cam->fAverageLoGainSectors)[i] = (*fAverageLoGainSectors)[i]->Clone();
+    (*cam->fAverageHiGainAreas)[i] = (*fAverageHiGainAreas)[i]->Clone();
+
+  //  for (int i=0; i<nsehi; i++)
+  //    (*cam->fAverageHiGainSectors)[i] = (*fAverageHiGainSectors)[i]->Clone();
+
+  if (IsLoGain())
+    {
+
+      const Int_t navlo = fAverageLoGainAreas->GetEntries();
+
+      cam->fAverageLoGainAreas->Expand(navlo);
+      //      cam->fAverageLoGainSectors->Expand(nselo);
+      //  const Int_t nselo = fAverageLoGainSectors->GetEntries();
+      
+      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();
     }
 
@@ -575,7 +584,7 @@
 // 
 // - For every entry in the expanded arrays: 
-//   * call new MHCalibrationPix(fHistName,fHistTitle)
-//   * SetNbins(fNbins), SetFirst(fFirst), SetLast(fLast)
-//   * Set fHistName and fHistTitle in the Histogram of MHCalibrationPix
+//   * Initialize an MHCalibrationPix
+//   * Set Binning from  fNbins, fFirst and fLast
+//   * Set Histgram names and titles from fHistName and fHistTitle
 //   * Set X-axis and Y-axis titles with fHistXTitle and fHistYTitle
 //   * Call InitHists
@@ -681,7 +690,7 @@
 // 
 // - For every entry in the expanded arrays: 
-//   * call new MHCalibrationPix(fHistName,fHistTitle)
-//   * SetBins(fNbins), SetFirst(fFirst), SetLast(fLast)
-//   * Set fHistName and fHistTitle in the Histogram of MHCalibrationPix
+//   * Initialize an MHCalibrationPix
+//   * Set Binning from  fNbins, fFirst and fLast
+//   * Set Histgram names and titles from fHistName and fHistTitle
 //   * Set X-axis and Y-axis titles with fHistXTitle and fHistYTitle
 //   * Call InitHists
@@ -779,6 +788,4 @@
 }
 
-
-
 //--------------------------------------------------------------------------------
 //
@@ -788,8 +795,7 @@
 // - number of sectors
 //
-// For all TObjArray's (including the averaged ones), the following steps are performed: 
-//
-// 1) Test size and return kFALSE if not matching
-// 2) 
+// Return kFALSE, if sizes of the TObjArrays do not match npixels, nareas or nsectors
+// 
+// Call FillHists()
 //
 Bool_t MHCalibrationCam::Fill(const MParContainer *par, const Stat_t w)
@@ -800,16 +806,12 @@
   const Int_t nsectors = fGeom->GetNumSectors();
   
+  //
+  // Hi-Gain ObjArrays
+  //
   if (fHiGainArray->GetEntries() != npixels)
     {
-      *fLog << err << "ERROR - Size mismatch... abort." << endl;
+      *fLog << err << "ERROR - Size mismatch in number of pixels... abort." << endl;
       return kFALSE;
     }
-  
-  if (IsLoGain())
-    if (fLoGainArray->GetEntries() != npixels)
-      {
-        *fLog << err << "ERROR - Size mismatch... abort." << endl;
-        return kFALSE;
-      }
   
   if (fAverageHiGainAreas->GetEntries() != nareas)
@@ -819,11 +821,4 @@
     }
 
-  if (IsLoGain())
-    if (fAverageLoGainAreas->GetEntries() != nareas)
-      {
-        *fLog << err << "ERROR - Size mismatch in number of areas ... abort." << endl;
-        return kFALSE;
-    }
-  
   if (fAverageHiGainSectors->GetEntries() != nsectors)
     {
@@ -833,17 +828,25 @@
 
   if (IsLoGain())
-    if (fAverageLoGainSectors->GetEntries() != nsectors)
-      {
-        *fLog << err << "ERROR - Size mismatch in number of sectors ... abort." << endl;
-        return kFALSE;
-      }
+    {
+      if (fLoGainArray->GetEntries() != npixels)
+        {
+          *fLog << err << "ERROR - Size mismatch in number of pixels... abort." << endl;
+          return kFALSE;
+        }
+      
+      if (fAverageLoGainAreas->GetEntries() != nareas)
+        {
+          *fLog << err << "ERROR - Size mismatch in number of areas ... abort." << endl;
+          return kFALSE;
+        }
+      
+      if (fAverageLoGainSectors->GetEntries() != nsectors)
+        {
+          *fLog << err << "ERROR - Size mismatch in number of sectors ... abort." << endl;
+          return kFALSE;
+        }
+    }
   
   return FillHists(par, w);
-}
-
-Bool_t MHCalibrationCam::FillHists(const MParContainer *par, const Stat_t w)
-{
-  *fLog << warn << GetDescriptor() << "FillHists not overloaded! Can't be used!" << endl;
-  return kFALSE;
 }
 
@@ -874,14 +877,4 @@
   return kTRUE;
 }
-
-Bool_t MHCalibrationCam::FinalizeHists()
-{
-  return kTRUE;
-}
-
-void MHCalibrationCam::FinalizeBadPixels()
-{
-}
-
 
 // -------------------------------------------------------------
@@ -909,4 +902,11 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Calls FitHiGainHists for every entry in:
+// - fHiGainArray
+// - fAverageHiGainAreas
+// - fAverageHiGainSectors
+// 
 void MHCalibrationCam::FitHiGainArrays(MCalibrationCam &calcam, MBadPixelsCam &badcam,
                                        MBadPixelsPix::UncalibratedType_t fittyp, 
@@ -952,4 +952,11 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Calls FitLoGainHists for every entry in:
+// - fLoGainArray
+// - fAverageLoGainAreas
+// - fAverageLoGainSectors
+// 
 void MHCalibrationCam::FitLoGainArrays(MCalibrationCam &calcam, MBadPixelsCam &badcam,
                                             MBadPixelsPix::UncalibratedType_t fittyp, 
@@ -957,4 +964,7 @@
 {
   
+  if (!IsLoGain())
+    return;
+
   for (Int_t i=0; i<fLoGainArray->GetSize(); i++)
     {
@@ -1290,37 +1300,38 @@
 Int_t MHCalibrationCam::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
 {
-    Bool_t rc = kFALSE;
-    if (IsEnvDefined(env, prefix, "Debug", print))
-    {
-        SetDebug(GetEnvValue(env, prefix, "Debug", IsDebug()));
-        rc = kTRUE;
-    }
-    if (IsEnvDefined(env, prefix, "LoGain", print))
-    {
-        SetDebug(GetEnvValue(env, prefix, "LoGain", IsLoGain()));
-        rc = kTRUE;
-    }
-    if (IsEnvDefined(env, prefix, "Oscillations", print))
-    {
-        SetOscillations(GetEnvValue(env, prefix, "Oscillations", IsOscillations()));
-        rc = kTRUE;
-    }
-
-    if (IsEnvDefined(env, prefix, "Nbins", print))
-    {
-        SetNbins(GetEnvValue(env, prefix, "Nbins", fNbins));
-        rc = kTRUE;
-    }
-    if (IsEnvDefined(env, prefix, "First", print))
-    {
-        SetFirst(GetEnvValue(env, prefix, "First", fFirst));
-        rc = kTRUE;
-    }
-    if (IsEnvDefined(env, prefix, "Last", print))
-    {
-        SetLast(GetEnvValue(env, prefix, "Last", fLast));
-        rc = kTRUE;
-    }
-
-    return rc;
-}
+
+  Bool_t rc = kFALSE;
+  if (IsEnvDefined(env, prefix, "Debug", print))
+    {
+      SetDebug(GetEnvValue(env, prefix, "Debug", IsDebug()));
+      rc = kTRUE;
+    }
+  if (IsEnvDefined(env, prefix, "LoGain", print))
+    {
+      SetDebug(GetEnvValue(env, prefix, "LoGain", IsLoGain()));
+      rc = kTRUE;
+    }
+  if (IsEnvDefined(env, prefix, "Oscillations", print))
+    {
+      SetOscillations(GetEnvValue(env, prefix, "Oscillations", IsOscillations()));
+      rc = kTRUE;
+    }
+  
+  if (IsEnvDefined(env, prefix, "Nbins", print))
+    {
+      SetNbins(GetEnvValue(env, prefix, "Nbins", fNbins));
+      rc = kTRUE;
+    }
+  if (IsEnvDefined(env, prefix, "First", print))
+    {
+      SetFirst(GetEnvValue(env, prefix, "First", fFirst));
+      rc = kTRUE;
+    }
+  if (IsEnvDefined(env, prefix, "Last", print))
+    {
+      SetLast(GetEnvValue(env, prefix, "Last", fLast));
+      rc = kTRUE;
+    }
+  
+  return rc;
+}
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.h	(revision 4951)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationCam.h	(revision 4959)
@@ -96,7 +96,8 @@
   virtual Bool_t SetupHists ( const MParList *pList ) { return kTRUE; }
   virtual Bool_t ReInitHists(       MParList *pList ) { return kTRUE; }
-  virtual Bool_t FillHists  ( const MParContainer *par, const Stat_t w=1);
-  virtual Bool_t FinalizeHists    ();
-  virtual void   FinalizeBadPixels();
+  virtual Bool_t FillHists  ( const MParContainer *par, const Stat_t w=1) { return kTRUE; }
+  virtual Bool_t FinalizeHists()                      { return kTRUE;  }
+  
+  virtual void   FinalizeBadPixels() { }
   
   virtual void   CalcAverageSigma();
