ROOT logo
/****************************************************************************
 *          A standalone comparison macro for the upgraded ITS.             *
 *                                                                          *
 *               Creates list of "trackable" tracks,                        *
 *             calculates efficiency, resolutions etc.                      *
 *  The ESD tracks must be in an appropriate state: kITSrefit               *
 *                                                                          *
 *          The efficiency and resolutions are calculated                   * 
 *   wrt "primary-like" pions within the acceptance tan(lambda)~[-1,1]      *
 *        and for tracks having all 7 clusters correctly assigned.          *
 *                                                                          *
 * Before running, load the ITSU libraries:                                 *
 *  gSystem->Load("libITSUpgradeBase");gSystem->Load("libITSUpgradeRec");   *
 *                                                                          *
 *           Origin: I.Belikov, IPHC, Iouri.Belikov@iphc.cnrs.fr            *
 ****************************************************************************/

#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <TMath.h>
  #include <TError.h>
  #include <Riostream.h>
  #include <TH1F.h>
  #include <TH2F.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 "AliGenEventHeader.h"
  #include "AliTrackReference.h"
  #include "AliRunLoader.h"
  #include "AliRun.h"
  #include "AliESDEvent.h"
  #include "AliESDtrack.h"

  #include "UPGRADE/AliITSUClusterPix.h"
  #include "UPGRADE/AliITSULoader.h"
#endif

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

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

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

void root(TH1 *h) {
  Int_t nb=h->GetNbinsX();
  for (Int_t i=0; i<nb; i++) {
    Float_t c=h->GetBinContent(i);
    c=TMath::Sqrt(c);
    h->SetBinContent(i,c);

    Float_t e=h->GetBinError(i);
    if (c!=0) e = 0.5*e/c;
    h->SetBinError(i,e);
  }
}
void divide(TH1 *h) {
  Int_t nb=h->GetNbinsX();
  for (Int_t i=0; i<nb; i++) {
    Float_t c=h->GetBinContent(i);
    c *= h->GetBinCenter(i);
    h->SetBinContent(i,c);

    Float_t e=h->GetBinError(i);
    e *= h->GetBinCenter(i);
    h->SetBinError(i,e);
  }
}

Int_t AliITSUComparisonCooked
(Float_t ptcutl=0.01, Float_t ptcuth=10., const Char_t *dir=".") {
   gBenchmark->Start("AliITSUComparisonCooked");

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

   TH1F *hp=(TH1F*)gROOT->FindObject("hp");
   if (!hp) hp=new TH1F("hp","PHI resolution",50,-20.,20.); 
   hp->SetFillColor(4);

   TH1F *hl=(TH1F*)gROOT->FindObject("hl");
   if (!hl) hl=new TH1F("hl","LAMBDA resolution",50,-20,20);
   hl->SetFillColor(4);

   //TH1F *hz=(TH1F*)gROOT->FindObject("hz");
   //if (!hz) hz=new TH1F("hz","Longitudinal impact parameter",30,-777.,777.); 


   Int_t nb=100;
   Float_t xbins[nb+1];
   Double_t a=TMath::Log(ptcuth/ptcutl)/nb;
   for (Int_t i=0; i<=nb; i++) xbins[i] = ptcutl*TMath::Exp(i*a);

   TH1F *hgood=(TH1F*)gROOT->FindObject("hgood");
   if (!hgood) hgood=new TH1F("hgood","Good tracks",nb,xbins);
    
   TH1F *hfound=(TH1F*)gROOT->FindObject("hfound");
   if (!hfound) hfound=new TH1F("hfound","Found tracks",nb,xbins);

   TH1F *hfake=(TH1F*)gROOT->FindObject("hfake");
   if (!hfake) hfake=new TH1F("hfake","Fake tracks",nb,xbins);

   TH1F *hg=(TH1F*)gROOT->FindObject("hg");
   if (!hg) hg=new TH1F("hg","Efficiency for good tracks",nb,xbins);
   hg->SetLineColor(4); hg->SetLineWidth(2);

   TH1F *hf=(TH1F*)gROOT->FindObject("hf");
   if (!hf) hf=new TH1F("hf","Efficiency for fake tracks",nb,xbins);
   hf->SetFillColor(1); hf->SetFillStyle(3013); hf->SetLineWidth(2);

   TH1F *hpt=(TH1F*)gROOT->FindObject("hpt");
   if (!hpt) hpt=new TH1F("hpt","Relative Pt resolution",nb,xbins); 
   hpt->Sumw2();
   TH1F *hd=(TH1F*)gROOT->FindObject("hd");
   if (!hd) 
      hd=new TH1F("hd","Transverse impact parameter",nb,xbins); 
   hd->Sumw2();


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

   TFile *refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
   ::Info("AliITSUComparisonCooked.C","Marking good tracks (will take a while)...");
     if (GoodTracksCooked(dir)) {
        ::Error("AliITSUComparisonCooked.C","Can't generate the reference file !");
        return 1;
     }
   }
   refFile=TFile::Open(fname,"old");
   if (!refFile || !refFile->IsOpen()) {
     ::Error("AliITSUComparisonCooked.C","Can't open the reference file !");
     return 1;
   }   
  
   TTree *itsTree=(TTree*)refFile->Get("itsTree");
   if (!itsTree) {
     ::Error("AliITSUComparisonCooked.C","Can't get the reference tree !");
     return 2;
   }
   TBranch *branch=itsTree->GetBranch("ITS");
   if (!branch) {
     ::Error("AliITSUComparisonCooked.C","Can't get the ITS branch !");
     return 3;
   }
   TClonesArray dummy("AliTrackReference",1000), *refs=&dummy;
   branch->SetAddress(&refs);


   sprintf(fname,"%s/AliESDs.root",dir);
   TFile *ef=TFile::Open(fname);
   if ((!ef)||(!ef->IsOpen())) {
      sprintf(fname,"%s/AliESDits.root",dir);
      ef=TFile::Open(fname);
      if ((!ef)||(!ef->IsOpen())) {
         ::Error("AliITSUComparisonCooked.C","Can't open AliESDits.root !");
         return 4;
      }
   }
   AliESDEvent* event = new AliESDEvent();
   TTree* esdTree = (TTree*) ef->Get("esdTree");
   if (!esdTree) {
      ::Error("AliITSComparison.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->GetNumberOfTracks();
     allfound+=nentr;

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

     Int_t ngood=refs->GetEntriesFast(); 
     allgood+=ngood;

     const Int_t MAX=15000;
     Int_t notf[MAX], nnotf=0;
     Int_t fake[MAX], nfake=0;
     Int_t mult[MAX], numb[MAX], nmult=0;
     Int_t k;
     for (k=0; k<ngood; k++) {
	AliTrackReference *ref=(AliTrackReference*)refs->UncheckedAt(k); 
        Int_t lab=ref->Label(), tlab=-1;
        Float_t ptg=TMath::Sqrt(ref->Px()*ref->Px() + ref->Py()*ref->Py());

        Int_t pdg=(Int_t)ref->GetLength();  //this is particle's PDG !
        if (TMath::Abs(pdg)!=211) continue; //select pions only

        if (ptg<ptcutl) continue;
        if (ptg>ptcuth) continue;

        allselected++;

        hgood->Fill(ptg);

        AliESDtrack *esd=0;
        Int_t cnt=0;
        for (Int_t i=0; i<nentr; i++) {
           AliESDtrack *t=event->GetTrack(i);
	   UInt_t status=t->GetStatus();

           if ((status&AliESDtrack::kITSrefit)==0) continue;
           if (t->GetITSclusters(0)<4) continue;

           Int_t lbl=t->GetLabel();
           if (lab==TMath::Abs(lbl)) {
	      if (cnt==0) {esd=t; tlab=lbl;}
              if (lbl> 0) {esd=t; tlab=lbl;}  
              cnt++;
           }
        }
        if (cnt==0) {
           notf[nnotf++]=lab;
           continue;
        } else if (cnt>1){
           mult[nmult]=lab;
           numb[nmult]=cnt; nmult++;        
        }

        if (lab==tlab) hfound->Fill(ptg);
        else {
          fake[nfake++]=lab;
          hfake->Fill(ptg); 
        }

        if (esd->GetLabel()<0) continue; //resolutions for good tracks only

        Double_t alpha=esd->GetAlpha(),xv,par[5]; 
        esd->GetExternalParameters(xv,par);
        Float_t phi=TMath::ASin(par[2]) + alpha;
        if (phi<-TMath::Pi()) phi+=2*TMath::Pi();
        if (phi>=TMath::Pi()) phi-=2*TMath::Pi();
        Float_t lam=TMath::ATan(par[3]); 
        Float_t pt_1=TMath::Abs(par[4]);

        Float_t phig=TMath::ATan2(ref->Py(),ref->Px());
        hp->Fill((phi - phig)*1000.);

        Float_t lamg=TMath::ATan2(ref->Pz(),ptg);
        hl->Fill((lam - lamg)*1000.);

        Float_t d,z; esd->GetImpactParameters(d,z);
        d*=10000; //microns
        Float_t w=d*d;
        hd->Fill(ptg, w);
        //z*=10000; //microns
        //hz->Fill(z);

        w=(pt_1 - 1/ptg)*100 * (pt_1-1/ptg)*100;
        hpt->Fill(ptg, w);

     }

     cout<<"\nList of Not found tracks :\n";
     for (k=0; k<nnotf; k++){
       cout<<notf[k]<<"\t";
       if ((k%9)==8) cout<<"\n";
     }
     cout<<"\n\nList of fake  tracks :\n";
     for (k=0; k<nfake; k++){
       cout<<fake[k]<<"\t";
       if ((k%9)==8) cout<<"\n";
     }
     cout<<"\n\nList of multiple found tracks :\n";
     for (k=0; k<nmult; k++) {
         cout<<"id.   "<<mult[k]
             <<"     found - "<<numb[k]<<"times\n";
     }
     cout<<endl;

     cout<<"Number of found tracks : "<<nentr<<endl;
     cout<<"Number of \"good\" tracks : "<<ngood<<endl;

     refs->Clear();
   } //***** End of the loop over events

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

   Stat_t ng=hgood->GetEntries(), nf=hfound->GetEntries();
   if (ng!=0) cout<<"\n\nIntegral efficiency is about "<<nf/ng*100.<<" %\n";
   cout<<"Total number selected of \"good\" tracks ="<<allselected<<endl<<endl;
   cout<<"Total number of found tracks ="<<allfound<<endl;
   cout<<"Total number of \"good\" tracks ="<<allgood<<endl;
   cout<<endl;

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

   TCanvas *c1=new TCanvas("c1","",0,0,700,850);

   Int_t minc=33; 

   TPad *p1=new TPad("p1","",0,0.3,.5,.6); p1->Draw();
   p1->cd(); p1->SetFillColor(42); p1->SetFrameFillColor(10); 
   hp->SetFillColor(4);  hp->SetXTitle("(mrad)"); 
   if (hp->GetEntries()<minc) hp->Draw(); else hp->Fit("gaus"); c1->cd();

   TPad *p2=new TPad("p2","",0.5,.3,1,.6); p2->Draw(); 
   p2->cd(); p2->SetFillColor(42); p2->SetFrameFillColor(10);
   hl->SetXTitle("(mrad)");
   if (hl->GetEntries()<minc) hl->Draw(); else hl->Fit("gaus"); c1->cd();

   TPad *p3=new TPad("p3","",0,0,0.5,0.3); 
   p3->SetLogx(); p3->SetGridx(); p3->SetGridy();
   p3->Draw();
   p3->cd(); p3->SetFillColor(42); p3->SetFrameFillColor(10); 
   hpt->SetXTitle("p_{T} (GeV/c)");
   hpt->SetYTitle("(%)");
   TH1F *hh=new TH1F(*hfound);
   //hh->Add(hfake);
   hpt->Divide(hh);
   root(hpt);
   divide(hpt);
   hpt->Draw(); c1->cd();

   TPad *p4=new TPad("p4","",0.5,0,1,0.3); 
   p4->SetLogx(); p4->SetGridx(); p4->SetGridy();
   p4->Draw();
   p4->cd(); p4->SetFillColor(42); p4->SetFrameFillColor(10);
   hd->SetXTitle("p_{T} (GeV/c)");
   hd->SetYTitle("(micron)");
   hd->Divide(hh);
   root(hd);
   hd->Draw(); c1->cd();

   //hz->Draw("same"); c1->cd();
   

   TPad *p5=new TPad("p5","",0,0.6,1,1); 
   p5->SetLogx(); p5->SetGridx(); p5->SetGridy(); 
   p5->Draw(); p5->cd(); 
   p5->SetFillColor(41); p5->SetFrameFillColor(10);
   hfound->Sumw2(); hgood->Sumw2(); hfake->Sumw2();
   hg->Divide(hfound,hgood,1,1.,"b");
   hf->Divide(hfake,hgood,1,1.,"b");
   hg->SetYTitle("Tracking efficiency (%)");
   hg->SetXTitle("p_{T} (GeV/c)");
   hg->Scale(100);
   hg->Draw();

   hf->SetFillColor(1);
   hf->SetFillStyle(3013);
   hf->SetLineColor(2);
   hf->SetLineWidth(2);
   hf->Scale(100);
   hf->Draw("histsame");
   TText *text = new TText(0.4, 20., "Fake tracks");
   text->SetTextSize(0.05);
   text->Draw();
   text = new TText(0.4, 80., "Good tracks");
   text->SetTextSize(0.05);
   text->Draw();

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

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

   return 0;
}



Int_t GoodTracksCooked(const Char_t *dir) {
   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("GoodTracksCooked","Can't start session !");
      return 1;
   }

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

   AliITSULoader* itsl = (AliITSULoader*)rl->GetLoader("ITSLoader");
   if (itsl == 0x0) {
       ::Error("GoodTracksCooked","Can not find the ITSLoader");
       delete rl;
       return 4;
   }
   itsl->LoadRecPoints();
  

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

   sprintf(fname,"%s/GoodTracksCooked.root",dir);
   TFile *itsFile=TFile::Open(fname,"recreate");
   TClonesArray dummy2("AliTrackReference",1000), *itsRefs=&dummy2;
   TTree itsTree("itsTree","Tree with info about the reconstructable ITS tracks");
   itsTree.Branch("ITS",&itsRefs);

   //********  Loop over generated events 
   for (Int_t e=0; e<nev; e++) {
     Int_t k;

     rl->GetEvent(e);  itsFile->cd();

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

     AliGenEventHeader *h=rl->GetHeader()->GenEventHeader();
     TArrayF vtx(3);
     h->PrimaryVertex(vtx);

     Bool_t skip=kFALSE;
     if (TMath::Abs(vtx[2]) > 10.) {
        cout<<"Skipping an event with Zv="<<vtx[2]<<endl;
        skip=kTRUE;
     }
 
     //******** Fill the "good" masks
     Int_t *good=new Int_t[np]; for (k=0; k<np; k++) good[k]=0;

     TTree *cTree=itsl->TreeR();
     if (!cTree) {
        ::Error("GoodTracksCooked","Can't get the cluster tree !"); 
        delete rl;
        return 8;
     }

     const Int_t nLayers=7;
     TBranch *branch[nLayers];
     TClonesArray clusters[nLayers];
     for (Int_t layer=0; layer<nLayers; layer++) {
       TClonesArray *ptr = 
       new(clusters+layer) TClonesArray("AliITSUClusterPix",1000);
       Char_t bname[33];
       sprintf(bname,"ITSRecPoints%d\0",layer);
       branch[layer]=cTree->GetBranch(bname);
       if (!branch[layer]) {
          ::Error("GoodTracksCooked","Can't get the clusters branch !"); 
          delete rl;
          return 9;
       }
       branch[layer]->SetAddress(&ptr);
     }

     Int_t entr=(Int_t)cTree->GetEntries();
     for (k=0; k<entr; k++) {
         cTree->GetEvent(k);
         for (Int_t lay=0; lay<nLayers; lay++) {
             Int_t ncl=clusters[lay].GetEntriesFast(); if (ncl==0) continue;
             while (ncl--) {
                AliITSUClusterPix *pnt=
                (AliITSUClusterPix*)clusters[lay].UncheckedAt(ncl);
                Int_t l0=pnt->GetLabel(0);
	        if (l0>=np) {
// 		   cerr<<"Wrong label: "<<l0<<endl;
		   continue;
	        }
                Int_t l1=pnt->GetLabel(1);
	        if (l1>=np) {
// 		   cerr<<"Wrong label: "<<l1<<endl;
		   continue;
	        }
                Int_t l2=pnt->GetLabel(2);
	        if (l2>=np) {
// 		   cerr<<"Wrong label: "<<l2<<endl;
		   continue;
	        }
                Int_t mask=1<<lay;
                if (l0>=0) good[l0]|=mask; 
                if (l1>=0) good[l1]|=mask; 
                if (l2>=0) good[l2]|=mask;
	     }
             clusters[lay].Clear();
	 }
     }



     //****** select tracks which are "good" enough
     AliStack* stack = rl->Stack();
     Int_t nt=0;
     for (k=0; k<np; k++) {
        if (good[k] != 0x7F) continue;

        if (skip) continue; //No good primary vertex for this event

        TParticle *p = (TParticle*)stack->Particle(k);
        if (p == 0x0) {
           cerr<<"Can not get particle "<<k<<endl;
           continue;
        }

        if (p->Pt() <= 0.) continue;
        if (TMath::Abs(p->Pz()/p->Pt())>0.999) continue;

        Double_t dx=p->Vx()-vtx[0], dy=p->Vy()-vtx[1], dz=p->Vz()-vtx[2];
        if (TMath::Sqrt(dx*dx+dy*dy)>0.0001) continue; //Primary-like
        if (TMath::Abs(dz) > 0.0001) continue;

	AliTrackReference *ref=new((*itsRefs)[nt]) AliTrackReference();
        ref->SetLabel(k);
        Int_t pdg=p->GetPdgCode();
        ref->SetLength(pdg);  //This will the particle's PDG !
	ref->SetMomentum(p->Px(),p->Py(),p->Pz());
	ref->SetPosition(p->Vx(),p->Vy(),p->Vz());
        nt++;
     }

     itsTree.Fill();
     itsRefs->Clear();

     delete[] good;

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

   itsTree.Write();
   itsFile->Close();

   delete rl;
   return 0;
}


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