ROOT logo
//********************************************************************
//     Example (very naive for the moment) of the data analysis 
//                    using the ESD classes.
//       It demonstrates the idea of the "combined PID" 
//            applied to the Lambda0 reconstruction. 
//      Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
//********************************************************************

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

  #include "AliESDEvent.h"
  #include "AliESDv0.h"
#endif

extern TROOT *gROOT;

Int_t AliESDv0Analysis(const Char_t *dir=".") { 
   TH1F *hm=(TH1F*)gROOT->FindObject("hm");
   if (!hm) {
      hm=new TH1F("hm","Lambda+LambdaBar Effective Mass",60,1.065,1.165);
      hm->SetXTitle("Mass (GeV/c**2)");
   }
   Char_t fname[100];
   sprintf(fname,"%s/AliESDs.root",dir);
   TFile *ef=TFile::Open(fname);
   if (!ef||!ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;}
   cerr<<"\n****** "<<fname<<" ******\n";

   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 rc=0,n=0;

   //****** Tentative particle type "concentrations"
   Double_t c[5]={0.0, 0.0, 1, 0, 1};
   AliPID pid;
   pid.SetPriors(c);

   //******* The loop over events
    while (tree->GetEvent(n)) {

     cerr<<"Processing event number : "<<n++<<endl;

     Int_t nv0=event->GetNumberOfV0s();
     cerr<<"Number of ESD v0s : "<<nv0<<endl; 

     while (nv0--) {
       AliESDv0 *v0=event->GetV0(nv0);
       if (v0->GetOnFlyStatus()) continue;

       Int_t protonIdx=v0->GetPindex();
       Int_t pionIdx  =v0->GetNindex();
      
       v0->ChangeMassHypothesis(3122);
       Double_t mass=v0->GetEffMass();
       if (mass>1.17) {  //check also the LambdaBar hypothesis
          v0->ChangeMassHypothesis(-3122);
          mass=v0->GetEffMass();
          if (mass>1.17) continue;
          Int_t tmp=protonIdx; protonIdx=pionIdx; pionIdx=tmp;
       } 

       AliESDtrack *protonTrk=event->GetTrack(protonIdx);
       AliESDtrack *pionTrk  =event->GetTrack(pionIdx);

       if (protonTrk->GetP()<0.5) continue;

       // Check if the "proton track" is a proton
       if ((protonTrk->GetStatus()&AliESDtrack::kESDpid)!=0) {
	 Double_t r[10]; protonTrk->GetESDpid(r);
         pid.SetProbabilities(r);
         Double_t pp=pid.GetProbability(AliPID::kProton);
         if (pp < pid.GetProbability(AliPID::kElectron)) continue;
         if (pp < pid.GetProbability(AliPID::kMuon)) continue;
         if (pp < pid.GetProbability(AliPID::kPion)) continue;
         if (pp < pid.GetProbability(AliPID::kKaon)) continue;
       }
 
       //Check if the "pion track" is a pion
       if ((pionTrk->GetStatus()&AliESDtrack::kESDpid)!=0) {
	 Double_t r[10]; pionTrk->GetESDpid(r);
         pid.SetProbabilities(r);
         Double_t ppi=pid.GetProbability(AliPID::kPion);
         if (ppi < pid.GetProbability(AliPID::kElectron)) continue;
         if (ppi < pid.GetProbability(AliPID::kMuon)) continue;
         if (ppi < pid.GetProbability(AliPID::kKaon)) continue;
         if (ppi < pid.GetProbability(AliPID::kProton)) continue;
        }

       hm->Fill(mass);
     } 

   }

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

   TCanvas *c1=(TCanvas*)gROOT->FindObject("c1");
   if (!c1) {
      c1=new TCanvas();
   }

   if (hm->GetEntries()>100) hm->Fit("gaus","","",1.11,1.12);
   else hm->Draw();

   c1->Update();

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