]>
Commit | Line | Data |
---|---|---|
e23730c7 | 1 | //******************************************************************** |
2 | // Example (very naive for the moment) of the data analysis | |
3 | // using the ESD classes. | |
4 | // It demonstrates the idea of the "combined PID" | |
5 | // applied to the Lambda0 reconstruction. | |
6 | // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch | |
7 | //******************************************************************** | |
8 | ||
9 | #if !defined( __CINT__) || defined(__MAKECINT__) | |
10 | #include <Riostream.h> | |
8b462fd8 | 11 | #include <TTree.h> |
e23730c7 | 12 | #include "TFile.h" |
13 | #include "TH1F.h" | |
14 | #include "TH2F.h" | |
15 | #include "TCanvas.h" | |
16 | #include "TStopwatch.h" | |
17 | #include "TParticle.h" | |
18 | ||
19 | #include "AliRun.h" | |
20 | ||
21 | #include "AliESD.h" | |
22 | ||
23 | #endif | |
24 | ||
25 | extern AliRun *gAlice; | |
26 | ||
27 | Int_t AliESDv0Analysis(Int_t nev=1) { | |
28 | TH1F *hm=new TH1F("hm","Effective Mass",40,1.065,1.165); | |
29 | hm->SetXTitle("Mass (GeV/c**2)"); | |
30 | ||
31 | TFile *ef=TFile::Open("AliESDs.root"); | |
32 | if (!ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;} | |
8b462fd8 | 33 | AliESD* event = new AliESD; |
34 | TTree* tree = (TTree*) ef->Get("esdTree"); | |
35 | if (!tree) {cerr<<"no ESD tree found\n"; return 1;}; | |
36 | tree->SetBranchAddress("ESD", &event); | |
e23730c7 | 37 | |
38 | TStopwatch timer; | |
39 | Int_t rc=0,n=0; | |
e23730c7 | 40 | |
41 | //****** Tentative particle type "concentrations" | |
42 | Double_t c[5]={0.0, 0.0, 0.1, 0.1, 0.1}; | |
43 | ||
44 | //******* The loop over events | |
8b462fd8 | 45 | while (tree->GetEvent(n)) { |
e23730c7 | 46 | |
47 | cerr<<"Processing event number : "<<n++<<endl; | |
48 | ||
e23730c7 | 49 | Int_t nv0=event->GetNumberOfV0s(); |
50 | cerr<<"Number of ESD v0s : "<<nv0<<endl; | |
51 | ||
52 | while (nv0--) { | |
53 | AliESDv0 *v0=event->GetV0(nv0); | |
54 | Int_t pi=v0->GetPindex(); | |
55 | AliESDtrack *t=event->GetTrack(pi); | |
56 | Int_t isProton=1; | |
57 | if ((t->GetStatus()&AliESDtrack::kESDpid)!=0) { | |
58 | Double_t r[10]; t->GetESDpid(r); | |
59 | Double_t rcc=0.; | |
60 | Int_t i; | |
61 | for (i=0; i<AliESDtrack::kSPECIES; i++) rcc+=(c[i]*r[i]); | |
62 | if (rcc==0.) continue; | |
63 | //Here we apply Bayes' formula | |
64 | Double_t w[10]; | |
65 | for (i=0; i<AliESDtrack::kSPECIES; i++) w[i]=c[i]*r[i]/rcc; | |
66 | ||
67 | if (w[4]<w[3]) isProton=0; | |
68 | if (w[4]<w[2]) isProton=0; | |
69 | if (w[4]<w[1]) isProton=0; | |
70 | if (w[4]<w[0]) isProton=0; | |
71 | } | |
72 | if (!isProton) continue; | |
73 | v0->ChangeMassHypothesis(3122); | |
74 | Double_t mass=v0->GetEffMass(); | |
75 | hm->Fill(mass); | |
76 | } | |
e23730c7 | 77 | } |
78 | ||
8b462fd8 | 79 | delete event; |
80 | ef->Close(); | |
81 | ||
e23730c7 | 82 | timer.Stop(); timer.Print(); |
83 | ||
84 | hm->Draw(); | |
85 | ||
86 | ef->Close(); | |
87 | ||
88 | ||
89 | return rc; | |
90 | } |