]>
Commit | Line | Data |
---|---|---|
7eb0cc73 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2008, 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 | ||
7eb0cc73 | 18 | ///////////////////////////////////////////////////////////// |
19 | // | |
4c7fd068 | 20 | // AliAnalysisTaskSE for the extraction of signal(e.g Lambdac) of heavy flavor |
7eb0cc73 | 21 | // decay candidates with the MC truth. |
4c7fd068 | 22 | // Authors: r.romita@gsi.de |
7eb0cc73 | 23 | ///////////////////////////////////////////////////////////// |
24 | ||
25 | #include <TClonesArray.h> | |
26 | #include <TNtuple.h> | |
27 | #include <TCanvas.h> | |
28 | #include <TList.h> | |
29 | #include <TString.h> | |
30 | #include <TH1F.h> | |
31 | #include <TH2F.h> | |
32 | #include <TDatabasePDG.h> | |
33 | ||
029ed93a | 34 | #include <AliAnalysisDataSlot.h> |
35 | #include <AliAnalysisDataContainer.h> | |
7eb0cc73 | 36 | #include "AliAnalysisManager.h" |
37 | #include "AliAODHandler.h" | |
38 | #include "AliAODEvent.h" | |
39 | #include "AliAODVertex.h" | |
40 | #include "AliAODTrack.h" | |
41 | #include "AliAODMCHeader.h" | |
42 | #include "AliAODMCParticle.h" | |
43 | #include "AliAODRecoDecayHF3Prong.h" | |
44 | #include "AliAnalysisVertexingHF.h" | |
45 | #include "AliAnalysisTaskSE.h" | |
46 | #include "AliAnalysisTaskSELambdac.h" | |
47 | #include "AliKFParticle.h" | |
48 | #include "AliAODPidHF.h" | |
49 | #include "AliRDHFCutsLctopKpi.h" | |
50 | #include "AliRDHFCuts.h" | |
7ad4b782 | 51 | #include "AliKFVertex.h" |
52 | #include "AliESDVertex.h" | |
029ed93a | 53 | #include "AliTOFPIDResponse.h" |
54 | #include "AliAODpidUtil.h" | |
55 | #include "AliAODPid.h" | |
56 | #include "AliInputEventHandler.h" | |
7eb0cc73 | 57 | |
58 | ClassImp(AliAnalysisTaskSELambdac) | |
59 | ||
60 | ||
61 | //________________________________________________________________________ | |
62 | AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac(): | |
63 | AliAnalysisTaskSE(), | |
64 | fOutput(0), | |
65 | fHistNEvents(0), | |
7ad4b782 | 66 | fhChi2(0), |
67 | fhMassPtGreater3(0), | |
68 | fhMassPtGreater3TC(0), | |
029ed93a | 69 | fhMassPtGreater3Kp(0), |
70 | fhMassPtGreater3KpTC(0), | |
71 | fhMassPtGreater3Lpi(0), | |
72 | fhMassPtGreater3LpiTC(0), | |
73 | fhMassPtGreater2(0), | |
74 | fhMassPtGreater2TC(0), | |
75 | fhMassPtGreater2Kp(0), | |
76 | fhMassPtGreater2KpTC(0), | |
77 | fhMassPtGreater2Lpi(0), | |
78 | fhMassPtGreater2LpiTC(0), | |
7eb0cc73 | 79 | fNtupleLambdac(0), |
80 | fUpmasslimit(2.486), | |
81 | fLowmasslimit(2.086), | |
82 | fNPtBins(0), | |
83 | fRDCutsAnalysis(0), | |
84 | fRDCutsProduction(0), | |
85 | fListCuts(0), | |
86 | fFillNtuple(kFALSE), | |
87 | fReadMC(kFALSE), | |
88 | fMCPid(kFALSE), | |
89 | fRealPid(kFALSE), | |
90 | fResPid(kTRUE), | |
91 | fUseKF(kFALSE), | |
029ed93a | 92 | fAnalysis(kFALSE), |
93 | fVHF(0), | |
94 | fFillVarHists(kTRUE), | |
95 | fNentries(0), | |
96 | fOutputMC(0), | |
97 | fUtilPid(0) | |
7eb0cc73 | 98 | { |
99 | // Default constructor | |
100 | } | |
101 | ||
102 | //________________________________________________________________________ | |
103 | AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac(const char *name,Bool_t fillNtuple,AliRDHFCutsLctopKpi *lccutsana,AliRDHFCutsLctopKpi *lccutsprod): | |
104 | AliAnalysisTaskSE(name), | |
105 | fOutput(0), | |
106 | fHistNEvents(0), | |
7ad4b782 | 107 | fhChi2(0), |
108 | fhMassPtGreater3(0), | |
109 | fhMassPtGreater3TC(0), | |
029ed93a | 110 | fhMassPtGreater3Kp(0), |
111 | fhMassPtGreater3KpTC(0), | |
112 | fhMassPtGreater3Lpi(0), | |
113 | fhMassPtGreater3LpiTC(0), | |
114 | fhMassPtGreater2(0), | |
115 | fhMassPtGreater2TC(0), | |
116 | fhMassPtGreater2Kp(0), | |
117 | fhMassPtGreater2KpTC(0), | |
118 | fhMassPtGreater2Lpi(0), | |
119 | fhMassPtGreater2LpiTC(0), | |
7eb0cc73 | 120 | fNtupleLambdac(0), |
121 | fUpmasslimit(2.486), | |
122 | fLowmasslimit(2.086), | |
123 | fNPtBins(0), | |
124 | fRDCutsAnalysis(lccutsana), | |
125 | fRDCutsProduction(lccutsprod), | |
126 | fListCuts(0), | |
127 | fFillNtuple(fillNtuple), | |
128 | fReadMC(kFALSE), | |
129 | fMCPid(kFALSE), | |
130 | fRealPid(kTRUE), | |
131 | fResPid(kFALSE), | |
132 | fUseKF(kFALSE), | |
029ed93a | 133 | fAnalysis(kFALSE), |
134 | fVHF(0), | |
135 | fFillVarHists(kTRUE), | |
136 | fNentries(0), | |
137 | fOutputMC(0), | |
138 | fUtilPid(0) | |
7eb0cc73 | 139 | { |
7eb0cc73 | 140 | SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,fRDCutsAnalysis->GetPtBinLimits()); |
141 | // Default constructor | |
142 | // Output slot #1 writes into a TList container | |
143 | DefineOutput(1,TList::Class()); //My private output | |
144 | DefineOutput(2,TList::Class()); | |
029ed93a | 145 | DefineOutput(3,TList::Class()); |
146 | DefineOutput(4,TH1F::Class()); | |
7eb0cc73 | 147 | if(fFillNtuple){ |
148 | // Output slot #2 writes into a TNtuple container | |
029ed93a | 149 | DefineOutput(5,TNtuple::Class()); //My private output |
7eb0cc73 | 150 | } |
151 | } | |
152 | ||
153 | //________________________________________________________________________ | |
154 | AliAnalysisTaskSELambdac::~AliAnalysisTaskSELambdac() | |
155 | { | |
156 | // Destructor | |
157 | if (fOutput) { | |
158 | delete fOutput; | |
159 | fOutput = 0; | |
160 | } | |
029ed93a | 161 | if (fOutputMC) { |
162 | delete fOutputMC; | |
163 | fOutputMC = 0; | |
164 | } | |
165 | ||
7eb0cc73 | 166 | if (fVHF) { |
167 | delete fVHF; | |
168 | fVHF = 0; | |
169 | } | |
170 | ||
171 | if(fRDCutsAnalysis){ | |
172 | delete fRDCutsAnalysis; | |
173 | fRDCutsAnalysis = 0; | |
174 | } | |
175 | if(fRDCutsProduction){ | |
176 | delete fRDCutsProduction; | |
177 | fRDCutsProduction = 0; | |
178 | } | |
179 | ||
180 | if (fListCuts) { | |
181 | delete fListCuts; | |
182 | fListCuts = 0; | |
183 | } | |
029ed93a | 184 | if (fNentries){ |
185 | delete fNentries; | |
186 | fNentries = 0; | |
187 | } | |
188 | if (fUtilPid){ | |
189 | delete fUtilPid; | |
190 | fUtilPid = 0; | |
191 | } | |
7eb0cc73 | 192 | } |
193 | //_________________________________________________________________ | |
194 | void AliAnalysisTaskSELambdac::SetMassLimits(Float_t range){ | |
195 | fUpmasslimit = 2.286+range; | |
196 | fLowmasslimit = 2.286-range; | |
197 | } | |
198 | //_________________________________________________________________ | |
199 | void AliAnalysisTaskSELambdac::SetMassLimits(Float_t lowlimit, Float_t uplimit){ | |
200 | if(uplimit>lowlimit) | |
201 | { | |
202 | fUpmasslimit = lowlimit; | |
203 | fLowmasslimit = uplimit; | |
204 | } | |
205 | } | |
206 | ||
207 | ||
208 | //________________________________________________________________________ | |
209 | void AliAnalysisTaskSELambdac::SetPtBinLimit(Int_t n, Float_t* lim){ | |
210 | // define pt bins for analysis | |
211 | if(n>kMaxPtBins){ | |
212 | printf("Max. number of Pt bins = %d\n",kMaxPtBins); | |
213 | fNPtBins=kMaxPtBins; | |
214 | fArrayBinLimits[0]=0.; | |
215 | fArrayBinLimits[1]=2.; | |
216 | fArrayBinLimits[2]=3.; | |
7ad4b782 | 217 | fArrayBinLimits[3]=4.; |
7eb0cc73 | 218 | for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.; |
219 | }else{ | |
220 | fNPtBins=n-1; | |
221 | fArrayBinLimits[0]=lim[0]; | |
222 | for(Int_t i=1; i<fNPtBins+1; i++) | |
223 | if(lim[i]>fArrayBinLimits[i-1]){ | |
224 | fArrayBinLimits[i]=lim[i]; | |
225 | } | |
226 | else { | |
227 | fArrayBinLimits[i]=fArrayBinLimits[i-1]; | |
228 | } | |
229 | for(Int_t i=fNPtBins; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.; | |
230 | } | |
231 | if(fDebug > 1){ | |
232 | printf("Number of Pt bins = %d\n",fNPtBins); | |
e11ae259 | 233 | for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]); |
7eb0cc73 | 234 | } |
235 | } | |
236 | //_________________________________________________________________ | |
4c7fd068 | 237 | Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin) const{ |
7eb0cc73 | 238 | if(ibin>fNPtBins)return -1; |
239 | return fArrayBinLimits[ibin]; | |
240 | } | |
241 | ||
242 | //_________________________________________________________________ | |
243 | void AliAnalysisTaskSELambdac::Init() | |
244 | { | |
245 | // Initialization | |
246 | ||
247 | if(fDebug > 1) printf("AnalysisTaskSELambdac::Init() \n"); | |
248 | ||
249 | fListCuts=new TList(); | |
029ed93a | 250 | fListCuts->SetOwner(); |
7eb0cc73 | 251 | |
dc222f77 | 252 | fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsAnalysis)); |
253 | fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsProduction)); | |
254 | PostData(2,fListCuts); | |
7eb0cc73 | 255 | return; |
256 | } | |
257 | ||
258 | //________________________________________________________________________ | |
259 | void AliAnalysisTaskSELambdac::UserCreateOutputObjects() | |
260 | { | |
261 | // Create the output container | |
262 | // | |
263 | if(fDebug > 1) printf("AnalysisTaskSELambdac::UserCreateOutputObjects() \n"); | |
264 | ||
265 | // Several histograms are more conveniently managed in a TList | |
266 | fOutput = new TList(); | |
267 | fOutput->SetOwner(); | |
268 | fOutput->SetName("OutputHistos"); | |
269 | ||
270 | TString hisname; | |
271 | Int_t index=0; | |
272 | Int_t indexLS=0; | |
273 | for(Int_t i=0;i<fNPtBins;i++){ | |
274 | ||
275 | index=GetHistoIndex(i); | |
276 | indexLS=GetLSHistoIndex(i); | |
277 | ||
278 | hisname.Form("hMassPt%d",i); | |
279 | fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
280 | fMassHist[index]->Sumw2(); | |
7eb0cc73 | 281 | hisname.Form("hMassPt%dTC",i); |
282 | fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
283 | fMassHistTC[index]->Sumw2(); | |
284 | ||
029ed93a | 285 | hisname.Form("hMassPtLpi%d",i); |
286 | fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
287 | fMassHistLpi[index]->Sumw2(); | |
288 | hisname.Form("hMassPtLpi%dTC",i); | |
289 | fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
290 | fMassHistLpiTC[index]->Sumw2(); | |
291 | ||
292 | hisname.Form("hMassPtKp%d",i); | |
293 | fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
294 | fMassHistKp[index]->Sumw2(); | |
295 | hisname.Form("hMassPtKp%dTC",i); | |
296 | fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
297 | fMassHistKpTC[index]->Sumw2(); | |
298 | //signal | |
7eb0cc73 | 299 | index=GetSignalHistoIndex(i); |
7eb0cc73 | 300 | hisname.Form("hSigPt%d",i); |
301 | fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
302 | fMassHist[index]->Sumw2(); | |
7eb0cc73 | 303 | hisname.Form("hSigPt%dTC",i); |
304 | fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
305 | fMassHistTC[index]->Sumw2(); | |
029ed93a | 306 | hisname.Form("hSigPtLpi%d",i); |
307 | fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
308 | fMassHistLpi[index]->Sumw2(); | |
309 | hisname.Form("hSigPtLpi%dTC",i); | |
310 | fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
311 | fMassHistLpiTC[index]->Sumw2(); | |
312 | ||
313 | hisname.Form("hSigPtKp%d",i); | |
314 | fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
315 | fMassHistKp[index]->Sumw2(); | |
316 | hisname.Form("hSigPtKp%dTC",i); | |
317 | fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
318 | fMassHistKpTC[index]->Sumw2(); | |
7eb0cc73 | 319 | |
320 | index=GetBackgroundHistoIndex(i); | |
7eb0cc73 | 321 | hisname.Form("hBkgPt%d",i); |
322 | fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
323 | fMassHist[index]->Sumw2(); | |
7eb0cc73 | 324 | hisname.Form("hBkgPt%dTC",i); |
325 | fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
326 | fMassHistTC[index]->Sumw2(); | |
029ed93a | 327 | hisname.Form("hBkgPtLpi%d",i); |
328 | fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
329 | fMassHistLpi[index]->Sumw2(); | |
330 | hisname.Form("hBkgPtLpi%dTC",i); | |
331 | fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
332 | fMassHistLpiTC[index]->Sumw2(); | |
333 | ||
334 | hisname.Form("hBkgPtKp%d",i); | |
335 | fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
336 | fMassHistKp[index]->Sumw2(); | |
337 | hisname.Form("hBkgPtKp%dTC",i); | |
338 | fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
339 | fMassHistKpTC[index]->Sumw2(); | |
340 | } | |
7eb0cc73 | 341 | |
342 | for(Int_t i=0; i<3*fNPtBins; i++){ | |
343 | fOutput->Add(fMassHist[i]); | |
344 | fOutput->Add(fMassHistTC[i]); | |
029ed93a | 345 | fOutput->Add(fMassHistLpi[i]); |
346 | fOutput->Add(fMassHistLpiTC[i]); | |
347 | fOutput->Add(fMassHistKp[i]); | |
348 | fOutput->Add(fMassHistKpTC[i]); | |
7eb0cc73 | 349 | } |
350 | ||
7eb0cc73 | 351 | fHistNEvents = new TH1F("fHistNEvents", "Number of processed events; ; Events",3,-1.5,1.5); |
352 | fHistNEvents->Sumw2(); | |
353 | fHistNEvents->SetMinimum(0); | |
354 | fOutput->Add(fHistNEvents); | |
7ad4b782 | 355 | |
356 | fhChi2 = new TH1F("fhChi2", "Chi2",100,0.,10.); | |
357 | fhChi2->Sumw2(); | |
358 | fOutput->Add(fhChi2); | |
359 | ||
360 | fhMassPtGreater3=new TH1F("fhMassPtGreater3","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
361 | fhMassPtGreater3->Sumw2(); | |
362 | fOutput->Add(fhMassPtGreater3); | |
363 | fhMassPtGreater3TC=new TH1F("fhMassPtGreater3TC","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
364 | fhMassPtGreater3TC->Sumw2(); | |
365 | fOutput->Add(fhMassPtGreater3TC); | |
029ed93a | 366 | fhMassPtGreater3Kp=new TH1F("fhMassPtGreater3Kp","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); |
367 | fhMassPtGreater3Kp->Sumw2(); | |
368 | fOutput->Add(fhMassPtGreater3Kp); | |
369 | fhMassPtGreater3KpTC=new TH1F("fhMassPtGreater3KpTC","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
370 | fhMassPtGreater3KpTC->Sumw2(); | |
371 | fOutput->Add(fhMassPtGreater3KpTC); | |
372 | fhMassPtGreater3Lpi=new TH1F("fhMassPtGreater3Lpi","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
373 | fhMassPtGreater3Lpi->Sumw2(); | |
374 | fOutput->Add(fhMassPtGreater3Lpi); | |
375 | fhMassPtGreater3LpiTC=new TH1F("fhMassPtGreater3LpiTC","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
376 | fhMassPtGreater3LpiTC->Sumw2(); | |
377 | fOutput->Add(fhMassPtGreater3LpiTC); | |
378 | fhMassPtGreater2=new TH1F("fhMassPtGreater2","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
379 | fhMassPtGreater2->Sumw2(); | |
380 | fOutput->Add(fhMassPtGreater2); | |
381 | fhMassPtGreater2TC=new TH1F("fhMassPtGreater2TC","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
382 | fhMassPtGreater2TC->Sumw2(); | |
383 | fOutput->Add(fhMassPtGreater2TC); | |
384 | fhMassPtGreater2Kp=new TH1F("fhMassPtGreater2Kp","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
385 | fhMassPtGreater2Kp->Sumw2(); | |
386 | fOutput->Add(fhMassPtGreater2Kp); | |
387 | fhMassPtGreater2KpTC=new TH1F("fhMassPtGreater2KpTC","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
388 | fhMassPtGreater2KpTC->Sumw2(); | |
389 | fOutput->Add(fhMassPtGreater2KpTC); | |
390 | fhMassPtGreater2Lpi=new TH1F("fhMassPtGreater2Lpi","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
391 | fhMassPtGreater2Lpi->Sumw2(); | |
392 | fOutput->Add(fhMassPtGreater2Lpi); | |
393 | fhMassPtGreater2LpiTC=new TH1F("fhMassPtGreater2LpiTC","Pt > 2 GeV/c",100,fLowmasslimit,fUpmasslimit); | |
394 | fhMassPtGreater2LpiTC->Sumw2(); | |
395 | fOutput->Add(fhMassPtGreater2LpiTC); | |
396 | ||
397 | fOutputMC = new TList(); | |
398 | fOutputMC->SetOwner(); | |
399 | fOutputMC->SetName("QAMCHistos"); | |
400 | ||
401 | // const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName(); | |
402 | ||
403 | fNentries=new TH1F("fNentries", "Integral(1,2) = number of AODs *** Integral(2,3) = number of candidates selected with cuts *** Integral(3,4) = number of Lc selected with cuts *** Integral(4,5) = events with good vertex *** Integral(5,6) = pt out of bounds", 11,-0.5,10.5); | |
404 | ||
405 | //ROS: qui il bin assignment e' modellato su D0 ma sicuramente iv arie | |
406 | fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal"); | |
407 | fNentries->GetXaxis()->SetBinLabel(2,"nCandSel(Cuts)"); | |
408 | fNentries->GetXaxis()->SetBinLabel(3,"nLcSelected"); | |
409 | fNentries->GetXaxis()->SetBinLabel(4,"nEventsGoodVtxS"); | |
410 | fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1"); | |
411 | fNentries->GetXaxis()->SetBinLabel(6,"no daughter"); | |
412 | fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)"); | |
413 | fNentries->GetXaxis()->SetBinLabel(8,"PID=0"); | |
414 | fNentries->GetXaxis()->SetBinLabel(9,"PID=1"); | |
415 | fNentries->GetXaxis()->SetBinLabel(10,"PID=2"); | |
416 | fNentries->GetXaxis()->SetBinLabel(11,"PID=3"); | |
417 | fNentries->GetXaxis()->SetNdivisions(1,kFALSE); | |
418 | ||
419 | hisname.Form("hMass"); | |
420 | TH1F *hMassInv=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
421 | fOutputMC->Add(hMassInv); | |
422 | hisname.Form("hbMass"); | |
423 | TH1F *hBMassInv=new TH1F(hisname.Data(),hisname.Data(),100,fLowmasslimit,fUpmasslimit); | |
424 | fOutputMC->Add(hBMassInv); | |
425 | ||
426 | // proton specific | |
427 | hisname.Form("hpTOFSignal"); | |
428 | TH1F *hProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
429 | fOutputMC->Add(hProtonTOFSignal); | |
430 | hisname.Form("hbpTOFSignal"); | |
431 | TH1F *hBProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
432 | fOutputMC->Add(hBProtonTOFSignal); | |
433 | ||
434 | hisname.Form("hpTPCSignal"); | |
435 | TH1F *hProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0); | |
436 | fOutputMC->Add(hProtonTPCSignal); | |
437 | hisname.Form("hbpTPCSignal"); | |
438 | TH1F *hBProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0); | |
439 | fOutputMC->Add(hBProtonTPCSignal); | |
7eb0cc73 | 440 | |
029ed93a | 441 | hisname.Form("hpptProng"); |
442 | TH1F *hProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
443 | fOutputMC->Add(hProtonPtProng); | |
444 | hisname.Form("hbpptProng"); | |
445 | TH1F *hBProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
446 | fOutputMC->Add(hBProtonPtProng); | |
447 | ||
448 | hisname.Form("hpRealTot"); | |
449 | TH1F *hProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
450 | fOutputMC->Add(hProtonRealTot); | |
451 | hisname.Form("hbpRealTot"); | |
452 | TH1F *hBProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
453 | fOutputMC->Add(hBProtonRealTot); | |
454 | hisname.Form("hpIDTot"); | |
455 | TH1F *hProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
456 | fOutputMC->Add(hProtonIDTot); | |
457 | hisname.Form("hpIDGood"); | |
458 | TH1F *hProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
459 | fOutputMC->Add(hProtonIDGood); | |
460 | hisname.Form("hbpIDGood"); | |
461 | TH1F *hBProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
462 | fOutputMC->Add(hBProtonIDGood); | |
463 | hisname.Form("hbpIDTot"); | |
464 | TH1F *hBProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
465 | fOutputMC->Add(hBProtonIDTot); | |
466 | hisname.Form("hpnonIDTot"); | |
467 | TH1F *hProtonnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
468 | fOutputMC->Add(hProtonnonIDTot); | |
469 | hisname.Form("hbpnonIDTot"); | |
470 | TH1F *hBProtonnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
471 | fOutputMC->Add(hBProtonnonIDTot); | |
472 | ||
473 | hisname.Form("hpd0Prong"); | |
474 | TH1F *hProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1); | |
475 | fOutputMC->Add(hProtond0Prong); | |
476 | hisname.Form("hbpd0Prong"); | |
477 | TH1F *hBProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1); | |
478 | fOutputMC->Add(hBProtond0Prong); | |
479 | hisname.Form("hbpSignalVspTOF"); | |
480 | TH2F *hBpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
481 | fOutputMC->Add(hBpSignalVspTOF); | |
482 | hisname.Form("hbpSignalVspTPC"); | |
483 | TH2F *hBpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
484 | fOutputMC->Add(hBpSignalVspTPC); | |
485 | hisname.Form("hpSignalVspTOF"); | |
486 | TH2F *hpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
487 | fOutputMC->Add(hpSignalVspTOF); | |
488 | hisname.Form("hpSignalVspTPC"); | |
489 | TH2F *hpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
490 | fOutputMC->Add(hpSignalVspTPC); | |
491 | ||
492 | hisname.Form("hpSigmaVspTOF"); | |
493 | TH2F *hpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
494 | fOutputMC->Add(hpSigmaVspTOF); | |
495 | hisname.Form("hpSigmaVspTPC"); | |
496 | TH2F *hpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
497 | fOutputMC->Add(hpSigmaVspTPC); | |
498 | hisname.Form("hbpSigmaVspTOF"); | |
499 | TH2F *hBpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
500 | fOutputMC->Add(hBpSigmaVspTOF); | |
501 | hisname.Form("hbpSigmaVspTPC"); | |
502 | TH2F *hBpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
503 | fOutputMC->Add(hBpSigmaVspTPC); | |
504 | ||
505 | //kaon specific | |
506 | ||
507 | hisname.Form("hKTOFSignal"); | |
508 | TH1F *hKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
509 | fOutputMC->Add(hKaonTOFSignal); | |
510 | hisname.Form("hbKTOFSignal"); | |
511 | TH1F *hBKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
512 | fOutputMC->Add(hBKaonTOFSignal); | |
513 | ||
514 | hisname.Form("hKTPCSignal"); | |
515 | TH1F *hKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0); | |
516 | fOutputMC->Add(hKaonTPCSignal); | |
517 | hisname.Form("hbKTPCSignal"); | |
518 | TH1F *hBKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0); | |
519 | fOutputMC->Add(hBKaonTPCSignal); | |
520 | ||
521 | hisname.Form("hKptProng"); | |
522 | TH1F *hKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
523 | fOutputMC->Add(hKaonPtProng); | |
524 | hisname.Form("hbKptProng"); | |
525 | TH1F *hBKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
526 | fOutputMC->Add(hBKaonPtProng); | |
527 | ||
528 | hisname.Form("hKRealTot"); | |
529 | TH1F *hKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
530 | fOutputMC->Add(hKaonRealTot); | |
531 | hisname.Form("hbKRealTot"); | |
532 | TH1F *hBKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
533 | fOutputMC->Add(hBKaonRealTot); | |
534 | hisname.Form("hKIDGood"); | |
535 | TH1F *hKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
536 | fOutputMC->Add(hKaonIDGood); | |
537 | hisname.Form("hKIDTot"); | |
538 | TH1F *hKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
539 | fOutputMC->Add(hKaonIDTot); | |
540 | hisname.Form("hbKIDGood"); | |
541 | TH1F *hBKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
542 | fOutputMC->Add(hBKaonIDGood); | |
543 | hisname.Form("hbKIDTot"); | |
544 | TH1F *hBKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
545 | fOutputMC->Add(hBKaonIDTot); | |
546 | hisname.Form("hKnonIDTot"); | |
547 | TH1F *hKaonnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
548 | fOutputMC->Add(hKaonnonIDTot); | |
549 | hisname.Form("hbKnonIDTot"); | |
550 | TH1F *hBKaonnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
551 | fOutputMC->Add(hBKaonnonIDTot); | |
552 | ||
553 | ||
554 | hisname.Form("hKd0Prong"); | |
555 | TH1F *hKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1); | |
556 | fOutputMC->Add(hKaond0Prong); | |
557 | hisname.Form("hbKd0Prong"); | |
558 | TH1F *hBKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1); | |
559 | fOutputMC->Add(hBKaond0Prong); | |
560 | hisname.Form("hbKSignalVspTOF"); | |
561 | TH2F *hbKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
562 | fOutputMC->Add(hbKSignalVspTOF); | |
563 | hisname.Form("hbKSignalVspTPC"); | |
564 | TH2F *hbKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
565 | fOutputMC->Add(hbKSignalVspTPC); | |
566 | hisname.Form("hKSignalVspTOF"); | |
567 | TH2F *hKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
568 | fOutputMC->Add(hKSignalVspTOF); | |
569 | hisname.Form("hKSignalVspTPC"); | |
570 | TH2F *hKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
571 | fOutputMC->Add(hKSignalVspTPC); | |
572 | ||
573 | hisname.Form("hKSigmaVspTOF"); | |
574 | TH2F *hKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
575 | fOutputMC->Add(hKSigmaVspTOF); | |
576 | ||
577 | hisname.Form("hKSigmaVspTPC"); | |
578 | TH2F *hKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
579 | fOutputMC->Add(hKSigmaVspTPC); | |
580 | ||
581 | hisname.Form("hbKSigmaVspTOF"); | |
582 | TH2F *hBKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
583 | fOutputMC->Add(hBKSigmaVspTOF); | |
584 | hisname.Form("hbKSigmaVspTPC"); | |
585 | TH2F *hBKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
586 | fOutputMC->Add(hBKSigmaVspTPC); | |
587 | ||
588 | // pion specific | |
589 | hisname.Form("hpiTOFSignal"); | |
590 | TH1F *hPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
591 | fOutputMC->Add(hPionTOFSignal); | |
592 | hisname.Form("hbpiTOFSignal"); | |
593 | TH1F *hBPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0); | |
594 | fOutputMC->Add(hBPionTOFSignal); | |
595 | ||
596 | hisname.Form("hpiTPCSignal"); | |
597 | TH1F *hPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0); | |
598 | fOutputMC->Add(hPionTPCSignal); | |
599 | hisname.Form("hbpiTPCSignal"); | |
600 | TH1F *hBPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0); | |
601 | fOutputMC->Add(hBPionTPCSignal); | |
7eb0cc73 | 602 | |
029ed93a | 603 | hisname.Form("hpiptProng"); |
604 | TH1F *hPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
605 | fOutputMC->Add(hPionPtProng); | |
606 | hisname.Form("hbpiptProng"); | |
607 | TH1F *hBPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
608 | fOutputMC->Add(hBPionPtProng); | |
609 | ||
610 | hisname.Form("hpiRealTot"); | |
611 | TH1F *hPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
612 | fOutputMC->Add(hPionRealTot); | |
613 | hisname.Form("hbpiRealTot"); | |
614 | TH1F *hBPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
615 | fOutputMC->Add(hBPionRealTot); | |
616 | hisname.Form("hpiIDGood"); | |
617 | TH1F *hPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
618 | fOutputMC->Add(hPionIDGood); | |
619 | hisname.Form("hpiIDTot"); | |
620 | TH1F *hPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
621 | fOutputMC->Add(hPionIDTot); | |
622 | hisname.Form("hbpiIDTot"); | |
623 | TH1F *hBPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
624 | fOutputMC->Add(hBPionIDTot); | |
625 | hisname.Form("hbpiIDGood"); | |
626 | TH1F *hBPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
627 | fOutputMC->Add(hBPionIDGood); | |
628 | hisname.Form("hpinonIDTot"); | |
629 | TH1F *hPionnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
630 | fOutputMC->Add(hPionnonIDTot); | |
631 | hisname.Form("hbpinonIDTot"); | |
632 | TH1F *hBPionnonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0); | |
633 | fOutputMC->Add(hBPionnonIDTot); | |
634 | ||
635 | ||
636 | hisname.Form("hpid0Prong"); | |
637 | TH1F *hPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,-0.1); | |
638 | fOutputMC->Add(hPiond0Prong); | |
639 | hisname.Form("hbpid0Prong"); | |
640 | TH1F *hBPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1); | |
641 | fOutputMC->Add(hBPiond0Prong); | |
642 | hisname.Form("hbpiSignalVspTOF"); | |
643 | TH2F *hbpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
644 | fOutputMC->Add(hbpiSignalVspTOF); | |
645 | hisname.Form("hbpiSignalVspTPC"); | |
646 | TH2F *hbpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
647 | fOutputMC->Add(hbpiSignalVspTPC); | |
648 | ||
649 | hisname.Form("hpiSignalVspTOF"); | |
650 | TH2F *hpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0); | |
651 | fOutputMC->Add(hpiSignalVspTOF); | |
652 | hisname.Form("hpiSignalVspTPC"); | |
653 | TH2F *hpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0); | |
654 | fOutputMC->Add(hpiSignalVspTPC); | |
655 | ||
656 | hisname.Form("hbpiSigmaVspTOF"); | |
657 | TH2F *hBpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
658 | fOutputMC->Add(hBpiSigmaVspTOF); | |
659 | ||
660 | hisname.Form("hbpiSigmaVspTPC"); | |
661 | TH2F *hBpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
662 | fOutputMC->Add(hBpiSigmaVspTPC); | |
663 | hisname.Form("hpiSigmaVspTOF"); | |
664 | TH2F *hpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
665 | fOutputMC->Add(hpiSigmaVspTOF); | |
666 | ||
667 | hisname.Form("hpiSigmaVspTPC"); | |
668 | TH2F *hpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0); | |
669 | fOutputMC->Add(hpiSigmaVspTPC); | |
670 | ||
671 | // other generic | |
672 | hisname.Form("hLcpt"); | |
673 | TH1F *hLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
674 | fOutputMC->Add(hLcPt); | |
675 | hisname.Form("hbLcpt"); | |
676 | TH1F *hBLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0); | |
677 | fOutputMC->Add(hBLcPt); | |
678 | hisname.Form("hDist12toPrim"); | |
679 | TH1F *hDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0); | |
680 | fOutputMC->Add(hDist12Prim); | |
681 | hisname.Form("hbDist12toPrim"); | |
682 | TH1F *hBDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0); | |
683 | fOutputMC->Add(hBDist12Prim); | |
684 | ||
685 | hisname.Form("hSigmaVert"); | |
686 | TH1F *hSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06); | |
687 | fOutputMC->Add(hSigmaVert); | |
688 | hisname.Form("hbSigmaVert"); | |
689 | TH1F *hBSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06); | |
690 | fOutputMC->Add(hBSigmaVert); | |
691 | ||
692 | hisname.Form("hDCAs"); | |
693 | TH1F *hdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1); | |
694 | fOutputMC->Add(hdcas); | |
695 | hisname.Form("hbDCAs"); | |
696 | TH1F *hBdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1); | |
697 | fOutputMC->Add(hBdcas); | |
698 | ||
699 | hisname.Form("hCosPointingAngle"); | |
700 | TH1F *hCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.); | |
701 | fOutputMC->Add(hCosPointingAngle); | |
702 | hisname.Form("hbCosPointingAngle"); | |
703 | TH1F *hBCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.); | |
704 | fOutputMC->Add(hBCosPointingAngle); | |
705 | ||
706 | hisname.Form("hDecayLength"); | |
707 | TH1F *hDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1); | |
708 | fOutputMC->Add(hDecayLength); | |
709 | hisname.Form("hbDecayLength"); | |
710 | TH1F *hBDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1); | |
711 | fOutputMC->Add(hBDecayLength); | |
712 | ||
713 | hisname.Form("hSum2"); | |
714 | TH1F *hSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1); | |
715 | fOutputMC->Add(hSum2); | |
716 | hisname.Form("hbSum2"); | |
717 | TH1F *hBSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1); | |
718 | fOutputMC->Add(hBSum2); | |
719 | ||
720 | hisname.Form("hptmax"); | |
721 | TH1F *hPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.); | |
722 | fOutputMC->Add(hPtMax); | |
723 | hisname.Form("hbptmax"); | |
724 | TH1F *hBPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.); | |
725 | fOutputMC->Add(hBPtMax); | |
726 | ||
727 | ||
728 | ||
729 | if(fRDCutsProduction->GetIsUsePID()){ | |
730 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
731 | AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler(); | |
732 | AliPIDResponse *pidResp=inputHandler->GetPIDResponse(); | |
733 | fRDCutsProduction->GetPidHF()->SetPidResponse(pidResp); | |
734 | fRDCutsProduction->GetPidpion()->SetPidResponse(pidResp); | |
735 | fRDCutsProduction->GetPidprot()->SetPidResponse(pidResp); | |
736 | fUtilPid=new AliAODpidUtil(pidResp); | |
737 | fUtilPid=new AliAODpidUtil(); | |
738 | } | |
739 | if(fRDCutsAnalysis->GetIsUsePID()){ | |
740 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
741 | AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler(); | |
742 | AliPIDResponse *pidResp=inputHandler->GetPIDResponse(); | |
743 | fRDCutsAnalysis->GetPidHF()->SetPidResponse(pidResp); | |
744 | fRDCutsAnalysis->GetPidpion()->SetPidResponse(pidResp); | |
745 | fRDCutsAnalysis->GetPidprot()->SetPidResponse(pidResp); | |
746 | } | |
747 | ||
7eb0cc73 | 748 | |
029ed93a | 749 | PostData(1,fOutput); |
750 | if(fFillVarHists) PostData(3,fOutputMC); | |
751 | PostData(4,fNentries); | |
7eb0cc73 | 752 | if(fFillNtuple){ |
753 | //OpenFile(3); // 2 is the slot number of the ntuple | |
754 | ||
755 | fNtupleLambdac = new TNtuple("fNtupleLambdac","D +","pdg:Px:Py:Pz:PtTrue:VxTrue:VyTrue:VzTrue:Ptpi:PtK:Ptpi2:PtRec:PointingAngle:DecLeng:VxRec:VyRec:VzRec:InvMass:sigvert:d0Pi:d0K:d0Pi2:dca:d0square"); | |
029ed93a | 756 | PostData(5,fNtupleLambdac); |
7eb0cc73 | 757 | |
758 | } | |
759 | ||
760 | return; | |
761 | } | |
762 | ||
763 | //________________________________________________________________________ | |
764 | void AliAnalysisTaskSELambdac::UserExec(Option_t */*option*/) | |
765 | { | |
766 | // Execute analysis for current event: | |
767 | // heavy flavor candidates association to MC truth | |
768 | ||
7ad4b782 | 769 | AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent()); |
770 | //tmp | |
771 | fHistNEvents->Fill(0); // count event | |
772 | // Post the data already here | |
7eb0cc73 | 773 | |
774 | TClonesArray *array3Prong = 0; | |
775 | TClonesArray *arrayLikeSign =0; | |
776 | if(!aod && AODEvent() && IsStandardAOD()) { | |
777 | // In case there is an AOD handler writing a standard AOD, use the AOD | |
778 | // event in memory rather than the input (ESD) event. | |
779 | aod = dynamic_cast<AliAODEvent*> (AODEvent()); | |
780 | // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root) | |
781 | // have to taken from the AOD event hold by the AliAODExtension | |
782 | AliAODHandler* aodHandler = (AliAODHandler*) | |
783 | ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
784 | if(aodHandler->GetExtensions()) { | |
785 | AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root"); | |
786 | AliAODEvent *aodFromExt = ext->GetAOD(); | |
787 | array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong"); | |
788 | arrayLikeSign=(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign3Prong"); | |
789 | } | |
dc222f77 | 790 | } else if(aod) { |
7eb0cc73 | 791 | array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong"); |
792 | arrayLikeSign=(TClonesArray*)aod->GetList()->FindObject("LikeSign3Prong"); | |
793 | } | |
794 | ||
dc222f77 | 795 | if(!array3Prong || !aod) { |
7eb0cc73 | 796 | printf("AliAnalysisTaskSELambdac::UserExec: Charm3Prong branch not found!\n"); |
797 | return; | |
798 | } | |
799 | if(!arrayLikeSign) { | |
800 | printf("AliAnalysisTaskSELambdac::UserExec: LikeSign3Prong branch not found!\n"); | |
801 | // return; | |
802 | } | |
803 | ||
7ad4b782 | 804 | |
7eb0cc73 | 805 | TClonesArray *arrayMC=0; |
806 | AliAODMCHeader *mcHeader=0; | |
807 | ||
029ed93a | 808 | fNentries->Fill(0); |
809 | TString trigclass=aod->GetFiredTriggerClasses(); | |
810 | if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14); | |
811 | if(!fRDCutsProduction->IsEventSelected(aod)) { | |
812 | if(fRDCutsProduction->GetWhyRejection()==1) // rejected for pileup | |
813 | fNentries->Fill(13); | |
814 | return; | |
815 | } | |
816 | ||
7eb0cc73 | 817 | // AOD primary vertex |
818 | AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex(); | |
7ad4b782 | 819 | if(!vtx1) return; |
7ad4b782 | 820 | |
7eb0cc73 | 821 | |
822 | // load MC particles | |
823 | if(fReadMC){ | |
824 | ||
825 | arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName()); | |
826 | if(!arrayMC) { | |
827 | printf("AliAnalysisTaskSELambdac::UserExec: MC particles branch not found!\n"); | |
828 | return; | |
829 | } | |
830 | ||
831 | // load MC header | |
832 | mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName()); | |
833 | if(!mcHeader) { | |
834 | printf("AliAnalysisTaskSELambdac::UserExec: MC header branch not found!\n"); | |
835 | return; | |
836 | } | |
837 | } | |
838 | ||
839 | Int_t n3Prong = array3Prong->GetEntriesFast(); | |
840 | ||
841 | ||
7eb0cc73 | 842 | for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) { |
843 | AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong); | |
844 | ||
845 | ||
846 | Bool_t unsetvtx=kFALSE; | |
847 | if(!d->GetOwnPrimaryVtx()){ | |
848 | d->SetOwnPrimaryVtx(vtx1); | |
849 | unsetvtx=kTRUE; | |
850 | } | |
851 | ||
029ed93a | 852 | // if(d->GetSelectionMap()) {if(!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) continue;} |
853 | // if(d->GetSelectionMap()) if(!d->HasSelectionBit(AliRDHFCuts::kLcPID)) continue; | |
7eb0cc73 | 854 | |
029ed93a | 855 | Int_t isSelectedTracks = fRDCutsProduction->IsSelected(d,AliRDHFCuts::kTracks,aod); |
856 | if(!isSelectedTracks) continue; | |
7ad4b782 | 857 | |
029ed93a | 858 | if (fRDCutsProduction->IsInFiducialAcceptance(d->Pt(),d->Y(4122))) fNentries->Fill(6); |
7ad4b782 | 859 | |
029ed93a | 860 | Int_t ptbin=fRDCutsProduction->PtBin(d->Pt()); |
861 | if(ptbin==-1) {fNentries->Fill(4); continue;} //out of bounds | |
7eb0cc73 | 862 | |
029ed93a | 863 | FillMassHists(aod,d,arrayMC,fRDCutsProduction); |
864 | if(fFillVarHists) FillVarHists(d,arrayMC,fRDCutsProduction,fOutputMC,aod); | |
865 | ||
7eb0cc73 | 866 | /* |
867 | //start OS analysis | |
868 | if(labDp<0)fHistOSbkg->Fill(d->InvMassDplus()); | |
869 | fHistOS->Fill(d->InvMassDplus()); | |
870 | */ | |
029ed93a | 871 | |
7eb0cc73 | 872 | if(unsetvtx) d->UnsetOwnPrimaryVtx(); |
873 | } | |
029ed93a | 874 | |
875 | PostData(1,fOutput); | |
876 | if(fFillVarHists) PostData(3,fOutputMC); | |
877 | PostData(4,fNentries); | |
878 | ||
7eb0cc73 | 879 | return; |
880 | } | |
881 | ||
882 | ||
883 | ||
884 | //________________________________________________________________________ | |
885 | void AliAnalysisTaskSELambdac::Terminate(Option_t */*option*/) | |
886 | { | |
887 | // Terminate analysis | |
888 | // | |
889 | if(fDebug > 1) printf("AnalysisTaskSELambdac: Terminate() \n"); | |
890 | ||
891 | fOutput = dynamic_cast<TList*> (GetOutputData(1)); | |
892 | if (!fOutput) { | |
893 | printf("ERROR: fOutput not available\n"); | |
894 | return; | |
895 | } | |
029ed93a | 896 | //fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents")); |
7eb0cc73 | 897 | |
898 | TString hisname; | |
7eb0cc73 | 899 | if(fFillNtuple){ |
900 | fNtupleLambdac = dynamic_cast<TNtuple*>(GetOutputData(3)); | |
901 | } | |
902 | ||
7eb0cc73 | 903 | |
904 | return; | |
905 | } | |
906 | ||
907 | //________________________________________________________________________ | |
4c7fd068 | 908 | Int_t AliAnalysisTaskSELambdac::MatchToMCLambdac(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{ |
909 | // check if the candidate is a Lambdac decaying in pKpi or in the resonant channels | |
7eb0cc73 | 910 | Int_t lambdacLab[3]={0,0,0}; |
911 | Int_t pdgs[3]={0,0,0}; | |
912 | for(Int_t i=0;i<3;i++){ | |
913 | AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i); | |
914 | Int_t lab=daugh->GetLabel(); | |
915 | if(lab<0) return 0; | |
916 | AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab); | |
917 | if(!part) continue; | |
918 | pdgs[i]=part->GetPdgCode(); | |
919 | Int_t partPdgcode = TMath::Abs(part->GetPdgCode()); | |
920 | if(partPdgcode==211 || partPdgcode==321 || partPdgcode==2212){ | |
921 | Int_t motherLabel=part->GetMother(); | |
922 | if(motherLabel<0) return 0; | |
923 | AliAODMCParticle *motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel); | |
924 | if(!motherPart) continue; | |
925 | Int_t motherPdg = TMath::Abs(motherPart->GetPdgCode()); | |
926 | if(motherPdg==4122) { | |
927 | if(GetLambdacDaugh(motherPart,arrayMC)){lambdacLab[i]=motherLabel;continue;} | |
928 | } | |
929 | if(motherPdg==313 || motherPdg==2224 || motherPdg==3124){ | |
930 | Int_t GmotherLabel=motherPart->GetMother(); | |
931 | if(GmotherLabel<0) return 0; | |
932 | AliAODMCParticle *GmotherPart = (AliAODMCParticle*)arrayMC->At(GmotherLabel); | |
933 | if(!GmotherPart) continue; | |
934 | Int_t GmotherPdg = TMath::Abs(GmotherPart->GetPdgCode()); | |
935 | if(GmotherPdg==4122) { | |
936 | if(GetLambdacDaugh(GmotherPart,arrayMC)) {lambdacLab[i]=GmotherLabel;continue;} | |
937 | } | |
938 | } | |
939 | } | |
940 | } | |
941 | ||
942 | if(lambdacLab[0]==lambdacLab[1] && lambdacLab[1]==lambdacLab[2]) {return lambdacLab[0];} | |
943 | return 0; | |
944 | ||
945 | } | |
946 | //------------------------ | |
4c7fd068 | 947 | Bool_t AliAnalysisTaskSELambdac::GetLambdacDaugh(AliAODMCParticle *part,TClonesArray *arrayMC) const{ |
948 | // check if the particle is a lambdac and if its decay mode is the correct one | |
7eb0cc73 | 949 | Int_t numberOfLambdac=0; |
950 | if(TMath::Abs(part->GetPdgCode())!=4122) return kFALSE; | |
951 | Int_t daugh_tmp[2]; | |
952 | daugh_tmp[0]=part->GetDaughter(0); | |
953 | daugh_tmp[1]=part->GetDaughter(1); | |
954 | Int_t nDaugh = (Int_t)part->GetNDaughters(); | |
955 | if(nDaugh<2) return kFALSE; | |
956 | if(nDaugh>3) return kFALSE; | |
957 | AliAODMCParticle* pdaugh1 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(0)); | |
958 | if(!pdaugh1) {return kFALSE;} | |
959 | Int_t number1 = TMath::Abs(pdaugh1->GetPdgCode()); | |
960 | AliAODMCParticle* pdaugh2 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(1)); | |
961 | if(!pdaugh2) {return kFALSE;} | |
962 | Int_t number2 = TMath::Abs(pdaugh2->GetPdgCode()); | |
963 | ||
964 | if(nDaugh==3){ | |
965 | Int_t thirdDaugh=part->GetDaughter(1)-1; | |
966 | AliAODMCParticle* pdaugh3 = (AliAODMCParticle*)arrayMC->At(thirdDaugh); | |
967 | Int_t number3 = TMath::Abs(pdaugh3->GetPdgCode()); | |
968 | if((number1==321 && number2==211 && number3==2212) || (number1==211 && number2==321 && number3==2212) || (number1==211 && number2==2212 && number3==321) || (number1==321 && number2==2212 && number3==211) || (number1==2212 && number2==321 && number3==211) || (number1==2212 && number2==211 && number3==321)) { | |
969 | numberOfLambdac++; | |
970 | } | |
971 | } | |
972 | ||
973 | if(nDaugh==2){ | |
974 | ||
7eb0cc73 | 975 | //Lambda resonant |
976 | ||
977 | //Lambda -> p K*0 | |
978 | // | |
979 | Int_t nfiglieK=0; | |
980 | ||
981 | if((number1==2212 && number2==313)){ | |
982 | nfiglieK=pdaugh2->GetNDaughters(); | |
983 | if(nfiglieK!=2) return kFALSE; | |
984 | AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0)); | |
985 | AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1)); | |
986 | if(!pdaughK1) return kFALSE; | |
987 | if(!pdaughK2) return kFALSE; | |
988 | if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++; | |
989 | } | |
990 | ||
991 | if((number1==313 && number2==2212)){ | |
992 | nfiglieK=pdaugh1->GetNDaughters(); | |
993 | if(nfiglieK!=2) return kFALSE; | |
994 | AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0)); | |
995 | AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1)); | |
996 | if(!pdaughK1) return kFALSE; | |
997 | if(!pdaughK2) return kFALSE; | |
998 | if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++; | |
999 | } | |
1000 | ||
1001 | //Lambda -> Delta++ k | |
1002 | Int_t nfiglieDelta=0; | |
1003 | if(number1==321 && number2==2224){ | |
1004 | nfiglieDelta=pdaugh2->GetNDaughters(); | |
1005 | if(nfiglieDelta!=2) return kFALSE; | |
1006 | AliAODMCParticle *pdaughD1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0)); | |
1007 | AliAODMCParticle *pdaughD2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1)); | |
1008 | if(!pdaughD1) return kFALSE; | |
1009 | if(!pdaughD2) return kFALSE; | |
1010 | if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++; | |
1011 | } | |
1012 | if(number1==2224 && number2==321){ | |
1013 | nfiglieDelta=pdaugh1->GetNDaughters(); | |
1014 | if(nfiglieDelta!=2) return kFALSE; | |
1015 | AliAODMCParticle* pdaughD1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0)); | |
1016 | AliAODMCParticle* pdaughD2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1)); | |
1017 | if(!pdaughD1) return kFALSE; | |
1018 | if(!pdaughD2) return kFALSE; | |
1019 | if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++; | |
1020 | } | |
1021 | ||
1022 | ||
1023 | //Lambdac -> Lambda(1520) pi | |
1024 | Int_t nfiglieLa=0; | |
1025 | if(number1==3124 && number2==211){ | |
1026 | nfiglieLa=pdaugh1->GetNDaughters(); | |
1027 | if(nfiglieLa!=2) return kFALSE; | |
1028 | AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0)); | |
1029 | AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1)); | |
1030 | if(!pdaughL1) return kFALSE; | |
1031 | if(!pdaughL2) return kFALSE; | |
1032 | if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++; | |
1033 | } | |
1034 | if(number1==211 && number2==3124){ | |
1035 | nfiglieLa=pdaugh2->GetNDaughters(); | |
1036 | if(nfiglieLa!=2) return kFALSE; | |
1037 | AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0)); | |
1038 | AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1)); | |
1039 | if(!pdaughL1) return kFALSE; | |
1040 | if(!pdaughL2) return kFALSE; | |
1041 | if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++; | |
1042 | ||
1043 | } | |
1044 | } | |
1045 | ||
1046 | if(numberOfLambdac>0) {return kTRUE;} | |
1047 | return kFALSE; | |
1048 | } | |
1049 | //----------------------------- | |
7ad4b782 | 1050 | Bool_t AliAnalysisTaskSELambdac::IspKpiMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{ |
4c7fd068 | 1051 | // Apply MC PID |
7ad4b782 | 1052 | Int_t lab[3]={0,0,0},pdgs[3]={0,0,0}; |
7eb0cc73 | 1053 | for(Int_t i=0;i<3;i++){ |
1054 | AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i); | |
1055 | lab[i]=daugh->GetLabel(); | |
1056 | if(lab[i]<0) return kFALSE; | |
1057 | AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]); | |
1058 | if(!part) return kFALSE; | |
1059 | pdgs[i]=TMath::Abs(part->GetPdgCode()); | |
1060 | } | |
1061 | ||
1062 | if(pdgs[0]==2212 && pdgs[1]==321 && pdgs[2]==211) return kTRUE; | |
1063 | ||
1064 | return kFALSE; | |
1065 | } | |
1066 | //----------------------------- | |
4c7fd068 | 1067 | Bool_t AliAnalysisTaskSELambdac::IspiKpMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{ |
7eb0cc73 | 1068 | |
4c7fd068 | 1069 | // Apply MC PID |
7eb0cc73 | 1070 | Int_t lab[3]={0,0,0},pdgs[3]={0,0,0}; |
1071 | for(Int_t i=0;i<3;i++){ | |
1072 | AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i); | |
1073 | lab[i]=daugh->GetLabel(); | |
1074 | if(lab[i]<0) return kFALSE; | |
1075 | AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]); | |
1076 | if(!part) return kFALSE; | |
1077 | pdgs[i]=TMath::Abs(part->GetPdgCode()); | |
1078 | } | |
1079 | ||
1080 | if(pdgs[2]==2212 && pdgs[1]==321 && pdgs[0]==211) {return kTRUE;} | |
1081 | ||
1082 | return kFALSE; | |
1083 | } | |
1084 | //-------------------------------------- | |
4c7fd068 | 1085 | Bool_t AliAnalysisTaskSELambdac::VertexingKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field) const{ |
1086 | // apply vertexing KF | |
7eb0cc73 | 1087 | Int_t iprongs[3]={0,1,2}; |
1088 | Double_t mass[2]={0.,0.}; | |
1089 | //topological constr | |
e11ae259 | 1090 | AliKFParticle *lambdac=d->ApplyVertexingKF(iprongs,3,pdgs,kTRUE,field,mass); |
1091 | if(!lambdac) return kFALSE; | |
7ad4b782 | 1092 | // Double_t probTot=TMath::Prob(Lambdac->GetChi2(),Lambdac->GetNDF()); |
1093 | // if(probTot<fCutsKF[0]) return kFALSE; | |
e11ae259 | 1094 | if(lambdac->GetChi2()>fCutsKF[0]) return kFALSE; |
7eb0cc73 | 1095 | //mass constr for K* |
1096 | Int_t ipRes[2]; | |
1097 | Int_t pdgres[2]; | |
1098 | mass[0]=0.8961;mass[1]=0.03; | |
1099 | if(TMath::Abs(pdgs[0])==211){ | |
1100 | ipRes[0]=0;ipRes[1]=1; | |
1101 | pdgres[0]=pdgs[0];pdgres[1]=321; | |
1102 | } | |
1103 | if(TMath::Abs(pdgs[2])==211){ | |
1104 | ipRes[0]=2;ipRes[1]=1; | |
1105 | pdgres[0]=pdgs[2];pdgres[1]=321; | |
1106 | } | |
e11ae259 | 1107 | AliKFParticle *kappaStar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
7eb0cc73 | 1108 | |
e11ae259 | 1109 | Double_t probKstar=TMath::Prob(kappaStar->GetChi2(),kappaStar->GetNDF()); |
7eb0cc73 | 1110 | if(probKstar>fCutsKF[1]) { |
1111 | AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]); | |
1112 | AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]); | |
1113 | AliKFParticle prong1(*esdProng1,pdgres[0]); | |
1114 | AliKFParticle prong2(*esdProng2,pdgres[1]); | |
e11ae259 | 1115 | if(kappaStar->GetPt()<fCutsKF[2] && prong1.GetAngle(prong2)>fCutsKF[3]) return kFALSE; |
7eb0cc73 | 1116 | } |
1117 | //mass constr for Lambda | |
1118 | mass[0]=1.520;mass[1]=0.005; | |
1119 | if(TMath::Abs(pdgs[0])==2212){ | |
1120 | ipRes[0]=0;ipRes[1]=1; | |
1121 | pdgres[0]=pdgs[0];pdgres[1]=pdgs[1]; | |
1122 | } | |
1123 | if(TMath::Abs(pdgs[2])==2212){ | |
1124 | ipRes[0]=2;ipRes[1]=1; | |
1125 | pdgres[0]=pdgs[2];pdgres[1]=pdgs[1]; | |
1126 | } | |
e11ae259 | 1127 | AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
1128 | Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF()); | |
7eb0cc73 | 1129 | if(probLa>fCutsKF[4]) { |
1130 | AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]); | |
1131 | AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]); | |
1132 | AliKFParticle prong1(*esdProng1,pdgres[0]); | |
1133 | AliKFParticle prong2(*esdProng2,pdgres[1]); | |
e11ae259 | 1134 | if(lambda1520->GetPt()<fCutsKF[5] && prong1.GetAngle(prong2)>fCutsKF[6]) return kFALSE; |
7eb0cc73 | 1135 | } |
1136 | //mass constr for Delta | |
1137 | mass[0]=1.2;mass[1]=0.15; | |
1138 | ipRes[0]=0;ipRes[1]=2; | |
e11ae259 | 1139 | pdgres[0]=pdgs[0];pdgres[1]=pdgs[2]; |
1140 | AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); | |
1141 | Double_t probDelta=TMath::Prob(delta->GetChi2(),delta->GetNDF()); | |
7eb0cc73 | 1142 | if(probDelta>fCutsKF[7]) { |
1143 | AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]); | |
1144 | AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]); | |
1145 | AliKFParticle prong1(*esdProng1,pdgres[0]); | |
1146 | AliKFParticle prong2(*esdProng2,pdgres[1]); | |
e11ae259 | 1147 | if(delta->GetPt()<fCutsKF[8] && prong1.GetAngle(prong2)>fCutsKF[9]) return kFALSE; |
7eb0cc73 | 1148 | } |
1149 | return kTRUE; | |
1150 | } | |
1151 | //------------------------------------- | |
029ed93a | 1152 | Int_t AliAnalysisTaskSELambdac::IspiKpResonant(AliAODRecoDecayHF3Prong *d,Double_t field) const{ |
7eb0cc73 | 1153 | |
4c7fd068 | 1154 | // apply PID using the resonant channels |
7eb0cc73 | 1155 | //if lambda* -> pk |
1156 | Double_t mass[2]={1.520,0.005}; | |
1157 | Int_t ipRes[2]={1,2}; | |
1158 | Int_t pdgres[2]={321,2212}; | |
e11ae259 | 1159 | AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
1160 | Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF()); | |
029ed93a | 1161 | if(probLa>0.1) return 1; |
7eb0cc73 | 1162 | //K* -> kpi |
7ad4b782 | 1163 | mass[0]=0.8961;mass[1]=0.03; |
1164 | ipRes[0]=0;ipRes[1]=1; | |
1165 | pdgres[0]=211;pdgres[1]=321; | |
e11ae259 | 1166 | AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
1167 | Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF()); | |
029ed93a | 1168 | if(probKa>0.1) return 2; |
7eb0cc73 | 1169 | |
029ed93a | 1170 | return 0; |
7eb0cc73 | 1171 | |
1172 | } | |
1173 | //------------------------------------- | |
029ed93a | 1174 | Int_t AliAnalysisTaskSELambdac::IspKpiResonant(AliAODRecoDecayHF3Prong *d,Double_t field) const{ |
4c7fd068 | 1175 | |
1176 | // apply PID using the resonant channels | |
7eb0cc73 | 1177 | //if lambda* -> pk |
1178 | Double_t mass[2]={1.520,0.005}; | |
1179 | Int_t ipRes[2]={0,1}; | |
1180 | Int_t pdgres[2]={2212,321}; | |
e11ae259 | 1181 | AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
1182 | Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF()); | |
029ed93a | 1183 | if(probLa>0.1) return 1; |
7eb0cc73 | 1184 | //K* -> kpi |
7ad4b782 | 1185 | mass[0]=0.8961;mass[1]=0.03; |
1186 | ipRes[0]=1;ipRes[1]=2; | |
1187 | pdgres[1]=211;pdgres[0]=321; | |
e11ae259 | 1188 | AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass); |
1189 | Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF()); | |
029ed93a | 1190 | if(probKa>0.1) return 2; |
1191 | ||
1192 | return 0; | |
1193 | ||
1194 | } | |
1195 | //--------------------------- | |
1196 | void AliAnalysisTaskSELambdac::FillMassHists(AliAODEvent *aod,AliAODRecoDecayHF3Prong *part, TClonesArray *arrayMC, AliRDHFCutsLctopKpi *cuts){ | |
1197 | ||
1198 | //if MC PID or no PID, unset PID | |
1199 | if(!fRealPid) cuts->SetUsePID(kFALSE); | |
1200 | Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod); | |
1201 | if(selection>0){ | |
1202 | Int_t iPtBin = -1; | |
1203 | Double_t ptCand = part->Pt(); | |
1204 | Int_t index=0; | |
1205 | ||
1206 | for(Int_t ibin=0;ibin<fNPtBins&&iPtBin<0&&ptCand>fArrayBinLimits[0]&&ptCand<fArrayBinLimits[fNPtBins];ibin++){ | |
1207 | if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin; | |
1208 | } | |
1209 | ||
1210 | ||
1211 | Float_t pdgCode=-2; | |
1212 | Float_t pdgCode1=-1; | |
1213 | Float_t pdgCode2=-1; | |
1214 | Int_t labDp=-1; | |
1215 | Float_t deltaPx=0.; | |
1216 | Float_t deltaPy=0.; | |
1217 | Float_t deltaPz=0.; | |
1218 | Float_t truePt=0.; | |
1219 | Float_t xDecay=0.; | |
1220 | Float_t yDecay=0.; | |
1221 | Float_t zDecay=0.; | |
1222 | ||
1223 | if(fReadMC){ | |
1224 | labDp = MatchToMCLambdac(part,arrayMC); | |
1225 | if(labDp>0){ | |
1226 | AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp); | |
1227 | AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0)); | |
1228 | AliAODMCParticle *dg1 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(1)); | |
1229 | deltaPx=partDp->Px()-part->Px(); | |
1230 | deltaPy=partDp->Py()-part->Py(); | |
1231 | deltaPz=partDp->Pz()-part->Pz(); | |
1232 | truePt=partDp->Pt(); | |
1233 | xDecay=dg0->Xv(); | |
1234 | yDecay=dg0->Yv(); | |
1235 | zDecay=dg0->Zv(); | |
1236 | pdgCode=TMath::Abs(partDp->GetPdgCode()); | |
1237 | pdgCode1=TMath::Abs(dg0->GetPdgCode()); | |
1238 | pdgCode2=TMath::Abs(dg1->GetPdgCode()); | |
1239 | ||
1240 | }else{ | |
1241 | pdgCode=-1; | |
1242 | } | |
1243 | } | |
1244 | ||
1245 | Double_t invMasspKpi=-1.; | |
1246 | Double_t invMasspiKp=-1.; | |
1247 | Double_t invMasspKpiLpi=-1.; | |
1248 | Double_t invMasspiKpLpi=-1.; | |
1249 | Double_t invMasspKpiKp=-1.; | |
1250 | Double_t invMasspiKpKp=-1.; | |
1251 | Int_t pdgs[3]={0,0,0}; | |
1252 | Double_t field=aod->GetMagneticField(); | |
1253 | //apply MC PID | |
1254 | if(fReadMC && fMCPid){ | |
1255 | ||
1256 | if(IspKpiMC(part,arrayMC)) { | |
1257 | invMasspKpi=part->InvMassLcpKpi(); | |
1258 | if(fUseKF){ | |
1259 | pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211; | |
1260 | if(!VertexingKF(part,pdgs,field)) invMasspKpi=-1.; | |
1261 | } | |
1262 | } | |
1263 | if(IspiKpMC(part,arrayMC)) { | |
1264 | invMasspiKp=part->InvMassLcpiKp(); | |
1265 | if(fUseKF){ | |
1266 | pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212; | |
1267 | if(!VertexingKF(part,pdgs,field)) invMasspiKp=-1.; | |
1268 | } | |
1269 | } | |
1270 | } | |
1271 | ||
1272 | // apply realistic PID | |
1273 | if(fRealPid){ | |
1274 | if(selection==1 || selection==3) { | |
1275 | invMasspKpi=part->InvMassLcpKpi(); | |
1276 | pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211; | |
1277 | if(fUseKF){ | |
1278 | pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211; | |
1279 | if(!VertexingKF(part,pdgs,field)) invMasspKpi=-1.; | |
1280 | } | |
1281 | } | |
1282 | if(selection>=2) { | |
1283 | invMasspiKp=part->InvMassLcpiKp(); | |
1284 | pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212; | |
1285 | if(fUseKF){ | |
1286 | pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212; | |
1287 | if(!VertexingKF(part,pdgs,field)) invMasspiKp=-1.; | |
1288 | } | |
1289 | } | |
1290 | } | |
1291 | //apply PID using resonances | |
1292 | if(fResPid && fRealPid){ | |
1293 | if((selection==3 || selection==1)) { | |
1294 | if(IspKpiResonant(part,field)==1){ | |
1295 | invMasspKpiLpi=part->InvMassLcpKpi(); | |
1296 | } | |
1297 | if(IspKpiResonant(part,field)==2){ | |
1298 | invMasspKpiKp=part->InvMassLcpKpi(); | |
1299 | } | |
1300 | } | |
1301 | if(selection>=2) { | |
1302 | if(IspiKpResonant(part,field)==1){ | |
1303 | invMasspiKpLpi=part->InvMassLcpiKp(); | |
1304 | } | |
1305 | if(IspiKpResonant(part,field)==2){ | |
1306 | invMasspiKpKp=part->InvMassLcpiKp(); | |
1307 | } | |
1308 | } | |
1309 | } | |
1310 | ||
1311 | // no PID | |
1312 | if(!fResPid && !fRealPid && !fMCPid){ | |
1313 | if(selection==2 || selection==3) { | |
1314 | invMasspiKp=part->InvMassLcpiKp(); | |
1315 | if(fUseKF){ | |
1316 | pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212; | |
1317 | if(!VertexingKF(part,pdgs,field)) invMasspiKp=-1.; | |
1318 | } | |
1319 | } | |
1320 | if(selection==1 || selection==3){ | |
1321 | invMasspKpi=part->InvMassLcpKpi(); | |
1322 | if(fUseKF){ | |
1323 | pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211; | |
1324 | if(!VertexingKF(part,pdgs,field)) invMasspKpi=-1.; | |
1325 | } | |
1326 | } | |
1327 | } | |
1328 | ||
1329 | if(invMasspiKp<0. && invMasspKpi<0.) return; | |
1330 | ||
1331 | Int_t passTightCuts=0; | |
1332 | if(fAnalysis) passTightCuts=fRDCutsAnalysis->IsSelected(part,AliRDHFCuts::kCandidate,aod); | |
1333 | ||
1334 | ||
1335 | ||
1336 | Float_t tmp[24]; | |
1337 | if(fFillNtuple){ | |
1338 | tmp[0]=pdgCode; | |
1339 | tmp[1]=deltaPx; | |
1340 | tmp[2]=deltaPy; | |
1341 | tmp[3]=deltaPz; | |
1342 | tmp[4]=truePt; | |
1343 | tmp[5]=xDecay; | |
1344 | tmp[6]=yDecay; | |
1345 | tmp[7]=zDecay; | |
1346 | if(pdgCode1==2212) {tmp[8]=part->PtProng(0);}else{tmp[8]=0.;} | |
1347 | if(pdgCode1==211) {tmp[10]=part->PtProng(0);}else{tmp[10]=0.;} | |
1348 | tmp[9]=part->PtProng(1); | |
1349 | if(pdgCode2==211) {tmp[10]=part->PtProng(2);}else{tmp[10]=0.;} | |
1350 | tmp[11]=part->Pt(); | |
1351 | tmp[12]=part->CosPointingAngle(); | |
1352 | tmp[13]=part->DecayLength(); | |
1353 | tmp[14]=part->Xv(); | |
1354 | tmp[15]=part->Yv(); | |
1355 | tmp[16]=part->Zv(); | |
1356 | if(invMasspiKp>0.) tmp[17]=invMasspiKp; | |
1357 | if(invMasspKpi>0.) tmp[17]=invMasspKpi; | |
1358 | tmp[18]=part->GetSigmaVert(); | |
1359 | tmp[19]=part->Getd0Prong(0); | |
1360 | tmp[20]=part->Getd0Prong(1); | |
1361 | tmp[21]=part->Getd0Prong(2); | |
1362 | tmp[22]=part->GetDCA(); | |
1363 | tmp[23]=part->Prodd0d0(); | |
1364 | fNtupleLambdac->Fill(tmp); | |
1365 | PostData(5,fNtupleLambdac); | |
1366 | } | |
1367 | ||
1368 | if(part->Pt()>3.){ | |
1369 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1370 | if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp,0.5); | |
1371 | if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi,0.5); | |
1372 | }else{ | |
1373 | if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp); | |
1374 | if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi); | |
1375 | } | |
1376 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1377 | if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi,0.5); | |
1378 | if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi,0.5); | |
1379 | }else{ | |
1380 | if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi); | |
1381 | if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi); | |
1382 | } | |
1383 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1384 | if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp,0.5); | |
1385 | if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp,0.5); | |
1386 | }else{ | |
1387 | if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp); | |
1388 | if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp); | |
1389 | } | |
1390 | if(passTightCuts>0){ | |
1391 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1392 | if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp,0.5); | |
1393 | if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi,0.5); | |
1394 | }else{ | |
1395 | if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp); | |
1396 | if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi); | |
1397 | } | |
1398 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1399 | if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi,0.5); | |
1400 | if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi,0.5); | |
1401 | }else{ | |
1402 | if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi); | |
1403 | if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi); | |
1404 | } | |
1405 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1406 | if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp,0.5); | |
1407 | if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp,0.5); | |
1408 | }else{ | |
1409 | if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp); | |
1410 | if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp); | |
1411 | } | |
1412 | } | |
1413 | } | |
1414 | if(part->Pt()>2.){ | |
1415 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1416 | if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp,0.5); | |
1417 | if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi,0.5); | |
1418 | }else{ | |
1419 | if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp); | |
1420 | if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi); | |
1421 | } | |
1422 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1423 | if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi,0.5); | |
1424 | if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi,0.5); | |
1425 | }else{ | |
1426 | if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi); | |
1427 | if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi); | |
1428 | } | |
1429 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1430 | if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp,0.5); | |
1431 | if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp,0.5); | |
1432 | }else{ | |
1433 | if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp); | |
1434 | if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp); | |
1435 | } | |
1436 | if(passTightCuts>0){ | |
1437 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1438 | if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp,0.5); | |
1439 | if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi,0.5); | |
1440 | }else{ | |
1441 | if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp); | |
1442 | if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi); | |
1443 | } | |
1444 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1445 | if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi,0.5); | |
1446 | if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi,0.5); | |
1447 | }else{ | |
1448 | if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi); | |
1449 | if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi); | |
1450 | } | |
1451 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1452 | if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp,0.5); | |
1453 | if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp,0.5); | |
1454 | }else{ | |
1455 | if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp); | |
1456 | if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp); | |
1457 | } | |
1458 | } | |
1459 | } | |
1460 | ||
1461 | if(iPtBin>=0){ | |
1462 | index=GetHistoIndex(iPtBin); | |
1463 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1464 | if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5); | |
1465 | if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5); | |
1466 | }else{ | |
1467 | if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp); | |
1468 | if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi); | |
1469 | } | |
1470 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1471 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5); | |
1472 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5); | |
1473 | }else{ | |
1474 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi); | |
1475 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi); | |
1476 | } | |
1477 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1478 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5); | |
1479 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5); | |
1480 | }else{ | |
1481 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp); | |
1482 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp); | |
1483 | } | |
1484 | if(passTightCuts>0){ | |
1485 | if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){ | |
1486 | if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5); | |
1487 | if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5); | |
1488 | }else{ | |
1489 | if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp); | |
1490 | if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi); | |
1491 | } | |
1492 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){ | |
1493 | if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5); | |
1494 | if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5); | |
1495 | }else{ | |
1496 | if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi); | |
1497 | if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi); | |
1498 | } | |
1499 | if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){ | |
1500 | if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5); | |
1501 | if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5); | |
1502 | }else{ | |
1503 | if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp); | |
1504 | if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp); | |
1505 | } | |
1506 | } | |
1507 | if(fReadMC){ | |
1508 | if(labDp>0) { | |
1509 | index=GetSignalHistoIndex(iPtBin); | |
1510 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1511 | if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5); | |
1512 | if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5); | |
1513 | }else{ | |
1514 | if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp); | |
1515 | if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi); | |
1516 | } | |
1517 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1518 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5); | |
1519 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5); | |
1520 | }else{ | |
1521 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi); | |
1522 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi); | |
1523 | } | |
1524 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1525 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5); | |
1526 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5); | |
1527 | }else{ | |
1528 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp); | |
1529 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp); | |
1530 | } | |
1531 | if(passTightCuts>0){ | |
1532 | if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){ | |
1533 | if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5); | |
1534 | if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5); | |
1535 | }else{ | |
1536 | if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp); | |
1537 | if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi); | |
1538 | } | |
1539 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){ | |
1540 | if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5); | |
1541 | if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5); | |
1542 | }else{ | |
1543 | if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi); | |
1544 | if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi); | |
1545 | } | |
1546 | if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){ | |
1547 | if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5); | |
1548 | if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5); | |
1549 | }else{ | |
1550 | if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp); | |
1551 | if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp); | |
1552 | } | |
1553 | } | |
1554 | ||
1555 | }else{ | |
1556 | index=GetBackgroundHistoIndex(iPtBin); | |
1557 | if(invMasspiKp>0. && invMasspKpi>0.){ | |
1558 | fMassHist[index]->Fill(invMasspiKp,0.5); | |
1559 | fMassHist[index]->Fill(invMasspKpi,0.5); | |
1560 | }else{ | |
1561 | if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp); | |
1562 | if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi); | |
1563 | } | |
1564 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){ | |
1565 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5); | |
1566 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5); | |
1567 | }else{ | |
1568 | if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi); | |
1569 | if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi); | |
1570 | } | |
1571 | if(invMasspiKpKp>0. && invMasspKpiKp>0.){ | |
1572 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5); | |
1573 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5); | |
1574 | }else{ | |
1575 | if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp); | |
1576 | if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp); | |
1577 | } | |
1578 | if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){ | |
1579 | fMassHistTC[index]->Fill(invMasspiKp,0.5); | |
1580 | fMassHistTC[index]->Fill(invMasspKpi,0.5); | |
1581 | }else{ | |
1582 | if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp); | |
1583 | if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi); | |
1584 | } | |
1585 | if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){ | |
1586 | if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5); | |
1587 | if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5); | |
1588 | }else{ | |
1589 | if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi); | |
1590 | if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi); | |
1591 | } | |
1592 | if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){ | |
1593 | if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5); | |
1594 | if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5); | |
1595 | }else{ | |
1596 | if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp); | |
1597 | if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp); | |
1598 | } | |
1599 | } | |
1600 | ||
1601 | } | |
1602 | } | |
1603 | } | |
1604 | return; | |
1605 | } | |
1606 | //----------------------- | |
1607 | void AliAnalysisTaskSELambdac::FillVarHists(AliAODRecoDecayHF3Prong *part, TClonesArray *arrMC, AliRDHFCutsLctopKpi *cuts, TList *listout,AliAODEvent* aod){ | |
1608 | // | |
1609 | // function used in UserExec to fill variable histograms analysing MC | |
1610 | // | |
1611 | ||
1612 | ||
1613 | Int_t pdgDgLctopKpi[3]={2212,321,211}; | |
1614 | Int_t lab=-9999; | |
1615 | if(fReadMC) lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx) | |
1616 | Int_t isSelectedPID=cuts->IsSelectedPID(part); //0 rejected,1 Lc -> p K- pi+,2 Lc -> pi+ K- p, (K at center because different sign is there) | |
1617 | //3 both (it should never happen...) | |
1618 | ||
1619 | if (isSelectedPID==0)fNentries->Fill(7); | |
1620 | if (isSelectedPID==1)fNentries->Fill(8); | |
1621 | if (isSelectedPID==2)fNentries->Fill(9); | |
1622 | if (isSelectedPID==3)fNentries->Fill(10); | |
1623 | ||
1624 | ||
1625 | Double_t mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass(); | |
1626 | Double_t minvLcpKpi = part->InvMassLcpKpi(); | |
1627 | Double_t minvLcpiKp = part->InvMassLcpiKp(); | |
1628 | ||
1629 | Double_t invmasscut=0.05; | |
1630 | ||
1631 | TString fillthis=""; | |
1632 | ||
1633 | ||
1634 | AliAODTrack *prong0=(AliAODTrack*)part->GetDaughter(0); | |
1635 | AliAODTrack *prong1=(AliAODTrack*)part->GetDaughter(1); | |
1636 | AliAODTrack *prong2=(AliAODTrack*)part->GetDaughter(2); | |
1637 | if (!prong0 || !prong1 || !prong2) { | |
1638 | fNentries->Fill(5); | |
1639 | return; | |
1640 | } | |
1641 | ||
1642 | //check pdg of the prongs | |
1643 | Int_t labprong[3]; | |
1644 | if(fReadMC){ | |
1645 | labprong[0]=prong0->GetLabel(); | |
1646 | labprong[1]=prong1->GetLabel(); | |
1647 | labprong[2]=prong2->GetLabel(); | |
1648 | } | |
1649 | AliAODMCParticle *mcprong=0; | |
1650 | ||
1651 | Int_t pdgProng[3]={0,0,0}; | |
1652 | Int_t pdgProngID[3]={0,0,0}; | |
1653 | if(fReadMC) { | |
1654 | for (Int_t iprong=0;iprong<3;iprong++){ | |
1655 | if(labprong[iprong]<0) continue; | |
1656 | mcprong= (AliAODMCParticle*)arrMC->At(labprong[iprong]); | |
1657 | pdgProng[iprong]=TMath::Abs(mcprong->GetPdgCode()); | |
1658 | } | |
1659 | if(isSelectedPID>0 && fReadMC){ | |
1660 | pdgProngID[1]=321; | |
1661 | if(isSelectedPID==1) {pdgProngID[0]=2212;pdgProngID[2]=211;} | |
1662 | if(isSelectedPID==2) {pdgProngID[0]=211;pdgProngID[2]=2212;} | |
1663 | } | |
1664 | } else { | |
1665 | if (isSelectedPID>0) { | |
1666 | pdgProng[1]=321; | |
1667 | if(isSelectedPID==1) {pdgProng[0]=2212;pdgProng[2]=211;} | |
1668 | if(isSelectedPID==2) {pdgProng[0]=211;pdgProng[2]=2212;} | |
1669 | } | |
1670 | } | |
1671 | ||
1672 | Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod); | |
1673 | ||
1674 | if((lab>=0 && fReadMC) || (!fReadMC && (isSelectedPID>0)) ){ //signal (from MC or PID) | |
1675 | ||
1676 | fillthis="hMass"; | |
1677 | ||
1678 | if ((fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 4122) | |
1679 | || (!fReadMC && (isSelectedPID>0 && part->Charge()>0))){ //Lc | |
1680 | if ( (pdgProng[0]==2212) && (pdgProng[1]==321) && (pdgProng[2]==211) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpKpi); | |
1681 | else if ( (pdgProng[0]==211) && (pdgProng[1]==321) && (pdgProng[2]==2212) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpiKp); | |
1682 | } | |
1683 | else if ((fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == -4122) | |
1684 | || (!fReadMC && (isSelectedPID>0 && part->Charge()<0))){ //anti-Lc | |
1685 | if ( (pdgProng[0]==2212) && (pdgProng[1]==321) && (pdgProng[2]==211) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpKpi); | |
1686 | else if ( (pdgProng[0]==211) && (pdgProng[1]==321) && (pdgProng[2]==2212) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpiKp); | |
1687 | } | |
7eb0cc73 | 1688 | |
7eb0cc73 | 1689 | |
029ed93a | 1690 | //apply cut on invariant mass on the pair |
1691 | if(selection>0){ | |
1692 | ||
1693 | Double_t ptmax=0.; | |
1694 | for (Int_t iprong=0; iprong<3; iprong++) { | |
1695 | AliAODTrack *prong=(AliAODTrack*)part->GetDaughter(iprong); | |
1696 | if (fReadMC) { | |
1697 | labprong[iprong]=prong->GetLabel(); | |
1698 | if(pdgProngID[iprong]==2212) { | |
1699 | fillthis="hpIDTot"; | |
1700 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1701 | } | |
1702 | if(pdgProngID[iprong]==321) { | |
1703 | fillthis="hKIDTot"; | |
1704 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1705 | } | |
1706 | if(pdgProngID[iprong]==211) { | |
1707 | fillthis="hpiIDTot"; | |
1708 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1709 | } | |
1710 | } | |
1711 | AliAODPid *pidObjtrk=prong->GetDetPid(); | |
1712 | AliAODPidHF *pidObj=new AliAODPidHF(); | |
1713 | Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF"); | |
1714 | Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC"); | |
1715 | delete pidObj; | |
1716 | Double_t tofSignal=0.; | |
1717 | Double_t dedxTPC=0.; | |
1718 | Double_t momTOF=0.; | |
1719 | Double_t momTPC=0.; | |
1720 | if(hasTOF) { | |
1721 | momTOF = prong->P(); | |
1722 | tofSignal=pidObjtrk->GetTOFsignal(); | |
1723 | } | |
1724 | if(hasTPC) { | |
1725 | momTPC = pidObjtrk->GetTPCmomentum(); | |
1726 | dedxTPC=pidObjtrk->GetTPCsignal(); | |
1727 | } | |
1728 | switch (pdgProng[iprong]) { | |
1729 | case 2212: | |
1730 | fillthis="hpTOFSignal"; | |
1731 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
1732 | fillthis="hpTPCSignal"; | |
1733 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
1734 | fillthis="hpptProng"; | |
1735 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1736 | fillthis="hpd0Prong"; | |
1737 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
1738 | fillthis="hpSignalVspTPC"; | |
1739 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
1740 | fillthis="hpSignalVspTOF"; | |
1741 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
1742 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
1743 | AliPID::EParticleType typep; | |
1744 | typep=AliPID::EParticleType(4); | |
1745 | if(hasTPC) { | |
1746 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep); | |
1747 | fillthis="hpSigmaVspTPC"; | |
1748 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
1749 | } | |
1750 | if(hasTOF){ | |
1751 | Double_t nsigma=fUtilPid->NumberOfSigmasTOF(prong,typep); | |
1752 | fillthis="hpSigmaVspTOF"; | |
1753 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
1754 | } | |
1755 | if(fReadMC){ | |
1756 | // real protons | |
1757 | fillthis="hpRealTot"; | |
1758 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1759 | // id protons | |
1760 | if(pdgProngID[iprong]==2212) { | |
1761 | fillthis="hpIDGood"; | |
1762 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1763 | } | |
1764 | // misidentified kaons, pions | |
1765 | if(pdgProngID[iprong]==321) { | |
1766 | fillthis="hKnonIDTot"; | |
1767 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1768 | } | |
1769 | if(pdgProngID[iprong]==211) { | |
1770 | fillthis="hpinonIDTot"; | |
1771 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1772 | } | |
1773 | } | |
1774 | ||
1775 | break; | |
1776 | case 321: | |
1777 | fillthis="hKTOFSignal"; | |
1778 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
1779 | fillthis="hKTPCSignal"; | |
1780 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
1781 | fillthis="hKptProng"; | |
1782 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1783 | fillthis="hKd0Prong"; | |
1784 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
1785 | fillthis="hKSignalVspTPC"; | |
1786 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
1787 | fillthis="hKSignalVspTOF"; | |
1788 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
1789 | AliPID::EParticleType typek; | |
1790 | typek=AliPID::EParticleType(3); | |
1791 | if(hasTPC) { | |
1792 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek); | |
1793 | fillthis="hKSigmaVspTPC"; | |
1794 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
1795 | } | |
1796 | if(hasTOF){ | |
1797 | Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek); | |
1798 | fillthis="hKSigmaVspTOF"; | |
1799 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
1800 | } | |
1801 | ||
1802 | if(fReadMC){ | |
1803 | // real kaons | |
1804 | fillthis="hKRealTot"; | |
1805 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1806 | // id kaons | |
1807 | if(pdgProngID[iprong]==321) { | |
1808 | fillthis="hKIDGood"; | |
1809 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1810 | } | |
1811 | // misidentified protons, pions | |
1812 | if(pdgProngID[iprong]==2212) { | |
1813 | fillthis="hpnonIDTot"; | |
1814 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1815 | } | |
1816 | if(pdgProngID[iprong]==211) { | |
1817 | fillthis="hpinonIDTot"; | |
1818 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1819 | } | |
1820 | } | |
1821 | break; | |
1822 | case 211: | |
1823 | fillthis="hpiTOFSignal"; | |
1824 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
1825 | fillthis="hpiTPCSignal"; | |
1826 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
1827 | fillthis="hpiptProng"; | |
1828 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1829 | fillthis="hpid0Prong"; | |
1830 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
1831 | fillthis="hpiSignalVspTPC"; | |
1832 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
1833 | fillthis="hpiSignalVspTOF"; | |
1834 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
1835 | AliPID::EParticleType typepi; | |
1836 | typepi=AliPID::EParticleType(2); | |
1837 | if(hasTPC) { | |
1838 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi); | |
1839 | fillthis="hpiSigmaVspTPC"; | |
1840 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
1841 | } | |
1842 | if(hasTOF){ | |
1843 | Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi); | |
1844 | fillthis="hpiSigmaVspTOF"; | |
1845 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
1846 | } | |
1847 | ||
1848 | if(fReadMC){ | |
1849 | // real pions | |
1850 | fillthis="hpiRealTot"; | |
1851 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1852 | // id pions | |
1853 | if(pdgProngID[iprong]==211) { | |
1854 | fillthis="hpiIDGood"; | |
1855 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1856 | } | |
1857 | // misidentified protons, kaons | |
1858 | if(pdgProngID[iprong]==2212) { | |
1859 | fillthis="hpnonIDTot"; | |
1860 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1861 | } | |
1862 | if(pdgProngID[iprong]==321) { | |
1863 | fillthis="hKnonIDTot"; | |
1864 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1865 | } | |
1866 | } | |
1867 | break; | |
1868 | ||
1869 | default: | |
1870 | break; | |
1871 | } | |
1872 | if(part->PtProng(iprong)>ptmax)ptmax=part->PtProng(iprong); | |
1873 | ||
1874 | } //end loop on prongs | |
1875 | //now histograms where we don't need to check identity | |
1876 | fillthis = "hDist12toPrim"; | |
1877 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDist12toPrim()); | |
1878 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDist23toPrim()); | |
1879 | fillthis = "hSigmaVert"; | |
1880 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetSigmaVert()); | |
1881 | fillthis = "hDCAs"; | |
1882 | Double_t dcas[3]; | |
1883 | part->GetDCAs(dcas); | |
1884 | for (Int_t idca=0;idca<3;idca++) ((TH1F*)listout->FindObject(fillthis))->Fill(dcas[idca]); | |
1885 | fillthis = "hCosPointingAngle"; | |
1886 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->CosPointingAngle()); | |
1887 | fillthis = "hDecayLength"; | |
1888 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->DecayLength()); | |
1889 | Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+part->Getd0Prong(1)*part->Getd0Prong(1)+part->Getd0Prong(2)*part->Getd0Prong(2); | |
1890 | fillthis = "hSum2"; | |
1891 | ((TH1F*)listout->FindObject(fillthis))->Fill(sum2); | |
1892 | fillthis = "hptmax"; | |
1893 | ((TH1F*)listout->FindObject(fillthis))->Fill(ptmax); | |
1894 | fillthis="hLcpt"; | |
1895 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Pt()); | |
1896 | ||
1897 | } //end mass cut | |
1898 | ||
1899 | ||
1900 | } else if( (lab<0) && fReadMC) { // background **ONLY MC** | |
1901 | ||
1902 | fillthis="hbMass"; | |
1903 | ||
1904 | if (part->Charge()>0){ //Lc background | |
1905 | if ( (pdgProng[0]==2212) && (pdgProng[1]==321) && (pdgProng[2]==211) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpKpi); | |
1906 | else if ( (pdgProng[0]==211) && (pdgProng[1]==321) && (pdgProng[2]==2212) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpiKp); | |
1907 | } | |
1908 | else if (part->Charge()<0){ //anti-Lc background | |
1909 | if ( (pdgProng[0]==2212) && (pdgProng[1]==321) && (pdgProng[2]==211) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpKpi); | |
1910 | else if ( (pdgProng[0]==211) && (pdgProng[1]==321) && (pdgProng[2]==2212) ) ((TH1F*)listout->FindObject(fillthis))->Fill(minvLcpiKp); | |
1911 | } | |
1912 | ||
1913 | ||
1914 | //apply cut on invariant mass on the pair | |
1915 | if(TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut){ | |
1916 | if(selection>0){ | |
1917 | ||
1918 | ||
1919 | Double_t ptmax=0.; | |
1920 | ||
1921 | for (Int_t iprong=0; iprong<3; iprong++) { | |
1922 | AliAODTrack *prong=(AliAODTrack*)part->GetDaughter(iprong); | |
1923 | if (fReadMC) { | |
1924 | labprong[iprong]=prong->GetLabel(); | |
1925 | if(pdgProngID[iprong]==2212) { | |
1926 | fillthis="hbpIDTot"; | |
1927 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1928 | } | |
1929 | if(pdgProngID[iprong]==321) { | |
1930 | fillthis="hbKIDTot"; | |
1931 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1932 | } | |
1933 | if(pdgProngID[iprong]==211) { | |
1934 | fillthis="hbpiIDTot"; | |
1935 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1936 | } | |
1937 | } | |
1938 | AliAODPid *pidObjtrk=prong->GetDetPid(); | |
1939 | AliAODPidHF *pidObj=new AliAODPidHF(); | |
1940 | Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF"); | |
1941 | Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC"); | |
1942 | delete pidObj; | |
1943 | Double_t tofSignal=0.; | |
1944 | Double_t dedxTPC=0.; | |
1945 | Double_t momTOF=0.; | |
1946 | Double_t momTPC=0.; | |
1947 | if(hasTOF) { | |
1948 | momTOF = prong->P(); | |
1949 | tofSignal=pidObjtrk->GetTOFsignal(); | |
1950 | } | |
1951 | if(hasTPC) { | |
1952 | momTPC = pidObjtrk->GetTPCmomentum(); | |
1953 | dedxTPC=pidObjtrk->GetTPCsignal(); | |
1954 | } | |
1955 | ||
1956 | switch (pdgProng[iprong]) { | |
1957 | case 2212: | |
1958 | fillthis="hbpTOFSignal"; | |
1959 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
1960 | fillthis="hbpTPCSignal"; | |
1961 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
1962 | fillthis="hbpptProng"; | |
1963 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1964 | fillthis="hbpd0Prong"; | |
1965 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
1966 | fillthis="hbpSignalVspTPC"; | |
1967 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
1968 | fillthis="hbpSignalVspTOF"; | |
1969 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
1970 | AliPID::EParticleType typep; | |
1971 | typep=AliPID::EParticleType(4); | |
1972 | if(hasTPC) { | |
1973 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep); | |
1974 | fillthis="hbpSigmaVspTPC"; | |
1975 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
1976 | } | |
1977 | if(hasTOF){ | |
1978 | Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typep); | |
1979 | fillthis="hbpSigmaVspTOF"; | |
1980 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
1981 | } | |
1982 | if(fReadMC){ | |
1983 | // real protons | |
1984 | fillthis="hbpRealTot"; | |
1985 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1986 | // id protons | |
1987 | if(pdgProngID[iprong]==2212) { | |
1988 | fillthis="hbpIDGood"; | |
1989 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1990 | } | |
1991 | // misidentified kaons, pions | |
1992 | if(pdgProngID[iprong]==321) { | |
1993 | fillthis="hbKnonIDTot"; | |
1994 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1995 | } | |
1996 | if(pdgProngID[iprong]==211) { | |
1997 | fillthis="hbpinonIDTot"; | |
1998 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
1999 | } | |
2000 | } | |
2001 | break; | |
2002 | case 321: | |
2003 | fillthis="hbKTOFSignal"; | |
2004 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
2005 | fillthis="hbKTPCSignal"; | |
2006 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
2007 | fillthis="hbKptProng"; | |
2008 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2009 | fillthis="hbKd0Prong"; | |
2010 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
2011 | fillthis="hbKSignalVspTPC"; | |
2012 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
2013 | fillthis="hbKSignalVspTOF"; | |
2014 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
2015 | AliPID::EParticleType typek; | |
2016 | typek=AliPID::EParticleType(3); | |
2017 | if(hasTPC) { | |
2018 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek); | |
2019 | fillthis="hbKSigmaVspTPC"; | |
2020 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
2021 | } | |
2022 | if(hasTOF){ | |
2023 | Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek); | |
2024 | fillthis="hbKSigmaVspTOF"; | |
2025 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
2026 | } | |
2027 | if(fReadMC){ | |
2028 | // real kaons | |
2029 | fillthis="hbKRealTot"; | |
2030 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2031 | // id kaons | |
2032 | if(pdgProngID[iprong]==321) { | |
2033 | fillthis="hbKIDGood"; | |
2034 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2035 | } | |
2036 | // misidentified protons, pions | |
2037 | if(pdgProngID[iprong]==2212) { | |
2038 | fillthis="hbpnonIDTot"; | |
2039 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2040 | } | |
2041 | if(pdgProngID[iprong]==211) { | |
2042 | fillthis="hbpinonIDTot"; | |
2043 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2044 | } | |
2045 | } | |
2046 | break; | |
2047 | case 211: | |
2048 | fillthis="hbpiTOFSignal"; | |
2049 | ((TH1F*)listout->FindObject(fillthis))->Fill(tofSignal); | |
2050 | fillthis="hbpiTPCSignal"; | |
2051 | ((TH1F*)listout->FindObject(fillthis))->Fill(dedxTPC); | |
2052 | fillthis="hbpiptProng"; | |
2053 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2054 | fillthis="hbpid0Prong"; | |
2055 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Getd0Prong(iprong)); | |
2056 | fillthis="hbpiSignalVspTPC"; | |
2057 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,dedxTPC); | |
2058 | fillthis="hbpiSignalVspTOF"; | |
2059 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,tofSignal); | |
2060 | AliPID::EParticleType typepi; | |
2061 | typepi=AliPID::EParticleType(2); | |
2062 | if(hasTPC) { | |
2063 | Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi); | |
2064 | fillthis="hbpiSigmaVspTPC"; | |
2065 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTPC,nsigmap); | |
2066 | } | |
2067 | if(hasTOF){ | |
2068 | Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi); | |
2069 | fillthis="hbpiSigmaVspTOF"; | |
2070 | ((TH2F*)listout->FindObject(fillthis))->Fill(momTOF,nsigma); | |
2071 | } | |
2072 | if(fReadMC){ | |
2073 | // real pions | |
2074 | fillthis="hbpiRealTot"; | |
2075 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2076 | // id pions | |
2077 | if(pdgProngID[iprong]==211) { | |
2078 | fillthis="hbpiIDGood"; | |
2079 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2080 | } | |
2081 | // misidentified protons, kaons | |
2082 | if(pdgProngID[iprong]==2212) { | |
2083 | fillthis="hbpnonIDTot"; | |
2084 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2085 | } | |
2086 | if(pdgProngID[iprong]==321) { | |
2087 | fillthis="hbKnonIDTot"; | |
2088 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->PtProng(iprong)); | |
2089 | } | |
2090 | } | |
2091 | break; | |
2092 | default: | |
2093 | break; | |
2094 | } | |
2095 | if(part->PtProng(iprong)>ptmax)ptmax=part->PtProng(iprong); | |
2096 | ||
2097 | } //end loop on prongs | |
2098 | //now histograms where we don't need to check identity | |
2099 | fillthis="hbLcpt"; | |
2100 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->Pt()); | |
2101 | fillthis = "hbDist12toPrim"; | |
2102 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDist12toPrim()); | |
2103 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetDist23toPrim()); | |
2104 | fillthis = "hbSigmaVert"; | |
2105 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->GetSigmaVert()); | |
2106 | fillthis = "hbDCAs"; | |
2107 | Double_t dcas[3]; | |
2108 | part->GetDCAs(dcas); | |
2109 | for (Int_t idca=0;idca<3;idca++) ((TH1F*)listout->FindObject(fillthis))->Fill(dcas[idca]); | |
2110 | fillthis = "hbCosPointingAngle"; | |
2111 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->CosPointingAngle()); | |
2112 | fillthis = "hbDecayLength"; | |
2113 | ((TH1F*)listout->FindObject(fillthis))->Fill(part->DecayLength()); | |
2114 | Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+part->Getd0Prong(1)*part->Getd0Prong(1)+part->Getd0Prong(2)*part->Getd0Prong(2); | |
2115 | fillthis = "hbSum2"; | |
2116 | ((TH1F*)listout->FindObject(fillthis))->Fill(sum2); | |
2117 | fillthis = "hbptmax"; | |
2118 | ((TH1F*)listout->FindObject(fillthis))->Fill(ptmax); | |
2119 | ||
2120 | } | |
2121 | ||
2122 | } //end mass cut | |
2123 | ||
2124 | } // end background case | |
2125 | return; | |
7eb0cc73 | 2126 | } |
7ad4b782 | 2127 |