Index: trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/mpedestal/MExtractPedestal.cc	(revision 5504)
@@ -150,4 +150,5 @@
 /////////////////////////////////////////////////////////////////////////////
 #include "MExtractPedestal.h"
+#include "MExtractTimeAndCharge.h"
 
 #include "MParList.h"
@@ -355,5 +356,4 @@
   
   *fLog << inf;
-  Print();
   
   return kTRUE;
@@ -419,5 +419,9 @@
   }
   
-  
+  if (fExtractor)
+    fExtractor->InitArrays();
+  
+  Print();
+
   return kTRUE;
 }
Index: trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/mpedestal/MPedCalcFromLoGain.cc	(revision 5504)
@@ -100,5 +100,5 @@
 //   fCheckWinFirst   =  fgCheckWinFirst   =  0 
 //   fCheckWinLast    =  fgCheckWinLast    =  29
-//   fExtractWinFirst =  fgExtractWinFirst =  0 
+//   fExtractWinFirst =  fgExtractWinFirst =  15 
 //   fExtractWinSize  =  fgExtractWinSize  =  6
 //   fMaxSignalVar    =  fgMaxSignalVar    = 40;
@@ -108,5 +108,5 @@
 //  to set the Window in which a signal is searched
 //
-//  SetExtractWindow(fExtractWindFirst,fExtractWinSize);
+//  SetExtractWindow(fExtractWinFirst,fExtractWinSize);
 //  to set the Window from which a signal is extracted
 //
@@ -239,7 +239,12 @@
   const UShort_t losamples = fRunHeader->GetNumSamplesLoGain();
 
+  UShort_t lastavailable   = hisamples+losamples-1;
+
   if (fExtractor)
-    SetExtractWindow(hisamples+fExtractor->GetHiGainFirst(),hisamples+fExtractor->GetHiGainLast());
-  
+    {
+      SetExtractWindow(fExtractor->GetHiGainFirst(),(Int_t)fExtractor->GetNumHiGainSamples());
+      lastavailable = losamples-1;
+    }
+
   // If the size is not yet set, set the size
   if (fSumx.GetSize()==0)
@@ -250,9 +255,5 @@
   }
   
-  MExtractPedestal::ReInit(pList);
-  
-  UShort_t lastavailable = hisamples+losamples-1;
-
-   if (fExtractWinLast > lastavailable) //changed to override check
+  if (fExtractWinLast > lastavailable) //changed to override check
    {
      const UShort_t diff = fExtractWinLast - lastavailable;
@@ -264,16 +265,18 @@
      fExtractWinSize -= diff;
    }
-
-   lastavailable = fRunHeader->GetNumSamplesHiGain()-1;
-
+  
+   lastavailable = hisamples + losamples -1;
+   
    if (fCheckWinLast > lastavailable) //changed to override check
-   {
+     {
        *fLog << warn << GetDescriptor();
        *fLog << " - WARNING: Last Check Window slice out of range...adjusting to last available slice ";
        *fLog << lastavailable << endl;
-
+       
        fCheckWinLast = lastavailable;
-   }
-
+     }
+
+  MExtractPedestal::ReInit(pList);
+  
   return kTRUE;
 }
@@ -488,4 +491,5 @@
 
   fPedestalsOut->SetReadyToSave();
+
   return kTRUE;
 }
Index: trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.cc
===================================================================
--- trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/mpedestal/MPedCalcPedRun.cc	(revision 5504)
@@ -202,4 +202,7 @@
 Bool_t MPedCalcPedRun::ReInit(MParList *pList)
 {
+
+  if (fExtractor)
+    SetExtractWindow(fExtractor->GetHiGainFirst(),(Int_t)fExtractor->GetNumHiGainSamples());
 
   MExtractPedestal::ReInit(pList);
@@ -291,11 +294,9 @@
         CalcSums( &pixel, sum, ab0, ab1);
 
-      const Float_t msum = (Float_t)sum;
-      
-      fSumx[idx]          += msum;
-      fAreaSumx[aidx]     += msum;
-      fSectorSumx[sector] += msum;      
-
-      const Float_t sqrsum  = msum*msum;
+      fSumx[idx]          += sum;
+      fAreaSumx[aidx]     += sum;
+      fSectorSumx[sector] += sum;      
+
+      const Float_t sqrsum  = sum*sum;
       fSumx2[idx]          += sqrsum;
       fAreaSumx2[aidx]     += sqrsum;
@@ -316,6 +317,4 @@
   return kTRUE;
 }
-
-
 
 void MPedCalcPedRun::CalcExtractor( MRawEvtPixelIter *pixel, Float_t &sum, MPedestalPix &ped)
@@ -328,4 +327,5 @@
   Float_t dummy;
   fExtractor->FindTimeAndChargeHiGain(first,logain,sum,dummy,dummy,dummy,sat,ped,abflag);
+
 }
 
@@ -458,4 +458,5 @@
 Bool_t MPedCalcPedRun::IsPedBitSet()
 {
+
   if (fRunHeader->GetRunNumber() < gkFirstRunWithFinalBits)
     return kFALSE;
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.cc	(revision 5504)
@@ -127,4 +127,5 @@
 // - MArrivalTimeCam::SetUsedFADCSlices(fHiGainFirst, fHiGainLast, fNumHiGainSamples,
 //                                      fLoGainFirst, fLoGainLast, fNumLoGainSamples);
+// - InitArrays();
 //
 Bool_t MExtractTimeAndCharge::ReInit(MParList *pList)
@@ -138,29 +139,9 @@
                                 fLoGainFirst, fLoGainLast, fNumLoGainSamples);
   
-  *fLog << dec << endl;
-  *fLog << inf << "Taking " << fNumHiGainSamples
-        << " HiGain samples from slice " << (Int_t)fHiGainFirst
-        << " to " << (Int_t)(fHiGainLast+fHiLoLast) << " incl" << endl;
-  *fLog << inf << "Taking " << fNumLoGainSamples
-        << " LoGain samples from slice " << (Int_t)fLoGainFirst
-        << " to " << (Int_t)fLoGainLast << " incl" << endl;
-  
+  InitArrays();
+  Print();
+
   return kTRUE;
 }
-
-void MExtractTimeAndCharge::FindTimeAndChargeHiGain(Byte_t *firstused, Byte_t *logain, Float_t &sum, Float_t &dsum, 
-                                                    Float_t &time, Float_t &dtime,
-                                                    Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag)
-{
-  return;
-}
-
-void MExtractTimeAndCharge::FindTimeAndChargeLoGain(Byte_t *firstused, Float_t &sum, Float_t &dsum, 
-                                                    Float_t &time, Float_t &dtime,
-                                                    Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag)
-{
-  return;
-}
-
 
 // --------------------------------------------------------------------------
@@ -261,9 +242,18 @@
 void MExtractTimeAndCharge::Print(Option_t *o) const
 {
-    *fLog << all;
-    if (IsA()==MExtractTimeAndCharge::Class())
-        *fLog << GetDescriptor() << ":" << endl;
-
-    *fLog << " LoGainStartShift: " << fLoGainStartShift << endl;
-    MExtractTime::Print(o);
-}
+
+  *fLog << all;
+  if (IsA()==MExtractTimeAndCharge::Class())
+    *fLog << GetDescriptor() << ":" << endl;
+  
+  *fLog << dec << endl;
+  *fLog << inf << "Taking " << fNumHiGainSamples
+        << " HiGain samples from slice " << (Int_t)fHiGainFirst
+        << " to " << (Int_t)(fHiGainLast+fHiLoLast) << " incl" << endl;
+  *fLog << inf << "Taking " << fNumLoGainSamples
+        << " LoGain samples from slice " << (Int_t)fLoGainFirst
+        << " to " << (Int_t)fLoGainLast << " incl" << endl;
+  
+  *fLog << " LoGainStartShift: " << fLoGainStartShift << endl;
+  MExtractTime::Print(o);
+}
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndCharge.h	(revision 5504)
@@ -18,7 +18,10 @@
 protected:
 
+  Int_t  fWindowSizeHiGain;       //  Window Size High-Gain
+  Int_t  fWindowSizeLoGain;       //  Window Size Low-Gain
+
   Int_t  PreProcess(MParList *pList);
+  Int_t  Process();
   Bool_t ReInit(MParList *pList);
-  Int_t  Process();
 
   Int_t  ReadEnv(const TEnv &env, TString prefix, Bool_t print);
@@ -28,14 +31,22 @@
   MExtractTimeAndCharge(const char *name=NULL, const char *title=NULL);
   
+  Int_t GetWindowSizeHiGain() const { return fWindowSizeHiGain; }
+  Int_t GetWindowSizeLoGain() const { return fWindowSizeLoGain; }
+
+  void Print(Option_t *o="") const;
+  
   void SetLoGainStartShift( const Float_t f=fgLoGainStartShift )  { fLoGainStartShift = f + fOffsetLoGain;  }
-    
-  void Print(Option_t *o) const;
+  virtual void SetWindowSize(Int_t windowh, Int_t windowl) { fWindowSizeHiGain = windowh;
+                                                           fWindowSizeLoGain = windowl;  }
   
+  virtual void InitArrays() {}
+
   virtual void FindTimeAndChargeHiGain(Byte_t *firstused, Byte_t *logain, Float_t &sum, Float_t &dsum,
                                        Float_t &time, Float_t &dtime,
-                                       Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag);
+                                       Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag) { }
+  
   virtual void FindTimeAndChargeLoGain(Byte_t *firstused, Float_t &sum,  Float_t &dsum,
                                        Float_t &time, Float_t &dtime,
-                                       Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag);
+                                       Byte_t &sat, const MPedestalPix &ped, const Bool_t abflag) { } 
 
   ClassDef(MExtractTimeAndCharge, 1)   // Time And Charge Extractor Base Class
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.cc	(revision 5504)
@@ -193,6 +193,4 @@
       return kFALSE;
 
-  Print();
-
   return MExtractTimeAndCharge::PreProcess(pList);
 }
@@ -208,17 +206,29 @@
 Bool_t MExtractTimeAndChargeDigitalFilter::ReInit(MParList *pList)
 {
-    if (!MExtractTimeAndCharge::ReInit(pList))
-        return kFALSE;
-
-    fHiGainSignal.Set(fHiGainLast - fHiGainFirst + 1 + fHiLoLast);
-    fLoGainSignal.Set(fLoGainLast - fLoGainFirst + 1);
-
-    fTimeShiftHiGain = (Float_t)fHiGainFirst + 0.5 + 1./fBinningResolutionHiGain;
-    fTimeShiftLoGain = (Float_t)fLoGainFirst + 0.5 + 1./fBinningResolutionLoGain;
-
-    return kTRUE;
+  if (!MExtractTimeAndCharge::ReInit(pList))
+    return kFALSE;
+
+  fTimeShiftHiGain = (Float_t)fHiGainFirst + 0.5 + 1./fBinningResolutionHiGain;
+  fTimeShiftLoGain = (Float_t)fLoGainFirst + 0.5 + 1./fBinningResolutionLoGain;
+  
+  return kTRUE;
 }
 
-
+// --------------------------------------------------------------------------
+//
+// InitArrays
+//
+// Gets called in the ReInit() and initialized the arrays
+//
+void MExtractTimeAndChargeDigitalFilter::InitArrays()
+{
+  fHiGainSignal.Set(fHiGainLast - fHiGainFirst + 1 + fHiLoLast);
+  fLoGainSignal.Set(fLoGainLast - fLoGainFirst + 1);
+}
+
+// --------------------------------------------------------------------------
+//
+// Apply the digital filter algorithm to the high-gain slices.
+//
 void MExtractTimeAndChargeDigitalFilter::FindTimeAndChargeHiGain(Byte_t *ptr, Byte_t *logain, Float_t &sum, Float_t &dsum, 
                                                                  Float_t &time, Float_t &dtime,
@@ -378,4 +388,8 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Apply the digital filter algorithm to the low-gain slices.
+//
 void MExtractTimeAndChargeDigitalFilter::FindTimeAndChargeLoGain(Byte_t *ptr, Float_t &sum, Float_t &dsum, 
                                                                  Float_t &time, Float_t &dtime,
@@ -987,4 +1001,5 @@
     *fLog << GetDescriptor() << ":" << endl;
 
+    MExtractTimeAndCharge::Print(o);
     *fLog << " Time Shift HiGain:  " << fTimeShiftHiGain << endl;
     *fLog << " Time Shift LoGain:  " << fTimeShiftLoGain << endl;
@@ -994,4 +1009,8 @@
     *fLog << " Binning Res LoGain: " << fBinningResolutionHiGain << endl;
   
+    TString opt(o);
+    if (!opt.Contains("weights"))
+      return;
+
     *fLog << endl;
     *fLog << inf << "Using the following weights: " << endl;
@@ -1004,4 +1023,3 @@
       *fLog << " " << fAmpWeightsLoGain[i] << " \t " << fTimeWeightsLoGain[i] << endl;
     
-    MExtractTimeAndCharge::Print(o);
 }
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.h	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeDigitalFilter.h	(revision 5504)
@@ -38,7 +38,4 @@
   Int_t   fSignalStartBinLoGain;                //! Start bin from when on to apply weights
 
-  Int_t   fWindowSizeHiGain;                    //  Weights Window Size High-Gain
-  Int_t   fWindowSizeLoGain;                    //  Weights Window Size Low-Gain
-
   Int_t   fBinningResolutionHiGain;             //  Number of weights per bin High-Gain
   Int_t   fBinningResolutionHalfHiGain;         //  Half Number of weights per bin High-Gain
@@ -57,4 +54,6 @@
   Int_t PreProcess(MParList *pList);
 
+  void InitArrays();
+
   Int_t  ReadEnv(const TEnv &env, TString prefix, Bool_t print);
 
@@ -70,6 +69,4 @@
 
   void SetNameWeightsFile( TString s = fgNameWeightsFile )   { fNameWeightsFile = s; }
-  void SetWindowSize(Int_t windowh=fgWindowSizeHiGain,
-                     Int_t windowl=fgWindowSizeLoGain);
 
   void SetBinningResolution(const Int_t rh=fgBinningResolutionHiGain, const Int_t rl=fgBinningResolutionLoGain)  {
@@ -80,9 +77,10 @@
   }
   
-
   void SetSignalStartBin( const Int_t sh=fgSignalStartBinHiGain, const Int_t sl=fgSignalStartBinLoGain) {
     fSignalStartBinHiGain = sh;
     fSignalStartBinLoGain = sl; 
   }
+
+  void SetWindowSize( Int_t windowh=fgWindowSizeHiGain, Int_t windowl=fgWindowSizeLoGain);
 
   const char* GetNameWeightsFile() const  { return fNameWeightsFile.Data(); }
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.cc	(revision 5504)
@@ -89,7 +89,4 @@
 //
 MExtractTimeAndChargeSlidingWindow::MExtractTimeAndChargeSlidingWindow(const char *name, const char *title) 
-    : fWindowSizeHiGain(fgHiGainWindowSize), 
-      fWindowSizeLoGain(fgLoGainWindowSize),
-      fHiGainSignal(NULL), fLoGainSignal(NULL)
 {
   
@@ -97,20 +94,8 @@
   fTitle = title ? title : "Calculate arrival times and charges using a sliding window";
 
+  fWindowSizeHiGain = fgHiGainWindowSize;
+  fWindowSizeLoGain = fgLoGainWindowSize;
+
   SetRange(fgHiGainFirst, fgHiGainLast, fgLoGainFirst, fgLoGainLast);
-}
-
-
-// --------------------------------------------------------------------------
-//
-// Destructor: Deletes the arrays
-//
-MExtractTimeAndChargeSlidingWindow::~MExtractTimeAndChargeSlidingWindow()
-{
-  
-  if (fHiGainSignal)
-    delete [] fHiGainSignal;
-  if (fLoGainSignal)
-    delete [] fLoGainSignal;
-  
 }
 
@@ -147,5 +132,5 @@
 // - fSqrtLoGainSamples to: TMath::Sqrt(fNumLoGainSamples)  
 //  
-void MExtractTimeAndChargeSlidingWindow::SetWindowSize(Byte_t windowh, Byte_t windowl)
+void MExtractTimeAndChargeSlidingWindow::SetWindowSize(Int_t windowh, Int_t windowl)
 {
   
@@ -153,5 +138,5 @@
   fWindowSizeLoGain = windowl;
 
-  const Byte_t availhirange = fHiGainLast-fHiGainFirst+1;
+  const Int_t availhirange = (Int_t)(fHiGainLast-fHiGainFirst+1);
 
   if (fWindowSizeHiGain > availhirange)
@@ -173,5 +158,5 @@
   if (fLoGainLast != 0 && fWindowSizeLoGain != 0)
     {
-      const Byte_t availlorange = fLoGainLast-fLoGainFirst+1;
+      const Int_t availlorange = (Int_t)(fLoGainLast-fLoGainFirst+1);
       
       if (fWindowSizeLoGain > availlorange)
@@ -196,33 +181,12 @@
 // --------------------------------------------------------------------------
 //
-// ReInit
-//
-// Calls:
-// - MExtractTimeAndCharge::ReInit(pList);
-// - Deletes all arrays, if not NULL
-// - Creates new arrays according to the extraction range
-//
-Bool_t MExtractTimeAndChargeSlidingWindow::ReInit(MParList *pList)
-{
-
-  if (!MExtractTimeAndCharge::ReInit(pList))
-    return kFALSE;
-
-  if (fHiGainSignal)
-    delete [] fHiGainSignal;
-  if (fLoGainSignal)
-    delete [] fLoGainSignal;
-  
-  Int_t range = fHiGainLast - fHiGainFirst + 1 + fHiLoLast;
-
-  fHiGainSignal = new Float_t[range];
-  memset(fHiGainSignal,0,range*sizeof(Float_t));
-
-  range = fLoGainLast - fLoGainFirst + 1;
-
-  fLoGainSignal = new Float_t[range];
-  memset(fLoGainSignal,0,range*sizeof(Float_t));
-
-  return kTRUE;
+// InitArrays
+//
+// Gets called in the ReInit() and initialized the arrays
+//
+void MExtractTimeAndChargeSlidingWindow::InitArrays()
+{
+  fHiGainSignal.Set(fHiGainLast - fHiGainFirst + 1 + fHiLoLast);
+  fLoGainSignal.Set(fLoGainLast - fLoGainFirst + 1);
 }
 
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSlidingWindow.h	(revision 5504)
@@ -4,4 +4,8 @@
 #ifndef MARS_MExtractTimeAndCharge
 #include "MExtractTimeAndCharge.h"
+#endif
+
+#ifndef MARS_MArrayF
+#include "MArrayF.h"
 #endif
 
@@ -19,13 +23,11 @@
   static const Byte_t fgLoGainWindowSize; //! The extraction window Lo-Gain
 
-  Byte_t  fWindowSizeHiGain;             // Number of Hi Gain slices in window
   Float_t fHiGainWindowSizeSqrt;         // Square root of number of gains in window
-  Byte_t  fWindowSizeLoGain;             // Number of Lo Gain slices in window  
   Float_t fLoGainWindowSizeSqrt;         // Square root of number of gains in window
   
-  Float_t *fHiGainSignal;                //! Need fast access to the pedestal subtracted signals
-  Float_t *fLoGainSignal;                //! Store them in separate arrays
+  MArrayF fHiGainSignal;                 //! Need fast access to the signals in a float way
+  MArrayF fLoGainSignal;                 //! Store them in separate arrays
 
-  Bool_t ReInit( MParList *pList );
+  void InitArrays();
   
   Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print);
@@ -34,12 +36,9 @@
 
   MExtractTimeAndChargeSlidingWindow(const char *name=NULL, const char *title=NULL);
-  ~MExtractTimeAndChargeSlidingWindow();  
-
-  Byte_t GetWindowSizeHiGain() const { return fWindowSizeHiGain; }
-  Byte_t GetWindowSizeLoGain() const { return fWindowSizeLoGain; }
+  ~MExtractTimeAndChargeSlidingWindow() {}
 
   void SetRange    ( Byte_t hifirst=0, Byte_t hilast=0, Byte_t lofirst=0, Byte_t lolast=0 );  
-  void SetWindowSize(Byte_t windowh=fgHiGainWindowSize,
-                     Byte_t windowl=fgLoGainWindowSize);
+  void SetWindowSize(Int_t windowh=fgHiGainWindowSize,
+                     Int_t windowl=fgLoGainWindowSize);
 
   void FindTimeAndChargeHiGain(Byte_t *first, Byte_t *logain, Float_t &sum, Float_t &dsum,
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 5504)
@@ -177,8 +177,5 @@
 //
 MExtractTimeAndChargeSpline::MExtractTimeAndChargeSpline(const char *name, const char *title) 
-    : fHiGainSignal(NULL), fLoGainSignal(NULL),
-      fHiGainFirstDeriv(NULL), fLoGainFirstDeriv(NULL),
-      fHiGainSecondDeriv(NULL), fLoGainSecondDeriv(NULL), 
-      fAbMax(0.), fAbMaxPos(0.), fHalfMax(0.)
+    : fAbMax(0.), fAbMaxPos(0.), fHalfMax(0.)
 {
 
@@ -197,25 +194,4 @@
 }
 
-// --------------------------------------------------------------------------
-//
-// Destructor: Deletes the arrays
-//
-MExtractTimeAndChargeSpline::~MExtractTimeAndChargeSpline()
-{
-  
-  if (fHiGainSignal)
-    delete [] fHiGainSignal;
-  if (fLoGainSignal)
-    delete [] fLoGainSignal;
-  if (fHiGainFirstDeriv)
-    delete [] fHiGainFirstDeriv;
-  if (fLoGainFirstDeriv)
-    delete [] fLoGainFirstDeriv;
-  if (fHiGainSecondDeriv)
-    delete [] fHiGainSecondDeriv;
-  if (fLoGainSecondDeriv)
-    delete [] fLoGainSecondDeriv;
-  
-}
 
 //-------------------------------------------------------------------
@@ -273,5 +249,4 @@
 }
 
-
 // --------------------------------------------------------------------------
 //
@@ -286,35 +261,4 @@
 {
 
-  if (fHiGainSignal)
-    delete [] fHiGainSignal;
-  if (fLoGainSignal)
-    delete [] fLoGainSignal;
-  if (fHiGainFirstDeriv)
-    delete [] fHiGainFirstDeriv;
-  if (fLoGainFirstDeriv)
-    delete [] fLoGainFirstDeriv;
-  if (fHiGainSecondDeriv)
-    delete [] fHiGainSecondDeriv;
-  if (fLoGainSecondDeriv)
-    delete [] fLoGainSecondDeriv;
-  
-  Int_t range = fHiGainLast - fHiGainFirst + 1 + fHiLoLast;
-
-  fHiGainSignal = new Float_t[range];
-  memset(fHiGainSignal,0,range*sizeof(Float_t));
-  fHiGainFirstDeriv = new Float_t[range];
-  memset(fHiGainFirstDeriv,0,range*sizeof(Float_t));
-  fHiGainSecondDeriv = new Float_t[range];
-  memset(fHiGainSecondDeriv,0,range*sizeof(Float_t));
-
-  range = fLoGainLast - fLoGainFirst + 1;
-
-  fLoGainSignal = new Float_t[range];
-  memset(fLoGainSignal,0,range*sizeof(Float_t));
-  fLoGainFirstDeriv = new Float_t[range];
-  memset(fLoGainFirstDeriv,0,range*sizeof(Float_t));
-  fLoGainSecondDeriv = new Float_t[range];
-  memset(fLoGainSecondDeriv,0,range*sizeof(Float_t));
-
   if (IsExtractionType(kAmplitude))
     {
@@ -323,4 +267,6 @@
       fSqrtHiGainSamples = 1.;
       fSqrtLoGainSamples = 1.;
+      fWindowSizeHiGain  = 1;
+      fWindowSizeLoGain  = 1;
     }
 
@@ -331,4 +277,6 @@
       fSqrtHiGainSamples = TMath::Sqrt(fNumHiGainSamples);
       fSqrtLoGainSamples = TMath::Sqrt(fNumLoGainSamples);
+      fWindowSizeHiGain  = (Int_t)(fRiseTime + fFallTime);
+      fWindowSizeLoGain  = (Int_t)(fRiseTime + fFallTime+1);
     }
 
@@ -339,4 +287,34 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// InitArrays
+//
+// Gets called in the ReInit() and initialized the arrays
+//
+void MExtractTimeAndChargeSpline::InitArrays()
+{
+
+  Int_t range = fHiGainLast - fHiGainFirst + 1 + fHiLoLast;
+
+  fHiGainSignal     .Set(range);
+  fHiGainFirstDeriv .Set(range);
+  fHiGainSecondDeriv.Set(range);
+
+  range = fLoGainLast - fLoGainFirst + 1;
+
+  fLoGainSignal     .Set(range);
+  fLoGainFirstDeriv .Set(range);
+  fLoGainSecondDeriv.Set(range);
+
+  fHiGainSignal     .Reset();
+  fHiGainFirstDeriv .Reset();
+  fHiGainSecondDeriv.Reset();
+
+  fLoGainSignal     .Reset();
+  fLoGainFirstDeriv .Reset();
+  fLoGainSecondDeriv.Reset();
+
+}
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h
===================================================================
--- trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 5503)
+++ trunk/MagicSoft/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 5504)
@@ -4,4 +4,8 @@
 #ifndef MARS_MExtractTimeAndCharge
 #include "MExtractTimeAndCharge.h"
+#endif
+
+#ifndef MARS_MArrayF
+#include "MArrayF.h"
 #endif
 
@@ -20,10 +24,10 @@
   static const Float_t fgFallTime;       //! Default for fFallTime     (now set to: 4.5)
 
-  Float_t *fHiGainSignal;                //! Need fast access to the signals in a float way
-  Float_t *fLoGainSignal;                //! Store them in separate arrays
-  Float_t *fHiGainFirstDeriv;            //!
-  Float_t *fLoGainFirstDeriv;            //! 
-  Float_t *fHiGainSecondDeriv;           //!
-  Float_t *fLoGainSecondDeriv;           //!
+  MArrayF fHiGainSignal;                //! Need fast access to the signals in a float way
+  MArrayF fLoGainSignal;                //! Store them in separate arrays
+  MArrayF fHiGainFirstDeriv;            //! High-gain discretized first derivatives
+  MArrayF fLoGainFirstDeriv;            //! Low-gain discretized first derivatives
+  MArrayF fHiGainSecondDeriv;           //! High-gain discretized second derivatives
+  MArrayF fLoGainSecondDeriv;           //! Low-gain discretized second derivatives
 
   Float_t fAbMax;                        //! Current maximum of the spline
@@ -41,4 +45,6 @@
   Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print);
 
+  void InitArrays();
+  
   void CalcIntegralHiGain(Float_t &sum, Int_t startslice, Int_t lastslice);
   void CalcIntegralLoGain(Float_t &sum, Int_t startslice, Int_t lastslice);
@@ -56,5 +62,5 @@
 
   MExtractTimeAndChargeSpline(const char *name=NULL, const char *title=NULL);
-  ~MExtractTimeAndChargeSpline();  
+  ~MExtractTimeAndChargeSpline() {}
 
   Float_t GetRiseTime() const { return fRiseTime; }
