Index: /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc
===================================================================
--- /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 8291)
+++ /trunk/MagicSoft/Mars/mjobs/MJCalibration.cc	(revision 8292)
@@ -104,4 +104,5 @@
 #include "MLogManip.h"
 
+#include "MEnv.h"
 #include "MRunIter.h"
 #include "MSequence.h"
@@ -110,4 +111,5 @@
 #include "MEvtLoop.h"
 
+#include "MHCamEvent.h"
 #include "MHCamera.h"
 #include "MGeomCam.h"
@@ -124,6 +126,4 @@
 #include "MCalibrationPatternDecode.h"
 #include "MCalibrationCam.h"
-#include "MCalibrationHiLoCam.h"
-#include "MCalibrationHiLoPix.h"
 #include "MCalibrationQECam.h"
 #include "MCalibrationQEPix.h"
@@ -186,5 +186,5 @@
 const Int_t MJCalibration::gkThirdBlindPixelInstallation   = 43308;
 const TString MJCalibration::fgReferenceFile = "mjobs/calibrationref.rc";
-const TString MJCalibration::fgHiLoCalibFile = "mjobs/hilocalib_df46.root";
+const TString MJCalibration::fgHiLoCalibFile = "resources/hilocalib.rc";
 
 // --------------------------------------------------------------------------
@@ -1473,63 +1473,105 @@
 Bool_t MJCalibration::ReadHiLoCalibFile()
 {
-
-  if (!fIsHiLoCalibration)
+    if (!fIsHiLoCalibration)
+        return kTRUE;
+
+    // We use the night time stamp to determine the period
+    // because the night must be in the sequence file
+    const MTime &night = fSequence.GetNight();
+    const Int_t period = night.GetMagicPeriod();
+
+    // Open resource file
+    MEnv env(fHiLoCalibFile);
+    if (!env.IsValid())
+    {
+        *fLog << err << "ERROR - Resource file " << fHiLoCalibFile;
+        *fLog << " could not be opened... abort." << endl;
+        return kFALSE;
+    }
+
+    // Check for a valid entry for the correct period
+    TString fname = env.GetValue(Form("%02d", period), "");
+    if (fname.IsNull())
+    {
+        *fLog << err << "ERROR - No entry for period " << period;
+        *fLog << " found in " << fHiLoCalibFile << "... looking for default." << endl;
+        return kFALSE;
+/*
+        *fLog << warn << "WARNING - No entry for period " << period;
+        *fLog << " found in " << fHiLoCalibFile << "... looking for default." << endl;
+
+        fname = env.GetValue("00", "");
+        if (fname.IsNull())
+        {
+            *fLog << err << "ERROR - No default entry (00) found in ";
+            *fLog << fHiLoCalibFile << "... abort." << endl;
+            return kFALSE;
+        }*/
+    }
+
+    *fLog << inf << "Reading Hi-/Lo-Gain calibration constants from " << fname << endl;
+
+    // Open file with calibration constants
+    TFile file(fname, "READ");
+    if (!file.IsOpen())
+    {
+        *fLog << err << "ERROR - Couldn't open file " << fname << " for reading... abort." << endl;
+        return kFALSE;
+    }
+
+    // read calibration constants
+    MHCamEvent hilocam;
+    if (hilocam.Read()<=0)
+    {
+        *fLog << err << "ERROR - Unable to read MHCamEvent from " << fname << "... abort." << endl;
+        return kFALSE;
+    }
+
+    // Get histogram with constants
+    MHCamera *hist = hilocam.GetHist();
+    if (!hist)
+    {
+        *fLog << err << "ERROR - MHCamEvent from " << fname << " empty... abort." << endl;
+        return kFALSE;
+    }
+
+    // Do some sanity stuff
+    if (fCalibrationCam.GetSize() < 1)
+        fCalibrationCam.InitSize(hist->GetNumPixels());
+  
+    if (fBadPixels.GetSize() < 1)
+        fBadPixels.InitSize(hist->GetNumPixels());
+  
+    if ((UInt_t)fCalibrationCam.GetSize() != hist->GetNumPixels())
+    {
+        *fLog << err << "ERROR - Size mismatch MHCamEvent and MCalibrationChargeCam.. abort." << endl;
+        return kFALSE;
+    }
+
+    // Copy the constants to their final location
+    // FIXME: For what the hell do we need to have the constants in
+    //        in MCalibrationChargeCam?
+    for (UInt_t i=0; i<hist->GetNumPixels(); i++)
+    {
+        hist->SetBit(MHCamera::kProfile);
+        Double_t v = hist->GetBinContent(i);
+        hist->SetBit(MHCamera::kErrorMean);
+        Double_t e = hist->GetBinError(i);
+        hist->ResetBit(MHCamera::kErrorMean);
+        Double_t s = hist->GetBinError(i);
+
+        if (!hist->IsUsed(i))
+        {
+            fBadPixels[i].SetUncalibrated(MBadPixelsPix::kConversionHiLoNotValid);
+            v = e = s = -1;
+        }
+
+        MCalibrationChargePix &cpix = (MCalibrationChargePix&)fCalibrationCam[i];
+        cpix.SetConversionHiLo(v);
+        cpix.SetConversionHiLoErr(e);
+        cpix.SetConversionHiLoSigma(s);
+    }
+
     return kTRUE;
-
-  TFile file(fHiLoCalibFile,"READ");
-  if (!file.IsOpen())
-  {
-    *fLog << err << "ERROR - Couldn't open file " << fHiLoCalibFile << " for reading... abort." << endl;
-    return kFALSE;
-  }
-
-  MCalibrationHiLoCam hilocam;
-  if (hilocam.Read()<=0)
-  {
-      *fLog << err << "Unable to read MCalibrationHiLoCam from " << fHiLoCalibFile << "... abort." << endl;
-      return kFALSE;
-  }
-  if (hilocam.GetSize() < 1)
-  {
-      *fLog << err << "MCalibationHiLoCam is un-initialized in file " << fHiLoCalibFile << "... abort." << endl;
-      return kFALSE;
-  }
-
-  *fLog << all << "Hi-/Lo-Gain intercalibration constants read from " << fHiLoCalibFile << endl << endl;
-
-  if (fCalibrationCam.GetSize() < 1)
-    fCalibrationCam.InitSize(hilocam.GetSize());
-  
-  if (fBadPixels.GetSize() < 1)
-    fBadPixels.InitSize(hilocam.GetSize());
-  
-  if (fCalibrationCam.GetSize() != hilocam.GetSize())
-  {
-      *fLog << err << "Size mismatch MCalibationHiLoCam and MCalibrationChargeCam.. abort." << endl;
-      return kFALSE;
-  }
-
-  for (Int_t i=0;i<hilocam.GetSize();i++)
-    {
-      const MCalibrationHiLoPix &pix = (MCalibrationHiLoPix&)hilocam[i];
-
-      const Float_t ratio  = pix.GetHiLoChargeRatio();
-      const Float_t raterr = pix.GetHiLoChargeRatioErr();
-      const Float_t sigma  = pix.GetHiLoChargeRatioSigma();
-
-      if (ratio < 0.)
-        {
-          fBadPixels[i].SetUncalibrated(MBadPixelsPix::kConversionHiLoNotValid);
-          continue;
-        }
-      
-      MCalibrationChargePix &cpix = (MCalibrationChargePix&)fCalibrationCam[i];
-      
-      cpix.SetConversionHiLo(ratio);
-      cpix.SetConversionHiLoErr(raterr);
-      cpix.SetConversionHiLoSigma(sigma);
-    }
-
-  return kTRUE;
 }
 
