Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 2639)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 2640)
@@ -4,4 +4,10 @@
 
                                                  -*-*- END OF LINE -*-*-
+ 2003/12/11: Markus Gaug
+   * manalysis/MExtractSignal, MExtractedSignalPix
+	- Store number of used FADC slices (HIGain, LoGAin)
+	- calculate signal with only 6 most significant slices (2 before, 4 after the maximum)
+
+
  2003/12/11: Thomas Bretz
 
Index: /trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 2639)
+++ /trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 2640)
@@ -57,6 +57,5 @@
 //
 MExtractSignal::MExtractSignal(const char *name, const char *title)
-  : fSaturationLimit(255),
-    fConversionHiLo(10.)
+  : fBefore(2), fAfter(4), fSaturationLimit(254), fConversionHiLo(10.)
 {
 
@@ -123,8 +122,11 @@
     }
 
-    fNumHiGainSamples =  fRunHeader->GetNumSamplesHiGain();
-    fNumLoGainSamples =  fRunHeader->GetNumSamplesLoGain();
-    fSqrtHiGainSamples =  TMath::Sqrt((float)fNumHiGainSamples);
-    fSqrtLoGainSamples =  TMath::Sqrt((float)fNumLoGainSamples);
+    //fNumHiGainSamples =  fRunHeader->GetNumSamplesHiGain();
+    //fNumLoGainSamples =  fRunHeader->GetNumSamplesLoGain();
+    fNumHiGainSamples =  fAfter+fBefore;
+    fNumLoGainSamples =  fAfter+fBefore;
+
+    fSqrtHiGainSamples = TMath::Sqrt((float)fNumHiGainSamples); 
+    fSqrtLoGainSamples = TMath::Sqrt((float)fNumLoGainSamples); 
 
     //
@@ -156,6 +158,13 @@
         UShort_t satHi = 0;
         UShort_t satLo = 0;
-	Float_t  sum   = 0.;
-	Float_t sumerr = 0.;
+
+        Byte_t *ptr   = pixel.GetHiGainSamples();
+        Byte_t *max   = ptr + pixel.GetIdxMaxHiGainSample();
+	Byte_t *end   = ptr + fRawEvt->GetNumHiGainSamples();
+        Byte_t *first;
+        Byte_t *last;
+
+	UInt_t  sumHi   = 0;
+	UInt_t  sumLo   = 0;
 
         const Int_t pixid = pixel.GetPixelId();
@@ -165,4 +174,59 @@
         const Float_t pedes   = ped.GetPedestal();
         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;
+	  }
+
+	for (ptr=first;ptr<last;ptr++)
+	  {
+	    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;
+	  }
+
+	for (ptr=first;ptr<last;ptr++)
+	  {
+	    sumLo += *ptr;
+	    if (*ptr >= fSaturationLimit)
+	      {
+		*fLog << err << dbginf 
+		      << "Warning: Saturation of Lo Gain reached in pixel: " 
+		      << pixid << " " << "   sum = " << sumLo << endl;
+		satLo++;
+	      }
+	  }
 
         //
@@ -171,38 +235,16 @@
         //
 
-        UInt_t max  = pixel.GetMaxHiGainSample();
-
-	if (max <= fSaturationLimit)  // take Hi Gain, no saturation
-	  {
-	    sum = (float)pixel.GetSumHiGainSamples() - pedes*fNumHiGainSamples;  
-	    sumerr = pedrms*fSqrtHiGainSamples; 
-	  }
-	else 	                      // Lo Gain
-	  {
-
-	    satHi++;
-
-	    sum = (float)pixel.GetSumLoGainSamples() - pedes*fNumLoGainSamples ;
-	    sum *= fConversionHiLo; 
-
-	    sumerr = pedrms*fSqrtLoGainSamples; 
-
-            max = pixel.GetMaxLoGainSample();
-
-	    if (max > fSaturationLimit)
-	      {
-		*fLog << err << dbginf 
-		      << "Warning: Saturation of Lo Gain reached in pixel: " 
-		      << pixid << " " << "   sum = " << sum << endl;
-		satLo++;
-	      }
-
-	  }
-
-	pix.SetGainSaturation((satHi),(satHi),(satLo));
-	pix.SetExtractedSignal(sum,sumerr);
+	pix.SetExtractedSignal((float)sumHi - pedes*(float)fNumHiGainSamples,
+			       pedrms*fSqrtHiGainSamples,
+			       ((float)sumLo - pedes*(float)fNumLoGainSamples)*fConversionHiLo,
+			       pedrms*fSqrtLoGainSamples
+			       );
+
+	pix.SetGainSaturation((satHi),satHi,satLo);
 
       } /* while (pixel.Next()) */
 
+
+    fSignals->SetNumUsedFADCSlices(fNumHiGainSamples);
     fSignals->SetReadyToSave();
 
Index: /trunk/MagicSoft/Mars/manalysis/MExtractSignal.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MExtractSignal.h	(revision 2639)
+++ /trunk/MagicSoft/Mars/manalysis/MExtractSignal.h	(revision 2640)
@@ -37,4 +37,7 @@
   Float_t fSqrtLoGainSamples; 
 
+  Byte_t fBefore;
+  Byte_t fAfter;
+
   Byte_t  fSaturationLimit;
   Float_t fConversionHiLo;
Index: /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.cc	(revision 2639)
+++ /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.cc	(revision 2640)
@@ -133,8 +133,14 @@
     {
     case 0:
-        val = (*this)[idx].GetExtractedSignal();
+        val = (*this)[idx].GetExtractedSignalHiGain();
         break;
     case 1:
-        val = (*this)[idx].GetExtractedSignalError();
+        val = (*this)[idx].GetExtractedSignalHiGainError();
+        break;
+    case 2:
+        val = (*this)[idx].GetExtractedSignalLoGain();
+        break;
+    case 3:
+        val = (*this)[idx].GetExtractedSignalLoGainError();
         break;
     default:
Index: /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.h	(revision 2639)
+++ /trunk/MagicSoft/Mars/manalysis/MExtractedSignalCam.h	(revision 2640)
@@ -16,4 +16,7 @@
     TClonesArray *fArray; // FIXME: Change TClonesArray away from a pointer?
 
+    Byte_t fNumUsedHiGainFADCSlices;
+    Byte_t fNumUsedLoGainFADCSlices;
+
 public:
 
@@ -25,4 +28,13 @@
     void InitSize(const UInt_t i);
     Int_t GetSize() const;
+
+    Byte_t GetNumUsedFADCSlices()          { return fNumUsedHiGainFADCSlices; }
+    Byte_t GetNumUsedHiGainFADCSlices()    { return fNumUsedHiGainFADCSlices; }
+    Byte_t GetNumUsedLoGainFADCSlices()    { return fNumUsedLoGainFADCSlices; }
+    SetNumUsedHiGainFADCSlices(Byte_t numh, Byte_t numl)   
+                                           { 
+					     fNumUsedHiGainFADCSlices = numh;
+					     fNumUsedLoGainFADCSlices = numl;  
+					   }
 
     MExtractedSignalPix &operator[](Int_t i);
