]>
Commit | Line | Data |
---|---|---|
0dbb51a0 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
27de2dfb | 16 | /* $Id$ */ |
17 | ||
0dbb51a0 | 18 | ///////////////////////////////////////////////////////////// |
19 | // | |
20 | // AliAnalysisTaskSE for HF quality assurance | |
21 | // | |
22 | // Author: Chiara Bianchin, chiara.bianchin@pd.infn.it | |
23 | ///////////////////////////////////////////////////////////// | |
24 | ||
25 | #include <Riostream.h> | |
26 | #include <TClonesArray.h> | |
27 | #include <TCanvas.h> | |
28 | #include <TList.h> | |
29 | #include <TH1F.h> | |
30 | #include <TH2F.h> | |
31 | #include <TDatabasePDG.h> | |
32 | ||
33 | #include <AliAnalysisDataSlot.h> | |
34 | #include <AliAnalysisDataContainer.h> | |
35 | #include "AliAnalysisManager.h" | |
36 | #include "AliESDtrack.h" | |
37 | #include "AliVertexerTracks.h" | |
38 | #include "AliPID.h" | |
39 | #include "AliTPCPIDResponse.h" | |
40 | #include "AliAODHandler.h" | |
41 | #include "AliAODEvent.h" | |
42 | #include "AliAODVertex.h" | |
43 | #include "AliAODTrack.h" | |
44 | #include "AliAODMCParticle.h" | |
a4ef4383 | 45 | #include "AliAODMCHeader.h" |
0dbb51a0 | 46 | #include "AliAODRecoDecayHF2Prong.h" |
47 | #include "AliAODRecoCascadeHF.h" | |
48 | #include "AliAnalysisVertexingHF.h" | |
49 | #include "AliAnalysisTaskSE.h" | |
a4ef4383 | 50 | #include "AliCounterCollection.h" |
0dbb51a0 | 51 | #include "AliRDHFCuts.h" |
52 | #include "AliRDHFCutsDplustoKpipi.h" | |
53 | #include "AliRDHFCutsD0toKpipipi.h" | |
54 | #include "AliRDHFCutsDstoKKpi.h" | |
55 | #include "AliRDHFCutsDStartoKpipi.h" | |
56 | #include "AliRDHFCutsD0toKpi.h" | |
57 | #include "AliRDHFCutsLctopKpi.h" | |
a4b0ffc7 | 58 | #include "AliInputEventHandler.h" |
0dbb51a0 | 59 | |
60 | #include "AliAnalysisTaskSEHFQA.h" | |
61 | ||
0dbb51a0 | 62 | ClassImp(AliAnalysisTaskSEHFQA) |
63 | ||
64 | //____________________________________________________________________________ | |
65 | ||
66 | AliAnalysisTaskSEHFQA::AliAnalysisTaskSEHFQA():AliAnalysisTaskSE(), | |
67 | fNEntries(0x0), | |
68 | fOutputPID(0x0), | |
69 | fOutputTrack(0x0), | |
a4ef4383 | 70 | fOutputCounters(0x0), |
71 | fOutputCheckCentrality(0x0), | |
818c1271 | 72 | fOutputEvSelection(0x0), |
0dbb51a0 | 73 | fDecayChannel(AliAnalysisTaskSEHFQA::kD0toKpi), |
a4ef4383 | 74 | fCuts(0x0), |
75 | fEstimator(AliRDHFCuts::kCentTRK), | |
19222b31 | 76 | fReadMC(kFALSE), |
5fc4893f | 77 | fSimpleMode(kFALSE), |
78 | fOnOff() | |
0dbb51a0 | 79 | { |
80 | //default constructor | |
5fc4893f | 81 | fOnOff[0]=kTRUE; |
82 | fOnOff[1]=kTRUE; | |
83 | fOnOff[2]=kTRUE; | |
818c1271 | 84 | fOnOff[3]=kTRUE; |
0dbb51a0 | 85 | } |
86 | ||
87 | //____________________________________________________________________________ | |
88 | AliAnalysisTaskSEHFQA::AliAnalysisTaskSEHFQA(const char *name, AliAnalysisTaskSEHFQA::DecChannel ch,AliRDHFCuts* cuts): | |
a4ef4383 | 89 | AliAnalysisTaskSE(name), |
90 | fNEntries(0x0), | |
91 | fOutputPID(0x0), | |
92 | fOutputTrack(0x0), | |
93 | fOutputCounters(0x0), | |
94 | fOutputCheckCentrality(0x0), | |
818c1271 | 95 | fOutputEvSelection(0x0), |
a4ef4383 | 96 | fDecayChannel(ch), |
97 | fCuts(0x0), | |
98 | fEstimator(AliRDHFCuts::kCentTRK), | |
19222b31 | 99 | fReadMC(kFALSE), |
5fc4893f | 100 | fSimpleMode(kFALSE), |
101 | fOnOff() | |
0dbb51a0 | 102 | { |
103 | //constructor | |
104 | ||
105 | //SetCutObject(cuts); | |
106 | fCuts=cuts; | |
107 | ||
5fc4893f | 108 | fOnOff[0]=kTRUE; |
109 | fOnOff[1]=kTRUE; | |
110 | fOnOff[2]=kTRUE; | |
818c1271 | 111 | fOnOff[3]=kTRUE; |
5fc4893f | 112 | |
0dbb51a0 | 113 | // Output slot #1 writes into a TH1F container (number of events) |
114 | DefineOutput(1,TH1F::Class()); //My private output | |
115 | // Output slot #2 writes into a TList container (PID) | |
5fc4893f | 116 | if (fOnOff[1]) DefineOutput(2,TList::Class()); //My private output |
0dbb51a0 | 117 | // Output slot #3 writes into a TList container (Tracks) |
5fc4893f | 118 | if (fOnOff[0]) DefineOutput(3,TList::Class()); //My private output |
0dbb51a0 | 119 | // Output slot #4 writes into a AliRDHFCuts container (cuts) |
120 | switch(fDecayChannel){ | |
121 | case 0: | |
122 | DefineOutput(4,AliRDHFCutsDplustoKpipi::Class()); //My private output | |
123 | break; | |
124 | case 1: | |
125 | DefineOutput(4,AliRDHFCutsD0toKpi::Class()); //My private output | |
126 | break; | |
127 | case 2: | |
128 | DefineOutput(4,AliRDHFCutsDStartoKpipi::Class()); //My private output | |
129 | break; | |
130 | case 3: | |
131 | DefineOutput(4,AliRDHFCutsDstoKKpi::Class()); //My private output | |
132 | break; | |
133 | case 4: | |
134 | DefineOutput(4,AliRDHFCutsD0toKpipipi::Class()); //My private output | |
135 | break; | |
a4ef4383 | 136 | case 5: |
0dbb51a0 | 137 | DefineOutput(4,AliRDHFCutsLctopKpi::Class()); //My private output |
138 | break; | |
a4ef4383 | 139 | } |
5fc4893f | 140 | if (fOnOff[2]) { |
141 | // Output slot #5 writes into a TList container (AliCounterCollection) | |
142 | DefineOutput(5,TList::Class()); //My private output | |
143 | // Output slot #6 writes into a TList container (TH1F) | |
144 | DefineOutput(6,TList::Class()); //My private output | |
145 | } | |
818c1271 | 146 | |
147 | if(fOnOff[3]) DefineOutput(7,TList::Class()); //My private output | |
148 | ||
0dbb51a0 | 149 | } |
150 | ||
151 | //___________________________________________________________________________ | |
152 | AliAnalysisTaskSEHFQA::~AliAnalysisTaskSEHFQA() | |
153 | { | |
154 | //destructor | |
a4ef4383 | 155 | delete fNEntries; |
156 | ||
157 | delete fOutputPID; | |
158 | ||
159 | delete fOutputTrack; | |
160 | ||
161 | delete fOutputCounters; | |
162 | ||
163 | delete fOutputCheckCentrality; | |
164 | ||
818c1271 | 165 | delete fOutputEvSelection; |
166 | ||
0dbb51a0 | 167 | } |
168 | ||
169 | //___________________________________________________________________________ | |
170 | void AliAnalysisTaskSEHFQA::Init(){ | |
171 | ||
172 | //initialization | |
173 | if(fDebug > 1) printf("AnalysisTaskSEHFQA::Init() \n"); | |
174 | ||
175 | switch(fDecayChannel){ | |
176 | case 0: | |
177 | { | |
178 | AliRDHFCutsDplustoKpipi* copycut=new AliRDHFCutsDplustoKpipi(*(static_cast<AliRDHFCutsDplustoKpipi*>(fCuts))); | |
179 | // Post the data | |
180 | PostData(4,copycut); | |
181 | } | |
182 | break; | |
183 | case 1: | |
184 | { | |
185 | AliRDHFCutsD0toKpi* copycut=new AliRDHFCutsD0toKpi(*(static_cast<AliRDHFCutsD0toKpi*>(fCuts))); | |
186 | // Post the data | |
187 | PostData(4,copycut); | |
188 | } | |
189 | break; | |
190 | case 2: | |
191 | { | |
192 | AliRDHFCutsDStartoKpipi* copycut=new AliRDHFCutsDStartoKpipi(*(static_cast<AliRDHFCutsDStartoKpipi*>(fCuts))); | |
193 | // Post the data | |
194 | PostData(4,copycut); | |
195 | } | |
196 | break; | |
197 | case 3: | |
198 | { | |
199 | AliRDHFCutsDstoKKpi* copycut=new AliRDHFCutsDstoKKpi(*(static_cast<AliRDHFCutsDstoKKpi*>(fCuts))); | |
200 | // Post the data | |
201 | PostData(4,copycut); | |
202 | } | |
203 | break; | |
204 | case 4: | |
205 | { | |
206 | AliRDHFCutsD0toKpipipi* copycut=new AliRDHFCutsD0toKpipipi(*(static_cast<AliRDHFCutsD0toKpipipi*>(fCuts))); | |
207 | // Post the data | |
208 | PostData(4,copycut); | |
209 | } | |
210 | break; | |
211 | case 5: | |
212 | { | |
213 | AliRDHFCutsLctopKpi* copycut=new AliRDHFCutsLctopKpi(*(static_cast<AliRDHFCutsLctopKpi*>(fCuts))); | |
214 | // Post the data | |
215 | PostData(4,copycut); | |
216 | } | |
217 | break; | |
218 | ||
219 | default: | |
220 | return; | |
221 | } | |
222 | ||
223 | ||
224 | ||
225 | } | |
226 | ||
227 | //___________________________________________________________________________ | |
228 | void AliAnalysisTaskSEHFQA::UserCreateOutputObjects() | |
229 | { | |
230 | ||
231 | //create the output container | |
232 | if(fDebug > 1) printf("AnalysisTaskSEHFQA::UserCreateOutputObjects() \n"); | |
233 | ||
234 | //count events | |
235 | ||
acc33385 | 236 | fNEntries=new TH1F(GetOutputSlot(1)->GetContainer()->GetName(), "Counts the number of events", 10,-0.5,9.5); |
0dbb51a0 | 237 | fNEntries->GetXaxis()->SetBinLabel(1,"nEventsAnal"); |
238 | fNEntries->GetXaxis()->SetBinLabel(2,"Pile-up Rej"); | |
239 | fNEntries->GetXaxis()->SetBinLabel(3,"No VertexingHF"); | |
9af24f46 | 240 | fNEntries->GetXaxis()->SetBinLabel(4,"nCandidates(AnCuts)"); |
241 | fNEntries->GetXaxis()->SetBinLabel(5,"EventsWithGoodVtx"); | |
5fc4893f | 242 | //fNEntries->GetXaxis()->SetBinLabel(6,"N. of 0SMH"); |
243 | fNEntries->GetXaxis()->SetBinLabel(6,"N. of CSH1"); | |
a4ef4383 | 244 | if(fReadMC){ |
245 | fNEntries->GetXaxis()->SetBinLabel(7,"MC Cand from c"); | |
246 | fNEntries->GetXaxis()->SetBinLabel(8,"MC Cand from b"); | |
acc33385 | 247 | fNEntries->GetXaxis()->SetBinLabel(9,"N fake Trks"); |
248 | fNEntries->GetXaxis()->SetBinLabel(10,"N true Trks"); | |
a4ef4383 | 249 | } else{ |
250 | fNEntries->GetXaxis()->SetBinLabel(7,"N candidates"); | |
251 | } | |
252 | ||
0dbb51a0 | 253 | fNEntries->GetXaxis()->SetNdivisions(1,kFALSE); |
254 | ||
255 | //PID | |
5fc4893f | 256 | if(fOnOff[1]){ |
257 | fOutputPID=new TList(); | |
258 | fOutputPID->SetOwner(); | |
259 | fOutputPID->SetName(GetOutputSlot(2)->GetContainer()->GetName()); | |
0dbb51a0 | 260 | |
5fc4893f | 261 | //TOF pid |
23dfe729 | 262 | TH1F* hTOFflags=new TH1F("hTOFflags","TOF flags",6,-0.5,5.5); |
b906dda8 | 263 | hTOFflags->SetMinimum(0.); |
264 | hTOFflags->GetXaxis()->SetBinLabel(1,"All Tracks"); | |
23dfe729 | 265 | hTOFflags->GetXaxis()->SetBinLabel(2,"kTPCout"); |
266 | hTOFflags->GetXaxis()->SetBinLabel(3,"kTOFout"); | |
267 | hTOFflags->GetXaxis()->SetBinLabel(4,"kTIME"); | |
268 | hTOFflags->GetXaxis()->SetBinLabel(5,"kTOFpid"); | |
269 | hTOFflags->GetXaxis()->SetBinLabel(6,"kTOFmismatch"); | |
b906dda8 | 270 | |
5fc4893f | 271 | TString hname="hTOFsig"; |
272 | TH1F* hTOFsig=new TH1F(hname.Data(),"Distribution of TOF signal;TOF time [ps];Entries", 100, -2.e3,40.e3); | |
0dbb51a0 | 273 | |
5fc4893f | 274 | hname="hTOFtime"; |
275 | TH1F* hTOFtime=new TH1F(hname.Data(),"Distribution of TOF time Kaon;TOF time(Kaon) [ps];Entries", 1000, 0.,50000.); | |
0dbb51a0 | 276 | |
5fc4893f | 277 | hname="hTOFtimeKaonHyptime"; |
b906dda8 | 278 | TH2F* hTOFtimeKaonHyptime=new TH2F(hname.Data(),"TOFtime - timeHypothesisForKaon;p[GeV/c];TOFtime - timeHypothesisForKaon [ps]",500,0.,10.,1000,-20000.,20000.); |
0dbb51a0 | 279 | |
5fc4893f | 280 | hname="hTOFtimeKaonHyptimeAC"; |
b906dda8 | 281 | TH2F* hTOFtimeKaonHyptimeAC=new TH2F(hname.Data(),"TOFtime - timeHypothesisForKaon;p[GeV/c];TOFtime - timeHypothesisForKaon [ps]",500,0.,10.,1000,-20000.,20000.); |
0dbb51a0 | 282 | |
5fc4893f | 283 | hname="hTOFsigmaKSigPid"; |
23dfe729 | 284 | TH2F* hTOFsigmaKSigPid=new TH2F(hname.Data(),"(TOFsignal-timeK)/tofSigPid;p[GeV/c];(TOFsignal-timeK)/tofSigPid",500,0.,10.,400,-20,20); |
0dbb51a0 | 285 | |
5fc4893f | 286 | hname="hTOFsigmaPionSigPid"; |
23dfe729 | 287 | TH2F* hTOFsigmaPionSigPid=new TH2F(hname.Data(),"(TOFsignal-time#pi)/tofSigPid;p[GeV/c];(TOFsignal-time#pi)/tofSigPid",500,0.,10.,400,-20,20); |
a4ef4383 | 288 | |
5fc4893f | 289 | hname="hTOFsigmaProtonSigPid"; |
23dfe729 | 290 | TH2F* hTOFsigmaProtonSigPid=new TH2F(hname.Data(),"(TOFsignal-timep)/tofSigPid;p[GeV/c];(TOFsignal-time p)/tofSigPid",500,0.,10.,400,-20,20); |
a4ef4383 | 291 | |
5fc4893f | 292 | hname="hTOFsigPid3sigPion"; |
293 | TH1F* hTOFsigPid3sigPion=new TH1F(hname.Data(),"TOF PID resolution (#pi) [ps]",500,0.,1000.); | |
a4ef4383 | 294 | |
5fc4893f | 295 | hname="hTOFsigPid3sigKaon"; |
296 | TH1F* hTOFsigPid3sigKaon=new TH1F(hname.Data(),"TOF PID resolution (K) [ps]",500,0.,1000.); | |
0dbb51a0 | 297 | |
5fc4893f | 298 | hname="hTOFsigPid3sigProton"; |
299 | TH1F* hTOFsigPid3sigProton=new TH1F(hname.Data(),"TOF PID resolution (p) [ps]",500,0.,1000.); | |
a4ef4383 | 300 | |
0dbb51a0 | 301 | |
5fc4893f | 302 | //TPC pid |
303 | hname="hTPCsig"; | |
304 | TH1F* hTPCsig=new TH1F(hname.Data(),"Distribution of TPC signal;TPC sig;Entries", 100, 35.,100.); | |
0dbb51a0 | 305 | |
5fc4893f | 306 | hname="hTPCsigvsp"; |
b906dda8 | 307 | TH2F* hTPCsigvsp=new TH2F(hname.Data(),"TPCsig vs p;TPC p[GeV/c];TPCsig",500,0.,10.,1000,35.,100.); |
0dbb51a0 | 308 | |
5fc4893f | 309 | hname="hTPCsigvspAC"; |
b906dda8 | 310 | TH2F* hTPCsigvspAC=new TH2F(hname.Data(),"TPCsig vs p;TPCp[GeV/c];TPCsig",500,0.,10.,1000,35.,100.); |
5fc4893f | 311 | |
312 | hname="hTPCsigmaK"; | |
b906dda8 | 313 | TH2F* hTPCsigmaK=new TH2F(hname.Data(),"TPC Sigma for K as a function of momentum;p[GeV/c];Sigma Kaon",500,0.,10.,400,-20,20); |
5fc4893f | 314 | |
315 | hname="hTPCsigmaPion"; | |
b906dda8 | 316 | TH2F* hTPCsigmaPion=new TH2F(hname.Data(),"TPC Sigma for #pi as a function of momentum;p[GeV/c];Sigma #pi",500,0.,10.,400,-20,20); |
5fc4893f | 317 | |
318 | hname="hTPCsigmaProton"; | |
b906dda8 | 319 | TH2F* hTPCsigmaProton=new TH2F(hname.Data(),"TPC Sigma for proton as a function of momentum;p[GeV/c];Sigma Proton",500,0.,10.,400,-20,20); |
5fc4893f | 320 | |
b906dda8 | 321 | fOutputPID->Add(hTOFflags); |
5fc4893f | 322 | fOutputPID->Add(hTOFsig); |
323 | fOutputPID->Add(hTPCsig); | |
324 | fOutputPID->Add(hTOFtime); | |
325 | fOutputPID->Add(hTOFtimeKaonHyptime); | |
326 | fOutputPID->Add(hTOFtimeKaonHyptimeAC); | |
5fc4893f | 327 | fOutputPID->Add(hTOFsigmaKSigPid); |
328 | fOutputPID->Add(hTOFsigmaPionSigPid); | |
329 | fOutputPID->Add(hTOFsigmaProtonSigPid); | |
330 | fOutputPID->Add(hTOFsigPid3sigPion); | |
331 | fOutputPID->Add(hTOFsigPid3sigKaon); | |
332 | fOutputPID->Add(hTOFsigPid3sigProton); | |
333 | fOutputPID->Add(hTPCsigvsp); | |
334 | fOutputPID->Add(hTPCsigvspAC); | |
335 | fOutputPID->Add(hTPCsigmaK); | |
336 | fOutputPID->Add(hTPCsigmaPion); | |
337 | fOutputPID->Add(hTPCsigmaProton); | |
338 | } | |
0dbb51a0 | 339 | |
340 | //quality of the tracks | |
5fc4893f | 341 | if(fOnOff[0]){ |
342 | fOutputTrack=new TList(); | |
343 | fOutputTrack->SetOwner(); | |
344 | fOutputTrack->SetName(GetOutputSlot(3)->GetContainer()->GetName()); | |
0dbb51a0 | 345 | |
5fc4893f | 346 | TString hname="hnClsITS"; |
347 | TH1F* hnClsITS=new TH1F(hname.Data(),"Distribution of number of ITS clusters;nITScls;Entries",7,-0.5,6.5); | |
0dbb51a0 | 348 | |
39dd297f | 349 | hname="hnClsITSselTr"; |
350 | TH1F* hnClsITSselTr=new TH1F(hname.Data(),"Distribution of number of ITS clusters selected tracks;nITScls;Entries",7,-0.5,6.5); | |
351 | ||
5fc4893f | 352 | hname="hnClsITS-SA"; |
353 | TH1F* hnClsITSSA=new TH1F(hname.Data(),"Distribution of number of ITS clusters(ITS-SA);nITScls;Entries",7,-0.5,6.5); | |
0dbb51a0 | 354 | |
bc6846db | 355 | |
356 | hname="hnLayerITS"; | |
f3e1ad2f | 357 | TH1F* hnLayerITS=new TH1F(hname.Data(),"Number of tracks with point in layer;ITS layer;",7,-1.5,5.5); |
358 | hnLayerITS->GetXaxis()->SetBinLabel(1,"n tracks"); | |
bc6846db | 359 | |
360 | hname="hnLayerITSsa"; | |
f3e1ad2f | 361 | TH1F* hnLayerITSsa=new TH1F(hname.Data(),"Number of tracks with point in layer;ITS layer;",7,-1.5,5.5); |
362 | hnLayerITSsa->GetXaxis()->SetBinLabel(1,"n tracks"); | |
363 | ||
5fc4893f | 364 | hname="hnClsSPD"; |
365 | TH1F* hnClsSPD=new TH1F(hname.Data(),"Distribution of number of SPD clusters;nSPDcls;Entries",3,-0.5,2.5); | |
0dbb51a0 | 366 | |
5fc4893f | 367 | hname="hptGoodTr"; |
368 | TH1F* hptGoodTr=new TH1F(hname.Data(),"Pt distribution of 'good' tracks;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.); | |
369 | hptGoodTr->SetTitleOffset(1.3,"Y"); | |
0dbb51a0 | 370 | |
5fc4893f | 371 | hname="hdistrGoodTr"; |
372 | TH1F* hdistrGoodTr=new TH1F(hname.Data(),"Distribution of number of 'good' tracks per event;no.good-tracks/ev;Entries",4000,-0.5,3999.5); | |
373 | hdistrGoodTr->SetTitleOffset(1.3,"Y"); | |
0dbb51a0 | 374 | |
5fc4893f | 375 | hname="hd0"; |
4563d678 | 376 | TH1F* hd0=new TH1F(hname.Data(),"Impact parameter (rphi) distribution of 'good' tracks;d_{0rphi}[cm];Entries/10^{3} cm",200,-0.1,0.1); |
377 | ||
378 | hname="hd0z"; | |
379 | TH1F* hd0z=new TH1F(hname.Data(),"Impact parameter (z) distribution of 'good' tracks;d_{0z}[cm];Entries/10^{3} cm",200,-0.1,0.1); | |
0dbb51a0 | 380 | |
5fc4893f | 381 | fOutputTrack->Add(hnClsITS); |
39dd297f | 382 | fOutputTrack->Add(hnClsITSselTr); |
5fc4893f | 383 | fOutputTrack->Add(hnClsITSSA); |
bc6846db | 384 | fOutputTrack->Add(hnLayerITS); |
385 | fOutputTrack->Add(hnLayerITSsa); | |
5fc4893f | 386 | fOutputTrack->Add(hnClsSPD); |
387 | fOutputTrack->Add(hptGoodTr); | |
388 | fOutputTrack->Add(hdistrGoodTr); | |
389 | fOutputTrack->Add(hd0); | |
4563d678 | 390 | fOutputTrack->Add(hd0z); |
acc33385 | 391 | |
5fc4893f | 392 | if(fReadMC){ |
393 | hname="hdistrFakeTr"; | |
394 | TH1F* hdistrFakeTr=new TH1F(hname.Data(),"Distribution of number of fake tracks per event;no.fake-tracks/ev;Entries",4000,-0.5,3999.5); | |
395 | hdistrGoodTr->SetTitleOffset(1.3,"Y"); | |
acc33385 | 396 | |
5fc4893f | 397 | hname="hd0f"; |
398 | TH1F* hd0f=new TH1F(hname.Data(),"Impact parameter distribution of fake tracks;d_{0}[cm];Entries/10^{3} cm",200,-0.1,0.1); | |
acc33385 | 399 | |
5fc4893f | 400 | hname="hptFakeTr"; |
401 | TH1F* hptFakeTr=new TH1F(hname.Data(),"Pt distribution of fake tracks;p_{t}[GeV];Entries/0.05 GeV/c",400,0.,20.); | |
ad42e35b | 402 | hptFakeTr->SetTitleOffset(1.3,"Y"); |
acc33385 | 403 | |
5fc4893f | 404 | fOutputTrack->Add(hptFakeTr); |
405 | fOutputTrack->Add(hdistrFakeTr); | |
406 | fOutputTrack->Add(hd0f); | |
407 | ||
408 | } | |
acc33385 | 409 | } |
410 | ||
0dbb51a0 | 411 | |
5fc4893f | 412 | if(fOnOff[2] && fCuts->GetUseCentrality()){ |
a4ef4383 | 413 | |
414 | //Centrality (Counters) | |
415 | fOutputCounters=new TList(); | |
416 | fOutputCounters->SetOwner(); | |
417 | fOutputCounters->SetName(GetOutputSlot(5)->GetContainer()->GetName()); | |
418 | ||
419 | AliCounterCollection *stdEstimator=new AliCounterCollection("stdEstimator"); | |
420 | stdEstimator->AddRubric("run",500000); | |
5fc4893f | 421 | stdEstimator->AddRubric("centralityclass","-10_0/0_10/10_20/20_30/30_40/40_50/50_60/60_70/70_80/80_90/90_100/-990_-980"); |
a4ef4383 | 422 | stdEstimator->Init(); |
423 | AliCounterCollection *secondEstimator=new AliCounterCollection("secondEstimator"); | |
424 | secondEstimator->AddRubric("run",500000); | |
5fc4893f | 425 | secondEstimator->AddRubric("centralityclass","-10_0/0_10/10_20/20_30/30_40/40_50/50_60/60_70/70_80/80_90/90_100/-990_-980"); |
a4ef4383 | 426 | secondEstimator->Init(); |
1b765719 | 427 | |
a4ef4383 | 428 | fOutputCounters->Add(stdEstimator); |
429 | fOutputCounters->Add(secondEstimator); | |
1b765719 | 430 | |
a4ef4383 | 431 | //Centrality (Checks) |
432 | fOutputCheckCentrality=new TList(); | |
433 | fOutputCheckCentrality->SetOwner(); | |
434 | fOutputCheckCentrality->SetName(GetOutputSlot(6)->GetContainer()->GetName()); | |
435 | ||
5fc4893f | 436 | TString hname="hNtrackletsIn"; |
a4ef4383 | 437 | TH1F* hNtrackletsIn=new TH1F(hname.Data(),"Number of tracklets in Centrality range;ntracklets;Entries",5000,-0.5,4999.5); |
438 | ||
439 | hname="hMultIn"; | |
440 | TH1F* hMultIn=new TH1F(hname.Data(),"Multiplicity;multiplicity in Centrality range;Entries",10000,-0.5,9999.5); | |
441 | ||
442 | hname="hNtrackletsOut"; | |
443 | TH1F* hNtrackletsOut=new TH1F(hname.Data(),"Number of tracklets out of Centrality range;ntracklets;Entries",5000,-0.5,4999.5); | |
444 | ||
445 | hname="hMultOut"; | |
446 | TH1F* hMultOut=new TH1F(hname.Data(),"Multiplicity out of Centrality range;multiplicity;Entries",10000,-0.5,9999.5); | |
447 | ||
ac0c2841 | 448 | hname="hMultvsPercentile"; |
5fc4893f | 449 | TH2F* hMultvsPercentile=new TH2F(hname.Data(),"Multiplicity vs Percentile;multiplicity;percentile",10000,-0.5,9999.5,12,-10.,110); |
ac0c2841 | 450 | |
23dfe729 | 451 | |
a4ef4383 | 452 | fOutputCheckCentrality->Add(hNtrackletsIn); |
453 | fOutputCheckCentrality->Add(hNtrackletsOut); | |
454 | fOutputCheckCentrality->Add(hMultIn); | |
455 | fOutputCheckCentrality->Add(hMultOut); | |
ac0c2841 | 456 | fOutputCheckCentrality->Add(hMultvsPercentile); |
82f89d0d | 457 | |
458 | PostData(6,fOutputCheckCentrality); | |
459 | ||
a4ef4383 | 460 | } else{ |
5fc4893f | 461 | if(fOnOff[0]){ |
462 | TString hname="hNtracklets"; | |
463 | TH1F* hNtracklets=new TH1F(hname.Data(),"Number of tracklets;ntracklets;Entries",5000,-0.5,4999.5); | |
464 | ||
465 | hname="hMult"; | |
466 | TH1F* hMult=new TH1F(hname.Data(),"Multiplicity;multiplicity;Entries",10000,-0.5,9999.5); | |
467 | fOutputTrack->Add(hNtracklets); | |
468 | fOutputTrack->Add(hMult); | |
469 | } | |
a4ef4383 | 470 | } |
471 | ||
818c1271 | 472 | //event selection (z vertex for the moment) |
473 | if(fOnOff[3]){ | |
474 | fOutputEvSelection=new TList(); | |
475 | fOutputEvSelection->SetOwner(); | |
476 | fOutputEvSelection->SetName(GetOutputSlot(7)->GetContainer()->GetName()); | |
477 | AliCounterCollection *evselection=new AliCounterCollection("evselection"); | |
478 | evselection->AddRubric("run",500000); | |
479 | evselection->AddRubric("evnonsel","zvtx"); | |
480 | evselection->Init(); | |
481 | ||
482 | TH1F* hzvtx=new TH1F("hzvtx", "Distribution of z_{VTX};z_{VTX} [cm];Entries",100,-20,20); | |
483 | ||
23dfe729 | 484 | |
485 | TH2F* hTrigCent=new TH2F("hTrigCent","Centrality vs. Trigger types",11,-0.5,10.5,12,-10,110); | |
486 | hTrigCent->GetXaxis()->SetBinLabel(1,"All"); | |
487 | hTrigCent->GetXaxis()->SetBinLabel(2,"kMB"); | |
488 | hTrigCent->GetXaxis()->SetBinLabel(3,"kINT7"); | |
489 | hTrigCent->GetXaxis()->SetBinLabel(4,"kCINT5"); | |
490 | hTrigCent->GetXaxis()->SetBinLabel(5,"kCent"); | |
491 | hTrigCent->GetXaxis()->SetBinLabel(6,"kSemiCent"); | |
492 | hTrigCent->GetXaxis()->SetBinLabel(7,"kEMC1+7"); | |
493 | hTrigCent->GetXaxis()->SetBinLabel(8,"kEMCJET+GAMMA"); | |
494 | hTrigCent->GetXaxis()->SetBinLabel(9,"Muons"); | |
495 | hTrigCent->GetXaxis()->SetBinLabel(10,"PHOS"); | |
496 | hTrigCent->GetXaxis()->SetBinLabel(11,"Others"); | |
497 | ||
498 | TH2F* hTrigMul=new TH2F("hTrigMul","Multiplicity vs. Trigger types",11,-0.5,10.5,100,0.,10000.); | |
499 | hTrigMul->GetXaxis()->SetBinLabel(1,"All"); | |
500 | hTrigMul->GetXaxis()->SetBinLabel(2,"kMB"); | |
501 | hTrigMul->GetXaxis()->SetBinLabel(3,"kINT7"); | |
502 | hTrigMul->GetXaxis()->SetBinLabel(4,"kCINT5"); | |
503 | hTrigMul->GetXaxis()->SetBinLabel(5,"kCent"); | |
504 | hTrigMul->GetXaxis()->SetBinLabel(6,"kSemiCent"); | |
505 | hTrigMul->GetXaxis()->SetBinLabel(7,"kEMC1+7"); | |
506 | hTrigMul->GetXaxis()->SetBinLabel(8,"kEMCJET+GAMMA"); | |
507 | hTrigMul->GetXaxis()->SetBinLabel(9,"Muons"); | |
508 | hTrigMul->GetXaxis()->SetBinLabel(10,"PHOS"); | |
509 | hTrigMul->GetXaxis()->SetBinLabel(11,"Others"); | |
510 | ||
511 | TH2F* hTrigCentSel=new TH2F("hTrigCentSel","Trigger types",11,-0.5,10.5,12,-10,110); | |
512 | hTrigCentSel->GetXaxis()->SetBinLabel(1,"All"); | |
513 | hTrigCentSel->GetXaxis()->SetBinLabel(2,"kMB"); | |
514 | hTrigCentSel->GetXaxis()->SetBinLabel(3,"kINT7"); | |
515 | hTrigCentSel->GetXaxis()->SetBinLabel(4,"kCINT5"); | |
516 | hTrigCentSel->GetXaxis()->SetBinLabel(5,"kCent"); | |
517 | hTrigCentSel->GetXaxis()->SetBinLabel(6,"kSemiCent"); | |
518 | hTrigCentSel->GetXaxis()->SetBinLabel(7,"kEMC1+7"); | |
519 | hTrigCentSel->GetXaxis()->SetBinLabel(8,"kEMCJET+GAMMA"); | |
520 | hTrigCentSel->GetXaxis()->SetBinLabel(9,"Muons"); | |
521 | hTrigCentSel->GetXaxis()->SetBinLabel(10,"PHOS"); | |
522 | hTrigCentSel->GetXaxis()->SetBinLabel(11,"Others"); | |
523 | ||
1b765719 | 524 | AliCounterCollection *trigCounter=new AliCounterCollection("trigCounter"); |
525 | trigCounter->AddRubric("run",500000); | |
526 | trigCounter->AddRubric("triggerType","Any/MB/Cent/SemiCent/EMCAL"); | |
527 | trigCounter->Init(); | |
528 | ||
818c1271 | 529 | fOutputEvSelection->Add(evselection); |
530 | fOutputEvSelection->Add(hzvtx); | |
23dfe729 | 531 | fOutputEvSelection->Add(hTrigCent); |
532 | fOutputEvSelection->Add(hTrigMul); | |
533 | fOutputEvSelection->Add(hTrigCentSel); | |
1b765719 | 534 | fOutputEvSelection->Add(trigCounter); |
818c1271 | 535 | } |
a4b0ffc7 | 536 | // AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); |
537 | // AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler(); | |
538 | // AliPIDResponse *pidResp=inputHandler->GetPIDResponse(); | |
539 | // fCuts->GetPidHF()->SetPidResponse(pidResp); | |
0dbb51a0 | 540 | // Post the data |
541 | PostData(1,fNEntries); | |
5fc4893f | 542 | if(fOnOff[1]) PostData(2,fOutputPID); |
543 | if(fOnOff[0]) PostData(3,fOutputTrack); | |
0dbb51a0 | 544 | PostData(4,fCuts); |
5fc4893f | 545 | if(fOnOff[2]) PostData(5,fOutputCounters); |
818c1271 | 546 | if(fOnOff[3]) PostData(7,fOutputEvSelection); |
547 | ||
5fc4893f | 548 | if(!fOnOff[0] && !fOnOff[1] && !fOnOff[2]) AliError("Nothing will be filled!"); |
0dbb51a0 | 549 | } |
550 | ||
551 | //___________________________________________________________________________ | |
552 | void AliAnalysisTaskSEHFQA::UserExec(Option_t */*option*/) | |
553 | { | |
554 | // Execute analysis for current event | |
555 | ||
556 | AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent()); | |
557 | if(fDebug>2) printf("Analysing decay %d\n",fDecayChannel); | |
558 | // Post the data already here | |
559 | PostData(1,fNEntries); | |
5fc4893f | 560 | if(fOnOff[1]) PostData(2,fOutputPID); |
561 | if(fOnOff[0]) PostData(3,fOutputTrack); | |
0dbb51a0 | 562 | PostData(4,fCuts); |
5fc4893f | 563 | if(fOnOff[2]) { |
564 | PostData(5,fOutputCounters); | |
565 | if(fCuts->GetUseCentrality()) PostData(6,fOutputCheckCentrality); | |
566 | } | |
0dbb51a0 | 567 | |
568 | TClonesArray *arrayProng =0; | |
569 | Int_t pdg=0; | |
a4ef4383 | 570 | Int_t *pdgdaughters=0x0; |
571 | ||
0dbb51a0 | 572 | if(!aod && AODEvent() && IsStandardAOD()) { |
573 | // In case there is an AOD handler writing a standard AOD, use the AOD | |
574 | // event in memory rather than the input (ESD) event. | |
575 | aod = dynamic_cast<AliAODEvent*> (AODEvent()); | |
576 | // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root) | |
577 | // have to taken from the AOD event hold by the AliAODExtension | |
578 | AliAODHandler* aodHandler = (AliAODHandler*) | |
579 | ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
580 | if(aodHandler->GetExtensions()) { | |
581 | ||
582 | AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root"); | |
583 | AliAODEvent *aodFromExt = ext->GetAOD(); | |
584 | ||
585 | ||
586 | ||
587 | switch(fDecayChannel){ | |
588 | case 0: | |
589 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong"); | |
590 | pdg=411; | |
a4ef4383 | 591 | if(fReadMC){ |
592 | pdgdaughters =new Int_t[3]; | |
593 | pdgdaughters[0]=211;//pi | |
594 | pdgdaughters[1]=321;//K | |
595 | pdgdaughters[2]=211;//pi | |
596 | } | |
0dbb51a0 | 597 | break; |
598 | case 1: | |
599 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi"); | |
600 | pdg=421; | |
a4ef4383 | 601 | if(fReadMC){ |
602 | pdgdaughters =new Int_t[2]; | |
603 | pdgdaughters[0]=211;//pi | |
604 | pdgdaughters[1]=321;//K | |
605 | } | |
0dbb51a0 | 606 | break; |
607 | case 2: | |
608 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar"); | |
609 | pdg=413; | |
a4ef4383 | 610 | if(fReadMC){ |
fb9311e8 | 611 | pdgdaughters =new Int_t[3]; |
a4ef4383 | 612 | pdgdaughters[1]=211;//pi |
613 | pdgdaughters[0]=321;//K | |
614 | pdgdaughters[2]=211;//pi (soft?) | |
615 | } | |
0dbb51a0 | 616 | break; |
617 | case 3: | |
618 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong"); | |
619 | pdg=431; | |
a4ef4383 | 620 | if(fReadMC){ |
621 | pdgdaughters =new Int_t[3]; | |
622 | pdgdaughters[0]=321;//K | |
623 | pdgdaughters[1]=321;//K | |
624 | pdgdaughters[2]=211;//pi | |
625 | } | |
0dbb51a0 | 626 | break; |
627 | case 4: | |
628 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm4Prong"); | |
629 | pdg=421; | |
a4ef4383 | 630 | if(fReadMC){ |
631 | pdgdaughters =new Int_t[4]; | |
632 | pdgdaughters[0]=321; | |
633 | pdgdaughters[1]=211; | |
634 | pdgdaughters[2]=211; | |
635 | pdgdaughters[3]=211; | |
636 | } | |
0dbb51a0 | 637 | break; |
638 | case 5: | |
639 | arrayProng=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong"); | |
640 | pdg=4122; | |
a4ef4383 | 641 | if(fReadMC){ |
642 | pdgdaughters =new Int_t[3]; | |
643 | pdgdaughters[0]=2212;//p | |
644 | pdgdaughters[1]=321;//K | |
645 | pdgdaughters[2]=211;//pi | |
646 | } | |
0dbb51a0 | 647 | break; |
648 | } | |
649 | } | |
dc222f77 | 650 | } else if(aod) { |
0dbb51a0 | 651 | switch(fDecayChannel){ |
652 | case 0: | |
653 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong"); | |
654 | pdg=411; | |
a4ef4383 | 655 | if(fReadMC){ |
656 | pdgdaughters =new Int_t[3]; | |
657 | pdgdaughters[0]=211;//pi | |
658 | pdgdaughters[1]=321;//K | |
659 | pdgdaughters[2]=211;//pi | |
660 | } | |
0dbb51a0 | 661 | break; |
662 | case 1: | |
663 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("D0toKpi"); | |
664 | pdg=421; | |
a4ef4383 | 665 | if(fReadMC){ |
666 | pdgdaughters =new Int_t[2]; | |
667 | pdgdaughters[0]=211;//pi | |
668 | pdgdaughters[1]=321;//K | |
669 | } | |
0dbb51a0 | 670 | break; |
671 | case 2: | |
672 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("Dstar"); | |
673 | pdg=413; | |
a4ef4383 | 674 | if(fReadMC){ |
24bcb2f3 | 675 | pdgdaughters =new Int_t[3]; |
a4ef4383 | 676 | pdgdaughters[1]=211;//pi |
677 | pdgdaughters[0]=321;//K | |
678 | pdgdaughters[2]=211;//pi (soft?) | |
679 | } | |
0dbb51a0 | 680 | break; |
681 | case 3: | |
682 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong"); | |
683 | pdg=431; | |
a4ef4383 | 684 | if(fReadMC){ |
685 | pdgdaughters =new Int_t[3]; | |
686 | pdgdaughters[0]=321;//K | |
687 | pdgdaughters[1]=321;//K | |
688 | pdgdaughters[2]=211;//pi | |
689 | } | |
0dbb51a0 | 690 | break; |
691 | case 4: | |
692 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("Charm4Prong"); | |
693 | pdg=421; | |
a4ef4383 | 694 | if(fReadMC){ |
695 | pdgdaughters =new Int_t[4]; | |
696 | pdgdaughters[0]=321; | |
697 | pdgdaughters[1]=211; | |
698 | pdgdaughters[2]=211; | |
699 | pdgdaughters[3]=211; | |
700 | } | |
0dbb51a0 | 701 | break; |
702 | case 5: | |
703 | arrayProng=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong"); | |
704 | pdg=4122; | |
a4ef4383 | 705 | if(fReadMC){ |
706 | pdgdaughters =new Int_t[3]; | |
707 | pdgdaughters[0]=2212;//p | |
708 | pdgdaughters[1]=321;//K | |
709 | pdgdaughters[2]=211;//pi | |
710 | } | |
0dbb51a0 | 711 | break; |
712 | } | |
713 | } | |
19222b31 | 714 | Bool_t isSimpleMode=fSimpleMode; |
0dbb51a0 | 715 | if(!arrayProng) { |
716 | AliInfo("Branch not found! The output will contain only trak related histograms\n"); | |
717 | isSimpleMode=kTRUE; | |
9af24f46 | 718 | fNEntries->Fill(2); |
0dbb51a0 | 719 | } |
720 | ||
a4ef4383 | 721 | TClonesArray *mcArray = 0; |
722 | AliAODMCHeader *mcHeader = 0; | |
723 | ||
3655ecf2 | 724 | if(!aod) { |
725 | delete [] pdgdaughters; | |
726 | return; | |
727 | } | |
728 | ||
a4ef4383 | 729 | //check if MC |
730 | if(fReadMC) { | |
731 | // load MC particles | |
732 | mcArray = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName()); | |
733 | if(!mcArray) { | |
734 | printf("AliAnalysisTaskSEHFQA::UserExec: MC particles branch not found!\n"); | |
fb9311e8 | 735 | delete [] pdgdaughters; |
a4ef4383 | 736 | return; |
737 | } | |
738 | ||
739 | // load MC header | |
740 | mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName()); | |
741 | if(!mcHeader) { | |
742 | printf("AliAnalysisTaskSEHFQA::UserExec: MC header branch not found!\n"); | |
fb9311e8 | 743 | delete [] pdgdaughters; |
a4ef4383 | 744 | return; |
745 | } | |
746 | } | |
23dfe729 | 747 | |
748 | ||
749 | UInt_t evSelMask=((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); | |
750 | Double_t centrality=fCuts->GetCentrality(aod); | |
751 | Double_t multiplicity=aod->GetHeader()->GetRefMultiplicity(); | |
17531bbd | 752 | Int_t runNumber = aod->GetRunNumber(); |
1b765719 | 753 | if(fOnOff[3]){ |
754 | TH2F* hTrigC=(TH2F*)fOutputEvSelection->FindObject("hTrigCent"); | |
755 | TH2F* hTrigM=(TH2F*)fOutputEvSelection->FindObject("hTrigMul"); | |
756 | AliCounterCollection* trigCount=(AliCounterCollection*)fOutputEvSelection->FindObject("trigCounter"); | |
17531bbd | 757 | |
1b765719 | 758 | hTrigC->Fill(0.,centrality); |
759 | hTrigM->Fill(0.,multiplicity); | |
760 | trigCount->Count(Form("triggerType:Any/Run:%d",runNumber)); | |
23dfe729 | 761 | |
1b765719 | 762 | if(evSelMask & AliVEvent::kMB){ |
763 | hTrigC->Fill(1.,centrality); | |
764 | hTrigM->Fill(1.,multiplicity); | |
765 | trigCount->Count(Form("triggerType:MB/Run:%d",runNumber)); | |
766 | } | |
767 | if(evSelMask & AliVEvent::kINT7){ | |
768 | hTrigC->Fill(2.,centrality); | |
769 | hTrigM->Fill(2.,multiplicity); | |
770 | } | |
771 | if(evSelMask & AliVEvent::kCINT5){ | |
772 | hTrigC->Fill(3.,centrality); | |
773 | hTrigM->Fill(3.,multiplicity); | |
774 | } | |
775 | if(evSelMask & AliVEvent::kCentral){ | |
776 | hTrigC->Fill(4.,centrality); | |
777 | hTrigM->Fill(4.,multiplicity); | |
778 | trigCount->Count(Form("triggerType:Cent/Run:%d",runNumber)); | |
779 | } | |
780 | if(evSelMask & AliVEvent::kSemiCentral){ | |
781 | hTrigC->Fill(5.,centrality); | |
782 | hTrigM->Fill(5.,multiplicity); | |
783 | trigCount->Count(Form("triggerType:SemiCent/Run:%d",runNumber)); | |
784 | } | |
785 | if(evSelMask & (AliVEvent::kEMC1 | AliVEvent::kEMC7)){ | |
786 | hTrigC->Fill(6.,centrality); | |
787 | hTrigM->Fill(6.,multiplicity); | |
788 | } | |
789 | if(evSelMask & (AliVEvent::kEMCEJE | AliVEvent::kEMCEGA)){ | |
790 | hTrigC->Fill(7.,centrality); | |
791 | hTrigM->Fill(7.,multiplicity); | |
792 | trigCount->Count(Form("triggerType:EMCAL/Run:%d",runNumber)); | |
793 | } | |
794 | if(evSelMask & (((AliVEvent::kCMUS5 | AliVEvent::kMUSH7) | (AliVEvent::kMUL7 | AliVEvent::kMUU7)) | (AliVEvent::kMUS7 | AliVEvent::kMUON))){ | |
795 | hTrigC->Fill(8.,centrality); | |
796 | hTrigM->Fill(8.,multiplicity); | |
797 | } | |
798 | if(evSelMask & (AliVEvent::kPHI1 | AliVEvent::kPHI7)){ | |
799 | hTrigC->Fill(9.,centrality); | |
800 | hTrigM->Fill(9.,multiplicity); | |
801 | } | |
802 | if(evSelMask & (AliVEvent::kDG5 | AliVEvent::kZED)){ | |
803 | hTrigC->Fill(10.,centrality); | |
804 | hTrigM->Fill(10.,multiplicity); | |
805 | } | |
23dfe729 | 806 | } |
807 | ||
808 | ||
0dbb51a0 | 809 | // fix for temporary bug in ESDfilter |
810 | // the AODs with null vertex pointer didn't pass the PhysSel | |
3655ecf2 | 811 | if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) { |
812 | delete [] pdgdaughters; | |
813 | return; | |
814 | } | |
0dbb51a0 | 815 | |
816 | // count event | |
817 | fNEntries->Fill(0); | |
9af24f46 | 818 | |
819 | //count events with good vertex | |
820 | // AOD primary vertex | |
821 | AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex(); | |
822 | TString primTitle = vtx1->GetTitle(); | |
823 | if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0) fNEntries->Fill(4); | |
824 | ||
a3aa1279 | 825 | // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD, C0SMH-B-NOPF-ALL |
5fc4893f | 826 | //TString trigclass=aod->GetFiredTriggerClasses(); |
827 | //if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNEntries->Fill(5); //tmp | |
a3aa1279 | 828 | |
818c1271 | 829 | |
23dfe729 | 830 | |
831 | ||
ac0c2841 | 832 | Bool_t evSelbyCentrality=kTRUE,evSelected=kTRUE,evSelByVertex=kTRUE,evselByPileup=kFALSE; |
0dbb51a0 | 833 | //select event |
834 | if(!fCuts->IsEventSelected(aod)) { | |
82f89d0d | 835 | evSelected=kFALSE; |
ac0c2841 | 836 | if(fCuts->GetWhyRejection()==1) {fNEntries->Fill(1); evselByPileup=kTRUE;}// rejected for pileup |
837 | if(fCuts->GetWhyRejection()==2 || fCuts->GetWhyRejection()==3) evSelbyCentrality=kFALSE; //rejected by centrality | |
838 | if(fCuts->GetWhyRejection()==4) evSelByVertex=kFALSE; //rejected by vertex | |
5fc4893f | 839 | if(fCuts->GetWhyRejection()==5) fNEntries->Fill(5);//tmp |
00c00d8e | 840 | if(fCuts->GetWhyRejection()==6 && fOnOff[3]) ((AliCounterCollection*)fOutputEvSelection->FindObject("evselection"))->Count(Form("evnonsel:zvtx/Run:%d",runNumber)); |
0dbb51a0 | 841 | } |
23dfe729 | 842 | if(evSelected){ |
843 | TH2F* hTrigS=(TH2F*)fOutputEvSelection->FindObject("hTrigCentSel"); | |
844 | hTrigS->Fill(0.,centrality); | |
845 | ||
846 | if(evSelMask & AliVEvent::kMB) hTrigS->Fill(1.,centrality); | |
847 | if(evSelMask & AliVEvent::kINT7) hTrigS->Fill(2.,centrality); | |
848 | if(evSelMask & AliVEvent::kCINT5) hTrigS->Fill(3.,centrality); | |
849 | if(evSelMask & AliVEvent::kCentral) hTrigS->Fill(4.,centrality); | |
850 | if(evSelMask & AliVEvent::kSemiCentral) hTrigS->Fill(5.,centrality); | |
851 | if(evSelMask & (AliVEvent::kEMC1 | AliVEvent::kEMC7)) hTrigS->Fill(6.,centrality); | |
852 | if(evSelMask & (AliVEvent::kEMCEJE | AliVEvent::kEMCEGA)) hTrigS->Fill(7.,centrality); | |
853 | if(evSelMask & (((AliVEvent::kCMUS5 | AliVEvent::kMUSH7) | (AliVEvent::kMUL7 | AliVEvent::kMUU7)) | (AliVEvent::kMUS7 | AliVEvent::kMUON))) hTrigS->Fill(8.,centrality); | |
854 | if(evSelMask & (AliVEvent::kPHI1 | AliVEvent::kPHI7)) hTrigS->Fill(9.,centrality); | |
855 | if(evSelMask & (AliVEvent::kDG5 | AliVEvent::kZED)) hTrigS->Fill(10.,centrality); | |
856 | } | |
857 | ||
ac0c2841 | 858 | if(evSelected || (!evSelected && !evSelbyCentrality && evSelByVertex && !evselByPileup)){ //events selected or not selected because of vtx or pileup |
5fc4893f | 859 | if(fOnOff[2] && fCuts->GetUseCentrality()){ |
818c1271 | 860 | |
ac0c2841 | 861 | Float_t stdCentf=fCuts->GetCentrality(aod); |
862 | Int_t stdCent = (Int_t)(stdCentf+0.5); | |
5fc4893f | 863 | Float_t secondCentf =fCuts->GetCentrality(aod,fEstimator); |
864 | Int_t secondCent = (Int_t)(secondCentf+0.5); | |
82f89d0d | 865 | Int_t mincent=stdCent-stdCent%10; |
5fc4893f | 866 | if(stdCentf==-1) { |
5587ae1a | 867 | mincent=-10; |
5fc4893f | 868 | stdCent=-1; |
869 | } | |
c40c91c6 | 870 | if(mincent==100)mincent--; |
82f89d0d | 871 | ((AliCounterCollection*)fOutputCounters->FindObject("stdEstimator"))->Count(Form("centralityclass:%d_%d/Run:%d",mincent,mincent+10,runNumber)); |
5fc4893f | 872 | |
82f89d0d | 873 | mincent=secondCent-secondCent%10; |
5fc4893f | 874 | if(secondCentf==-1) { |
5587ae1a | 875 | mincent=-10; |
5fc4893f | 876 | secondCent=-1; |
877 | } | |
c40c91c6 | 878 | if(mincent==100)mincent--; |
82f89d0d | 879 | ((AliCounterCollection*)fOutputCounters->FindObject("secondEstimator"))->Count(Form("centralityclass:%d_%d/Run:%d",mincent,mincent+10,runNumber)); |
880 | ||
881 | if(stdCent<fCuts->GetMinCentrality() || stdCent>fCuts->GetMaxCentrality()){ | |
882 | ((TH1F*)fOutputCheckCentrality->FindObject("hNtrackletsOut"))->Fill(aod->GetTracklets()->GetNumberOfTracklets()); | |
883 | ((TH1F*)fOutputCheckCentrality->FindObject("hMultOut"))->Fill(aod->GetHeader()->GetRefMultiplicity()); | |
884 | }else{ | |
885 | ((TH1F*)fOutputCheckCentrality->FindObject("hNtrackletsIn"))->Fill(aod->GetTracklets()->GetNumberOfTracklets()); | |
886 | ((TH1F*)fOutputCheckCentrality->FindObject("hMultIn"))->Fill(aod->GetHeader()->GetRefMultiplicity()); | |
887 | } | |
ac0c2841 | 888 | ((TH2F*)fOutputCheckCentrality->FindObject("hMultvsPercentile"))->Fill(aod->GetHeader()->GetRefMultiplicity(),stdCentf); |
0dbb51a0 | 889 | |
82f89d0d | 890 | PostData(6,fOutputCheckCentrality); |
891 | ||
892 | } else{ | |
5fc4893f | 893 | if(fOnOff[0]){ |
894 | ((TH1F*)fOutputTrack->FindObject("hNtracklets"))->Fill(aod->GetTracklets()->GetNumberOfTracklets()); | |
895 | ((TH1F*)fOutputTrack->FindObject("hMult"))->Fill(aod->GetHeader()->GetRefMultiplicity()); | |
896 | } | |
a4ef4383 | 897 | } |
82f89d0d | 898 | } |
899 | ||
818c1271 | 900 | if(fOnOff[3]){ |
901 | const AliVVertex *vertex = aod->GetPrimaryVertex(); | |
902 | Double_t zvtx=vertex->GetZ(); | |
a4b0ffc7 | 903 | if(evSelected || (!evSelected && TMath::Abs(zvtx) > 10.)) |
818c1271 | 904 | ((TH1F*)fOutputEvSelection->FindObject("hzvtx"))->Fill(zvtx); |
905 | } | |
906 | ||
82f89d0d | 907 | if(!evSelected) { |
908 | delete [] pdgdaughters; | |
909 | return; //discard all events not selected (vtx and/or centrality) | |
a4ef4383 | 910 | } |
911 | ||
818c1271 | 912 | |
476db98d | 913 | AliAODPidHF* pidHF=fCuts->GetPidHF(); |
362242bf | 914 | if(!pidHF) { |
915 | delete [] pdgdaughters; | |
916 | return; | |
917 | } | |
a4b0ffc7 | 918 | AliPIDResponse* respF=pidHF->GetPidResponse(); |
476db98d | 919 | AliTPCPIDResponse* tpcres=new AliTPCPIDResponse(); |
a4b0ffc7 | 920 | if(pidHF->GetOldPid()) pidHF->SetBetheBloch(*tpcres); |
921 | Bool_t oldPID=pidHF->GetOldPid(); | |
476db98d | 922 | |
923 | ||
0dbb51a0 | 924 | Int_t ntracks=0; |
5fc4893f | 925 | Int_t isGoodTrack=0, isFakeTrack=0; |
0dbb51a0 | 926 | |
927 | if(aod) ntracks=aod->GetNTracks(); | |
928 | ||
5fc4893f | 929 | if(fOnOff[0] || fOnOff[1]){ |
930 | //loop on tracks in the event | |
931 | for (Int_t k=0;k<ntracks;k++){ | |
932 | AliAODTrack* track=aod->GetTrack(k); | |
5fc4893f | 933 | AliAODPid *pid = track->GetDetPid(); |
934 | ||
0dbb51a0 | 935 | |
5fc4893f | 936 | if(fOnOff[1]){ |
937 | if(!pid) {if (fDebug>1)cout<<"No AliAODPid found"<<endl; continue;} | |
938 | Double_t times[AliPID::kSPECIES]; | |
939 | pid->GetIntegratedTimes(times); | |
0dbb51a0 | 940 | |
5fc4893f | 941 | Double_t tofRes[AliPID::kSPECIES]; |
942 | pid->GetTOFpidResolution(tofRes); | |
943 | ||
944 | //check TOF | |
b906dda8 | 945 | TH1F* htmpfl=((TH1F*)fOutputPID->FindObject("hTOFflags")); |
946 | htmpfl->Fill(0.); | |
23dfe729 | 947 | if (track->GetStatus()&AliESDtrack::kTPCout) htmpfl->Fill(1.); |
948 | if (track->GetStatus()&AliESDtrack::kTOFout) htmpfl->Fill(2.); | |
949 | if (track->GetStatus()&AliESDtrack::kTIME) htmpfl->Fill(3.); | |
950 | if (track->GetStatus()&AliESDtrack::kTOFpid) htmpfl->Fill(4.); | |
951 | if (track->GetStatus()&AliESDtrack::kTOFmismatch) htmpfl->Fill(5.); | |
b906dda8 | 952 | |
5fc4893f | 953 | if(pidHF && pidHF->CheckStatus(track,"TOF")){ |
954 | ((TH1F*)fOutputPID->FindObject("hTOFtime"))->Fill(times[AliPID::kProton]); | |
955 | ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptime"))->Fill(track->P(),pid->GetTOFsignal()-times[3]); //3 is kaon | |
956 | ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(pid->GetTOFsignal()); | |
957 | if (pid->GetTOFsignal()< 0) ((TH1F*)fOutputPID->FindObject("hTOFsig"))->Fill(-1); | |
958 | ||
5587ae1a | 959 | |
5fc4893f | 960 | // test TOF sigma PID |
961 | if (tofRes[2] != 0.) { // protection against 'old' AODs... | |
962 | ((TH2F*)fOutputPID->FindObject("hTOFsigmaKSigPid"))->Fill(track->P(),(pid->GetTOFsignal()-times[AliPID::kKaon])/tofRes[3]); | |
963 | ((TH2F*)fOutputPID->FindObject("hTOFsigmaPionSigPid"))->Fill(track->P(),(pid->GetTOFsignal()-times[AliPID::kPion])/tofRes[2]); | |
964 | ((TH2F*)fOutputPID->FindObject("hTOFsigmaProtonSigPid"))->Fill(track->P(),(pid->GetTOFsignal()-times[AliPID::kProton])/tofRes[4]); | |
965 | for (Int_t iS=2; iS<5; iS++){ //we plot TOF Pid resolution for 3-sigma identified particles | |
966 | if ( (TMath::Abs(times[iS]-pid->GetTOFsignal())/tofRes[iS])<3.){ | |
967 | switch (iS) { | |
968 | case AliPID::kPion: | |
969 | ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigPion"))->Fill(tofRes[iS]); | |
970 | break; | |
971 | case AliPID::kKaon: | |
972 | ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigKaon"))->Fill(tofRes[iS]); | |
973 | break; | |
974 | case AliPID::kProton: | |
975 | ((TH1F*)fOutputPID->FindObject("hTOFsigPid3sigProton"))->Fill(tofRes[iS]); | |
976 | break; | |
977 | default: | |
978 | break; | |
979 | } | |
980 | } | |
a4ef4383 | 981 | } |
982 | } | |
5fc4893f | 983 | }//if TOF status |
984 | ||
985 | if(pidHF && pidHF->CheckStatus(track,"TPC")){ | |
476db98d | 986 | |
5fc4893f | 987 | Double_t TPCp=pid->GetTPCmomentum(); |
988 | Double_t TPCsignal=pid->GetTPCsignal(); | |
989 | ((TH1F*)fOutputPID->FindObject("hTPCsig"))->Fill(TPCsignal); | |
990 | ((TH1F*)fOutputPID->FindObject("hTPCsigvsp"))->Fill(TPCp,TPCsignal); | |
991 | //if (pidHF->IsKaonRaw(track, "TOF")) | |
a4b0ffc7 | 992 | if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaK"))->Fill(TPCp,respF->NumberOfSigmasTPC(track,AliPID::kKaon)); |
993 | if (oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaK"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kKaon)); | |
5fc4893f | 994 | //if (pidHF->IsPionRaw(track, "TOF")) |
a4b0ffc7 | 995 | if(oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaPion"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kPion)); |
996 | if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaPion"))->Fill(TPCp,respF->NumberOfSigmasTPC(track,AliPID::kPion)); | |
5fc4893f | 997 | //if (pidHF->IsProtonRaw(track,"TOF")) |
a4b0ffc7 | 998 | if(oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaProton"))->Fill(TPCp,tpcres->GetNumberOfSigmas(TPCp,TPCsignal,track->GetTPCNcls(),AliPID::kProton)); |
999 | if(!oldPID) ((TH2F*)fOutputPID->FindObject("hTPCsigmaProton"))->Fill(TPCp,respF->NumberOfSigmasTPC(track,AliPID::kProton)); | |
5fc4893f | 1000 | }//if TPC status |
1001 | } //end PID histograms | |
1002 | ||
1003 | Int_t nclsTot=0,nclsSPD=0; | |
1004 | ||
1005 | //check clusters of the tracks | |
1006 | if(fOnOff[0]){ | |
1007 | ||
bc6846db | 1008 | ((TH1F*)fOutputTrack->FindObject("hnLayerITS"))->Fill(-1); |
5fc4893f | 1009 | for(Int_t l=0;l<6;l++) { |
1010 | if(TESTBIT(track->GetITSClusterMap(),l)) { | |
bc6846db | 1011 | ((TH1F*)fOutputTrack->FindObject("hnLayerITS"))->Fill(l); |
5fc4893f | 1012 | nclsTot++; if(l<2) nclsSPD++; |
1013 | } | |
1014 | } | |
1015 | ((TH1F*)fOutputTrack->FindObject("hnClsITS"))->Fill(nclsTot); | |
1016 | ((TH1F*)fOutputTrack->FindObject("hnClsSPD"))->Fill(nclsSPD); | |
39dd297f | 1017 | if(track->Pt()>0.3 && |
1018 | TMath::Abs(track->Eta())<0.8 && | |
1019 | track->GetStatus()&AliESDtrack::kITSrefit && | |
1020 | track->GetStatus()&AliESDtrack::kTPCrefit && | |
1021 | nclsSPD>0){ | |
1022 | ((TH1F*)fOutputTrack->FindObject("hnClsITSselTr"))->Fill(nclsTot); | |
1023 | } | |
5fc4893f | 1024 | if(!(track->GetStatus()&AliESDtrack::kTPCin) && track->GetStatus()&AliESDtrack::kITSrefit && !(track->GetStatus()&AliESDtrack::kITSpureSA)){//tracks retrieved in the ITS and not reconstructed in the TPC |
1025 | ((TH1F*)fOutputTrack->FindObject("hnClsITS-SA"))->Fill(nclsTot); | |
bc6846db | 1026 | ((TH1F*)fOutputTrack->FindObject("hnLayerITS"))->Fill(-1); |
1027 | for(Int_t l=0;l<6;l++) { | |
1028 | if(TESTBIT(track->GetITSClusterMap(),l)) { | |
1029 | ((TH1F*)fOutputTrack->FindObject("hnLayerITSsa"))->Fill(l); | |
1030 | } | |
1031 | } | |
acc33385 | 1032 | } |
5fc4893f | 1033 | Int_t label=0; |
1034 | if(fReadMC){ | |
1035 | label=track->GetLabel(); | |
1036 | if (label<0)fNEntries->Fill(8); | |
1037 | else fNEntries->Fill(9); | |
acc33385 | 1038 | } |
0dbb51a0 | 1039 | |
5fc4893f | 1040 | if(isSimpleMode){ |
1041 | ||
1042 | if (track->Pt()>0.3 && | |
1043 | track->GetStatus()&AliESDtrack::kTPCrefit && | |
1044 | track->GetStatus()&AliESDtrack::kITSrefit && | |
1045 | /*nclsTot>3 &&*/ | |
1046 | nclsSPD>0) {//count good tracks | |
1047 | ||
1048 | ||
1049 | if(fReadMC && label<0) { | |
1050 | ((TH1F*)fOutputTrack->FindObject("hptFakeTr"))->Fill(track->Pt()); | |
1051 | isFakeTrack++; | |
1052 | } else { | |
1053 | ((TH1F*)fOutputTrack->FindObject("hptGoodTr"))->Fill(track->Pt()); | |
1054 | isGoodTrack++; | |
1055 | } | |
ad42e35b | 1056 | } |
818c1271 | 1057 | } //simple mode: no IsSelected on tracks: use "manual" cuts |
1058 | } //fill track histos | |
5fc4893f | 1059 | } //end loop on tracks |
0dbb51a0 | 1060 | |
5fc4893f | 1061 | //fill once per event |
1062 | if(fOnOff[0]){ | |
1063 | if (fReadMC) ((TH1F*)fOutputTrack->FindObject("hdistrFakeTr"))->Fill(isFakeTrack); | |
1064 | ((TH1F*)fOutputTrack->FindObject("hdistrGoodTr"))->Fill(isGoodTrack); | |
1065 | } | |
0dbb51a0 | 1066 | |
5fc4893f | 1067 | if(!isSimpleMode){ |
1068 | // loop over candidates | |
1069 | Int_t nCand = arrayProng->GetEntriesFast(); | |
1070 | Int_t ndaugh=3; | |
1071 | if(fDecayChannel==AliAnalysisTaskSEHFQA::kD0toKpi) ndaugh=2; | |
1072 | if(fDecayChannel==AliAnalysisTaskSEHFQA::kD0toKpipipi) ndaugh=4; | |
1073 | ||
1074 | for (Int_t iCand = 0; iCand < nCand; iCand++) { | |
1075 | AliAODRecoDecayHF *d = (AliAODRecoDecayHF*)arrayProng->UncheckedAt(iCand); | |
1076 | if(d->GetSelectionMap()) { | |
1077 | if(fDecayChannel==AliAnalysisTaskSEHFQA::kD0toKpi && !d->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)) continue; //skip the D0 from Dstar | |
1078 | if(fDecayChannel==AliAnalysisTaskSEHFQA::kDplustoKpipi && !d->HasSelectionBit(AliRDHFCuts::kDplusCuts)) continue; //skip the 3 prong !D+ | |
1079 | } | |
acc33385 | 1080 | |
5fc4893f | 1081 | if(fReadMC){ |
1082 | Int_t labD = d->MatchToMC(pdg,mcArray,ndaugh,pdgdaughters); | |
1083 | if(labD>=0){ | |
1084 | AliAODMCParticle *partD = (AliAODMCParticle*)mcArray->At(labD); | |
1085 | Int_t label=partD->GetMother(); | |
1086 | AliAODMCParticle *mot = (AliAODMCParticle*)mcArray->At(label); | |
1087 | while(label>=0){//get first mother | |
1088 | mot = (AliAODMCParticle*)mcArray->At(label); | |
1089 | label=mot->GetMother(); | |
1090 | } | |
1091 | Int_t pdgMotCode = mot->GetPdgCode(); | |
1092 | ||
1093 | if(TMath::Abs(pdgMotCode)==4) fNEntries->Fill(6); //from primary charm | |
1094 | if(TMath::Abs(pdgMotCode)==5) fNEntries->Fill(7); //from beauty | |
0dbb51a0 | 1095 | |
acc33385 | 1096 | } |
5fc4893f | 1097 | }//end MC |
1098 | else fNEntries->Fill(6); //count the candidates (data) | |
1099 | ||
1100 | for(Int_t id=0;id<ndaugh;id++){ | |
1101 | ||
1102 | //other histograms to be filled when the cut object is given | |
1103 | AliAODTrack* track=(AliAODTrack*)d->GetDaughter(id); | |
1104 | ||
1105 | //track quality | |
1106 | ||
1107 | if (fCuts->IsInFiducialAcceptance(d->Pt(),d->Y(pdg)) && fCuts->IsSelected(d,AliRDHFCuts::kTracks,aod)) { | |
1108 | ||
1109 | Int_t label=0; | |
1110 | if(fReadMC)label=track->GetLabel(); | |
ad42e35b | 1111 | if(fOnOff[0]){ |
818c1271 | 1112 | |
ad42e35b | 1113 | if(fReadMC && label<0) { |
1114 | isFakeTrack++; | |
1115 | ((TH1F*)fOutputTrack->FindObject("hptFakeTr"))->Fill(track->Pt()); | |
5fc4893f | 1116 | |
ad42e35b | 1117 | ((TH1F*)fOutputTrack->FindObject("hd0f"))->Fill(d->Getd0Prong(id)); |
1118 | } else { | |
1119 | isGoodTrack++; | |
1120 | ((TH1F*)fOutputTrack->FindObject("hptGoodTr"))->Fill(track->Pt()); | |
ad42e35b | 1121 | ((TH1F*)fOutputTrack->FindObject("hd0"))->Fill(d->Getd0Prong(id)); |
4563d678 | 1122 | Double_t d0rphiz[2],covd0[3]; |
1123 | Bool_t isDCA=track->PropagateToDCA(aod->GetPrimaryVertex(),aod->GetMagneticField(),9999.,d0rphiz,covd0); | |
1124 | if(isDCA) ((TH1F*)fOutputTrack->FindObject("hd0z"))->Fill(d0rphiz[1]); | |
ad42e35b | 1125 | } |
818c1271 | 1126 | } |
5fc4893f | 1127 | if (fCuts->IsSelected(d,AliRDHFCuts::kAll,aod) && fOnOff[1]){ |
0dbb51a0 | 1128 | |
5fc4893f | 1129 | AliAODPid *pid = track->GetDetPid(); |
5fc4893f | 1130 | Double_t times[5]; |
1131 | pid->GetIntegratedTimes(times); | |
1132 | if(pidHF && pidHF->CheckStatus(track,"TOF")) ((TH2F*)fOutputPID->FindObject("hTOFtimeKaonHyptimeAC"))->Fill(track->P(),pid->GetTOFsignal()-times[AliPID::kKaon]); | |
1133 | if(pidHF && pidHF->CheckStatus(track,"TPC")) ((TH2F*)fOutputPID->FindObject("hTPCsigvspAC"))->Fill(pid->GetTPCmomentum(),pid->GetTPCsignal()); | |
1134 | ||
1135 | fNEntries->Fill(3); | |
1136 | } //end analysis cuts | |
1137 | } //end acceptance and track cuts | |
1138 | } //end loop on tracks in the candidate | |
1139 | } //end loop on candidates | |
1140 | if(fOnOff[0]){ | |
1141 | if(fReadMC) ((TH1F*)fOutputTrack->FindObject("hdistrFakeTr"))->Fill(isFakeTrack); | |
1142 | ((TH1F*)fOutputTrack->FindObject("hdistrGoodTr"))->Fill(isGoodTrack); | |
1143 | } | |
1144 | } | |
1145 | } //end if on pid or track histograms | |
fb9311e8 | 1146 | |
476db98d | 1147 | delete tpcres; |
fb9311e8 | 1148 | delete [] pdgdaughters; |
a4ef4383 | 1149 | PostData(1,fNEntries); |
5fc4893f | 1150 | if(fOnOff[1]) PostData(2,fOutputPID); |
1151 | if(fOnOff[0]) PostData(3,fOutputTrack); | |
a4ef4383 | 1152 | PostData(4,fCuts); |
5fc4893f | 1153 | if(fOnOff[2]) PostData(5,fOutputCounters); |
1154 | //Post data 6 done in case of centrality on | |
82f89d0d | 1155 | |
0dbb51a0 | 1156 | } |
1157 | ||
a4ef4383 | 1158 | //____________________________________________________________________________ |
0dbb51a0 | 1159 | void AliAnalysisTaskSEHFQA::Terminate(Option_t */*option*/){ |
1160 | //terminate analysis | |
1161 | ||
1162 | fNEntries = dynamic_cast<TH1F*>(GetOutputData(1)); | |
1163 | if(!fNEntries){ | |
1164 | printf("ERROR: %s not available\n",GetOutputSlot(1)->GetContainer()->GetName()); | |
1165 | return; | |
1166 | } | |
1167 | ||
1168 | fOutputPID = dynamic_cast<TList*> (GetOutputData(2)); | |
5fc4893f | 1169 | if (!fOutputPID && fOnOff[1]) { |
0dbb51a0 | 1170 | printf("ERROR: %s not available\n",GetOutputSlot(2)->GetContainer()->GetName()); |
1171 | return; | |
1172 | } | |
1173 | ||
1174 | fOutputTrack = dynamic_cast<TList*> (GetOutputData(3)); | |
5fc4893f | 1175 | if (!fOutputTrack && fOnOff[0]) { |
0dbb51a0 | 1176 | printf("ERROR: %s not available\n",GetOutputSlot(3)->GetContainer()->GetName()); |
1177 | return; | |
1178 | } | |
1179 | ||
1180 | } | |
1181 |