Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 5945)
+++ trunk/MagicSoft/Mars/Changelog	(revision 5946)
@@ -20,4 +20,15 @@
 
                                                  -*-*- END OF LINE -*-*-
+
+ 2005/01/23 Markus Gaug
+  
+  * mhcalib/MHCalibrationHiLoCam.[h,cc]
+    - updated to new logain switch setting in MExtractTimeAndCharge
+    - extract also high-gain vs. low-gain time difference
+
+  * mhcalib/MCalibrationHiLoCam.[h,cc]
+  * mhcalib/MCalibrationHiLoPix.[h,cc]
+  * mhcalib/MCalibrationIntensityHiLoCam.[h,cc]
+    - updated accordingly
 
  2005/01/22 Markus Gaug
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoCam.cc	(revision 5945)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoCam.cc	(revision 5946)
@@ -139,6 +139,6 @@
           *fLog << all 
                 << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Pix  ",pix->GetPixId(),
-                        ":            Ratio: ",pix->GetHiLoRatio()," +- ",pix->GetHiLoRatioErr(),
-                        "   Sigma: ",pix->GetHiLoSigma()," +- ",pix->GetHiLoSigmaErr())
+                        ":            Ratio: ",pix->GetHiLoChargeRatio()," +- ",pix->GetHiLoChargeRatioErr(),
+                        "   Sigma: ",pix->GetHiLoChargeRatioSigma()," +- ",pix->GetHiLoChargeRatioSigmaErr())
 		<< endl;
           id++;
@@ -173,6 +173,6 @@
     *fLog << all 
           << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Area   ",pix->GetPixId(),
-                  ":  Ratio: ",pix->GetHiLoRatio()," +- ",pix->GetHiLoRatioErr(),
-                  "   Sigma: ",pix->GetHiLoSigma()," +- ",pix->GetHiLoSigmaErr())
+                  ":  Ratio: ",pix->GetHiLoChargeRatio()," +- ",pix->GetHiLoChargeRatioErr(),
+                  "   Sigma: ",pix->GetHiLoChargeRatioSigma()," +- ",pix->GetHiLoChargeRatioSigmaErr())
           << endl;
   }
@@ -183,6 +183,6 @@
     *fLog << all 
           << Form("%s%4i%s%4.2f%s%4.2f%s%4.2f%s%4.2f","Average Sector ",pix->GetPixId(),
-                  ":  Ratio: ",pix->GetHiLoRatio()," +- ",pix->GetHiLoRatioErr(),
-                  "   Sigma: ",pix->GetHiLoSigma()," +- ",pix->GetHiLoSigmaErr())
+                  ":  Ratio: ",pix->GetHiLoChargeRatio()," +- ",pix->GetHiLoChargeRatioErr(),
+                  "   Sigma: ",pix->GetHiLoChargeRatioSigma()," +- ",pix->GetHiLoChargeRatioSigmaErr())
           << endl;
   }
@@ -225,25 +225,50 @@
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetMean();
+      val = pix.GetHiLoChargeRatio();
       break;
     case 1:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetMeanErr();
+      val = pix.GetHiLoChargeRatioErr();
       break;
     case 2:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetSigma();
+      val = pix.GetHiLoChargeRatioSigma();
       break;
     case 3:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetSigmaErr();
+      val = pix.GetHiLoChargeRatioSigmaErr();
       break;
     case 4:
       if (pix.IsExcluded())
         return kFALSE;
-      val = pix.GetProb();
+      val = pix.GetHiLoChargeRatioProb();
+      break;
+    case 5:
+      if (pix.IsExcluded())
+        return kFALSE;
+      val = pix.GetHiLoTimeDiff();
+      break;
+    case 6:
+      if (pix.IsExcluded())
+        return kFALSE;
+      val = pix.GetHiLoTimeDiffErr();
+      break;
+    case 7:
+      if (pix.IsExcluded())
+        return kFALSE;
+      val = pix.GetHiLoTimeDiffSigma();
+      break;
+    case 8:
+      if (pix.IsExcluded())
+        return kFALSE;
+      val = pix.GetHiLoTimeDiffSigmaErr();
+      break;
+    case 9:
+      if (pix.IsExcluded())
+        return kFALSE;
+      val = pix.GetHiLoTimeDiffProb();
       break;
     default:
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoPix.h
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoPix.h	(revision 5945)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationHiLoPix.h	(revision 5946)
@@ -15,8 +15,15 @@
   ~MCalibrationHiLoPix() {}
   
-  Float_t GetHiLoRatio()    const { return GetMean();        }
-  Float_t GetHiLoRatioErr() const { return GetMeanErr();     }
-  Float_t GetHiLoSigma()    const { return GetSigma();       }
-  Float_t GetHiLoSigmaErr() const { return GetSigmaErr();    }
+  Float_t GetHiLoChargeRatio()         const { return GetHiGainMean();     }
+  Float_t GetHiLoChargeRatioErr()      const { return GetHiGainMeanErr();  }
+  Float_t GetHiLoChargeRatioSigma()    const { return GetHiGainSigma();    }
+  Float_t GetHiLoChargeRatioSigmaErr() const { return GetHiGainSigmaErr(); }
+  Float_t GetHiLoChargeRatioProb()     const { return GetHiGainProb();     }
+									   
+  Float_t GetHiLoTimeDiff()            const { return GetLoGainMean();     }
+  Float_t GetHiLoTimeDiffErr()         const { return GetLoGainMeanErr();  }
+  Float_t GetHiLoTimeDiffSigma()       const { return GetLoGainSigma();    }
+  Float_t GetHiLoTimeDiffSigmaErr()    const { return GetLoGainSigmaErr(); }
+  Float_t GetHiLoTimeDiffProb()        const { return GetLoGainProb();     }
 
   ClassDef(MCalibrationHiLoPix, 1)	// Container HiLo conversion Calibration Results Pixel
Index: trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityHiLoCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityHiLoCam.cc	(revision 5945)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrationIntensityHiLoCam.cc	(revision 5946)
@@ -139,6 +139,6 @@
         continue;
       //
-      ratio[cnt]    = relpix.GetHiLoRatio();
-      ratioerr[cnt] = relpix.GetHiLoRatioErr();
+      ratio[cnt]    = relpix.GetHiLoChargeRatio();
+      ratioerr[cnt] = relpix.GetHiLoChargeRatioErr();
       //
       sig   [cnt] = pix.GetPheFFactorMethod();
@@ -219,6 +219,6 @@
             continue;
           
-          ratiool  += relpix.GetHiLoRatio();
-          ratiool2 += relpix.GetHiLoRatio()*relpix.GetHiLoRatio();
+          ratiool  += relpix.GetHiLoChargeRatio();
+          ratiool2 += relpix.GetHiLoChargeRatio()*relpix.GetHiLoChargeRatio();
           num++;
         }
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.cc	(revision 5945)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.cc	(revision 5946)
@@ -95,6 +95,6 @@
 #include "MExtractedSignalCam.h"
 #include "MExtractedSignalPix.h"
-
-#include "MRawEvtPixelIter.h"
+#include "MArrivalTimeCam.h"
+#include "MArrivalTimePix.h"
 
 #include "MGeomCam.h"
@@ -128,6 +128,4 @@
 const TString MHCalibrationHiLoCam::gsHistXTitle = "Amplification Ratio [1]";
 const TString MHCalibrationHiLoCam::gsHistYTitle = "Nr. events";
-const Byte_t  MHCalibrationHiLoCam::fgLowerLim   = 200;
-const Byte_t  MHCalibrationHiLoCam::fgUpperLim   = 252;
 // --------------------------------------------------------------------------
 //
@@ -164,6 +162,4 @@
   SetHistYTitle(gsHistYTitle.Data());
 
-  SetLowerLim();
-  SetUpperLim();
 }
 
@@ -207,27 +203,13 @@
 
   const Int_t navhi   =  fAverageHiGainAreas->GetSize();
+  const Int_t navlo   =  fAverageLoGainAreas->GetSize();
 
   for (int i=0; i<navhi; i++)
     cam->fAverageHiGainAreas->AddAt(GetAverageHiGainArea(i).Clone(),i);
 
+  for (int i=0; i<navlo; i++)
+    cam->fAverageLoGainAreas->AddAt(GetAverageLoGainArea(i).Clone(),i);
+
   return cam;
-}
-
-// --------------------------------------------------------------------------
-//
-// Gets the pointers to:
-// - MRawEvtData
-//
-Bool_t MHCalibrationHiLoCam::SetupHists(const MParList *pList)
-{
-
-  fRawEvt = (MRawEvtData*)pList->FindObject("MRawEvtData");
-  if (!fRawEvt)
-  {
-      *fLog << err << dbginf << "MRawEvtData not found... aborting." << endl;
-      return kFALSE;
-  }
-
-  return kTRUE;
 }
 
@@ -239,10 +221,11 @@
 // Searches pointer to:
 // - MExtractedSignalCam
+// - MArrivalTimeCam
 //
 // Calls:
 // - MHCalibrationCam::InitHiGainArrays()
+// - MHCalibrationCam::InitLoGainArrays()
 // 
 // Sets:
-// - SetLoGain(kFALSE);
 // - fSumarea   to nareas
 // - fSumsector to nareas
@@ -263,4 +246,12 @@
   }
 
+  MArrivalTimeCam *times = (MArrivalTimeCam*)pList->FindObject("MArrivalTimeCam");
+  if (!times)
+  {
+      *fLog << warn << "MArrivalTimeCam not found... cannot calibrated arrival times between "
+	    <<"high and low-gain" << endl;
+      SetLoGain(kFALSE);
+  }
+
   const Int_t npixels  = fGeom->GetNumPixels();
   const Int_t nsectors = fGeom->GetNumSectors();
@@ -268,12 +259,17 @@
 
   InitHiGainArrays(npixels,nareas,nsectors);
-
-  fSumarea  .Set(nareas); 
-  fSumsector.Set(nsectors); 
-  fNumarea  .Set(nareas); 
-  fNumsector.Set(nsectors); 
-
-  SetLoGain(kFALSE);
-
+  InitLoGainArrays(npixels,nareas,nsectors);
+
+  fSumareahi  .Set(nareas); 
+  fSumsectorhi.Set(nsectors); 
+  fNumareahi  .Set(nareas); 
+  fNumsectorhi.Set(nsectors); 
+  if (IsLoGain())
+    {
+      fSumarealo  .Set(nareas); 
+      fSumsectorlo.Set(nsectors); 
+      fNumarealo  .Set(nareas); 
+      fNumsectorlo.Set(nsectors); 
+    }
   return kTRUE;
 }
@@ -290,5 +286,9 @@
 // Fills histograms (MHGausEvents::FillHistAndArray()) with:
 // - MExtractedSignalPix::GetExtractedSignalHiGain(pixid) / MExtractedSignalPix::GetExtractedSignalLoGain;
-//   if the high-gain signal lies in between the limits: fLowerLim and fUpperLim
+//   if the high-gain signal does not show high-gain saturation, but the low-gain
+//   has been extracted.
+// - MArrivalTimePix::GetArrivalTimeHiGain(pixid) / MArrivalTimePix::GetArrivalTimeLoGain;
+//   if the high-gain signal does not show high-gain saturation, but the low-gain
+//   has been extracted.
 //
 Bool_t MHCalibrationHiLoCam::FillHists(const MParContainer *par, const Stat_t w)
@@ -302,46 +302,72 @@
     }
   
+  MArrivalTimeCam *times = (MArrivalTimeCam*)par;
+  
+  const Int_t npixels  = fGeom->GetNumPixels();
   const Int_t nareas   = fGeom->GetNumAreas();
   const Int_t nsectors = fGeom->GetNumSectors();
 
-  fSumarea  .Reset();
-  fSumsector.Reset(); 
-  fNumarea  .Reset(); 
-  fNumsector.Reset(); 
-
-  MRawEvtPixelIter pixel(fRawEvt);
-
-  while (pixel.Next())
-    {
-      
-      const Byte_t max = pixel.GetMaxHiGainSample();
-      
-      if (max < fLowerLim || max > fUpperLim)
-       continue;
-
-      const UInt_t pixidx = pixel.GetPixelId();
-
-      MHCalibrationPix &hist = (*this)[pixidx];
-
-      if (hist.IsExcluded())
+  fSumareahi  .Reset();
+  fSumsectorhi.Reset(); 
+  fNumareahi  .Reset(); 
+  fNumsectorhi.Reset(); 
+  fSumarealo  .Reset();
+  fSumsectorlo.Reset(); 
+  fNumarealo  .Reset(); 
+  fNumsectorlo.Reset(); 
+
+  for (Int_t i=0; i<npixels; i++)
+    {
+      const MExtractedSignalPix &pix = (*signal)[i];
+      const Int_t aidx   = (*fGeom)[i].GetAidx();
+      const Int_t sector = (*fGeom)[i].GetSector();
+
+      const Float_t siglo = pix.GetExtractedSignalLoGain();
+
+      //
+      // Skip all pixels with:
+      // - Saturated high-gain
+      // - Not extracted low-gain 
+      //   (see MExtractTimeAndCharge::fLoGainSwitch for setting the criteria)
+      //
+      if (siglo < 0.5 || pix.GetNumHiGainSaturated() > 0)
 	continue;
 
-      const MExtractedSignalPix &pix = (*signal)[pixidx];
-      const Int_t aidx   = (*fGeom)[pixidx].GetAidx();
-      const Int_t sector = (*fGeom)[pixidx].GetSector();
-
-      const Float_t ratio = pix.GetExtractedSignalHiGain() / pix.GetExtractedSignalLoGain();
-      
-      hist.FillHistAndArray(ratio) ;
-      fSumarea  [aidx]   += ratio;
-      fNumarea  [aidx]   ++;
-      fSumsector[sector] += ratio;
-      fNumsector[sector] ++;
+      const Float_t sighi = pix.GetExtractedSignalHiGain();
+      const Float_t ratio = sighi / siglo;
+      
+      MHCalibrationPix &histhi = (*this)[i];
+
+      histhi.FillHistAndArray(ratio);
+      fSumareahi  [aidx]   += ratio;
+      fNumareahi  [aidx]   ++;
+      fSumsectorhi[sector] += ratio;
+      fNumsectorhi[sector] ++;
+
+      if (IsLoGain())
+	{
+	  const MArrivalTimePix &tix = (*times)[i];
+	  MHCalibrationPix &histlo = (*this)(i);	  
+
+	  const Float_t diff = tix.GetArrivalTimeLoGain() - tix.GetArrivalTimeHiGain();
+
+	  histlo.FillHistAndArray(diff);
+	  fSumarealo  [aidx]   += diff;
+	  fNumarealo  [aidx]   ++;
+	  fSumsectorlo[sector] += diff;
+	  fNumsectorlo[sector] ++;
+	}
     }
   
   for (Int_t j=0; j<nareas; j++)
     {
-      MHCalibrationPix &hist = GetAverageHiGainArea(j);
-      hist.FillHistAndArray(fNumarea[j] == 0 ? 0. : fSumarea[j]/fNumarea[j]);
+      MHCalibrationPix &histhi = GetAverageHiGainArea(j);
+      histhi.FillHistAndArray(fNumareahi[j] == 0 ? 0. : fSumareahi[j]/fNumareahi[j]);
+
+      if (IsLoGain())
+	{
+	  MHCalibrationPix &histlo = GetAverageLoGainArea(j);
+	  histlo.FillHistAndArray(fNumarealo[j] == 0 ? 0. : fSumarealo[j]/fNumarealo[j]);
+	}
     }
   
@@ -349,5 +375,11 @@
     {
       MHCalibrationPix &hist = GetAverageHiGainSector(j);
-      hist.FillHistAndArray(fNumsector[j] == 0 ? 0. : fSumsector[j]/fNumsector[j]);
+      hist.FillHistAndArray(fNumsectorhi[j] == 0 ? 0. : fSumsectorhi[j]/fNumsectorhi[j]);
+
+      if (IsLoGain())
+	{
+	  MHCalibrationPix &histlo = GetAverageLoGainSector(j);
+	  histlo.FillHistAndArray(fNumsectorlo[j] == 0 ? 0. : fSumsectorlo[j]/fNumsectorlo[j]);
+	}
     }
 
@@ -369,13 +401,8 @@
 
   MCalibrationCam *hilocam = fIntensCam ? fIntensCam->GetCam() : fCam;
-  MBadPixelsCam   *badcam = fIntensBad ? fIntensBad->GetCam() : fBadPixels;
-
-  const Int_t nareas = fAverageHiGainAreas->GetSize();
+  MBadPixelsCam   *badcam  = fIntensBad ? fIntensBad->GetCam() : fBadPixels;
+
+  const Int_t nareas   = fAverageHiGainAreas->GetSize();
   const Int_t nsectors = fAverageHiGainSectors->GetSize();
-
-  TArrayI satarea(nareas);
-  TArrayI satsect(nsectors);
-  fNumarea  .Reset(); 
-  fNumsector.Reset(); 
 
   for (Int_t i=0; i<fHiGainArray->GetSize(); i++)
@@ -387,12 +414,4 @@
         continue;
       
-      const Int_t aidx   = (*fGeom)[i].GetAidx();
-      const Int_t sector = (*fGeom)[i].GetSector();
-
-      fNumarea[aidx]++;
-      fNumsector[sector]++;
-      //
-      // Check histogram overflow
-      // 
       CheckOverflow(hist);
     }
@@ -422,4 +441,36 @@
                   MBadPixelsPix::kHiLoOscillating);
   
+  if (!IsLoGain())
+    return kTRUE;
+
+  for (Int_t i=0; i<fLoGainArray->GetSize(); i++)
+    {
+      
+      MHCalibrationPix &hist = (*this)(i);
+
+      if (hist.IsExcluded())
+        continue;
+      
+      CheckOverflow(hist);
+    }
+
+  for (Int_t j=0; j<nareas; j++)
+    {
+      
+      MHCalibrationPix    &hist = GetAverageLoGainArea(j);      
+      CheckOverflow(hist);
+   }
+  
+  for (Int_t j=0; j<nsectors; j++)
+    {
+      
+      MHCalibrationPix &hist = GetAverageLoGainSector(j);      
+      CheckOverflow(hist);
+    }
+
+  FitLoGainArrays(*hilocam,*badcam,
+                  MBadPixelsPix::kHiLoNotFitted,
+                  MBadPixelsPix::kHiLoOscillating);
+  
   return kTRUE;
 }
@@ -478,29 +529,67 @@
     return kFALSE;
 
-  const MHCalibrationPix &pix = (*this)[idx];
+  const MHCalibrationPix &pixhi = (*this)[idx];
+  const MHCalibrationPix &pixlo = (*this)(idx);
 
   switch (type)
     {
     case 0:
-      val = pix.GetMean();
+      val = pixhi.GetMean();
       break;
     case 1:
-      val = pix.GetMeanErr();
+      val = pixhi.GetMeanErr();
       break;
     case 2:
-      val = pix.GetSigma();
+      val = pixhi.GetSigma();
       break;
     case 3:
-      val = pix.GetSigmaErr();
+      val = pixhi.GetSigmaErr();
       break;
     case 4:
-      val = pix.GetProb();
+      val = pixhi.GetProb();
       break;
     case 5:
-      if (!pix.IsGausFitOK())
+      if (!pixhi.IsGausFitOK())
         val = 1.;
       break;
     case 6:
-      if (!pix.IsFourierSpectrumOK())
+      if (!pixhi.IsFourierSpectrumOK())
+        val = 1.;
+      break;
+    case 7:
+      if (!IsLoGain())
+	break;
+      val = pixlo.GetMean();
+      break;
+    case 8:
+      if (!IsLoGain())
+	break;
+      val = pixlo.GetMeanErr();
+      break;
+    case 9:
+      if (!IsLoGain())
+	break;
+      val = pixlo.GetSigma();
+      break;
+    case 10:
+      if (!IsLoGain())
+	break;
+      val = pixlo.GetSigmaErr();
+      break;
+    case 11:
+      if (!IsLoGain())
+	break;
+      val = pixlo.GetProb();
+      break;
+    case 12:
+      if (!IsLoGain())
+	break;
+      if (!pixlo.IsGausFitOK())
+        val = 1.;
+      break;
+    case 13:
+      if (!IsLoGain())
+	break;
+      if (!pixlo.IsFourierSpectrumOK())
         val = 1.;
       break;
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.h	(revision 5945)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationHiLoCam.h	(revision 5946)
@@ -33,18 +33,13 @@
   static const TString gsHistYTitle;                 //! Default Histogram y-axis titles
 
-  static const Byte_t  fgLowerLim;                   //! Default for fLowerLimt        (now set to: 200)
-  static const Byte_t  fgUpperLim;                   //! Default for fUpperLimt        (now set to: 252)
+  MArrayD fSumareahi  ;                               //
+  MArrayD fSumsectorhi;                               //
+  MArrayI fNumareahi  ;                               //
+  MArrayI fNumsectorhi;                               //
+  MArrayD fSumarealo  ;                               //
+  MArrayD fSumsectorlo;                               //
+  MArrayI fNumarealo  ;                               //
+  MArrayI fNumsectorlo;                               //
 
-  Byte_t fLowerLim;                                 //  Lower allowed FADC value limit for max. slicey
-  Byte_t fUpperLim;                                 //  Upper allowed FADC value limit for max. slicey
-  
-  MArrayD fSumarea  ;                               //
-  MArrayD fSumsector;                               //
-  MArrayI fNumarea  ;                               //
-  MArrayI fNumsector;                               //
-
-  MRawEvtData                       *fRawEvt;       //!  Raw event data 
-
-  Bool_t SetupHists(const MParList *pList);  
   Bool_t ReInitHists(MParList *pList);
   Bool_t FillHists(const MParContainer *par, const Stat_t w=1);
@@ -62,10 +57,4 @@
   TObject *Clone(const char *name="") const;
 
-  Byte_t GetLowerLim() const { return fLowerLim; }
-  Byte_t GetUpperLim() const { return fUpperLim; }    
-
-  void  SetLowerLim( const UInt_t i=fgLowerLim) { fLowerLim = i; }
-  void  SetUpperLim( const UInt_t i=fgUpperLim) { fUpperLim = i; }
-
   Bool_t GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type=0) const;
   void DrawPixelContent(Int_t idx) const;
