ROOT logo
/**************************************************************************
 * Copyright(c) 2007, ALICE Experiment at CERN, All rights reserved.      *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


// This class extracts the signal parameters (energy, time, quality)
// from ALTRO samples. Energy is in ADC counts, time is in time bin units.
// If sample is not in saturation, a coarse algorithm is used (a-la AliPHOSRawFitterv0)
// If sample is in saturation, the unsaturated part of the sample is fit a-la AliPHOSRawFitterv1
// 
//     AliPHOSRawFitterv4 *fitterv4=new AliPHOSRawFitterv4();
//     fitterv4->SetChannelGeo(module,cellX,cellZ,caloFlag);
//     fitterv4->SetCalibData(fgCalibData) ;
//     fitterv4->Eval(sig,sigStart,sigLength);
//     Double_t amplitude = fitterv4.GetEnergy();
//     Double_t time      = fitterv4.GetTime();
//     Bool_t   isLowGain = fitterv4.GetCaloFlag()==0;

// Author: Dmitri Peressounko

// --- ROOT system ---
#include "TArrayI.h"
#include "TMath.h"
#include "TObject.h"
#include "TArrayD.h"
#include "TList.h"
#include "TMinuit.h"


//Used for debug
//#include "TROOT.h"
//#include "TH1.h"
//#include "TCanvas.h"
//#include "TPad.h"
//#include "TF1.h"



// --- AliRoot header files ---
#include "AliPHOSRawFitterv4.h"
#include "AliPHOSCalibData.h"
#include "AliLog.h"

ClassImp(AliPHOSRawFitterv4)

//-----------------------------------------------------------------------------
AliPHOSRawFitterv4::AliPHOSRawFitterv4():
  AliPHOSRawFitterv1(),
  fFitHighGain(0) 
{
  //Default constructor
}

//-----------------------------------------------------------------------------
AliPHOSRawFitterv4::~AliPHOSRawFitterv4()
{
}

//-----------------------------------------------------------------------------

Bool_t AliPHOSRawFitterv4::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
  // Time is the first time bin
  // Signal overflows is there are at least 3 samples of the same amplitude above 900

  fOverflow= kFALSE ;
  fEnergy  = 0;
  if (fNBunches > 1) {
    fQuality = 1000;
    return kTRUE;
  }
  
  const Float_t kBaseLine   = 1.0;
  const Int_t   kPreSamples = 10;

  Float_t  pedMean   = 0;
  Float_t  pedRMS    = 0;
  Int_t    nPed      = 0;
  UShort_t maxSample = 0;
  Int_t    nMax      = 0;

  for (Int_t i=0; i<sigLength; i++) {
    if (i>sigLength-kPreSamples) { //inverse signal time order
      nPed++;
      pedMean += signal[i];
      pedRMS  += signal[i]*signal[i] ;
    }
    if(signal[i] > maxSample ){ maxSample = signal[i]; nMax=0;}
    if(signal[i] == maxSample) nMax++;

  }

  fEnergy = (Double_t)maxSample;
  if (maxSample > 850 && nMax > 2) fOverflow = kTRUE;
  
  Double_t pedestal = 0 ;
  if (fPedSubtract) {
    if (nPed > 0) {
      fPedestalRMS=(pedRMS - pedMean*pedMean/nPed)/nPed ;
      if(fPedestalRMS > 0.) 
	fPedestalRMS = TMath::Sqrt(fPedestalRMS) ;
      pedestal = (Double_t)(pedMean/nPed);
    }
    else
      return kFALSE;
  }
  else {
    //take pedestals from DB
    pedestal = (Double_t) fAmpOffset ;
    if (fCalibData) {
      Float_t truePed       = fCalibData->GetADCpedestalEmc(fModule, fCellZ, fCellX) ;
      Int_t   altroSettings = fCalibData->GetAltroOffsetEmc(fModule, fCellZ, fCellX) ;
      pedestal += truePed - altroSettings ;
    }
    else{
      AliDebug(2,Form("Pedestal and offset are not read from OCDB. Use 0 for their values.")) ;
    }
  }
  fEnergy-=pedestal ;
  if (fEnergy < kBaseLine) fEnergy = 0;
  
  
  if(fOverflow && ((fCaloFlag == 0) || fFitHighGain)){ //by default fit LowGain only
    TArrayI *samples = new TArrayI(sigLength); // array of sample amplitudes
    TArrayI *times   = new TArrayI(sigLength); // array of sample time stamps
    Bool_t result = kTRUE ;
    for (Int_t i=0; i<sigLength; i++) {
      samples->AddAt(signal[i]-pedestal,sigLength-i-1);
      times  ->AddAt(i ,i);
    }
    //Prepare fit parameters
    //Evaluate time
    Int_t iStart = 0;
    while(iStart<sigLength && samples->At(iStart) <kBaseLine) iStart++ ;
    if      (fCaloFlag == 0){ // Low gain
      fSampleParamsLow->AddAt(pedestal,4) ;
      fSampleParamsLow->AddAt(double(maxSample),5) ;
      fSampleParamsLow->AddAt(double(iStart),6) ;
    }
    else if (fCaloFlag == 1){ // High gain
      fSampleParamsHigh->AddAt(pedestal,4) ;
      fSampleParamsHigh->AddAt(double(maxSample),5) ;
      fSampleParamsHigh->AddAt(double(iStart),6) ;
    }
    result=EvalWithFitting(samples,times); 
    fToFit->Clear("nodelete") ;
    delete samples ;
    delete times ;
    
    return result; 
  
  }
  
  
  //Sample withour overflow - Evaluate time
  fTime = sigStart-sigLength-3; 
  const Int_t nLine= 6 ;        //Parameters of fitting
  const Float_t eMinTOF = 10. ; //Choosed from beam-test and cosmic analyis
  const Float_t kAmp=0.35 ;     //Result slightly depends on them, so no getters
  // Avoid too low peak:
  if(fEnergy < eMinTOF){
     return kTRUE;
  }
  // Find index posK (kLevel is a level of "timestamp" point Tk):
  Int_t posK =sigLength-1 ; //last point before crossing k-level
  Double_t levelK = pedestal + kAmp*fEnergy;
  while(signal[posK] <= levelK && posK>=0){
     posK-- ;
  }
  posK++ ;

  if(posK == 0 || posK==sigLength-1){
    return kTRUE; 
  }

  // Find crosing point by solving linear equation (least squares method)
  Int_t np = 0;
  Int_t iup=posK-1 ;
  Int_t idn=posK ;
  Double_t sx = 0., sy = 0., sxx = 0., sxy = 0.;
  Double_t x,y ;

  while(np<nLine){
    //point above crossing point
    if(iup>=0){
      x = sigLength-iup-1;
      y = signal[iup];
      sx += x;
      sy += y;
      sxx += (x*x);
      sxy += (x*y);
      np++ ;
      iup-- ;
    }
    //Point below crossing point
    if(idn<sigLength){
      if(signal[idn]<pedestal){
        idn=sigLength-1 ; //do not scan further
	idn++ ;
        continue ;
      }
      x = sigLength-idn-1;
      y = signal[idn];
      sx += x;
      sy += y;
      sxx += (x*x);
      sxy += (x*y);
      np++;
      idn++ ;
    }
    if(idn>=sigLength && iup<0){
      break ; //can not fit futher
    }
  }

  Double_t det = np*sxx - sx*sx;
  if(det == 0){
    return kTRUE;
  }
  Double_t c1 = (np*sxy - sx*sy)/det;  //slope
  Double_t c0 = 0;
  if (np>0)
    c0 = (sy-c1*sx)/np; //offset
  if(c1 == 0){
    return kTRUE;
  }

  // Find where the line cross kLevel:
  fTime += (levelK - c0)/c1-5. ; //5: mean offset between k-Level and start times
  return kTRUE;

}
//===================================================
Bool_t AliPHOSRawFitterv4::EvalWithFitting(TArrayI*samples, TArrayI * times){

  // if sample has reasonable mean and RMS, try to fit it with gamma2
  const Float_t sampleMaxHG=102.332 ; 
  const Float_t sampleMaxLG=277.196 ; 
  
  gMinuit->mncler();                     // Reset Minuit's list of paramters
  gMinuit->SetPrintLevel(-1) ;           // No Printout
  gMinuit->SetFCN(AliPHOSRawFitterv1::UnfoldingChiSquare) ;  
  // To set the address of the minimization function 
  
  fToFit->Clear("nodelete") ;
  Double_t b=0,bmin=0,bmax=0 ;
  if      (fCaloFlag == 0){ // Low gain
    b=fSampleParamsLow->At(2) ;
    bmin=0.5 ;
    bmax=10. ;
    fToFit->AddFirst((TObject*)fSampleParamsLow) ; 
  }
  else if (fCaloFlag == 1){ // High gain
    b=fSampleParamsHigh->At(2) ;
    bmin=0.05 ;
    bmax=0.4 ;
    fToFit->AddFirst((TObject*)fSampleParamsHigh) ; 
  }
  fToFit->AddLast((TObject*)samples) ;
  fToFit->AddLast((TObject*)times) ;
  

  gMinuit->SetObjectFit((TObject*)fToFit) ;         // To tranfer pointer to UnfoldingChiSquare
  Int_t ierflg ;
  gMinuit->mnparm(0, "t0",  1., 0.01, -50., 50., 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. ;
    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;
  
  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. ;
    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. ;
    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 ;
  Double_t p2 = 0.0 ;
  gMinuit->mnexcm("SET STR", &p2, 0, ierflg) ;   // force TMinuit to reduce function calls  
  gMinuit->mnexcm("SET GRA", &p1, 1, ierflg) ;   // force TMinuit to use my gradient  
  //////	gMinuit->SetMaxIterations(100);
  gMinuit->mnexcm("SET NOW", &p2 , 0, ierflg) ;  // No Warnings
  
  gMinuit->mnexcm("MIGRAD", &p0, 0, ierflg) ;    // minimize 
  
  Double_t err=0.,t0err=0. ;
  Double_t t0=0.,efit=0. ;
  gMinuit->GetParameter(0,t0, t0err) ;
  gMinuit->GetParameter(1,efit, err) ;
  
  Double_t bfit=0., berr=0. ;
  gMinuit->GetParameter(2,bfit,berr) ;
  
   //Calculate total energy
  //this is parameterization of dependence of pulse height on parameter b
  if(fCaloFlag == 0) // Low gain
    fEnergy = efit*(99.54910 + 78.65038*bfit) ;
  else if(fCaloFlag == 1) // High gain
    fEnergy=efit*(80.33109 + 128.6433*bfit) ;
  
  if(fEnergy < 0. || fEnergy > 10000.){
    //set energy to previously found max
    fTime   =-999.;
    fQuality= 999 ;
    fEnergy=0. ;
    return kTRUE;
  }                                                                             
  
  //evaluate fit quality
  Double_t fmin=0.,fedm=0.,errdef=0. ;
  Int_t npari,nparx,istat;
  gMinuit->mnstat(fmin,fedm,errdef,npari,nparx,istat) ;
  fQuality = fmin/samples->GetSize() ;
  //compare quality with some parameterization
  if      (fCaloFlag == 0) // Low gain
    fQuality /= 2.00 + 0.0020*fEnergy ;
  else if (fCaloFlag == 1) // High gain
    fQuality /= 0.75 + 0.0025*fEnergy ;
  
  fTime  += t0 - 4.024*bfit ;

  if(fQuality==0.){//no points to fit)
    fTime   =-999.;
    fQuality= 1999 ;
    fEnergy=0. ;  
  }
  
/*  
  if(1){
    TH1I * h = (TH1I*)gROOT->FindObjectAny("hSamples") ;
    if(!h) h = new TH1I("hSamples","Samples",65,0.,65.) ;
    h->Reset() ;
    for (Int_t i=0; i<samples->GetSize(); i++) {
        h->SetBinContent(i+1,float(samples->At(i))) ;
    }
    TF1 * fffit = new TF1("fffit","[0]*(abs(x-[1])^[3]*exp(-[2]*(x-[1]))+[4]*(x-[1])*(x-[1])*exp(-[5]*(x-[1])))",0.,60.) ;
    TArrayD * params=(TArrayD*)fToFit->At(0) ; 
    Double_t n=params->At(0) ;
    Double_t alpha=params->At(1) ;
    Double_t beta=params->At(3) ;
    fffit->SetParameters(efit,t0,alpha,n,bfit,beta) ;
    fffit->SetLineColor(2) ;
    TCanvas * can = (TCanvas*)gROOT->FindObjectAny("cSamples") ;
    if(!can){
        can = new TCanvas("cSamples","cSamples",10,10,600,600) ;
        can->SetFillColor(0) ;
        can->SetFillStyle(0) ;
        can->Range(0,0,1,1);
        can->SetBorderSize(0);
    }
    can->cd() ;
  
//      TPad * spectrum_1 = new TPad("spectrum_1", "spectrum_1",0.001,0.32,0.99,0.99);
      TPad * spectrum_1 = new TPad("spectrum_1", "spectrum_1",0.001,0.001,0.999,0.999);
      spectrum_1->Draw();
      spectrum_1->cd();
      spectrum_1->Range(0,0,1,1);
      spectrum_1->SetFillColor(0);
      spectrum_1->SetFillStyle(4000);
      spectrum_1->SetBorderSize(1);
      spectrum_1->SetBottomMargin(0.012);
      spectrum_1->SetTopMargin(0.03);
      spectrum_1->SetLeftMargin(0.10);
      spectrum_1->SetRightMargin(0.05);

      char title[155] ;
      snprintf(title,155,"Sample, mod=%d, x=%d, z=%d, Quality=%5.1f",fModule,fCellX,fCellZ,fQuality) ;
      h->SetTitle(title) ;
//      h->Fit(fffit,"","",0.,51.) ;
      h->Draw() ;
      fffit->Draw("same") ;


//       can->cd() ;
//       TPad *spectrum_2 = new TPad("spectrum_2", "spectrum_2",0.001,0.01,0.99,0.32);
//       spectrum_2->SetFillColor(0) ;
//       spectrum_2->SetFillStyle(0) ;
//       spectrum_2->SetGridy() ;
//       spectrum_2->Draw();
//       spectrum_2->Range(0,0,1,1);
//       spectrum_2->SetFillColor(0);
//       spectrum_2->SetBorderSize(1);
//       spectrum_2->SetTopMargin(0.01);
//       spectrum_2->SetBottomMargin(0.25);
//       spectrum_2->SetLeftMargin(0.10);
//       spectrum_2->SetRightMargin(0.05);
//       spectrum_2->cd() ;
// 
//       TH1I * hd = (TH1I*)gROOT->FindObjectAny("hSamplesDif") ;
//       if(!hd) hd = new TH1I("hd","Samples",65,0.,65.) ;
//       hd->Reset() ;
//       for (Int_t i=0; i<samples->GetSize(); i++) {
//         hd->SetBinContent(i+1,TMath::Max(-1023.,TMath::Min(1023.,samples->At(i)-fffit->Eval(i)))) ;
//       }
//       hd->Draw();

      can->Update() ;
      printf("Press <enter> to continue\n") ;
      getchar();


      delete fffit ;
      delete spectrum_1 ;
//      delete spectrum_2 ;
    }
*/
  
  return kTRUE;

}
 AliPHOSRawFitterv4.cxx:1
 AliPHOSRawFitterv4.cxx:2
 AliPHOSRawFitterv4.cxx:3
 AliPHOSRawFitterv4.cxx:4
 AliPHOSRawFitterv4.cxx:5
 AliPHOSRawFitterv4.cxx:6
 AliPHOSRawFitterv4.cxx:7
 AliPHOSRawFitterv4.cxx:8
 AliPHOSRawFitterv4.cxx:9
 AliPHOSRawFitterv4.cxx:10
 AliPHOSRawFitterv4.cxx:11
 AliPHOSRawFitterv4.cxx:12
 AliPHOSRawFitterv4.cxx:13
 AliPHOSRawFitterv4.cxx:14
 AliPHOSRawFitterv4.cxx:15
 AliPHOSRawFitterv4.cxx:16
 AliPHOSRawFitterv4.cxx:17
 AliPHOSRawFitterv4.cxx:18
 AliPHOSRawFitterv4.cxx:19
 AliPHOSRawFitterv4.cxx:20
 AliPHOSRawFitterv4.cxx:21
 AliPHOSRawFitterv4.cxx:22
 AliPHOSRawFitterv4.cxx:23
 AliPHOSRawFitterv4.cxx:24
 AliPHOSRawFitterv4.cxx:25
 AliPHOSRawFitterv4.cxx:26
 AliPHOSRawFitterv4.cxx:27
 AliPHOSRawFitterv4.cxx:28
 AliPHOSRawFitterv4.cxx:29
 AliPHOSRawFitterv4.cxx:30
 AliPHOSRawFitterv4.cxx:31
 AliPHOSRawFitterv4.cxx:32
 AliPHOSRawFitterv4.cxx:33
 AliPHOSRawFitterv4.cxx:34
 AliPHOSRawFitterv4.cxx:35
 AliPHOSRawFitterv4.cxx:36
 AliPHOSRawFitterv4.cxx:37
 AliPHOSRawFitterv4.cxx:38
 AliPHOSRawFitterv4.cxx:39
 AliPHOSRawFitterv4.cxx:40
 AliPHOSRawFitterv4.cxx:41
 AliPHOSRawFitterv4.cxx:42
 AliPHOSRawFitterv4.cxx:43
 AliPHOSRawFitterv4.cxx:44
 AliPHOSRawFitterv4.cxx:45
 AliPHOSRawFitterv4.cxx:46
 AliPHOSRawFitterv4.cxx:47
 AliPHOSRawFitterv4.cxx:48
 AliPHOSRawFitterv4.cxx:49
 AliPHOSRawFitterv4.cxx:50
 AliPHOSRawFitterv4.cxx:51
 AliPHOSRawFitterv4.cxx:52
 AliPHOSRawFitterv4.cxx:53
 AliPHOSRawFitterv4.cxx:54
 AliPHOSRawFitterv4.cxx:55
 AliPHOSRawFitterv4.cxx:56
 AliPHOSRawFitterv4.cxx:57
 AliPHOSRawFitterv4.cxx:58
 AliPHOSRawFitterv4.cxx:59
 AliPHOSRawFitterv4.cxx:60
 AliPHOSRawFitterv4.cxx:61
 AliPHOSRawFitterv4.cxx:62
 AliPHOSRawFitterv4.cxx:63
 AliPHOSRawFitterv4.cxx:64
 AliPHOSRawFitterv4.cxx:65
 AliPHOSRawFitterv4.cxx:66
 AliPHOSRawFitterv4.cxx:67
 AliPHOSRawFitterv4.cxx:68
 AliPHOSRawFitterv4.cxx:69
 AliPHOSRawFitterv4.cxx:70
 AliPHOSRawFitterv4.cxx:71
 AliPHOSRawFitterv4.cxx:72
 AliPHOSRawFitterv4.cxx:73
 AliPHOSRawFitterv4.cxx:74
 AliPHOSRawFitterv4.cxx:75
 AliPHOSRawFitterv4.cxx:76
 AliPHOSRawFitterv4.cxx:77
 AliPHOSRawFitterv4.cxx:78
 AliPHOSRawFitterv4.cxx:79
 AliPHOSRawFitterv4.cxx:80
 AliPHOSRawFitterv4.cxx:81
 AliPHOSRawFitterv4.cxx:82
 AliPHOSRawFitterv4.cxx:83
 AliPHOSRawFitterv4.cxx:84
 AliPHOSRawFitterv4.cxx:85
 AliPHOSRawFitterv4.cxx:86
 AliPHOSRawFitterv4.cxx:87
 AliPHOSRawFitterv4.cxx:88
 AliPHOSRawFitterv4.cxx:89
 AliPHOSRawFitterv4.cxx:90
 AliPHOSRawFitterv4.cxx:91
 AliPHOSRawFitterv4.cxx:92
 AliPHOSRawFitterv4.cxx:93
 AliPHOSRawFitterv4.cxx:94
 AliPHOSRawFitterv4.cxx:95
 AliPHOSRawFitterv4.cxx:96
 AliPHOSRawFitterv4.cxx:97
 AliPHOSRawFitterv4.cxx:98
 AliPHOSRawFitterv4.cxx:99
 AliPHOSRawFitterv4.cxx:100
 AliPHOSRawFitterv4.cxx:101
 AliPHOSRawFitterv4.cxx:102
 AliPHOSRawFitterv4.cxx:103
 AliPHOSRawFitterv4.cxx:104
 AliPHOSRawFitterv4.cxx:105
 AliPHOSRawFitterv4.cxx:106
 AliPHOSRawFitterv4.cxx:107
 AliPHOSRawFitterv4.cxx:108
 AliPHOSRawFitterv4.cxx:109
 AliPHOSRawFitterv4.cxx:110
 AliPHOSRawFitterv4.cxx:111
 AliPHOSRawFitterv4.cxx:112
 AliPHOSRawFitterv4.cxx:113
 AliPHOSRawFitterv4.cxx:114
 AliPHOSRawFitterv4.cxx:115
 AliPHOSRawFitterv4.cxx:116
 AliPHOSRawFitterv4.cxx:117
 AliPHOSRawFitterv4.cxx:118
 AliPHOSRawFitterv4.cxx:119
 AliPHOSRawFitterv4.cxx:120
 AliPHOSRawFitterv4.cxx:121
 AliPHOSRawFitterv4.cxx:122
 AliPHOSRawFitterv4.cxx:123
 AliPHOSRawFitterv4.cxx:124
 AliPHOSRawFitterv4.cxx:125
 AliPHOSRawFitterv4.cxx:126
 AliPHOSRawFitterv4.cxx:127
 AliPHOSRawFitterv4.cxx:128
 AliPHOSRawFitterv4.cxx:129
 AliPHOSRawFitterv4.cxx:130
 AliPHOSRawFitterv4.cxx:131
 AliPHOSRawFitterv4.cxx:132
 AliPHOSRawFitterv4.cxx:133
 AliPHOSRawFitterv4.cxx:134
 AliPHOSRawFitterv4.cxx:135
 AliPHOSRawFitterv4.cxx:136
 AliPHOSRawFitterv4.cxx:137
 AliPHOSRawFitterv4.cxx:138
 AliPHOSRawFitterv4.cxx:139
 AliPHOSRawFitterv4.cxx:140
 AliPHOSRawFitterv4.cxx:141
 AliPHOSRawFitterv4.cxx:142
 AliPHOSRawFitterv4.cxx:143
 AliPHOSRawFitterv4.cxx:144
 AliPHOSRawFitterv4.cxx:145
 AliPHOSRawFitterv4.cxx:146
 AliPHOSRawFitterv4.cxx:147
 AliPHOSRawFitterv4.cxx:148
 AliPHOSRawFitterv4.cxx:149
 AliPHOSRawFitterv4.cxx:150
 AliPHOSRawFitterv4.cxx:151
 AliPHOSRawFitterv4.cxx:152
 AliPHOSRawFitterv4.cxx:153
 AliPHOSRawFitterv4.cxx:154
 AliPHOSRawFitterv4.cxx:155
 AliPHOSRawFitterv4.cxx:156
 AliPHOSRawFitterv4.cxx:157
 AliPHOSRawFitterv4.cxx:158
 AliPHOSRawFitterv4.cxx:159
 AliPHOSRawFitterv4.cxx:160
 AliPHOSRawFitterv4.cxx:161
 AliPHOSRawFitterv4.cxx:162
 AliPHOSRawFitterv4.cxx:163
 AliPHOSRawFitterv4.cxx:164
 AliPHOSRawFitterv4.cxx:165
 AliPHOSRawFitterv4.cxx:166
 AliPHOSRawFitterv4.cxx:167
 AliPHOSRawFitterv4.cxx:168
 AliPHOSRawFitterv4.cxx:169
 AliPHOSRawFitterv4.cxx:170
 AliPHOSRawFitterv4.cxx:171
 AliPHOSRawFitterv4.cxx:172
 AliPHOSRawFitterv4.cxx:173
 AliPHOSRawFitterv4.cxx:174
 AliPHOSRawFitterv4.cxx:175
 AliPHOSRawFitterv4.cxx:176
 AliPHOSRawFitterv4.cxx:177
 AliPHOSRawFitterv4.cxx:178
 AliPHOSRawFitterv4.cxx:179
 AliPHOSRawFitterv4.cxx:180
 AliPHOSRawFitterv4.cxx:181
 AliPHOSRawFitterv4.cxx:182
 AliPHOSRawFitterv4.cxx:183
 AliPHOSRawFitterv4.cxx:184
 AliPHOSRawFitterv4.cxx:185
 AliPHOSRawFitterv4.cxx:186
 AliPHOSRawFitterv4.cxx:187
 AliPHOSRawFitterv4.cxx:188
 AliPHOSRawFitterv4.cxx:189
 AliPHOSRawFitterv4.cxx:190
 AliPHOSRawFitterv4.cxx:191
 AliPHOSRawFitterv4.cxx:192
 AliPHOSRawFitterv4.cxx:193
 AliPHOSRawFitterv4.cxx:194
 AliPHOSRawFitterv4.cxx:195
 AliPHOSRawFitterv4.cxx:196
 AliPHOSRawFitterv4.cxx:197
 AliPHOSRawFitterv4.cxx:198
 AliPHOSRawFitterv4.cxx:199
 AliPHOSRawFitterv4.cxx:200
 AliPHOSRawFitterv4.cxx:201
 AliPHOSRawFitterv4.cxx:202
 AliPHOSRawFitterv4.cxx:203
 AliPHOSRawFitterv4.cxx:204
 AliPHOSRawFitterv4.cxx:205
 AliPHOSRawFitterv4.cxx:206
 AliPHOSRawFitterv4.cxx:207
 AliPHOSRawFitterv4.cxx:208
 AliPHOSRawFitterv4.cxx:209
 AliPHOSRawFitterv4.cxx:210
 AliPHOSRawFitterv4.cxx:211
 AliPHOSRawFitterv4.cxx:212
 AliPHOSRawFitterv4.cxx:213
 AliPHOSRawFitterv4.cxx:214
 AliPHOSRawFitterv4.cxx:215
 AliPHOSRawFitterv4.cxx:216
 AliPHOSRawFitterv4.cxx:217
 AliPHOSRawFitterv4.cxx:218
 AliPHOSRawFitterv4.cxx:219
 AliPHOSRawFitterv4.cxx:220
 AliPHOSRawFitterv4.cxx:221
 AliPHOSRawFitterv4.cxx:222
 AliPHOSRawFitterv4.cxx:223
 AliPHOSRawFitterv4.cxx:224
 AliPHOSRawFitterv4.cxx:225
 AliPHOSRawFitterv4.cxx:226
 AliPHOSRawFitterv4.cxx:227
 AliPHOSRawFitterv4.cxx:228
 AliPHOSRawFitterv4.cxx:229
 AliPHOSRawFitterv4.cxx:230
 AliPHOSRawFitterv4.cxx:231
 AliPHOSRawFitterv4.cxx:232
 AliPHOSRawFitterv4.cxx:233
 AliPHOSRawFitterv4.cxx:234
 AliPHOSRawFitterv4.cxx:235
 AliPHOSRawFitterv4.cxx:236
 AliPHOSRawFitterv4.cxx:237
 AliPHOSRawFitterv4.cxx:238
 AliPHOSRawFitterv4.cxx:239
 AliPHOSRawFitterv4.cxx:240
 AliPHOSRawFitterv4.cxx:241
 AliPHOSRawFitterv4.cxx:242
 AliPHOSRawFitterv4.cxx:243
 AliPHOSRawFitterv4.cxx:244
 AliPHOSRawFitterv4.cxx:245
 AliPHOSRawFitterv4.cxx:246
 AliPHOSRawFitterv4.cxx:247
 AliPHOSRawFitterv4.cxx:248
 AliPHOSRawFitterv4.cxx:249
 AliPHOSRawFitterv4.cxx:250
 AliPHOSRawFitterv4.cxx:251
 AliPHOSRawFitterv4.cxx:252
 AliPHOSRawFitterv4.cxx:253
 AliPHOSRawFitterv4.cxx:254
 AliPHOSRawFitterv4.cxx:255
 AliPHOSRawFitterv4.cxx:256
 AliPHOSRawFitterv4.cxx:257
 AliPHOSRawFitterv4.cxx:258
 AliPHOSRawFitterv4.cxx:259
 AliPHOSRawFitterv4.cxx:260
 AliPHOSRawFitterv4.cxx:261
 AliPHOSRawFitterv4.cxx:262
 AliPHOSRawFitterv4.cxx:263
 AliPHOSRawFitterv4.cxx:264
 AliPHOSRawFitterv4.cxx:265
 AliPHOSRawFitterv4.cxx:266
 AliPHOSRawFitterv4.cxx:267
 AliPHOSRawFitterv4.cxx:268
 AliPHOSRawFitterv4.cxx:269
 AliPHOSRawFitterv4.cxx:270
 AliPHOSRawFitterv4.cxx:271
 AliPHOSRawFitterv4.cxx:272
 AliPHOSRawFitterv4.cxx:273
 AliPHOSRawFitterv4.cxx:274
 AliPHOSRawFitterv4.cxx:275
 AliPHOSRawFitterv4.cxx:276
 AliPHOSRawFitterv4.cxx:277
 AliPHOSRawFitterv4.cxx:278
 AliPHOSRawFitterv4.cxx:279
 AliPHOSRawFitterv4.cxx:280
 AliPHOSRawFitterv4.cxx:281
 AliPHOSRawFitterv4.cxx:282
 AliPHOSRawFitterv4.cxx:283
 AliPHOSRawFitterv4.cxx:284
 AliPHOSRawFitterv4.cxx:285
 AliPHOSRawFitterv4.cxx:286
 AliPHOSRawFitterv4.cxx:287
 AliPHOSRawFitterv4.cxx:288
 AliPHOSRawFitterv4.cxx:289
 AliPHOSRawFitterv4.cxx:290
 AliPHOSRawFitterv4.cxx:291
 AliPHOSRawFitterv4.cxx:292
 AliPHOSRawFitterv4.cxx:293
 AliPHOSRawFitterv4.cxx:294
 AliPHOSRawFitterv4.cxx:295
 AliPHOSRawFitterv4.cxx:296
 AliPHOSRawFitterv4.cxx:297
 AliPHOSRawFitterv4.cxx:298
 AliPHOSRawFitterv4.cxx:299
 AliPHOSRawFitterv4.cxx:300
 AliPHOSRawFitterv4.cxx:301
 AliPHOSRawFitterv4.cxx:302
 AliPHOSRawFitterv4.cxx:303
 AliPHOSRawFitterv4.cxx:304
 AliPHOSRawFitterv4.cxx:305
 AliPHOSRawFitterv4.cxx:306
 AliPHOSRawFitterv4.cxx:307
 AliPHOSRawFitterv4.cxx:308
 AliPHOSRawFitterv4.cxx:309
 AliPHOSRawFitterv4.cxx:310
 AliPHOSRawFitterv4.cxx:311
 AliPHOSRawFitterv4.cxx:312
 AliPHOSRawFitterv4.cxx:313
 AliPHOSRawFitterv4.cxx:314
 AliPHOSRawFitterv4.cxx:315
 AliPHOSRawFitterv4.cxx:316
 AliPHOSRawFitterv4.cxx:317
 AliPHOSRawFitterv4.cxx:318
 AliPHOSRawFitterv4.cxx:319
 AliPHOSRawFitterv4.cxx:320
 AliPHOSRawFitterv4.cxx:321
 AliPHOSRawFitterv4.cxx:322
 AliPHOSRawFitterv4.cxx:323
 AliPHOSRawFitterv4.cxx:324
 AliPHOSRawFitterv4.cxx:325
 AliPHOSRawFitterv4.cxx:326
 AliPHOSRawFitterv4.cxx:327
 AliPHOSRawFitterv4.cxx:328
 AliPHOSRawFitterv4.cxx:329
 AliPHOSRawFitterv4.cxx:330
 AliPHOSRawFitterv4.cxx:331
 AliPHOSRawFitterv4.cxx:332
 AliPHOSRawFitterv4.cxx:333
 AliPHOSRawFitterv4.cxx:334
 AliPHOSRawFitterv4.cxx:335
 AliPHOSRawFitterv4.cxx:336
 AliPHOSRawFitterv4.cxx:337
 AliPHOSRawFitterv4.cxx:338
 AliPHOSRawFitterv4.cxx:339
 AliPHOSRawFitterv4.cxx:340
 AliPHOSRawFitterv4.cxx:341
 AliPHOSRawFitterv4.cxx:342
 AliPHOSRawFitterv4.cxx:343
 AliPHOSRawFitterv4.cxx:344
 AliPHOSRawFitterv4.cxx:345
 AliPHOSRawFitterv4.cxx:346
 AliPHOSRawFitterv4.cxx:347
 AliPHOSRawFitterv4.cxx:348
 AliPHOSRawFitterv4.cxx:349
 AliPHOSRawFitterv4.cxx:350
 AliPHOSRawFitterv4.cxx:351
 AliPHOSRawFitterv4.cxx:352
 AliPHOSRawFitterv4.cxx:353
 AliPHOSRawFitterv4.cxx:354
 AliPHOSRawFitterv4.cxx:355
 AliPHOSRawFitterv4.cxx:356
 AliPHOSRawFitterv4.cxx:357
 AliPHOSRawFitterv4.cxx:358
 AliPHOSRawFitterv4.cxx:359
 AliPHOSRawFitterv4.cxx:360
 AliPHOSRawFitterv4.cxx:361
 AliPHOSRawFitterv4.cxx:362
 AliPHOSRawFitterv4.cxx:363
 AliPHOSRawFitterv4.cxx:364
 AliPHOSRawFitterv4.cxx:365
 AliPHOSRawFitterv4.cxx:366
 AliPHOSRawFitterv4.cxx:367
 AliPHOSRawFitterv4.cxx:368
 AliPHOSRawFitterv4.cxx:369
 AliPHOSRawFitterv4.cxx:370
 AliPHOSRawFitterv4.cxx:371
 AliPHOSRawFitterv4.cxx:372
 AliPHOSRawFitterv4.cxx:373
 AliPHOSRawFitterv4.cxx:374
 AliPHOSRawFitterv4.cxx:375
 AliPHOSRawFitterv4.cxx:376
 AliPHOSRawFitterv4.cxx:377
 AliPHOSRawFitterv4.cxx:378
 AliPHOSRawFitterv4.cxx:379
 AliPHOSRawFitterv4.cxx:380
 AliPHOSRawFitterv4.cxx:381
 AliPHOSRawFitterv4.cxx:382
 AliPHOSRawFitterv4.cxx:383
 AliPHOSRawFitterv4.cxx:384
 AliPHOSRawFitterv4.cxx:385
 AliPHOSRawFitterv4.cxx:386
 AliPHOSRawFitterv4.cxx:387
 AliPHOSRawFitterv4.cxx:388
 AliPHOSRawFitterv4.cxx:389
 AliPHOSRawFitterv4.cxx:390
 AliPHOSRawFitterv4.cxx:391
 AliPHOSRawFitterv4.cxx:392
 AliPHOSRawFitterv4.cxx:393
 AliPHOSRawFitterv4.cxx:394
 AliPHOSRawFitterv4.cxx:395
 AliPHOSRawFitterv4.cxx:396
 AliPHOSRawFitterv4.cxx:397
 AliPHOSRawFitterv4.cxx:398
 AliPHOSRawFitterv4.cxx:399
 AliPHOSRawFitterv4.cxx:400
 AliPHOSRawFitterv4.cxx:401
 AliPHOSRawFitterv4.cxx:402
 AliPHOSRawFitterv4.cxx:403
 AliPHOSRawFitterv4.cxx:404
 AliPHOSRawFitterv4.cxx:405
 AliPHOSRawFitterv4.cxx:406
 AliPHOSRawFitterv4.cxx:407
 AliPHOSRawFitterv4.cxx:408
 AliPHOSRawFitterv4.cxx:409
 AliPHOSRawFitterv4.cxx:410
 AliPHOSRawFitterv4.cxx:411
 AliPHOSRawFitterv4.cxx:412
 AliPHOSRawFitterv4.cxx:413
 AliPHOSRawFitterv4.cxx:414
 AliPHOSRawFitterv4.cxx:415
 AliPHOSRawFitterv4.cxx:416
 AliPHOSRawFitterv4.cxx:417
 AliPHOSRawFitterv4.cxx:418
 AliPHOSRawFitterv4.cxx:419
 AliPHOSRawFitterv4.cxx:420
 AliPHOSRawFitterv4.cxx:421
 AliPHOSRawFitterv4.cxx:422
 AliPHOSRawFitterv4.cxx:423
 AliPHOSRawFitterv4.cxx:424
 AliPHOSRawFitterv4.cxx:425
 AliPHOSRawFitterv4.cxx:426
 AliPHOSRawFitterv4.cxx:427
 AliPHOSRawFitterv4.cxx:428
 AliPHOSRawFitterv4.cxx:429
 AliPHOSRawFitterv4.cxx:430
 AliPHOSRawFitterv4.cxx:431
 AliPHOSRawFitterv4.cxx:432
 AliPHOSRawFitterv4.cxx:433
 AliPHOSRawFitterv4.cxx:434
 AliPHOSRawFitterv4.cxx:435
 AliPHOSRawFitterv4.cxx:436
 AliPHOSRawFitterv4.cxx:437
 AliPHOSRawFitterv4.cxx:438
 AliPHOSRawFitterv4.cxx:439
 AliPHOSRawFitterv4.cxx:440
 AliPHOSRawFitterv4.cxx:441
 AliPHOSRawFitterv4.cxx:442
 AliPHOSRawFitterv4.cxx:443
 AliPHOSRawFitterv4.cxx:444
 AliPHOSRawFitterv4.cxx:445