ROOT logo
/****************************************************************************
 *           Very important, delicate and rather obscure macro.             *
 *                                                                          *
 *               Creates list of "findable" cascades,                       *
 *             calculates efficiency, resolutions etc.                      *
 *                                                                          *
 *  Origin: Christian Kuhn, IReS, Strasbourg, christian.kuhn@ires.in2p3.fr  *
 ****************************************************************************/

#include <TPDGCode.h>
#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <TMath.h>
  #include <TError.h>
  #include <Riostream.h>
  #include <TH1F.h>
  #include <TTree.h>
  #include <TParticle.h>
  #include <TCanvas.h>
  #include <TLine.h>
  #include <TText.h>
  #include <TBenchmark.h>
  #include <TStyle.h>
  #include <TFile.h>
  #include <TROOT.h>

  #include "AliStack.h"
  #include "AliHeader.h"
  #include "AliTrackReference.h"
  #include "AliRunLoader.h"
  #include "AliRun.h"
  #include "AliESDEvent.h"
  #include "AliESDcascade.h"
#endif

Int_t GoodCascades(const Char_t *dir=".");

extern AliRun *gAlice;
extern TBenchmark *gBenchmark;
extern TROOT *gROOT;

static Int_t allgood=0;
static Int_t allfound=0;

Int_t AliCascadeComparison(Int_t code=3312, const Char_t *dir=".") {
  //code= 3312; //kXiMinus 
  //code=-3312; //kXiPlusBar
  //code= 3334; //kOmegaMinus
  //code=-3334; //kOmegaPlusBar
   gBenchmark->Start("AliCascadeComparison");

   ::Info("AliCascadeComparison.C","Doing comparison...");

   const Double_t cascadeWindow=0.05, cascadeWidth=0.015; 
   Double_t ptncut=0.12, ptpcut=0.33, kine0cut=0.003;
   Double_t ptbcut=0.11, kinecut=0.002;
   Double_t cascadeMass=1.32131;
   switch (code) {
   case kXiMinus:
        break;
   case kXiPlusBar:
        ptncut=0.33; ptpcut=0.12;
        break;
   case kOmegaMinus: 
        cascadeMass=1.67245;
        kine0cut=0.001;
        ptbcut=0.22; kinecut=0.006;
        break; 
   case kOmegaPlusBar:
        cascadeMass=1.67245; 
        kine0cut=0.001;
        ptncut=0.33; ptpcut=0.12;
        ptbcut=0.22; kinecut=0.006;
        break;
   default: cerr<<"Invalid PDG code !\n"; return 1;
   }


   TH1F *hp=(TH1F*)gROOT->FindObject("hp");
   if (!hp) hp=new TH1F("hp","Angular Resolution",30,-30.,30.);
   hp->SetXTitle("(mrad)"); hp->SetFillColor(2);

   TH1F *hl=(TH1F*)gROOT->FindObject("hl");
   if (!hl) hl=new TH1F("hl","Lambda Resolution",30,-30,30);
   hl->SetXTitle("(mrad)"); hl->SetFillColor(1); hl->SetFillStyle(3013);
 
   TH1F *hpt=(TH1F*)gROOT->FindObject("hpt");
   if (!hpt) hpt=new TH1F("hpt","Relative Pt Resolution",30,-10.,10.); 
   hpt->SetXTitle("(%)"); hpt->SetFillColor(2); 

   TH1F *hx=(TH1F*)gROOT->FindObject("hx");
   if (!hx) hx=new TH1F("hx","Position Resolution (X,Y)",30,-3.,3.);
   hx->SetXTitle("(mm)"); hx->SetFillColor(6);

   TH1F *hy=(TH1F*)gROOT->FindObject("hy");
   if (!hy) hy=new TH1F("hy","Position Resolution (Y)",30,-3.,3.);  
   hy->SetXTitle("(mm)"); hy->SetFillColor(1); hy->SetFillStyle(3013);

   TH1F *hz=(TH1F*)gROOT->FindObject("hz");
   if (!hz) hz=new TH1F("hz","Position Resolution (Z)",30,-3.,3.);
   hz->SetXTitle("(mm)"); hz->SetFillColor(6);


   Double_t pmin=0.2, pmax=4.2; Int_t nchan=20;
   TH1F *hgood=(TH1F*)gROOT->FindObject("hgood");    
   if (!hgood) hgood=new TH1F("hgood","Good Cascades",nchan,pmin,pmax);
    
   TH1F *hfound=(TH1F*)gROOT->FindObject("hfound");
   if (!hfound) hfound=new TH1F("hfound","Found Cascades",nchan,pmin,pmax);

   TH1F *hfake=(TH1F*)gROOT->FindObject("hfake");
   if (!hfake) hfake=new TH1F("hfake","Fake Cascades",nchan,pmin,pmax);

   TH1F *hg=(TH1F*)gROOT->FindObject("hg");
   if (!hg) hg=new TH1F("hg","Efficiency for Good Cascades",nchan,pmin,pmax);
   hg->SetLineColor(4); hg->SetLineWidth(2);

   TH1F *hf=(TH1F*)gROOT->FindObject("hf");
   if (!hf) hf=new TH1F("hf","Probability of Fake Cascades",nchan,pmin,pmax);
   hf->SetFillColor(1); hf->SetFillStyle(3013); hf->SetLineWidth(2);


   Double_t mmin=cascadeMass-cascadeWindow, mmax=cascadeMass+cascadeWindow;
   TH1F *cs=(TH1F*)gROOT->FindObject("cs");
   if (!cs) cs=new TH1F("cs","Cascade Effective Mass",40, mmin, mmax);
   cs->SetXTitle("(GeV)"); cs->SetLineColor(4); cs->SetLineWidth(4);

   TH1F *csf=(TH1F*)gROOT->FindObject("csf");
   if (!csf) csf=new TH1F("csf","Fake Cascade Effective Mass",40, mmin, mmax);
   csf->SetXTitle("(GeV)"); csf->SetFillColor(6);


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

   TFile *refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
   ::Info("AliCascadeComparison.C","Marking good cascades (will take a while)...");
     if (GoodCascades(dir)) {
        ::Error("AliCascadesComparison.C","Can't generate the reference file !");
        return 1;
     }
   }
   refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
     ::Error("AliCascadeComparison.C","Can't open the reference file !");
     return 1;
   }   
  
   TTree *csTree=(TTree*)refFile->Get("csTree");
   if (!csTree) {
     ::Error("AliCascadeComparison.C","Can't get the reference tree !");
     return 2;
   }
   TBranch *pbranch=csTree->GetBranch("positive");
   if (!pbranch) {
     ::Error("AliCascadeComparison.C","Can't get the positive daughter branch !");
     return 3;
   }
   TClonesArray dummy("AliTrackReference",1000), *prefs=&dummy;
   pbranch->SetAddress(&prefs);

   TBranch *nbranch=csTree->GetBranch("negative");
   if (!nbranch) {
     ::Error("AliCascadeComparison.C","Can't get the negative daughter branch !");
     return 4;
   }
   TClonesArray dumm("AliTrackReference",1000), *nrefs=&dumm;
   nbranch->SetAddress(&nrefs);

   TBranch *bbranch=csTree->GetBranch("bachelor");
   if (!nbranch) {
     ::Error("AliCascadeComparison.C","Can't get the bachelor branch !");
     return 4;
   }
   TClonesArray dum("AliTrackReference",1000), *brefs=&dum;
   bbranch->SetAddress(&brefs);


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


   //******* Loop over events *********
   Int_t e=0;
   while (esdTree->GetEvent(e)) {
      cout<<endl<<endl<<"********* Processing event number: "<<e<<"*******\n";
 
      Int_t nentr=event->GetNumberOfCascades();
      allfound+=nentr;


      if (csTree->GetEvent(e++)==0) {
         cerr<<"No reconstructable cascades !\n";
         continue;
      }

      Int_t ngood=prefs->GetEntriesFast(),ng=0; 

      Double_t pxg=0.,pyg=0.,pzg=0.,ptg=0.;
      Int_t nlab=-1, plab=-1, blab=-1;
      Int_t i;
      for (i=0; i<nentr; i++) {
          AliESDcascade *cascade=event->GetCascade(i);

          Int_t nidx=TMath::Abs(cascade->GetNindex());
          Int_t pidx=TMath::Abs(cascade->GetPindex());
          Int_t bidx=TMath::Abs(cascade->GetBindex());

          AliESDtrack *ntrack=event->GetTrack(nidx);
          AliESDtrack *ptrack=event->GetTrack(pidx);
          AliESDtrack *btrack=event->GetTrack(bidx);

          nlab=TMath::Abs(ntrack->GetLabel()); 
          plab=TMath::Abs(ptrack->GetLabel());
          blab=TMath::Abs(btrack->GetLabel());

          /** Kinematical cuts **/
          Double_t pxn,pyn,pzn; cascade->GetNPxPyPz(pxn,pyn,pzn); 
          Double_t ptn=TMath::Sqrt(pxn*pxn + pyn*pyn);
          if (ptn < ptncut) continue;
          Double_t pxp,pyp,pzp; cascade->GetPPxPyPz(pxp,pyp,pzp); 
          Double_t ptp=TMath::Sqrt(pxp*pxp + pyp*pyp);
          if (ptp < ptpcut) continue;
          Double_t pxb,pyb,pzb; cascade->GetBPxPyPz(pxb,pyb,pzb); 
          Double_t ptb=TMath::Sqrt(pxb*pxb + pyb*pyb);
          if (ptb < ptbcut) continue;
          Double_t kine0;
          Double_t kine=cascade->ChangeMassHypothesis(kine0,code);
          if (TMath::Abs(kine0)>kine0cut) continue;
          //if (TMath::Abs(kine)>kinecut) continue;

          Double_t mass=cascade->GetEffMass();
          cs->Fill(mass);
          csf->Fill(mass);

          AliTrackReference *nref=0, *pref=0, *bref=0;
          Int_t j;
          for (j=0; j<ngood; j++) {
              bref=(AliTrackReference*)brefs->UncheckedAt(j);
              nref=(AliTrackReference*)nrefs->UncheckedAt(j);
              pref=(AliTrackReference*)prefs->UncheckedAt(j);
              if (bref->Label() == blab)
              if (nref->Label() == nlab)
              if (pref->Label() == plab) break;
          }

          if (TMath::Abs(mass-cascadeMass)>cascadeWidth) continue;

          Double_t px,py,pz; cascade->GetPxPyPz(px,py,pz);
          Double_t pt=TMath::Sqrt(px*px+py*py);

          if (j==ngood) {
             hfake->Fill(pt);
             cout<<"Fake cascade: ("<<nlab<<","<<plab<<","<<blab<<")\n";
             continue;
          }
          csf->Fill(mass,-1);

          pxg=bref->Px()+nref->Px()+pref->Px(); 
          pyg=bref->Px()+nref->Py()+pref->Py(); 
          pzg=nref->Pz()+pref->Pz(); 
          ptg=TMath::Sqrt(pxg*pxg+pyg*pyg);
          Double_t phig=TMath::ATan2(pyg,pxg), phi=TMath::ATan2(py,px);
          Double_t lamg=TMath::ATan2(pzg,ptg), lam=TMath::ATan2(pz,pt);
          hp->Fill((phi - phig)*1000.);
          hl->Fill((lam - lamg)*1000.);
          hpt->Fill((1/pt - 1/ptg)/(1/ptg)*100.);

          Double_t x,y,z; cascade->GetXYZ(x,y,z);
          hx->Fill((x-nref->X())*10);
          hy->Fill((y-nref->Y())*10);
          hz->Fill((z-nref->Z())*10);

          hfound->Fill(ptg);
          nref->SetLabel(-1);

      }
      for (i=0; i<ngood; i++) {
         AliTrackReference *bref=(AliTrackReference*)brefs->UncheckedAt(i);
         AliTrackReference *nref=(AliTrackReference*)nrefs->UncheckedAt(i);
         AliTrackReference *pref=(AliTrackReference*)prefs->UncheckedAt(i);
         Int_t pdg=(Int_t)nref->GetLength();  //this is the cascade's PDG !
         if (code!=pdg) continue;
         ng++;
         pxg=bref->Px()+nref->Px()+pref->Px(); 
         pyg=bref->Px()+nref->Py()+pref->Py(); 
         ptg=TMath::Sqrt(pxg*pxg+pyg*pyg);
         hgood->Fill(ptg);
         nlab=nref->Label(); plab=pref->Label(); blab=bref->Label();
         if (nlab < 0) continue;
         cout<<"Cascade ("<<nlab<<','<<plab<<","<<blab<<") has not been found !\n";
      }
      allgood+=ng;

      cout<<"Number of found cascades : "<<nentr<<endl;
      cout<<"Number of \"good\" cascades : "<<ng<<endl;

      brefs->Clear();
      prefs->Clear();
      nrefs->Clear();

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

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

   delete csTree;
   refFile->Close();

   Stat_t ngg=hgood->GetEntries(), nf=hfound->GetEntries();
   if (ngg!=0) cout<<"Integral efficiency is about "<<nf/ngg*100.<<" %\n";
   cout<<
   "Total number of found cascades: "<<allfound<<" ("<<nf<<" in the peak)\n";
   cout<<"Total number of \"good\" cascades: "<<allgood<<endl;


   gStyle->SetOptStat(111110);
   gStyle->SetOptFit(1);

   TCanvas *c1=(TCanvas*)gROOT->FindObject("c1");
   if (!c1) {
      c1=new TCanvas("c1","",0,0,580,610);
      c1->Divide(2,2);
   }

   Int_t minc=33; 

   c1->cd(1);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10); 
   if (hp->GetEntries()<minc) hp->Draw(); else hp->Fit("gaus");
   hl->Draw("same"); c1->cd();

   c1->cd(2);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10);
   if (hpt->GetEntries()<minc) hpt->Draw(); else hpt->Fit("gaus");
   c1->cd();

   c1->cd(3);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10); 
   if (hx->GetEntries()<minc) hx->Draw(); else hx->Fit("gaus"); 
   hy->Draw("same"); c1->cd();

   c1->cd(4);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10);
   if (hz->GetEntries()<minc) hz->Draw(); else hz->Fit("gaus");

   c1->Update();

   TCanvas *c2=(TCanvas*)gROOT->FindObject("c2");
   if (!c2) {
      c2=new TCanvas("c2","",600,0,580,610);
      c2->Divide(1,2);
   }

   c2->cd(1);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10);
   hfound->Sumw2(); hgood->Sumw2(); hfake->Sumw2();
   hg->Divide(hfound,hgood,1,1.,"b");
   hf->Divide(hfake,hgood,1,1.,"b");
   hg->SetMaximum(1.4);
   hg->SetYTitle("Cascade reconstruction efficiency");
   hg->SetXTitle("Pt (GeV/c)");
   hg->Draw();

   TLine *line1 = new TLine(pmin,1.0,pmax,1.0); line1->SetLineStyle(4);
   line1->Draw("same");
   TLine *line2 = new TLine(pmin,0.9,pmax,0.9); line2->SetLineStyle(4);
   line2->Draw("same");

   hf->SetFillColor(1);
   hf->SetFillStyle(3013);
   hf->SetLineColor(2);
   hf->SetLineWidth(2);
   hf->Draw("histsame");
   TText *text = new TText(0.461176,0.248448,"Fake cascades");
   text->SetTextSize(0.05);
   text->Draw();
   text = new TText(0.453919,1.11408,"Good cascades");
   text->SetTextSize(0.05);
   text->Draw();


   c2->cd(2);
   gPad->SetFillColor(42); gPad->SetFrameFillColor(10);
   if (cs->GetEntries()<minc) cs->Draw();
   else cs->Fit("gaus","","",cascadeMass-cascadeWidth,cascadeMass+cascadeWidth);
   csf->Draw("same");
   Double_t max=cs->GetMaximum();
   TLine *line3 = 
      new TLine(cascadeMass-cascadeWidth,0.,cascadeMass-cascadeWidth,max);
   line3->Draw("same");
   TLine *line4 = 
      new TLine(cascadeMass+cascadeWidth,0.,cascadeMass+cascadeWidth,max);
   line4->Draw("same");

   c2->Update();

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

   gBenchmark->Stop("AliCascadeComparison");
   gBenchmark->Show("AliCascadeComparison");


   return 0;
}


Int_t GoodCascades(const Char_t *dir) {
   if (gAlice) {
      delete AliRunLoader::Instance();
      delete gAlice; 
      gAlice=0;
   }   

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

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

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


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

 
   sprintf(fname,"%s/GoodTracksITS.root",dir);
   TFile *itsFile=TFile::Open(fname);
   if ((!itsFile)||(!itsFile->IsOpen())) {
       ::Error("GoodCAscades","Can't open the GoodTracksITS.root !");
       delete rl;
       return 5; 
   }
   TClonesArray dm("AliTrackReference",1000), *itsRefs=&dm;
   TTree *itsTree=(TTree*)itsFile->Get("itsTree");
   if (!itsTree) {
       ::Error("GoodCascades","Can't get the ITS reference tree !");
       delete rl;
       return 6;
   }
   TBranch *itsBranch=itsTree->GetBranch("ITS");
   if (!itsBranch) {
      ::Error("GoodCascades","Can't get the ITS reference branch !");
      delete rl;
      return 7;
   }
   itsBranch->SetAddress(&itsRefs);


   sprintf(fname,"%s/GoodCascades.root",dir);
   TFile *csFile=TFile::Open(fname,"recreate");
   TClonesArray dummy("AliTrackReference",1000), *nrefs=&dummy;
   TClonesArray dumm("AliTrackReference",1000), *prefs=&dumm;
   TClonesArray dum("AliTrackReference",1000), *brefs=&dum;
   TTree csTree("csTree","Tree with info about the reconstructable cascades");
   csTree.Branch("negative",&nrefs);
   csTree.Branch("positive",&prefs);
   csTree.Branch("bachelor",&brefs);


   // *** Get information about the cuts ***
   Double_t r2min=0.9*0.9;
   Double_t r2max=2.9*2.9;


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

      Int_t np = rl->GetHeader()->GetNtrack();
      cout<<"Event "<<e<<" Number of particles: "<<np<<endl;

      itsTree->GetEvent(e);
      Int_t nk=itsRefs->GetEntriesFast();

      AliStack *stack=rl->Stack();

      AliTrackReference *nref=0, *pref=0, *bref=0;

      Int_t nc=0;
      while (np--) {
	 //cerr<<np<<'\r';
         TParticle *cp=stack->Particle(np);

         // *** only these cascades are "good" ***
         Int_t code=cp->GetPdgCode();
         if (code!=kXiMinus)    if (code!=kXiPlusBar)
         if (code!=kOmegaMinus) if (code!=kOmegaPlusBar) continue; 

         // *** daughter tracks must be "good" ***
         Int_t v0lab=cp->GetFirstDaughter(), blab=cp->GetLastDaughter();
         if (v0lab==blab) continue;
         if (v0lab<0) continue;
         if (blab<0) continue;

         TParticle *p0=stack->Particle(v0lab);
         TParticle *bp=stack->Particle(blab);
         Int_t i;
         if ((p0->GetPdgCode()!=kLambda0) && (p0->GetPdgCode()!=kLambda0Bar)) {
            TParticle *p=p0; p0=bp; bp=p;
            i=v0lab; v0lab=blab; blab=i;         
            if ((p0->GetPdgCode()!=kLambda0)&&(p0->GetPdgCode()!=kLambda0Bar))
                                                                   continue;
         }

         // ** is the bachelor "good" ? **
         for (i=0; i<nk; i++) {
	     bref=(AliTrackReference*)itsRefs->UncheckedAt(i);
             if (bref->Label()==blab) break;
         }
         if (i==nk) continue; 

         // ** is the V0 "good" ? **
         Int_t plab=p0->GetFirstDaughter(), nlab=p0->GetLastDaughter();
         if (nlab==plab) continue;
         if (nlab<0) continue;
         if (plab<0) continue;
         if (stack->Particle(plab)->GetPDG()->Charge() < 0.) {
            i=plab; plab=nlab; nlab=i;
         }
         for (i=0; i<nk; i++) {
	     nref=(AliTrackReference*)itsRefs->UncheckedAt(i);
             if (nref->Label()==nlab) break;
         }
         if (i==nk) continue;
         for (i=0; i<nk; i++) {
	     pref=(AliTrackReference*)itsRefs->UncheckedAt(i);
             if (pref->Label()==plab) break;
         }
         if (i==nk) continue;


         // *** fiducial volume ***
         Double_t x=bp->Vx(), y=bp->Vy(), r2=x*x+y*y; //bachelor
         if (r2<r2min) continue;
         if (r2>r2max) continue;
         TParticle *pp=stack->Particle(plab);
         x=pp->Vx(); y=pp->Vy(); r2=x*x+y*y;          //V0
         if (r2<r2min) continue;
         if (r2>r2max) continue;

         Int_t pdg=cp->GetPdgCode();
         nref->SetLength(pdg);  //This will the cascade's PDG !

         new((*nrefs)[nc]) AliTrackReference(*nref);
         new((*prefs)[nc]) AliTrackReference(*pref);
         new((*brefs)[nc]) AliTrackReference(*bref);

         nc++;
      }
      itsRefs->Clear();

      csTree.Fill();
      nrefs->Clear(); prefs->Clear(); brefs->Clear();

   } //**** end of the loop over generated events

   csTree.Write();
   csFile->Close();

   delete itsTree;
   itsFile->Close();

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