ROOT logo
//********************************************************************
//     Example (very naive for the moment) of the data analysis 
//                    using the ESD classes
//     Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
//********************************************************************

#if !defined( __CINT__) || defined(__MAKECINT__)
  #include <Riostream.h>
  #include <TTree.h>
  #include "TFile.h"
  #include "TH1F.h"
  #include "TCanvas.h"
  #include "TStyle.h"
  #include "TStopwatch.h"

  #include "AliESDEvent.h"
#endif

extern TStyle *gStyle;

Int_t AliESDanalysis() { 
   TStopwatch timer;

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

   Double_t V0mass=0.497672, V0width=0.020, V0window=0.05; 
   Double_t mmin=V0mass-V0window, mmax=V0mass+V0window;
   TH1F *hm =new TH1F("hm","K0s",40, mmin, mmax);
   hm->SetXTitle("Mass (GeV/c**2)"); hm->SetLineColor(2);
   TH1F *hp =new TH1F("hp","Momentum of the positive daughter",40, 0, 2);
   hp->SetXTitle("P (GeV/c)"); hp->SetLineColor(4);

//****** File with the ESD
   TFile *ef=TFile::Open("AliESDs.root");
   if (!ef || !ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;}
   AliESDEvent* event = new AliESDEvent();
   TTree* tree = (TTree*) ef->Get("esdTree");
   if (!tree) {cerr<<"no ESD tree found\n"; return 1;};
   event->ReadFromTree(tree);

   Int_t n=0;

//******* The loop over events
   while (tree->GetEvent(n)) {
     cout<<endl<<"Processing event number : "<<n++<<endl;

     Int_t ntrk=event->GetNumberOfTracks();
     cout<<"Number of ESD tracks : "<<ntrk<<endl; 
     Int_t nv0=event->GetNumberOfV0s();
     cout<<"Number of ESD V0s : "<<nv0<<endl; 
     Int_t ncas=event->GetNumberOfCascades();
     cout<<"Number of ESD cascades : "<<ncas<<endl; 

     //****** The loop over tracks
     Int_t nk=0;
     while (ntrk--) {
        AliESDtrack *track=event->GetTrack(ntrk);
        UInt_t status=track->GetStatus();

	//select only tracks with the "combined PID"
        if ((status&AliESDtrack::kESDpid)==0) continue;

        Double_t w[10]; track->GetESDpid(w);
        //count only "Kaon-like" tracks
        if (w[3]>w[4] && w[3]>w[2] && w[3]>w[1] && w[3]>w[0]) nk++;        
     }
     cout<<"Number of \"Kaon-like\" tracks : "<<nk<<endl;

     //****** The loop over V0s
     while (nv0--) {
        AliESDv0 *v0=event->GetV0(nv0);
        v0->ChangeMassHypothesis(310); // K0s
        Double_t mass=v0->GetEffMass();
        hm->Fill(mass);

        Int_t pidx=v0->GetPindex();               // now let's get an access  
        AliESDtrack *track=event->GetTrack(pidx); // to the positive daughter
        Double_t p=track->GetP();
        hp->Fill(p);
     }

     //****** The loop over cascades
     while (ncas--) {
        AliESDcascade *cas=event->GetCascade(ncas);
        Double_t q; //"quality" of the associated Lambda
        cas->ChangeMassHypothesis(q,3312); // Xi-
        // Here you do something with your Xis
        //  ...
        // You can get the access to the daughters
     }

   }

   delete event;
   ef->Close();

   timer.Stop(); timer.Print();

   TCanvas *c1=new TCanvas("c1","",0,0,600,1200);
   c1->Divide(1,2);

   c1->cd(1);
   hm->Fit("gaus","","",V0mass-V0width,V0mass+V0width);

   c1->cd(2);
   hp->Fit("expo","","",0.3,2); 

   return 0;
}
 AliESDanalysis.C:1
 AliESDanalysis.C:2
 AliESDanalysis.C:3
 AliESDanalysis.C:4
 AliESDanalysis.C:5
 AliESDanalysis.C:6
 AliESDanalysis.C:7
 AliESDanalysis.C:8
 AliESDanalysis.C:9
 AliESDanalysis.C:10
 AliESDanalysis.C:11
 AliESDanalysis.C:12
 AliESDanalysis.C:13
 AliESDanalysis.C:14
 AliESDanalysis.C:15
 AliESDanalysis.C:16
 AliESDanalysis.C:17
 AliESDanalysis.C:18
 AliESDanalysis.C:19
 AliESDanalysis.C:20
 AliESDanalysis.C:21
 AliESDanalysis.C:22
 AliESDanalysis.C:23
 AliESDanalysis.C:24
 AliESDanalysis.C:25
 AliESDanalysis.C:26
 AliESDanalysis.C:27
 AliESDanalysis.C:28
 AliESDanalysis.C:29
 AliESDanalysis.C:30
 AliESDanalysis.C:31
 AliESDanalysis.C:32
 AliESDanalysis.C:33
 AliESDanalysis.C:34
 AliESDanalysis.C:35
 AliESDanalysis.C:36
 AliESDanalysis.C:37
 AliESDanalysis.C:38
 AliESDanalysis.C:39
 AliESDanalysis.C:40
 AliESDanalysis.C:41
 AliESDanalysis.C:42
 AliESDanalysis.C:43
 AliESDanalysis.C:44
 AliESDanalysis.C:45
 AliESDanalysis.C:46
 AliESDanalysis.C:47
 AliESDanalysis.C:48
 AliESDanalysis.C:49
 AliESDanalysis.C:50
 AliESDanalysis.C:51
 AliESDanalysis.C:52
 AliESDanalysis.C:53
 AliESDanalysis.C:54
 AliESDanalysis.C:55
 AliESDanalysis.C:56
 AliESDanalysis.C:57
 AliESDanalysis.C:58
 AliESDanalysis.C:59
 AliESDanalysis.C:60
 AliESDanalysis.C:61
 AliESDanalysis.C:62
 AliESDanalysis.C:63
 AliESDanalysis.C:64
 AliESDanalysis.C:65
 AliESDanalysis.C:66
 AliESDanalysis.C:67
 AliESDanalysis.C:68
 AliESDanalysis.C:69
 AliESDanalysis.C:70
 AliESDanalysis.C:71
 AliESDanalysis.C:72
 AliESDanalysis.C:73
 AliESDanalysis.C:74
 AliESDanalysis.C:75
 AliESDanalysis.C:76
 AliESDanalysis.C:77
 AliESDanalysis.C:78
 AliESDanalysis.C:79
 AliESDanalysis.C:80
 AliESDanalysis.C:81
 AliESDanalysis.C:82
 AliESDanalysis.C:83
 AliESDanalysis.C:84
 AliESDanalysis.C:85
 AliESDanalysis.C:86
 AliESDanalysis.C:87
 AliESDanalysis.C:88
 AliESDanalysis.C:89
 AliESDanalysis.C:90
 AliESDanalysis.C:91
 AliESDanalysis.C:92
 AliESDanalysis.C:93
 AliESDanalysis.C:94
 AliESDanalysis.C:95
 AliESDanalysis.C:96
 AliESDanalysis.C:97
 AliESDanalysis.C:98
 AliESDanalysis.C:99
 AliESDanalysis.C:100
 AliESDanalysis.C:101
 AliESDanalysis.C:102
 AliESDanalysis.C:103
 AliESDanalysis.C:104
 AliESDanalysis.C:105
 AliESDanalysis.C:106
 AliESDanalysis.C:107
 AliESDanalysis.C:108
 AliESDanalysis.C:109
 AliESDanalysis.C:110
 AliESDanalysis.C:111