Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 5916)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 5917)
@@ -28,4 +28,7 @@
    * mcalib/MCalibrationPix.cc
      - fixed small bug in High-gain mean error.
+
+   * msignal/MExtractTimeAndCharge.[h,cc]
+     - introduced high-gain maximum limit before extracting the low-gain
 
  2005/01/20 Thomas Bretz
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5916)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5917)
@@ -86,4 +86,5 @@
 
 const Float_t MExtractTimeAndCharge::fgLoGainStartShift = -2.8; 
+const Int_t   MExtractTimeAndCharge::fgMaxBinContentLimit = 100; 
 // --------------------------------------------------------------------------
 //
@@ -94,4 +95,5 @@
 // - fWindowSizeHiGain and fWindowSizeLoGain to 0
 // - fLoGainStartShift to fgLoGainStartShift+fgOffsetLoGain
+// - fMaxBinContentLimt to fgMaxBinContentLimit
 //
 MExtractTimeAndCharge::MExtractTimeAndCharge(const char *name, const char *title)
@@ -102,4 +104,5 @@
 
     SetLoGainStartShift();
+    SetMaxBinContentLimit();
 }
 
@@ -182,4 +185,6 @@
       Float_t timehi=0., deltatimehi=0; // Set hi-gain of MArrivalTimePix valid
       Byte_t sathi=0;
+
+      fMaxBinContent = 0;
 
       const Int_t pixidx = pixel.GetPixelId();
@@ -206,5 +211,5 @@
       // Adapt the low-gain extraction range from the obtained high-gain time
       //
-      if (pixel.HasLoGain())
+      if (pixel.HasLoGain() && fMaxBinContent < fMaxBinContentLimit )
       {
           deltasumlo  = 0; // make logain of MExtractedSignalPix valid
@@ -267,4 +272,9 @@
     }
 
+    if (IsEnvDefined(env, prefix, "MaxBinContentLimit", print))
+    {
+        fMaxBinContentLimit = GetEnvValue(env, prefix, "MaxBinContentLimit", fMaxBinContentLimit);
+        rc = kTRUE;
+    }
 
     return MExtractTime::ReadEnv(env, prefix, print) ? kTRUE : rc;
@@ -284,5 +294,6 @@
         << " to " << (Int_t)fLoGainLast << " incl" << endl;
   
-  *fLog << " LoGainStartShift: " << fLoGainStartShift << endl;
+  *fLog << " LoGainStartShift:   " << fLoGainStartShift << endl;
+  *fLog << " MaxBinContentLimit: " << fMaxBinContentLimit << endl;
   MExtractTime::Print(o);
 }
Index: /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h
===================================================================
--- /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5916)
+++ /trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5917)
@@ -11,8 +11,11 @@
 private:
 
-  static const Float_t fgLoGainStartShift; // Default for fLoGainStartShift (now set to: -2.8)
+  static const Float_t fgLoGainStartShift;   // Default for fLoGainStartShift (now set to: -2.8)
+  static const Int_t   fgMaxBinContentLimit; // Default for fMaxBinContentLimit (now set to: 100)
   
   Byte_t  fLoGainFirstSave;       //! Temporary variable to store the original position of low-gain start slice
   Float_t fLoGainStartShift;      // Shift to start searching the low-gain signal obtained from the high-gain times.
+
+  Int_t   fMaxBinContentLimit;    // Limit for max. bin content before the low-gain gets extracted
 
 protected:
@@ -20,4 +23,6 @@
   Int_t  fWindowSizeHiGain;       //  Window Size High-Gain
   Int_t  fWindowSizeLoGain;       //  Window Size Low-Gain
+
+  Int_t  fMaxBinContent;          //  Maximum bin content
 
   Int_t  PreProcess(MParList *pList);
@@ -31,10 +36,13 @@
   MExtractTimeAndCharge(const char *name=NULL, const char *title=NULL);
   
-  Int_t GetWindowSizeHiGain() const { return fWindowSizeHiGain; }
-  Int_t GetWindowSizeLoGain() const { return fWindowSizeLoGain; }
+  Int_t GetWindowSizeHiGain  () const { return fWindowSizeHiGain;   }
+  Int_t GetWindowSizeLoGain  () const { return fWindowSizeLoGain;   }
+  Int_t GetMaxBinContentLimit() const { return fMaxBinContentLimit; }
 
   void Print(Option_t *o="") const;
   
   void SetLoGainStartShift( const Float_t f=fgLoGainStartShift )  { fLoGainStartShift = f + fOffsetLoGain;  }
+  void SetMaxBinContentLimit( const Int_t i=fgMaxBinContentLimit ) { fMaxBinContentLimit = i; }
+
   virtual void SetWindowSize(Int_t windowh, Int_t windowl) { fWindowSizeHiGain = windowh;
                                                            fWindowSizeLoGain = windowl;  }
@@ -50,5 +58,5 @@
                                        Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag) { } 
 
-  ClassDef(MExtractTimeAndCharge, 1)   // Time And Charge Extractor Base Class
+  ClassDef(MExtractTimeAndCharge, 2)   // Time And Charge Extractor Base Class
 };
 
