]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSELambdac.cxx
Coverity
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSELambdac.cxx
CommitLineData
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
58ClassImp(AliAnalysisTaskSELambdac)
59
60
61//________________________________________________________________________
62AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac():
63AliAnalysisTaskSE(),
64fOutput(0),
65fHistNEvents(0),
7ad4b782 66fhChi2(0),
67fhMassPtGreater3(0),
68fhMassPtGreater3TC(0),
029ed93a 69fhMassPtGreater3Kp(0),
70fhMassPtGreater3KpTC(0),
71fhMassPtGreater3Lpi(0),
72fhMassPtGreater3LpiTC(0),
73fhMassPtGreater2(0),
74fhMassPtGreater2TC(0),
75fhMassPtGreater2Kp(0),
76fhMassPtGreater2KpTC(0),
77fhMassPtGreater2Lpi(0),
78fhMassPtGreater2LpiTC(0),
7eb0cc73 79fNtupleLambdac(0),
80fUpmasslimit(2.486),
81fLowmasslimit(2.086),
82fNPtBins(0),
83fRDCutsAnalysis(0),
84fRDCutsProduction(0),
85fListCuts(0),
86fFillNtuple(kFALSE),
87fReadMC(kFALSE),
88fMCPid(kFALSE),
89fRealPid(kFALSE),
90fResPid(kTRUE),
91fUseKF(kFALSE),
029ed93a 92fAnalysis(kFALSE),
93fVHF(0),
94fFillVarHists(kTRUE),
95fNentries(0),
96fOutputMC(0),
97fUtilPid(0)
7eb0cc73 98{
99 // Default constructor
100}
101
102//________________________________________________________________________
103AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac(const char *name,Bool_t fillNtuple,AliRDHFCutsLctopKpi *lccutsana,AliRDHFCutsLctopKpi *lccutsprod):
104AliAnalysisTaskSE(name),
105fOutput(0),
106fHistNEvents(0),
7ad4b782 107fhChi2(0),
108fhMassPtGreater3(0),
109fhMassPtGreater3TC(0),
029ed93a 110fhMassPtGreater3Kp(0),
111fhMassPtGreater3KpTC(0),
112fhMassPtGreater3Lpi(0),
113fhMassPtGreater3LpiTC(0),
114fhMassPtGreater2(0),
115fhMassPtGreater2TC(0),
116fhMassPtGreater2Kp(0),
117fhMassPtGreater2KpTC(0),
118fhMassPtGreater2Lpi(0),
119fhMassPtGreater2LpiTC(0),
7eb0cc73 120fNtupleLambdac(0),
121fUpmasslimit(2.486),
122fLowmasslimit(2.086),
123fNPtBins(0),
124fRDCutsAnalysis(lccutsana),
125fRDCutsProduction(lccutsprod),
126fListCuts(0),
127fFillNtuple(fillNtuple),
128fReadMC(kFALSE),
129fMCPid(kFALSE),
130fRealPid(kTRUE),
131fResPid(kFALSE),
132fUseKF(kFALSE),
029ed93a 133fAnalysis(kFALSE),
134fVHF(0),
135fFillVarHists(kTRUE),
136fNentries(0),
137fOutputMC(0),
138fUtilPid(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//________________________________________________________________________
154AliAnalysisTaskSELambdac::~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//_________________________________________________________________
194void AliAnalysisTaskSELambdac::SetMassLimits(Float_t range){
195 fUpmasslimit = 2.286+range;
196 fLowmasslimit = 2.286-range;
197}
198//_________________________________________________________________
199void AliAnalysisTaskSELambdac::SetMassLimits(Float_t lowlimit, Float_t uplimit){
200 if(uplimit>lowlimit)
201 {
202 fUpmasslimit = lowlimit;
203 fLowmasslimit = uplimit;
204 }
205}
206
207
208//________________________________________________________________________
209void 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 237Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin) const{
7eb0cc73 238 if(ibin>fNPtBins)return -1;
239 return fArrayBinLimits[ibin];
240}
241
242//_________________________________________________________________
243void 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//________________________________________________________________________
259void 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//________________________________________________________________________
764void 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//________________________________________________________________________
885void 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 908Int_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 947Bool_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 1050Bool_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 1067Bool_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 1085Bool_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 1152Int_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 1174Int_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//---------------------------
1196void 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//-----------------------
1607void 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