Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 3009)
+++ trunk/MagicSoft/Mars/Changelog	(revision 3010)
@@ -8,4 +8,10 @@
    * mfileio/MReadTree.cc:
      - fixed handling of -1 entries in AddFile: root 3.10/02 crashed
+
+   * manalysis/MExtractSignal.[h,cc]:
+     - moved code to extract the signal from Process to
+       new member function FindSignal, I left the arrival time 
+       extraction as commented-out code in the code just as a 
+       demonstration to do this very fast.
 
 
Index: trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 3009)
+++ trunk/MagicSoft/Mars/manalysis/MExtractSignal.cc	(revision 3010)
@@ -122,4 +122,23 @@
 }
 
+void MExtractSignal::FindSignal(Byte_t *ptr, Int_t size, Int_t &sum, Byte_t &sat/*, Byte_t* &max*/) const
+{
+    Byte_t *end = ptr + size;
+
+    sum = 0;
+    sat = 0;
+    //max = ptr;
+    while (ptr<end)
+    {
+        sum += *ptr;
+
+        //if (*ptr>*max)
+        //    max = ptr;
+
+        if (*ptr++ >= fSaturationLimit)
+            sat++;
+    }
+}
+
 // --------------------------------------------------------------------------
 //
@@ -132,60 +151,17 @@
     fSignals->Clear();
 
-    UInt_t satlo=0;
+    UInt_t sat=0;
 
     while (pixel.Next())
     {
-        UShort_t satHi = 0;
-        UShort_t satLo = 0;
-
-	UInt_t sumHi   = 0;
-	UInt_t sumLo   = 0;
-
-	Byte_t maxhi   = 0;
-	Byte_t midhi   = 0;
-
-        Byte_t *ptr  = pixel.GetHiGainSamples() + fHiGainFirst;
-        Byte_t *last = ptr + fNumHiGainSamples;
-
-	while (ptr<last)
-        {
-            sumHi += *ptr;
-
-            if (*ptr > maxhi)
-            {
-                maxhi = *ptr;
-                midhi = ptr-pixel.GetHiGainSamples();
-            }
-
-            if (*ptr >= fSaturationLimit)
-                satHi++;
-
-            ptr++;
-        }
-
-	ptr  = pixel.GetLoGainSamples() + fLoGainFirst;
-        last = ptr + fNumLoGainSamples;
-
-        Byte_t maxlo  = 0;
-	Byte_t midlo  = 0;
-
-	while (ptr<last)
-        {
-            sumLo += *ptr;
-
-            if (*ptr > maxlo)
-            {
-                maxlo = *ptr;
-                midlo = ptr-pixel.GetLoGainSamples();
-            }
-
-            if (*ptr >= fSaturationLimit)
-                satLo++;
-
-            ptr++;
-        }
-
-        if (satLo)
-            satlo++;
+        Int_t sumhi, sumlo;
+        Byte_t sathi, satlo;
+        //Byte_t *maxhi, *maxlo;
+
+        FindSignal(pixel.GetHiGainSamples()+fHiGainFirst, fNumHiGainSamples, sumhi, sathi);//, maxhi);
+        FindSignal(pixel.GetLoGainSamples()+fLoGainFirst, fNumLoGainSamples, sumlo, satlo);//, maxlo);
+
+        if (satlo)
+            sat++;
 
         const Int_t pixid = pixel.GetPixelId();
@@ -197,14 +173,20 @@
         const Float_t pedrms = ped.GetPedestalRms();
 
-	pix.SetExtractedSignal(sumHi - pedes*fNumHiGainSamples, pedrms*fSqrtHiGainSamples,
-                               sumLo - pedes*fNumLoGainSamples, pedrms*fSqrtLoGainSamples);
-
-	pix.SetGainSaturation(satHi, satHi, satLo);
-
-      } /* while (pixel.Next()) */
-
-    if (satlo)
-        *fLog << warn << "WARNING - Lo Gain saturated in " << satlo << " pixels." << endl;
-
+	pix.SetExtractedSignal(sumhi - pedes*fNumHiGainSamples, pedrms*fSqrtHiGainSamples,
+                               sumlo - pedes*fNumLoGainSamples, pedrms*fSqrtLoGainSamples);
+
+	pix.SetGainSaturation(sathi, sathi, satlo);
+
+        /*
+         const Byte_t midhi = maxhi-pixel.GetHiGainSamples();
+         const Byte_t midlo = maxlo-pixel.GetLoGainSamples();
+
+         fArrivalTime->SetTime(pixid, sathi?midlo:midhi);
+         */
+
+    } /* while (pixel.Next()) */
+
+    if (sat)
+        *fLog << warn << "WARNING - Lo Gain saturated in " << sat << " pixels." << endl;
 
     fSignals->SetReadyToSave();
Index: trunk/MagicSoft/Mars/manalysis/MExtractSignal.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MExtractSignal.h	(revision 3009)
+++ trunk/MagicSoft/Mars/manalysis/MExtractSignal.h	(revision 3010)
@@ -20,5 +20,4 @@
 class MPedestalCam;
 class MExtractedSignalCam;
-class MArrivalTime;
 
 class MExtractSignal : public MTask
@@ -35,6 +34,4 @@
     MRawRunHeader       *fRunHeader;    // RunHeader information
 
-    MArrivalTime        *fArrivalTime;  // Arrival Time of FADC sample
-  
     Byte_t  fHiGainFirst;
     Byte_t  fLoGainFirst;
@@ -47,4 +44,6 @@
 
     Byte_t  fSaturationLimit;
+
+    void   FindSignal(Byte_t *ptr, Int_t size, Int_t &sum, Byte_t &sat/*, Byte_t* &mid*/) const;
 
     Int_t  PreProcess(MParList *pList);
