ROOT logo
/****************************************************************************
 *  This macro calculates the efficiency of pileup reconstruction.          *
 *  Works only for events generated with the AliGenPileup generator.        *
 *                                                                          *
 *  Before running, load the ITSU libraries:                                *
 *  gSystem->Load("libITSUpgradeBase");gSystem->Load("libITSUpgradeRec");   *
 *                                                                          *
 *  Definifions:                                                            *
 *  1) Reconstructable track: physical primary, charged, pT > pTmin         * 
 *  2) Reconstructable vertex: has at least nMin reconstructable tracks     *
 *  3) Associated vertex: has at least nAssMin correctly associated tracks  *
 *  4) Good associated vertex: the fraction of correctly associated tracks  *
 *        is at least fracMin                                               *
 *  5) Fake associated vertex: not a good associated vertex                 *
 *  6) Efficiency:  the ratio of 4) over 3)                                 *
 *  7) Fake rate:   the ratio of 5) over 3)                                 *
 *                                                                          *
 *           Origin: I.Belikov, IPHC, Iouri.Belikov@iphc.cnrs.fr            *
 ****************************************************************************/

#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <Riostream.h>
  #include <TMath.h>
  #include <TTree.h>
  #include <TParticle.h>
  #include <TParticlePDG.h>
  #include <TCanvas.h>
  #include <TFile.h>
  #include <TLine.h>
  #include <TROOT.h>
  #include <TStyle.h>
  #include <TLegend.h>

  #include "AliStack.h"
  #include "AliHeader.h"
  #include "AliGenCocktailEventHeader.h"
  #include "AliRunLoader.h"
  #include "AliRun.h"
  #include "AliESDEvent.h"
  #include "AliESDtrack.h"
#endif

//**** Parameters used in the definitions
const Float_t pTmin=0.2;   // Minimal pT for a reconstructable track
const Int_t nMin=3;        // Minimal N of reconstructable tracks per vertex
const Int_t nAssMin=2;     // Minimal number of correctly associated tracks
const Float_t fracMin=0.8; // Minimal fraction of correctly associated tracks
const Float_t tWin=30e-6;  // Time-acceptance window for "good" MC vertices

extern AliRun *gAlice;
extern TROOT *gROOT;
extern TStyle *gStyle;

Int_t AliITSUComparisonPileup(const Char_t *dir=".") {
   ::Info("AliITSUComparisonPileup.C","Doing comparison...");
   Int_t GoodPileupVertices(const Char_t *dir=".");

   // **** Book histogramms   
   Int_t nb=35;
   Float_t min=0, max=70.;
   TH2F *h2spd=(TH2F*)gROOT->FindObject("h2spd");
   if (!h2spd) 
     h2spd=new TH2F("h2spd","SPD vertices;Number of good vertices;Number of reconstructed vertices",nb,min,max, nb,min,max);
   h2spd->SetLineColor(2);
   TH2F *h2trk=(TH2F*)gROOT->FindObject("h2trk");
   if (!h2trk) 
     h2trk=new TH2F("h2trk","TRK vertices;Good vertices;Reconstructed vertices",
     nb,min,max, nb,min,max);
   h2trk->SetLineColor(4);

   nb=100;
   min=-0.03; max=0.03;
   TH1F *hzspd=(TH1F*)gROOT->FindObject("hzspd");
   if (!hzspd) 
     hzspd=new TH1F("hzspd","SPD resolution in Z;#DeltaZ (cm);",nb,min,max);
   hzspd->SetLineColor(2);
   TH1F *hztrk=(TH1F*)gROOT->FindObject("hztrk");
   if (!hztrk) 
     hztrk=new TH1F("hztrk","TRK resolution in Z;#DeltaZ (cm);",nb,min,max);
   hztrk->SetLineColor(4);

   
   nb=30;
   min=-10.; max=10.; 
   TH1F *hgood=(TH1F*)gROOT->FindObject("hgood");
   if (!hgood) 
     hgood=new TH1F("hgood",";Z (cm);",nb,min,max);

   TH1F *hfoundspd=(TH1F*)gROOT->FindObject("hfoundspd");
   if (!hfoundspd) 
    hfoundspd=new TH1F("hfoundspd",";Z (cm);",nb,min,max);
   TH1F *heffspd=(TH1F*)gROOT->FindObject("heffspd");
   if (!heffspd) 
      heffspd=new TH1F("heffspd","SPD efficiency + fake rate;Z position of a prim. vertex (cm);Efficiency",nb,min,max);
   heffspd->SetLineColor(2);
   heffspd->Sumw2();

   TH1F *hfoundtrk=(TH1F*)gROOT->FindObject("hfoundtrk");
   if (!hfoundtrk) 
    hfoundtrk=new TH1F("hfoundtrk",";Z (cm);",nb,min,max);
   TH1F *hefftrk=(TH1F*)gROOT->FindObject("hefftrk");
   if (!hefftrk) 
      hefftrk=new TH1F("hefftrk","TRK efficiency;Z (cm);Efficiency",nb,min,max);
   hefftrk->SetLineColor(4);
   hefftrk->Sumw2();

   TH1F *hfaketrk=(TH1F*)gROOT->FindObject("hfaketrk");
   if (!hfaketrk) 
    hfaketrk=new TH1F("hfaketrk",";Z (cm);",nb,min,max);
   TH1F *heffaketrk=(TH1F*)gROOT->FindObject("heffaketrk");
   if (!heffaketrk) 
      heffaketrk=new TH1F("heffaketrk","TRK fake rate;Z (cm);Fake rate",nb,min,max);
   heffaketrk->SetLineColor(4);
   heffaketrk->SetFillColor(590);
   heffaketrk->Sumw2();



   nb=51;
   min=-0.5; max=50.5;
   TH1F *hngood=(TH1F*)gROOT->FindObject("hngood");
   if (!hngood) 
      hngood=new TH1F("hngood",";Z (cm);",nb,min,max);
   TH1F *hnfoundtrk=(TH1F*)gROOT->FindObject("hnfoundtrk");
   if (!hnfoundtrk) 
      hnfoundtrk=new TH1F("hnfoundtrk",";Z (cm);",nb,min,max);
   TH1F *hnefftrk=(TH1F*)gROOT->FindObject("hnefftrk");
   if (!hnefftrk) 
      hnefftrk=new TH1F("hnefftrk","TRK efficiency;Number of tracks;Efficiency",nb,min,max);
   hnefftrk->SetLineColor(4);
   hnefftrk->Sumw2();

   TH1F *hnfaketrk=(TH1F*)gROOT->FindObject("hnfaketrk");
   if (!hnfaketrk) 
      hnfaketrk=new TH1F("hnfaketrk",";Z (cm);",nb,min,max);
   TH1F *hneffaketrk=(TH1F*)gROOT->FindObject("hneffaketrk");
   if (!hneffaketrk) 
      hneffaketrk=new TH1F("hneffaketrk","TRK fake rate;Number of tracks;Efficiency",nb,min,max);
   hneffaketrk->SetLineColor(4);
   hneffaketrk->SetFillColor(590);
   hneffaketrk->Sumw2();


   // **** Generate a rerefence file with reconstructable vertices
   Char_t fname[100];
   sprintf(fname,"%s/GoodPileupVertices.root",dir);
   TFile *refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
      ::Info("AliITSUComparisonPileup.C",
      "Marking good pileup vertices (will take a while)...");
      if (GoodPileupVertices(dir)) {
     ::Error("AliITSUComparisonPileup.C","Can't generate the reference file !");
         return 1;
      }
   }
   refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
     ::Error("AliITSUComparisonPileup.C","Can't open the reference file !");
     return 1;
   }   
   TTree *refTree=(TTree*)refFile->Get("refTree");
   if (!refTree) {
     ::Error("AliITSUComparisonPileup.C","Can't get the reference tree !");
     return 2;
   }
   TBranch *branch=refTree->GetBranch("Vertices");
   if (!branch) {
     ::Error("AliITSUComparisonPileup.C","Can't get the vertex branch !");
     return 3;
   }
   TClonesArray dummy("AliESDVertex",100), *refs=&dummy;
   branch->SetAddress(&refs);    


   // **** Open the ESD 
   sprintf(fname,"%s/AliESDs.root",dir);
   TFile *ef=TFile::Open(fname);
   if ((!ef)||(!ef->IsOpen())) {
      ::Error("AliITSUComparisonPileup.C","Can't open AliESDs.root !");
      return 4;
   }
   AliESDEvent* event = new AliESDEvent();
   TTree* esdTree = (TTree*) ef->Get("esdTree");
   if (!esdTree) {
      ::Error("AliITSUComparisonPileup.C", "no ESD tree found");
      return 6;
   }
   event->ReadFromTree(esdTree);


   //******* Loop over reconstructed events *********
   Int_t ntrk=0, ntrkcor=0, ntrkwro=0;
   Int_t e=0;
   while (esdTree->GetEvent(e)) {
     cout<<endl<<endl<<"********* Processing event number: "<<e<<"*******\n";
     Int_t nn=event->GetNumberOfTracks();
     ntrk += nn;

     TClonesArray *verticesSPD=event->GetPileupVerticesSPD();
     Int_t nfoundSPD=verticesSPD->GetEntries(); 
     TClonesArray *verticesTRK=event->GetPileupVerticesTracks();
     Int_t nfoundTRK=verticesTRK->GetEntries(); 

     if (refTree->GetEvent(e++)==0) {
        cerr<<"No reconstructable vertices for this event !\n";
        continue;
     }
     Int_t ngood=refs->GetEntriesFast(); 
     cout<<"Found SPD vertices: "<<nfoundSPD<<
           "  Reconstructable vertices: "<<ngood<<endl;

     h2spd->Fill(ngood,nfoundSPD);
     h2trk->Fill(ngood,nfoundTRK);

     Int_t ncor=0, nwro=0;
     for (Int_t g=0; g<ngood; g++) {
         Int_t Associate(const AliESDVertex *g, const AliESDVertex *f, 
            const AliESDEvent *esd); 
         const AliESDVertex *vtxg=(AliESDVertex*)refs->UncheckedAt(g);
         Double_t zg=vtxg->GetZ();
         Double_t ng=vtxg->GetNIndices();
         hgood->Fill(zg);
         hngood->Fill(ng);

         AliESDVertex *vtxf=0;
         Double_t zf=0.;
         Int_t f=0;
         for (; f<nfoundSPD; f++) {
             vtxf=(AliESDVertex*)verticesSPD->UncheckedAt(f);
             if (!vtxf->GetStatus()) continue;
             if (Associate(vtxg,vtxf,event)==0) continue; 
             break;
         }
         if (f>=nfoundSPD) {
	     vtxf=(AliESDVertex *)event->GetPrimaryVertexSPD();
             if (!vtxf->GetStatus()) goto trk;
             if (Associate(vtxg,vtxf,event)==0) goto trk; 
	 }

         zf=vtxf->GetZ();
         hfoundspd->Fill(zg);
         hzspd->Fill(zf-zg);

     trk:
         Int_t n=0;
         for (f=0; f<nfoundTRK; f++) {
             vtxf=(AliESDVertex*)verticesTRK->UncheckedAt(f);
             if (!vtxf->GetStatus()) continue;
             n=Associate(vtxg,vtxf,event);
	     if (n < nAssMin) continue;
             break;
         }
         if (f>=nfoundTRK) {
	     vtxf=(AliESDVertex*)event->GetPrimaryVertexTracks();
             if (!vtxf->GetStatus()) continue;
             n=Associate(vtxg,vtxf,event);
             if (n < nAssMin) continue;
	 }

         ncor+=n;
         nwro+=(vtxf->GetNIndices()-n); 
         zf=vtxf->GetZ();

         if (Float_t(n)/vtxf->GetNIndices() > fracMin) {
	    hfoundtrk->Fill(zg);
	    hnfoundtrk->Fill(ng);
	 } else {
	    hfaketrk->Fill(zg);
	    hnfaketrk->Fill(ng);
	 }
         hztrk->Fill(zf-zg);

         vtxf->SetNContributors(0); // Mark this vertex as already associated

     }
     // Increase the counter of tracks (not)associated with verices
     ntrkcor += ncor;
     ntrkwro += nwro;

   } //***** End of the loop over reconstructed events

   delete event;
   delete esdTree;
   ef->Close();

   refFile->Close();
   
   cout<<"\nTotal number of found tracks: "<<ntrk<<endl;
   cout<<"Number of tracks correctly associated with vertices: "<<ntrkcor<<endl;
   cout<<"Number of tracks wrongly associated with vertices: "<<ntrkwro<<endl;
   if (ntrk != 0) {
     cout<<"Correctly associated/Found:\t"<<Float_t(ntrkcor)/ntrk<<endl;
     cout<<"Wrongly associated/Found:\t"<<Float_t(ntrkwro)/ntrk<<endl;
     cout<<"Not associated/Found:\t\t"<<1.-Float_t(ntrkwro+ntrkcor)/ntrk<<endl;
   }

   gStyle->SetOptStat(0);
   gStyle->SetOptTitle(0);
   TCanvas *c1=new TCanvas("c1","",0,0,700,1000);
   c1->Divide(1,2);
   c1->cd(1);
   gPad->SetGridx(); gPad->SetGridy();
   h2spd->Draw("box");
   h2trk->Draw("boxsame");
   gPad->BuildLegend(0.13,0.65,0.46,0.86)->SetFillColor(0);
   TLine *l=new TLine(0,0,70,70);
   l->Draw("same");

   c1->cd(2);
   gPad->SetGridx(); gPad->SetGridy();
   hztrk->Draw();
   hzspd->Draw("same");
   gPad->BuildLegend(0.13,0.65,0.46,0.86)->SetFillColor(0);


   TCanvas *c2=new TCanvas("c2","",0,0,700,1000);
   c2->Divide(1,2);
   c2->cd(1);
   gPad->SetGridx(); gPad->SetGridy();
   heffspd->Divide(hfoundspd,hgood,1,1,"b");
   heffspd->SetMinimum(0.); heffspd->SetMaximum(1.2);
   heffspd->Draw("ehist");
   hefftrk->Divide(hfoundtrk,hgood,1,1,"b");
   hefftrk->Draw("ehistsame");
   heffaketrk->Divide(hfaketrk,hgood,1,1,"b");
   heffaketrk->Draw("ehistsame");
   gPad->BuildLegend(0.13,0.65,0.46,0.86)->SetFillColor(0);

   c2->cd(2);
   hnefftrk->Divide(hnfoundtrk,hngood,1,1,"b");
   hnefftrk->SetMinimum(0.); hnefftrk->SetMaximum(1.2);
   hneffaketrk->Divide(hnfaketrk,hngood,1,1,"b");
   gPad->SetGridx(); gPad->SetGridy();
   hnefftrk->Draw("ehist");
   hneffaketrk->Draw("ehistsame");
   gPad->BuildLegend(0.13,0.65,0.46,0.86)->SetFillColor(0);


   TFile fc("AliITSUComparisonPileup.root","RECREATE");
   c1->Write();
   c2->Write();
   fc.Close();

   return 0;
}

Int_t 
Associate(const AliESDVertex *g,const AliESDVertex *f,const AliESDEvent *esd) { 
   UShort_t *idxg=g->GetIndices(); Int_t ng=g->GetNIndices(); 
   UShort_t *idxf=f->GetIndices(); Int_t nf=f->GetNIndices();

   if (nf==0) { 
   // SPD vertex
       Double_t zg=g->GetZ();
       Double_t zf=f->GetZ();
       if (TMath::Abs(zf-zg)>2e-2) return 0;
       return 1;
   }
   // TRK vertex
   Int_t nass=0;
   for (Int_t i=0; i<ng; i++) {
       UShort_t labg=idxg[i];
       for (Int_t j=0; j<nf; j++) {
           const AliESDtrack *t=esd->GetTrack(idxf[j]);
           UShort_t labf=TMath::Abs(t->GetLabel());
           if (labg != labf) continue;
           nass++;
           break; 
       }
   } 

   return nass;
}

Int_t GoodPileupVertices(const Char_t *dir) {
  Bool_t FindContributors(Float_t tz, AliStack *stack, UShort_t *idx, Int_t &n);
   if (gAlice) { 
       delete AliRunLoader::Instance();
       delete gAlice;//if everything was OK here it is already NULL
       gAlice = 0x0;
   }

   Char_t fname[100];
   sprintf(fname,"%s/galice.root",dir);

   AliRunLoader *rl = AliRunLoader::Open(fname,"COMPARISON");
   if (!rl) {
      ::Error("GoodPileupVertices","Can't start session !");
      return 1;
   }

   rl->LoadgAlice();
   rl->LoadHeader();
   rl->LoadKinematics();


   Int_t nev=rl->GetNumberOfEvents();
   ::Info("GoodPileupVertices","Number of events : %d\n",nev);  

   sprintf(fname,"%s/GoodPileupVertices.root",dir);
   TFile *refFile=TFile::Open(fname,"recreate");
   TClonesArray dummy("AliESDVertex",100), *refs=&dummy;
   TTree refTree("refTree","Tree with the reconstructable vertices");
   refTree.Branch("Vertices",&refs);

   //********  Loop over generated events 
   for (Int_t e=0; e<nev; e++) {
     rl->GetEvent(e);  refFile->cd();
     AliStack* stack = rl->Stack();

     AliHeader *ah=rl->GetHeader();
     AliGenCocktailEventHeader *cock=
            (AliGenCocktailEventHeader*)ah->GenEventHeader();
     TList *headers=cock->GetHeaders();
     const Int_t nvtx=headers->GetEntries();
     const Int_t np=ah->GetNtrack();
     cout<<"Event "<<e<<" Number of vertices, particles: "
	 <<nvtx<<' '<<np<<endl;

     Int_t nv=0;
     for (Int_t v=0; v<nvtx; v++) {
         AliGenEventHeader *h=(AliGenEventHeader *)headers->At(v);
         TArrayF vtx(3); h->PrimaryVertex(vtx);
         Float_t t=h->InteractionTime();
         if (TMath::Abs(t)>tWin) continue;
         UShort_t *idx=new UShort_t[np];
         Int_t ntrk=0;
         if (!FindContributors(t,stack,idx,ntrk)) {delete[] idx; continue;}
         AliESDVertex *vertex=new ((*refs)[nv]) AliESDVertex();
         vertex->SetXv(vtx[0]);
         vertex->SetYv(vtx[1]);
         vertex->SetZv(vtx[2]);
         vertex->SetNContributors(ntrk);
         vertex->SetIndices(ntrk,idx);
         delete[] idx;
         nv++;
     }
     refTree.Fill();
     refs->Clear();
   } //*** end of the loop over generated events

   refTree.Write();
   refFile->Close();

   delete rl;
   return 0;
}

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