]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muon/ReadAOD_MCBranch.C
Fix Coverity 24835
[u/mrichter/AliRoot.git] / PWG / muon / ReadAOD_MCBranch.C
CommitLineData
af2b48fb 1void ReadAOD_MCBranch(char *filein="AliAODs.root"){
2
3//=============================================================================
4// Macro to read AOD+MC Branch:
5// in this example the macro reads generated and reconstructed JPsi
6// Plots refer to all MC generated particles, to MC particles which have
7// been reconstructed and reconstructed tracks
8//
9// Each aod event has 3 MC particles (J/Psi, mu1, mu2)
10// To access MC muons: mctrackall->IsPhysicalPrimary()
11// To access JPsi muons: mctrackall->IsPrimary() && !mctrackall->IsPhysicalPrimary()
12
13// AliStack::IsPhysicalPrimary()
14// Test if a particle is a physical primary according to the following definition:
15// Particles produced in the collision including products of strong and
16// electromagnetic decay and excluding feed-down from weak decays of strange
17// particles.
18//=============================================================================
19
20 gStyle->SetFrameFillColor(0);
21 gStyle->SetCanvasColor(0);
22 gStyle->SetPalette(1);
23
24// Open AOD file
25 TFile *file = new TFile(filein);
26 TTree *aodTree = file->Get("aodTree");
27
28// Read AOD event
29 AliAODEvent *event = new AliAODEvent();
30 event->ReadFromTree(aodTree);
31
32// Read MC info
33 TClonesArray *mcarray = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
34 if(!mcarray) {
35 printf("No MC info in AOD!\n");
36 return;
37 }
38
39// Book Histos
40 TH2D *hpt_mc_rec = new TH2D("hpt_mc_rec","Pt correlations MC-REC",50,0.,10.,50,0.,10.);
41 TH1D *hpt_rec = new TH1D("hpt_rec","Pt REC tracks",20,0.,10.);
42 TH1D *hpt_mc = new TH1D("hpt_mc","PT MC particles corresponding to rec tracks",20,0.,10.);
43 TH1D *hpt_allmc = new TH1D("hpt_allmc","PT all MC particles",20,0.,10.);
44 TH1D *hpt_primarymc = new TH1D("hpt_primarymc","PT MC primaries (J/Psi and muons)",20,0.,10.);
45 TH1D *hpt_physprimarymc = new TH1D("hpt_physprimarymc","PT Muons MC",20,0.,10.);
46 TH1D *hpt_notphysprimarymc = new TH1D("hpt_notphysprimarymc","Pt JPsi MC",20,0.,10.);
47 TH1D *hpt_diff = new TH1D("hpt_diff","Pt: Rec - MC",100,-5.,5.);
48
49 TH1D *hCharge_primarymc = new TH1D("hCharge_primarymc","Charge MC primary particle",10,-5.,5.);
50 TH1D *hCharge_physprimmc = new TH1D("hCharge_physprimmc","Charge Muons MC",10,-5.,5.);
51 TH1D *hCharge_notphysprimmc = new TH1D("hCharge_notphysprimmc","Charge JPsi MC",10,-5.,5.);
52 TH1D *hCharge_rec = new TH1D("hCharge_rec","hCharge_rec",10,-5.,5.);
53 TH1D *hCharge_mc = new TH1D("hCharge_mc","hCharge_mc",10,-5.,5.);
54
55 TH1D *hMass_mc = new TH1D("hMass_mc","Mass MC particles",100,0.,5..);
56 TH1D *hMass_rec = new TH1D("hMass_rec","Mass rec tracks",100,0.,5..);
57 TH1D *hMass_allmc = new TH1D("hMass_allmc","Mass all MC particles",100,0.,5..);
58 TH1D *hMass_primarymc = new TH1D("hMass_primarymc","Mass primary particles MC",100,0.,5..);
59 TH1D *hMass_physprimarymc = new TH1D("hMass_physprimarymc","Mass muons MC",100,0.,5..);
60 TH1D *hMass_notphysprimarymc = new TH1D("hMass_notphysprimarymc","Mass JPsi MC",100,0.,5..);
61 TH1D *hMassJPsi_mc = new TH1D("hMassJPsi_mc","Mass JPsi MC",100,0.,5..);
62
63// Loop on AOD events
64 Int_t nev=0;
65
66 while(aodTree->GetEvent(nev++)){
67
68// Loop on all MC tracks
69 for(int ii=0;ii<mcarray->GetEntries();ii++){
70 AliAODMCParticle *mctrackall = (AliAODMCParticle*) mcarray->At(ii);
71 // all particles
72 hpt_allmc->Fill(mctrackall->Pt());
73 hMass_allmc->Fill(mctrackall->M());
74
75 // Muons
76 if(mctrackall->IsPhysicalPrimary()) {
77 hCharge_physprimmc->Fill(mctrackall->Charge());
78 hpt_physprimarymc->Fill(mctrackall->Pt());
79 hMass_physprimarymc->Fill(mctrackall->M());
80 }
81
82 if(mctrackall->IsPrimary()) {
83 hpt_primarymc->Fill(mctrackall->Pt());
84 hMass_primarymc->Fill(mctrackall->M());
85 hCharge_primarymc->Fill(mctrackall->Charge());
86 }
87
88 // JPsi
89 if(mctrackall->IsPrimary() && !mctrackall->IsPhysicalPrimary()) {
90 hCharge_notphysprimmc->Fill(mctrackall->Charge());
91 hMass_notphysprimarymc->Fill(mctrackall->M());
92 hpt_notphysprimarymc->Fill(mctrackall->Pt());
93 }
94 }
95
96// Loop on reconstructed tracks
97 for(int i=0;i<event->GetNumberOfTracks();i++){
98 AliAODTrack *track = dynamic_cast<AliAODTrack*>(event->GetTrack(i));
99 if(!track) {
100 printf("Error: no track! \n");
101 continue;
102 }
103 hpt_rec->Fill(track->Pt());
104 hMass_rec->Fill(track->M());
105 hCharge_rec->Fill(track->Charge());
106
107// Read MC particle corresponding to reconstructed tracks
108 AliAODMCParticle *mctrack = (AliAODMCParticle*) mcarray->At(track->GetLabel());
109 if(!mctrack){
110 printf("Error: no MC track! \n");
111 continue;
112 }
113 //printf("nev=%d i=%d mc=%f rec=%f\n",nev-1,i,mctrack->Pt(),track->Pt());
114 hpt_mc->Fill(mctrack->Pt());
115 hpt_mc_rec->Fill(track->Pt(),mctrack->Pt());
116 hpt_diff->Fill(track->Pt()-mctrack->Pt());
117 hMass_mc->Fill(mctrack->M());
118 hCharge_mc->Fill(mctrack->Charge());
119 }
120 }
121
122// Plots
123 TCanvas *c = new TCanvas("c","PT spectra",20,20,600,600);
124 c->Divide(3,3);
125 c->cd(1);
126 hpt_primarymc->Draw();
127 hpt_primarymc->GetXaxis()->SetTitle("Pt MC primary particles");
128 c->cd(2);
129 hpt_mc->GetXaxis()->SetTitle("Pt MC particles");
130 hpt_mc->Draw();
131 hpt_mc->SetLineColor(4);
132 c->cd(3);
133 hpt_rec->GetXaxis()->SetTitle("Rec Pt track");
134 hpt_rec->Draw();
135 hpt_rec->SetLineColor(2);
136 c->cd(4);
137 hpt_physprimarymc->Draw();
138 hpt_physprimarymc->GetXaxis()->SetTitle("Pt MC muon track");
139 c->cd(5);
140 hpt_notphysprimarymc->Draw();
141 hpt_notphysprimarymc->GetXaxis()->SetTitle("Pt MC JPsi track");
142 c->cd(7);
143 hpt_mc_rec->Draw("colz");
144 hpt_mc_rec->GetXaxis()->SetTitle("Pt rec track");
145 hpt_mc_rec->GetYaxis()->SetTitle("Pt MC track");
146 c->cd(8);
147 hpt_diff->Draw();
148 hpt_diff->GetXaxis()->SetTitle("Rec-MC Pt");
149
150 TCanvas *c1 = new TCanvas("c1","Mass distributions",40,40,600,600);
151 c1->Divide(2,2);
152 c1->cd(1);
153 hMass_primarymc->Draw();
154 hMass_primarymc->GetXaxis()->SetTitle("Mass MC primary particles");
155 c1->cd(2);
156 hMass_physprimarymc->Draw();
157 hMass_physprimarymc->GetXaxis()->SetTitle("Mass MC muon particles");
158 c1->cd(3);
159 hMass_notphysprimarymc->Draw();
160 hMass_notphysprimarymc->GetXaxis()->SetTitle("Mass MC J/Psi");
161 c1->cd(4);
162 hMass_rec->Draw();
163 hMass_rec->GetXaxis()->SetTitle("Mass Rec tracks");
164
165 TCanvas *c2= new TCanvas("c2","Charge distributions",60,60,600,600);
166 c2->Divide(2,2);
167 c2->cd(1);
168 hCharge_primarymc->Draw();
169 hCharge_primarymc->GetXaxis()->SetTitle("Charge MC primary particles");
170 c2->cd(2);
171 hCharge_physprimmc->Draw();
172 hCharge_physprimmc->GetXaxis()->SetTitle("Charge muon MC");;
173 c2->cd(3);
174 hCharge_notphysprimmc->Draw();
175 hCharge_notphysprimmc->GetXaxis()->SetTitle("Charge J/Psi MC");;
176 c2->cd(4);
177 hCharge_rec->Draw();
178 hCharge_rec->GetXaxis()->SetTitle("Charge rec tracks");
179}