#include "AliIntSpotEstimator.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliESDVertex.h"
#include "AliVertexerTracks.h"
#include "AliLog.h"
#include <TH1.h>
#include <TH1F.h>
#include <TNtuple.h>
#include <TObjArray.h>
#include <TCanvas.h>
#include <TPaveText.h>
#include <TStyle.h>
ClassImp(AliIntSpotEstimator)
AliIntSpotEstimator::AliIntSpotEstimator(const char* name,Double_t outcut,Int_t ntrIP,
Int_t nPhiBins,Int_t nestb,
Double_t estmin,Double_t estmax,
Int_t ntrBins,Int_t ntMn,Int_t ntMx,
Int_t nPBins,Double_t pmn,Double_t pmx,Bool_t ntuple)
: TNamed(name,""),
fEvProc(0),fIPCenterStat(0),fMinTracksForIP(ntrIP>2?ntrIP:2),fOutlierCut(outcut),
fIPCenIni(),
fIPCenter(),
fIPCen2(),
fEstimIP(0),
fEstimVtx(0),fEstimTrc(0),fHVtxXY(0),fNtuple(0),fVertexer(0),fTracks(0)
{
InitEstimators(nPhiBins,nestb,estmin,estmax,ntrBins,ntMn,ntMx,nPBins,pmn,pmx,ntuple);
}
AliIntSpotEstimator::AliIntSpotEstimator(Bool_t initDef)
: TNamed("IPEstimator",""),
fEvProc(0),fIPCenterStat(0),fMinTracksForIP(2),fOutlierCut(1e-4),
fIPCenIni(),
fIPCenter(),
fIPCen2(),
fEstimIP(0),fEstimVtx(0),fEstimTrc(0),fHVtxXY(0),fNtuple(0),fVertexer(0),fTracks(0)
{
if (initDef) InitEstimators();
}
AliIntSpotEstimator::~AliIntSpotEstimator()
{
delete fEstimIP;
delete fEstimVtx;
delete fEstimTrc;
delete fVertexer;
delete fNtuple;
}
Bool_t AliIntSpotEstimator::ProcessIPCenter(const AliESDVertex* vtx)
{
if (!vtx) return kFALSE;
double xyz[3];
vtx->GetXYZ(xyz);
double r = xyz[0]*xyz[0] + xyz[1]*xyz[1];
if (r>2.) return kFALSE;
for (int i=3;i--;) {
fIPCenter[i] += xyz[i];
fIPCen2[i] += xyz[i]*xyz[i];
}
fIPCenterStat++;
fHVtxXY->Fill(xyz[0],xyz[1]);
return kTRUE;
}
Bool_t AliIntSpotEstimator::ProcessEvent(const AliESDEvent* esd, const AliESDVertex* vtx)
{
if (!IsValid()) {AliError("Not initialized yet"); return -999;}
if (!fTracks) fTracks = new TObjArray(50);
if (!fVertexer) fVertexer = new AliVertexerTracks();
fEvProc++;
int nTracks;
if (!vtx) vtx = (AliESDVertex*) esd->GetPrimaryVertex();
if (!vtx || (nTracks=vtx->GetNIndices())<GetMinTracks()+1) return kFALSE;
UShort_t *trackID = (UShort_t*)vtx->GetIndices();
for (int itr=0;itr<nTracks;itr++) fTracks->Add(esd->GetTrack(trackID[itr]));
fVertexer->SetFieldkG( esd->GetMagneticField() );
return ProcessTracks();
}
Bool_t AliIntSpotEstimator::ProcessEvent(const TObjArray* tracks)
{
if (!IsValid()) {AliError("Not initialized yet"); return -999;}
if (!fVertexer) fVertexer = new AliVertexerTracks();
fEvProc++;
int nTracks = tracks->GetEntriesFast();
if ( nTracks<GetMinTracks()+1 ) return kFALSE;
for (int itr=0;itr<nTracks;itr++) fTracks->Add(tracks->At(itr));
return ProcessTracks();
}
Bool_t AliIntSpotEstimator::ProcessTracks()
{
int nTracks = fTracks->GetEntriesFast();
UShort_t *trackID = new UShort_t[nTracks];
for (int i=nTracks;i--;) trackID[i] = i;
double xyzDCA[3],ddca[2],covdca[3];
int nTracks1 = nTracks - 1;
AliExternalTrackParam *selTrack,*movTrack=0;
UShort_t selTrackID,movTrackID=0;
AliESDVertex* recNewVtx = fVertexer->VertexForSelectedTracks(fTracks,trackID,kTRUE,kFALSE,kFALSE);
if (!recNewVtx || ((nTracks=recNewVtx->GetNIndices())<GetMinTracks())) {
if (recNewVtx) delete recNewVtx;
fTracks->Clear();
delete[] trackID;
return kFALSE;
}
if (nTracks>=fMinTracksForIP) ProcessIPCenter(recNewVtx);
double pmn = GetTrackMinP();
double pmx = GetTrackMaxP();
double fieldVal = fVertexer->GetFieldkG();
for (int itr=0;itr<nTracks;itr++) {
selTrack = (AliExternalTrackParam*) (*fTracks)[itr];
double pTrack = selTrack->GetP();
if (!IsZero(fieldVal) && (pTrack<pmn || pTrack>pmx)) continue;
selTrackID = trackID[itr];
if (itr<nTracks1) {
movTrack = (AliExternalTrackParam*) (*fTracks)[nTracks1];
movTrackID = trackID[nTracks1];
(*fTracks)[itr] = movTrack;
trackID[itr] = movTrackID;
}
fTracks->RemoveAt(nTracks1);
recNewVtx = fVertexer->VertexForSelectedTracks(fTracks,trackID,kTRUE,kFALSE,kFALSE);
if (recNewVtx) {
double told = selTrack->GetX();
selTrack->PropagateToDCA(recNewVtx,fieldVal,1e4,ddca,covdca);
selTrack->GetXYZ(xyzDCA);
double phiTrack = selTrack->Phi();
double cs = TMath::Cos(phiTrack);
double sn = TMath::Sin(phiTrack);
double trDCA = (xyzDCA[0]-fIPCenIni[0]) *sn - (xyzDCA[1]-fIPCenIni[1]) *cs;
double vtDCA = (recNewVtx->GetX()-fIPCenIni[0])*sn - (recNewVtx->GetY()-fIPCenIni[1])*cs;
UpdateEstimators(vtDCA,trDCA, nTracks1, pTrack, phiTrack);
selTrack->PropagateTo(told,fieldVal);
if (fNtuple) {
static float ntf[8];
ntf[0] = float(nTracks1);
ntf[1] = recNewVtx->GetX();
ntf[2] = recNewVtx->GetY();
ntf[3] = recNewVtx->GetZ();
ntf[4] = xyzDCA[0];
ntf[5] = xyzDCA[1];
ntf[6] = phiTrack;
ntf[7] = pTrack;
fNtuple->Fill(ntf);
}
}
delete recNewVtx;
(*fTracks)[itr] = selTrack;
trackID[itr] = selTrackID;
if (itr<nTracks1) {
(*fTracks)[nTracks1] = movTrack;
trackID[nTracks1] = movTrackID;
}
}
fTracks->Clear();
delete[] trackID;
return kTRUE;
}
void AliIntSpotEstimator::UpdateEstimators(double rvD, double rtD, double nTracks, double pTrack, double phiTrack)
{
double estIP = rvD*rtD;
double estVtx = rvD*(rvD - rtD);
double estTrc = rtD*(rtD - rvD);
if (nTracks >= fMinTracksForIP) fEstimIP->Fill(phiTrack, estIP);
fEstimVtx->Fill(nTracks, estVtx);
if (pTrack<1e-6) pTrack = GetTrackMinP()+1e6;
fEstimTrc->Fill(1./pTrack,estTrc);
}
void AliIntSpotEstimator::InitEstimators(Int_t nPhiBins,Int_t nestb,Double_t estmin,Double_t estmax,
Int_t ntrBins,Int_t ntMn,Int_t ntMx,
Int_t nPBins,Double_t pmn,Double_t pmx,Bool_t ntuple)
{
Clear();
nPBins = nPBins<1 ? 1: nPBins;
pmn = pmn>0.1 ? pmn : 0.1;
pmx = pmx>pmn ? pmx : pmn+0.1;
ntMn = ntMn>2 ? ntMn : 2;
ntMx = ntMx>ntMn ? ntMx : ntMn;
ntrBins = ntrBins<1 ? 1:ntrBins;
int step = (ntMx-ntMn)/ntrBins;
if (step<1) step = 1;
ntrBins = (ntMx-ntMn)/step;
nPhiBins = nPhiBins>1 ? nPhiBins : 1;
nestb = nestb>300 ? nestb:300;
estmin = estmin<-2.e-2 ? estmin : -2.e-2;
estmax = estmax> 4.e-2 ? estmax : 4.e-2;
TString nm;
nm = GetName();
nm += "diamondEst";
fEstimIP = new TH2F(nm.Data(),nm.Data(),nPhiBins,0.,2.*TMath::Pi(),nestb,estmin,estmax);
nm = GetName();
nm += "VResEst";
fEstimVtx = new TH2F(nm.Data(),nm.Data(),ntrBins,ntMn,ntMx, nestb,estmin,estmax);
nm = GetName();
nm += "dcaEst";
fEstimTrc = new TH2F(nm.Data(),nm.Data(),nPBins,1./pmx,1./pmn, nestb,estmin,estmax);
nm = GetName();
nm += "VtxXY";
fHVtxXY = new TH2F(nm.Data(),nm.Data(),200, -1,1, 200,-1,1);
if (ntuple) {
nm = GetName();
nm += "ntuple";
fNtuple = new TNtuple(nm.Data(),nm.Data(),"ntrack:xv:yv:zv:xt:yt:phi:p");
}
fVertexer = new AliVertexerTracks();
fVertexer->SetConstraintOff();
fTracks = new TObjArray(50);
}
Double_t AliIntSpotEstimator::GetIPSigma(Int_t bin, Double_t *err) const
{
if (!IsValid()) {AliError("Not initialized yet"); return -999;}
double cxe,cye;
double cx = GetIPCenter(0,&cxe) - GetIPCenIni(0);
double cy = GetIPCenter(1,&cye) - GetIPCenIni(1);
TH1* proj = fEstimIP->ProjectionY("ipProj",bin<1 ? 1:bin, bin<1 ? GetNPhiBins():bin,"e");
double merr = 0;
double est = CalcMean(proj, fOutlierCut, &merr) - (cx*cx + cy*cy)/2.;
if (est>0) {
est = TMath::Sqrt(est);
if (err) {
*err = 0;
*err = merr*merr;
*err += cx*cx*cxe*cxe + cy*cy*cye*cye;
*err = TMath::Sqrt(*err)/est/2.;
}
}
else {
est = 0;
if (err) *err = 0;
}
delete proj;
return est;
}
Double_t AliIntSpotEstimator::GetVtxSigma(int ntr, double* err) const
{
if (!IsValid()) {AliError("Not initialized yet"); return -999;}
int bin = fEstimVtx->GetXaxis()->FindBin(ntr);
if (bin<1 || bin>GetNTrackBins()) {
AliError(Form("Requested vertex multiplicity %d out of defined %d-%d range",
ntr,GetMinTracks(),GetMaxTracks()));
return -1;
}
TH1* proj = fEstimVtx->ProjectionY("vrProj",bin,bin,"e");
double est = CalcMean(proj, fOutlierCut, err);
delete proj;
if (est>0) {
est = TMath::Sqrt(est);
if (err) *err /= 2*est;
}
else {
est = 0;
if (err) *err = 0;
}
return est;
}
Double_t AliIntSpotEstimator::GetDCASigma(double pt, double *err) const
{
if (!IsValid()) {AliError("Not initialized yet"); return -999;}
if (pt<1e-6) pt = GetTrackMinP()+1e6;
pt = 1./pt;
int bin = fEstimTrc->GetXaxis()->FindBin(pt);
if (bin<1 || bin>GetNPBins()) {
AliError(Form("Requested track P %.2f out of defined %.2f-%.2f range",1/pt,GetTrackMinP(),GetTrackMaxP()));
return -1;
}
TH1* proj = fEstimTrc->ProjectionY("trProj",bin,bin,"e");
double est = CalcMean(proj, fOutlierCut, err);
delete proj;
if (est>0) {
est = TMath::Sqrt(est);
if (err) *err /= 2*est;
}
else {
est = 0;
if (err) *err = 0;
}
return est;
}
Double_t AliIntSpotEstimator::CalcMean(TH1* histo, Double_t ctfact, Double_t *err)
{
double max = histo->GetMaximum();
double cut = (ctfact>0&&ctfact<1.) ? max*ctfact : 0;
int nb = histo->GetNbinsX();
double mean = 0.,cumul = 0, rms = 0;
for (int i=1;i<=nb;i++) {
double vl = histo->GetBinContent(i) - cut;
if (vl<1e-10) continue;
double x = histo->GetBinCenter(i);
mean += vl*x;
rms += vl*x*x;
cumul += vl;
}
mean = cumul>0 ? mean/cumul : 0;
rms -= mean*mean*cumul;
if (err) {
*err = cumul > 1 ? rms/(cumul-1) : 0;
if (*err>0) *err = TMath::Sqrt(*err/cumul);
}
return mean;
}
void AliIntSpotEstimator::Print(Option_t *) const
{
if (!IsValid()) {printf("Not initialized yet\n"); return;}
double cx,cy,cz,cxe,cye,cze;
cx = GetIPCenter(0,&cxe);
cy = GetIPCenter(1,&cye);
cz = GetIPCenter(2,&cze);
printf("Processed %d events\n",fEvProc);
printf("Estimator for IP center: %+.4e+-%.3e | %+.4e+-%.3e | %+.4e+-%.3e\n",
cx,cxe,cy,cye,cz,cze);
printf("Initial IP center was : %+.4e %+.4e %+.4e\n",
GetIPCenIni(0),GetIPCenIni(1),GetIPCenIni(2));
double sgIP = GetIPSigma(0,&cxe);
printf("Estimator for IP sigma : %.4e+-%.3e\n",sgIP,cxe);
printf("Estimators for vertex resolution vs Ntracks:\n");
for (int i=1;i<=GetNTrackBins();i++) {
double sig = GetVtxSigma( (int)fEstimVtx->GetXaxis()->GetBinCenter(i), &cxe );
if (IsZero(sig)) continue;
int tmin = TMath::Nint(fEstimVtx->GetXaxis()->GetBinLowEdge(i));
int tmax = tmin + int(fEstimVtx->GetXaxis()->GetBinWidth(i));
printf("%3d-%3d : %.4e+-%.3e\n",tmin,tmax,sig,cxe);
}
printf("Estimators for track DCA resolution vs P:\n");
for (int i=1;i<=GetNPBins();i++) {
double sig = GetDCASigma( 1./fEstimTrc->GetXaxis()->GetBinCenter(i), &cxe );
if (IsZero(sig)) continue;
double pmax = 1./fEstimTrc->GetXaxis()->GetBinLowEdge(i);
double pmin = 1./(fEstimTrc->GetXaxis()->GetBinLowEdge(i)+fEstimTrc->GetXaxis()->GetBinWidth(i));
printf("%.2f-%.2f : %.4e+-%.3e\n",pmin,pmax,sig, cxe);
}
}
void AliIntSpotEstimator::Clear(Option_t *)
{
fEvProc = 0;
fIPCenterStat = 0;
for (int i=3;i--;) fIPCenter[i] = fIPCenIni[i] = 0.;
if (fEstimIP) fEstimIP->Reset();
if (fEstimVtx) fEstimVtx->Reset();
if (fEstimTrc) fEstimTrc->Reset();
}
AliIntSpotEstimator &AliIntSpotEstimator::operator += (const AliIntSpotEstimator &src)
{
fEvProc += src.fEvProc;
fIPCenterStat += src.fIPCenterStat;
for (int i=3;i--;) fIPCenter[i] += src.fIPCenter[i];
if (fEstimIP && src.fEstimIP ) fEstimIP->Add(src.fEstimIP);
if (fEstimVtx && src.fEstimVtx) fEstimVtx->Add(src.fEstimVtx);
if (fEstimTrc && src.fEstimTrc) fEstimTrc->Add(src.fEstimTrc);
if (fHVtxXY && src.fHVtxXY) fHVtxXY->Add(src.fHVtxXY);
return *this;
}
TCanvas* AliIntSpotEstimator::CreateReport(const char* outname)
{
TCanvas *cnv = new TCanvas(GetName(), GetName(),5,5,700,1000);
gStyle->SetOptStat(0);
gStyle->SetTitleH(0.07);
gStyle->SetTitleW(0.7);
gStyle->SetTitleY(1);
gStyle->SetTitleX(0.2);
const Int_t nc=200;
char buff[nc];
cnv->Divide(2,2);
cnv->cd(1);
TPaveText *pt = new TPaveText(0.05,0.05,0.95,0.95,"blNDC");
snprintf(buff,nc,"%s | Outliers Cut : %.2e",GetName(),fOutlierCut);
pt->AddText(buff);
snprintf(buff,nc,"Processed Events:\n%d",fEvProc);
pt->AddText(buff);
snprintf(buff,nc,"Accepted Events\n%d",fIPCenterStat);
pt->AddText(buff);
double cx,cy,cz,cxe,cye,cze;
cx = GetIPCenter(0,&cxe);
cy = GetIPCenter(1,&cye);
cz = GetIPCenter(2,&cze);
snprintf(buff,nc,"Int.Spot (#mum)\n%+d#pm%d\n%+d#pm%d\n%+d#pm%d",
int(cx*1e4),int(cxe*1e4),int(cy*1e4),int(cye*1e4),int(cz*1e4),int(cze*1e4));
pt->AddText(buff);
cx = GetIPSigma(0,&cxe);
snprintf(buff,nc,"Int.Spot #sigma (#mum):\n%d#pm%d",int(cx*1e4),int(cxe*1e4));
pt->AddText(buff);
pt->Draw();
gPad->Modified();
cnv->cd(2);
gPad->SetLeftMargin(0.2);
TH1* iph = fEstimIP->ProjectionX();
iph->Reset();
iph->SetTitle("Int.Spot size vs #phi");
for (int i=1;i<=iph->GetNbinsX();i++) {
cx = GetIPSigma(i,&cxe);
iph->SetBinContent(i,cx*1e4);
iph->SetBinError(i,cxe*1e4);
}
iph->GetXaxis()->SetTitle("#phi");
iph->GetYaxis()->SetTitle("#sigma_{IP} [#mum]");
iph->SetMarkerStyle(20);
iph->Draw("p");
gPad->Modified();
iph->SetTitleOffset(2.5,"Y");
cnv->cd(3);
gPad->SetLeftMargin(0.2);
TH1* vrh = fEstimVtx->ProjectionX();
vrh->Reset();
vrh->SetTitle("Vertex resolution vs N tracks");
for (int i=1;i<=vrh->GetNbinsX();i++) {
cx = GetVtxSigma( TMath::Nint(vrh->GetBinCenter(i)), &cxe);
vrh->SetBinContent(i,cx*1e4);
vrh->SetBinError(i,cxe*1e4);
}
vrh->GetXaxis()->SetTitle("n tracks");
vrh->GetYaxis()->SetTitle("#sigma_{VTX} [#mum]");
vrh->SetMarkerStyle(20);
vrh->Draw("p");
gPad->Modified();
vrh->SetTitleOffset(2.5,"Y");
cnv->cd(4);
gPad->SetLeftMargin(0.2);
TH1* trh = fEstimTrc->ProjectionX();
trh->Reset();
trh->SetTitle("Track DCA resolution vs 1/P");
for (int i=1;i<=trh->GetNbinsX();i++) {
cx = GetDCASigma(1./trh->GetBinCenter(i), &cxe);
trh->SetBinContent(i,cx*1e4);
trh->SetBinError(i,cxe*1e4);
}
trh->GetXaxis()->SetTitle("1/p [GeV]");
trh->GetYaxis()->SetTitle("#sigma_{DCA} [#mum]");
trh->SetMarkerStyle(20);
trh->Draw("p");
gPad->Modified();
trh->SetTitleOffset(2.5,"Y");
cnv->cd();
gPad->Modified();
if (outname) cnv->Print(outname);
return cnv;
}
Long64_t AliIntSpotEstimator::Merge(TCollection *coll)
{
if(!coll) return 0;
if (coll->IsEmpty()) return 1;
TIterator* iter = coll->MakeIterator();
TObject* obj;
int count = 0;
while ((obj = iter->Next())) {
AliIntSpotEstimator* entry = dynamic_cast<AliIntSpotEstimator*>(obj);
if (!entry) continue;
(*this) += *entry;
count++;
}
return count;
}
Double_t AliIntSpotEstimator::GetIPCenter(Int_t id,Double_t *err) const
{
double cen = fIPCenterStat>0 ? fIPCenter[id]/fIPCenterStat:0;
if (err) {
*err = fIPCenterStat>1 ? (fIPCen2[id] - cen*cen*fIPCenterStat)/(fIPCenterStat-1) : 0;
*err = *err > 0 ? TMath::Sqrt(*err/fIPCenterStat) : 0;
}
return cen;
}
AliIntSpotEstimator.cxx:1 AliIntSpotEstimator.cxx:2 AliIntSpotEstimator.cxx:3 AliIntSpotEstimator.cxx:4 AliIntSpotEstimator.cxx:5 AliIntSpotEstimator.cxx:6 AliIntSpotEstimator.cxx:7 AliIntSpotEstimator.cxx:8 AliIntSpotEstimator.cxx:9 AliIntSpotEstimator.cxx:10 AliIntSpotEstimator.cxx:11 AliIntSpotEstimator.cxx:12 AliIntSpotEstimator.cxx:13 AliIntSpotEstimator.cxx:14 AliIntSpotEstimator.cxx:15 AliIntSpotEstimator.cxx:16 AliIntSpotEstimator.cxx:17 AliIntSpotEstimator.cxx:18 AliIntSpotEstimator.cxx:19 AliIntSpotEstimator.cxx:20 AliIntSpotEstimator.cxx:21 AliIntSpotEstimator.cxx:22 AliIntSpotEstimator.cxx:23 AliIntSpotEstimator.cxx:24 AliIntSpotEstimator.cxx:25 AliIntSpotEstimator.cxx:26 AliIntSpotEstimator.cxx:27 AliIntSpotEstimator.cxx:28 AliIntSpotEstimator.cxx:29 AliIntSpotEstimator.cxx:30 AliIntSpotEstimator.cxx:31 AliIntSpotEstimator.cxx:32 AliIntSpotEstimator.cxx:33 AliIntSpotEstimator.cxx:34 AliIntSpotEstimator.cxx:35 AliIntSpotEstimator.cxx:36 AliIntSpotEstimator.cxx:37 AliIntSpotEstimator.cxx:38 AliIntSpotEstimator.cxx:39 AliIntSpotEstimator.cxx:40 AliIntSpotEstimator.cxx:41 AliIntSpotEstimator.cxx:42 AliIntSpotEstimator.cxx:43 AliIntSpotEstimator.cxx:44 AliIntSpotEstimator.cxx:45 AliIntSpotEstimator.cxx:46 AliIntSpotEstimator.cxx:47 AliIntSpotEstimator.cxx:48 AliIntSpotEstimator.cxx:49 AliIntSpotEstimator.cxx:50 AliIntSpotEstimator.cxx:51 AliIntSpotEstimator.cxx:52 AliIntSpotEstimator.cxx:53 AliIntSpotEstimator.cxx:54 AliIntSpotEstimator.cxx:55 AliIntSpotEstimator.cxx:56 AliIntSpotEstimator.cxx:57 AliIntSpotEstimator.cxx:58 AliIntSpotEstimator.cxx:59 AliIntSpotEstimator.cxx:60 AliIntSpotEstimator.cxx:61 AliIntSpotEstimator.cxx:62 AliIntSpotEstimator.cxx:63 AliIntSpotEstimator.cxx:64 AliIntSpotEstimator.cxx:65 AliIntSpotEstimator.cxx:66 AliIntSpotEstimator.cxx:67 AliIntSpotEstimator.cxx:68 AliIntSpotEstimator.cxx:69 AliIntSpotEstimator.cxx:70 AliIntSpotEstimator.cxx:71 AliIntSpotEstimator.cxx:72 AliIntSpotEstimator.cxx:73 AliIntSpotEstimator.cxx:74 AliIntSpotEstimator.cxx:75 AliIntSpotEstimator.cxx:76 AliIntSpotEstimator.cxx:77 AliIntSpotEstimator.cxx:78 AliIntSpotEstimator.cxx:79 AliIntSpotEstimator.cxx:80 AliIntSpotEstimator.cxx:81 AliIntSpotEstimator.cxx:82 AliIntSpotEstimator.cxx:83 AliIntSpotEstimator.cxx:84 AliIntSpotEstimator.cxx:85 AliIntSpotEstimator.cxx:86 AliIntSpotEstimator.cxx:87 AliIntSpotEstimator.cxx:88 AliIntSpotEstimator.cxx:89 AliIntSpotEstimator.cxx:90 AliIntSpotEstimator.cxx:91 AliIntSpotEstimator.cxx:92 AliIntSpotEstimator.cxx:93 AliIntSpotEstimator.cxx:94 AliIntSpotEstimator.cxx:95 AliIntSpotEstimator.cxx:96 AliIntSpotEstimator.cxx:97 AliIntSpotEstimator.cxx:98 AliIntSpotEstimator.cxx:99 AliIntSpotEstimator.cxx:100 AliIntSpotEstimator.cxx:101 AliIntSpotEstimator.cxx:102 AliIntSpotEstimator.cxx:103 AliIntSpotEstimator.cxx:104 AliIntSpotEstimator.cxx:105 AliIntSpotEstimator.cxx:106 AliIntSpotEstimator.cxx:107 AliIntSpotEstimator.cxx:108 AliIntSpotEstimator.cxx:109 AliIntSpotEstimator.cxx:110 AliIntSpotEstimator.cxx:111 AliIntSpotEstimator.cxx:112 AliIntSpotEstimator.cxx:113 AliIntSpotEstimator.cxx:114 AliIntSpotEstimator.cxx:115 AliIntSpotEstimator.cxx:116 AliIntSpotEstimator.cxx:117 AliIntSpotEstimator.cxx:118 AliIntSpotEstimator.cxx:119 AliIntSpotEstimator.cxx:120 AliIntSpotEstimator.cxx:121 AliIntSpotEstimator.cxx:122 AliIntSpotEstimator.cxx:123 AliIntSpotEstimator.cxx:124 AliIntSpotEstimator.cxx:125 AliIntSpotEstimator.cxx:126 AliIntSpotEstimator.cxx:127 AliIntSpotEstimator.cxx:128 AliIntSpotEstimator.cxx:129 AliIntSpotEstimator.cxx:130 AliIntSpotEstimator.cxx:131 AliIntSpotEstimator.cxx:132 AliIntSpotEstimator.cxx:133 AliIntSpotEstimator.cxx:134 AliIntSpotEstimator.cxx:135 AliIntSpotEstimator.cxx:136 AliIntSpotEstimator.cxx:137 AliIntSpotEstimator.cxx:138 AliIntSpotEstimator.cxx:139 AliIntSpotEstimator.cxx:140 AliIntSpotEstimator.cxx:141 AliIntSpotEstimator.cxx:142 AliIntSpotEstimator.cxx:143 AliIntSpotEstimator.cxx:144 AliIntSpotEstimator.cxx:145 AliIntSpotEstimator.cxx:146 AliIntSpotEstimator.cxx:147 AliIntSpotEstimator.cxx:148 AliIntSpotEstimator.cxx:149 AliIntSpotEstimator.cxx:150 AliIntSpotEstimator.cxx:151 AliIntSpotEstimator.cxx:152 AliIntSpotEstimator.cxx:153 AliIntSpotEstimator.cxx:154 AliIntSpotEstimator.cxx:155 AliIntSpotEstimator.cxx:156 AliIntSpotEstimator.cxx:157 AliIntSpotEstimator.cxx:158 AliIntSpotEstimator.cxx:159 AliIntSpotEstimator.cxx:160 AliIntSpotEstimator.cxx:161 AliIntSpotEstimator.cxx:162 AliIntSpotEstimator.cxx:163 AliIntSpotEstimator.cxx:164 AliIntSpotEstimator.cxx:165 AliIntSpotEstimator.cxx:166 AliIntSpotEstimator.cxx:167 AliIntSpotEstimator.cxx:168 AliIntSpotEstimator.cxx:169 AliIntSpotEstimator.cxx:170 AliIntSpotEstimator.cxx:171 AliIntSpotEstimator.cxx:172 AliIntSpotEstimator.cxx:173 AliIntSpotEstimator.cxx:174 AliIntSpotEstimator.cxx:175 AliIntSpotEstimator.cxx:176 AliIntSpotEstimator.cxx:177 AliIntSpotEstimator.cxx:178 AliIntSpotEstimator.cxx:179 AliIntSpotEstimator.cxx:180 AliIntSpotEstimator.cxx:181 AliIntSpotEstimator.cxx:182 AliIntSpotEstimator.cxx:183 AliIntSpotEstimator.cxx:184 AliIntSpotEstimator.cxx:185 AliIntSpotEstimator.cxx:186 AliIntSpotEstimator.cxx:187 AliIntSpotEstimator.cxx:188 AliIntSpotEstimator.cxx:189 AliIntSpotEstimator.cxx:190 AliIntSpotEstimator.cxx:191 AliIntSpotEstimator.cxx:192 AliIntSpotEstimator.cxx:193 AliIntSpotEstimator.cxx:194 AliIntSpotEstimator.cxx:195 AliIntSpotEstimator.cxx:196 AliIntSpotEstimator.cxx:197 AliIntSpotEstimator.cxx:198 AliIntSpotEstimator.cxx:199 AliIntSpotEstimator.cxx:200 AliIntSpotEstimator.cxx:201 AliIntSpotEstimator.cxx:202 AliIntSpotEstimator.cxx:203 AliIntSpotEstimator.cxx:204 AliIntSpotEstimator.cxx:205 AliIntSpotEstimator.cxx:206 AliIntSpotEstimator.cxx:207 AliIntSpotEstimator.cxx:208 AliIntSpotEstimator.cxx:209 AliIntSpotEstimator.cxx:210 AliIntSpotEstimator.cxx:211 AliIntSpotEstimator.cxx:212 AliIntSpotEstimator.cxx:213 AliIntSpotEstimator.cxx:214 AliIntSpotEstimator.cxx:215 AliIntSpotEstimator.cxx:216 AliIntSpotEstimator.cxx:217 AliIntSpotEstimator.cxx:218 AliIntSpotEstimator.cxx:219 AliIntSpotEstimator.cxx:220 AliIntSpotEstimator.cxx:221 AliIntSpotEstimator.cxx:222 AliIntSpotEstimator.cxx:223 AliIntSpotEstimator.cxx:224 AliIntSpotEstimator.cxx:225 AliIntSpotEstimator.cxx:226 AliIntSpotEstimator.cxx:227 AliIntSpotEstimator.cxx:228 AliIntSpotEstimator.cxx:229 AliIntSpotEstimator.cxx:230 AliIntSpotEstimator.cxx:231 AliIntSpotEstimator.cxx:232 AliIntSpotEstimator.cxx:233 AliIntSpotEstimator.cxx:234 AliIntSpotEstimator.cxx:235 AliIntSpotEstimator.cxx:236 AliIntSpotEstimator.cxx:237 AliIntSpotEstimator.cxx:238 AliIntSpotEstimator.cxx:239 AliIntSpotEstimator.cxx:240 AliIntSpotEstimator.cxx:241 AliIntSpotEstimator.cxx:242 AliIntSpotEstimator.cxx:243 AliIntSpotEstimator.cxx:244 AliIntSpotEstimator.cxx:245 AliIntSpotEstimator.cxx:246 AliIntSpotEstimator.cxx:247 AliIntSpotEstimator.cxx:248 AliIntSpotEstimator.cxx:249 AliIntSpotEstimator.cxx:250 AliIntSpotEstimator.cxx:251 AliIntSpotEstimator.cxx:252 AliIntSpotEstimator.cxx:253 AliIntSpotEstimator.cxx:254 AliIntSpotEstimator.cxx:255 AliIntSpotEstimator.cxx:256 AliIntSpotEstimator.cxx:257 AliIntSpotEstimator.cxx:258 AliIntSpotEstimator.cxx:259 AliIntSpotEstimator.cxx:260 AliIntSpotEstimator.cxx:261 AliIntSpotEstimator.cxx:262 AliIntSpotEstimator.cxx:263 AliIntSpotEstimator.cxx:264 AliIntSpotEstimator.cxx:265 AliIntSpotEstimator.cxx:266 AliIntSpotEstimator.cxx:267 AliIntSpotEstimator.cxx:268 AliIntSpotEstimator.cxx:269 AliIntSpotEstimator.cxx:270 AliIntSpotEstimator.cxx:271 AliIntSpotEstimator.cxx:272 AliIntSpotEstimator.cxx:273 AliIntSpotEstimator.cxx:274 AliIntSpotEstimator.cxx:275 AliIntSpotEstimator.cxx:276 AliIntSpotEstimator.cxx:277 AliIntSpotEstimator.cxx:278 AliIntSpotEstimator.cxx:279 AliIntSpotEstimator.cxx:280 AliIntSpotEstimator.cxx:281 AliIntSpotEstimator.cxx:282 AliIntSpotEstimator.cxx:283 AliIntSpotEstimator.cxx:284 AliIntSpotEstimator.cxx:285 AliIntSpotEstimator.cxx:286 AliIntSpotEstimator.cxx:287 AliIntSpotEstimator.cxx:288 AliIntSpotEstimator.cxx:289 AliIntSpotEstimator.cxx:290 AliIntSpotEstimator.cxx:291 AliIntSpotEstimator.cxx:292 AliIntSpotEstimator.cxx:293 AliIntSpotEstimator.cxx:294 AliIntSpotEstimator.cxx:295 AliIntSpotEstimator.cxx:296 AliIntSpotEstimator.cxx:297 AliIntSpotEstimator.cxx:298 AliIntSpotEstimator.cxx:299 AliIntSpotEstimator.cxx:300 AliIntSpotEstimator.cxx:301 AliIntSpotEstimator.cxx:302 AliIntSpotEstimator.cxx:303 AliIntSpotEstimator.cxx:304 AliIntSpotEstimator.cxx:305 AliIntSpotEstimator.cxx:306 AliIntSpotEstimator.cxx:307 AliIntSpotEstimator.cxx:308 AliIntSpotEstimator.cxx:309 AliIntSpotEstimator.cxx:310 AliIntSpotEstimator.cxx:311 AliIntSpotEstimator.cxx:312 AliIntSpotEstimator.cxx:313 AliIntSpotEstimator.cxx:314 AliIntSpotEstimator.cxx:315 AliIntSpotEstimator.cxx:316 AliIntSpotEstimator.cxx:317 AliIntSpotEstimator.cxx:318 AliIntSpotEstimator.cxx:319 AliIntSpotEstimator.cxx:320 AliIntSpotEstimator.cxx:321 AliIntSpotEstimator.cxx:322 AliIntSpotEstimator.cxx:323 AliIntSpotEstimator.cxx:324 AliIntSpotEstimator.cxx:325 AliIntSpotEstimator.cxx:326 AliIntSpotEstimator.cxx:327 AliIntSpotEstimator.cxx:328 AliIntSpotEstimator.cxx:329 AliIntSpotEstimator.cxx:330 AliIntSpotEstimator.cxx:331 AliIntSpotEstimator.cxx:332 AliIntSpotEstimator.cxx:333 AliIntSpotEstimator.cxx:334 AliIntSpotEstimator.cxx:335 AliIntSpotEstimator.cxx:336 AliIntSpotEstimator.cxx:337 AliIntSpotEstimator.cxx:338 AliIntSpotEstimator.cxx:339 AliIntSpotEstimator.cxx:340 AliIntSpotEstimator.cxx:341 AliIntSpotEstimator.cxx:342 AliIntSpotEstimator.cxx:343 AliIntSpotEstimator.cxx:344 AliIntSpotEstimator.cxx:345 AliIntSpotEstimator.cxx:346 AliIntSpotEstimator.cxx:347 AliIntSpotEstimator.cxx:348 AliIntSpotEstimator.cxx:349 AliIntSpotEstimator.cxx:350 AliIntSpotEstimator.cxx:351 AliIntSpotEstimator.cxx:352 AliIntSpotEstimator.cxx:353 AliIntSpotEstimator.cxx:354 AliIntSpotEstimator.cxx:355 AliIntSpotEstimator.cxx:356 AliIntSpotEstimator.cxx:357 AliIntSpotEstimator.cxx:358 AliIntSpotEstimator.cxx:359 AliIntSpotEstimator.cxx:360 AliIntSpotEstimator.cxx:361 AliIntSpotEstimator.cxx:362 AliIntSpotEstimator.cxx:363 AliIntSpotEstimator.cxx:364 AliIntSpotEstimator.cxx:365 AliIntSpotEstimator.cxx:366 AliIntSpotEstimator.cxx:367 AliIntSpotEstimator.cxx:368 AliIntSpotEstimator.cxx:369 AliIntSpotEstimator.cxx:370 AliIntSpotEstimator.cxx:371 AliIntSpotEstimator.cxx:372 AliIntSpotEstimator.cxx:373 AliIntSpotEstimator.cxx:374 AliIntSpotEstimator.cxx:375 AliIntSpotEstimator.cxx:376 AliIntSpotEstimator.cxx:377 AliIntSpotEstimator.cxx:378 AliIntSpotEstimator.cxx:379 AliIntSpotEstimator.cxx:380 AliIntSpotEstimator.cxx:381 AliIntSpotEstimator.cxx:382 AliIntSpotEstimator.cxx:383 AliIntSpotEstimator.cxx:384 AliIntSpotEstimator.cxx:385 AliIntSpotEstimator.cxx:386 AliIntSpotEstimator.cxx:387 AliIntSpotEstimator.cxx:388 AliIntSpotEstimator.cxx:389 AliIntSpotEstimator.cxx:390 AliIntSpotEstimator.cxx:391 AliIntSpotEstimator.cxx:392 AliIntSpotEstimator.cxx:393 AliIntSpotEstimator.cxx:394 AliIntSpotEstimator.cxx:395 AliIntSpotEstimator.cxx:396 AliIntSpotEstimator.cxx:397 AliIntSpotEstimator.cxx:398 AliIntSpotEstimator.cxx:399 AliIntSpotEstimator.cxx:400 AliIntSpotEstimator.cxx:401 AliIntSpotEstimator.cxx:402 AliIntSpotEstimator.cxx:403 AliIntSpotEstimator.cxx:404 AliIntSpotEstimator.cxx:405 AliIntSpotEstimator.cxx:406 AliIntSpotEstimator.cxx:407 AliIntSpotEstimator.cxx:408 AliIntSpotEstimator.cxx:409 AliIntSpotEstimator.cxx:410 AliIntSpotEstimator.cxx:411 AliIntSpotEstimator.cxx:412 AliIntSpotEstimator.cxx:413 AliIntSpotEstimator.cxx:414 AliIntSpotEstimator.cxx:415 AliIntSpotEstimator.cxx:416 AliIntSpotEstimator.cxx:417 AliIntSpotEstimator.cxx:418 AliIntSpotEstimator.cxx:419 AliIntSpotEstimator.cxx:420 AliIntSpotEstimator.cxx:421 AliIntSpotEstimator.cxx:422 AliIntSpotEstimator.cxx:423 AliIntSpotEstimator.cxx:424 AliIntSpotEstimator.cxx:425 AliIntSpotEstimator.cxx:426 AliIntSpotEstimator.cxx:427 AliIntSpotEstimator.cxx:428 AliIntSpotEstimator.cxx:429 AliIntSpotEstimator.cxx:430 AliIntSpotEstimator.cxx:431 AliIntSpotEstimator.cxx:432 AliIntSpotEstimator.cxx:433 AliIntSpotEstimator.cxx:434 AliIntSpotEstimator.cxx:435 AliIntSpotEstimator.cxx:436 AliIntSpotEstimator.cxx:437 AliIntSpotEstimator.cxx:438 AliIntSpotEstimator.cxx:439 AliIntSpotEstimator.cxx:440 AliIntSpotEstimator.cxx:441 AliIntSpotEstimator.cxx:442 AliIntSpotEstimator.cxx:443 AliIntSpotEstimator.cxx:444 AliIntSpotEstimator.cxx:445 AliIntSpotEstimator.cxx:446 AliIntSpotEstimator.cxx:447 AliIntSpotEstimator.cxx:448 AliIntSpotEstimator.cxx:449 AliIntSpotEstimator.cxx:450 AliIntSpotEstimator.cxx:451 AliIntSpotEstimator.cxx:452 AliIntSpotEstimator.cxx:453 AliIntSpotEstimator.cxx:454 AliIntSpotEstimator.cxx:455 AliIntSpotEstimator.cxx:456 AliIntSpotEstimator.cxx:457 AliIntSpotEstimator.cxx:458 AliIntSpotEstimator.cxx:459 AliIntSpotEstimator.cxx:460 AliIntSpotEstimator.cxx:461 AliIntSpotEstimator.cxx:462 AliIntSpotEstimator.cxx:463 AliIntSpotEstimator.cxx:464 AliIntSpotEstimator.cxx:465 AliIntSpotEstimator.cxx:466 AliIntSpotEstimator.cxx:467 AliIntSpotEstimator.cxx:468 AliIntSpotEstimator.cxx:469 AliIntSpotEstimator.cxx:470 AliIntSpotEstimator.cxx:471 AliIntSpotEstimator.cxx:472 AliIntSpotEstimator.cxx:473 AliIntSpotEstimator.cxx:474 AliIntSpotEstimator.cxx:475 AliIntSpotEstimator.cxx:476 AliIntSpotEstimator.cxx:477 AliIntSpotEstimator.cxx:478 AliIntSpotEstimator.cxx:479 AliIntSpotEstimator.cxx:480 AliIntSpotEstimator.cxx:481 AliIntSpotEstimator.cxx:482 AliIntSpotEstimator.cxx:483 AliIntSpotEstimator.cxx:484 AliIntSpotEstimator.cxx:485 AliIntSpotEstimator.cxx:486 AliIntSpotEstimator.cxx:487 AliIntSpotEstimator.cxx:488 AliIntSpotEstimator.cxx:489 AliIntSpotEstimator.cxx:490 AliIntSpotEstimator.cxx:491 AliIntSpotEstimator.cxx:492 AliIntSpotEstimator.cxx:493 AliIntSpotEstimator.cxx:494 AliIntSpotEstimator.cxx:495 AliIntSpotEstimator.cxx:496 AliIntSpotEstimator.cxx:497 AliIntSpotEstimator.cxx:498 AliIntSpotEstimator.cxx:499 AliIntSpotEstimator.cxx:500 AliIntSpotEstimator.cxx:501 AliIntSpotEstimator.cxx:502 AliIntSpotEstimator.cxx:503 AliIntSpotEstimator.cxx:504 AliIntSpotEstimator.cxx:505 AliIntSpotEstimator.cxx:506 AliIntSpotEstimator.cxx:507 AliIntSpotEstimator.cxx:508 AliIntSpotEstimator.cxx:509 AliIntSpotEstimator.cxx:510 AliIntSpotEstimator.cxx:511 AliIntSpotEstimator.cxx:512 AliIntSpotEstimator.cxx:513 AliIntSpotEstimator.cxx:514 AliIntSpotEstimator.cxx:515 AliIntSpotEstimator.cxx:516 AliIntSpotEstimator.cxx:517 AliIntSpotEstimator.cxx:518 AliIntSpotEstimator.cxx:519 AliIntSpotEstimator.cxx:520 AliIntSpotEstimator.cxx:521 AliIntSpotEstimator.cxx:522 AliIntSpotEstimator.cxx:523 AliIntSpotEstimator.cxx:524 AliIntSpotEstimator.cxx:525 AliIntSpotEstimator.cxx:526 AliIntSpotEstimator.cxx:527 AliIntSpotEstimator.cxx:528 AliIntSpotEstimator.cxx:529 AliIntSpotEstimator.cxx:530 AliIntSpotEstimator.cxx:531 AliIntSpotEstimator.cxx:532 AliIntSpotEstimator.cxx:533 AliIntSpotEstimator.cxx:534 AliIntSpotEstimator.cxx:535 AliIntSpotEstimator.cxx:536 AliIntSpotEstimator.cxx:537 AliIntSpotEstimator.cxx:538 AliIntSpotEstimator.cxx:539 AliIntSpotEstimator.cxx:540 AliIntSpotEstimator.cxx:541 AliIntSpotEstimator.cxx:542 AliIntSpotEstimator.cxx:543 AliIntSpotEstimator.cxx:544 AliIntSpotEstimator.cxx:545 AliIntSpotEstimator.cxx:546 AliIntSpotEstimator.cxx:547 AliIntSpotEstimator.cxx:548 AliIntSpotEstimator.cxx:549 AliIntSpotEstimator.cxx:550 AliIntSpotEstimator.cxx:551 AliIntSpotEstimator.cxx:552 AliIntSpotEstimator.cxx:553 AliIntSpotEstimator.cxx:554 AliIntSpotEstimator.cxx:555 AliIntSpotEstimator.cxx:556 AliIntSpotEstimator.cxx:557 AliIntSpotEstimator.cxx:558 AliIntSpotEstimator.cxx:559 AliIntSpotEstimator.cxx:560 AliIntSpotEstimator.cxx:561 AliIntSpotEstimator.cxx:562 AliIntSpotEstimator.cxx:563 AliIntSpotEstimator.cxx:564 AliIntSpotEstimator.cxx:565 AliIntSpotEstimator.cxx:566 AliIntSpotEstimator.cxx:567 AliIntSpotEstimator.cxx:568 AliIntSpotEstimator.cxx:569 AliIntSpotEstimator.cxx:570 AliIntSpotEstimator.cxx:571 AliIntSpotEstimator.cxx:572 AliIntSpotEstimator.cxx:573 AliIntSpotEstimator.cxx:574 AliIntSpotEstimator.cxx:575