ROOT logo
/****************************************************************************
 *           Very important, delicate and rather obscure macro.             *
 *                                                                          *
 *                  Creates list of "findable" V0s,                         *
 *             calculates efficiency, resolutions etc.                      *
 *                                                                          *
 *   To get the list of the "findable" V0s, you should first get the list   *
 *   of "findable" tracks, which can be done by running                     *
 *   TPC/AliTPCComparison.C and ITS/AliITSComparisonV2.C macros.            *
 *                                                                          *
 *   Origin: I.Belikov, IReS, Strasbourg, Jouri.Belikov@cern.ch             *
 ****************************************************************************/

#if !defined(__CINT__) || defined(__MAKECINT__)
  #include <TMath.h>
  #include <TError.h>
  #include <Riostream.h>
  #include <TH1F.h>
  #include <TTree.h>
  #include <TParticle.h>
  #include <TPDGCode.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 "AliESDv0.h"
#endif

Int_t GoodV0s(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 AliV0Comparison(Int_t code=310, const Char_t *dir=".") { 
   //Lambda=3122, LambdaBar=-3122
   gBenchmark->Start("AliV0Comparison");

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


   const Double_t V0window=0.05;
   Double_t ptncut=0.13, ptpcut=0.13, kinecut=0.03; 
   Double_t V0mass=0.497672, V0width=0.020;
   switch (code) {
   case kK0Short: 
        break;
   case kLambda0:    
        V0mass=1.115683; V0width=0.015; ptpcut=0.50; kinecut=0.002; 
        break;
   case kLambda0Bar: 
        V0mass=1.115683; V0width=0.015; ptncut=0.50; kinecut=0.002;
        break;
   default: cerr<<"Invalid PDG code !\n"; return 1;
   }

   TH1F *hp=(TH1F*)gROOT->FindObject("hp");
   if (!hp) hp=new TH1F("hp","PHI 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)",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 Vertices",nchan,pmin,pmax);
    
   TH1F *hfound=(TH1F*)gROOT->FindObject("hfound");
   if (!hfound) hfound=new TH1F("hfound","Found Vertices",nchan,pmin,pmax);

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

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

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


   Double_t mmin=V0mass-V0window, mmax=V0mass+V0window;
   TH1F *v0s=(TH1F*)gROOT->FindObject("v0s");
   if (!v0s) v0s=new TH1F("v0s","V0s Effective Mass",40, mmin, mmax);
   v0s->SetXTitle("(GeV)"); v0s->SetLineColor(4); v0s->SetLineWidth(4);

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


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

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

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

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

      if (v0Tree->GetEvent(e++)==0) {
         cerr<<"No reconstructable V0s !\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;
      Int_t i;
      for (i=0; i<nentr; i++) {
          AliESDv0 *vertex=event->GetV0(i);

          if (vertex->GetOnFlyStatus()) continue;

          Int_t nidx=TMath::Abs(vertex->GetNindex());
          Int_t pidx=TMath::Abs(vertex->GetPindex());

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

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

          /** Kinematical cuts **/
          Double_t pxn,pyn,pzn; vertex->GetNPxPyPz(pxn,pyn,pzn); 
          Double_t ptn=TMath::Sqrt(pxn*pxn + pyn*pyn);
          if (ptn < ptncut) continue;
          Double_t pxp,pyp,pzp; vertex->GetPPxPyPz(pxp,pyp,pzp); 
          Double_t ptp=TMath::Sqrt(pxp*pxp + pyp*pyp);
          if (ptp < ptpcut) continue;
          Double_t kine=vertex->ChangeMassHypothesis(code);
          //if (TMath::Abs(kine)>kinecut) continue;

          Double_t mass=vertex->GetEffMass();
          v0s->Fill(mass);
          v0sf->Fill(mass);

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

          if (TMath::Abs(mass-V0mass)>V0width) continue;

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

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

          pxg=nref->Px()+pref->Px(); pyg=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; vertex->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 *nref=(AliTrackReference*)nrefs->UncheckedAt(i);
         AliTrackReference *pref=(AliTrackReference*)prefs->UncheckedAt(i);
         Int_t pdg=(Int_t)nref->GetLength();//this is the mother's PDG !
         if (code!=pdg) continue;
         ng++;
         pxg=nref->Px()+pref->Px(); pyg=nref->Py()+pref->Py(); 
         ptg=TMath::Sqrt(pxg*pxg+pyg*pyg);
         hgood->Fill(ptg);
         nlab=nref->Label(); plab=pref->Label();
         if (nlab < 0) continue;
         cout<<"Vertex ("<<nlab<<','<<plab<<") has not been found !\n";
      }
      allgood+=ng;

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

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

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

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

   Stat_t ng=hgood->GetEntries(), nf=hfound->GetEntries();
   if (ng!=0) cout<<"Integral efficiency is about "<<nf/ng*100.<<" %\n";
   cout<<"Total number of found V0s: "<<allfound<<" ("<<nf<<" in the peak)\n";
   cout<<"Total number of \"good\" V0s: "<<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("V0 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 vertices");
   text->SetTextSize(0.05);
   text->Draw();
   text = new TText(0.453919,1.11408,"Good vertices");
   text->SetTextSize(0.05);
   text->Draw();


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

   c2->Update();

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

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

   return 0;
}


Int_t GoodV0s(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("GoodTracksITS","Can't start session !");
      return 1;
   }

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


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

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


   sprintf(fname,"%s/GoodV0s.root",dir);
   TFile *v0File=TFile::Open(fname,"recreate");
   TClonesArray dummy("AliTrackReference",1000), *nrefs=&dummy;
   TClonesArray dumm("AliTrackReference",1000), *prefs=&dumm;
   TTree v0Tree("v0Tree","Tree with info about the reconstructable V0s");
   v0Tree.Branch("negative",&nrefs);
   v0Tree.Branch("positive",&prefs);


   /*** Some 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);  v0File->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;

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

         /*** only these V0s are "good" ***/
         Int_t code=p0->GetPdgCode();
         if (code!=kK0Short)
         if (code!=kLambda0)
         if (code!=kLambda0Bar) continue; 

         /*** daughter tracks should be "good" ***/
         Int_t plab=p0->GetFirstDaughter(), nlab=p0->GetLastDaughter();
         if (nlab==plab) continue;
         if (nlab<0) continue;
         if (plab<0) continue;
         Int_t i;
	 TParticle * part = stack->Particle(plab);
	 if (part) {
	   TParticlePDG * partPDG = part->GetPDG();
	     if (partPDG && partPDG->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 ***/
         TParticle *p=stack->Particle(nlab);
         Double_t x=p->Vx(), y=p->Vy(), z=p->Vz(), r2=x*x+y*y;
         if (r2<r2min) continue;
         if (r2>r2max) continue;
       
         Int_t pdg=p0->GetPdgCode();
         nref->SetLength(pdg);  //This will the V0's PDG !

         new((*nrefs)[nv]) AliTrackReference(*nref);
         new((*prefs)[nv]) AliTrackReference(*pref);

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

      v0Tree.Fill();
      nrefs->Clear(); prefs->Clear();

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

   v0Tree.Write();
   v0File->Close();

   delete itsTree;
   itsFile->Close();

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