Index: trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 7117)
+++ trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.cc	(revision 7126)
@@ -86,5 +86,6 @@
 //
 MBadPixelsCalc::MBadPixelsCalc(const char *name, const char *title)
-    : fPedestalLevel(3), fPedestalLevelVariance(5), fNamePedPhotCam("MPedPhotCam"),
+    : fPedestalLevel(3), fPedestalLevelVarianceLo(5),
+    fPedestalLevelVarianceHi(5), fNamePedPhotCam("MPedPhotCam"),
     fCheckInProcess(kTRUE), fCheckInPostProcess(kFALSE)
 {
@@ -120,8 +121,10 @@
 
     *fLog << inf << "Name of MPedPhotCam to get pedestal rms from: " << fNamePedPhotCam << endl;
-    if (fPedestalLevel)
+    if (fPedestalLevel>0)
         *fLog << "Checking mean 'pedestal rms' against absolute value with level " << fPedestalLevel << endl;
-    if (fPedestalLevelVariance)
-        *fLog << "Checking mean 'pedestal rms' against its variance with level " << fPedestalLevelVariance << endl;
+    if (fPedestalLevelVarianceLo>0)
+        *fLog << "Checking mean 'pedestal rms' against its lower variance with level " << fPedestalLevelVarianceLo << endl;
+    if (fPedestalLevelVarianceHi>0)
+        *fLog << "Checking mean 'pedestal rms' against its upper variance with level " << fPedestalLevelVarianceHi << endl;
 
     return kTRUE;
@@ -142,5 +145,8 @@
     }
 
-    if (fPedestalLevel<=0 && fPedestalLevelVariance<=0)
+    const Bool_t checklo  = fPedestalLevelVarianceLo>0;
+    const Bool_t checkhi  = fPedestalLevelVarianceHi>0;
+
+    if (fPedestalLevel<=0 && !checklo && !checkhi)
         return kTRUE;
 
@@ -219,11 +225,11 @@
         }
 
-        if (fPedestalLevelVariance>0)
+        if (checklo || checkhi)
         {
             varrms2[i] /= npix[i];
             varrms2[i]  = TMath::Sqrt(varrms2[i]-meanrms2[i]*meanrms2[i]);
 
-            lolim2[i]   = meanrms2[i]-fPedestalLevelVariance*varrms2[i];
-            uplim2[i]   = meanrms2[i]+fPedestalLevelVariance*varrms2[i];
+            lolim2[i]   = meanrms2[i]-fPedestalLevelVarianceLo*varrms2[i];
+            uplim2[i]   = meanrms2[i]+fPedestalLevelVarianceHi*varrms2[i];
         }
     }
@@ -240,6 +246,8 @@
         const Byte_t  aidx = (*fGeomCam)[i].GetAidx();
 
-        if ((fPedestalLevel<=0         || (rms>lolim1[aidx] && rms<=uplim1[aidx])) &&
-            (fPedestalLevelVariance<=0 || (rms>lolim2[aidx] && rms<=uplim2[aidx])))
+        if ((fPedestalLevel<=0 || (rms> lolim1[aidx] && rms<=uplim1[aidx])) &&
+            (!checklo          ||  rms> lolim2[aidx])                       &&
+            (!checkhi          ||  rms<=uplim2[aidx])
+           )
             continue;
 
@@ -303,5 +311,10 @@
 // Read the setup from a TEnv, eg:
 //   MBadPixelsCalc.PedestalLevel:         3.0
-//   MBadPixelsCalc.PedestalLevelVariance: 3.0
+//
+//   MBadPixelsCalc.PedestalLevelVariance:   5.0
+//     overwrites
+//   MBadPixelsCalc.PedestalLevelVarianceLo: 5.0
+//     and
+//   MBadPixelsCalc.PedestalLevelVarianceHi: 5.0
 //
 Int_t MBadPixelsCalc::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
@@ -313,9 +326,19 @@
         SetPedestalLevel(GetEnvValue(env, prefix, "PedestalLevel", fPedestalLevel));
     }
+    if (IsEnvDefined(env, prefix, "PedestalLevelVarianceLo", print))
+    {
+        rc = kTRUE;
+        SetPedestalLevelVarianceLo(GetEnvValue(env, prefix, "PedestalLevelVarianceLo", fPedestalLevelVarianceLo));
+    }
+    if (IsEnvDefined(env, prefix, "PedestalLevelVarianceHi", print))
+    {
+        rc = kTRUE;
+        SetPedestalLevelVarianceHi(GetEnvValue(env, prefix, "PedestalLevelVarianceHi", fPedestalLevelVarianceHi));
+    }
 
     if (IsEnvDefined(env, prefix, "PedestalLevelVariance", print))
     {
         rc = kTRUE;
-        SetPedestalLevelVariance(GetEnvValue(env, prefix, "PedestalLevelVariance", fPedestalLevelVariance));
+        SetPedestalLevelVariance(GetEnvValue(env, prefix, "PedestalLevelVariance", -1));
     }
     return rc;
Index: trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.h
===================================================================
--- trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.h	(revision 7117)
+++ trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCalc.h	(revision 7126)
@@ -22,5 +22,6 @@
 
     Float_t fPedestalLevel;
-    Float_t fPedestalLevelVariance;
+    Float_t fPedestalLevelVarianceLo;
+    Float_t fPedestalLevelVarianceHi;
 
     TString fNamePedPhotCam; // name of the 'MPedPhotCam' container
@@ -41,9 +42,11 @@
 
     // Setter
-    void SetPedestalLevel(Float_t f)         { fPedestalLevel=f; }
-    void SetPedestalLevelVariance(Float_t f) { fPedestalLevelVariance=f; }
-    void SetNamePedPhotCam(const char *name) { fNamePedPhotCam = name; }
+    void SetPedestalLevel(Float_t f=-1)           { fPedestalLevel=f; }
+    void SetPedestalLevelVariance(Float_t f=-1)   { fPedestalLevelVarianceLo=fPedestalLevelVarianceHi=f; }
+    void SetPedestalLevelVarianceLo(Float_t f=-1) { fPedestalLevelVarianceLo=f; }
+    void SetPedestalLevelVarianceHi(Float_t f=-1) { fPedestalLevelVarianceHi=f; }
 
-    void SetGeomCam(const MGeomCam *geom) { fGeomCam = geom; }
+    void SetNamePedPhotCam(const char *name)      { fNamePedPhotCam = name; }
+    void SetGeomCam(const MGeomCam *geom)         { fGeomCam = geom; }
 
     void EnableCheckInProcess(Bool_t b=kTRUE)     { fCheckInProcess = b; }
