Index: trunk/MagicSoft/Mars/manalysis/MCalibrationCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCalibrationCalc.cc	(revision 2651)
+++ trunk/MagicSoft/Mars/manalysis/MCalibrationCalc.cc	(revision 2658)
@@ -252,6 +252,4 @@
 {
 
-    fEvents++;
-
     Int_t cosmicpix = 0;
 
@@ -273,20 +271,17 @@
     while (pixel.Next())
       {
-
-        const Int_t pixid = pixel.GetPixelId();
-
-        Int_t sum = pixel.GetSumHiGainSamples();
-
-        MPedestalPix    &ped = (*fPedestals)[pixid];
- 
-        Float_t pedes  = ped.GetPedestal();
+	
+	const UInt_t pixid = pixel.GetPixelId();
+	
+	MExtractedSignalPix &sig =  (*fSignals)[pixid];
+        MPedestalPix        &ped =  (*fPedestals)[pixid];
         Float_t pedrms = ped.GetPedestalRms();
+	Float_t sumhi  = sig.GetExtractedSignalHiGain();
         
-	if ((float)sum < ((pedes*fNumHiGainSamples)+(2.*fNumHiGainSamples*pedrms)) )
-           cosmicpix++;
+	if (sumhi < 15.*pedrms )   // cut at 3.5 sigma
+	  cosmicpix++;
      }
 
-
-    if (cosmicpix > 50.)
+    if (cosmicpix > 100.)
       {
 	fCosmics++;
@@ -295,4 +290,5 @@
 
     pixel.Reset();
+    fEvents++;
 
     //
@@ -304,17 +300,12 @@
 
 	const UInt_t pixid = pixel.GetPixelId();
-
+	
 	MExtractedSignalPix &sig =  (*fSignals)[pixid];
-
+        
 	Float_t sumhi  = sig.GetExtractedSignalHiGain();
 	Float_t sumlo  = sig.GetExtractedSignalLoGain();
 	Bool_t  logain = sig.IsLoGainUsed();
 
-	Byte_t mid;
-
-	if (logain)
-	    mid  = pixel.GetIdxMaxLoGainSample();
-	else
-	    mid  = pixel.GetIdxMaxHiGainSample();
+	Float_t mtime  = sig.GetMeanArrivalTime();
 
 	MCalibrationPix &pix = (*fCalibrations)[pixid];
@@ -329,11 +320,12 @@
 		"Overflow or Underflow occurred filling Blind Pixel sum = " << sumhi << endl;
 
-	    if (!blindpixel.FillTime((int)mid)) 
+	    if (!blindpixel.FillTime((int)mtime)) 
 	      *fLog << warn << 
-		"Overflow or Underflow occurred filling Blind Pixel time = " << (int)mid << endl;
+		"Overflow or Underflow occurred filling Blind Pixel time = " << mtime << endl;
 	    
 	    if (!blindpixel.FillRChargevsTime(sumhi,fEvents))
 	      *fLog << warn << 
 		"Overflow or Underflow occurred filling Blind Pixel eventnr = " << fEvents << endl;
+	    break;
             
           case gkCalibrationPINDiodeId:
@@ -341,10 +333,11 @@
               *fLog << warn << 
                 "Overflow or Underflow occurred filling HCharge: means = " << sumhi << endl;
-            if (!pindiode.FillTime((int)mid)) 
+            if (!pindiode.FillTime((int)mtime)) 
               *fLog << warn << 
-                "Overflow or Underflow occurred filling HTime: time = " << (int)mid << endl;
+                "Overflow or Underflow occurred filling HTime: time = " << mtime << endl;
             if (!pindiode.FillRChargevsTime(sumhi,fEvents))
               *fLog << warn << 
                 "Overflow or Underflow occurred filling HChargevsN: eventnr = " << fEvents << endl;
+	    break;
 
           default:
@@ -359,11 +352,8 @@
 			<< " signal = " << sumlo << endl;
 
-		if (!pix.FillTimeLoGain((int)mid)) 
+		if (!pix.FillTimeLoGain((int)mtime)) 
 		  *fLog << warn << "Could not fill Lo Gain Time of pixel: " 
-			<< pixid << " time = " << (int)mid << endl;
+			<< pixid << " time = " << mtime << endl;
 		
-		//
-		// Fill the reduced charge into the control histo for better visibility
-		//
 		if (!pix.FillRChargevsTimeLoGain(sumlo,fEvents))
 		  *fLog << warn << "Could not fill Lo Gain Charge vs. EvtNr of pixel: " 
@@ -377,7 +367,7 @@
 			<< " signal = " << sumhi << endl;
 		
-		if (!pix.FillTimeHiGain((int)mid)) 
+		if (!pix.FillTimeHiGain((int)mtime)) 
 		  *fLog << warn << "Could not fill Hi Gain Time of pixel: " 
-			<< pixid << " time = " << (int)mid << endl;
+			<< pixid << " time = " << mtime << endl;
 		
 		if (!pix.FillRChargevsTimeHiGain(sumhi,fEvents))
@@ -385,4 +375,5 @@
 			<< pixid << " signal = " << sumhi  << " event Nr: " << fEvents << endl;
 	      }
+	    break;
 	    
           } /* switch(pixid) */
@@ -449,8 +440,9 @@
       pix.SetPedestal(ped,prms);
 
+      pix.FitCharge();
+
       if (TESTBIT(fFlags,kUseTimeFits))
         pix.FitTime();
       
-      pix.FitCharge();
     }
 
Index: trunk/MagicSoft/Mars/manalysis/MCalibrationPix.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MCalibrationPix.cc	(revision 2651)
+++ trunk/MagicSoft/Mars/manalysis/MCalibrationPix.cc	(revision 2658)
@@ -110,4 +110,5 @@
   if (fHist->UseLoGain())
     {
+
       SetHiGainSaturation();
 
Index: trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 2651)
+++ trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 2658)
@@ -163,8 +163,6 @@
 
         Byte_t *ptr   = pixel.GetHiGainSamples();
-        Byte_t *max   = ptr + pixel.GetIdxMaxHiGainSample();
-	Byte_t *end   = ptr + fRawEvt->GetNumHiGainSamples();
-        Byte_t *first;
-        Byte_t *last;
+        Byte_t *first = ptr + 3;
+        Byte_t *last  = ptr + 9;
 
 	UInt_t  sumHi   = 0;
@@ -178,50 +176,38 @@
         const Float_t pedrms  = ped.GetPedestalRms();
 
-
-	if (max-3 < ptr)
-	  {
-	    first = ptr+3;
-	    last  = ptr+3+fAfter+fBefore;
-	  }
-	else if (max+fAfter-1 > end)
-	  {
-	    first = end-fAfter-fBefore-1;
-	    last  = end-1;
-	  }
-	else
-	  {
-	    first = max-fBefore;
-	    last  = max+fAfter;
-	  }
+	Byte_t maxhi  = 0;
+	Byte_t midhi  = 0;
 
 	for (ptr=first;ptr<last;ptr++)
 	  {
+	    
+	    if (*ptr > maxhi)
+	      {
+		maxhi = *ptr;
+		midhi = ptr-first;
+	      }
+
 	    sumHi += *ptr;
+	    
 	    if (*ptr >= fSaturationLimit)
 	      satHi++;
+
 	  }
 
 	ptr   = pixel.GetLoGainSamples();
-        max   = ptr+pixel.GetIdxMaxLoGainSample();
-	end   = ptr+fRawEvt->GetNumLoGainSamples();
-
-	if (max-4 < ptr)
-	  {
-	    first = ptr+4;
-	    last  = ptr+4+fAfter+fBefore;
-	  }
-	else if (max+fAfter > end)
-	  {
-	    first = end-fAfter-fBefore;
-	    last  = end;
-	  }
-	else
-	  {
-	    first = max-fBefore;
-	    last  = max+fAfter;
-	  }
-
+        first = ptr + 3;
+        last  = ptr + 9;
+	Byte_t maxlo  = 0;
+	Byte_t midlo  = 0;
+	
 	for (ptr=first;ptr<last;ptr++)
 	  {
+
+	    if (*ptr > maxlo)
+	      {
+		maxlo = *ptr;
+		midlo = ptr-first;
+	      }
+
 	    sumLo += *ptr;
 	    if (*ptr >= fSaturationLimit)
@@ -233,10 +219,4 @@
 	      }
 	  }
-
-        //
-        // FIXME: This is preliminary, we will change to pedestals per slice!!!
-        // Assume pedestals per time slice ==> multiply with number of slices
-        //
-
 	pix.SetExtractedSignal((float)sumHi - pedes*(float)fNumHiGainSamples,
 			       pedrms*fSqrtHiGainSamples,
@@ -247,4 +227,9 @@
 	pix.SetGainSaturation((satHi),satHi,satLo);
 
+	if (satHi)
+	  pix.SetArrivalTimes((float)(midlo+3),0.);
+	else
+	  pix.SetArrivalTimes((float)(midhi+3),0.);
+
       } /* while (pixel.Next()) */
 
Index: trunk/MagicSoft/Mars/manalysis/MExtractedSignalPix.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MExtractedSignalPix.h	(revision 2651)
+++ trunk/MagicSoft/Mars/manalysis/MExtractedSignalPix.h	(revision 2658)
@@ -33,6 +33,6 @@
     Float_t GetExtractedSignalLoGainError() const   { return fExtractedSignalLoGainError; }
 
-    Float_t GetMeanArrivalTime()      const   { return fMeanArrivalTime; }
-    Float_t GetWidthArrivalTime()     const   { return fWidthArrivalTime; }
+    Float_t GetMeanArrivalTime()            const   { return fMeanArrivalTime; }
+    Float_t GetWidthArrivalTime()           const   { return fWidthArrivalTime; }
 
     void SetExtractedSignal(Float_t sig, Float_t sigerr)   
