Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 4883)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 4884)
@@ -52,4 +52,5 @@
 
    * mcalib/MHCalibrationCam.[h,cc]
+   * mcalib/MHCalibrationChargeCam.cc
      - added bool kLoGain which is set if number of LoGain Slices in 
        MRawRunHeader is not 0. This excludes the low gain calculations 
Index: /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargeCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargeCam.cc	(revision 4883)
+++ /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargeCam.cc	(revision 4884)
@@ -135,4 +135,5 @@
 
 #include "MRawEvtData.h"
+#include "MRawRunHeader.h"
 #include "MRawEvtPixelIter.h"
 
@@ -302,4 +303,7 @@
   const Int_t nareas   = fGeom->GetNumAreas();
 
+  const Int_t higainsamples = fRunHeader->GetNumSamplesHiGain();
+  const Int_t logainsamples = fRunHeader->GetNumSamplesLoGain();
+
   if (fHiGainArray->GetEntries()==0)
   {
@@ -308,4 +312,7 @@
       {
         (*fHiGainArray)[i] = new MHCalibrationChargeHiGainPix;
+        MHCalibrationChargePix &pix = (MHCalibrationChargePix&)(*this)[i];
+        pix.SetAbsTimeNbins(higainsamples);
+        pix.SetAbsTimeLast(higainsamples-0.5);
         InitHists((*this)[i],(*fBadPixels)[i],i);
       }
@@ -313,11 +320,11 @@
   }
 
-  if (fLoGainArray->GetEntries()==0)
-  {
+  if (fLoGainArray->GetEntries()==0 && fLoGain)
+    {
       fLoGainArray->Expand(npixels);
       
       for (Int_t i=0; i<npixels; i++)
-      {
-	  (*fLoGainArray)[i] = new MHCalibrationChargeLoGainPix;
+        {
+          (*fLoGainArray)[i] = new MHCalibrationChargeLoGainPix;
           MHGausEvents &lopix = (*this)(i);
           //
@@ -334,4 +341,6 @@
                 }
             }
+          ((MHCalibrationChargePix&)(*this)(i)).SetAbsTimeNbins(logainsamples);
+          ((MHCalibrationChargePix&)(*this)(i)).SetAbsTimeLast(logainsamples-0.5);
           InitHists(lopix,(*fBadPixels)[i],i);
       }
@@ -370,5 +379,5 @@
 
 
-  if (fAverageLoGainAreas->GetEntries()==0)
+  if (fAverageLoGainAreas->GetEntries()==0 && fLoGain)
     {
       fAverageLoGainAreas->Expand(nareas);
@@ -436,5 +445,5 @@
   }
 
-  if (fAverageLoGainSectors->GetEntries()==0)
+  if (fAverageLoGainSectors->GetEntries()==0 && fLoGain)
   {
       fAverageLoGainSectors->Expand(nsectors);
@@ -532,5 +541,5 @@
   fSumloarea  .Reset(); 
   fTimehiarea .Reset(); 
-  fTimeloarea  .Reset();
+  fTimeloarea .Reset();
   fSumhisector.Reset(); 
   fSumlosector.Reset(); 
@@ -547,5 +556,4 @@
 
       MHCalibrationChargePix &histhi = (MHCalibrationChargePix&)(*this)[i];
-      MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(i);
 
       if (histhi.IsExcluded())
@@ -554,18 +562,11 @@
       const MExtractedSignalPix &pix = (*signal)[i];
       
-      const Float_t sumhi  = pix.GetExtractedSignalHiGain();
-      const Float_t sumlo  = pix.GetExtractedSignalLoGain();
+      const Float_t sumhi = pix.GetExtractedSignalHiGain();
+      const Int_t   sathi = (Int_t)pix.GetNumHiGainSaturated();
 
       if (!histhi.FillHistAndArray(sumhi))
         fHiGainOverFlow[i]++;
 
-      if (!histlo.FillHistAndArray(sumlo))
-        fLoGainOverFlow[i]++;
-
-      const Int_t sathi = (Int_t)pix.GetNumHiGainSaturated();
-      const Int_t satlo = (Int_t)pix.GetNumLoGainSaturated();
-
       histhi.SetSaturated(sathi); 
-      histlo.SetSaturated(satlo); 
 
       const Int_t aidx   = (*fGeom)[i].GetAidx();
@@ -573,12 +574,26 @@
 
       fSumhiarea[aidx]  += sumhi;
-      fSumloarea[aidx]  += sumlo;
       fSathiarea[aidx]  += sathi;
-      fSatloarea[aidx]  += satlo;
 
       fSumhisector[sector]  += sumhi;
-      fSumlosector[sector]  += sumlo;
       fSathisector[sector]  += sathi;
-      fSatlosector[sector]  += satlo;
+
+      if (fLoGain)
+        {
+          MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(i);
+          const Float_t sumlo  = pix.GetExtractedSignalLoGain();
+          const Int_t   satlo = (Int_t)pix.GetNumLoGainSaturated();
+          
+          if (!histlo.FillHistAndArray(sumlo))
+            fLoGainOverFlow[i]++;
+
+          histlo.SetSaturated(satlo); 
+          
+          fSumloarea[aidx]  += sumlo;
+          fSatloarea[aidx]  += satlo;
+          fSumlosector[sector]  += sumlo;
+          fSatlosector[sector]  += satlo;
+        }
+      
     }
 
@@ -590,5 +605,4 @@
 
       MHCalibrationChargePix &histhi = (MHCalibrationChargePix&)(*this)[pixid];
-      MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(pixid);
 
       if (histhi.IsExcluded())
@@ -596,17 +610,23 @@
       
       const Float_t timehi = (Float_t)pixel.GetIdxMaxHiGainSample();
-      const Float_t timelo = (Float_t)pixel.GetIdxMaxLoGainSample(lofirst);
 
       histhi.FillAbsTime(timehi);
-      histlo.FillAbsTime(timelo);
 
       const Int_t aidx   = (*fGeom)[pixid].GetAidx();
       const Int_t sector = (*fGeom)[pixid].GetSector();
 
-      fTimehiarea[aidx] += timehi;
-      fTimeloarea[aidx] += timelo;
-
+      fTimehiarea  [aidx]   += timehi;
       fTimehisector[sector] += timehi;
-      fTimelosector[sector] += timelo;
+
+      if (fLoGain)
+        {
+          MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(pixid);
+
+          const Float_t timelo = (Float_t)pixel.GetIdxMaxLoGainSample(lofirst);
+          histlo.FillAbsTime(timelo);
+
+          fTimeloarea[aidx] += timelo;
+          fTimelosector[sector] += timelo;
+        }
     }
   
@@ -620,15 +640,16 @@
 
       MHCalibrationChargePix &hipix = (MHCalibrationChargePix&)GetAverageHiGainArea(j);
-      MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainArea(j);
-
-      hipix.FillHistAndArray(fSumhiarea[j]/npix);
-      lopix.FillHistAndArray(fSumloarea[j]/npix);
-
-      hipix.SetSaturated(fSathiarea[j]/npix); 
-      lopix.SetSaturated(fSatloarea[j]/npix); 
-
-      hipix.FillAbsTime(fTimehiarea[j]/npix);
-      lopix.FillAbsTime(fTimeloarea[j]/npix);
-
+
+      hipix.FillHistAndArray(fSumhiarea [j]/npix);
+      hipix.SetSaturated    (fSathiarea [j]/npix); 
+      hipix.FillAbsTime     (fTimehiarea[j]/npix);
+
+      if (fLoGain)
+        {
+          MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainArea(j);
+          lopix.FillHistAndArray(fSumloarea [j]/npix);
+          lopix.SetSaturated    (fSatloarea [j]/npix); 
+          lopix.FillAbsTime     (fTimeloarea[j]/npix);
+        }
     }
 
@@ -642,15 +663,16 @@
 
       MHCalibrationChargePix &hipix = (MHCalibrationChargePix&)GetAverageHiGainSector(j);
-      MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainSector(j);
-
-      hipix.FillHistAndArray(fSumhisector[j]/npix);
-      lopix.FillHistAndArray(fSumlosector[j]/npix);
-
-      hipix.SetSaturated(fSathisector[j]/npix); 
-      lopix.SetSaturated(fSatlosector[j]/npix); 
-
-      hipix.FillAbsTime(fTimehisector[j]/npix);
-      lopix.FillAbsTime(fTimelosector[j]/npix);
-
+
+      hipix.FillHistAndArray(fSumhisector [j]/npix);
+      hipix.SetSaturated    (fSathisector [j]/npix); 
+      hipix.FillAbsTime     (fTimehisector[j]/npix);
+
+      if (fLoGain)
+        {
+          MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainSector(j);
+          lopix.FillHistAndArray(fSumlosector [j]/npix);
+          lopix.SetSaturated    (fSatlosector [j]/npix); 
+          lopix.FillAbsTime     (fTimelosector[j]/npix);
+        }
     }
 
@@ -708,35 +730,36 @@
     }
 
-  for (Int_t i=0; i<fLoGainArray->GetSize(); i++)
-    {
-      
-      MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(i);
-      MBadPixelsPix          &bad    = (*fBadPixels)[i];
-
-      if (histlo.IsExcluded())
-        continue;
-      
-      if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
-        {
-          *fLog << warn << "Saturated Lo Gain histogram in pixel: " << i << endl;
-          bad.SetUncalibrated( MBadPixelsPix::kLoGainSaturation ); 
-          histlo.CreateFourierSpectrum();
+  if (fLoGain)
+    for (Int_t i=0; i<fLoGainArray->GetSize(); i++)
+      {
+        
+        MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)(*this)(i);
+        MBadPixelsPix          &bad    = (*fBadPixels)[i];
+        
+        if (histlo.IsExcluded())
           continue;
-        }
-  
-      if (fLoGainOverFlow[i])
-        {
-          *fLog << warn << GetDescriptor()
-                << ": Lo-Gain Histogram Overflow occurred " << fLoGainOverFlow[i] 
-                << " times in pixel: " << i << " (without saturation!) " << endl;
-          bad.SetUncalibrated( MBadPixelsPix::kLoGainOverFlow ); 
-        }
-
-      MCalibrationChargePix &pix    = (MCalibrationChargePix&)(*fCam)[i];
-      
-      if (pix.IsHiGainSaturation())
-        FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
-    }
-
+        
+        if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
+          {
+            *fLog << warn << "Saturated Lo Gain histogram in pixel: " << i << endl;
+            bad.SetUncalibrated( MBadPixelsPix::kLoGainSaturation ); 
+            histlo.CreateFourierSpectrum();
+            continue;
+          }
+        
+        if (fLoGainOverFlow[i] > 1)
+          {
+            *fLog << warn << GetDescriptor()
+                  << ": Lo-Gain Histogram Overflow occurred " << fLoGainOverFlow[i] 
+                  << " times in pixel: " << i << " (without saturation!) " << endl;
+            bad.SetUncalibrated( MBadPixelsPix::kLoGainOverFlow ); 
+          }
+        
+        MCalibrationChargePix &pix    = (MCalibrationChargePix&)(*fCam)[i];
+        
+        if (pix.IsHiGainSaturation())
+          FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
+      }
+  
   for (Int_t j=0; j<fAverageHiGainAreas->GetSize(); j++)
     {
@@ -756,22 +779,23 @@
    }
   
-  for (Int_t j=0; j<fAverageLoGainAreas->GetSize(); j++)
-    {
-      
-      MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)GetAverageLoGainArea(j);      
-      MCalibrationChargePix  &pix    = (MCalibrationChargePix&)fCam->GetAverageArea(j);
-      MBadPixelsPix          &bad    = fCam->GetAverageBadArea(j);      
-
-      if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
-        {
-          *fLog << warn << "Saturated Lo Gain histogram in area idx: " << j << endl;
-          histlo.CreateFourierSpectrum();
-          continue;
-        }
-
-      if (pix.IsHiGainSaturation())
-        FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
-    }
-
+  if (fLoGain)
+    for (Int_t j=0; j<fAverageLoGainAreas->GetSize(); j++)
+      {
+        
+        MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)GetAverageLoGainArea(j);      
+        MCalibrationChargePix  &pix    = (MCalibrationChargePix&)fCam->GetAverageArea(j);
+        MBadPixelsPix          &bad    = fCam->GetAverageBadArea(j);      
+        
+        if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
+          {
+            *fLog << warn << "Saturated Lo Gain histogram in area idx: " << j << endl;
+            histlo.CreateFourierSpectrum();
+            continue;
+          }
+        
+        if (pix.IsHiGainSaturation())
+          FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
+      }
+  
   for (Int_t j=0; j<fAverageHiGainSectors->GetSize(); j++)
     {
@@ -791,22 +815,23 @@
     }
   
-  for (Int_t j=0; j<fAverageLoGainSectors->GetSize(); j++)
-    {
-      
-      MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)GetAverageLoGainSector(j);      
-      MCalibrationChargePix  &pix    = (MCalibrationChargePix&)fCam->GetAverageSector(j);
-      MBadPixelsPix          &bad    = fCam->GetAverageBadSector(j);        
-      
-      if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
-        {
-          *fLog << warn << "Saturated Lo Gain histogram in sector: " << j << endl;
-          bad.SetUncalibrated( MBadPixelsPix::kLoGainSaturation ); 
-          histlo.CreateFourierSpectrum();
-          continue;
-        }
-
-      if (pix.IsHiGainSaturation())
-        FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
-    }
+  if (fLoGain)
+    for (Int_t j=0; j<fAverageLoGainSectors->GetSize(); j++)
+      {
+        
+        MHCalibrationChargePix &histlo = (MHCalibrationChargePix&)GetAverageLoGainSector(j);      
+        MCalibrationChargePix  &pix    = (MCalibrationChargePix&)fCam->GetAverageSector(j);
+        MBadPixelsPix          &bad    = fCam->GetAverageBadSector(j);        
+        
+        if (histlo.GetSaturated() > fNumLoGainSaturationLimit*histlo.GetHGausHist()->GetEntries())
+          {
+            *fLog << warn << "Saturated Lo Gain histogram in sector: " << j << endl;
+            bad.SetUncalibrated( MBadPixelsPix::kLoGainSaturation ); 
+            histlo.CreateFourierSpectrum();
+            continue;
+          }
+        
+        if (pix.IsHiGainSaturation())
+          FinalizeAbsTimes(histlo, pix, bad, fFirstLoGain, fLastLoGain);
+      }
   
   //
@@ -819,7 +844,8 @@
   // Perform the fitting for the Low Gain (done in MHCalibrationCam)
   //
-  FitLoGainArrays((MCalibrationCam&)(*fCam),(*fBadPixels),
-                  MBadPixelsPix::kLoGainNotFitted,
-                  MBadPixelsPix::kLoGainOscillating);
+  if (fLoGain)
+    FitLoGainArrays((MCalibrationCam&)(*fCam),(*fBadPixels),
+                    MBadPixelsPix::kLoGainNotFitted,
+                    MBadPixelsPix::kLoGainOscillating);
       
   return kTRUE;
@@ -963,10 +989,12 @@
        
        MHCalibrationChargePix &hipix = (MHCalibrationChargePix&)GetAverageHiGainArea(i);
-       MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainArea(i);
        //
        // Ask for Hi-Gain saturation
        //
-       if (hipix.GetSaturated() > fNumHiGainSaturationLimit*hipix.GetHGausHist()->GetEntries())
-         DrawDataCheckPixel(lopix,i ? gkLoGainOuterRefLines : gkLoGainInnerRefLines);
+       if (hipix.GetSaturated() > fNumHiGainSaturationLimit*hipix.GetHGausHist()->GetEntries() && fLoGain)
+         {
+           MHCalibrationChargePix &lopix = (MHCalibrationChargePix&)GetAverageLoGainArea(i);
+           DrawDataCheckPixel(lopix,i ? gkLoGainOuterRefLines : gkLoGainInnerRefLines);
+         }
        else
          DrawDataCheckPixel(hipix,i ? gkHiGainOuterRefLines : gkHiGainInnerRefLines);
@@ -1039,5 +1067,5 @@
   
   gPad->SetTicks();
-  if (!pix.IsEmpty() && !pix.IsOnlyOverflow())
+  if (!pix.IsEmpty() && !pix.IsOnlyOverflow() && !pix.IsOnlyUnderflow())
     gPad->SetLogy();
 
Index: /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargePix.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargePix.cc	(revision 4883)
+++ /trunk/MagicSoft/Mars/mcalib/MHCalibrationChargePix.cc	(revision 4884)
@@ -266,6 +266,6 @@
     }
   */
-  if (!IsEmpty() && !IsOnlyOverflow())
-      gPad->SetLogy();
+  if (!IsEmpty() && !IsOnlyOverflow() && !IsOnlyUnderflow())
+    gPad->SetLogy();
 
   gPad->SetTicks();
