Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.cc
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.cc	(revision 6728)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.cc	(revision 6729)
@@ -145,9 +145,11 @@
 using namespace std;
 
+const Byte_t  MHCalibrationPulseTimeCam::fgSaturationLimit   = 255;
+const Byte_t  MHCalibrationPulseTimeCam::fgLowerSignalLimit  = 100;
+const Int_t   MHCalibrationPulseTimeCam::fgNumPixelsRequired = 4;
 const Int_t   MHCalibrationPulseTimeCam::fgHiGainNbins =  40;
 const Axis_t  MHCalibrationPulseTimeCam::fgHiGainFirst =  -0.5;
 const Axis_t  MHCalibrationPulseTimeCam::fgHiGainLast  =  19.5;
 const Float_t MHCalibrationPulseTimeCam::fgProbLimit   = 0.001;
-const Byte_t  MHCalibrationPulseTimeCam::fgLowerSignalLimit = 85;
 const TString MHCalibrationPulseTimeCam::gsHistName    = "PulseTime";
 const TString MHCalibrationPulseTimeCam::gsHistTitle   = "Extracted Times";
@@ -171,6 +173,10 @@
 // - fHistYTitle to gsHistYTitle
 //
+// - fSaturationLimit to fgSaturationLimit
+// - fLowerSignalLimit to fgLowerSignalLimit
+// - fNumPixelsRequired to fgNumPixelsRequired
+//
 MHCalibrationPulseTimeCam::MHCalibrationPulseTimeCam(const char *name, const char *title)
-    : fRawEvt(NULL)
+    : fBadPixels(NULL)
 {
 
@@ -193,5 +199,7 @@
   SetOscillations(kFALSE);
 
+  SetSaturationLimit();
   SetLowerSignalLimit();
+  SetNumPixelsRequired();
 
   fInnerRefTime = 5.;
@@ -242,9 +250,8 @@
 {
 
-  fRawEvt = (MRawEvtData*)pList->FindObject("MRawEvtData");
-  if (!fRawEvt)
+  fBadPixels = (MBadPixelsCam*)pList->FindObject("MBadPixelsCam");
+  if (!fBadPixels)
   {
-      *fLog << err << dbginf << "MRawEvtData not found... aborting." << endl;
-      return kFALSE;
+      *fLog << warn << GetDescriptor() << "MBadPixelsCam not found... " << endl;
   }
 
@@ -297,4 +304,63 @@
 }
 
+void MHCalibrationPulseTimeCam::InitHiGainArrays(const Int_t npixels, const Int_t nareas, const Int_t nsectors)
+{
+  
+  if (fHiGainArray->GetSize()==0)
+  {
+      for (Int_t i=0; i<npixels; i++)
+      {
+        fHiGainArray->AddAt(new MHCalibrationPix(Form("%sHiGainPix%04d",fHistName.Data(),i),
+                                                 Form("%s High Gain Pixel %4d",fHistTitle.Data(),i)),i);
+        
+        MHCalibrationPix &pix = (*this)[i];          
+        pix.SetNbins(fNbins*2);
+        pix.SetFirst(fFirst);
+        pix.SetLast (fLast);
+        
+        MBadPixelsPix &bad = fIntensBad ? (*fIntensBad)[i] : (*fBadPixels)[i];
+        InitHists(pix,bad,i);
+
+	if (fCam)
+	  (*fCam)[i].SetPixId(i);
+      }
+  }
+
+  if (!IsAverageing())
+    return;
+
+  if (fAverageHiGainAreas->GetSize()==0)
+  {
+    for (Int_t j=0; j<nareas; j++)
+      {
+        fAverageHiGainAreas->AddAt(new MHCalibrationPix(Form("%sHiGainArea%d",fHistName.Data(),j),
+                                                        Form("%s High Gain Area Idx %d",fHistTitle.Data(),j)),j);
+        
+        MHCalibrationPix &pix = GetAverageHiGainArea(j);
+        
+        pix.SetNbins(fNbins*2);
+        pix.SetFirst(fFirst);
+        pix.SetLast (fLast);
+
+        InitHists(pix,fIntensCam ? fIntensCam->GetAverageBadArea(j) : fCam->GetAverageBadArea(j),j);
+      }
+  }
+
+  if (fAverageHiGainSectors->GetSize()==0)
+    {
+      for (Int_t j=0; j<nsectors; j++)
+        {
+          fAverageHiGainSectors->AddAt(new MHCalibrationPix(Form("%sHiGainSector%02d",fHistName.Data(),j),
+                                                            Form("%s High Gain Sector %02d",fHistTitle.Data(),j)),j);
+          MHCalibrationPix &pix = GetAverageHiGainSector(j);
+
+          pix.SetNbins(fNbins);
+          pix.SetFirst(fFirst);
+          pix.SetLast (fLast);
+          
+          InitHists(pix,fIntensCam ? fIntensCam->GetAverageBadSector(j) : fCam->GetAverageBadSector(j),j);
+      }
+  }
+}
 
 // --------------------------------------------------------------------------
@@ -317,8 +383,8 @@
 {
 
-  MExtractedSignalCam *signal = (MExtractedSignalCam*)par;
-  if (!signal)
-    {
-      *fLog << err << "No argument in MExtractedSignalCam::Fill... abort." << endl;
+  MRawEvtData *data = (MRawEvtData*)par;
+  if (!data)
+    {
+      *fLog << err << "No argument in MHCalibrationPulseTimeCam::Fill... abort." << endl;
       return kFALSE;
     }
@@ -332,5 +398,5 @@
   fAverageSectorNum.Reset();
 
-  MRawEvtPixelIter pixel(fRawEvt);
+  MRawEvtPixelIter pixel(data);
   while (pixel.Next())
     {
@@ -338,15 +404,10 @@
       const Int_t i = pixel.GetPixelId();
 
-      MHCalibrationPix &histhi = (*this)[i];
-
-      if (histhi.IsExcluded())
-	continue;
-
-      const MExtractedSignalPix &pix = (*signal)[i];
-      
-      const Int_t sathi = (Int_t)pix.GetNumHiGainSaturated();
-
-      if (sathi)
-	continue;
+      if (fBadPixels)
+        {
+          MBadPixelsPix &bad = (*fBadPixels)[i];
+          if (bad.IsUnsuitable())
+            continue;
+        }
 
       Byte_t *start = pixel.GetHiGainSamples();
@@ -358,8 +419,8 @@
       while (p < end)
 	{
-	  if (*p > max)
+	  if ((*p > max) && (*p < fSaturationLimit))
 	    {
-	      max = *p;
-	      maxpos = p-start-1;
+              max = *p;
+              maxpos = p-start-1;
 	    }
 	  p++;
@@ -372,5 +433,5 @@
       while (p < end)
 	{
-	  if (*p > max)
+	  if ((*p > max) && (*p < fSaturationLimit))
 	    {
 	      max = *p;
@@ -384,8 +445,7 @@
 
       const Float_t time = (Float_t)maxpos;
-      histhi.FillHist(time);
+
+      (*this)[i].FillHist(time);
         
-      //      *fLog << inf << time << endl;
-
       const Int_t aidx   = (*fGeom)[i].GetAidx();
       const Int_t sector = (*fGeom)[i].GetSector();
@@ -403,10 +463,6 @@
       const Int_t npix = fAverageAreaNum[j];
 
-      if (npix == 0)
-        continue;
-
-      MHCalibrationPix &hipix = GetAverageHiGainArea(j);
-      hipix.FillHist(fSumhiarea[j]/npix);
-      
+      if (npix > fNumPixelsRequired)
+        GetAverageHiGainArea(j).FillHist(fSumhiarea[j]/npix);
     }
 
@@ -416,9 +472,6 @@
       const Int_t npix = fAverageSectorNum[j];
 
-      if (npix == 0)
-        continue;
-
-      MHCalibrationPix &hipix = GetAverageHiGainSector(j);
-      hipix.FillHist(fSumhisector [j]/npix);
+      if (npix > 0)
+        GetAverageHiGainSector(j).FillHist(fSumhisector [j]/npix);
     }
 
@@ -586,4 +639,5 @@
   null->SetDirectory(NULL);
   null->SetBit(kCanDelete);
+  null->SetStats(kFALSE);
   //
   // set the labels bigger
@@ -638,4 +692,10 @@
     rc = kTRUE;
    
+  if (IsEnvDefined(env, prefix, "SaturationLimit", print))
+    {
+      SetSaturationLimit(GetEnvValue(env, prefix, "SaturationLimit", fSaturationLimit));
+      rc = kTRUE;
+    }
+  
   if (IsEnvDefined(env, prefix, "LowerSignalLimit", print))
     {
@@ -644,4 +704,10 @@
     }
 
+  if (IsEnvDefined(env, prefix, "NumPixelsRequired", print))
+    {
+      SetNumPixelsRequired(GetEnvValue(env,prefix,"NumPixelsRequired",fNumPixelsRequired));
+      rc = kTRUE;
+    }
+
   if (IsEnvDefined(env, prefix, "ReferenceFile", print))
     {
Index: trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.h
===================================================================
--- trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.h	(revision 6728)
+++ trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.h	(revision 6729)
@@ -21,5 +21,7 @@
 private:
 
-  static const Byte_t  fgLowerSignalLimit;     //! Default for fLowerSignalLimit 
+  static const Byte_t  fgSaturationLimit;      //! Default for fSaturationLimit (now set to: 245)
+  static const Byte_t  fgLowerSignalLimit;     //! Default for fLowerSignalLimit
+  static const Int_t   fgNumPixelsRequired;    //! Default for fNumPixelsRequired
 
   static const Int_t   fgHiGainNbins;          //! Nr. bins of HiGain Histograms  (now set to:  550  )
@@ -35,6 +37,8 @@
   static const TString gsHistYTitle;           //! Default Histogram y-axis titles
   
-  Byte_t  fLowerSignalLimit;                   //  Lower signal limit for pulse time extraction
-
+  Byte_t  fSaturationLimit;                    // Highest FADC slice value until being declared saturated
+  Byte_t  fLowerSignalLimit;                   // Lower signal limit for pulse time extraction
+  Int_t   fNumPixelsRequired;                  // Minimum Number of pixels required for averageing
+  
   TString fReferenceFile;                      // File name containing the reference values
 
@@ -42,8 +46,10 @@
   Float_t fOuterRefTime;                       // The reference mean arrival time outer pixels
 
-  MArrayD fSumhiarea  ;                              //!
-  MArrayD fSumhisector;                              //!
+  MArrayF fSumhiarea  ;                        //!
+  MArrayF fSumhisector;                        //!
 
-  MRawEvtData *fRawEvt;                        //!  Raw event data 
+  MBadPixelsCam *fBadPixels;                   //!  Bad Pixels
+  
+  void   InitHiGainArrays( const Int_t npix, const Int_t nareas, const Int_t nsectors );
 
   Bool_t SetupHists(const MParList *pList);
@@ -70,7 +76,9 @@
   void   Draw(const Option_t *opt);
 
-  void SetReferenceFile   ( const TString ref=fgReferenceFile    ) { fReferenceFile    = ref; }
-  void SetLowerSignalLimit( const Byte_t  lim=fgLowerSignalLimit ) { fLowerSignalLimit = lim; }
-
+  void SetReferenceFile    ( const TString ref=fgReferenceFile     ) { fReferenceFile     = ref; }
+  void SetSaturationLimit  ( const Byte_t  lim=fgSaturationLimit   ) { fSaturationLimit   = lim; }
+  void SetLowerSignalLimit ( const Byte_t  lim=fgLowerSignalLimit  ) { fLowerSignalLimit  = lim; }
+  void SetNumPixelsRequired( const Byte_t  lim=fgNumPixelsRequired ) { fNumPixelsRequired = lim; }
+  
   Bool_t GetPixelContent ( Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type=0) const { return kTRUE; }
   void   DrawPixelContent( Int_t num )  const;    
