ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2010 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.                  *
 **************************************************************************/

/* $Id$ */

/* History of cvs commits:
 * $Log$
 */

//______________________________________________________ 
// Author : Aleksei Pavlinov; IHEP, Protvino, Russia
// Feb 17, 2009
// Implementation of fit procedure from ALICE-INT-2008-026:
// "Time and amplitude reconstruction from sampling 
//  measurements of the PHOS signal profile"
//  M.Yu.Bogolyubsky and ..
//
//  Fit by function en*x*x*exp(-2.*x): x = (t-t0)/tau.
//  The main goal is fast estimation of amplitude and t0.
//

// --- AliRoot header files ---
#include "AliCaloFastAltroFitv0.h"

#include <TH1.h>
#include <TF1.h>
#include <TCanvas.h>
#include <TGraphErrors.h>
#include <TMath.h>

#include <math.h>

ClassImp(AliCaloFastAltroFitv0)

//____________________________________________________________________________
  AliCaloFastAltroFitv0::AliCaloFastAltroFitv0() 
: TNamed(), 
  fSig(0),fTau(0),fN(0),fPed(0), fAmp(0),fAmpErr(0),fT0(0),fT0Err(0),fChi2(0.),fNDF(0)
,fNoFit(0),fNfit(0),fTfit(0),fAmpfit(0), fStdFun(0)
{
}

//____________________________________________________________________________
AliCaloFastAltroFitv0::AliCaloFastAltroFitv0(const char* name, const char* title, 
  const Double_t sig, const Double_t tau, const Double_t n)
  : TNamed(name, title), 
  fSig(sig),fTau(tau),fN(n),fPed(0), fAmp(0),fAmpErr(0),fT0(0),fT0Err(0),fChi2(0.),fNDF(0) 
 ,fNoFit(0),fNfit(0),fTfit(0),fAmpfit(0), fStdFun(0)
{
  if(strlen(name)==0) SetName("CaloFastAltroFitv0");
}

//____________________________________________________________________________
AliCaloFastAltroFitv0::AliCaloFastAltroFitv0(const AliCaloFastAltroFitv0 &obj)
  : TNamed(obj), 
  fSig(0),fTau(0),fN(2.),fPed(0), fAmp(0),fAmpErr(0),fT0(0),fT0Err(0),fChi2(0.),fNDF(0) 
 ,fNoFit(0),fNfit(0),fTfit(0),fAmpfit(0), fStdFun(0)
{
}

//____________________________________________________________________________
AliCaloFastAltroFitv0::~AliCaloFastAltroFitv0() 
{  
  if(fTfit) delete [] fTfit;
  if(fAmpfit) delete [] fAmpfit;
}

//____________________________________________________________________________
AliCaloFastAltroFitv0& AliCaloFastAltroFitv0::operator= (const AliCaloFastAltroFitv0 &/*obj*/)
{
  // Not implemented yet
  return (*this);
}

void AliCaloFastAltroFitv0::FastFit(Int_t* t, Int_t* y, Int_t nPoints, Double_t sig, Double_t tau, 
				    Double_t /*n*/, Double_t ped, Double_t tMax)
{
  Reset();

  fSig = sig;
  fTau = tau;
  fPed = ped;

  Int_t ii=0;
  CutRightPart(t,y,nPoints,tMax, ii);
  nPoints = ii;

  fNfit   = 0;
  fTfit   = new Double_t[nPoints]; 
  fAmpfit = new Double_t[nPoints]; 

  
  DeductPedestal(t,y,nPoints,  tau,ped,  fTfit,fAmpfit,fNfit);
  //  printf(" n %i : fNfit %i : ped %f \n", n, fNfit, ped);
  // for(int i=0; i<fNfit; i++) 
  // printf(" i %i : fAmpfit %7.2f : fTfit %7.2f \n", i, fAmpfit[i], fTfit[i]); 

  if(fNfit>=2) {
    FastFit(fTfit,fAmpfit,fNfit,sig,tau, fAmp,fAmpErr, fT0,fT0Err,fChi2);

    if(fChi2> 0.0) {
      fNDF = fNfit - 2;
    } else {
      fNDF = 0;
      fNoFit++;
    }
  } else if(fNfit==1){
    Reset(); // What to do here => fT0 = fTfit[0]; fAmp = fAmpFit[0] ??
  } else {
    Reset();
  }
}

//____________________________________________________________________________
void AliCaloFastAltroFitv0::FastFit(TH1F* h, Double_t sig, Double_t tau, Double_t n,
Double_t ped, Double_t tMax)
{
  // Service method for convinience only
  // h - hist with altro response, could have empty bin
  // and center of bin could be different from bin number  
  Reset();

  if(h==0) return;
  Int_t nPoints = h->GetNbinsX();
  if(nPoints<2) return; // Sep 07, 09

  Int_t* t = new Int_t[nPoints];
  Int_t* y = new Int_t[nPoints];

  Int_t nPositive=0;
  for(Int_t i=0; i<nPoints; i++) {
    if(h->GetBinContent(i+1) > 0.0){ // Get only positive
      y[nPositive] = Int_t(h->GetBinContent(i+1));
      t[nPositive] = Int_t(h->GetBinCenter(i+1)+0.0001);
      nPositive++;
    }
  }

  if(nPositive >= 2) {
    FastFit(t,y,nPoints, sig,tau,n,ped, tMax);
  }
  if(fChi2<=0.0) fNoFit++;

  delete [] t;
  delete [] y;
}

void AliCaloFastAltroFitv0::Reset()
{
  // Reset variables
  fSig  = fTau = 0.0;
  fAmp  = fAmpErr = fT0 = fT0Err = 0.0;
  fChi2 = -1.;
  fNDF  = fNfit = 0;

  if(fTfit)   delete [] fTfit;
  if(fAmpfit) delete [] fAmpfit;
  fTfit = fAmpfit = 0;
}


void AliCaloFastAltroFitv0::GetFitResult(Double_t &amp,Double_t &eamp,Double_t &t0,Double_t &et0, 
Double_t &chi2, Int_t &ndf) const
{
  // Return results of fitting procedure
  amp  = fAmp;
  eamp = fAmpErr;
  t0   = fT0;
  et0  = fT0Err;
  chi2 = fChi2;
  ndf  = fNDF;
}

void AliCaloFastAltroFitv0::GetFittedPoints(Int_t &nfit, Double_t* ar[2]) const
{
  nfit  = fNfit;
  ar[0] = fTfit;
  ar[1] = fAmpfit;
}
//
// static functions
// 
void  AliCaloFastAltroFitv0::CutRightPart(Int_t *t,Int_t *y,Int_t nPoints,Double_t tMax, Int_t &ii)
{
  // Cut right part of altro sample : static function
  Int_t tt=0;
  for(Int_t i=0; i<nPoints; i++) {
    tt = t[i];
    if(tMax && tt <= Int_t(tMax)) {
      t[ii] = tt;
      y[ii] = y[i];
      ii++;
    }
  }
  if(0) printf(" ii %i -> ii %i : tMax %7.2f \n", nPoints, ii, tMax);
}

void AliCaloFastAltroFitv0::DeductPedestal(Int_t* t, Int_t* y, Int_t nPoints, Double_t tau, Double_t ped, 
  Double_t* tn, Double_t* yn, Int_t &nPointsOut)
{
  // Pedestal deduction if ped is positive : static function
  // Discard part od samle if it is not compact.
  static Double_t yMinUnderPed=2.; // should be tune
  Int_t ymax=0, nmax=0;
  for(Int_t i=0; i<nPoints; i++){
    if(y[i]>ymax) {
      ymax = y[i];
      nmax = i;
    }
  }
  Int_t i1 = nmax - Int_t(tau);
  //i1 = 0;
  i1 = i1<0?0:i1;
  Int_t i2 = nPoints;

  nPointsOut = 0;
  Double_t yd=0.0, tdiff=0.0;;
  for(Int_t i=i1; i<i2; i++) {
    if(ped>0.0) {
      yd = Double_t(y[i]) - ped;
    } else {
      yd = Double_t(y[i]);
    }
    if(yd < yMinUnderPed) continue;

    if(i>i1 && nPointsOut>0){
      tdiff = t[i] - tn[nPointsOut-1];
      //      printf(" i %i : nPointsOut %i : tdiff %6.2f : tn[nPointsOut] %6.2f \n", i,nPointsOut, tdiff, tn[nPointsOut-1]);
      if(tdiff>1.) {
     // discard previous points if its are before maximum point and with gap>1
        if(i<nmax ) {
          nPointsOut = 0; // nPointsOut--;
     // if point with gap after maximum - finish selection
        } else if(i>=nmax ) {
          break;
        }
      }
     // Far away from maximum
     //if(i-nmax > Int_t(5*tau))              break;
    }
    tn[nPointsOut] = Double_t(t[i]);
    yn[nPointsOut] = yd;
    //printf("i %i : nPointsOut %i : tn %6.2f : yn %6.2f \n", i, nPointsOut, tn[nPointsOut], yn[nPointsOut]); 
    nPointsOut++;
  }
  //printf(" nmax %i : nPointsIn %i :nPointsOut %i i1 %i \n", nmax, nPointsIn, nPointsOut, i1);
}

void AliCaloFastAltroFitv0::FastFit(const Double_t* t, const Double_t* y, const Int_t nPoints, 
                                    const Double_t sig, const Double_t tau,
                                    Double_t &amp, Double_t &eamp, Double_t &t0, Double_t &et0, Double_t &chi2)
{
  // Static function
  // It is case of n=k=2 : fnn = x*x*exp(2 - 2*x)
  // Input: 
  //nPoints  - number of points 
  //   t[]   - array of time bins
  //   y[]   - array of amplitudes after pedestal subtractions;
  //   sig   - error of amplitude measurement (one value for all channels)
  //   tau   - filter time response (in timebin units)
  // Output:
  //       amp - amplitude at t0;
  //      eamp - error of amplitude; 
  //        t0 - time of max amplitude; 
  //       et0 - error of t0;
  //      chi2 - chi2
  static Double_t xx; // t/tau
  static Double_t a, b, c;
  static Double_t f02, f12, f22;    // functions
  static Double_t f02d, f12d, f22d; // functions derivations

  chi2 = -1.;

  if(nPoints<2) {
    printf(" AliCaloFastAltroFitv0::FastFit : nPoints<=%i \n", nPoints); 
    return;
  }

  a = b = c = 0.0;
  for(Int_t i=0; i<nPoints; i++){
    xx  = t[i]/tau;
    f02 = exp(-2.*xx);
    f12 = xx*f02;
    f22 = xx*f12;
    // Derivations
    f02d = -2.*f02;
    f12d = f02 - 2.*f12;
    f22d = 2.*(f12 - f22); 
    //
    a += f02d * y[i];
    b -= 2.*f12d * y[i];
    c += f22d * y[i];
  }
  Double_t t01=0.0, t02=0.0;
  Double_t amp1=0.0, amp2=0.0, chi21=0.0, chi22=0.0;
  if(QuadraticRoots(a,b,c, t01,t02)) {
    t01 *= tau;
    t02 *= tau;
    Amplitude(t,y,nPoints, sig, tau, t01, amp1, chi21);
    Amplitude(t,y,nPoints, sig, tau, t02, amp2, chi22);
    if(0) {
      printf(" t01 %f : t02 %f \n", t01, t02);
      printf(" amp1 %f : amp2 %f \n", amp1, amp2);
      printf(" chi21 %f : chi22 %f \n", chi21, chi22);
    }
    // t0 less on one tau with comparing with value from  "canonical equation"
    amp  = amp1;
    t0   = t01;
    chi2 = chi21; 
    if(chi21 > chi22) {
      amp  = amp2;
      t0   = t02; 
      chi2 = chi22; 
    }
    if(tau<3.) { // EMCAL case : small tau 
      t0 += -0.03; // Discard bias in t0
      Amplitude(t,y,nPoints, sig, tau, t0, amp, chi2);
    }
    CalculateParsErrors(t, y, nPoints, sig, tau, amp, t0, eamp, et0);

    // Fill1();
    
    // DrawFastFunction(amp, t0, fUtils->GetPedestalValue(), "1");
    //    DrawFastFunction(amp1, t01, fUtils->GetPedestalValue(), "1");
    // DrawFastFunction(amp2, t02, fUtils->GetPedestalValue(), "2");
  } else {
    chi2 = t01; // no roots, bad fit - negative chi2
  }
}

Bool_t AliCaloFastAltroFitv0::QuadraticRoots(const Double_t a, const Double_t b, const Double_t c, 
                                             Double_t &x1, Double_t &x2)
{
  // Resolve quadratic equations a*x**2 + b*x + c
  //printf(" a %12.5e b %12.5e c %12.5e \n", a, b, c);
  static Double_t dtmp = 0.0, dtmpCut = -1.e-6;
  static Int_t iWarning=0, iNoSolution=0;
  dtmp = b*b - 4.*a*c;

  if(dtmp>=dtmpCut && dtmp<0.0) {
    if(iWarning<5 || iWarning%1000==0)
      printf("<W> %i small neg. sq. : dtmp %12.5e \n", iWarning, dtmp);
    iWarning++;
    dtmp = 0.0;
  }
  if(dtmp>=0.0) {
    dtmp = sqrt(dtmp);
    x1   = (-b + dtmp) / (2.*a);
    x2   = (-b - dtmp) / (2.*a);

    //    printf(" x1 %f : x2 %f \n", x1, x2);
    return kTRUE;
  } else {
    x1 = dtmp;
    if(iNoSolution<5 || iNoSolution%1000==0)
      printf("<No solution> %i neg. sq. : dtmp %12.5e \n", iNoSolution, dtmp);
    iNoSolution++;
    return kFALSE;
  }
}

void AliCaloFastAltroFitv0::Amplitude(const Double_t* t,const Double_t* y,const Int_t nPoints, 
                                      const Double_t sig, const Double_t tau, const Double_t t0, 
                                      Double_t &amp, Double_t &chi2)
{  
  // Calculate parameters error too - Mar 24,09
  // sig is independent from points
  amp = 0.;
  Double_t x=0.0, f=0.0, den=0.0, f02;
  for(Int_t i=0; i<nPoints; i++){
    x    = (t[i] - t0)/tau;
    f02  = exp(-2.*x);
    f    = x*x*f02;     
    amp += f*y[i];
    den += f*f;
  }
  if(den>0.0) amp /= den;
  //
  // chi2 calculation
  //
  Double_t dy=0.0;
  chi2=0.;
  for(Int_t i=0; i<nPoints; i++){
    x    = (t[i] - t0)/tau;
    f02  = exp(-2.*x);
    f    = amp*x*x*f02;
    dy   = y[i]-f;
    chi2 += dy*dy;
    //    printf(" %i : y %f -> f %f : dy %f \n", i, y[i], f, dy); 
  }
  chi2 /= (sig*sig);
}

void AliCaloFastAltroFitv0::CalculateParsErrors(const Double_t* t, const Double_t* /*y*/, const Int_t nPoints, 
                                                const Double_t sig, const Double_t tau, 
                                                Double_t &amp, Double_t &t0, Double_t &eamp, Double_t &et0)
{
  // Remember that fmax = exp(-n);
  // fmax_nk = (n/k)**n*exp(-n) => n=k=2 => exp(-n) = exp(-2.)
  static Double_t cc = exp(-2.);
  //   static Double_t cc = exp(-fN); // mean(N)~1.5 ??

  Double_t sumf2=0.0, sumfd2=0.0, x, f02, f12, f22, f22d;

  for(Int_t i=0; i<nPoints; i++){
    x    = (t[i] - t0)/tau;
    f02  = exp(-2.*x);
    f12  = x*f02;
    f22  = x*f12;
    sumf2 += f22 * f22;
    //
    f22d = 2.*(f12 - f22); 
    sumfd2 += f22d * f22d;
  }
  et0  = (sig/amp)/sqrt(sumfd2);
  eamp = sig/sqrt(sumf2);

  amp  *= cc;
  eamp *= cc;
}

//
// Drawing
//
TCanvas* AliCaloFastAltroFitv0::DrawFastFunction()
{
  // QA of fitting
  if(fNfit<=0) return 0; // no points

  static TCanvas *c = 0;
  if(c==0) {
    c =  new TCanvas("fastFun","fastFun",800,600);
  }

  c->cd();
  
  Double_t* eamp = new Double_t[fNfit];
  Double_t* et   = new Double_t[fNfit];

  for(Int_t i=0; i<fNfit; i++) {
    eamp[i] = fSig;
    et[i]   = 0.0;
  }

  TGraphErrors *gr = new TGraphErrors(fNfit, fTfit,fAmpfit, et,eamp);
  gr->Draw("Ap");
  gr->SetTitle(Form("Fast Fit : #chi^{2}/ndf = %8.2f / %i", GetChi2(), GetNDF()));
  gr->GetHistogram()->SetXTitle(" time bin ");
  gr->GetHistogram()->SetYTitle(" amplitude ");

  if(fStdFun==0) {
     fStdFun = new TF1("stdFun", StdResponseFunction, 0., fTfit[fNfit-1]+2., 5);    
     fStdFun->SetParNames("amp","t0","tau","N","ped");
  }
  fStdFun->SetParameter(0, GetEnergy());
  fStdFun->SetParameter(1, GetTime() + GetTau());
  fStdFun->SetParameter(2, GetTau());  // 
  fStdFun->SetParameter(3, GetN());    // 2
  fStdFun->SetParameter(4, 0.);  // 
  
  fStdFun->SetLineColor(kBlue);
  fStdFun->SetLineWidth(1);

  fStdFun->Draw("same");

  delete [] eamp;
  delete [] et;

  c->Update();

  return c;
}

Double_t AliCaloFastAltroFitv0::StdResponseFunction(const Double_t *x, const Double_t *par)
{
  // Static Standard Response Function : 
  // look to Double_t AliEMCALRawUtils::RawResponseFunction(Double_t *x, Double_t *par)
  // Using for drawing only.
  // 
  // Shape of the electronics raw reponse:
  // It is a semi-gaussian, 2nd order Gamma function (n=2) of the general form
  //
  // t' = (t - t0 + tau) / tau
  // F = A * t**N * exp( N * ( 1 - t) )   for t >= 0
  // F = 0                                for t < 0 
  //
  // parameters:
  // A:   par[0]   // Amplitude = peak value
  // t0:  par[1]
  // tau: par[2]
  // N:   par[3]
  // ped: par[4]
  //
  static Double_t signal , tau, n, ped, xx;

  tau = par[2];
  n   = par[3];
  ped = par[4];
  xx = ( x[0] - par[1] + tau ) / tau ;

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