]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/AliAnalysisTaskSELambdac.cxx
Updates: adding histograms and changing the PID options (Marcel, Jaime, Rossella)
[u/mrichter/AliRoot.git] / PWGHF / 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
c44b3d56 16/* $Id: AliAnalysisTaskSELambdac.cxx 63644 2013-07-23 09:04:11Z zconesa $ */
27de2dfb 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"
60eac73d 53//#include "AliAODpidUtil.h"
029ed93a 54#include "AliAODPid.h"
55#include "AliInputEventHandler.h"
60eac73d 56#include "AliPID.h"
c1234468 57#include "AliNormalizationCounter.h"
862f4ac0 58#include "AliVertexingHFUtils.h"
7eb0cc73 59ClassImp(AliAnalysisTaskSELambdac)
60
61
62//________________________________________________________________________
862f4ac0 63AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac():
64AliAnalysisTaskSE(),
65 fOutput(0),
66 fHistNEvents(0),
67 fhChi2(0),
68 fhMassPtGreater3(0),
69 fhMassPtGreater3TC(0),
70 fhMassPtGreater3Kp(0),
71 fhMassPtGreater3KpTC(0),
72 fhMassPtGreater3Lpi(0),
73 fhMassPtGreater3LpiTC(0),
74 fhMassPtGreater3Dk(0),
75 fhMassPtGreater3DkTC(0),
76 fhMassPtGreater33Pr(0),
77 fhMassPtGreater33PrTC(0),
78 fhMassPtGreater2(0),
79 fhMassPtGreater2TC(0),
80 fhMassPtGreater2Kp(0),
81 fhMassPtGreater2KpTC(0),
82 fhMassPtGreater2Lpi(0),
83 fhMassPtGreater2LpiTC(0),
84 fhMassPtGreater2Dk(0),
85 fhMassPtGreater2DkTC(0),
86 fhMassPtGreater23Pr(0),
87 fhMassPtGreater23PrTC(0),
88 fhEta3Prong(0),
89 fhEta3ProngAcc(0),
90 fhEta3ProngProd(0),
91 fhEta3ProngAn(0),
92 fhRap3Prong(0),
93 fhRap3ProngAcc(0),
94 fhRap3ProngProd(0),
95 fhRap3ProngAn(0),
96 fhSelectBit(0),
97 fhProtonPtProngLcPt(),
98 fhBProtonPtProngLcPt(0),
99 fhProtond0ProngLcPt(0),
100 fhBProtond0ProngLcPt(0),
101 fhKaonPtProngLcPt(0),
102 fhBKaonPtProngLcPt(0),
103 fhKaond0ProngLcPt(0),
104 fhBKaond0ProngLcPt(0),
105 fhPionPtProngLcPt(0),
106 fhBPionPtProngLcPt(0),
107 fhPiond0ProngLcPt(0),
108 fhBPiond0ProngLcPt(0),
109 fhDist12PrimLcPt(0),
110 fhBDist12PrimLcPt(0),
111 fhSigmaVertLcPt(0),
112 fhBSigmaVertLcPt(0),
113 fhdcasLcPt(0),
114 fhBdcasLcPt(0),
115 fhCosPointingAngleLcPt(0),
116 fhBCosPointingAngleLcPt(0),
117 fhDecayLengthLcPt(0),
118 fhBDecayLengthLcPt(0),
119 fhSum2LcPt(0),
120 fhBSum2LcPt(0),
121 fhPtMaxLcPt(0),
122 fhBPtMaxLcPt(0),
123 fNtupleLambdac(0),
124 fUpmasslimit(2.486),
125 fLowmasslimit(2.086),
126 fNPtBins(0),
127 fRDCutsAnalysis(0),
128 fRDCutsProduction(0),
129 fListCuts(0),
60eac73d 130 fFillNtuple(kFALSE),
862f4ac0 131 fReadMC(kFALSE),
132 fMCPid(kFALSE),
133 fRealPid(kFALSE),
134 fResPid(kTRUE),
135 fUseKF(kFALSE),
136 fAnalysis(kFALSE),
137 fVHF(0),
138 fFillVarHists(kFALSE),
139 fMultiplicityHists(kFALSE),
140 fPriorsHists(kFALSE),
141 fLcCut(kFALSE),
142 fLcPIDCut(kFALSE),
143 fNentries(0),
144 fOutputMC(0),
145 fAPriori(0),
146 fMultiplicity(0),
147//fUtilPid(0),
148 fPIDResponse(0),
149 fCounter(0)
7eb0cc73 150{
60eac73d 151 // Default constructor
c0d01d9d 152 Float_t ptlims[7]={0.,2.,4.,6.,8.,12.,24.};
153 SetPtBinLimit(7,ptlims);
c1234468 154 for(Int_t icut=0; icut<2; icut++) fCutsKF[icut]=0.;
155 for(Int_t j=0; j<3*kMaxPtBins; j++){
dc818294 156 fMassHist[j]=0x0;
157 fMassHistTC[j]=0x0;
158 fMassHistLpi[j]=0x0;
159 fMassHistLpiTC[j]=0x0;
160 fMassHistKp[j]=0x0;
161 fMassHistKpTC[j]=0x0;
c1234468 162 fMassHistDk[j]=0x0;
163 fMassHistDkTC[j]=0x0;
164 fMassHist3Pr[j]=0x0;
165 fMassHist3PrTC[j]=0x0;
166 }
7eb0cc73 167}
168
169//________________________________________________________________________
170AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac(const char *name,Bool_t fillNtuple,AliRDHFCutsLctopKpi *lccutsana,AliRDHFCutsLctopKpi *lccutsprod):
60eac73d 171 AliAnalysisTaskSE(name),
172 fOutput(0),
173 fHistNEvents(0),
174 fhChi2(0),
175 fhMassPtGreater3(0),
176 fhMassPtGreater3TC(0),
177 fhMassPtGreater3Kp(0),
178 fhMassPtGreater3KpTC(0),
179 fhMassPtGreater3Lpi(0),
180 fhMassPtGreater3LpiTC(0),
c1234468 181 fhMassPtGreater3Dk(0),
182 fhMassPtGreater3DkTC(0),
183 fhMassPtGreater33Pr(0),
184 fhMassPtGreater33PrTC(0),
60eac73d 185 fhMassPtGreater2(0),
186 fhMassPtGreater2TC(0),
187 fhMassPtGreater2Kp(0),
188 fhMassPtGreater2KpTC(0),
189 fhMassPtGreater2Lpi(0),
190 fhMassPtGreater2LpiTC(0),
c1234468 191 fhMassPtGreater2Dk(0),
192 fhMassPtGreater2DkTC(0),
193 fhMassPtGreater23Pr(0),
194 fhMassPtGreater23PrTC(0),
862f4ac0 195 fhEta3Prong(0),
196 fhEta3ProngAcc(0),
197 fhEta3ProngProd(0),
198 fhEta3ProngAn(0),
199 fhRap3Prong(0),
200 fhRap3ProngAcc(0),
201 fhRap3ProngProd(0),
202 fhRap3ProngAn(0),
203 fhSelectBit(0),
204 fhProtonPtProngLcPt(),
205 fhBProtonPtProngLcPt(0),
206 fhProtond0ProngLcPt(0),
207 fhBProtond0ProngLcPt(0),
208 fhKaonPtProngLcPt(0),
209 fhBKaonPtProngLcPt(0),
210 fhKaond0ProngLcPt(0),
211 fhBKaond0ProngLcPt(0),
212 fhPionPtProngLcPt(0),
213 fhBPionPtProngLcPt(0),
214 fhPiond0ProngLcPt(0),
215 fhBPiond0ProngLcPt(0),
216 fhDist12PrimLcPt(0),
217 fhBDist12PrimLcPt(0),
218 fhSigmaVertLcPt(0),
219 fhBSigmaVertLcPt(0),
220 fhdcasLcPt(0),
221 fhBdcasLcPt(0),
222 fhCosPointingAngleLcPt(0),
223 fhBCosPointingAngleLcPt(0),
224 fhDecayLengthLcPt(0),
225 fhBDecayLengthLcPt(0),
226 fhSum2LcPt(0),
227 fhBSum2LcPt(0),
228 fhPtMaxLcPt(0),
229 fhBPtMaxLcPt(0),
60eac73d 230 fNtupleLambdac(0),
231 fUpmasslimit(2.486),
232 fLowmasslimit(2.086),
233 fNPtBins(0),
234 fRDCutsAnalysis(lccutsana),
235 fRDCutsProduction(lccutsprod),
236 fListCuts(0),
237 fFillNtuple(fillNtuple),
238 fReadMC(kFALSE),
239 fMCPid(kFALSE),
240 fRealPid(kTRUE),
241 fResPid(kFALSE),
242 fUseKF(kFALSE),
243 fAnalysis(kFALSE),
244 fVHF(0),
245 fFillVarHists(kFALSE),
246 fMultiplicityHists(kFALSE),
247 fPriorsHists(kFALSE),
862f4ac0 248 fLcCut(kFALSE),
249 fLcPIDCut(kFALSE),
60eac73d 250 fNentries(0),
251 fOutputMC(0),
252 fAPriori(0),
253 fMultiplicity(0),
254 //fUtilPid(0),
c1234468 255 fPIDResponse(0),
256 fCounter(0)
7eb0cc73 257{
60eac73d 258 SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,
259 fRDCutsAnalysis->GetPtBinLimits());
c1234468 260 for(Int_t icut=0; icut<2; icut++) fCutsKF[icut]=0.;
261 for(Int_t j=0; j<3*kMaxPtBins; j++){
dc818294 262 fMassHist[j]=0x0;
263 fMassHistTC[j]=0x0;
264 fMassHistLpi[j]=0x0;
265 fMassHistLpiTC[j]=0x0;
266 fMassHistKp[j]=0x0;
267 fMassHistKpTC[j]=0x0;
c1234468 268 fMassHistDk[j]=0x0;
269 fMassHistDkTC[j]=0x0;
270 fMassHist3Pr[j]=0x0;
271 fMassHist3PrTC[j]=0x0;
272 }
273 // Default constructor
60eac73d 274 // Output slot #1 writes into a TList container
7eb0cc73 275 DefineOutput(1,TList::Class()); //My private output
276 DefineOutput(2,TList::Class());
029ed93a 277 DefineOutput(3,TList::Class());
278 DefineOutput(4,TH1F::Class());
60eac73d 279 DefineOutput(5,TList::Class());
280 DefineOutput(6,TList::Class());
c1234468 281 DefineOutput(7,AliNormalizationCounter::Class());
60eac73d 282 if (fFillNtuple) {
7eb0cc73 283 // Output slot #2 writes into a TNtuple container
c1234468 284 DefineOutput(8,TNtuple::Class()); //My private output
7eb0cc73 285 }
286}
287
288//________________________________________________________________________
289AliAnalysisTaskSELambdac::~AliAnalysisTaskSELambdac()
290{
291 // Destructor
292 if (fOutput) {
293 delete fOutput;
294 fOutput = 0;
295 }
029ed93a 296 if (fOutputMC) {
297 delete fOutputMC;
298 fOutputMC = 0;
299 }
60eac73d 300 if (fAPriori) {
301 delete fAPriori;
302 fAPriori = 0;
303 }
304 if (fMultiplicity) {
305 delete fMultiplicity;
306 fMultiplicity = 0;
307 }
029ed93a 308
7eb0cc73 309 if (fVHF) {
310 delete fVHF;
311 fVHF = 0;
312 }
313
60eac73d 314 if(fRDCutsAnalysis){
7eb0cc73 315 delete fRDCutsAnalysis;
316 fRDCutsAnalysis = 0;
60eac73d 317 }
318 if(fRDCutsProduction){
7eb0cc73 319 delete fRDCutsProduction;
320 fRDCutsProduction = 0;
60eac73d 321 }
322
323 if (fListCuts) {
324 delete fListCuts;
325 fListCuts = 0;
326 }
327 if (fNentries){
328 delete fNentries;
329 fNentries = 0;
330 }
331 /*
332 if (fUtilPid){
333 delete fUtilPid;
334 fUtilPid = 0;
335 }
336 */
337 if (fPIDResponse) {
338 delete fPIDResponse;
339 }
c1234468 340 if(fCounter){
341 delete fCounter;
342 fCounter = 0;
343 }
60eac73d 344
7eb0cc73 345}
346//_________________________________________________________________
347void AliAnalysisTaskSELambdac::SetMassLimits(Float_t range){
348 fUpmasslimit = 2.286+range;
349 fLowmasslimit = 2.286-range;
350}
351//_________________________________________________________________
352void AliAnalysisTaskSELambdac::SetMassLimits(Float_t lowlimit, Float_t uplimit){
353 if(uplimit>lowlimit)
354 {
355 fUpmasslimit = lowlimit;
356 fLowmasslimit = uplimit;
357 }
358}
359
360
361//________________________________________________________________________
362void AliAnalysisTaskSELambdac::SetPtBinLimit(Int_t n, Float_t* lim){
363 // define pt bins for analysis
364 if(n>kMaxPtBins){
365 printf("Max. number of Pt bins = %d\n",kMaxPtBins);
366 fNPtBins=kMaxPtBins;
367 fArrayBinLimits[0]=0.;
368 fArrayBinLimits[1]=2.;
369 fArrayBinLimits[2]=3.;
7ad4b782 370 fArrayBinLimits[3]=4.;
7eb0cc73 371 for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
372 }else{
373 fNPtBins=n-1;
374 fArrayBinLimits[0]=lim[0];
375 for(Int_t i=1; i<fNPtBins+1; i++)
376 if(lim[i]>fArrayBinLimits[i-1]){
377 fArrayBinLimits[i]=lim[i];
378 }
379 else {
380 fArrayBinLimits[i]=fArrayBinLimits[i-1];
381 }
382 for(Int_t i=fNPtBins; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
383 }
384 if(fDebug > 1){
385 printf("Number of Pt bins = %d\n",fNPtBins);
e11ae259 386 for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);
7eb0cc73 387 }
388}
389//_________________________________________________________________
4c7fd068 390Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin) const{
7eb0cc73 391 if(ibin>fNPtBins)return -1;
392 return fArrayBinLimits[ibin];
393}
394
395//_________________________________________________________________
396void AliAnalysisTaskSELambdac::Init()
397{
398 // Initialization
399
60eac73d 400 if (fDebug > 1) printf("AnalysisTaskSELambdac::Init() \n");
7eb0cc73 401
402 fListCuts=new TList();
029ed93a 403 fListCuts->SetOwner();
7eb0cc73 404
dc222f77 405 fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsAnalysis));
406 fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsProduction));
407 PostData(2,fListCuts);
7eb0cc73 408 return;
409}
410
411//________________________________________________________________________
412void AliAnalysisTaskSELambdac::UserCreateOutputObjects()
413{
414 // Create the output container
415 //
60eac73d 416 if (fDebug > 1) printf("AnalysisTaskSELambdac::UserCreateOutputObjects() \n");
7eb0cc73 417
418 // Several histograms are more conveniently managed in a TList
419 fOutput = new TList();
420 fOutput->SetOwner();
421 fOutput->SetName("OutputHistos");
422
423 TString hisname;
424 Int_t index=0;
425 Int_t indexLS=0;
426 for(Int_t i=0;i<fNPtBins;i++){
427
428 index=GetHistoIndex(i);
429 indexLS=GetLSHistoIndex(i);
430
431 hisname.Form("hMassPt%d",i);
7d020878 432 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 433 fMassHist[index]->Sumw2();
7eb0cc73 434 hisname.Form("hMassPt%dTC",i);
7d020878 435 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 436 fMassHistTC[index]->Sumw2();
437
029ed93a 438 hisname.Form("hMassPtLpi%d",i);
7d020878 439 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 440 fMassHistLpi[index]->Sumw2();
441 hisname.Form("hMassPtLpi%dTC",i);
7d020878 442 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 443 fMassHistLpiTC[index]->Sumw2();
444
445 hisname.Form("hMassPtKp%d",i);
7d020878 446 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 447 fMassHistKp[index]->Sumw2();
448 hisname.Form("hMassPtKp%dTC",i);
7d020878 449 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 450 fMassHistKpTC[index]->Sumw2();
c1234468 451 hisname.Form("hMassPtDk%d",i);
7d020878 452 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 453 fMassHistDk[index]->Sumw2();
454 hisname.Form("hMassPtDk%dTC",i);
7d020878 455 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 456 fMassHistDkTC[index]->Sumw2();
457
458 hisname.Form("hMassPt3Pr%d",i);
7d020878 459 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 460 fMassHist3Pr[index]->Sumw2();
461 hisname.Form("hMassPt3Pr%dTC",i);
7d020878 462 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 463 fMassHist3PrTC[index]->Sumw2();
464 //signal
7eb0cc73 465 index=GetSignalHistoIndex(i);
7eb0cc73 466 hisname.Form("hSigPt%d",i);
7d020878 467 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 468 fMassHist[index]->Sumw2();
7eb0cc73 469 hisname.Form("hSigPt%dTC",i);
7d020878 470 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 471 fMassHistTC[index]->Sumw2();
029ed93a 472 hisname.Form("hSigPtLpi%d",i);
7d020878 473 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 474 fMassHistLpi[index]->Sumw2();
475 hisname.Form("hSigPtLpi%dTC",i);
7d020878 476 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 477 fMassHistLpiTC[index]->Sumw2();
478
479 hisname.Form("hSigPtKp%d",i);
7d020878 480 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 481 fMassHistKp[index]->Sumw2();
482 hisname.Form("hSigPtKp%dTC",i);
7d020878 483 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 484 fMassHistKpTC[index]->Sumw2();
7eb0cc73 485
c1234468 486 hisname.Form("hSigPtDk%d",i);
7d020878 487 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 488 fMassHistDk[index]->Sumw2();
489 hisname.Form("hSigPtDk%dTC",i);
7d020878 490 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 491 fMassHistDkTC[index]->Sumw2();
492
493 hisname.Form("hSigPt3Pr%d",i);
7d020878 494 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 495 fMassHist3Pr[index]->Sumw2();
496 hisname.Form("hSigPt3Pr%dTC",i);
7d020878 497 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 498 fMassHist3PrTC[index]->Sumw2();
499
7eb0cc73 500 index=GetBackgroundHistoIndex(i);
7eb0cc73 501 hisname.Form("hBkgPt%d",i);
7d020878 502 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 503 fMassHist[index]->Sumw2();
7eb0cc73 504 hisname.Form("hBkgPt%dTC",i);
7d020878 505 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
7eb0cc73 506 fMassHistTC[index]->Sumw2();
029ed93a 507 hisname.Form("hBkgPtLpi%d",i);
7d020878 508 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 509 fMassHistLpi[index]->Sumw2();
510 hisname.Form("hBkgPtLpi%dTC",i);
7d020878 511 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 512 fMassHistLpiTC[index]->Sumw2();
513
514 hisname.Form("hBkgPtKp%d",i);
7d020878 515 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 516 fMassHistKp[index]->Sumw2();
517 hisname.Form("hBkgPtKp%dTC",i);
7d020878 518 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 519 fMassHistKpTC[index]->Sumw2();
c1234468 520
521 hisname.Form("hBkgPtDk%d",i);
7d020878 522 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 523 fMassHistDk[index]->Sumw2();
524 hisname.Form("hBkgPtDk%dTC",i);
7d020878 525 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 526 fMassHistDkTC[index]->Sumw2();
527
528 hisname.Form("hBkgPt3Pr%d",i);
7d020878 529 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 530 fMassHist3Pr[index]->Sumw2();
531 hisname.Form("hBkgPt3Pr%dTC",i);
7d020878 532 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
c1234468 533 fMassHist3PrTC[index]->Sumw2();
60eac73d 534 }
7eb0cc73 535
536 for(Int_t i=0; i<3*fNPtBins; i++){
537 fOutput->Add(fMassHist[i]);
538 fOutput->Add(fMassHistTC[i]);
029ed93a 539 fOutput->Add(fMassHistLpi[i]);
540 fOutput->Add(fMassHistLpiTC[i]);
541 fOutput->Add(fMassHistKp[i]);
542 fOutput->Add(fMassHistKpTC[i]);
c1234468 543 fOutput->Add(fMassHistDk[i]);
544 fOutput->Add(fMassHistDkTC[i]);
545 fOutput->Add(fMassHist3Pr[i]);
546 fOutput->Add(fMassHist3PrTC[i]);
7eb0cc73 547 }
862f4ac0 548 fhEta3Prong = new TH2F("hEta3Prong","hEta3Prong;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
549 fhEta3ProngAcc = new TH2F("hEta3ProngAcc","hEta3ProngAcc;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
550 fhEta3ProngProd = new TH2F("hEta3ProngProd","hEta3ProngProd;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
551 fhEta3ProngAn = new TH2F("hEta3ProngAn","hEta3ProngAn;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
552 fhRap3Prong = new TH2F("hRap3Prong","hRap3Prong;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
553 fhRap3ProngAcc = new TH2F("hRap3ProngAcc","hRap3ProngAcc;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
554 fhRap3ProngProd = new TH2F("hRap3ProngProd","hRap3ProngProd;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
555 fhRap3ProngAn = new TH2F("hRap3ProngAn","hRap3ProngAn;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
556
557 fhSelectBit = new TH1F("hSelectBit","hSelectBit",5,-0.5,5.5);
558 fhSelectBit->GetXaxis()->SetBinLabel(2,"All");
559 fhSelectBit->GetXaxis()->SetBinLabel(3,"SelectionMap");
560 fhSelectBit->GetXaxis()->SetBinLabel(4,"!LcCut");
561 fhSelectBit->GetXaxis()->SetBinLabel(5,"!LcPID");
562
563 fOutput->Add(fhEta3Prong);
564 fOutput->Add(fhEta3ProngAcc);
565 fOutput->Add(fhEta3ProngProd);
566 fOutput->Add(fhEta3ProngAn);
567 fOutput->Add(fhRap3Prong);
568 fOutput->Add(fhRap3ProngAcc);
569 fOutput->Add(fhRap3ProngProd);
570 fOutput->Add(fhRap3ProngAn);
571 fOutput->Add(fhSelectBit);
572
7eb0cc73 573 fHistNEvents = new TH1F("fHistNEvents", "Number of processed events; ; Events",3,-1.5,1.5);
574 fHistNEvents->Sumw2();
575 fHistNEvents->SetMinimum(0);
576 fOutput->Add(fHistNEvents);
7ad4b782 577
578 fhChi2 = new TH1F("fhChi2", "Chi2",100,0.,10.);
579 fhChi2->Sumw2();
580 fOutput->Add(fhChi2);
581
7d020878 582 fhMassPtGreater3=new TH1F("fhMassPtGreater3","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
7ad4b782 583 fhMassPtGreater3->Sumw2();
584 fOutput->Add(fhMassPtGreater3);
7d020878 585 fhMassPtGreater3TC=new TH1F("fhMassPtGreater3TC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
7ad4b782 586 fhMassPtGreater3TC->Sumw2();
587 fOutput->Add(fhMassPtGreater3TC);
7d020878 588 fhMassPtGreater3Kp=new TH1F("fhMassPtGreater3Kp","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 589 fhMassPtGreater3Kp->Sumw2();
590 fOutput->Add(fhMassPtGreater3Kp);
7d020878 591 fhMassPtGreater3KpTC=new TH1F("fhMassPtGreater3KpTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 592 fhMassPtGreater3KpTC->Sumw2();
593 fOutput->Add(fhMassPtGreater3KpTC);
7d020878 594 fhMassPtGreater3Lpi=new TH1F("fhMassPtGreater3Lpi","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 595 fhMassPtGreater3Lpi->Sumw2();
596 fOutput->Add(fhMassPtGreater3Lpi);
7d020878 597 fhMassPtGreater3LpiTC=new TH1F("fhMassPtGreater3LpiTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 598 fhMassPtGreater3LpiTC->Sumw2();
599 fOutput->Add(fhMassPtGreater3LpiTC);
7d020878 600 fhMassPtGreater3Dk=new TH1F("fhMassPtGreater3Dk","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 601 fhMassPtGreater3Dk->Sumw2();
602 fOutput->Add(fhMassPtGreater3Dk);
7d020878 603 fhMassPtGreater3DkTC=new TH1F("fhMassPtGreater3DkTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 604 fhMassPtGreater3DkTC->Sumw2();
605 fOutput->Add(fhMassPtGreater3DkTC);
606
7d020878 607 fhMassPtGreater33Pr=new TH1F("fhMassPtGreater33Pr","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 608 fhMassPtGreater33Pr->Sumw2();
609 fOutput->Add(fhMassPtGreater33Pr);
7d020878 610 fhMassPtGreater33PrTC=new TH1F("fhMassPtGreater33PrTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 611 fhMassPtGreater33PrTC->Sumw2();
612 fOutput->Add(fhMassPtGreater33PrTC);
613
614
7d020878 615 fhMassPtGreater2=new TH1F("fhMassPtGreater2","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 616 fhMassPtGreater2->Sumw2();
617 fOutput->Add(fhMassPtGreater2);
7d020878 618 fhMassPtGreater2TC=new TH1F("fhMassPtGreater2TC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 619 fhMassPtGreater2TC->Sumw2();
620 fOutput->Add(fhMassPtGreater2TC);
7d020878 621 fhMassPtGreater2Kp=new TH1F("fhMassPtGreater2Kp","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 622 fhMassPtGreater2Kp->Sumw2();
623 fOutput->Add(fhMassPtGreater2Kp);
7d020878 624 fhMassPtGreater2KpTC=new TH1F("fhMassPtGreater2KpTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 625 fhMassPtGreater2KpTC->Sumw2();
626 fOutput->Add(fhMassPtGreater2KpTC);
7d020878 627 fhMassPtGreater2Lpi=new TH1F("fhMassPtGreater2Lpi","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 628 fhMassPtGreater2Lpi->Sumw2();
629 fOutput->Add(fhMassPtGreater2Lpi);
7d020878 630 fhMassPtGreater2LpiTC=new TH1F("fhMassPtGreater2LpiTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
029ed93a 631 fhMassPtGreater2LpiTC->Sumw2();
632 fOutput->Add(fhMassPtGreater2LpiTC);
7d020878 633 fhMassPtGreater2Dk=new TH1F("fhMassPtGreater2Dk","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 634 fhMassPtGreater2Dk->Sumw2();
635 fOutput->Add(fhMassPtGreater2Dk);
7d020878 636 fhMassPtGreater2DkTC=new TH1F("fhMassPtGreater2DkTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 637 fhMassPtGreater2DkTC->Sumw2();
638 fOutput->Add(fhMassPtGreater2DkTC);
7d020878 639 fhMassPtGreater23Pr=new TH1F("fhMassPtGreater23Pr","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 640 fhMassPtGreater23Pr->Sumw2();
641 fOutput->Add(fhMassPtGreater23Pr);
7d020878 642 fhMassPtGreater23PrTC=new TH1F("fhMassPtGreater23PrTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
c1234468 643 fhMassPtGreater23PrTC->Sumw2();
644 fOutput->Add(fhMassPtGreater23PrTC);
029ed93a 645
646 fOutputMC = new TList();
647 fOutputMC->SetOwner();
648 fOutputMC->SetName("QAMCHistos");
649
60eac73d 650 // const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
029ed93a 651
652 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);
653
654 //ROS: qui il bin assignment e' modellato su D0 ma sicuramente iv arie
655 fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal");
656 fNentries->GetXaxis()->SetBinLabel(2,"nCandSel(Cuts)");
657 fNentries->GetXaxis()->SetBinLabel(3,"nLcSelected");
658 fNentries->GetXaxis()->SetBinLabel(4,"nEventsGoodVtxS");
659 fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1");
660 fNentries->GetXaxis()->SetBinLabel(6,"no daughter");
661 fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)");
662 fNentries->GetXaxis()->SetBinLabel(8,"PID=0");
663 fNentries->GetXaxis()->SetBinLabel(9,"PID=1");
664 fNentries->GetXaxis()->SetBinLabel(10,"PID=2");
665 fNentries->GetXaxis()->SetBinLabel(11,"PID=3");
666 fNentries->GetXaxis()->SetNdivisions(1,kFALSE);
667
668 hisname.Form("hMass");
7d020878 669 TH1F *hMassInv=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 670 fOutputMC->Add(hMassInv);
671 hisname.Form("hbMass");
7d020878 672 TH1F *hBMassInv=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
029ed93a 673 fOutputMC->Add(hBMassInv);
674
675 // proton specific
676 hisname.Form("hpTOFSignal");
677 TH1F *hProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
678 fOutputMC->Add(hProtonTOFSignal);
679 hisname.Form("hbpTOFSignal");
680 TH1F *hBProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
681 fOutputMC->Add(hBProtonTOFSignal);
682
683 hisname.Form("hpTPCSignal");
684 TH1F *hProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
685 fOutputMC->Add(hProtonTPCSignal);
686 hisname.Form("hbpTPCSignal");
687 TH1F *hBProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
688 fOutputMC->Add(hBProtonTPCSignal);
7eb0cc73 689
029ed93a 690 hisname.Form("hpptProng");
691 TH1F *hProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
692 fOutputMC->Add(hProtonPtProng);
693 hisname.Form("hbpptProng");
694 TH1F *hBProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
695 fOutputMC->Add(hBProtonPtProng);
696
697 hisname.Form("hpRealTot");
698 TH1F *hProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
699 fOutputMC->Add(hProtonRealTot);
700 hisname.Form("hbpRealTot");
701 TH1F *hBProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
702 fOutputMC->Add(hBProtonRealTot);
703 hisname.Form("hpIDTot");
704 TH1F *hProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
705 fOutputMC->Add(hProtonIDTot);
706 hisname.Form("hpIDGood");
707 TH1F *hProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
708 fOutputMC->Add(hProtonIDGood);
709 hisname.Form("hbpIDGood");
710 TH1F *hBProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
711 fOutputMC->Add(hBProtonIDGood);
712 hisname.Form("hbpIDTot");
713 TH1F *hBProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
714 fOutputMC->Add(hBProtonIDTot);
60eac73d 715 hisname.Form("hnopIDp");
716 TH1F *hnoProtonIDpTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
717 fOutputMC->Add(hnoProtonIDpTot);
718 hisname.Form("hbnopIDp");
719 TH1F *hBnoProtonIDpTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
720 fOutputMC->Add(hBnoProtonIDpTot);
029ed93a 721
722 hisname.Form("hpd0Prong");
723 TH1F *hProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
724 fOutputMC->Add(hProtond0Prong);
725 hisname.Form("hbpd0Prong");
726 TH1F *hBProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
727 fOutputMC->Add(hBProtond0Prong);
728 hisname.Form("hbpSignalVspTOF");
729 TH2F *hBpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
730 fOutputMC->Add(hBpSignalVspTOF);
731 hisname.Form("hbpSignalVspTPC");
732 TH2F *hBpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
733 fOutputMC->Add(hBpSignalVspTPC);
734 hisname.Form("hpSignalVspTOF");
735 TH2F *hpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
736 fOutputMC->Add(hpSignalVspTOF);
737 hisname.Form("hpSignalVspTPC");
738 TH2F *hpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
739 fOutputMC->Add(hpSignalVspTPC);
740
741 hisname.Form("hpSigmaVspTOF");
742 TH2F *hpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
743 fOutputMC->Add(hpSigmaVspTOF);
744 hisname.Form("hpSigmaVspTPC");
745 TH2F *hpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
746 fOutputMC->Add(hpSigmaVspTPC);
747 hisname.Form("hbpSigmaVspTOF");
748 TH2F *hBpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
749 fOutputMC->Add(hBpSigmaVspTOF);
750 hisname.Form("hbpSigmaVspTPC");
751 TH2F *hBpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
752 fOutputMC->Add(hBpSigmaVspTPC);
753
029ed93a 754
60eac73d 755 //kaon specific
029ed93a 756 hisname.Form("hKTOFSignal");
757 TH1F *hKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
758 fOutputMC->Add(hKaonTOFSignal);
759 hisname.Form("hbKTOFSignal");
760 TH1F *hBKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
761 fOutputMC->Add(hBKaonTOFSignal);
029ed93a 762 hisname.Form("hKTPCSignal");
763 TH1F *hKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
764 fOutputMC->Add(hKaonTPCSignal);
765 hisname.Form("hbKTPCSignal");
766 TH1F *hBKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
767 fOutputMC->Add(hBKaonTPCSignal);
768
769 hisname.Form("hKptProng");
770 TH1F *hKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
771 fOutputMC->Add(hKaonPtProng);
772 hisname.Form("hbKptProng");
773 TH1F *hBKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
774 fOutputMC->Add(hBKaonPtProng);
029ed93a 775 hisname.Form("hKRealTot");
776 TH1F *hKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
777 fOutputMC->Add(hKaonRealTot);
778 hisname.Form("hbKRealTot");
779 TH1F *hBKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
780 fOutputMC->Add(hBKaonRealTot);
781 hisname.Form("hKIDGood");
782 TH1F *hKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
783 fOutputMC->Add(hKaonIDGood);
784 hisname.Form("hKIDTot");
785 TH1F *hKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
786 fOutputMC->Add(hKaonIDTot);
787 hisname.Form("hbKIDGood");
788 TH1F *hBKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
789 fOutputMC->Add(hBKaonIDGood);
790 hisname.Form("hbKIDTot");
791 TH1F *hBKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
792 fOutputMC->Add(hBKaonIDTot);
60eac73d 793 hisname.Form("hnokIDk");
794 TH1F *hnoKaonIDkTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
795 fOutputMC->Add(hnoKaonIDkTot);
796 hisname.Form("hbnokIDk");
797 TH1F *hBnoKaonIDkTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
798 fOutputMC->Add(hBnoKaonIDkTot);
029ed93a 799
800
801 hisname.Form("hKd0Prong");
802 TH1F *hKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
803 fOutputMC->Add(hKaond0Prong);
804 hisname.Form("hbKd0Prong");
805 TH1F *hBKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
806 fOutputMC->Add(hBKaond0Prong);
807 hisname.Form("hbKSignalVspTOF");
808 TH2F *hbKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
809 fOutputMC->Add(hbKSignalVspTOF);
810 hisname.Form("hbKSignalVspTPC");
811 TH2F *hbKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
812 fOutputMC->Add(hbKSignalVspTPC);
813 hisname.Form("hKSignalVspTOF");
814 TH2F *hKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
815 fOutputMC->Add(hKSignalVspTOF);
816 hisname.Form("hKSignalVspTPC");
817 TH2F *hKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
818 fOutputMC->Add(hKSignalVspTPC);
029ed93a 819 hisname.Form("hKSigmaVspTOF");
820 TH2F *hKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
821 fOutputMC->Add(hKSigmaVspTOF);
029ed93a 822 hisname.Form("hKSigmaVspTPC");
823 TH2F *hKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
824 fOutputMC->Add(hKSigmaVspTPC);
029ed93a 825 hisname.Form("hbKSigmaVspTOF");
826 TH2F *hBKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
827 fOutputMC->Add(hBKSigmaVspTOF);
828 hisname.Form("hbKSigmaVspTPC");
829 TH2F *hBKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
830 fOutputMC->Add(hBKSigmaVspTPC);
831
60eac73d 832
029ed93a 833 // pion specific
834 hisname.Form("hpiTOFSignal");
835 TH1F *hPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
836 fOutputMC->Add(hPionTOFSignal);
837 hisname.Form("hbpiTOFSignal");
838 TH1F *hBPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
839 fOutputMC->Add(hBPionTOFSignal);
029ed93a 840 hisname.Form("hpiTPCSignal");
841 TH1F *hPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0);
842 fOutputMC->Add(hPionTPCSignal);
843 hisname.Form("hbpiTPCSignal");
844 TH1F *hBPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0);
845 fOutputMC->Add(hBPionTPCSignal);
7eb0cc73 846
029ed93a 847 hisname.Form("hpiptProng");
848 TH1F *hPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
849 fOutputMC->Add(hPionPtProng);
850 hisname.Form("hbpiptProng");
851 TH1F *hBPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
852 fOutputMC->Add(hBPionPtProng);
853
854 hisname.Form("hpiRealTot");
855 TH1F *hPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
856 fOutputMC->Add(hPionRealTot);
857 hisname.Form("hbpiRealTot");
858 TH1F *hBPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
859 fOutputMC->Add(hBPionRealTot);
860 hisname.Form("hpiIDGood");
861 TH1F *hPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
862 fOutputMC->Add(hPionIDGood);
863 hisname.Form("hpiIDTot");
864 TH1F *hPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
865 fOutputMC->Add(hPionIDTot);
866 hisname.Form("hbpiIDTot");
867 TH1F *hBPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
868 fOutputMC->Add(hBPionIDTot);
869 hisname.Form("hbpiIDGood");
870 TH1F *hBPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
871 fOutputMC->Add(hBPionIDGood);
60eac73d 872 hisname.Form("hnopiIDpi");
873 TH1F *hnoPionIDpiTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
874 fOutputMC->Add(hnoPionIDpiTot);
875 hisname.Form("hbnopiIDpi");
876 TH1F *hBnoPionIDpiTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
877 fOutputMC->Add(hBnoPionIDpiTot);
029ed93a 878
879 hisname.Form("hpid0Prong");
880 TH1F *hPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,-0.1);
881 fOutputMC->Add(hPiond0Prong);
882 hisname.Form("hbpid0Prong");
883 TH1F *hBPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
884 fOutputMC->Add(hBPiond0Prong);
029ed93a 885
886 hisname.Form("hpiSignalVspTOF");
887 TH2F *hpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
888 fOutputMC->Add(hpiSignalVspTOF);
889 hisname.Form("hpiSignalVspTPC");
890 TH2F *hpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
891 fOutputMC->Add(hpiSignalVspTPC);
60eac73d 892 hisname.Form("hbpiSignalVspTOF");
893 TH2F *hbpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
894 fOutputMC->Add(hbpiSignalVspTOF);
895 hisname.Form("hbpiSignalVspTPC");
896 TH2F *hbpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
897 fOutputMC->Add(hbpiSignalVspTPC);
029ed93a 898 hisname.Form("hpiSigmaVspTOF");
899 TH2F *hpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
900 fOutputMC->Add(hpiSigmaVspTOF);
029ed93a 901 hisname.Form("hpiSigmaVspTPC");
902 TH2F *hpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
903 fOutputMC->Add(hpiSigmaVspTPC);
60eac73d 904 hisname.Form("hbpiSigmaVspTOF");
905 TH2F *hBpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
906 fOutputMC->Add(hBpiSigmaVspTOF);
907 hisname.Form("hbpiSigmaVspTPC");
908 TH2F *hBpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
909 fOutputMC->Add(hBpiSigmaVspTPC);
029ed93a 910
862f4ac0 911 //Jaime Lc specific
912 hisname.Form("hLcRealTot");
913 TH1F *hLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
914 fOutputMC->Add(hLambdaRealTot);
915 hisname.Form("hbLcRealTot");
916 TH1F *hbLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
917 fOutputMC->Add(hbLambdaRealTot);
918 hisname.Form("hLcIDTot");
919 TH1F *hLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
920 fOutputMC->Add(hLambdaIDTot);
921 hisname.Form("hbLcIDTot");
922 TH1F *hbLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
923 fOutputMC->Add(hbLambdaIDTot);
924 hisname.Form("hLcIDGood");
925 TH1F *hLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
926 fOutputMC->Add(hLambdaIDGood);
927 hisname.Form("hbLcIDGood");
928 TH1F *hbLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
929 fOutputMC->Add(hbLambdaIDGood);
930 hisname.Form("hLcnoID");
931 TH1F *hLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
932 fOutputMC->Add(hLambdanoID);
933 hisname.Form("hbLcnoID");
934 TH1F *hbLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
935 fOutputMC->Add(hbLambdanoID);
936
029ed93a 937 // other generic
938 hisname.Form("hLcpt");
939 TH1F *hLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
940 fOutputMC->Add(hLcPt);
941 hisname.Form("hbLcpt");
942 TH1F *hBLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
943 fOutputMC->Add(hBLcPt);
944 hisname.Form("hDist12toPrim");
945 TH1F *hDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0);
946 fOutputMC->Add(hDist12Prim);
947 hisname.Form("hbDist12toPrim");
948 TH1F *hBDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0);
949 fOutputMC->Add(hBDist12Prim);
950
951 hisname.Form("hSigmaVert");
952 TH1F *hSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06);
953 fOutputMC->Add(hSigmaVert);
954 hisname.Form("hbSigmaVert");
955 TH1F *hBSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06);
956 fOutputMC->Add(hBSigmaVert);
957
958 hisname.Form("hDCAs");
959 TH1F *hdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1);
960 fOutputMC->Add(hdcas);
961 hisname.Form("hbDCAs");
962 TH1F *hBdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1);
963 fOutputMC->Add(hBdcas);
964
965 hisname.Form("hCosPointingAngle");
966 TH1F *hCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.);
967 fOutputMC->Add(hCosPointingAngle);
968 hisname.Form("hbCosPointingAngle");
969 TH1F *hBCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.);
970 fOutputMC->Add(hBCosPointingAngle);
971
972 hisname.Form("hDecayLength");
973 TH1F *hDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
974 fOutputMC->Add(hDecayLength);
975 hisname.Form("hbDecayLength");
976 TH1F *hBDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
977 fOutputMC->Add(hBDecayLength);
978
979 hisname.Form("hSum2");
980 TH1F *hSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
981 fOutputMC->Add(hSum2);
982 hisname.Form("hbSum2");
983 TH1F *hBSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
984 fOutputMC->Add(hBSum2);
985
986 hisname.Form("hptmax");
987 TH1F *hPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
988 fOutputMC->Add(hPtMax);
989 hisname.Form("hbptmax");
990 TH1F *hBPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
991 fOutputMC->Add(hBPtMax);
992
862f4ac0 993//2D Var x Lc Pt
994 hisname.Form("hpptProngLcPt");
995 fhProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
996 fOutputMC->Add(fhProtonPtProngLcPt);
997 hisname.Form("hbpptProngLcPt");
998 fhBProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
999 fOutputMC->Add(fhBProtonPtProngLcPt);
1000
1001 hisname.Form("hpd0ProngLcPt");
1002 fhProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1003 fOutputMC->Add(fhProtond0ProngLcPt);
1004 hisname.Form("hbpd0ProngLcPt");
1005 fhBProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1006 fOutputMC->Add(fhBProtond0ProngLcPt);
1007
1008 hisname.Form("hKptProngLcPt");
1009 fhKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1010 fOutputMC->Add(fhKaonPtProngLcPt);
1011 hisname.Form("hbKptProngLcPt");
1012 fhBKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1013 fOutputMC->Add(fhBKaonPtProngLcPt);
1014
1015 hisname.Form("hKd0ProngLcPt");
1016 fhKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1017 fOutputMC->Add(fhKaond0ProngLcPt);
1018 hisname.Form("hbKd0ProngLcPt");
1019 fhBKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1020 fOutputMC->Add(fhBKaond0ProngLcPt);
1021
1022 hisname.Form("hpiptProngLcPt");
1023 fhPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1024 fOutputMC->Add(fhPionPtProngLcPt);
1025 hisname.Form("hbpiptProngLcPt");
1026 fhBPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1027 fOutputMC->Add(fhBPionPtProngLcPt);
1028
1029 hisname.Form("hpid0ProngLcPt");
1030 fhPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,-0.1);
1031 fOutputMC->Add(fhPiond0ProngLcPt);
1032 hisname.Form("hbpid0ProngLcPt");
1033 fhBPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1034 fOutputMC->Add(fhBPiond0ProngLcPt);
1035
1036 hisname.Form("hDist12toPrimLcPt");
1037 fhDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
1038 fOutputMC->Add(fhDist12PrimLcPt);
1039 hisname.Form("hbDist12toPrimLcPt");
1040 fhBDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
1041 fOutputMC->Add(fhBDist12PrimLcPt);
1042
1043 hisname.Form("hSigmaVertLcPt");
1044 fhSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
1045 fOutputMC->Add(fhSigmaVertLcPt);
1046 hisname.Form("hbSigmaVertLcPt");
1047 fhBSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
1048 fOutputMC->Add(fhBSigmaVertLcPt);
1049
1050 hisname.Form("hDCAsLcPt");
1051 fhdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
1052 fOutputMC->Add(fhdcasLcPt);
1053 hisname.Form("hbDCAsLcPt");
1054 fhBdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
1055 fOutputMC->Add(fhBdcasLcPt);
1056
1057 hisname.Form("hCosPointingAngleLcPt");
1058 fhCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
1059 fOutputMC->Add(fhCosPointingAngleLcPt);
1060 hisname.Form("hbCosPointingAngleLcPt");
1061 fhBCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
1062 fOutputMC->Add(fhBCosPointingAngleLcPt);
1063
1064 hisname.Form("hDecayLengthLcPt");
1065 fhDecayLengthLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1066 fOutputMC->Add(fhDecayLengthLcPt);
1067 hisname.Form("hbDecayLengthLcPt");
1068 fhBDecayLengthLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1069 fOutputMC->Add(fhBDecayLengthLcPt);
1070
1071 hisname.Form("hSum2LcPt");
1072 fhSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1073 fOutputMC->Add(fhSum2LcPt);
1074 hisname.Form("hbSum2LcPt");
1075 fhBSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1076 fOutputMC->Add(fhBSum2LcPt);
1077
1078 hisname.Form("hptmaxLcPt");
1079 fhPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
1080 fOutputMC->Add(fhPtMaxLcPt);
1081 hisname.Form("hbptmaxLcPt");
1082 fhBPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
1083 fOutputMC->Add(fhBPtMaxLcPt);
029ed93a 1084
60eac73d 1085 fAPriori = new TList(); // AdC
1086 fAPriori->SetOwner(); // AdC
1087 fAPriori->SetName("APrioriMCHistos"); // AdC
1088
1089 hisname.Form("hElIn3Prong");
1090 TH1F *hElIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1091 fAPriori->Add(hElIn3Prong);
1092 hisname.Form("hMuIn3Prong");
1093 TH1F *hMuIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1094 fAPriori->Add(hMuIn3Prong);
1095 hisname.Form("hPiIn3Prong");
1096 TH1F *hPiIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1097 fAPriori->Add(hPiIn3Prong);
1098 hisname.Form("hKaIn3Prong");
1099 TH1F *hKaIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1100 fAPriori->Add(hKaIn3Prong);
1101 hisname.Form("hPrIn3Prong");
1102 TH1F *hPrIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1103 fAPriori->Add(hPrIn3Prong);
1104
1105 hisname.Form("hElIn3Prong1");
1106 TH1F *hElIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1107 fAPriori->Add(hElIn3Prong1);
1108 hisname.Form("hMuIn3Prong1");
1109 TH1F *hMuIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1110 fAPriori->Add(hMuIn3Prong1);
1111 hisname.Form("hPiIn3Prong1");
1112 TH1F *hPiIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1113 fAPriori->Add(hPiIn3Prong1);
1114 hisname.Form("hKaIn3Prong1");
1115 TH1F *hKaIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1116 fAPriori->Add(hKaIn3Prong1);
1117 hisname.Form("hPrIn3Prong1");
1118 TH1F *hPrIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1119 fAPriori->Add(hPrIn3Prong1);
1120
1121 hisname.Form("hElIn3Prong2");
1122 TH1F *hElIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1123 fAPriori->Add(hElIn3Prong2);
1124 hisname.Form("hMuIn3Prong2");
1125 TH1F *hMuIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1126 fAPriori->Add(hMuIn3Prong2);
1127 hisname.Form("hPiIn3Prong2");
1128 TH1F *hPiIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1129 fAPriori->Add(hPiIn3Prong2);
1130 hisname.Form("hKaIn3Prong2");
1131 TH1F *hKaIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1132 fAPriori->Add(hKaIn3Prong2);
1133 hisname.Form("hPrIn3Prong2");
1134 TH1F *hPrIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1135 fAPriori->Add(hPrIn3Prong2);
1136
1137 hisname.Form("hElIn3Prong3");
1138 TH1F *hElIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1139 fAPriori->Add(hElIn3Prong3);
1140 hisname.Form("hMuIn3Prong3");
1141 TH1F *hMuIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1142 fAPriori->Add(hMuIn3Prong3);
1143 hisname.Form("hPiIn3Prong3");
1144 TH1F *hPiIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1145 fAPriori->Add(hPiIn3Prong3);
1146 hisname.Form("hKaIn3Prong3");
1147 TH1F *hKaIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1148 fAPriori->Add(hKaIn3Prong3);
1149 hisname.Form("hPrIn3Prong3");
1150 TH1F *hPrIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1151 fAPriori->Add(hPrIn3Prong3);
1152
1153 hisname.Form("hElIn3Prong4");
1154 TH1F *hElIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1155 fAPriori->Add(hElIn3Prong4);
1156 hisname.Form("hMuIn3Prong4");
1157 TH1F *hMuIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1158 fAPriori->Add(hMuIn3Prong4);
1159 hisname.Form("hPiIn3Prong4");
1160 TH1F *hPiIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1161 fAPriori->Add(hPiIn3Prong4);
1162 hisname.Form("hKaIn3Prong4");
1163 TH1F *hKaIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1164 fAPriori->Add(hKaIn3Prong4);
1165 hisname.Form("hPrIn3Prong4");
1166 TH1F *hPrIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1167 fAPriori->Add(hPrIn3Prong4);
1168
1169 hisname.Form("hElIn3Prong5");
1170 TH1F *hElIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1171 fAPriori->Add(hElIn3Prong5);
1172 hisname.Form("hMuIn3Prong5");
1173 TH1F *hMuIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1174 fAPriori->Add(hMuIn3Prong5);
1175 hisname.Form("hPiIn3Prong5");
1176 TH1F *hPiIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1177 fAPriori->Add(hPiIn3Prong5);
1178 hisname.Form("hKaIn3Prong5");
1179 TH1F *hKaIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1180 fAPriori->Add(hKaIn3Prong5);
1181 hisname.Form("hPrIn3Prong5");
1182 TH1F *hPrIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1183 fAPriori->Add(hPrIn3Prong5);
1184
1185 hisname.Form("hElIn3Prong6");
1186 TH1F *hElIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1187 fAPriori->Add(hElIn3Prong6);
1188 hisname.Form("hMuIn3Prong6");
1189 TH1F *hMuIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1190 fAPriori->Add(hMuIn3Prong6);
1191 hisname.Form("hPiIn3Prong6");
1192 TH1F *hPiIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1193 fAPriori->Add(hPiIn3Prong6);
1194 hisname.Form("hKaIn3Prong6");
1195 TH1F *hKaIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1196 fAPriori->Add(hKaIn3Prong6);
1197 hisname.Form("hPrIn3Prong6");
1198 TH1F *hPrIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1199 fAPriori->Add(hPrIn3Prong6);
1200
1201
1202 fMultiplicity = new TList(); // AdC
1203 fMultiplicity->SetOwner(); // AdC
1204 fMultiplicity->SetName("MultiplicityMCHistos"); // AdC
1205
1206 hisname.Form("hLcinEvent");
1207 TH1I*hLcinEvent=new TH1I(hisname.Data(),hisname.Data(),3,-1,2);
1208 fMultiplicity->Add(hLcinEvent);
1209
1210 hisname.Form("hPrimariesvsAOD");
1211 TH2I *hPrimariesvsAOD=new TH2I(hisname.Data(),hisname.Data(),300,0,300,300,0,300);
1212 fMultiplicity->Add(hPrimariesvsAOD);
1213
1214 hisname.Form("hMultiplicityInLcEvent");
1215 TH1I *hMultiplicityInLcEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1216 fMultiplicity->Add(hMultiplicityInLcEvent);
1217 hisname.Form("h2MultiplicityInLcEvent");
1218 TH1I *h2MultiplicityInLcEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1219 fMultiplicity->Add(h2MultiplicityInLcEvent);
1220 hisname.Form("hAll2MultiplicityInEvent");
1221 TH1I *hAll2MultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1222 fMultiplicity->Add(hAll2MultiplicityInEvent);
1223 hisname.Form("hAllMultiplicityInEvent");
1224 TH1I *hAllMultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1225 fMultiplicity->Add(hAllMultiplicityInEvent);
1226 hisname.Form("hAllMultiplicityPrimaryInEvent");
1227 TH1I *hAllMultiplicityPrimaryInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1228 fMultiplicity->Add(hAllMultiplicityPrimaryInEvent);
1229 hisname.Form("hAll2MultiplicityPrimaryInEvent");
1230 TH1I *hAll2MultiplicityPrimaryInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1231 fMultiplicity->Add(hAll2MultiplicityPrimaryInEvent);
1232 hisname.Form("hMultiplicityInEvent");
1233 TH1I *hMultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0.,300);
1234 fMultiplicity->Add(hMultiplicityInEvent);
1235 hisname.Form("hMultiplicityIn3ProngLC");
1236 TH1I *hMultiplicityIn3ProngLC=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1237 fMultiplicity->Add(hMultiplicityIn3ProngLC);
1238 hisname.Form("hMultiplicityInLCpid");
1239 TH1I *hMultiplicityInLCpid=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1240 fMultiplicity->Add(hMultiplicityInLCpid);
1241 hisname.Form("hMultiplicityInLCmc");
1242 TH1I *hMultiplicityInLCmc=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1243 fMultiplicity->Add(hMultiplicityInLCmc);
1244 hisname.Form("hMultiplicityInLCNomc");
1245 TH1I *hMultiplicityInLCNomc=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1246 fMultiplicity->Add(hMultiplicityInLCNomc);
1247 hisname.Form("hMultiplicityYesC");
1248 TH1I *hMultiplicityYesC=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1249 fMultiplicity->Add(hMultiplicityYesC);
1250 hisname.Form("hMultiplicityYesB");
1251 TH1I *hMultiplicityYesB=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1252 fMultiplicity->Add(hMultiplicityYesB);
1253 hisname.Form("hMultiplicityJPsi");
1254 TH1I *hMultiplicityJPsi=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1255 fMultiplicity->Add(hMultiplicityJPsi);
1256
1257
1258 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
1259 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
1260 fPIDResponse = inputHandler->GetPIDResponse();
1261
029ed93a 1262 if(fRDCutsProduction->GetIsUsePID()){
60eac73d 1263 fRDCutsProduction->GetPidHF()->SetPidResponse(fPIDResponse);
1264 fRDCutsProduction->GetPidpion()->SetPidResponse(fPIDResponse);
1265 fRDCutsProduction->GetPidprot()->SetPidResponse(fPIDResponse);
1266 //fUtilPid=new AliAODpidUtil(fPIDResponse);
1267 fRDCutsProduction->GetPidHF()->SetOldPid(kFALSE);
1268 fRDCutsProduction->GetPidpion()->SetOldPid(kFALSE);
1269 fRDCutsProduction->GetPidprot()->SetOldPid(kFALSE);
1270 }
029ed93a 1271 if(fRDCutsAnalysis->GetIsUsePID()){
60eac73d 1272 fRDCutsAnalysis->GetPidHF()->SetPidResponse(fPIDResponse);
1273 fRDCutsAnalysis->GetPidpion()->SetPidResponse(fPIDResponse);
1274 fRDCutsAnalysis->GetPidprot()->SetPidResponse(fPIDResponse);
1275 fRDCutsAnalysis->GetPidHF()->SetOldPid(kFALSE);
1276 fRDCutsAnalysis->GetPidpion()->SetOldPid(kFALSE);
1277 fRDCutsAnalysis->GetPidprot()->SetOldPid(kFALSE);
029ed93a 1278 }
1279
029ed93a 1280 PostData(1,fOutput);
60eac73d 1281 if (fFillVarHists) PostData(3,fOutputMC);
029ed93a 1282 PostData(4,fNentries);
60eac73d 1283 if (fPriorsHists) PostData(5,fAPriori);
1284 if (fMultiplicityHists) PostData(6,fMultiplicity);
7d020878 1285 TString normName="NormalizationCounter";
1286 AliAnalysisDataContainer *cont = GetOutputSlot(7)->GetContainer();
1287 if(cont)normName=(TString)cont->GetName();
1288 fCounter = new AliNormalizationCounter(normName.Data());
c1234468 1289 fCounter->Init();
1290 PostData(7,fCounter);
60eac73d 1291 if (fFillNtuple) {
7eb0cc73 1292 //OpenFile(3); // 2 is the slot number of the ntuple
60eac73d 1293 fNtupleLambdac = new TNtuple("fNtupleLambdac","D +",
1294 "pdg:Px:Py:Pz:PtTrue:VxTrue:VyTrue:VzTrue:Ptpi:PtK:Ptpi2:PtRec:PointingAngle:DecLeng:VxRec:VyRec:VzRec:InvMass:sigvert:d0Pi:d0K:d0Pi2:dca:d0square");
c1234468 1295 PostData(8,fNtupleLambdac);
7eb0cc73 1296 }
60eac73d 1297
7eb0cc73 1298 return;
1299}
1300
1301//________________________________________________________________________
1302void AliAnalysisTaskSELambdac::UserExec(Option_t */*option*/)
1303{
1304 // Execute analysis for current event:
1305 // heavy flavor candidates association to MC truth
1306
60eac73d 1307 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
1308 //tmp
1309 fHistNEvents->Fill(0); // count event
7ad4b782 1310 // Post the data already here
7eb0cc73 1311
1312 TClonesArray *array3Prong = 0;
1313 TClonesArray *arrayLikeSign =0;
1314 if(!aod && AODEvent() && IsStandardAOD()) {
1315 // In case there is an AOD handler writing a standard AOD, use the AOD
1316 // event in memory rather than the input (ESD) event.
1317 aod = dynamic_cast<AliAODEvent*> (AODEvent());
1318 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
1319 // have to taken from the AOD event hold by the AliAODExtension
1320 AliAODHandler* aodHandler = (AliAODHandler*)
1321 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
1322 if(aodHandler->GetExtensions()) {
1323 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
1324 AliAODEvent *aodFromExt = ext->GetAOD();
1325 array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
1326 arrayLikeSign=(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign3Prong");
1327 }
dc222f77 1328 } else if(aod) {
7eb0cc73 1329 array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
1330 arrayLikeSign=(TClonesArray*)aod->GetList()->FindObject("LikeSign3Prong");
1331 }
1332
60eac73d 1333 if(!aod) return;
7eb0cc73 1334
7eb0cc73 1335 TClonesArray *arrayMC=0;
1336 AliAODMCHeader *mcHeader=0;
1337
7eb0cc73 1338 // load MC particles
1339 if(fReadMC){
1340
1341 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1342 if(!arrayMC) {
b739af08 1343 AliError("AliAnalysisTaskSELambdac::UserExec: MC particles branch not found!\n");
7eb0cc73 1344 return;
1345 }
60eac73d 1346
1347
1348 // load MC header
7eb0cc73 1349 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1350 if(!mcHeader) {
b739af08 1351 AliError("AliAnalysisTaskSELambdac::UserExec: MC header branch not found!\n");
60eac73d 1352 return;
7eb0cc73 1353 }
1354 }
60eac73d 1355
1356 TString fillthis="";
1357 Int_t numberOfPrimaries= NumberPrimaries(aod);
1358
1359 if (fMultiplicityHists && fReadMC) {
1360 fillthis="hPrimariesvsAOD";
1361 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks(),numberOfPrimaries);
1362
1363 fillthis="hAll2MultiplicityInEvent";
1364 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks());
1365
1366 fillthis="hAll2MultiplicityPrimaryInEvent";
1367 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1368
1369 if (IsThereAGeneratedLc(arrayMC)) {
1370 fillthis="h2MultiplicityInLcEvent";
1371 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1372 }
1373
1374 }
1375
1376 if(!array3Prong || !aod) {
b739af08 1377 AliError("AliAnalysisTaskSELambdac::UserExec: Charm3Prong branch not found!\n");
60eac73d 1378 return;
1379 }
1380 if(!arrayLikeSign) {
b739af08 1381 AliDebug(2,"AliAnalysisTaskSELambdac::UserExec: LikeSign3Prong branch not found!\n");
60eac73d 1382 // return;
1383 }
1384
c44b3d56 1385 // fix for temporary bug in ESDfilter
1386 // the AODs with null vertex pointer didn't pass the PhysSel
1387 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
1388 if(!vtx1 || TMath::Abs(aod->GetMagneticField())<0.001) return;
1389
60eac73d 1390 fNentries->Fill(0);
c1234468 1391 fCounter->StoreEvent(aod,fRDCutsProduction,fReadMC);
60eac73d 1392 TString trigclass=aod->GetFiredTriggerClasses();
1393 if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14);
88b40c5b 1394 Bool_t isEvSelAnCuts,isEvSelProdCuts;
1395 isEvSelProdCuts=fRDCutsProduction->IsEventSelected(aod);
1396 isEvSelAnCuts=fRDCutsAnalysis->IsEventSelected(aod);
1397 if(!isEvSelProdCuts){
60eac73d 1398 if(fRDCutsProduction->GetWhyRejection()==1) // rejected for pileup
1399 fNentries->Fill(13);
1400 return;
1401 }
1402
60eac73d 1403 Bool_t isThereA3prongWithGoodTracks = kFALSE;
1404 Bool_t isThereA3ProngLcKine = kFALSE;
1405 Bool_t isThereA3ProngLcKineANDpid = kFALSE;
1406 Bool_t isThereA3ProngLcMC = kFALSE;
1407 Bool_t isThereA3ProngCyes = kFALSE;
1408 Bool_t isThereA3ProngByes = kFALSE;
1409 Bool_t isThereA3ProngJPsi = kFALSE;
1410
7eb0cc73 1411 Int_t n3Prong = array3Prong->GetEntriesFast();
c1234468 1412 Int_t nSelectedloose[1]={0};
1413 Int_t nSelectedtight[1]={0};
1414
7eb0cc73 1415 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
1416 AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
60eac73d 1417
7eb0cc73 1418 Bool_t unsetvtx=kFALSE;
1419 if(!d->GetOwnPrimaryVtx()){
1420 d->SetOwnPrimaryVtx(vtx1);
1421 unsetvtx=kTRUE;
1422 }
1423
862f4ac0 1424 //Filter bit selection and QA:
1425 fhSelectBit->Fill(1);
1426 if(d->GetSelectionMap()){
1427 fhSelectBit->Fill(2);
1428 if(!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) fhSelectBit->Fill(3);
1429 if(!d->HasSelectionBit(AliRDHFCuts::kLcPID)) fhSelectBit->Fill(4);
1430 if(fLcCut&&!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) continue;
1431 if(fLcPIDCut&&!d->HasSelectionBit(AliRDHFCuts::kLcPID)) continue;
1432 }
7eb0cc73 1433
029ed93a 1434 Int_t isSelectedTracks = fRDCutsProduction->IsSelected(d,AliRDHFCuts::kTracks,aod);
1435 if(!isSelectedTracks) continue;
862f4ac0 1436 fhEta3Prong->Fill(d->Pt(),d->Eta());
1437 fhRap3Prong->Fill(d->Pt(),d->Y(4122));
1438
60eac73d 1439 isThereA3prongWithGoodTracks=kTRUE;
1440
7d020878 1441 if (fRDCutsProduction->IsInFiducialAcceptance(d->Pt(),d->Y(4122))) {fNentries->Fill(6);}else{continue;}
862f4ac0 1442 fhEta3ProngAcc->Fill(d->Pt(),d->Eta());
1443 fhRap3ProngAcc->Fill(d->Pt(),d->Y(4122));
1444
029ed93a 1445 Int_t ptbin=fRDCutsProduction->PtBin(d->Pt());
1446 if(ptbin==-1) {fNentries->Fill(4); continue;} //out of bounds
7eb0cc73 1447
c1234468 1448 FillMassHists(aod,d,arrayMC,fRDCutsProduction,nSelectedloose,nSelectedtight);
60eac73d 1449 if(fFillVarHists) FillVarHists(d,arrayMC,fRDCutsProduction,/*fOutputMC,*/aod);
1450
1451 if (fPriorsHists && fReadMC)
1452 FillAPrioriConcentrations(d, fRDCutsProduction, aod, arrayMC);
1453 if (fMultiplicityHists && fReadMC)
1454 MultiplicityStudies(d, fRDCutsProduction, aod, arrayMC,
1455 isThereA3ProngLcKine,isThereA3ProngLcKineANDpid,isThereA3ProngLcMC,
1456 isThereA3ProngCyes,isThereA3ProngByes,isThereA3ProngJPsi);
1457
1458 /*
1459 //start OS analysis
1460 if(labDp<0)fHistOSbkg->Fill(d->InvMassDplus());
1461 fHistOS->Fill(d->InvMassDplus());
1462 */
029ed93a 1463
7eb0cc73 1464 if(unsetvtx) d->UnsetOwnPrimaryVtx();
1465 }
c1234468 1466 fCounter->StoreCandidates(aod,nSelectedloose[0],kTRUE);
1467 fCounter->StoreCandidates(aod,nSelectedtight[0],kFALSE);
029ed93a 1468
60eac73d 1469 if (fMultiplicityHists && fReadMC) {
1470 fillthis="hAllMultiplicityInEvent";
1471 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks());
1472
1473 fillthis="hAllMultiplicityPrimaryInEvent";
1474 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1475
1476 if (IsThereAGeneratedLc(arrayMC)) {
1477 fillthis="hMultiplicityInLcEvent";
1478 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1479 }
1480
1481 if (isThereA3prongWithGoodTracks) {
1482 fillthis="hMultiplicityInEvent";
1483 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1484 }
1485 if (isThereA3ProngLcKine) {
1486 fillthis="hMultiplicityIn3ProngLC";
1487 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1488 }
1489 if (isThereA3ProngLcKineANDpid) {
1490 fillthis="hMultiplicityInLCpid";
1491 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1492 }
1493 if (isThereA3ProngLcMC) {
1494 fillthis="hMultiplicityInLCmc";
1495 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1496 }
1497 if (isThereA3ProngLcKine && !isThereA3ProngLcMC) {
1498 fillthis="hMultiplicityInLCNomc";
1499 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1500 }
1501
1502 if (isThereA3ProngCyes) {
1503 fillthis="hMultiplicityYesC";
1504 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1505 }
1506 if (isThereA3ProngByes) {
1507 fillthis="hMultiplicityYesB";
1508 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1509 }
1510 if (isThereA3ProngJPsi) {
1511 fillthis="hMultiplicityJPsi";
1512 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1513 }
1514
1515 }
1516
c1234468 1517
029ed93a 1518 PostData(1,fOutput);
60eac73d 1519 if (fFillVarHists) PostData(3,fOutputMC);
1520 if (fPriorsHists) PostData(5,fAPriori);
1521 if (fMultiplicityHists) PostData(6,fMultiplicity);
1522
029ed93a 1523 PostData(4,fNentries);
c1234468 1524 PostData(7,fCounter);
029ed93a 1525
7eb0cc73 1526 return;
1527}
1528
1529
1530
1531//________________________________________________________________________
1532void AliAnalysisTaskSELambdac::Terminate(Option_t */*option*/)
1533{
1534 // Terminate analysis
1535 //
60eac73d 1536 if (fDebug > 1) printf("AnalysisTaskSELambdac: Terminate() \n");
7eb0cc73 1537
1538 fOutput = dynamic_cast<TList*> (GetOutputData(1));
1539 if (!fOutput) {
b739af08 1540 AliError("ERROR: fOutput not available\n");
7eb0cc73 1541 return;
1542 }
60eac73d 1543 //fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
7eb0cc73 1544
7eb0cc73 1545 if(fFillNtuple){
1546 fNtupleLambdac = dynamic_cast<TNtuple*>(GetOutputData(3));
1547 }
1548
7eb0cc73 1549
60eac73d 1550 return;
7eb0cc73 1551}
1552
1553//________________________________________________________________________
4c7fd068 1554Int_t AliAnalysisTaskSELambdac::MatchToMCLambdac(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
1555 // check if the candidate is a Lambdac decaying in pKpi or in the resonant channels
7eb0cc73 1556 Int_t lambdacLab[3]={0,0,0};
1557 Int_t pdgs[3]={0,0,0};
1558 for(Int_t i=0;i<3;i++){
60eac73d 1559 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1560 Int_t lab=daugh->GetLabel();
1561 if(lab<0) return 0;
1562 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
1563 if(!part) continue;
1564 pdgs[i]=part->GetPdgCode();
1565 Int_t partPdgcode = TMath::Abs(part->GetPdgCode());
1566 if(partPdgcode==211 || partPdgcode==321 || partPdgcode==2212){
1567 Int_t motherLabel=part->GetMother();
1568 if(motherLabel<0) return 0;
1569 AliAODMCParticle *motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
1570 if(!motherPart) continue;
1571 Int_t motherPdg = TMath::Abs(motherPart->GetPdgCode());
1572 if(motherPdg==4122) {
7eb0cc73 1573 if(GetLambdacDaugh(motherPart,arrayMC)){lambdacLab[i]=motherLabel;continue;}
60eac73d 1574 }
1575 if(motherPdg==313 || motherPdg==2224 || motherPdg==3124){
5d836c02 1576 Int_t granMotherLabel=motherPart->GetMother();
1577 if(granMotherLabel<0) return 0;
1578 AliAODMCParticle *granMotherPart = (AliAODMCParticle*)arrayMC->At(granMotherLabel);
1579 if(!granMotherPart) continue;
c1234468 1580 Int_t granMotherPdg = TMath::Abs(granMotherPart->GetPdgCode());
1581 if(granMotherPdg ==4122) {
5d836c02 1582 if(GetLambdacDaugh(granMotherPart,arrayMC)) {lambdacLab[i]=granMotherLabel;continue;}
7eb0cc73 1583 }
60eac73d 1584 }
1585 }
7eb0cc73 1586 }
1587
60eac73d 1588 if(lambdacLab[0]==lambdacLab[1] && lambdacLab[1]==lambdacLab[2]) {return lambdacLab[0];}
1589 return 0;
7eb0cc73 1590
1591}
1592//------------------------
4c7fd068 1593Bool_t AliAnalysisTaskSELambdac::GetLambdacDaugh(AliAODMCParticle *part,TClonesArray *arrayMC) const{
60eac73d 1594 // check if the particle is a lambdac and if its decay mode is the correct one
1595 Int_t numberOfLambdac=0;
1596 if(TMath::Abs(part->GetPdgCode())!=4122) return kFALSE;
5d836c02 1597 Int_t daughTmp[2];
1598 daughTmp[0]=part->GetDaughter(0);
1599 daughTmp[1]=part->GetDaughter(1);
60eac73d 1600 Int_t nDaugh = (Int_t)part->GetNDaughters();
1601 if(nDaugh<2) return kFALSE;
1602 if(nDaugh>3) return kFALSE;
1603 AliAODMCParticle* pdaugh1 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(0));
1604 if(!pdaugh1) {return kFALSE;}
1605 Int_t number1 = TMath::Abs(pdaugh1->GetPdgCode());
1606 AliAODMCParticle* pdaugh2 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(1));
1607 if(!pdaugh2) {return kFALSE;}
7eb0cc73 1608 Int_t number2 = TMath::Abs(pdaugh2->GetPdgCode());
1609
1610 if(nDaugh==3){
60eac73d 1611 Int_t thirdDaugh=part->GetDaughter(1)-1;
1612 AliAODMCParticle* pdaugh3 = (AliAODMCParticle*)arrayMC->At(thirdDaugh);
1613 Int_t number3 = TMath::Abs(pdaugh3->GetPdgCode());
1614 if((number1==321 && number2==211 && number3==2212) ||
1615 (number1==211 && number2==321 && number3==2212) ||
1616 (number1==211 && number2==2212 && number3==321) ||
1617 (number1==321 && number2==2212 && number3==211) ||
1618 (number1==2212 && number2==321 && number3==211) ||
1619 (number1==2212 && number2==211 && number3==321)) {
1620 numberOfLambdac++;
1621 }
7eb0cc73 1622 }
1623
60eac73d 1624 if(nDaugh==2){
7eb0cc73 1625
60eac73d 1626 //Lambda resonant
7eb0cc73 1627
60eac73d 1628 //Lambda -> p K*0
1629 //
1630 Int_t nfiglieK=0;
1631
1632 if((number1==2212 && number2==313)){
1633 nfiglieK=pdaugh2->GetNDaughters();
1634 if(nfiglieK!=2) return kFALSE;
1635 AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1636 AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1637 if(!pdaughK1) return kFALSE;
1638 if(!pdaughK2) return kFALSE;
1639 if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++;
1640 }
1641
1642 if((number1==313 && number2==2212)){
1643 nfiglieK=pdaugh1->GetNDaughters();
1644 if(nfiglieK!=2) return kFALSE;
1645 AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1646 AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1647 if(!pdaughK1) return kFALSE;
1648 if(!pdaughK2) return kFALSE;
1649 if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++;
7eb0cc73 1650 }
1651
60eac73d 1652 //Lambda -> Delta++ k
1653 Int_t nfiglieDelta=0;
1654 if(number1==321 && number2==2224){
1655 nfiglieDelta=pdaugh2->GetNDaughters();
1656 if(nfiglieDelta!=2) return kFALSE;
1657 AliAODMCParticle *pdaughD1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1658 AliAODMCParticle *pdaughD2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1659 if(!pdaughD1) return kFALSE;
1660 if(!pdaughD2) return kFALSE;
1661 if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++;
1662 }
1663 if(number1==2224 && number2==321){
1664 nfiglieDelta=pdaugh1->GetNDaughters();
1665 if(nfiglieDelta!=2) return kFALSE;
1666 AliAODMCParticle* pdaughD1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1667 AliAODMCParticle* pdaughD2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1668 if(!pdaughD1) return kFALSE;
1669 if(!pdaughD2) return kFALSE;
1670 if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++;
1671 }
7eb0cc73 1672
1673
60eac73d 1674 //Lambdac -> Lambda(1520) pi
1675 Int_t nfiglieLa=0;
1676 if(number1==3124 && number2==211){
1677 nfiglieLa=pdaugh1->GetNDaughters();
1678 if(nfiglieLa!=2) return kFALSE;
1679 AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1680 AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1681 if(!pdaughL1) return kFALSE;
1682 if(!pdaughL2) return kFALSE;
1683 if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++;
1684 }
1685 if(number1==211 && number2==3124){
1686 nfiglieLa=pdaugh2->GetNDaughters();
1687 if(nfiglieLa!=2) return kFALSE;
1688 AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1689 AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1690 if(!pdaughL1) return kFALSE;
1691 if(!pdaughL2) return kFALSE;
1692 if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++;
7eb0cc73 1693
60eac73d 1694 }
1695 }
7eb0cc73 1696
60eac73d 1697 if(numberOfLambdac>0) {return kTRUE;}
1698 return kFALSE;
7eb0cc73 1699}
1700//-----------------------------
7ad4b782 1701Bool_t AliAnalysisTaskSELambdac::IspKpiMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
4c7fd068 1702 // Apply MC PID
60eac73d 1703 Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
1704 for(Int_t i=0;i<3;i++){
7eb0cc73 1705 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1706 lab[i]=daugh->GetLabel();
1707 if(lab[i]<0) return kFALSE;
1708 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]);
1709 if(!part) return kFALSE;
1710 pdgs[i]=TMath::Abs(part->GetPdgCode());
60eac73d 1711 }
7eb0cc73 1712
60eac73d 1713 if(pdgs[0]==2212 && pdgs[1]==321 && pdgs[2]==211) return kTRUE;
7eb0cc73 1714
60eac73d 1715 return kFALSE;
7eb0cc73 1716}
1717//-----------------------------
4c7fd068 1718Bool_t AliAnalysisTaskSELambdac::IspiKpMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
7eb0cc73 1719
4c7fd068 1720 // Apply MC PID
60eac73d 1721 Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
1722 for(Int_t i=0;i<3;i++){
7eb0cc73 1723 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1724 lab[i]=daugh->GetLabel();
1725 if(lab[i]<0) return kFALSE;
1726 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]);
1727 if(!part) return kFALSE;
1728 pdgs[i]=TMath::Abs(part->GetPdgCode());
60eac73d 1729 }
7eb0cc73 1730
60eac73d 1731 if(pdgs[2]==2212 && pdgs[1]==321 && pdgs[0]==211) {return kTRUE;}
7eb0cc73 1732
60eac73d 1733 return kFALSE;
7eb0cc73 1734}
1735//--------------------------------------
4c7fd068 1736Bool_t AliAnalysisTaskSELambdac::VertexingKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field) const{
60eac73d 1737 // apply vertexing KF
1738 Int_t iprongs[3]={0,1,2};
1739 Double_t mass[2]={0.,0.};
c1234468 1740 Bool_t constraint=kFALSE;
1741 if(fCutsKF[0]>0.)constraint=kTRUE;
60eac73d 1742 //topological constr
c1234468 1743 AliKFParticle *lambdac=d->ApplyVertexingKF(iprongs,3,pdgs,constraint,field,mass);
60eac73d 1744 if(!lambdac) return kFALSE;
c1234468 1745 if(lambdac->GetChi2()/lambdac->GetNDF()>fCutsKF[1]) return kFALSE;
60eac73d 1746 return kTRUE;
7eb0cc73 1747}
1748//-------------------------------------
c1234468 1749void AliAnalysisTaskSELambdac::IspiKpResonant(AliAODRecoDecayHF3Prong *d,Double_t field,Int_t *resNumber) const{
7eb0cc73 1750
60eac73d 1751 // apply PID using the resonant channels
1752 //if lambda* -> pk
1753 Double_t mass[2]={1.520,0.005};
1754 Int_t ipRes[2]={1,2};
1755 Int_t pdgres[2]={321,2212};
1756 AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1757 Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
c1234468 1758 if(probLa>0.1) resNumber[0]=1;
60eac73d 1759 //K* -> kpi
1760 mass[0]=0.8961;mass[1]=0.03;
1761 ipRes[0]=0;ipRes[1]=1;
1762 pdgres[0]=211;pdgres[1]=321;
1763 AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1764 Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
c1234468 1765 if(probKa>0.1) resNumber[1]=1;
60eac73d 1766
c1234468 1767 // Delta++
1768 mass[0]=1.232;mass[1]=0.15;
1769 ipRes[0]=0;ipRes[1]=2;
1770 pdgres[0]=211;pdgres[1]=2122;
1771 AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1772 Double_t probDe=TMath::Prob(delta->GetChi2(),delta->GetNDF());
1773 if(probDe>0.1) resNumber[2]=1;
1774
1775 return ;
7eb0cc73 1776
1777}
1778//-------------------------------------
c1234468 1779void AliAnalysisTaskSELambdac::IspKpiResonant(AliAODRecoDecayHF3Prong *d,Double_t field,Int_t *resNumber) const{
4c7fd068 1780
60eac73d 1781 // apply PID using the resonant channels
1782 //if lambda* -> pk
1783 Double_t mass[2]={1.520,0.005};
1784 Int_t ipRes[2]={0,1};
1785 Int_t pdgres[2]={2212,321};
1786 AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1787 Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
c1234468 1788 if(probLa>0.1) resNumber[0]=1;
60eac73d 1789 //K* -> kpi
1790 mass[0]=0.8961;mass[1]=0.03;
1791 ipRes[0]=1;ipRes[1]=2;
1792 pdgres[1]=211;pdgres[0]=321;
1793 AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1794 Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
c1234468 1795 if(probKa>0.1) resNumber[1]=1;
60eac73d 1796
c1234468 1797 // Delta++
1798 mass[0]=1.232;mass[1]=0.15;
1799 ipRes[0]=0;ipRes[1]=2;
1800 pdgres[0]=2122;pdgres[1]=211;
1801 AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1802 Double_t probDe=TMath::Prob(delta->GetChi2(),delta->GetNDF());
1803 if(probDe>0.1) resNumber[2]=1;
1804
1805 return ;
029ed93a 1806
1807}
1808//---------------------------
60eac73d 1809void AliAnalysisTaskSELambdac::FillMassHists(AliAODEvent *aod,AliAODRecoDecayHF3Prong *part,
c1234468 1810 TClonesArray *arrayMC, AliRDHFCutsLctopKpi *cuts,Int_t *nSelectedloose,Int_t *nSelectedtight)
60eac73d 1811{
029ed93a 1812
60eac73d 1813 //if MC PID or no PID, unset PID
862f4ac0 1814 //if(!fRealPid) cuts->SetUsePID(kFALSE);
60eac73d 1815 Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
1816 if(selection>0){
c1234468 1817 nSelectedloose[0]=nSelectedloose[0]+1;
60eac73d 1818 Int_t iPtBin = -1;
1819 Double_t ptCand = part->Pt();
1820 Int_t index=0;
1821
1822 for(Int_t ibin=0;ibin<fNPtBins&&iPtBin<0&&ptCand>fArrayBinLimits[0]&&ptCand<fArrayBinLimits[fNPtBins];ibin++){
1823 if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin;
029ed93a 1824 }
60eac73d 1825
1826 Float_t pdgCode=-2;
1827 Float_t pdgCode1=-1;
1828 Float_t pdgCode2=-1;
1829 Int_t labDp=-1;
1830 Float_t deltaPx=0.;
1831 Float_t deltaPy=0.;
1832 Float_t deltaPz=0.;
1833 Float_t truePt=0.;
1834 Float_t xDecay=0.;
1835 Float_t yDecay=0.;
1836 Float_t zDecay=0.;
862f4ac0 1837 Bool_t IsInjected = -1;
1838 Bool_t IsLc = -1;
1839 Bool_t IsLcfromLb = 0;
60eac73d 1840
1841 if(fReadMC){
862f4ac0 1842 AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1843 AliVertexingHFUtils *util = new AliVertexingHFUtils();
1844 IsInjected = util->IsCandidateInjected(part,mcHeader2,arrayMC)?1:0;
1845 delete util;
60eac73d 1846 labDp = MatchToMCLambdac(part,arrayMC);
1847 if(labDp>0){
862f4ac0 1848 IsLc = 1;
60eac73d 1849 AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
1850 AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0));
1851 AliAODMCParticle *dg1 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(1));
1852 deltaPx=partDp->Px()-part->Px();
1853 deltaPy=partDp->Py()-part->Py();
1854 deltaPz=partDp->Pz()-part->Pz();
1855 truePt=partDp->Pt();
1856 xDecay=dg0->Xv();
1857 yDecay=dg0->Yv();
1858 zDecay=dg0->Zv();
1859 pdgCode=TMath::Abs(partDp->GetPdgCode());
1860 pdgCode1=TMath::Abs(dg0->GetPdgCode());
1861 pdgCode2=TMath::Abs(dg1->GetPdgCode());
862f4ac0 1862 Int_t imother = partDp->GetMother();
1863 if(imother>0){
1864 AliAODMCParticle *partMom = (AliAODMCParticle*)arrayMC->At(imother);
1865 if(TMath::Abs(partMom->GetPdgCode())==5122) IsLcfromLb =1;
1866 else IsLcfromLb=-1;
1867 }
60eac73d 1868 }else{
1869 pdgCode=-1;
1870 }
029ed93a 1871 }
60eac73d 1872
1873 Double_t invMasspKpi=-1.;
1874 Double_t invMasspiKp=-1.;
1875 Double_t invMasspKpiLpi=-1.;
1876 Double_t invMasspiKpLpi=-1.;
1877 Double_t invMasspKpiKp=-1.;
1878 Double_t invMasspiKpKp=-1.;
c1234468 1879 Double_t invMasspiKpDk=-1.;
1880 Double_t invMasspKpiDk=-1.;
1881 Double_t invMasspiKp3Pr=-1.;
1882 Double_t invMasspKpi3Pr=-1.;
60eac73d 1883 Double_t field=aod->GetMagneticField();
1884 //apply MC PID
1885 if(fReadMC && fMCPid){
c1234468 1886 if(IspKpiMC(part,arrayMC)) invMasspKpi=part->InvMassLcpKpi();
1887 if(IspiKpMC(part,arrayMC)) invMasspiKp=part->InvMassLcpiKp();
029ed93a 1888 }
60eac73d 1889
1890 // apply realistic PID
1891 if(fRealPid){
c1234468 1892 if(selection==1 || selection==3) invMasspKpi=part->InvMassLcpKpi();
1893 if(selection>=2) invMasspiKp=part->InvMassLcpiKp();
1894 }
60eac73d 1895 //apply PID using resonances
1896 if (fResPid && fRealPid) {
c1234468 1897 Int_t ispKpi[3]={0,0,0};
1898 IspKpiResonant(part,field,ispKpi);
1899 Int_t ispiKp[3]={0,0,0};
1900 IspiKpResonant(part,field,ispiKp);
60eac73d 1901 if (selection==3 || selection==1) {
c1234468 1902 if(ispKpi[0]==1){
1903 invMasspKpiLpi=part->InvMassLcpKpi();
1904 }
1905 if(ispKpi[1]==1){
1906 invMasspKpiKp=part->InvMassLcpKpi();
1907 }
1908 if(ispKpi[2]==1){
1909 invMasspKpiDk=part->InvMassLcpKpi();
1910 }
1911 if(ispKpi[2]==0 && ispKpi[1]==0 && ispKpi[0]==0){
1912 invMasspKpi3Pr=part->InvMassLcpKpi();
1913 }
60eac73d 1914 }
1915 if(selection>=2) {
c1234468 1916 if(ispiKp[0]==1){
1917 invMasspiKpLpi=part->InvMassLcpiKp();
1918 }
1919 if(ispiKp[1]==1){
1920 invMasspiKpKp=part->InvMassLcpiKp();
1921 }
1922 if(ispiKp[2]==1){
1923 invMasspiKpDk=part->InvMassLcpiKp();
1924 }
1925 if(ispiKp[2]==0 && ispiKp[1]==0 && ispiKp[0]==0){
1926 invMasspiKp3Pr=part->InvMassLcpiKp();
1927 }
60eac73d 1928 }
c1234468 1929
1930 }
029ed93a 1931
029ed93a 1932
60eac73d 1933 if(invMasspiKp<0. && invMasspKpi<0.) return;
029ed93a 1934
60eac73d 1935 Int_t passTightCuts=0;
c1234468 1936 if(fAnalysis) {
862f4ac0 1937 passTightCuts=fRDCutsAnalysis->IsSelected(part,AliRDHFCuts::kCandidate,aod);
1938 if(fUseKF){
1939 Int_t pdgs[3]={0,0,0};
1940 if(invMasspKpi>0.){
1941 pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
1942 if(!VertexingKF(part,pdgs,field)) {
1943 invMasspKpi=-1.;
1944 invMasspKpi3Pr=-1.;
1945 invMasspKpiDk=-1.;
1946 invMasspKpiLpi=-1.;
1947 invMasspKpiKp=-1.;
1948 }
1949 }
1950 if(invMasspiKp>0.){
1951 pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
1952 if(!VertexingKF(part,pdgs,field)) {
1953 invMasspiKp=-1.;
1954 invMasspiKp3Pr=-1.;
1955 invMasspiKpDk=-1.;
1956 invMasspiKpLpi=-1.;
1957 invMasspiKpKp=-1.;
1958 }
1959 }
c1234468 1960 }
862f4ac0 1961 if(passTightCuts>0) nSelectedtight[0]=nSelectedtight[0]+1;
1962 }
1963 // Eta and y plots:
1964 fhEta3ProngProd->Fill(part->Pt(),part->Eta());
1965 fhRap3ProngProd->Fill(part->Pt(),part->Y(4122));
1966 if(passTightCuts>0){
1967 fhEta3ProngAn->Fill(part->Pt(),part->Eta());
1968 fhRap3ProngAn->Fill(part->Pt(),part->Y(4122));
1969 }
60eac73d 1970 Float_t tmp[24];
1971 if (fFillNtuple) {
1972 tmp[0]=pdgCode;
1973 tmp[1]=deltaPx;
1974 tmp[2]=deltaPy;
1975 tmp[3]=deltaPz;
1976 tmp[4]=truePt;
1977 tmp[5]=xDecay;
1978 tmp[6]=yDecay;
1979 tmp[7]=zDecay;
1980 if(pdgCode1==2212) {tmp[8]=part->PtProng(0);}else{tmp[8]=0.;}
1981 if(pdgCode1==211) {tmp[10]=part->PtProng(0);}else{tmp[10]=0.;}
1982 tmp[9]=part->PtProng(1);
1983 if(pdgCode2==211) {tmp[10]=part->PtProng(2);}else{tmp[10]=0.;}
1984 tmp[11]=part->Pt();
1985 tmp[12]=part->CosPointingAngle();
1986 tmp[13]=part->DecayLength();
1987 tmp[14]=part->Xv();
1988 tmp[15]=part->Yv();
1989 tmp[16]=part->Zv();
1990 if(invMasspiKp>0.) tmp[17]=invMasspiKp;
1991 if(invMasspKpi>0.) tmp[17]=invMasspKpi;
1992 tmp[18]=part->GetSigmaVert();
1993 tmp[19]=part->Getd0Prong(0);
1994 tmp[20]=part->Getd0Prong(1);
1995 tmp[21]=part->Getd0Prong(2);
1996 tmp[22]=part->GetDCA();
1997 tmp[23]=part->Prodd0d0();
1998 fNtupleLambdac->Fill(tmp);
1999 PostData(7,fNtupleLambdac);
2000 }
029ed93a 2001
c1234468 2002 if(part->Pt()>3.&& part->Pt()<=6.){
029ed93a 2003 if(invMasspiKp>0. && invMasspKpi>0.){
60eac73d 2004 if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp,0.5);
2005 if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi,0.5);
2006 }else{
2007 if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp);
2008 if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi);
2009 }
2010 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2011 if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi,0.5);
2012 if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi,0.5);
2013 }else{
2014 if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi);
2015 if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi);
2016 }
2017 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2018 if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp,0.5);
2019 if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp,0.5);
029ed93a 2020 }else{
60eac73d 2021 if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp);
2022 if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp);
2023 }
c1234468 2024 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2025 if(invMasspiKpDk>0.) fhMassPtGreater3Dk->Fill(invMasspiKpDk,0.5);
2026 if(invMasspKpiDk>0.) fhMassPtGreater3Dk->Fill(invMasspKpiDk,0.5);
2027 }else{
2028 if(invMasspiKpDk>0.) fhMassPtGreater3Dk->Fill(invMasspiKpDk);
2029 if(invMasspKpiDk>0.) fhMassPtGreater3Dk->Fill(invMasspKpiDk);
2030 }
2031 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2032 if(invMasspiKp3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspiKp3Pr,0.5);
2033 if(invMasspKpi3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspKpi3Pr,0.5);
2034 }else{
2035 if(invMasspiKp3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspiKp3Pr);
2036 if(invMasspKpi3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspKpi3Pr);
2037 }
2038
60eac73d 2039 if(passTightCuts>0){
2040 if(invMasspiKp>0. && invMasspKpi>0.){
2041 if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp,0.5);
2042 if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi,0.5);
2043 }else{
2044 if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp);
2045 if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi);
2046 }
2047 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2048 if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi,0.5);
2049 if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi,0.5);
2050 }else{
2051 if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi);
2052 if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi);
2053 }
2054 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2055 if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp,0.5);
2056 if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp,0.5);
2057 }else{
2058 if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp);
2059 if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp);
2060 }
c1234468 2061
2062 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2063 if(invMasspiKpDk>0.) fhMassPtGreater3DkTC->Fill(invMasspiKpDk,0.5);
2064 if(invMasspKpiDk>0.) fhMassPtGreater3DkTC->Fill(invMasspKpiDk,0.5);
2065 }else{
2066 if(invMasspiKpDk>0.) fhMassPtGreater3DkTC->Fill(invMasspiKpDk);
2067 if(invMasspKpiDk>0.) fhMassPtGreater3DkTC->Fill(invMasspKpiDk);
2068 }
2069 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2070 if(invMasspiKp3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspiKp3Pr,0.5);
2071 if(invMasspKpi3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspKpi3Pr,0.5);
2072 }else{
2073 if(invMasspiKp3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspiKp3Pr);
2074 if(invMasspKpi3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspKpi3Pr);
029ed93a 2075 }
c1234468 2076
2077 }
029ed93a 2078 }
c1234468 2079 if(part->Pt()>2.&& part->Pt()<=6.){
029ed93a 2080 if(invMasspiKp>0. && invMasspKpi>0.){
60eac73d 2081 if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp,0.5);
2082 if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi,0.5);
2083 }else{
2084 if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp);
2085 if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi);
2086 }
2087 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2088 if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi,0.5);
2089 if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi,0.5);
2090 }else{
2091 if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi);
2092 if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi);
2093 }
2094 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2095 if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp,0.5);
2096 if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp,0.5);
029ed93a 2097 }else{
60eac73d 2098 if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp);
2099 if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp);
2100 }
c1234468 2101 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2102 if(invMasspiKpDk>0.) fhMassPtGreater2Dk->Fill(invMasspiKpDk,0.5);
2103 if(invMasspKpiDk>0.) fhMassPtGreater2Dk->Fill(invMasspKpiDk,0.5);
2104 }else{
2105 if(invMasspiKpDk>0.) fhMassPtGreater2Dk->Fill(invMasspiKpDk);
2106 if(invMasspKpiDk>0.) fhMassPtGreater2Dk->Fill(invMasspKpiDk);
2107 }
2108 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2109 if(invMasspiKp3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspiKp3Pr,0.5);
2110 if(invMasspKpi3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspKpi3Pr,0.5);
2111 }else{
2112 if(invMasspiKp3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspiKp3Pr);
2113 if(invMasspKpi3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspKpi3Pr);
2114 }
2115
60eac73d 2116 if(passTightCuts>0){
2117 if(invMasspiKp>0. && invMasspKpi>0.){
2118 if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp,0.5);
2119 if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi,0.5);
2120 }else{
2121 if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp);
2122 if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi);
2123 }
2124 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2125 if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi,0.5);
2126 if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi,0.5);
2127 }else{
2128 if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi);
2129 if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi);
2130 }
2131 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2132 if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp,0.5);
2133 if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp,0.5);
2134 }else{
2135 if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp);
2136 if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp);
2137 }
c1234468 2138 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2139 if(invMasspiKpDk>0.) fhMassPtGreater2DkTC->Fill(invMasspiKpDk,0.5);
2140 if(invMasspKpiDk>0.) fhMassPtGreater2DkTC->Fill(invMasspKpiDk,0.5);
2141 }else{
2142 if(invMasspiKpDk>0.) fhMassPtGreater2DkTC->Fill(invMasspiKpDk);
2143 if(invMasspKpiDk>0.) fhMassPtGreater2DkTC->Fill(invMasspKpiDk);
2144 }
2145 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2146 if(invMasspiKp3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspiKp3Pr,0.5);
2147 if(invMasspKpi3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspKpi3Pr,0.5);
2148 }else{
2149 if(invMasspiKp3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspiKp3Pr);
2150 if(invMasspKpi3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspKpi3Pr);
029ed93a 2151 }
c1234468 2152
029ed93a 2153 }
c1234468 2154 }
029ed93a 2155
60eac73d 2156 if(iPtBin>=0){
2157 index=GetHistoIndex(iPtBin);
2158 if(invMasspiKp>0. && invMasspKpi>0.){
2159 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2160 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
029ed93a 2161 }else{
60eac73d 2162 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2163 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
029ed93a 2164 }
60eac73d 2165 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2166 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2167 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2168 }else{
2169 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2170 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2171 }
2172 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2173 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2174 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2175 }else{
2176 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2177 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2178 }
c1234468 2179 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2180 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2181 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2182 }else{
2183 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2184 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2185 }
2186 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2187 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2188 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2189 }else{
2190 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2191 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr);
2192 }
2193
60eac73d 2194 if(passTightCuts>0){
2195 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2196 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2197 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2198 }else{
2199 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2200 if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2201 }
2202 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2203 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2204 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2205 }else{
2206 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2207 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2208 }
2209 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2210 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2211 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2212 }else{
2213 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2214 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2215 }
c1234468 2216 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2217 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2218 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2219 }else{
2220 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2221 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2222 }
2223 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2224 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2225 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2226 }else{
2227 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2228 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2229 }
2230
60eac73d 2231 }
c1234468 2232
60eac73d 2233 if(fReadMC){
2234 if(labDp>0) {
2235 index=GetSignalHistoIndex(iPtBin);
2236 if(invMasspiKp>0. && invMasspKpi>0.){
2237 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2238 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2239 }else{
2240 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2241 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2242 }
2243 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2244 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2245 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2246 }else{
2247 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2248 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2249 }
2250 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2251 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2252 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2253 }else{
2254 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2255 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2256 }
c1234468 2257 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2258 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2259 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2260 }else{
2261 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2262 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2263 }
2264 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2265 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2266 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2267 }else{
2268 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2269 if(invMasspKpi3Pr>0.) fMassHistDk[index]->Fill(invMasspKpi3Pr);
2270 }
2271
60eac73d 2272 if(passTightCuts>0){
2273 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2274 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2275 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2276 }else{
2277 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2278 if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2279 }
2280 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2281 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2282 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2283 }else{
2284 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2285 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2286 }
2287 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2288 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2289 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2290 }else{
2291 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2292 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2293 }
c1234468 2294 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2295 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2296 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2297 }else{
2298 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2299 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2300 }
2301 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2302 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2303 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2304 }else{
2305 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2306 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2307 }
60eac73d 2308 }
029ed93a 2309
60eac73d 2310 }else{
2311 index=GetBackgroundHistoIndex(iPtBin);
2312 if(invMasspiKp>0. && invMasspKpi>0.){
2313 fMassHist[index]->Fill(invMasspiKp,0.5);
2314 fMassHist[index]->Fill(invMasspKpi,0.5);
2315 }else{
2316 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2317 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2318 }
2319 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2320 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2321 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2322 }else{
2323 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2324 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2325 }
2326 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2327 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2328 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2329 }else{
2330 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2331 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2332 }
c1234468 2333 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2334 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2335 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2336 }else{
2337 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2338 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2339 }
2340 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2341 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2342 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2343 }else{
2344 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2345 if(invMasspKpi3Pr>0.) fMassHistDk[index]->Fill(invMasspKpi3Pr);
2346 }
60eac73d 2347 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2348 fMassHistTC[index]->Fill(invMasspiKp,0.5);
2349 fMassHistTC[index]->Fill(invMasspKpi,0.5);
2350 }else{
2351 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2352 if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2353 }
2354 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2355 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2356 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2357 }else{
2358 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2359 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2360 }
2361 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2362 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2363 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2364 }else{
2365 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2366 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2367 }
c1234468 2368 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2369 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2370 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2371 }else{
2372 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2373 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2374 }
2375 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2376 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2377 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2378 }else{
2379 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2380 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2381 }
60eac73d 2382 }
2383
2384 }
029ed93a 2385 }
029ed93a 2386 }
60eac73d 2387 return;
029ed93a 2388}
2389//-----------------------
60eac73d 2390void AliAnalysisTaskSELambdac::FillVarHists(AliAODRecoDecayHF3Prong *part,
2391 TClonesArray *arrMC,
2392 AliRDHFCutsLctopKpi *cuts,
2393 /* TList *listout,*/
2394 AliAODEvent* aod) {
029ed93a 2395 //
2396 // function used in UserExec to fill variable histograms analysing MC
2397 //
2398
60eac73d 2399 TString fillthis="";
2400
2401 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
2402 Double_t invmasscut=0.05;
029ed93a 2403
2404 Int_t pdgDgLctopKpi[3]={2212,321,211};
2405 Int_t lab=-9999;
60eac73d 2406 if(fReadMC)
2407 lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
2408
862f4ac0 2409 // Int_t isSelectedPID=cuts->IsSelectedPID(part); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
2410 // 2 Lc -> pi+ K- p (K at center because different sign is there),
2411 // 3 both (it should never happen...)
2412 Int_t isSelectedPID=cuts->IsSelected(part,AliRDHFCuts::kPID,aod); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
60eac73d 2413 // 2 Lc -> pi+ K- p (K at center because different sign is there),
2414 // 3 both (it should never happen...)
029ed93a 2415
2416 if (isSelectedPID==0)fNentries->Fill(7);
2417 if (isSelectedPID==1)fNentries->Fill(8);
2418 if (isSelectedPID==2)fNentries->Fill(9);
2419 if (isSelectedPID==3)fNentries->Fill(10);
2420
029ed93a 2421 AliAODTrack *prong0=(AliAODTrack*)part->GetDaughter(0);
2422 AliAODTrack *prong1=(AliAODTrack*)part->GetDaughter(1);
2423 AliAODTrack *prong2=(AliAODTrack*)part->GetDaughter(2);
2424 if (!prong0 || !prong1 || !prong2) {
2425 fNentries->Fill(5);
2426 return;
2427 }
2428
60eac73d 2429 Double_t minvLcpKpi = part->InvMassLcpKpi();
2430 Double_t minvLcpiKp = part->InvMassLcpiKp();
2431
029ed93a 2432 //check pdg of the prongs
60eac73d 2433 Int_t labprong[3]={-1,-1,-1};
029ed93a 2434 if(fReadMC){
2435 labprong[0]=prong0->GetLabel();
2436 labprong[1]=prong1->GetLabel();
2437 labprong[2]=prong2->GetLabel();
2438 }
029ed93a 2439
60eac73d 2440 AliAODMCParticle *mcprong=0;
2441 Int_t pdgProngMC[3]={-1,-1,-1};
2442 if(fReadMC) {
2443 for (Int_t iprong=0;iprong<3;iprong++){
029ed93a 2444 if(labprong[iprong]<0) continue;
60eac73d 2445 mcprong = (AliAODMCParticle*)arrMC->At(labprong[iprong]);
2446 pdgProngMC[iprong]=TMath::Abs(mcprong->GetPdgCode());
2447 }
2448 }
2449
2450 Int_t pdgProngPID[3]={-1,-1,-1};
2451 if(isSelectedPID>0){
2452 pdgProngPID[1]=321;
2453 if(isSelectedPID==1) {pdgProngPID[0]=2212;pdgProngPID[2]=211;}
2454 if(isSelectedPID==2) {pdgProngPID[0]=211;pdgProngPID[2]=2212;}
2455 }
2456
2457 //fill hRealTot ---> PID efficiency denominators
862f4ac0 2458 //cuts->SetUsePID(kFALSE); //PAOLA
2459 Int_t selectionTrack = cuts->IsSelected(part,AliRDHFCuts::kTracks,aod);
2460
2461 //IsInjected check
2462 Bool_t IsInjected = 0;
2463 if(fReadMC){
2464 AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
2465 AliVertexingHFUtils *util = new AliVertexingHFUtils();
2466 IsInjected = util->IsCandidateInjected(part,mcHeader2,arrMC)?1:0;
2467 delete util;
2468 }
2469 if(fReadMC && selectionTrack>0) { // 3prongs candidate x Lc (only track selection) Jaime
2470 Int_t isReal=0;
60eac73d 2471 if(lab>0){ // Signal
2472 for (Int_t iprong=0; iprong<3; iprong++) {
2473 switch (pdgProngMC[iprong]) {
2474 case 2212:
2475 fillthis="hpRealTot";
2476 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2477 isReal++;
60eac73d 2478 break;
2479 case 321:
2480 fillthis="hKRealTot";
2481 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2482 isReal++;
60eac73d 2483 break;
2484 case 211:
2485 fillthis="hpiRealTot";
2486 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2487 isReal++;
60eac73d 2488 break;
2489 default:
2490 break;
2491 }
2492 }
862f4ac0 2493 fillthis="hLcRealTot";
2494 if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2495 //Marcel: Should we zero isReal
2496 } else if(!IsInjected) { // bkg // bkg
60eac73d 2497 for (Int_t iprong=0; iprong<3; iprong++) {
2498 switch (pdgProngMC[iprong]) {
2499 case 2212:
2500 fillthis="hbpRealTot";
2501 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2502 isReal++;
60eac73d 2503 break;
2504 case 321:
2505 fillthis="hbKRealTot";
2506 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2507 isReal++;
60eac73d 2508 break;
2509 case 211:
2510 fillthis="hbpiRealTot";
2511 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2512 isReal++;
60eac73d 2513 break;
2514 default:
2515 break;
2516 }
029ed93a 2517 }
862f4ac0 2518 fillthis="hbLcRealTot";
2519 if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
029ed93a 2520 }
60eac73d 2521 }
029ed93a 2522
029ed93a 2523
862f4ac0 2524 //cuts->SetUsePID(kTRUE); //PAOLA
60eac73d 2525 Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
029ed93a 2526
60eac73d 2527 if ( (lab>0 && fReadMC) || // signal X MC
2528 (isSelectedPID>0 && !fReadMC) ) { // signal+bkg X real data
029ed93a 2529
60eac73d 2530 fillthis="hMass";
2531 if ( (fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 4122) ||
2532 (!fReadMC && (isSelectedPID>0 && part->Charge()>0)) ) { // Lc
2533 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2534 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // signal+bkg X MC and real data
2535 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2536 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // signal+bkg X MC and real data
029ed93a 2537 }
60eac73d 2538 else if ( (fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == -4122) ||
2539 (!fReadMC && (isSelectedPID>0 && part->Charge()<0)) ) { // anti-Lc
2540 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2541 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // signal+bkg X MC and real data
2542 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2543 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // signal+bkg X MC and real data
029ed93a 2544 }
7eb0cc73 2545
60eac73d 2546 if (selection>0) { // 3prongs candidate x Lc (yes PID)
029ed93a 2547
2548 Double_t ptmax=0.;
862f4ac0 2549 Int_t isID=0;
2550 Int_t isCorrect=0;
029ed93a 2551 for (Int_t iprong=0; iprong<3; iprong++) {
60eac73d 2552 if (part->PtProng(iprong)>ptmax) ptmax=part->PtProng(iprong);
2553
2554 AliAODTrack *prong = (AliAODTrack*)part->GetDaughter(iprong);
2555 AliAODPid *pidObjtrk = (AliAODPid*)prong->GetDetPid();
2556 AliAODPidHF *pidObj = (AliAODPidHF*)cuts->GetPidHF();
029ed93a 2557 Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF");
2558 Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC");
029ed93a 2559 Double_t tofSignal=0.;
2560 Double_t dedxTPC=0.;
2561 Double_t momTOF=0.;
2562 Double_t momTPC=0.;
2563 if(hasTOF) {
60eac73d 2564 momTOF = prong->P();
2565 tofSignal=pidObjtrk->GetTOFsignal();
029ed93a 2566 }
2567 if(hasTPC) {
60eac73d 2568 momTPC = pidObjtrk->GetTPCmomentum();
2569 dedxTPC=pidObjtrk->GetTPCsignal();
029ed93a 2570 }
60eac73d 2571 switch (pdgProngPID[iprong]) {
029ed93a 2572 case 2212:
60eac73d 2573 fillthis="hpTOFSignal";
2574 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2575 fillthis="hpTPCSignal";
2576 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2577 fillthis="hpptProng";
2578 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2579 fillthis="hpd0Prong";
2580 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2581 fillthis="hpSignalVspTPC";
2582 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2583 fillthis="hpSignalVspTOF";
2584 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2585 AliPID::EParticleType typep;
2586 typep=AliPID::EParticleType(4);
2587 if(hasTPC) {
2588 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep);
2589 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typep);
2590 fillthis="hpSigmaVspTPC";
2591 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2592 }
2593 if(hasTOF){
2594 //Double_t nsigma=fUtilPid->NumberOfSigmasTOF(prong,typep);
2595 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typep);
2596 fillthis="hpSigmaVspTOF";
2597 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2598 }
2599
2600 if (fReadMC) { // fill hpIDTot ---> PID contamination denominator
2601 // hIDGood, hnoID ---> PID numerators
2602 fillthis="hpIDTot";
2603 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2604 isID++;
60eac73d 2605 if(pdgProngMC[iprong]==2212) { // id protons
2606 fillthis="hpIDGood";
2607 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2608 isCorrect++;
029ed93a 2609 }
60eac73d 2610 else { // misidentified electrons, muons, pions and kaons
2611 fillthis="hnopIDp";
2612 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2613 }
60eac73d 2614 }
2615 break;
029ed93a 2616
029ed93a 2617 case 321:
60eac73d 2618 fillthis="hKTOFSignal";
2619 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2620 fillthis="hKTPCSignal";
2621 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2622 fillthis="hKptProng";
2623 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2624 fillthis="hKd0Prong";
2625 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2626 fillthis="hKSignalVspTPC";
2627 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2628 fillthis="hKSignalVspTOF";
2629 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2630 AliPID::EParticleType typek;
2631 typek=AliPID::EParticleType(3);
2632 if(hasTPC) {
2633 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek);
2634 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typek);
2635 fillthis="hKSigmaVspTPC";
2636 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2637 }
2638 if(hasTOF){
2639 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek);
2640 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typek); // protection against 'old' AODs...
2641 fillthis="hKSigmaVspTOF";
2642 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2643 }
2644
2645 if (fReadMC) { // fill hKIDTot ---> PID contamination denominator
2646 // hIDGood, hnoID ---> PID numerators
2647 fillthis="hKIDTot";
2648 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2649 isID++;
60eac73d 2650 if(pdgProngMC[iprong]==321) { // id kaons
2651 fillthis="hKIDGood";
2652 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2653 isCorrect++;
029ed93a 2654 }
60eac73d 2655 else { // misidentified electrons, muons, pions and protons
2656 fillthis="hnokIDk";
2657 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2658 }
60eac73d 2659 }
2660 break;
029ed93a 2661
029ed93a 2662 case 211:
60eac73d 2663 fillthis="hpiTOFSignal";
2664 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2665 fillthis="hpiTPCSignal";
2666 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2667 fillthis="hpiptProng";
2668 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2669 fillthis="hpid0Prong";
2670 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2671 fillthis="hpiSignalVspTPC";
2672 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2673 fillthis="hpiSignalVspTOF";
2674 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2675 AliPID::EParticleType typepi;
2676 typepi=AliPID::EParticleType(2);
2677 if(hasTPC) {
2678 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi);
2679 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typepi);
029ed93a 2680 fillthis="hpiSigmaVspTPC";
60eac73d 2681 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2682 }
2683 if(hasTOF){
2684 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi);
2685 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typepi); // protection against 'old' AODs...
2686 fillthis="hpiSigmaVspTOF";
2687 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2688 }
2689
2690 if (fReadMC) { // fill hpiIDTot ---> PID contamination denominator
2691 // hIDGood, hnoID ---> PID numerators
2692 fillthis="hpiIDTot";
2693 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2694 isID++;
60eac73d 2695 if(pdgProngMC[iprong]==211) { // id pions
2696 fillthis="hpiIDGood";
2697 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2698 isCorrect++;
029ed93a 2699 }
60eac73d 2700 else { // misidentified electrons, muons, kaons and protons
2701 fillthis="hnopiIDpi";
2702 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2703 }
60eac73d 2704 }
2705 break;
029ed93a 2706
2707 default:
2708 break;
2709 }
029ed93a 2710
2711 } //end loop on prongs
60eac73d 2712
862f4ac0 2713 //Jaime Lc checks
2714 fillthis="hLcIDTot";
2715 if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2716 fillthis="hLcIDGood";
2717 if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2718 fillthis="hLcnoID";
2719 if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2720
60eac73d 2721 //now histograms where we don't need to check identity
862f4ac0 2722 fillthis="hLcpt";
2723 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
029ed93a 2724 fillthis = "hDist12toPrim";
60eac73d 2725 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
2726 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
862f4ac0 2727 fillthis = "hDist12toPrimLcPt";
2728 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
2729 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
029ed93a 2730 fillthis = "hSigmaVert";
60eac73d 2731 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
862f4ac0 2732 fillthis = "hSigmaVertLcPt";
2733 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
029ed93a 2734 fillthis = "hDCAs";
2735 Double_t dcas[3];
2736 part->GetDCAs(dcas);
60eac73d 2737 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
862f4ac0 2738 fillthis = "hDCAsLcPt";
2739 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
029ed93a 2740 fillthis = "hCosPointingAngle";
60eac73d 2741 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
862f4ac0 2742 fillthis = "hCosPointingAngleLcPt";
2743 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
029ed93a 2744 fillthis = "hDecayLength";
60eac73d 2745 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
862f4ac0 2746 fillthis = "hDecayLengthLcPt";
2747 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
60eac73d 2748 Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
2749 part->Getd0Prong(1)*part->Getd0Prong(1)+
2750 part->Getd0Prong(2)*part->Getd0Prong(2);
029ed93a 2751 fillthis = "hSum2";
60eac73d 2752 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
862f4ac0 2753 fillthis = "hSum2LcPt";
2754 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
029ed93a 2755 fillthis = "hptmax";
60eac73d 2756 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
862f4ac0 2757 fillthis = "hptmaxLcPt";
2758 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
2759
029ed93a 2760
60eac73d 2761 } // end if (selection)
029ed93a 2762
862f4ac0 2763 }else if( lab<=0 && fReadMC && !IsInjected ) { // bkg x MC
029ed93a 2764
2765 fillthis="hbMass";
2766
60eac73d 2767 if (part->Charge()>0) { //Lc background
2768 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2769 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // bkg X MC
2770 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2771 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // bkg X MC
2772 }
2773 else if (part->Charge()<0){ //anti-Lc background
2774 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2775 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // bkg X MC
2776 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2777 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // bkg X MC
029ed93a 2778 }
2779
2780
2781 //apply cut on invariant mass on the pair
60eac73d 2782 if (TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut) {
2783
2784 if (selection>0) { // 3prongs candidate x Lc (yes PID)
2785
2786 Double_t ptmax=0.;
862f4ac0 2787 Int_t isID=0;
2788 Int_t isCorrect=0;
60eac73d 2789 for (Int_t iprong=0; iprong<3; iprong++) {
2790 if(part->PtProng(iprong)>ptmax)ptmax=part->PtProng(iprong);
2791
2792 AliAODTrack *prong = (AliAODTrack*)part->GetDaughter(iprong);
2793 AliAODPid *pidObjtrk = (AliAODPid*)prong->GetDetPid();
2794 AliAODPidHF *pidObj = (AliAODPidHF*)cuts->GetPidHF();
2795 Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF");
2796 Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC");
2797 Double_t tofSignal=0.;
2798 Double_t dedxTPC=0.;
2799 Double_t momTOF=0.;
2800 Double_t momTPC=0.;
2801 if(hasTOF) {
2802 momTOF = prong->P();
2803 tofSignal=pidObjtrk->GetTOFsignal();
2804 }
2805 if(hasTPC) {
2806 momTPC = pidObjtrk->GetTPCmomentum();
2807 dedxTPC=pidObjtrk->GetTPCsignal();
2808 }
2809
2810 switch (pdgProngPID[iprong]) {
2811 case 2212:
029ed93a 2812 fillthis="hbpTOFSignal";
60eac73d 2813 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
029ed93a 2814 fillthis="hbpTPCSignal";
60eac73d 2815 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
029ed93a 2816 fillthis="hbpptProng";
60eac73d 2817 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2818 fillthis="hbpd0Prong";
60eac73d 2819 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
029ed93a 2820 fillthis="hbpSignalVspTPC";
60eac73d 2821 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
029ed93a 2822 fillthis="hbpSignalVspTOF";
60eac73d 2823 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
029ed93a 2824 AliPID::EParticleType typep;
2825 typep=AliPID::EParticleType(4);
2826 if(hasTPC) {
60eac73d 2827 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep);
2828 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typep);
2829 fillthis="hbpSigmaVspTPC";
2830 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
029ed93a 2831 }
2832 if(hasTOF){
60eac73d 2833 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typep);
2834 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typep); // protection against 'old' AODs...
2835 fillthis="hbpSigmaVspTOF";
2836 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
029ed93a 2837 }
60eac73d 2838 if(fReadMC){ // fill hbpIDTot ---> PID contamination denominator
2839 // hbIDGood, hbnoID ---> PID numerators
2840 fillthis="hbpIDTot";
2841 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2842 isID++;
60eac73d 2843 if(pdgProngMC[iprong]==2212) { // id protons
2844 fillthis="hbpIDGood";
2845 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2846 isCorrect++;
029ed93a 2847 }
60eac73d 2848 else { // misidentified electrons, muons, pions and kaons
2849 fillthis="hbnopIDp";
2850 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2851 }
2852 }
2853 break;
60eac73d 2854
2855 case 321:
029ed93a 2856 fillthis="hbKTOFSignal";
60eac73d 2857 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
029ed93a 2858 fillthis="hbKTPCSignal";
60eac73d 2859 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
029ed93a 2860 fillthis="hbKptProng";
60eac73d 2861 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2862 fillthis="hbKd0Prong";
60eac73d 2863 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
029ed93a 2864 fillthis="hbKSignalVspTPC";
60eac73d 2865 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
029ed93a 2866 fillthis="hbKSignalVspTOF";
60eac73d 2867 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
029ed93a 2868 AliPID::EParticleType typek;
2869 typek=AliPID::EParticleType(3);
2870 if(hasTPC) {
60eac73d 2871 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek);
2872 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typek);
2873 fillthis="hbKSigmaVspTPC";
2874 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
029ed93a 2875 }
2876 if(hasTOF){
60eac73d 2877 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek);
2878 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typek); // protection against 'old' AODs...
2879 fillthis="hbKSigmaVspTOF";
2880 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
029ed93a 2881 }
60eac73d 2882 if (fReadMC) { // fill hbKIDTot ---> PID contamination denominator
2883 // hIDGood, hnoID ---> PID numerators
2884 fillthis="hbKIDTot";
2885 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2886 isID++;
60eac73d 2887 if(pdgProngMC[iprong]==321) { // id kaons
2888 fillthis="hbKIDGood";
2889 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2890 isCorrect++;
029ed93a 2891 }
60eac73d 2892 else { // misidentified electrons, muons, pions and protons
2893 fillthis="hbnokIDk";
2894 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2895 }
2896 }
2897 break;
60eac73d 2898
2899 case 211:
029ed93a 2900 fillthis="hbpiTOFSignal";
60eac73d 2901 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
029ed93a 2902 fillthis="hbpiTPCSignal";
60eac73d 2903 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
029ed93a 2904 fillthis="hbpiptProng";
60eac73d 2905 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2906 fillthis="hbpiptProngLcPt";
2907 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2908 fillthis="hbpid0Prong";
60eac73d 2909 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
029ed93a 2910 fillthis="hbpiSignalVspTPC";
60eac73d 2911 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
029ed93a 2912 fillthis="hbpiSignalVspTOF";
60eac73d 2913 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
029ed93a 2914 AliPID::EParticleType typepi;
2915 typepi=AliPID::EParticleType(2);
2916 if(hasTPC) {
60eac73d 2917 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi);
2918 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typepi);
2919 fillthis="hbpiSigmaVspTPC";
2920 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
029ed93a 2921 }
2922 if(hasTOF){
60eac73d 2923 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi);
2924 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typepi); // protection against 'old' AODs...
2925 fillthis="hbpiSigmaVspTOF";
2926 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
029ed93a 2927 }
60eac73d 2928 if (fReadMC) { // fill hbpiIDTot ---> PID contamination denominator
2929 // hIDGood, hnonIDTot ---> PID numerators
2930 fillthis="hbpiIDTot";
2931 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2932 isID++;
60eac73d 2933 if(pdgProngMC[iprong]==211) { // id pions
2934 fillthis="hbpiIDGood";
2935 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
862f4ac0 2936 isCorrect++;
029ed93a 2937 }
60eac73d 2938 else { // misidentified electrons, muons, kaons and protons
2939 fillthis="hbnopiIDpi";
2940 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
029ed93a 2941 }
2942 }
2943 break;
029ed93a 2944
60eac73d 2945 default:
2946 break;
2947 }
2948
2949 } //end loop on prongs
862f4ac0 2950
2951 fillthis="hbLcIDTot";
2952 if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2953 fillthis="hbLcIDGood";
2954 if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2955 fillthis="hbLcnoID";
2956 if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
60eac73d 2957
029ed93a 2958 //now histograms where we don't need to check identity
2959 fillthis="hbLcpt";
60eac73d 2960 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
862f4ac0 2961
029ed93a 2962 fillthis = "hbDist12toPrim";
60eac73d 2963 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
2964 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
862f4ac0 2965 fillthis = "hbDist12toPrimLcPt";
2966 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
2967 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
029ed93a 2968 fillthis = "hbSigmaVert";
60eac73d 2969 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
862f4ac0 2970 fillthis = "hbSigmaVertLcPt";
2971 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
029ed93a 2972 fillthis = "hbDCAs";
2973 Double_t dcas[3];
2974 part->GetDCAs(dcas);
862f4ac0 2975 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
2976 fillthis = "hbDCAsLcPt";
2977 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
029ed93a 2978 fillthis = "hbCosPointingAngle";
60eac73d 2979 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
862f4ac0 2980 fillthis = "hbCosPointingAngleLcPt";
2981 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
029ed93a 2982 fillthis = "hbDecayLength";
60eac73d 2983 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
862f4ac0 2984 fillthis = "hbDecayLengthLcPt";
2985 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
60eac73d 2986 Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
862f4ac0 2987 part->Getd0Prong(1)*part->Getd0Prong(1)+
2988 part->Getd0Prong(2)*part->Getd0Prong(2);
60eac73d 2989 fillthis = "hbSum2";
2990 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
862f4ac0 2991 fillthis = "hbSum2LcPt";
2992 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
60eac73d 2993 fillthis = "hbptmax";
2994 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
862f4ac0 2995 fillthis = "hbptmaxLcPt";
2996 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
029ed93a 2997
60eac73d 2998 } // end if (selection)
029ed93a 2999
60eac73d 3000 } // end mass cut
029ed93a 3001
3002 } // end background case
60eac73d 3003
029ed93a 3004 return;
60eac73d 3005
3006}
3007
3008//-------------------------
3009void AliAnalysisTaskSELambdac::FillAPrioriConcentrations(AliAODRecoDecayHF3Prong *part,
3010 AliRDHFCutsLctopKpi *cuts,
3011 AliAODEvent* aod,
3012 TClonesArray *arrMC)
3013{
3014
c1234468 3015 // FillAPrioriConcentrations
862f4ac0 3016 //cuts->SetUsePID(kFALSE); //Annalisa
60eac73d 3017 Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3018
3019 TString fillthis="";
3020
3021 if(isSelected3ProngByLc>0 && fReadMC) {
3022
3023 for (Int_t ii=0; ii<3; ii++) {
3024 AliAODTrack *prongTest=(AliAODTrack*)part->GetDaughter(ii);
3025 if (!prongTest) continue;
3026 Int_t labprongTest = prongTest->GetLabel();
3027 if(labprongTest<0) continue;
3028 AliAODMCParticle *mcprongTest = (AliAODMCParticle*)arrMC->At(labprongTest);
3029
3030 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3031 case 11:
3032 fillthis="hElIn3Prong";
3033 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3034 break;
3035 case 13:
3036 fillthis="hMuIn3Prong";
3037 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3038 break;
3039 case 211:
3040 fillthis="hPiIn3Prong";
3041 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3042 break;
3043 case 321:
3044 fillthis="hKaIn3Prong";
3045 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3046 break;
3047 case 2212:
3048 fillthis="hPrIn3Prong";
3049 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3050 break;
3051 default:
3052 break;
3053 }
3054 }
3055 }
3056
862f4ac0 3057 //cuts->SetUsePID(kTRUE); //Annalisa
60eac73d 3058
3059}
3060
3061//-----------------------
3062Bool_t AliAnalysisTaskSELambdac::Is3ProngFromPDG(AliAODRecoDecayHF3Prong *d,
3063 TClonesArray *arrayMC,
3064 Int_t pdgToBeCompared)
3065{
3066 //
3067 // Returs kTRUE if at least one of tracks in the current 3prong
3068 // cames from particle with pdgCode=pdgToBeCompared
3069 //
3070
3071 Bool_t localFlag = kFALSE;
3072
3073 for (Int_t ii=0;ii<3;ii++) {
3074 AliAODTrack *daugh = (AliAODTrack*)d->GetDaughter(ii);
3075
3076 Int_t lab = daugh->GetLabel();
3077 if(lab<0) continue;
3078 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
3079 //Int_t partPdg = part->GetPdgCode();
3080 //printf(" -------------------------------------- partLab=%d partPdg=%d ---\n", lab, partPdg);
3081
3082 Int_t motherLabel = part->GetMother();
3083 if(motherLabel<0) continue;
3084
3085 AliAODMCParticle *motherPart = 0;
3086 Int_t motherPdg = 0;
3087 while (!localFlag && motherLabel>=0) {
3088 motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
3089 motherPdg = motherPart->GetPdgCode();
3090 //printf(" ------------- motherLab=%d motherPdg=%d ---\n", motherLabel, motherPdg);
3091 if (TMath::Abs(motherPdg)==pdgToBeCompared) {
3092 //printf("-------------------------- trovato quark c/cbar\n");
3093 localFlag = kTRUE;
3094 }
3095 else {
3096 motherLabel = motherPart->GetMother();
3097 }
3098 }
3099
3100 }
3101
3102 return localFlag;
3103
3104}
3105
3106//-----------------------
5d836c02 3107Bool_t AliAnalysisTaskSELambdac::IsTrackFromPDG(const AliAODTrack *daugh,
60eac73d 3108 TClonesArray *arrayMC,
3109 Int_t pdgToBeCompared)
3110{
3111 //
3112 // Returs kTRUE if at the tracks comes
3113 // from particle with pdgCode=pdgToBeCompared
3114 //
3115
3116 Bool_t localFlag = kFALSE;
3117
3118 Int_t lab = daugh->GetLabel();
3119 if(lab<0) return localFlag;
3120 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
3121 //Int_t partPdg = part->GetPdgCode();
3122 //printf(" -------------------------------------- partLab=%d partPdg=%d ---\n", lab, partPdg);
3123
3124 Int_t motherLabel = part->GetMother();
3125 if(motherLabel<0) return localFlag;
3126
3127 AliAODMCParticle *motherPart = 0;
3128 Int_t motherPdg = 0;
3129 while (!localFlag && motherLabel>=0) {
3130 motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
3131 motherPdg = motherPart->GetPdgCode();
3132 //printf(" ------------- motherLab=%d motherPdg=%d ---\n", motherLabel, motherPdg);
3133 if (TMath::Abs(motherPdg)==pdgToBeCompared) {
3134 //printf("-------------------------- trovato quark c/cbar\n");
3135 localFlag = kTRUE;
3136 }
3137 else {
3138 motherLabel = motherPart->GetMother();
3139 }
3140 }
3141
3142 return localFlag;
3143
7eb0cc73 3144}
7ad4b782 3145
60eac73d 3146
3147
3148
3149//-----------------------
3150Bool_t AliAnalysisTaskSELambdac::IsThereAGeneratedLc(TClonesArray *arrayMC)
3151{
3152 //
3153 // Returs kTRUE if there is a lepton related to the LambdaC
3154 //
3155
3156 Bool_t localFlag = kFALSE;
3157
3158 AliAODMCParticle *searchLc;
3159
3160 for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++) {
3161 searchLc = (AliAODMCParticle*)arrayMC->At(iii);
3162 Int_t searchLcpdg = searchLc->GetPdgCode();
3163 if (TMath::Abs(searchLcpdg) == 4122){
3164 localFlag = kTRUE;
3165 break;
3166 }
3167 }
3168
3169
3170 return localFlag;
3171
3172}
3173//_________________________________
5d836c02 3174Int_t AliAnalysisTaskSELambdac::NumberPrimaries(const AliAODEvent *aods)
60eac73d 3175{
c1234468 3176///////////////estimate primaries
60eac73d 3177 Int_t counter=0;
3178
3179
3180 TClonesArray *aodtracks=(TClonesArray *)aods->GetTracks();
3181
3182 // for(Int_t ji=0;ji<aods->GetNTracks();ji++)
3183 for(Int_t ji=0;ji<aodtracks->GetEntriesFast();ji++)
3184 {
3185 AliAODTrack*aodTrack=(AliAODTrack*)aodtracks->UncheckedAt(ji);
3186 if(aodTrack->IsPrimaryCandidate()) counter++;
3187 }
3188 return counter;
3189
3190}
3191//_________________________________
3192
3193void AliAnalysisTaskSELambdac::MultiplicityStudies(AliAODRecoDecayHF3Prong *part,
3194 AliRDHFCutsLctopKpi *cuts,
3195 AliAODEvent* aod,
3196 TClonesArray *arrMC,
3197 Bool_t &flag1,Bool_t &flag2,Bool_t &flag3,
3198 Bool_t &flag4, Bool_t &flag5, Bool_t &flag6)
3199{
c1234468 3200
3201
3202// Multiplicity studies
60eac73d 3203
3204 TString fillthis="";
3205
3206 Int_t pdgDgLctopKpi[3]={2212,321,211};
3207 Int_t lab=-9999;
3208 if(fReadMC)
3209 lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
3210
862f4ac0 3211 //cuts->SetUsePID(kFALSE); //Annalisa
60eac73d 3212 Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3213
3214 if(isSelected3ProngByLc>0 && fReadMC) {
3215 flag1 = kTRUE;
3216 if (lab>0) {
3217 flag3 = kTRUE;
3218 }
3219
3220 Bool_t is3ProngFromJPsi = Is3ProngFromPDG(part,arrMC,443);
3221 if (is3ProngFromJPsi) flag6=is3ProngFromJPsi;
3222
3223 Bool_t is3ProngFromC = Is3ProngFromPDG(part,arrMC,4);
3224 if (is3ProngFromC) flag4=is3ProngFromC;
3225
3226 Bool_t is3ProngFromB = Is3ProngFromPDG(part,arrMC,5);
3227 if (is3ProngFromB) flag5=is3ProngFromB;
3228
3229 for (Int_t ii=0; ii<3; ii++) {
3230 AliAODTrack *prongTest=(AliAODTrack*)part->GetDaughter(ii);
3231 if (!prongTest) continue;
3232 Int_t labprongTest = prongTest->GetLabel();
3233 if(labprongTest<0) continue;
3234 AliAODMCParticle *mcprongTest = (AliAODMCParticle*)arrMC->At(labprongTest);
3235
3236 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3237 case 11:
3238 fillthis="hElIn3Prong";
3239 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3240 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3241 fillthis="hElIn3Prong6";
3242 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3243 }
3244 break;
3245 case 13:
3246 fillthis="hMuIn3Prong";
3247 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3248 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3249 fillthis="hMuIn3Prong6";
3250 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3251 }
3252 break;
3253 case 211:
3254 fillthis="hPiIn3Prong";
3255 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3256 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3257 fillthis="hPiIn3Prong6";
3258 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3259 }
3260 break;
3261 case 321:
3262 fillthis="hKaIn3Prong";
3263 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3264 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3265 fillthis="hKaIn3Prong6";
3266 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3267 }
3268 break;
3269 case 2212:
3270 fillthis="hPrIn3Prong";
3271 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3272 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3273 fillthis="hPrIn3Prong6";
3274 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3275 }
3276 break;
3277 default:
3278 break;
3279 }
3280
3281 if (lab>0) {
3282 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3283 case 11:
3284 fillthis="hElIn3Prong1";
3285 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3286 break;
3287 case 13:
3288 fillthis="hMuIn3Prong1";
3289 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3290 break;
3291 case 211:
3292 fillthis="hPiIn3Prong1";
3293 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3294 break;
3295 case 321:
3296 fillthis="hKaIn3Prong1";
3297 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3298 break;
3299 case 2212:
3300 fillthis="hPrIn3Prong1";
3301 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3302 break;
3303 default:
3304 break;
3305 }
3306 } else {
3307 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3308 case 11:
3309 fillthis="hElIn3Prong2";
3310 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3311 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3312 fillthis="hElIn3Prong3";
3313 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3314 }
3315 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3316 fillthis="hElIn3Prong4";
3317 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3318 }
3319 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3320 fillthis="hElIn3Prong5";
3321 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3322 }
3323 break;
3324 case 13:
3325 fillthis="hMuIn3Prong2";
3326 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3327 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3328 fillthis="hMuIn3Prong3";
3329 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3330 }
3331 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3332 fillthis="hMuIn3Prong4";
3333 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3334 }
3335 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3336 fillthis="hMuIn3Prong5";
3337 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3338 }
3339 break;
3340 case 211:
3341 fillthis="hPiIn3Prong2";
3342 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3343 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3344 fillthis="hPiIn3Prong3";
3345 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3346 }
3347 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3348 fillthis="hPiIn3Prong4";
3349 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3350 }
3351 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3352 fillthis="hPiIn3Prong5";
3353 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3354 }
3355 break;
3356 case 321:
3357 fillthis="hKaIn3Prong2";
3358 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3359 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3360 fillthis="hKaIn3Prong3";
3361 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3362 }
3363 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3364 fillthis="hKaIn3Prong4";
3365 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3366 }
3367 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3368 fillthis="hKaIn3Prong5";
3369 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3370 }
3371 break;
3372 case 2212:
3373 fillthis="hPrIn3Prong2";
3374 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3375 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3376 fillthis="hPrIn3Prong3";
3377 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3378 }
3379 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3380 fillthis="hPrIn3Prong4";
3381 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3382 }
3383 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3384 fillthis="hPrIn3Prong5";
3385 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3386 }
3387 break;
3388 default:
3389 break;
3390 }
3391 }
3392 /*
3393 if (is3ProngFromC) {
3394 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3395 case 11:
3396 fillthis="hElIn3Prong3";
3397 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3398 break;
3399 case 13:
3400 fillthis="hMuIn3Prong3";
3401 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3402 break;
3403 case 211:
3404 fillthis="hPiIn3Prong3";
3405 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3406 break;
3407 case 321:
3408 fillthis="hKaIn3Prong3";
3409 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3410 break;
3411 case 2212:
3412 fillthis="hPrIn3Prong3";
3413 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3414 break;
3415 default:
3416 break;
3417 }
3418 } else { // !is3ProngFromC
3419 if (is3ProngFromB) {
3420 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3421 case 11:
3422 fillthis="hElIn3Prong4";
3423 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3424 break;
3425 case 13:
3426 fillthis="hMuIn3Prong4";
3427 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3428 break;
3429 case 211:
3430 fillthis="hPiIn3Prong4";
3431 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3432 break;
3433 case 321:
3434 fillthis="hKaIn3Prong4";
3435 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3436 break;
3437 case 2212:
3438 fillthis="hPrIn3Prong4";
3439 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3440 break;
3441 default:
3442 break;
3443 }
3444 } else {//!is3ProngFromB
3445 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3446 case 11:
3447 fillthis="hElIn3Prong5";
3448 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3449 break;
3450 case 13:
3451 fillthis="hMuIn3Prong5";
3452 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3453 break;
3454 case 211:
3455 fillthis="hPiIn3Prong5";
3456 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3457 break;
3458 case 321:
3459 fillthis="hKaIn3Prong5";
3460 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3461 break;
3462 case 2212:
3463 fillthis="hPrIn3Prong5";
3464 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3465 break;
3466 default:
3467 break;
3468 }
3469 }
3470 }
3471 */
3472 }
3473 }
3474
3475 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3476 Double_t invmasscut=0.05;
3477
3478 Double_t minvLcpKpi = part->InvMassLcpKpi();
3479 Double_t minvLcpiKp = part->InvMassLcpiKp();
3480
862f4ac0 3481 //cuts->SetUsePID(kTRUE); //Annalisa
60eac73d 3482 Int_t isSelected3ProngByLcPID=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3483 if (isSelected3ProngByLcPID>0) {
3484 if (TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut) {
3485 flag2 = kTRUE;
3486 }
3487 }
3488
3489
3490}