]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Memory leak in AliPHOSRawFitterv0 is fixed.
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 10 Jul 2009 20:03:32 +0000 (20:03 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 10 Jul 2009 20:03:32 +0000 (20:03 +0000)
PHOS/AliPHOSQADataMakerRec.cxx
PHOS/AliPHOSRawDigiProducer.cxx
PHOS/AliPHOSRawFitterv0.cxx
PHOS/AliPHOSRawFitterv0.h
PHOS/AliPHOSRawFitterv1.cxx
PHOS/AliPHOSRawFitterv1.h
PHOS/AliPHOSRawFitterv2.cxx
PHOS/AliPHOSRawFitterv2.h
PHOS/PHOSGAINda.cxx
PHOS/PHOSLEDda.cxx

index 54c821eff735de513a3c1a875726dc8af2f58860..bc6dfd925037fa460cd65e451267f2717338a271 100644 (file)
@@ -416,11 +416,11 @@ void AliPHOSQADataMakerRec::MakeRaws(AliRawReader* rawReader)
        Int_t sigStart      = fRawStream->GetStartTimeBin();
        Int_t sigLength     = fRawStream->GetBunchLength();
        fitter->SetSamples(sig,sigStart,sigLength);
+       fitter->SetChannelGeo(module,cellX,cellZ,caloFlag);
+       fitter->Eval(sig,sigStart,sigLength);
       } // End of NextBunch()
 
       fitter->SetNBunches(nBunches);
-      fitter->SetChannelGeo(module,cellX,cellZ,caloFlag);
-      fitter->Eval();
       
       Double_t energy = fitter->GetEnergy() ; 
       Double_t time   = fitter->GetTime() ;
index 31a1d5c12c57e95949a36e869767ae736d5e0298..f94e27565874672f08b173dda1a1bab7a4dcafd5 100644 (file)
@@ -175,12 +175,11 @@ void AliPHOSRawDigiProducer::MakeDigits(TClonesArray *digits, AliPHOSRawFitterv0
        const UShort_t *sig = fRawStream->GetSignals();
        Int_t sigStart  = fRawStream->GetStartTimeBin();
        Int_t sigLength = fRawStream->GetBunchLength();
-       fitter->SetSamples(sig,sigStart,sigLength);
+       fitter->SetChannelGeo(relId[0],relId[2],relId[3],caloFlag);
+       fitter->Eval(sig,sigStart,sigLength);
       } // End of NextBunch()
 
       fitter->SetNBunches(nBunches);
-      fitter->SetChannelGeo(relId[0],relId[2],relId[3],caloFlag);
-      fitter->Eval();
       
       Double_t energy = fitter->GetEnergy() ; 
       Double_t time   = fitter->GetTime() ;
index 07bf4c98c701248cd4473ecf55cf723598ce326a..0afdd36d8c0bbef509e31dd48d00bed98441b5e6 100644 (file)
@@ -48,13 +48,10 @@ ClassImp(AliPHOSRawFitterv0)
 //-----------------------------------------------------------------------------
 AliPHOSRawFitterv0::AliPHOSRawFitterv0():
   TObject(),
-  fSignal(0),
   fModule(0),
   fCellX(0),
   fCellZ(0),
   fCaloFlag(0),
-  fStart(0),
-  fLength(0),
   fNBunches(0),
   fPedSubtract(kFALSE),
   fEnergy(-111),
@@ -73,19 +70,15 @@ AliPHOSRawFitterv0::AliPHOSRawFitterv0():
 AliPHOSRawFitterv0::~AliPHOSRawFitterv0()
 {
   //Destructor
-  delete [] fSignal;
 }
 
 //-----------------------------------------------------------------------------
 AliPHOSRawFitterv0::AliPHOSRawFitterv0(const AliPHOSRawFitterv0 &phosFitter ):
   TObject(),
-  fSignal      (phosFitter.fSignal),
   fModule      (phosFitter.fModule),
   fCellX       (phosFitter.fCellX),
   fCellZ       (phosFitter.fCellZ),
   fCaloFlag    (phosFitter.fCaloFlag),
-  fStart       (phosFitter.fStart),
-  fLength      (phosFitter.fLength),
   fNBunches    (phosFitter.fNBunches),
   fPedSubtract (phosFitter.fPedSubtract),
   fEnergy      (phosFitter.fEnergy),
@@ -106,13 +99,10 @@ AliPHOSRawFitterv0& AliPHOSRawFitterv0::operator = (const AliPHOSRawFitterv0 &ph
   //Assignment operator.
 
   if(this != &phosFitter) {
-    fSignal       = phosFitter.fSignal;
     fModule       = phosFitter.fModule;
     fCellX        = phosFitter.fCellX;
     fCellZ        = phosFitter.fCellZ;
     fCaloFlag     = phosFitter.fCaloFlag;
-    fStart        = phosFitter.fStart;
-    fLength       = phosFitter.fLength;
     fNBunches     = phosFitter.fNBunches;
     fPedSubtract  = phosFitter.fPedSubtract;
     fEnergy       = phosFitter.fEnergy;
@@ -134,12 +124,13 @@ void AliPHOSRawFitterv0::SetSamples(const UShort_t *sig, Int_t sigStart, Int_t s
 {
   // Set the sample array, its start and length in time bin units
 
-  fStart   = sigStart;
-  fLength  = sigLength;
-  fSignal  = new UShort_t[fLength];
-  for (Int_t i=0; i<fLength; i++) {
-    fSignal[i] = sig[i];
-  }
+//   fStart   = sigStart;
+//   fLength  = sigLength;
+//   fSignal  = sig;
+//   fSignal  = new UShort_t[fLength];
+//   for (Int_t i=0; i<fLength; i++) {
+//     fSignal[i] = sig[i];
+//   }
 }
 //-----------------------------------------------------------------------------
 
@@ -156,7 +147,7 @@ void AliPHOSRawFitterv0::SetChannelGeo(const Int_t module, const Int_t cellX,
 }
 //-----------------------------------------------------------------------------
 
-Bool_t AliPHOSRawFitterv0::Eval()
+Bool_t AliPHOSRawFitterv0::Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength)
 {
   // Calculate signal parameters (energy, time, quality) from array of samples
   // Energy is a maximum sample minus pedestal 9
@@ -178,21 +169,20 @@ Bool_t AliPHOSRawFitterv0::Eval()
   UShort_t maxSample = 0;
   Int_t    nMax      = 0;
 
-  for (Int_t i=0; i<fLength; i++) {
+  for (Int_t i=0; i<sigLength; i++) {
     if (i<kPreSamples) {
       nPed++;
-      pedMean += fSignal[i];
-      pedRMS  += fSignal[i]*fSignal[i] ;
+      pedMean += signal[i];
+      pedRMS  += signal[i]*signal[i] ;
     }
-    
-    if(fSignal[i] > maxSample) maxSample = fSignal[i];
-    if(fSignal[i] == maxSample) nMax++;
+    if(signal[i] >  maxSample) maxSample = signal[i];
+    if(signal[i] == maxSample) nMax++;
 
     if(fPedSubtract) {
-      if( (fSignal[i]-(Float_t)(pedMean/nPed)) >kBaseLine ) fTime = (Double_t)i;
+      if( (signal[i]-(Float_t)(pedMean/nPed)) >kBaseLine ) fTime = (Double_t)i;
     }
     else //ZS
-      if( (fSignal[i]-(Float_t)fAmpOffset) >kBaseLine ) fTime = (Double_t)i;
+      if( (signal[i]-(Float_t)fAmpOffset    ) >kBaseLine ) fTime = (Double_t)i;
   }
   
   fEnergy = (Double_t)maxSample;
index 631d1e73378223f065e031a4839cacf38a22055d..2f9317f8262551912a3ea1d0a36162411fa4361c 100644 (file)
@@ -30,7 +30,7 @@ public:
   void SetChannelGeo(const Int_t module, const Int_t cellX,
                     const Int_t cellZ,  const Int_t caloFlag);
 
-  virtual Bool_t Eval();
+  virtual Bool_t Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength);
   Double_t GetEnergy()        const { return fEnergy;      }
   Double_t GetTime()          const { return fTime;        }
   Double_t GetSignalQuality() const { return fQuality;     }
@@ -45,13 +45,13 @@ public:
 
 protected:   
   
-  UShort_t *fSignal;        // array of samples
+//   UShort_t *fSignal;        // array of samples
   Int_t    fModule;         // PHOS module number
   Int_t    fCellX;          // cell number along X-axis
   Int_t    fCellZ;          // cell number along Z-axis
   Int_t    fCaloFlag;       // 0=LG, 1=HG, 2=TRU
-  Int_t    fStart;          // time bin of start signal
-  Int_t    fLength;         // signal length in time bins
+//   Int_t    fStart;          // time bin of start signal
+//   Int_t    fLength;         // signal length in time bins
   Int_t    fNBunches;       // number of bunches in a signal
   Bool_t   fPedSubtract;    // pedestals subtraction (kTRUE="yes")
   Double_t fEnergy;         // "digit" energy
@@ -63,7 +63,7 @@ protected:
   Bool_t   fOverflow ;      // kTRUE is the signal overflows
   AliPHOSCalibData * fCalibData ;   //! Calibration database if avalable
 
-  ClassDef(AliPHOSRawFitterv0,1)
+  ClassDef(AliPHOSRawFitterv0,2)
 };
 
 #endif
index 7359f7992841d6d59f4963e1cb02863fbe4a973c..d9b9679152a327d01c1858823fb9694901e73301 100644 (file)
@@ -125,7 +125,7 @@ AliPHOSRawFitterv1& AliPHOSRawFitterv1::operator = (const AliPHOSRawFitterv1 &ph
 }
 
 //-----------------------------------------------------------------------------
-Bool_t AliPHOSRawFitterv1::Eval()
+Bool_t AliPHOSRawFitterv1::Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength)
 {
   //Extract an energy deposited in the crystal,
   //crystal' position (module,column,row),
@@ -134,7 +134,7 @@ Bool_t AliPHOSRawFitterv1::Eval()
   //reasonable shape, fits it with Gamma2 function and extracts 
   //energy and time.
 
-  if (fNBunches > 1) {
+  if (fCaloFlag == 2 || fNBunches > 1) {
     fQuality = 1000;
     return kTRUE;
   }
@@ -145,19 +145,18 @@ Bool_t AliPHOSRawFitterv1::Eval()
   const Float_t kBaseLine   = 1.0;
   const Int_t   kPreSamples = 10;
   
-  TArrayI *fSamples = new TArrayI(fLength); // array of samples
-  TArrayI *fTimes   = new TArrayI(fLength); // array of times corresponding to samples
-  for (Int_t i=0; i<fLength; i++) {
+  TArrayI *fSamples = new TArrayI(sigLength); // array of sample amplitudes
+  TArrayI *fTimes   = new TArrayI(sigLength); // array of sample time stamps
+  for (Int_t i=0; i<sigLength; i++) {
     if (i<kPreSamples) {
       nPed++;
-      pedMean += fSignal[i];
-      pedRMS  += fSignal[i]*fSignal[i] ;
+      pedMean += signal[i];
+      pedRMS  += signal[i]*signal[i] ;
     }
-    fSamples->AddAt(fSignal[i],i);
-    fTimes  ->AddAt(        i ,i);
+    fSamples->AddAt(signal[i],i);
+    fTimes  ->AddAt(       i ,i);
   }
 
-  Int_t    iBin     = fSamples->GetSize() ;
   fEnergy = -111;
   fQuality= 999. ;
   const Float_t sampleMaxHG=102.332 ;  //maximal height of HG sample with given parameterization
@@ -192,61 +191,64 @@ Bool_t AliPHOSRawFitterv1::Eval()
   if (fEnergy < kBaseLine) fEnergy = 0;
   
   //calculate time and energy
-  Int_t maxBin=0 ;
-  Int_t maxAmp=0 ;
-  Double_t aMean=0. ;
-  Double_t aRMS=0. ;
-  Double_t wts=0 ;
-  Int_t tStart = 0 ;
-  for(Int_t i=0; i<fSamples->GetSize(); i++){
-    if(fSamples->At(i) > pedestal){
-      Double_t de=fSamples->At(i)-pedestal ;
-      if(de>1.){
-       aMean+=de*i ;
-       aRMS+=de*i*i ;
-       wts+=de; 
+  Int_t    maxBin=0 ;
+  Int_t    maxAmp=0 ;
+  Double_t aMean =0. ;
+  Double_t aRMS  =0. ;
+  Double_t wts   =0 ;
+  Int_t    tStart=0 ;
+
+  for (Int_t i=0; i<sigLength; i++){
+    if(signal[i] > pedestal){
+      Double_t de = signal[i] - pedestal ;
+      if(de > 1.) {
+       aMean += de*i ;
+       aRMS  += de*i*i ;
+       wts   += de; 
       }
-      if(de>2 && tStart==0) 
-       tStart=i ;
-      if(maxAmp<fSamples->At(i)){
-       maxBin=i ;
-       maxAmp=fSamples->At(i) ;
+      if(de > 2 && tStart==0) 
+       tStart = i ;
+      if(maxAmp < signal[i]){
+       maxBin = i ;
+       maxAmp = signal[i] ;
       }
     }
   }
-  if(maxBin==fSamples->GetSize()-1){//bad "rising" sample
-    fEnergy=0. ;
-    fTime=-999.;
-    fQuality= 999. ;
+
+  if (maxBin==sigLength-1){//bad "rising" sample
+    fEnergy =    0. ;
+    fTime   = -999. ;
+    fQuality=  999. ;
     return kTRUE ;
   }
+
   fEnergy=Double_t(maxAmp)-pedestal ;
   fOverflow =0 ;  //look for plato on the top of sample
-  if(fEnergy>500 &&  //this is not fluctuation of soft sample
-     maxBin<fSamples->GetSize()-1 && fSamples->At(maxBin+1)==maxAmp){ //and there is a plato
+  if (fEnergy>500 &&  //this is not fluctuation of soft sample
+     maxBin<sigLength-1 && fSamples->At(maxBin+1)==maxAmp){ //and there is a plato
     fOverflow = kTRUE ;
   }
-      
-  if(wts>0){
-    aMean/=wts; 
-    aRMS=aRMS/wts-aMean*aMean;
+  
+  if (wts > 0) {
+    aMean /= wts; 
+    aRMS   = aRMS/wts - aMean*aMean;
   }
 
   //do not take too small energies
-  if(fEnergy < kBaseLine) 
+  if (fEnergy < kBaseLine) 
     fEnergy = 0;
   
   //do not test quality of too soft samples
-  if(fEnergy<maxEtoFit){
-    fTime=fTimes->At(tStart);
-    if(aRMS<2.) //sigle peak
-      fQuality=999. ;
+  if (fEnergy < maxEtoFit){
+    fTime = tStart;
+    if (aRMS < 2.) //sigle peak
+      fQuality = 999. ;
     else
-      fQuality= 0. ;
+      fQuality =   0. ;
     return kTRUE ;
   }
       
-  //IF sample has reasonable mean and RMS, try to fit it with gamma2
+  // if sample has reasonable mean and RMS, try to fit it with gamma2
   
   gMinuit->mncler();                     // Reset Minuit's list of paramters
   gMinuit->SetPrintLevel(-1) ;           // No Printout
@@ -255,25 +257,25 @@ Bool_t AliPHOSRawFitterv1::Eval()
   
   fToFit->Clear("nodelete") ;
   Double_t b=0,bmin=0,bmax=0 ;
-  if(fCaloFlag == 0){ // Low gain
+  if      (fCaloFlag == 0){ // Low gain
     fSampleParamsLow->AddAt(pedestal,4) ;
-    if(fOverflow)
+    if (fOverflow)
       fSampleParamsLow->AddAt(double(maxAmp),5) ;
     else
       fSampleParamsLow->AddAt(double(1023),5) ;
-    fSampleParamsLow->AddAt(double(iBin),6) ;
+    fSampleParamsLow->AddAt(double(sigLength),6) ;
     fToFit->AddFirst((TObject*)fSampleParamsLow) ; 
     b=fSampleParamsLow->At(2) ;
     bmin=0.5 ;
     bmax=10. ;
   }
-  else if(fCaloFlag == 1){ // High gain
+  else if (fCaloFlag == 1){ // High gain
     fSampleParamsHigh->AddAt(pedestal,4) ;
-    if(fOverflow)
+    if (fOverflow)
       fSampleParamsHigh->AddAt(double(maxAmp),5) ;
     else
       fSampleParamsHigh->AddAt(double(1023),5);
-    fSampleParamsHigh->AddAt(double(iBin),6);
+    fSampleParamsHigh->AddAt(double(sigLength),6);
     fToFit->AddFirst((TObject*)fSampleParamsHigh) ; 
     b=fSampleParamsHigh->At(2) ;
     bmin=0.05 ;
@@ -287,36 +289,35 @@ Bool_t AliPHOSRawFitterv1::Eval()
   gMinuit->mnparm(0, "t0",  1.*tStart, 0.01, -500., 500., ierflg) ;
   if(ierflg != 0){
     //   AliWarning(Form("Unable to set initial value for fit procedure : t0=%e\n",1.*tStart) ) ;
-    fEnergy=0. ;
-    fTime=-999. ;
-    fQuality=999 ;
+    fEnergy =   0. ;
+    fTime   =-999. ;
+    fQuality= 999. ;
     return kTRUE ; //will scan further
   }
   Double_t amp0=0; 
-  if(fCaloFlag == 0) // Low gain
-    amp0=fEnergy/sampleMaxLG;
-  else if(fCaloFlag == 1) // High gain
-    amp0=fEnergy/sampleMaxHG;
+  if      (fCaloFlag == 0) // Low gain
+    amp0 = fEnergy/sampleMaxLG;
+  else if (fCaloFlag == 1) // High gain
+    amp0 = fEnergy/sampleMaxHG;
   
   gMinuit->mnparm(1, "Energy", amp0 , 0.01*amp0, 0, 0, ierflg) ;
   if(ierflg != 0){
     //   AliWarning(Form("Unable to set initial value for fit procedure : E=%e\n", amp0)) ;
-    fEnergy=0. ;
-    fTime=-999. ;
-    fQuality=999 ;
+    fEnergy =   0. ;
+    fTime   =-999. ;
+    fQuality= 999. ;
     return kTRUE ; //will scan further
   }
   
   gMinuit->mnparm(2, "p2", b, 0.01*b, bmin, bmax, ierflg) ;
   if(ierflg != 0){                                         
     //        AliWarning(Form("Unable to set initial value for fit procedure : E=%e\n", amp0)) ;  
-    fEnergy=0. ;           
-    fTime=-999. ;         
-    fQuality=999 ;       
+    fEnergy =   0. ;
+    fTime   =-999. ;
+    fQuality= 999. ;
     return kTRUE ; //will scan further  
   }             
   
-  
   Double_t p0 = 0.0001 ; // "Tolerance" Evaluation stops when EDM = 0.0001*p0 ; The number of function call slightly
   //  depends on it. 
   Double_t p1 = 1.0 ;
@@ -330,23 +331,23 @@ Bool_t AliPHOSRawFitterv1::Eval()
   
   Double_t err,t0err ;
   Double_t t0,efit ;
-  gMinuit->GetParameter(0,t0, t0err) ;    
-  gMinuit->GetParameter(1,efit, err) ;    
+  gMinuit->GetParameter(0,t0, t0err) ;
+  gMinuit->GetParameter(1,efit, err) ;
   
   Double_t bfit, berr ;
   gMinuit->GetParameter(2,bfit,berr) ;
   
   //Calculate total energy
-  //this isparameterization of depetendence of pulse height on parameter b
+  //this is parameterization of dependence of pulse height on parameter b
   if(fCaloFlag == 0) // Low gain
-    efit*=99.54910 + 78.65038*bfit ;
+    efit *= 99.54910 + 78.65038*bfit ;
   else if(fCaloFlag == 1) // High gain
-    efit*=80.33109+128.6433*bfit ;
+    efit *= 80.33109 + 128.6433*bfit ;
   
-  if(efit<0. || efit > 10000.){
+  if(efit < 0. || efit > 10000.){
     //set energy to previously found max
-    fTime=-999.;                                                                
-    fQuality=999 ;                                                              
+    fTime   =-999.;
+    fQuality= 999 ;
     return kTRUE;
   }                                                                             
   
@@ -354,15 +355,16 @@ Bool_t AliPHOSRawFitterv1::Eval()
   Double_t fmin,fedm,errdef ;
   Int_t npari,nparx,istat;
   gMinuit->mnstat(fmin,fedm,errdef,npari,nparx,istat) ;
-  fQuality=fmin/(fSamples->GetSize()-iBin) ;
+  fQuality = fmin/sigLength ;
   //compare quality with some parameterization
-  if(fCaloFlag == 0) // Low gain
-    fQuality/=2.+0.002*fEnergy ;
-  else if(fCaloFlag == 1) // High gain
-    fQuality/=0.75+0.0025*fEnergy ;
+  if      (fCaloFlag == 0) // Low gain
+    fQuality /= 2.00 + 0.0020*fEnergy ;
+  else if (fCaloFlag == 1) // High gain
+    fQuality /= 0.75 + 0.0025*fEnergy ;
   
-  fEnergy=efit ;
-  fTime=t0-4.024*bfit ; //-10.402*bfit+4.669*bfit*bfit ; //Correction for 70 samples
+  fEnergy = efit ;
+  fTime   = t0 - 4.024*bfit ; //-10.402*bfit+4.669*bfit*bfit ; //Correction for 70 samples
+  fTime  += sigStart;
   
   delete fSamples ;
   delete fTimes ;
index f02e41d42f88b7544893391ac33556c406eea38d..0b42a76ba6412858366eee25d8d7af4ed87f9682 100644 (file)
@@ -22,7 +22,7 @@ public:
   AliPHOSRawFitterv1& operator = (const AliPHOSRawFitterv1& rawFitter);
   virtual ~AliPHOSRawFitterv1();
 
-  virtual Bool_t Eval();
+  virtual Bool_t Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength);
 
   static Double_t Gamma2(Double_t dt,Double_t en,Double_t b,TArrayD * fitparams) ; // Shape of correct sample
                                                  //class member function (not object member function)
index f38114c07830a4aced8c8f6bf82dd115e701fe9c..098bd8cf3b8902d3ffc0351f4a81cc8447ff0dc5 100644 (file)
@@ -100,7 +100,7 @@ AliPHOSRawFitterv2& AliPHOSRawFitterv2::operator = (const AliPHOSRawFitterv2 &ph
 }
 
 //-----------------------------------------------------------------------------
-Bool_t AliPHOSRawFitterv2::Eval()
+Bool_t AliPHOSRawFitterv2::Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength)
 {
   //Extract an energy deposited in the crystal,
   //crystal' position (module,column,row),
@@ -131,15 +131,15 @@ Bool_t AliPHOSRawFitterv2::Eval()
   if(!h) h = new TH1D("hSample","",200,0.,200.) ;
 
   Double_t pedestal = 0;
-  for (Int_t i=0; i<fLength; i++) {
+  for (Int_t i=0; i<sigLength; i++) {
     if (i<kPreSamples) {
       nPed++;
-      pedMean += fSignal[i];
-      pedRMS  += fSignal[i]*fSignal[i] ;
+      pedMean += signal[i];
+      pedRMS  += signal[i]*signal[i] ;
     }
-    if(fSignal[i] > maxSample) maxSample = fSignal[i];
-    if(fSignal[i] == maxSample) nMax++;
-    h->SetBinContent(i+1,fSignal[i]) ;
+    if(signal[i] > maxSample) maxSample = signal[i];
+    if(signal[i] == maxSample) nMax++;
+    h->SetBinContent(i+1,signal[i]) ;
   }
   fEnergy = (Double_t)maxSample;
   if (maxSample > 900 && nMax > 2) fOverflow = kTRUE;
@@ -193,14 +193,14 @@ Bool_t AliPHOSRawFitterv2::Eval()
 
   fQuality = 0. ;
   
-  for(Int_t i=1; i<fLength && cnts<fNtimeSamples; i++){
-    if(fSignal[i] < pedestal)
+  for(Int_t i=1; i<sigLength && cnts<fNtimeSamples; i++){
+    if(signal[i] < pedestal)
       continue ;
-    Double_t de = fSignal[i]   - pedestal ;
-    Double_t av = fSignal[i-1] - pedestal + de;
+    Double_t de = signal[i]   - pedestal ;
+    Double_t av = signal[i-1] - pedestal + de;
     if(av<=0.) //this is fluctuation around pedestal, skip it
       continue ;
-    Double_t ds = fSignal[i] - fSignal[i-1] ;
+    Double_t ds = signal[i] - signal[i-1] ;
     Double_t ti = ds/av ;       // calculate log. derivative
     ti = a/(ti+b)-c*ti ;        // and compare with parameterization
     ti = i - ti ; 
@@ -214,6 +214,7 @@ Bool_t AliPHOSRawFitterv2::Eval()
   if(tW>0.){
     fTime/=tW ;
     fQuality = tRMS/tW-fTime*fTime ;
+    fTime+=sigStart;
   }
   else{
     fTime=-999. ;
@@ -221,8 +222,8 @@ Bool_t AliPHOSRawFitterv2::Eval()
   }
 
   Bool_t isBad = 0 ;
-  for(Int_t i=1; i<fLength-1&&!isBad; i++){
-    if(fSignal[i] > fSignal[i-1]+5 && fSignal[i] > fSignal[i+1]+5) { //single jump
+  for(Int_t i=1; i<sigLength-1&&!isBad; i++){
+    if(signal[i] > signal[i-1]+5 && signal[i] > signal[i+1]+5) { //single jump
       isBad=1 ;
     }
   }
@@ -232,8 +233,8 @@ Bool_t AliPHOSRawFitterv2::Eval()
   if(fPedestalRMS > 0.1)
     isBad=1 ;
   
-  for(Int_t i=1; i<fLength-1&&!isBad; i++){
-    if(fSignal[i] < pedestal-1)
+  for(Int_t i=1; i<sigLength-1&&!isBad; i++){
+    if(signal[i] < pedestal-1)
       isBad=1 ;
   }
   
index 9d223622b8456f03eb036736ae256389366b9693..997ed356060aa546d8d46735725e8cf808967ae0 100644 (file)
@@ -21,7 +21,7 @@ public:
   AliPHOSRawFitterv2& operator = (const AliPHOSRawFitterv2& rawFitter);
   virtual ~AliPHOSRawFitterv2();
 
-  virtual Bool_t Eval();
+  virtual Bool_t Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength);
 
   void SetNTimeSamples(Short_t n=25)     { fNtimeSamples=n ;}
   void SetLowGainTParams (Double_t *pars){ for(Int_t i=0;i<3;i++) fLGpar[i]=pars[i] ;}
index 45b79b666c8fdf6dd5378fdc25de446022be4d0c..149217449930cffd376ca099f9fbb5cff1d7a415 100644 (file)
@@ -192,13 +192,10 @@ int main(int argc, char **argv) {
            if (nBunches > 1) continue;
            sigStart  = stream.GetStartTimeBin();
            sigLength = stream.GetBunchLength();
-           fitter.SetSamples(stream.GetSignals(),sigStart,sigLength);
+           fitter.SetChannelGeo(stream.GetModule(),cellX,cellZ,caloFlag);
+           fitter.Eval(stream.GetSignals(),sigStart,sigLength);
          } // End of NextBunch()
          
-         fitter.SetNBunches(nBunches);
-         fitter.SetChannelGeo(stream.GetModule(),cellX,cellZ,caloFlag);
-         fitter.Eval();
-         
          if (nBunches>1) continue;
          
          e[cellX][cellZ][caloFlag] = fitter.GetEnergy();
index e453d41151b30d37f4ed2f6bd2b3fa50c89c0bc3..c96ce97454be626eb3373a6e8cc140f4047249aa 100644 (file)
@@ -188,13 +188,10 @@ int main(int argc, char **argv) {
            if (nBunches > 1) continue;
            sigStart  = stream.GetStartTimeBin();
            sigLength = stream.GetBunchLength();
-           fitter.SetSamples(stream.GetSignals(),sigStart,sigLength);
+           fitter.SetChannelGeo(stream.GetModule(),cellX,cellZ,caloFlag);
+           fitter.Eval(stream.GetSignals(),sigStart,sigLength);
          } // End of NextBunch()
          
-         fitter.SetNBunches(nBunches);
-         fitter.SetChannelGeo(stream.GetModule(),cellX,cellZ,caloFlag);
-         fitter.Eval();
-         
          if(nBunches>1) continue;
 //       if (nBunches>1 || caloFlag!=0 || caloFlag!=1 || fitter.GetSignalQuality()>1) continue;