1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /* $Id: AliAnalysisTaskSELambdac.cxx 63644 2013-07-23 09:04:11Z zconesa $ */
18 /////////////////////////////////////////////////////////////
20 // AliAnalysisTaskSE for the extraction of signal(e.g Lambdac) of heavy flavor
21 // decay candidates with the MC truth.
22 // Authors: r.romita@gsi.de
23 /////////////////////////////////////////////////////////////
25 #include <TClonesArray.h>
32 #include <TDatabasePDG.h>
34 #include <AliAnalysisDataSlot.h>
35 #include <AliAnalysisDataContainer.h>
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"
51 #include "AliKFVertex.h"
52 #include "AliESDVertex.h"
53 //#include "AliAODpidUtil.h"
54 #include "AliAODPid.h"
55 #include "AliInputEventHandler.h"
57 #include "AliNormalizationCounter.h"
58 #include "AliVertexingHFUtils.h"
59 ClassImp(AliAnalysisTaskSELambdac)
62 //________________________________________________________________________
63 AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac():
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),
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),
97 fhProtonPtProngLcPt(0),
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),
110 fhBDist12PrimLcPt(0),
115 fhCosPointingAngleLcPt(0),
116 fhBCosPointingAngleLcPt(0),
117 fhDecayLengthLcPt(0),
118 fhBDecayLengthLcPt(0),
125 fLowmasslimit(2.086),
128 fRDCutsProduction(0),
138 fFillVarHists(kFALSE),
139 fMultiplicityHists(kFALSE),
140 fPriorsHists(kFALSE),
151 // Default constructor
152 Float_t ptlims[7]={0.,2.,4.,6.,8.,12.,24.};
153 SetPtBinLimit(7,ptlims);
154 for(Int_t icut=0; icut<2; icut++) fCutsKF[icut]=0.;
155 for(Int_t j=0; j<3*kMaxPtBins; j++){
159 fMassHistLpiTC[j]=0x0;
161 fMassHistKpTC[j]=0x0;
163 fMassHistDkTC[j]=0x0;
165 fMassHist3PrTC[j]=0x0;
169 //________________________________________________________________________
170 AliAnalysisTaskSELambdac::AliAnalysisTaskSELambdac(const char *name,Bool_t fillNtuple,AliRDHFCutsLctopKpi *lccutsana,AliRDHFCutsLctopKpi *lccutsprod):
171 AliAnalysisTaskSE(name),
176 fhMassPtGreater3TC(0),
177 fhMassPtGreater3Kp(0),
178 fhMassPtGreater3KpTC(0),
179 fhMassPtGreater3Lpi(0),
180 fhMassPtGreater3LpiTC(0),
181 fhMassPtGreater3Dk(0),
182 fhMassPtGreater3DkTC(0),
183 fhMassPtGreater33Pr(0),
184 fhMassPtGreater33PrTC(0),
186 fhMassPtGreater2TC(0),
187 fhMassPtGreater2Kp(0),
188 fhMassPtGreater2KpTC(0),
189 fhMassPtGreater2Lpi(0),
190 fhMassPtGreater2LpiTC(0),
191 fhMassPtGreater2Dk(0),
192 fhMassPtGreater2DkTC(0),
193 fhMassPtGreater23Pr(0),
194 fhMassPtGreater23PrTC(0),
204 fhProtonPtProngLcPt(0),
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),
217 fhBDist12PrimLcPt(0),
222 fhCosPointingAngleLcPt(0),
223 fhBCosPointingAngleLcPt(0),
224 fhDecayLengthLcPt(0),
225 fhBDecayLengthLcPt(0),
232 fLowmasslimit(2.086),
234 fRDCutsAnalysis(lccutsana),
235 fRDCutsProduction(lccutsprod),
237 fFillNtuple(fillNtuple),
245 fFillVarHists(kFALSE),
246 fMultiplicityHists(kFALSE),
247 fPriorsHists(kFALSE),
258 SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,
259 fRDCutsAnalysis->GetPtBinLimits());
260 for(Int_t icut=0; icut<2; icut++) fCutsKF[icut]=0.;
261 for(Int_t j=0; j<3*kMaxPtBins; j++){
265 fMassHistLpiTC[j]=0x0;
267 fMassHistKpTC[j]=0x0;
269 fMassHistDkTC[j]=0x0;
271 fMassHist3PrTC[j]=0x0;
273 // Default constructor
274 // Output slot #1 writes into a TList container
275 DefineOutput(1,TList::Class()); //My private output
276 DefineOutput(2,TList::Class());
277 DefineOutput(3,TList::Class());
278 DefineOutput(4,TH1F::Class());
279 DefineOutput(5,TList::Class());
280 DefineOutput(6,TList::Class());
281 DefineOutput(7,AliNormalizationCounter::Class());
283 // Output slot #2 writes into a TNtuple container
284 DefineOutput(8,TNtuple::Class()); //My private output
288 //________________________________________________________________________
289 AliAnalysisTaskSELambdac::~AliAnalysisTaskSELambdac()
305 delete fMultiplicity;
315 delete fRDCutsAnalysis;
318 if(fRDCutsProduction){
319 delete fRDCutsProduction;
320 fRDCutsProduction = 0;
346 //_________________________________________________________________
347 void AliAnalysisTaskSELambdac::SetMassLimits(Float_t range){
348 fUpmasslimit = 2.286+range;
349 fLowmasslimit = 2.286-range;
351 //_________________________________________________________________
352 void AliAnalysisTaskSELambdac::SetMassLimits(Float_t lowlimit, Float_t uplimit){
355 fUpmasslimit = lowlimit;
356 fLowmasslimit = uplimit;
361 //________________________________________________________________________
362 void AliAnalysisTaskSELambdac::SetPtBinLimit(Int_t n, Float_t* lim){
363 // define pt bins for analysis
365 printf("Max. number of Pt bins = %d\n",kMaxPtBins);
367 fArrayBinLimits[0]=0.;
368 fArrayBinLimits[1]=2.;
369 fArrayBinLimits[2]=3.;
370 fArrayBinLimits[3]=4.;
371 for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
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];
380 fArrayBinLimits[i]=fArrayBinLimits[i-1];
382 for(Int_t i=fNPtBins; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
385 printf("Number of Pt bins = %d\n",fNPtBins);
386 for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);
389 //_________________________________________________________________
390 Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin) const{
391 if(ibin>fNPtBins)return -1;
392 return fArrayBinLimits[ibin];
395 //_________________________________________________________________
396 void AliAnalysisTaskSELambdac::Init()
400 if (fDebug > 1) printf("AnalysisTaskSELambdac::Init() \n");
402 fListCuts=new TList();
403 fListCuts->SetOwner();
405 fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsAnalysis));
406 fListCuts->Add(new AliRDHFCutsLctopKpi(*fRDCutsProduction));
407 PostData(2,fListCuts);
411 //________________________________________________________________________
412 void AliAnalysisTaskSELambdac::UserCreateOutputObjects()
414 // Create the output container
416 if (fDebug > 1) printf("AnalysisTaskSELambdac::UserCreateOutputObjects() \n");
418 // Several histograms are more conveniently managed in a TList
419 fOutput = new TList();
421 fOutput->SetName("OutputHistos");
426 for(Int_t i=0;i<fNPtBins;i++){
428 index=GetHistoIndex(i);
429 // indexLS=GetLSHistoIndex(i);
431 hisname.Form("hMassPt%d",i);
432 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
433 fMassHist[index]->Sumw2();
434 hisname.Form("hMassPt%dTC",i);
435 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
436 fMassHistTC[index]->Sumw2();
438 hisname.Form("hMassPtLpi%d",i);
439 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
440 fMassHistLpi[index]->Sumw2();
441 hisname.Form("hMassPtLpi%dTC",i);
442 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
443 fMassHistLpiTC[index]->Sumw2();
445 hisname.Form("hMassPtKp%d",i);
446 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
447 fMassHistKp[index]->Sumw2();
448 hisname.Form("hMassPtKp%dTC",i);
449 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
450 fMassHistKpTC[index]->Sumw2();
451 hisname.Form("hMassPtDk%d",i);
452 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
453 fMassHistDk[index]->Sumw2();
454 hisname.Form("hMassPtDk%dTC",i);
455 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
456 fMassHistDkTC[index]->Sumw2();
458 hisname.Form("hMassPt3Pr%d",i);
459 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
460 fMassHist3Pr[index]->Sumw2();
461 hisname.Form("hMassPt3Pr%dTC",i);
462 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
463 fMassHist3PrTC[index]->Sumw2();
465 index=GetSignalHistoIndex(i);
466 hisname.Form("hSigPt%d",i);
467 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
468 fMassHist[index]->Sumw2();
469 hisname.Form("hSigPt%dTC",i);
470 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
471 fMassHistTC[index]->Sumw2();
472 hisname.Form("hSigPtLpi%d",i);
473 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
474 fMassHistLpi[index]->Sumw2();
475 hisname.Form("hSigPtLpi%dTC",i);
476 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
477 fMassHistLpiTC[index]->Sumw2();
479 hisname.Form("hSigPtKp%d",i);
480 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
481 fMassHistKp[index]->Sumw2();
482 hisname.Form("hSigPtKp%dTC",i);
483 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
484 fMassHistKpTC[index]->Sumw2();
486 hisname.Form("hSigPtDk%d",i);
487 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
488 fMassHistDk[index]->Sumw2();
489 hisname.Form("hSigPtDk%dTC",i);
490 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
491 fMassHistDkTC[index]->Sumw2();
493 hisname.Form("hSigPt3Pr%d",i);
494 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
495 fMassHist3Pr[index]->Sumw2();
496 hisname.Form("hSigPt3Pr%dTC",i);
497 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
498 fMassHist3PrTC[index]->Sumw2();
500 index=GetLbHistoIndex(i);
501 hisname.Form("hSigLbPt%d",i);
502 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
503 fMassHist[index]->Sumw2();
504 hisname.Form("hSigLbPt%dTC",i);
505 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
506 fMassHistTC[index]->Sumw2();
508 index=GetcOnlyHistoIndex(i);
509 hisname.Form("hSigcOnlyPt%d",i);
510 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
511 fMassHist[index]->Sumw2();
512 hisname.Form("hSigcOnlyPt%dTC",i);
513 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
514 fMassHistTC[index]->Sumw2();
516 index=GetNoQuarkHistoIndex(i);
517 hisname.Form("hSigNoQuarkPt%d",i);
518 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
519 fMassHist[index]->Sumw2();
520 hisname.Form("hSigNoQuarkPt%dTC",i);
521 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
522 fMassHistTC[index]->Sumw2();
524 index=GetBackgroundHistoIndex(i);
525 hisname.Form("hBkgPt%d",i);
526 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
527 fMassHist[index]->Sumw2();
528 hisname.Form("hBkgPt%dTC",i);
529 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
530 fMassHistTC[index]->Sumw2();
531 hisname.Form("hBkgPtLpi%d",i);
532 fMassHistLpi[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
533 fMassHistLpi[index]->Sumw2();
534 hisname.Form("hBkgPtLpi%dTC",i);
535 fMassHistLpiTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
536 fMassHistLpiTC[index]->Sumw2();
538 hisname.Form("hBkgPtKp%d",i);
539 fMassHistKp[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
540 fMassHistKp[index]->Sumw2();
541 hisname.Form("hBkgPtKp%dTC",i);
542 fMassHistKpTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
543 fMassHistKpTC[index]->Sumw2();
545 hisname.Form("hBkgPtDk%d",i);
546 fMassHistDk[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
547 fMassHistDk[index]->Sumw2();
548 hisname.Form("hBkgPtDk%dTC",i);
549 fMassHistDkTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
550 fMassHistDkTC[index]->Sumw2();
552 hisname.Form("hBkgPt3Pr%d",i);
553 fMassHist3Pr[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
554 fMassHist3Pr[index]->Sumw2();
555 hisname.Form("hBkgPt3Pr%dTC",i);
556 fMassHist3PrTC[index]=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
557 fMassHist3PrTC[index]->Sumw2();
560 for(Int_t ii=0; ii<6*fNPtBins; ii++){
561 fOutput->Add(fMassHist[ii]);
562 fOutput->Add(fMassHistTC[ii]);
564 for(Int_t i=0; i<3*fNPtBins; i++){
565 fOutput->Add(fMassHistLpi[i]);
566 fOutput->Add(fMassHistLpiTC[i]);
567 fOutput->Add(fMassHistKp[i]);
568 fOutput->Add(fMassHistKpTC[i]);
569 fOutput->Add(fMassHistDk[i]);
570 fOutput->Add(fMassHistDkTC[i]);
571 fOutput->Add(fMassHist3Pr[i]);
572 fOutput->Add(fMassHist3PrTC[i]);
574 fhEta3Prong = new TH2F("hEta3Prong","hEta3Prong;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
575 fhEta3ProngAcc = new TH2F("hEta3ProngAcc","hEta3ProngAcc;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
576 fhEta3ProngProd = new TH2F("hEta3ProngProd","hEta3ProngProd;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
577 fhEta3ProngAn = new TH2F("hEta3ProngAn","hEta3ProngAn;3-Prong p_{T} GeV/c;3-Prong #eta",75,0.,15.,50,-2.0,2.0);
578 fhRap3Prong = new TH2F("hRap3Prong","hRap3Prong;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
579 fhRap3ProngAcc = new TH2F("hRap3ProngAcc","hRap3ProngAcc;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
580 fhRap3ProngProd = new TH2F("hRap3ProngProd","hRap3ProngProd;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
581 fhRap3ProngAn = new TH2F("hRap3ProngAn","hRap3ProngAn;3-Prong p_{T} GeV/c;3-Prong y",75,0.,15.,50,-2.0,2.0);
583 fhSelectBit = new TH1F("hSelectBit","hSelectBit",5,-0.5,5.5);
584 fhSelectBit->GetXaxis()->SetBinLabel(2,"All");
585 fhSelectBit->GetXaxis()->SetBinLabel(3,"SelectionMap");
586 fhSelectBit->GetXaxis()->SetBinLabel(4,"!LcCut");
587 fhSelectBit->GetXaxis()->SetBinLabel(5,"!LcPID");
589 fOutput->Add(fhEta3Prong);
590 fOutput->Add(fhEta3ProngAcc);
591 fOutput->Add(fhEta3ProngProd);
592 fOutput->Add(fhEta3ProngAn);
593 fOutput->Add(fhRap3Prong);
594 fOutput->Add(fhRap3ProngAcc);
595 fOutput->Add(fhRap3ProngProd);
596 fOutput->Add(fhRap3ProngAn);
597 fOutput->Add(fhSelectBit);
599 fHistNEvents = new TH1F("fHistNEvents", "Number of processed events; ; Events",3,-1.5,1.5);
600 fHistNEvents->Sumw2();
601 fHistNEvents->SetMinimum(0);
602 fOutput->Add(fHistNEvents);
604 fhChi2 = new TH1F("fhChi2", "Chi2",100,0.,10.);
606 fOutput->Add(fhChi2);
608 fhMassPtGreater3=new TH1F("fhMassPtGreater3","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
609 fhMassPtGreater3->Sumw2();
610 fOutput->Add(fhMassPtGreater3);
611 fhMassPtGreater3TC=new TH1F("fhMassPtGreater3TC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
612 fhMassPtGreater3TC->Sumw2();
613 fOutput->Add(fhMassPtGreater3TC);
614 fhMassPtGreater3Kp=new TH1F("fhMassPtGreater3Kp","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
615 fhMassPtGreater3Kp->Sumw2();
616 fOutput->Add(fhMassPtGreater3Kp);
617 fhMassPtGreater3KpTC=new TH1F("fhMassPtGreater3KpTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
618 fhMassPtGreater3KpTC->Sumw2();
619 fOutput->Add(fhMassPtGreater3KpTC);
620 fhMassPtGreater3Lpi=new TH1F("fhMassPtGreater3Lpi","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
621 fhMassPtGreater3Lpi->Sumw2();
622 fOutput->Add(fhMassPtGreater3Lpi);
623 fhMassPtGreater3LpiTC=new TH1F("fhMassPtGreater3LpiTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
624 fhMassPtGreater3LpiTC->Sumw2();
625 fOutput->Add(fhMassPtGreater3LpiTC);
626 fhMassPtGreater3Dk=new TH1F("fhMassPtGreater3Dk","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
627 fhMassPtGreater3Dk->Sumw2();
628 fOutput->Add(fhMassPtGreater3Dk);
629 fhMassPtGreater3DkTC=new TH1F("fhMassPtGreater3DkTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
630 fhMassPtGreater3DkTC->Sumw2();
631 fOutput->Add(fhMassPtGreater3DkTC);
633 fhMassPtGreater33Pr=new TH1F("fhMassPtGreater33Pr","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
634 fhMassPtGreater33Pr->Sumw2();
635 fOutput->Add(fhMassPtGreater33Pr);
636 fhMassPtGreater33PrTC=new TH1F("fhMassPtGreater33PrTC","Pt > 3 GeV/c",200,fLowmasslimit,fUpmasslimit);
637 fhMassPtGreater33PrTC->Sumw2();
638 fOutput->Add(fhMassPtGreater33PrTC);
641 fhMassPtGreater2=new TH1F("fhMassPtGreater2","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
642 fhMassPtGreater2->Sumw2();
643 fOutput->Add(fhMassPtGreater2);
644 fhMassPtGreater2TC=new TH1F("fhMassPtGreater2TC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
645 fhMassPtGreater2TC->Sumw2();
646 fOutput->Add(fhMassPtGreater2TC);
647 fhMassPtGreater2Kp=new TH1F("fhMassPtGreater2Kp","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
648 fhMassPtGreater2Kp->Sumw2();
649 fOutput->Add(fhMassPtGreater2Kp);
650 fhMassPtGreater2KpTC=new TH1F("fhMassPtGreater2KpTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
651 fhMassPtGreater2KpTC->Sumw2();
652 fOutput->Add(fhMassPtGreater2KpTC);
653 fhMassPtGreater2Lpi=new TH1F("fhMassPtGreater2Lpi","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
654 fhMassPtGreater2Lpi->Sumw2();
655 fOutput->Add(fhMassPtGreater2Lpi);
656 fhMassPtGreater2LpiTC=new TH1F("fhMassPtGreater2LpiTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
657 fhMassPtGreater2LpiTC->Sumw2();
658 fOutput->Add(fhMassPtGreater2LpiTC);
659 fhMassPtGreater2Dk=new TH1F("fhMassPtGreater2Dk","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
660 fhMassPtGreater2Dk->Sumw2();
661 fOutput->Add(fhMassPtGreater2Dk);
662 fhMassPtGreater2DkTC=new TH1F("fhMassPtGreater2DkTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
663 fhMassPtGreater2DkTC->Sumw2();
664 fOutput->Add(fhMassPtGreater2DkTC);
665 fhMassPtGreater23Pr=new TH1F("fhMassPtGreater23Pr","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
666 fhMassPtGreater23Pr->Sumw2();
667 fOutput->Add(fhMassPtGreater23Pr);
668 fhMassPtGreater23PrTC=new TH1F("fhMassPtGreater23PrTC","Pt > 2 GeV/c",200,fLowmasslimit,fUpmasslimit);
669 fhMassPtGreater23PrTC->Sumw2();
670 fOutput->Add(fhMassPtGreater23PrTC);
672 fOutputMC = new TList();
673 fOutputMC->SetOwner();
674 fOutputMC->SetName("QAMCHistos");
676 // const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
678 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);
680 //ROS: qui il bin assignment e' modellato su D0 ma sicuramente iv arie
681 fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal");
682 fNentries->GetXaxis()->SetBinLabel(2,"nCandSel(Cuts)");
683 fNentries->GetXaxis()->SetBinLabel(3,"nLcSelected");
684 fNentries->GetXaxis()->SetBinLabel(4,"nEventsGoodVtxS");
685 fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1");
686 fNentries->GetXaxis()->SetBinLabel(6,"no daughter");
687 fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)");
688 fNentries->GetXaxis()->SetBinLabel(8,"PID=0");
689 fNentries->GetXaxis()->SetBinLabel(9,"PID=1");
690 fNentries->GetXaxis()->SetBinLabel(10,"PID=2");
691 fNentries->GetXaxis()->SetBinLabel(11,"PID=3");
692 fNentries->GetXaxis()->SetNdivisions(1,kFALSE);
694 hisname.Form("hMass");
695 TH1F *hMassInv=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
696 fOutputMC->Add(hMassInv);
697 hisname.Form("hbMass");
698 TH1F *hBMassInv=new TH1F(hisname.Data(),hisname.Data(),200,fLowmasslimit,fUpmasslimit);
699 fOutputMC->Add(hBMassInv);
702 hisname.Form("hpTOFSignal");
703 TH1F *hProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
704 fOutputMC->Add(hProtonTOFSignal);
705 hisname.Form("hbpTOFSignal");
706 TH1F *hBProtonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
707 fOutputMC->Add(hBProtonTOFSignal);
709 hisname.Form("hpTPCSignal");
710 TH1F *hProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
711 fOutputMC->Add(hProtonTPCSignal);
712 hisname.Form("hbpTPCSignal");
713 TH1F *hBProtonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
714 fOutputMC->Add(hBProtonTPCSignal);
716 hisname.Form("hpptProng");
717 TH1F *hProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
718 fOutputMC->Add(hProtonPtProng);
719 hisname.Form("hbpptProng");
720 TH1F *hBProtonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
721 fOutputMC->Add(hBProtonPtProng);
723 hisname.Form("hpRealTot");
724 TH1F *hProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
725 fOutputMC->Add(hProtonRealTot);
726 hisname.Form("hbpRealTot");
727 TH1F *hBProtonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
728 fOutputMC->Add(hBProtonRealTot);
729 hisname.Form("hpIDTot");
730 TH1F *hProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
731 fOutputMC->Add(hProtonIDTot);
732 hisname.Form("hpIDGood");
733 TH1F *hProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
734 fOutputMC->Add(hProtonIDGood);
735 hisname.Form("hbpIDGood");
736 TH1F *hBProtonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
737 fOutputMC->Add(hBProtonIDGood);
738 hisname.Form("hbpIDTot");
739 TH1F *hBProtonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
740 fOutputMC->Add(hBProtonIDTot);
741 hisname.Form("hnopIDp");
742 TH1F *hnoProtonIDpTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
743 fOutputMC->Add(hnoProtonIDpTot);
744 hisname.Form("hbnopIDp");
745 TH1F *hBnoProtonIDpTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
746 fOutputMC->Add(hBnoProtonIDpTot);
748 hisname.Form("hpd0Prong");
749 TH1F *hProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
750 fOutputMC->Add(hProtond0Prong);
751 hisname.Form("hbpd0Prong");
752 TH1F *hBProtond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
753 fOutputMC->Add(hBProtond0Prong);
754 hisname.Form("hbpSignalVspTOF");
755 TH2F *hBpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
756 fOutputMC->Add(hBpSignalVspTOF);
757 hisname.Form("hbpSignalVspTPC");
758 TH2F *hBpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
759 fOutputMC->Add(hBpSignalVspTPC);
760 hisname.Form("hpSignalVspTOF");
761 TH2F *hpSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
762 fOutputMC->Add(hpSignalVspTOF);
763 hisname.Form("hpSignalVspTPC");
764 TH2F *hpSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
765 fOutputMC->Add(hpSignalVspTPC);
767 hisname.Form("hpSigmaVspTOF");
768 TH2F *hpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
769 fOutputMC->Add(hpSigmaVspTOF);
770 hisname.Form("hpSigmaVspTPC");
771 TH2F *hpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
772 fOutputMC->Add(hpSigmaVspTPC);
773 hisname.Form("hbpSigmaVspTOF");
774 TH2F *hBpSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
775 fOutputMC->Add(hBpSigmaVspTOF);
776 hisname.Form("hbpSigmaVspTPC");
777 TH2F *hBpSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
778 fOutputMC->Add(hBpSigmaVspTPC);
782 hisname.Form("hKTOFSignal");
783 TH1F *hKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
784 fOutputMC->Add(hKaonTOFSignal);
785 hisname.Form("hbKTOFSignal");
786 TH1F *hBKaonTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
787 fOutputMC->Add(hBKaonTOFSignal);
788 hisname.Form("hKTPCSignal");
789 TH1F *hKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
790 fOutputMC->Add(hKaonTPCSignal);
791 hisname.Form("hbKTPCSignal");
792 TH1F *hBKaonTPCSignal=new TH1F(hisname.Data(),hisname.Data(),150,0.,150.0);
793 fOutputMC->Add(hBKaonTPCSignal);
795 hisname.Form("hKptProng");
796 TH1F *hKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
797 fOutputMC->Add(hKaonPtProng);
798 hisname.Form("hbKptProng");
799 TH1F *hBKaonPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
800 fOutputMC->Add(hBKaonPtProng);
801 hisname.Form("hKRealTot");
802 TH1F *hKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
803 fOutputMC->Add(hKaonRealTot);
804 hisname.Form("hbKRealTot");
805 TH1F *hBKaonRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
806 fOutputMC->Add(hBKaonRealTot);
807 hisname.Form("hKIDGood");
808 TH1F *hKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
809 fOutputMC->Add(hKaonIDGood);
810 hisname.Form("hKIDTot");
811 TH1F *hKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
812 fOutputMC->Add(hKaonIDTot);
813 hisname.Form("hbKIDGood");
814 TH1F *hBKaonIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
815 fOutputMC->Add(hBKaonIDGood);
816 hisname.Form("hbKIDTot");
817 TH1F *hBKaonIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
818 fOutputMC->Add(hBKaonIDTot);
819 hisname.Form("hnokIDk");
820 TH1F *hnoKaonIDkTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
821 fOutputMC->Add(hnoKaonIDkTot);
822 hisname.Form("hbnokIDk");
823 TH1F *hBnoKaonIDkTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
824 fOutputMC->Add(hBnoKaonIDkTot);
827 hisname.Form("hKd0Prong");
828 TH1F *hKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
829 fOutputMC->Add(hKaond0Prong);
830 hisname.Form("hbKd0Prong");
831 TH1F *hBKaond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
832 fOutputMC->Add(hBKaond0Prong);
833 hisname.Form("hbKSignalVspTOF");
834 TH2F *hbKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
835 fOutputMC->Add(hbKSignalVspTOF);
836 hisname.Form("hbKSignalVspTPC");
837 TH2F *hbKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
838 fOutputMC->Add(hbKSignalVspTPC);
839 hisname.Form("hKSignalVspTOF");
840 TH2F *hKSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
841 fOutputMC->Add(hKSignalVspTOF);
842 hisname.Form("hKSignalVspTPC");
843 TH2F *hKSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
844 fOutputMC->Add(hKSignalVspTPC);
845 hisname.Form("hKSigmaVspTOF");
846 TH2F *hKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
847 fOutputMC->Add(hKSigmaVspTOF);
848 hisname.Form("hKSigmaVspTPC");
849 TH2F *hKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
850 fOutputMC->Add(hKSigmaVspTPC);
851 hisname.Form("hbKSigmaVspTOF");
852 TH2F *hBKSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
853 fOutputMC->Add(hBKSigmaVspTOF);
854 hisname.Form("hbKSigmaVspTPC");
855 TH2F *hBKSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
856 fOutputMC->Add(hBKSigmaVspTPC);
860 hisname.Form("hpiTOFSignal");
861 TH1F *hPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
862 fOutputMC->Add(hPionTOFSignal);
863 hisname.Form("hbpiTOFSignal");
864 TH1F *hBPionTOFSignal=new TH1F(hisname.Data(),hisname.Data(),100,12000.,50000.0);
865 fOutputMC->Add(hBPionTOFSignal);
866 hisname.Form("hpiTPCSignal");
867 TH1F *hPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0);
868 fOutputMC->Add(hPionTPCSignal);
869 hisname.Form("hbpiTPCSignal");
870 TH1F *hBPionTPCSignal=new TH1F(hisname.Data(),hisname.Data(),100,30.,100.0);
871 fOutputMC->Add(hBPionTPCSignal);
873 hisname.Form("hpiptProng");
874 TH1F *hPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
875 fOutputMC->Add(hPionPtProng);
876 hisname.Form("hbpiptProng");
877 TH1F *hBPionPtProng=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
878 fOutputMC->Add(hBPionPtProng);
880 hisname.Form("hpiRealTot");
881 TH1F *hPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
882 fOutputMC->Add(hPionRealTot);
883 hisname.Form("hbpiRealTot");
884 TH1F *hBPionRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
885 fOutputMC->Add(hBPionRealTot);
886 hisname.Form("hpiIDGood");
887 TH1F *hPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
888 fOutputMC->Add(hPionIDGood);
889 hisname.Form("hpiIDTot");
890 TH1F *hPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
891 fOutputMC->Add(hPionIDTot);
892 hisname.Form("hbpiIDTot");
893 TH1F *hBPionIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
894 fOutputMC->Add(hBPionIDTot);
895 hisname.Form("hbpiIDGood");
896 TH1F *hBPionIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
897 fOutputMC->Add(hBPionIDGood);
898 hisname.Form("hnopiIDpi");
899 TH1F *hnoPionIDpiTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
900 fOutputMC->Add(hnoPionIDpiTot);
901 hisname.Form("hbnopiIDpi");
902 TH1F *hBnoPionIDpiTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,10.0);
903 fOutputMC->Add(hBnoPionIDpiTot);
905 hisname.Form("hpid0Prong");
906 TH1F *hPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,-0.1);
907 fOutputMC->Add(hPiond0Prong);
908 hisname.Form("hbpid0Prong");
909 TH1F *hBPiond0Prong=new TH1F(hisname.Data(),hisname.Data(),100,-0.1,0.1);
910 fOutputMC->Add(hBPiond0Prong);
912 hisname.Form("hpiSignalVspTOF");
913 TH2F *hpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
914 fOutputMC->Add(hpiSignalVspTOF);
915 hisname.Form("hpiSignalVspTPC");
916 TH2F *hpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
917 fOutputMC->Add(hpiSignalVspTPC);
918 hisname.Form("hbpiSignalVspTOF");
919 TH2F *hbpiSignalVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,12000.,50000.0);
920 fOutputMC->Add(hbpiSignalVspTOF);
921 hisname.Form("hbpiSignalVspTPC");
922 TH2F *hbpiSignalVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,150,0.,150.0);
923 fOutputMC->Add(hbpiSignalVspTPC);
924 hisname.Form("hpiSigmaVspTOF");
925 TH2F *hpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
926 fOutputMC->Add(hpiSigmaVspTOF);
927 hisname.Form("hpiSigmaVspTPC");
928 TH2F *hpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
929 fOutputMC->Add(hpiSigmaVspTPC);
930 hisname.Form("hbpiSigmaVspTOF");
931 TH2F *hBpiSigmaVspTOF=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
932 fOutputMC->Add(hBpiSigmaVspTOF);
933 hisname.Form("hbpiSigmaVspTPC");
934 TH2F *hBpiSigmaVspTPC=new TH2F(hisname.Data(),hisname.Data(),100,0.,5.0,100,-10.0,10.0);
935 fOutputMC->Add(hBpiSigmaVspTPC);
938 hisname.Form("hLcRealTot");
939 TH1F *hLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
940 fOutputMC->Add(hLambdaRealTot);
941 hisname.Form("hbLcRealTot");
942 TH1F *hbLambdaRealTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
943 fOutputMC->Add(hbLambdaRealTot);
944 hisname.Form("hLcIDTot");
945 TH1F *hLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
946 fOutputMC->Add(hLambdaIDTot);
947 hisname.Form("hbLcIDTot");
948 TH1F *hbLambdaIDTot=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
949 fOutputMC->Add(hbLambdaIDTot);
950 hisname.Form("hLcIDGood");
951 TH1F *hLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
952 fOutputMC->Add(hLambdaIDGood);
953 hisname.Form("hbLcIDGood");
954 TH1F *hbLambdaIDGood=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
955 fOutputMC->Add(hbLambdaIDGood);
956 hisname.Form("hLcnoID");
957 TH1F *hLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
958 fOutputMC->Add(hLambdanoID);
959 hisname.Form("hbLcnoID");
960 TH1F *hbLambdanoID=new TH1F(hisname.Data(),hisname.Data(),100,0.,15.0);
961 fOutputMC->Add(hbLambdanoID);
964 hisname.Form("hLcpt");
965 TH1F *hLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
966 fOutputMC->Add(hLcPt);
967 hisname.Form("hbLcpt");
968 TH1F *hBLcPt=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.0);
969 fOutputMC->Add(hBLcPt);
970 hisname.Form("hDist12toPrim");
971 TH1F *hDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0);
972 fOutputMC->Add(hDist12Prim);
973 hisname.Form("hbDist12toPrim");
974 TH1F *hBDist12Prim=new TH1F(hisname.Data(),hisname.Data(),100,0.,1.0);
975 fOutputMC->Add(hBDist12Prim);
977 hisname.Form("hSigmaVert");
978 TH1F *hSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06);
979 fOutputMC->Add(hSigmaVert);
980 hisname.Form("hbSigmaVert");
981 TH1F *hBSigmaVert=new TH1F(hisname.Data(),hisname.Data(),60,0.,0.06);
982 fOutputMC->Add(hBSigmaVert);
984 hisname.Form("hDCAs");
985 TH1F *hdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1);
986 fOutputMC->Add(hdcas);
987 hisname.Form("hbDCAs");
988 TH1F *hBdcas=new TH1F(hisname.Data(),hisname.Data(),200,0.,0.1);
989 fOutputMC->Add(hBdcas);
991 hisname.Form("hCosPointingAngle");
992 TH1F *hCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.);
993 fOutputMC->Add(hCosPointingAngle);
994 hisname.Form("hbCosPointingAngle");
995 TH1F *hBCosPointingAngle=new TH1F(hisname.Data(),hisname.Data(),40,0.,1.);
996 fOutputMC->Add(hBCosPointingAngle);
998 hisname.Form("hDecayLength");
999 TH1F *hDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
1000 fOutputMC->Add(hDecayLength);
1001 hisname.Form("hbDecayLength");
1002 TH1F *hBDecayLength=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
1003 fOutputMC->Add(hBDecayLength);
1005 hisname.Form("hSum2");
1006 TH1F *hSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
1007 fOutputMC->Add(hSum2);
1008 hisname.Form("hbSum2");
1009 TH1F *hBSum2=new TH1F(hisname.Data(),hisname.Data(),100,0.,0.1);
1010 fOutputMC->Add(hBSum2);
1012 hisname.Form("hptmax");
1013 TH1F *hPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1014 fOutputMC->Add(hPtMax);
1015 hisname.Form("hbptmax");
1016 TH1F *hBPtMax=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1017 fOutputMC->Add(hBPtMax);
1020 hisname.Form("hpptProngLcPt");
1021 fhProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1022 fOutputMC->Add(fhProtonPtProngLcPt);
1023 hisname.Form("hbpptProngLcPt");
1024 fhBProtonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1025 fOutputMC->Add(fhBProtonPtProngLcPt);
1027 hisname.Form("hpd0ProngLcPt");
1028 fhProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1029 fOutputMC->Add(fhProtond0ProngLcPt);
1030 hisname.Form("hbpd0ProngLcPt");
1031 fhBProtond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1032 fOutputMC->Add(fhBProtond0ProngLcPt);
1034 hisname.Form("hKptProngLcPt");
1035 fhKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1036 fOutputMC->Add(fhKaonPtProngLcPt);
1037 hisname.Form("hbKptProngLcPt");
1038 fhBKaonPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1039 fOutputMC->Add(fhBKaonPtProngLcPt);
1041 hisname.Form("hKd0ProngLcPt");
1042 fhKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1043 fOutputMC->Add(fhKaond0ProngLcPt);
1044 hisname.Form("hbKd0ProngLcPt");
1045 fhBKaond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1046 fOutputMC->Add(fhBKaond0ProngLcPt);
1048 hisname.Form("hpiptProngLcPt");
1049 fhPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1050 fOutputMC->Add(fhPionPtProngLcPt);
1051 hisname.Form("hbpiptProngLcPt");
1052 fhBPionPtProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.0);
1053 fOutputMC->Add(fhBPionPtProngLcPt);
1055 hisname.Form("hpid0ProngLcPt");
1056 fhPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,-0.1);
1057 fOutputMC->Add(fhPiond0ProngLcPt);
1058 hisname.Form("hbpid0ProngLcPt");
1059 fhBPiond0ProngLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,-0.1,0.1);
1060 fOutputMC->Add(fhBPiond0ProngLcPt);
1062 hisname.Form("hDist12toPrimLcPt");
1063 fhDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
1064 fOutputMC->Add(fhDist12PrimLcPt);
1065 hisname.Form("hbDist12toPrimLcPt");
1066 fhBDist12PrimLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,1.0);
1067 fOutputMC->Add(fhBDist12PrimLcPt);
1069 hisname.Form("hSigmaVertLcPt");
1070 fhSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
1071 fOutputMC->Add(fhSigmaVertLcPt);
1072 hisname.Form("hbSigmaVertLcPt");
1073 fhBSigmaVertLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,60,0.,0.06);
1074 fOutputMC->Add(fhBSigmaVertLcPt);
1076 hisname.Form("hDCAsLcPt");
1077 fhdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
1078 fOutputMC->Add(fhdcasLcPt);
1079 hisname.Form("hbDCAsLcPt");
1080 fhBdcasLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,200,0.,0.1);
1081 fOutputMC->Add(fhBdcasLcPt);
1083 hisname.Form("hCosPointingAngleLcPt");
1084 fhCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
1085 fOutputMC->Add(fhCosPointingAngleLcPt);
1086 hisname.Form("hbCosPointingAngleLcPt");
1087 fhBCosPointingAngleLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,40,0.,1.);
1088 fOutputMC->Add(fhBCosPointingAngleLcPt);
1090 hisname.Form("hDecayLengthLcPt");
1091 fhDecayLengthLcPt = new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1092 fOutputMC->Add(fhDecayLengthLcPt);
1093 hisname.Form("hbDecayLengthLcPt");
1094 fhBDecayLengthLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1095 fOutputMC->Add(fhBDecayLengthLcPt);
1097 hisname.Form("hSum2LcPt");
1098 fhSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1099 fOutputMC->Add(fhSum2LcPt);
1100 hisname.Form("hbSum2LcPt");
1101 fhBSum2LcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,0.1);
1102 fOutputMC->Add(fhBSum2LcPt);
1104 hisname.Form("hptmaxLcPt");
1105 fhPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
1106 fOutputMC->Add(fhPtMaxLcPt);
1107 hisname.Form("hbptmaxLcPt");
1108 fhBPtMaxLcPt=new TH2F(hisname.Data(),hisname.Data(),75,0.,15.,100,0.,5.);
1109 fOutputMC->Add(fhBPtMaxLcPt);
1111 fAPriori = new TList(); // AdC
1112 fAPriori->SetOwner(); // AdC
1113 fAPriori->SetName("APrioriMCHistos"); // AdC
1115 hisname.Form("hElIn3Prong");
1116 TH1F *hElIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1117 fAPriori->Add(hElIn3Prong);
1118 hisname.Form("hMuIn3Prong");
1119 TH1F *hMuIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1120 fAPriori->Add(hMuIn3Prong);
1121 hisname.Form("hPiIn3Prong");
1122 TH1F *hPiIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1123 fAPriori->Add(hPiIn3Prong);
1124 hisname.Form("hKaIn3Prong");
1125 TH1F *hKaIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1126 fAPriori->Add(hKaIn3Prong);
1127 hisname.Form("hPrIn3Prong");
1128 TH1F *hPrIn3Prong=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1129 fAPriori->Add(hPrIn3Prong);
1131 hisname.Form("hElIn3Prong1");
1132 TH1F *hElIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1133 fAPriori->Add(hElIn3Prong1);
1134 hisname.Form("hMuIn3Prong1");
1135 TH1F *hMuIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1136 fAPriori->Add(hMuIn3Prong1);
1137 hisname.Form("hPiIn3Prong1");
1138 TH1F *hPiIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1139 fAPriori->Add(hPiIn3Prong1);
1140 hisname.Form("hKaIn3Prong1");
1141 TH1F *hKaIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1142 fAPriori->Add(hKaIn3Prong1);
1143 hisname.Form("hPrIn3Prong1");
1144 TH1F *hPrIn3Prong1=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1145 fAPriori->Add(hPrIn3Prong1);
1147 hisname.Form("hElIn3Prong2");
1148 TH1F *hElIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1149 fAPriori->Add(hElIn3Prong2);
1150 hisname.Form("hMuIn3Prong2");
1151 TH1F *hMuIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1152 fAPriori->Add(hMuIn3Prong2);
1153 hisname.Form("hPiIn3Prong2");
1154 TH1F *hPiIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1155 fAPriori->Add(hPiIn3Prong2);
1156 hisname.Form("hKaIn3Prong2");
1157 TH1F *hKaIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1158 fAPriori->Add(hKaIn3Prong2);
1159 hisname.Form("hPrIn3Prong2");
1160 TH1F *hPrIn3Prong2=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1161 fAPriori->Add(hPrIn3Prong2);
1163 hisname.Form("hElIn3Prong3");
1164 TH1F *hElIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1165 fAPriori->Add(hElIn3Prong3);
1166 hisname.Form("hMuIn3Prong3");
1167 TH1F *hMuIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1168 fAPriori->Add(hMuIn3Prong3);
1169 hisname.Form("hPiIn3Prong3");
1170 TH1F *hPiIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1171 fAPriori->Add(hPiIn3Prong3);
1172 hisname.Form("hKaIn3Prong3");
1173 TH1F *hKaIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1174 fAPriori->Add(hKaIn3Prong3);
1175 hisname.Form("hPrIn3Prong3");
1176 TH1F *hPrIn3Prong3=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1177 fAPriori->Add(hPrIn3Prong3);
1179 hisname.Form("hElIn3Prong4");
1180 TH1F *hElIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1181 fAPriori->Add(hElIn3Prong4);
1182 hisname.Form("hMuIn3Prong4");
1183 TH1F *hMuIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1184 fAPriori->Add(hMuIn3Prong4);
1185 hisname.Form("hPiIn3Prong4");
1186 TH1F *hPiIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1187 fAPriori->Add(hPiIn3Prong4);
1188 hisname.Form("hKaIn3Prong4");
1189 TH1F *hKaIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1190 fAPriori->Add(hKaIn3Prong4);
1191 hisname.Form("hPrIn3Prong4");
1192 TH1F *hPrIn3Prong4=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1193 fAPriori->Add(hPrIn3Prong4);
1195 hisname.Form("hElIn3Prong5");
1196 TH1F *hElIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1197 fAPriori->Add(hElIn3Prong5);
1198 hisname.Form("hMuIn3Prong5");
1199 TH1F *hMuIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1200 fAPriori->Add(hMuIn3Prong5);
1201 hisname.Form("hPiIn3Prong5");
1202 TH1F *hPiIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1203 fAPriori->Add(hPiIn3Prong5);
1204 hisname.Form("hKaIn3Prong5");
1205 TH1F *hKaIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1206 fAPriori->Add(hKaIn3Prong5);
1207 hisname.Form("hPrIn3Prong5");
1208 TH1F *hPrIn3Prong5=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1209 fAPriori->Add(hPrIn3Prong5);
1211 hisname.Form("hElIn3Prong6");
1212 TH1F *hElIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1213 fAPriori->Add(hElIn3Prong6);
1214 hisname.Form("hMuIn3Prong6");
1215 TH1F *hMuIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1216 fAPriori->Add(hMuIn3Prong6);
1217 hisname.Form("hPiIn3Prong6");
1218 TH1F *hPiIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1219 fAPriori->Add(hPiIn3Prong6);
1220 hisname.Form("hKaIn3Prong6");
1221 TH1F *hKaIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1222 fAPriori->Add(hKaIn3Prong6);
1223 hisname.Form("hPrIn3Prong6");
1224 TH1F *hPrIn3Prong6=new TH1F(hisname.Data(),hisname.Data(),100,0.,5.);
1225 fAPriori->Add(hPrIn3Prong6);
1228 fMultiplicity = new TList(); // AdC
1229 fMultiplicity->SetOwner(); // AdC
1230 fMultiplicity->SetName("MultiplicityMCHistos"); // AdC
1232 hisname.Form("hLcinEvent");
1233 TH1I*hLcinEvent=new TH1I(hisname.Data(),hisname.Data(),3,-1,2);
1234 fMultiplicity->Add(hLcinEvent);
1236 hisname.Form("hPrimariesvsAOD");
1237 TH2I *hPrimariesvsAOD=new TH2I(hisname.Data(),hisname.Data(),300,0,300,300,0,300);
1238 fMultiplicity->Add(hPrimariesvsAOD);
1240 hisname.Form("hMultiplicityInLcEvent");
1241 TH1I *hMultiplicityInLcEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1242 fMultiplicity->Add(hMultiplicityInLcEvent);
1243 hisname.Form("h2MultiplicityInLcEvent");
1244 TH1I *h2MultiplicityInLcEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1245 fMultiplicity->Add(h2MultiplicityInLcEvent);
1246 hisname.Form("hAll2MultiplicityInEvent");
1247 TH1I *hAll2MultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1248 fMultiplicity->Add(hAll2MultiplicityInEvent);
1249 hisname.Form("hAllMultiplicityInEvent");
1250 TH1I *hAllMultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1251 fMultiplicity->Add(hAllMultiplicityInEvent);
1252 hisname.Form("hAllMultiplicityPrimaryInEvent");
1253 TH1I *hAllMultiplicityPrimaryInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1254 fMultiplicity->Add(hAllMultiplicityPrimaryInEvent);
1255 hisname.Form("hAll2MultiplicityPrimaryInEvent");
1256 TH1I *hAll2MultiplicityPrimaryInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1257 fMultiplicity->Add(hAll2MultiplicityPrimaryInEvent);
1258 hisname.Form("hMultiplicityInEvent");
1259 TH1I *hMultiplicityInEvent=new TH1I(hisname.Data(),hisname.Data(),300,0.,300);
1260 fMultiplicity->Add(hMultiplicityInEvent);
1261 hisname.Form("hMultiplicityIn3ProngLC");
1262 TH1I *hMultiplicityIn3ProngLC=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1263 fMultiplicity->Add(hMultiplicityIn3ProngLC);
1264 hisname.Form("hMultiplicityInLCpid");
1265 TH1I *hMultiplicityInLCpid=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1266 fMultiplicity->Add(hMultiplicityInLCpid);
1267 hisname.Form("hMultiplicityInLCmc");
1268 TH1I *hMultiplicityInLCmc=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1269 fMultiplicity->Add(hMultiplicityInLCmc);
1270 hisname.Form("hMultiplicityInLCNomc");
1271 TH1I *hMultiplicityInLCNomc=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1272 fMultiplicity->Add(hMultiplicityInLCNomc);
1273 hisname.Form("hMultiplicityYesC");
1274 TH1I *hMultiplicityYesC=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1275 fMultiplicity->Add(hMultiplicityYesC);
1276 hisname.Form("hMultiplicityYesB");
1277 TH1I *hMultiplicityYesB=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1278 fMultiplicity->Add(hMultiplicityYesB);
1279 hisname.Form("hMultiplicityJPsi");
1280 TH1I *hMultiplicityJPsi=new TH1I(hisname.Data(),hisname.Data(),300,0,300);
1281 fMultiplicity->Add(hMultiplicityJPsi);
1284 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
1285 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
1286 fPIDResponse = inputHandler->GetPIDResponse();
1288 if(fRDCutsProduction->GetIsUsePID()){
1289 fRDCutsProduction->GetPidHF()->SetPidResponse(fPIDResponse);
1290 fRDCutsProduction->GetPidpion()->SetPidResponse(fPIDResponse);
1291 fRDCutsProduction->GetPidprot()->SetPidResponse(fPIDResponse);
1292 //fUtilPid=new AliAODpidUtil(fPIDResponse);
1293 fRDCutsProduction->GetPidHF()->SetOldPid(kFALSE);
1294 fRDCutsProduction->GetPidpion()->SetOldPid(kFALSE);
1295 fRDCutsProduction->GetPidprot()->SetOldPid(kFALSE);
1297 if(fRDCutsAnalysis->GetIsUsePID()){
1298 fRDCutsAnalysis->GetPidHF()->SetPidResponse(fPIDResponse);
1299 fRDCutsAnalysis->GetPidpion()->SetPidResponse(fPIDResponse);
1300 fRDCutsAnalysis->GetPidprot()->SetPidResponse(fPIDResponse);
1301 fRDCutsAnalysis->GetPidHF()->SetOldPid(kFALSE);
1302 fRDCutsAnalysis->GetPidpion()->SetOldPid(kFALSE);
1303 fRDCutsAnalysis->GetPidprot()->SetOldPid(kFALSE);
1306 PostData(1,fOutput);
1307 if (fFillVarHists) PostData(3,fOutputMC);
1308 PostData(4,fNentries);
1309 if (fPriorsHists) PostData(5,fAPriori);
1310 if (fMultiplicityHists) PostData(6,fMultiplicity);
1311 TString normName="NormalizationCounter";
1312 AliAnalysisDataContainer *cont = GetOutputSlot(7)->GetContainer();
1313 if(cont)normName=(TString)cont->GetName();
1314 fCounter = new AliNormalizationCounter(normName.Data());
1316 PostData(7,fCounter);
1318 //OpenFile(3); // 2 is the slot number of the ntuple
1319 fNtupleLambdac = new TNtuple("fNtupleLambdac","D +",
1320 "pdg:Px:Py:Pz:PtTrue:VxTrue:VyTrue:VzTrue:Ptpi:PtK:Ptpi2:PtRec:PointingAngle:DecLeng:VxRec:VyRec:VzRec:InvMass:sigvert:d0Pi:d0K:d0Pi2:dca:d0square");
1321 PostData(8,fNtupleLambdac);
1327 //________________________________________________________________________
1328 void AliAnalysisTaskSELambdac::UserExec(Option_t */*option*/)
1330 // Execute analysis for current event:
1331 // heavy flavor candidates association to MC truth
1333 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
1335 fHistNEvents->Fill(0); // count event
1336 // Post the data already here
1338 TClonesArray *array3Prong = 0;
1339 TClonesArray *arrayLikeSign =0;
1340 if(!aod && AODEvent() && IsStandardAOD()) {
1341 // In case there is an AOD handler writing a standard AOD, use the AOD
1342 // event in memory rather than the input (ESD) event.
1343 aod = dynamic_cast<AliAODEvent*> (AODEvent());
1344 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
1345 // have to taken from the AOD event hold by the AliAODExtension
1346 AliAODHandler* aodHandler = (AliAODHandler*)
1347 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
1348 if(aodHandler->GetExtensions()) {
1349 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
1350 AliAODEvent *aodFromExt = ext->GetAOD();
1351 array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
1352 arrayLikeSign=(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign3Prong");
1355 array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
1356 arrayLikeSign=(TClonesArray*)aod->GetList()->FindObject("LikeSign3Prong");
1361 TClonesArray *arrayMC=0;
1362 AliAODMCHeader *mcHeader=0;
1364 // load MC particles
1367 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1369 AliError("AliAnalysisTaskSELambdac::UserExec: MC particles branch not found!\n");
1375 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1377 AliError("AliAnalysisTaskSELambdac::UserExec: MC header branch not found!\n");
1382 TString fillthis="";
1383 Int_t numberOfPrimaries= NumberPrimaries(aod);
1385 if (fMultiplicityHists && fReadMC) {
1386 fillthis="hPrimariesvsAOD";
1387 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks(),numberOfPrimaries);
1389 fillthis="hAll2MultiplicityInEvent";
1390 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks());
1392 fillthis="hAll2MultiplicityPrimaryInEvent";
1393 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1395 if (IsThereAGeneratedLc(arrayMC)) {
1396 fillthis="h2MultiplicityInLcEvent";
1397 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1402 if(!array3Prong || !aod) {
1403 AliError("AliAnalysisTaskSELambdac::UserExec: Charm3Prong branch not found!\n");
1406 if(!arrayLikeSign) {
1407 AliDebug(2,"AliAnalysisTaskSELambdac::UserExec: LikeSign3Prong branch not found!\n");
1411 // fix for temporary bug in ESDfilter
1412 // the AODs with null vertex pointer didn't pass the PhysSel
1413 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
1414 if(!vtx1 || TMath::Abs(aod->GetMagneticField())<0.001) return;
1417 fCounter->StoreEvent(aod,fRDCutsProduction,fReadMC);
1418 TString trigclass=aod->GetFiredTriggerClasses();
1419 if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14);
1420 Bool_t isEvSelProdCuts=fRDCutsProduction->IsEventSelected(aod);
1421 Bool_t isEvSelAnCuts=fRDCutsAnalysis->IsEventSelected(aod);
1422 if(!isEvSelProdCuts || !isEvSelAnCuts){
1423 if(fRDCutsProduction->GetWhyRejection()==1) // rejected for pileup
1424 fNentries->Fill(13);
1428 Bool_t isThereA3prongWithGoodTracks = kFALSE;
1429 Bool_t isThereA3ProngLcKine = kFALSE;
1430 Bool_t isThereA3ProngLcKineANDpid = kFALSE;
1431 Bool_t isThereA3ProngLcMC = kFALSE;
1432 Bool_t isThereA3ProngCyes = kFALSE;
1433 Bool_t isThereA3ProngByes = kFALSE;
1434 Bool_t isThereA3ProngJPsi = kFALSE;
1436 Int_t n3Prong = array3Prong->GetEntriesFast();
1437 Int_t nSelectedloose[1]={0};
1438 Int_t nSelectedtight[1]={0};
1440 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
1441 AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
1443 Bool_t unsetvtx=kFALSE;
1444 if(!d->GetOwnPrimaryVtx()){
1445 d->SetOwnPrimaryVtx(vtx1);
1449 //Filter bit selection and QA:
1450 fhSelectBit->Fill(1);
1451 if(d->GetSelectionMap()){
1452 fhSelectBit->Fill(2);
1453 if(!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) fhSelectBit->Fill(3);
1454 if(!d->HasSelectionBit(AliRDHFCuts::kLcPID)) fhSelectBit->Fill(4);
1455 if(fLcCut&&!d->HasSelectionBit(AliRDHFCuts::kLcCuts)) continue;
1456 if(fLcPIDCut&&!d->HasSelectionBit(AliRDHFCuts::kLcPID)) continue;
1459 Int_t isSelectedTracks = fRDCutsProduction->IsSelected(d,AliRDHFCuts::kTracks,aod);
1460 if(!isSelectedTracks) continue;
1461 fhEta3Prong->Fill(d->Pt(),d->Eta());
1462 fhRap3Prong->Fill(d->Pt(),d->Y(4122));
1464 isThereA3prongWithGoodTracks=kTRUE;
1466 if (fRDCutsProduction->IsInFiducialAcceptance(d->Pt(),d->Y(4122))) {fNentries->Fill(6);}else{continue;}
1467 fhEta3ProngAcc->Fill(d->Pt(),d->Eta());
1468 fhRap3ProngAcc->Fill(d->Pt(),d->Y(4122));
1470 Int_t ptbin=fRDCutsProduction->PtBin(d->Pt());
1471 if(ptbin==-1) {fNentries->Fill(4); continue;} //out of bounds
1473 FillMassHists(aod,d,arrayMC,fRDCutsProduction,nSelectedloose,nSelectedtight);
1474 if(fFillVarHists) FillVarHists(d,arrayMC,fRDCutsProduction,/*fOutputMC,*/aod);
1476 if (fPriorsHists && fReadMC)
1477 FillAPrioriConcentrations(d, fRDCutsProduction, aod, arrayMC);
1478 if (fMultiplicityHists && fReadMC)
1479 MultiplicityStudies(d, fRDCutsProduction, aod, arrayMC,
1480 isThereA3ProngLcKine,isThereA3ProngLcKineANDpid,isThereA3ProngLcMC,
1481 isThereA3ProngCyes,isThereA3ProngByes,isThereA3ProngJPsi);
1485 if(labDp<0)fHistOSbkg->Fill(d->InvMassDplus());
1486 fHistOS->Fill(d->InvMassDplus());
1489 if(unsetvtx) d->UnsetOwnPrimaryVtx();
1491 fCounter->StoreCandidates(aod,nSelectedloose[0],kTRUE);
1492 fCounter->StoreCandidates(aod,nSelectedtight[0],kFALSE);
1494 if (fMultiplicityHists && fReadMC) {
1495 fillthis="hAllMultiplicityInEvent";
1496 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(aod->GetNTracks());
1498 fillthis="hAllMultiplicityPrimaryInEvent";
1499 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1501 if (IsThereAGeneratedLc(arrayMC)) {
1502 fillthis="hMultiplicityInLcEvent";
1503 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1506 if (isThereA3prongWithGoodTracks) {
1507 fillthis="hMultiplicityInEvent";
1508 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1510 if (isThereA3ProngLcKine) {
1511 fillthis="hMultiplicityIn3ProngLC";
1512 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1514 if (isThereA3ProngLcKineANDpid) {
1515 fillthis="hMultiplicityInLCpid";
1516 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1518 if (isThereA3ProngLcMC) {
1519 fillthis="hMultiplicityInLCmc";
1520 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1522 if (isThereA3ProngLcKine && !isThereA3ProngLcMC) {
1523 fillthis="hMultiplicityInLCNomc";
1524 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1527 if (isThereA3ProngCyes) {
1528 fillthis="hMultiplicityYesC";
1529 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1531 if (isThereA3ProngByes) {
1532 fillthis="hMultiplicityYesB";
1533 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1535 if (isThereA3ProngJPsi) {
1536 fillthis="hMultiplicityJPsi";
1537 ((TH1I*)fMultiplicity->FindObject(fillthis))->Fill(numberOfPrimaries);
1543 PostData(1,fOutput);
1544 if (fFillVarHists) PostData(3,fOutputMC);
1545 if (fPriorsHists) PostData(5,fAPriori);
1546 if (fMultiplicityHists) PostData(6,fMultiplicity);
1548 PostData(4,fNentries);
1549 PostData(7,fCounter);
1556 //________________________________________________________________________
1557 void AliAnalysisTaskSELambdac::Terminate(Option_t */*option*/)
1559 // Terminate analysis
1561 if (fDebug > 1) printf("AnalysisTaskSELambdac: Terminate() \n");
1563 fOutput = dynamic_cast<TList*> (GetOutputData(1));
1565 AliError("ERROR: fOutput not available\n");
1568 //fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
1571 fNtupleLambdac = dynamic_cast<TNtuple*>(GetOutputData(3));
1578 //________________________________________________________________________
1579 Int_t AliAnalysisTaskSELambdac::MatchToMCLambdac(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
1580 // check if the candidate is a Lambdac decaying in pKpi or in the resonant channels
1581 Int_t lambdacLab[3]={0,0,0};
1582 // Int_t pdgs[3]={0,0,0};
1583 for(Int_t i=0;i<3;i++){
1584 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1585 Int_t lab=daugh->GetLabel();
1587 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
1589 // pdgs[i]=part->GetPdgCode();
1590 Int_t partPdgcode = TMath::Abs(part->GetPdgCode());
1591 if(partPdgcode==211 || partPdgcode==321 || partPdgcode==2212){
1592 Int_t motherLabel=part->GetMother();
1593 if(motherLabel<0) return 0;
1594 AliAODMCParticle *motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
1595 if(!motherPart) continue;
1596 Int_t motherPdg = TMath::Abs(motherPart->GetPdgCode());
1597 if(motherPdg==4122) {
1598 if(GetLambdacDaugh(motherPart,arrayMC)){lambdacLab[i]=motherLabel;continue;}
1600 if(motherPdg==313 || motherPdg==2224 || motherPdg==3124){
1601 Int_t granMotherLabel=motherPart->GetMother();
1602 if(granMotherLabel<0) return 0;
1603 AliAODMCParticle *granMotherPart = (AliAODMCParticle*)arrayMC->At(granMotherLabel);
1604 if(!granMotherPart) continue;
1605 Int_t granMotherPdg = TMath::Abs(granMotherPart->GetPdgCode());
1606 if(granMotherPdg ==4122) {
1607 if(GetLambdacDaugh(granMotherPart,arrayMC)) {lambdacLab[i]=granMotherLabel;continue;}
1613 if(lambdacLab[0]==lambdacLab[1] && lambdacLab[1]==lambdacLab[2]) {return lambdacLab[0];}
1617 //------------------------
1618 Bool_t AliAnalysisTaskSELambdac::GetLambdacDaugh(AliAODMCParticle *part,TClonesArray *arrayMC) const{
1619 // check if the particle is a lambdac and if its decay mode is the correct one
1620 Int_t numberOfLambdac=0;
1621 if(TMath::Abs(part->GetPdgCode())!=4122) return kFALSE;
1622 // Int_t daughTmp[2];
1623 // daughTmp[0]=part->GetDaughter(0);
1624 // daughTmp[1]=part->GetDaughter(1);
1625 Int_t nDaugh = (Int_t)part->GetNDaughters();
1626 if(nDaugh<2) return kFALSE;
1627 if(nDaugh>3) return kFALSE;
1628 AliAODMCParticle* pdaugh1 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(0));
1629 if(!pdaugh1) {return kFALSE;}
1630 Int_t number1 = TMath::Abs(pdaugh1->GetPdgCode());
1631 AliAODMCParticle* pdaugh2 = (AliAODMCParticle*)arrayMC->At(part->GetDaughter(1));
1632 if(!pdaugh2) {return kFALSE;}
1633 Int_t number2 = TMath::Abs(pdaugh2->GetPdgCode());
1636 Int_t thirdDaugh=part->GetDaughter(1)-1;
1637 AliAODMCParticle* pdaugh3 = (AliAODMCParticle*)arrayMC->At(thirdDaugh);
1638 Int_t number3 = TMath::Abs(pdaugh3->GetPdgCode());
1639 if((number1==321 && number2==211 && number3==2212) ||
1640 (number1==211 && number2==321 && number3==2212) ||
1641 (number1==211 && number2==2212 && number3==321) ||
1642 (number1==321 && number2==2212 && number3==211) ||
1643 (number1==2212 && number2==321 && number3==211) ||
1644 (number1==2212 && number2==211 && number3==321)) {
1657 if((number1==2212 && number2==313)){
1658 nfiglieK=pdaugh2->GetNDaughters();
1659 if(nfiglieK!=2) return kFALSE;
1660 AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1661 AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1662 if(!pdaughK1) return kFALSE;
1663 if(!pdaughK2) return kFALSE;
1664 if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++;
1667 if((number1==313 && number2==2212)){
1668 nfiglieK=pdaugh1->GetNDaughters();
1669 if(nfiglieK!=2) return kFALSE;
1670 AliAODMCParticle* pdaughK1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1671 AliAODMCParticle* pdaughK2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1672 if(!pdaughK1) return kFALSE;
1673 if(!pdaughK2) return kFALSE;
1674 if((TMath::Abs(pdaughK1->GetPdgCode())==211 && TMath::Abs(pdaughK2->GetPdgCode())==321) || (TMath::Abs(pdaughK1->GetPdgCode())==321 && TMath::Abs(pdaughK2->GetPdgCode())==211)) numberOfLambdac++;
1677 //Lambda -> Delta++ k
1678 Int_t nfiglieDelta=0;
1679 if(number1==321 && number2==2224){
1680 nfiglieDelta=pdaugh2->GetNDaughters();
1681 if(nfiglieDelta!=2) return kFALSE;
1682 AliAODMCParticle *pdaughD1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1683 AliAODMCParticle *pdaughD2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1684 if(!pdaughD1) return kFALSE;
1685 if(!pdaughD2) return kFALSE;
1686 if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++;
1688 if(number1==2224 && number2==321){
1689 nfiglieDelta=pdaugh1->GetNDaughters();
1690 if(nfiglieDelta!=2) return kFALSE;
1691 AliAODMCParticle* pdaughD1 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1692 AliAODMCParticle* pdaughD2 = (AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1693 if(!pdaughD1) return kFALSE;
1694 if(!pdaughD2) return kFALSE;
1695 if((TMath::Abs(pdaughD1->GetPdgCode())==211 && TMath::Abs(pdaughD2->GetPdgCode())==2212) || (TMath::Abs(pdaughD1->GetPdgCode())==2212 && TMath::Abs(pdaughD2->GetPdgCode())==211)) numberOfLambdac++;
1699 //Lambdac -> Lambda(1520) pi
1701 if(number1==3124 && number2==211){
1702 nfiglieLa=pdaugh1->GetNDaughters();
1703 if(nfiglieLa!=2) return kFALSE;
1704 AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(0));
1705 AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh1->GetDaughter(1));
1706 if(!pdaughL1) return kFALSE;
1707 if(!pdaughL2) return kFALSE;
1708 if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++;
1710 if(number1==211 && number2==3124){
1711 nfiglieLa=pdaugh2->GetNDaughters();
1712 if(nfiglieLa!=2) return kFALSE;
1713 AliAODMCParticle *pdaughL1=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(0));
1714 AliAODMCParticle *pdaughL2=(AliAODMCParticle*)arrayMC->At(pdaugh2->GetDaughter(1));
1715 if(!pdaughL1) return kFALSE;
1716 if(!pdaughL2) return kFALSE;
1717 if((TMath::Abs(pdaughL1->GetPdgCode())==321 && TMath::Abs(pdaughL2->GetPdgCode())==2212) || (TMath::Abs(pdaughL1->GetPdgCode())==2212 && TMath::Abs(pdaughL2->GetPdgCode())==321)) numberOfLambdac++;
1722 if(numberOfLambdac>0) {return kTRUE;}
1725 //-----------------------------
1726 Bool_t AliAnalysisTaskSELambdac::IspKpiMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
1728 Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
1729 for(Int_t i=0;i<3;i++){
1730 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1731 lab[i]=daugh->GetLabel();
1732 if(lab[i]<0) return kFALSE;
1733 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]);
1734 if(!part) return kFALSE;
1735 pdgs[i]=TMath::Abs(part->GetPdgCode());
1738 if(pdgs[0]==2212 && pdgs[1]==321 && pdgs[2]==211) return kTRUE;
1742 //-----------------------------
1743 Bool_t AliAnalysisTaskSELambdac::IspiKpMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
1746 Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
1747 for(Int_t i=0;i<3;i++){
1748 AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
1749 lab[i]=daugh->GetLabel();
1750 if(lab[i]<0) return kFALSE;
1751 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab[i]);
1752 if(!part) return kFALSE;
1753 pdgs[i]=TMath::Abs(part->GetPdgCode());
1756 if(pdgs[2]==2212 && pdgs[1]==321 && pdgs[0]==211) {return kTRUE;}
1760 //--------------------------------------
1761 Bool_t AliAnalysisTaskSELambdac::VertexingKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field) const{
1762 // apply vertexing KF
1763 Int_t iprongs[3]={0,1,2};
1764 Double_t mass[2]={0.,0.};
1765 Bool_t constraint=kFALSE;
1766 if(fCutsKF[0]>0.)constraint=kTRUE;
1767 //topological constr
1768 AliKFParticle *lambdac=d->ApplyVertexingKF(iprongs,3,pdgs,constraint,field,mass);
1769 if(!lambdac) return kFALSE;
1770 if(lambdac->GetChi2()/lambdac->GetNDF()>fCutsKF[1]) return kFALSE;
1773 //-------------------------------------
1774 void AliAnalysisTaskSELambdac::IspiKpResonant(AliAODRecoDecayHF3Prong *d,Double_t field,Int_t *resNumber) const{
1776 // apply PID using the resonant channels
1778 Double_t mass[2]={1.520,0.005};
1779 Int_t ipRes[2]={1,2};
1780 Int_t pdgres[2]={321,2212};
1781 AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1782 Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
1783 if(probLa>0.1) resNumber[0]=1;
1785 mass[0]=0.8961;mass[1]=0.03;
1786 ipRes[0]=0;ipRes[1]=1;
1787 pdgres[0]=211;pdgres[1]=321;
1788 AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1789 Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
1790 if(probKa>0.1) resNumber[1]=1;
1793 mass[0]=1.232;mass[1]=0.15;
1794 ipRes[0]=0;ipRes[1]=2;
1795 pdgres[0]=211;pdgres[1]=2122;
1796 AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1797 Double_t probDe=TMath::Prob(delta->GetChi2(),delta->GetNDF());
1798 if(probDe>0.1) resNumber[2]=1;
1803 //-------------------------------------
1804 void AliAnalysisTaskSELambdac::IspKpiResonant(AliAODRecoDecayHF3Prong *d,Double_t field,Int_t *resNumber) const{
1806 // apply PID using the resonant channels
1808 Double_t mass[2]={1.520,0.005};
1809 Int_t ipRes[2]={0,1};
1810 Int_t pdgres[2]={2212,321};
1811 AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1812 Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
1813 if(probLa>0.1) resNumber[0]=1;
1815 mass[0]=0.8961;mass[1]=0.03;
1816 ipRes[0]=1;ipRes[1]=2;
1817 pdgres[1]=211;pdgres[0]=321;
1818 AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1819 Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
1820 if(probKa>0.1) resNumber[1]=1;
1823 mass[0]=1.232;mass[1]=0.15;
1824 ipRes[0]=0;ipRes[1]=2;
1825 pdgres[0]=2122;pdgres[1]=211;
1826 AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
1827 Double_t probDe=TMath::Prob(delta->GetChi2(),delta->GetNDF());
1828 if(probDe>0.1) resNumber[2]=1;
1833 //---------------------------
1834 void AliAnalysisTaskSELambdac::FillMassHists(AliAODEvent *aod,AliAODRecoDecayHF3Prong *part,
1835 TClonesArray *arrayMC, AliRDHFCutsLctopKpi *cuts,Int_t *nSelectedloose,Int_t *nSelectedtight)
1838 //if MC PID or no PID, unset PID
1839 //if(!fRealPid) cuts->SetUsePID(kFALSE);
1840 Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
1842 nSelectedloose[0]=nSelectedloose[0]+1;
1844 Double_t ptCand = part->Pt();
1847 for(Int_t ibin=0;ibin<fNPtBins&&iPtBin<0&&ptCand>fArrayBinLimits[0]&&ptCand<fArrayBinLimits[fNPtBins];ibin++){
1848 if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin;
1852 Float_t pdgCode1=-1;
1853 Float_t pdgCode2=-1;
1862 // Bool_t IsInjected = -1;
1864 Bool_t IsLcfromLb = 0;
1865 Bool_t IsLcfromc = 0;
1866 Bool_t IsLcFromq = 0;
1869 // AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1870 AliVertexingHFUtils *util = new AliVertexingHFUtils();
1871 // IsInjected = util->IsCandidateInjected(part,mcHeader2,arrayMC)?1:0;
1873 labDp = MatchToMCLambdac(part,arrayMC);
1876 AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
1877 AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0));
1878 AliAODMCParticle *dg1 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(1));
1879 deltaPx=partDp->Px()-part->Px();
1880 deltaPy=partDp->Py()-part->Py();
1881 deltaPz=partDp->Pz()-part->Pz();
1882 truePt=partDp->Pt();
1886 pdgCode=TMath::Abs(partDp->GetPdgCode());
1887 pdgCode1=TMath::Abs(dg0->GetPdgCode());
1888 pdgCode2=TMath::Abs(dg1->GetPdgCode());
1889 Int_t pdgMom=util->CheckOrigin(arrayMC,partDp,kFALSE);
1890 if(pdgMom == 5) IsLcfromLb =1;
1891 if(pdgMom == 4) IsLcfromc =1;
1892 Int_t isThereaQuark=util->CheckOrigin(arrayMC,partDp,kTRUE);
1893 if(isThereaQuark>0) IsLcFromq = 1;
1902 Double_t invMasspKpi=-1.;
1903 Double_t invMasspiKp=-1.;
1904 Double_t invMasspKpiLpi=-1.;
1905 Double_t invMasspiKpLpi=-1.;
1906 Double_t invMasspKpiKp=-1.;
1907 Double_t invMasspiKpKp=-1.;
1908 Double_t invMasspiKpDk=-1.;
1909 Double_t invMasspKpiDk=-1.;
1910 Double_t invMasspiKp3Pr=-1.;
1911 Double_t invMasspKpi3Pr=-1.;
1912 Double_t field=aod->GetMagneticField();
1914 if(fReadMC && fMCPid){
1915 if(IspKpiMC(part,arrayMC)) invMasspKpi=part->InvMassLcpKpi();
1916 if(IspiKpMC(part,arrayMC)) invMasspiKp=part->InvMassLcpiKp();
1919 // apply realistic PID
1921 if(selection==1 || selection==3) invMasspKpi=part->InvMassLcpKpi();
1922 if(selection>=2) invMasspiKp=part->InvMassLcpiKp();
1924 //apply PID using resonances
1925 if (fResPid && fRealPid) {
1926 Int_t ispKpi[3]={0,0,0};
1927 IspKpiResonant(part,field,ispKpi);
1928 Int_t ispiKp[3]={0,0,0};
1929 IspiKpResonant(part,field,ispiKp);
1930 if (selection==3 || selection==1) {
1932 invMasspKpiLpi=part->InvMassLcpKpi();
1935 invMasspKpiKp=part->InvMassLcpKpi();
1938 invMasspKpiDk=part->InvMassLcpKpi();
1940 if(ispKpi[2]==0 && ispKpi[1]==0 && ispKpi[0]==0){
1941 invMasspKpi3Pr=part->InvMassLcpKpi();
1946 invMasspiKpLpi=part->InvMassLcpiKp();
1949 invMasspiKpKp=part->InvMassLcpiKp();
1952 invMasspiKpDk=part->InvMassLcpiKp();
1954 if(ispiKp[2]==0 && ispiKp[1]==0 && ispiKp[0]==0){
1955 invMasspiKp3Pr=part->InvMassLcpiKp();
1962 if(invMasspiKp<0. && invMasspKpi<0.) return;
1964 Int_t passTightCuts=0;
1966 passTightCuts=fRDCutsAnalysis->IsSelected(part,AliRDHFCuts::kCandidate,aod);
1968 Int_t pdgs[3]={0,0,0};
1970 pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
1971 if(!VertexingKF(part,pdgs,field)) {
1980 pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
1981 if(!VertexingKF(part,pdgs,field)) {
1990 if(passTightCuts>0) nSelectedtight[0]=nSelectedtight[0]+1;
1993 fhEta3ProngProd->Fill(part->Pt(),part->Eta());
1994 fhRap3ProngProd->Fill(part->Pt(),part->Y(4122));
1995 if(passTightCuts>0){
1996 fhEta3ProngAn->Fill(part->Pt(),part->Eta());
1997 fhRap3ProngAn->Fill(part->Pt(),part->Y(4122));
2009 if(pdgCode1==2212) {tmp[8]=part->PtProng(0);}else{tmp[8]=0.;}
2010 if(pdgCode1==211) {tmp[10]=part->PtProng(0);}else{tmp[10]=0.;}
2011 tmp[9]=part->PtProng(1);
2012 if(pdgCode2==211) {tmp[10]=part->PtProng(2);}else{tmp[10]=0.;}
2014 tmp[12]=part->CosPointingAngle();
2015 tmp[13]=part->DecayLength();
2019 if(invMasspiKp>0.) tmp[17]=invMasspiKp;
2020 if(invMasspKpi>0.) tmp[17]=invMasspKpi;
2021 tmp[18]=part->GetSigmaVert();
2022 tmp[19]=part->Getd0Prong(0);
2023 tmp[20]=part->Getd0Prong(1);
2024 tmp[21]=part->Getd0Prong(2);
2025 tmp[22]=part->GetDCA();
2026 tmp[23]=part->Prodd0d0();
2027 fNtupleLambdac->Fill(tmp);
2028 PostData(7,fNtupleLambdac);
2031 if(part->Pt()>3.&& part->Pt()<=6.){
2032 if(invMasspiKp>0. && invMasspKpi>0.){
2033 if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp,0.5);
2034 if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi,0.5);
2036 if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp);
2037 if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi);
2039 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2040 if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi,0.5);
2041 if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi,0.5);
2043 if(invMasspiKpLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspiKpLpi);
2044 if(invMasspKpiLpi>0.) fhMassPtGreater3Lpi->Fill(invMasspKpiLpi);
2046 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2047 if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp,0.5);
2048 if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp,0.5);
2050 if(invMasspiKpKp>0.) fhMassPtGreater3Kp->Fill(invMasspiKpKp);
2051 if(invMasspKpiKp>0.) fhMassPtGreater3Kp->Fill(invMasspKpiKp);
2053 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2054 if(invMasspiKpDk>0.) fhMassPtGreater3Dk->Fill(invMasspiKpDk,0.5);
2055 if(invMasspKpiDk>0.) fhMassPtGreater3Dk->Fill(invMasspKpiDk,0.5);
2057 if(invMasspiKpDk>0.) fhMassPtGreater3Dk->Fill(invMasspiKpDk);
2058 if(invMasspKpiDk>0.) fhMassPtGreater3Dk->Fill(invMasspKpiDk);
2060 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2061 if(invMasspiKp3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspiKp3Pr,0.5);
2062 if(invMasspKpi3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspKpi3Pr,0.5);
2064 if(invMasspiKp3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspiKp3Pr);
2065 if(invMasspKpi3Pr>0.) fhMassPtGreater33Pr->Fill(invMasspKpi3Pr);
2068 if(passTightCuts>0){
2069 if(invMasspiKp>0. && invMasspKpi>0.){
2070 if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp,0.5);
2071 if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi,0.5);
2073 if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp);
2074 if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi);
2076 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2077 if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi,0.5);
2078 if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi,0.5);
2080 if(invMasspiKpLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspiKpLpi);
2081 if(invMasspKpiLpi>0.) fhMassPtGreater3LpiTC->Fill(invMasspKpiLpi);
2083 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2084 if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp,0.5);
2085 if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp,0.5);
2087 if(invMasspiKpKp>0.) fhMassPtGreater3KpTC->Fill(invMasspiKpKp);
2088 if(invMasspKpiKp>0.) fhMassPtGreater3KpTC->Fill(invMasspKpiKp);
2091 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2092 if(invMasspiKpDk>0.) fhMassPtGreater3DkTC->Fill(invMasspiKpDk,0.5);
2093 if(invMasspKpiDk>0.) fhMassPtGreater3DkTC->Fill(invMasspKpiDk,0.5);
2095 if(invMasspiKpDk>0.) fhMassPtGreater3DkTC->Fill(invMasspiKpDk);
2096 if(invMasspKpiDk>0.) fhMassPtGreater3DkTC->Fill(invMasspKpiDk);
2098 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2099 if(invMasspiKp3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspiKp3Pr,0.5);
2100 if(invMasspKpi3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspKpi3Pr,0.5);
2102 if(invMasspiKp3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspiKp3Pr);
2103 if(invMasspKpi3Pr>0.) fhMassPtGreater33PrTC->Fill(invMasspKpi3Pr);
2108 if(part->Pt()>2.&& part->Pt()<=6.){
2109 if(invMasspiKp>0. && invMasspKpi>0.){
2110 if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp,0.5);
2111 if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi,0.5);
2113 if(invMasspiKp>0.) fhMassPtGreater2->Fill(invMasspiKp);
2114 if(invMasspKpi>0.) fhMassPtGreater2->Fill(invMasspKpi);
2116 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2117 if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi,0.5);
2118 if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi,0.5);
2120 if(invMasspiKpLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspiKpLpi);
2121 if(invMasspKpiLpi>0.) fhMassPtGreater2Lpi->Fill(invMasspKpiLpi);
2123 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2124 if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp,0.5);
2125 if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp,0.5);
2127 if(invMasspiKpKp>0.) fhMassPtGreater2Kp->Fill(invMasspiKpKp);
2128 if(invMasspKpiKp>0.) fhMassPtGreater2Kp->Fill(invMasspKpiKp);
2130 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2131 if(invMasspiKpDk>0.) fhMassPtGreater2Dk->Fill(invMasspiKpDk,0.5);
2132 if(invMasspKpiDk>0.) fhMassPtGreater2Dk->Fill(invMasspKpiDk,0.5);
2134 if(invMasspiKpDk>0.) fhMassPtGreater2Dk->Fill(invMasspiKpDk);
2135 if(invMasspKpiDk>0.) fhMassPtGreater2Dk->Fill(invMasspKpiDk);
2137 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2138 if(invMasspiKp3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspiKp3Pr,0.5);
2139 if(invMasspKpi3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspKpi3Pr,0.5);
2141 if(invMasspiKp3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspiKp3Pr);
2142 if(invMasspKpi3Pr>0.) fhMassPtGreater23Pr->Fill(invMasspKpi3Pr);
2145 if(passTightCuts>0){
2146 if(invMasspiKp>0. && invMasspKpi>0.){
2147 if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp,0.5);
2148 if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi,0.5);
2150 if(invMasspiKp>0.) fhMassPtGreater2TC->Fill(invMasspiKp);
2151 if(invMasspKpi>0.) fhMassPtGreater2TC->Fill(invMasspKpi);
2153 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2154 if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi,0.5);
2155 if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi,0.5);
2157 if(invMasspiKpLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspiKpLpi);
2158 if(invMasspKpiLpi>0.) fhMassPtGreater2LpiTC->Fill(invMasspKpiLpi);
2160 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2161 if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp,0.5);
2162 if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp,0.5);
2164 if(invMasspiKpKp>0.) fhMassPtGreater2KpTC->Fill(invMasspiKpKp);
2165 if(invMasspKpiKp>0.) fhMassPtGreater2KpTC->Fill(invMasspKpiKp);
2167 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2168 if(invMasspiKpDk>0.) fhMassPtGreater2DkTC->Fill(invMasspiKpDk,0.5);
2169 if(invMasspKpiDk>0.) fhMassPtGreater2DkTC->Fill(invMasspKpiDk,0.5);
2171 if(invMasspiKpDk>0.) fhMassPtGreater2DkTC->Fill(invMasspiKpDk);
2172 if(invMasspKpiDk>0.) fhMassPtGreater2DkTC->Fill(invMasspKpiDk);
2174 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2175 if(invMasspiKp3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspiKp3Pr,0.5);
2176 if(invMasspKpi3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspKpi3Pr,0.5);
2178 if(invMasspiKp3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspiKp3Pr);
2179 if(invMasspKpi3Pr>0.) fhMassPtGreater23PrTC->Fill(invMasspKpi3Pr);
2186 index=GetHistoIndex(iPtBin);
2187 if(invMasspiKp>0. && invMasspKpi>0.){
2188 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2189 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2191 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2192 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2194 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2195 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2196 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2198 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2199 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2201 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2202 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2203 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2205 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2206 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2208 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2209 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2210 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2212 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2213 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2215 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2216 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2217 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2219 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2220 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr);
2223 if(passTightCuts>0){
2224 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2225 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2226 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2228 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2229 if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2231 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2232 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2233 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2235 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2236 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2238 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2239 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2240 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2242 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2243 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2245 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2246 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2247 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2249 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2250 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2252 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2253 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2254 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2256 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2257 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2264 index=GetSignalHistoIndex(iPtBin);
2265 if(invMasspiKp>0. && invMasspKpi>0.){
2266 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2267 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2269 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2270 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2272 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2273 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2274 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2276 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2277 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2279 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2280 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2281 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2283 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2284 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2286 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2287 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2288 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2290 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2291 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2293 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2294 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2295 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2297 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2298 if(invMasspKpi3Pr>0.) fMassHistDk[index]->Fill(invMasspKpi3Pr);
2301 if(passTightCuts>0){
2302 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2303 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2304 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2306 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2307 if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2309 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2310 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2311 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2313 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2314 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2316 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2317 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2318 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2320 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2321 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2323 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2324 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2325 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2327 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2328 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2330 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2331 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2332 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2334 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2335 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2339 if(IsLc && IsLcfromLb){
2340 index=GetLbHistoIndex(iPtBin);
2341 if(invMasspiKp>0. && invMasspKpi>0.){
2342 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2343 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2345 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2346 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2348 if(passTightCuts>0){
2349 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2350 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2351 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2353 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2354 if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2358 if(IsLc && !IsLcfromLb && IsLcfromc) {
2359 index=GetcOnlyHistoIndex(iPtBin);
2360 if(invMasspiKp>0. && invMasspKpi>0.){
2361 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2362 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2364 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2365 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2367 if(passTightCuts>0){
2368 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2369 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2370 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2372 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2373 if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2379 if(IsLc && !IsLcFromq) {
2380 index=GetNoQuarkHistoIndex(iPtBin);
2381 if(invMasspiKp>0. && invMasspKpi>0.){
2382 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp,0.5);
2383 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi,0.5);
2385 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2386 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2388 if(passTightCuts>0){
2389 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2390 if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
2391 if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
2393 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2394 if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2401 index=GetBackgroundHistoIndex(iPtBin);
2402 if(invMasspiKp>0. && invMasspKpi>0.){
2403 fMassHist[index]->Fill(invMasspiKp,0.5);
2404 fMassHist[index]->Fill(invMasspKpi,0.5);
2406 if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
2407 if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
2409 if(invMasspiKpLpi>0. && invMasspKpiLpi>0.){
2410 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi,0.5);
2411 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi,0.5);
2413 if(invMasspiKpLpi>0.) fMassHistLpi[index]->Fill(invMasspiKpLpi);
2414 if(invMasspKpiLpi>0.) fMassHistLpi[index]->Fill(invMasspKpiLpi);
2416 if(invMasspiKpKp>0. && invMasspKpiKp>0.){
2417 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp,0.5);
2418 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp,0.5);
2420 if(invMasspiKpKp>0.) fMassHistKp[index]->Fill(invMasspiKpKp);
2421 if(invMasspKpiKp>0.) fMassHistKp[index]->Fill(invMasspKpiKp);
2423 if(invMasspiKpDk>0. && invMasspKpiDk>0.){
2424 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk,0.5);
2425 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk,0.5);
2427 if(invMasspiKpDk>0.) fMassHistDk[index]->Fill(invMasspiKpDk);
2428 if(invMasspKpiDk>0.) fMassHistDk[index]->Fill(invMasspKpiDk);
2430 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0.){
2431 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr,0.5);
2432 if(invMasspKpi3Pr>0.) fMassHist3Pr[index]->Fill(invMasspKpi3Pr,0.5);
2434 if(invMasspiKp3Pr>0.) fMassHist3Pr[index]->Fill(invMasspiKp3Pr);
2435 if(invMasspKpi3Pr>0.) fMassHistDk[index]->Fill(invMasspKpi3Pr);
2437 if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
2438 fMassHistTC[index]->Fill(invMasspiKp,0.5);
2439 fMassHistTC[index]->Fill(invMasspKpi,0.5);
2441 if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
2442 if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
2444 if(invMasspiKpLpi>0. && invMasspKpiLpi>0. && passTightCuts==3){
2445 if(invMasspiKpLpi>0.) fMassHistLpiTC[index]->Fill(invMasspiKpLpi,0.5);
2446 if(invMasspKpiLpi>0.) fMassHistLpiTC[index]->Fill(invMasspKpiLpi,0.5);
2448 if(invMasspiKpLpi>0. && passTightCuts==2) fMassHistLpiTC[index]->Fill(invMasspiKpLpi);
2449 if(invMasspKpiLpi>0.&& passTightCuts==1) fMassHistLpiTC[index]->Fill(invMasspKpiLpi);
2451 if(invMasspiKpKp>0. && invMasspKpiKp>0. && passTightCuts==3){
2452 if(invMasspiKpKp>0.) fMassHistKpTC[index]->Fill(invMasspiKpKp,0.5);
2453 if(invMasspKpiKp>0.) fMassHistKpTC[index]->Fill(invMasspKpiKp,0.5);
2455 if(invMasspiKpKp>0. && passTightCuts==2) fMassHistKpTC[index]->Fill(invMasspiKpKp);
2456 if(invMasspKpiKp>0.&& passTightCuts==1) fMassHistKpTC[index]->Fill(invMasspKpiKp);
2458 if(invMasspiKpDk>0. && invMasspKpiDk>0. && passTightCuts==3){
2459 if(invMasspiKpDk>0.) fMassHistDkTC[index]->Fill(invMasspiKpDk,0.5);
2460 if(invMasspKpiDk>0.) fMassHistDkTC[index]->Fill(invMasspKpiDk,0.5);
2462 if(invMasspiKpDk>0. && passTightCuts==2) fMassHistDkTC[index]->Fill(invMasspiKpDk);
2463 if(invMasspKpiDk>0.&& passTightCuts==1) fMassHistDkTC[index]->Fill(invMasspKpiDk);
2465 if(invMasspiKp3Pr>0. && invMasspKpi3Pr>0. && passTightCuts==3){
2466 if(invMasspiKp3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr,0.5);
2467 if(invMasspKpi3Pr>0.) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr,0.5);
2469 if(invMasspiKp3Pr>0. && passTightCuts==2) fMassHist3PrTC[index]->Fill(invMasspiKp3Pr);
2470 if(invMasspKpi3Pr>0.&& passTightCuts==1) fMassHist3PrTC[index]->Fill(invMasspKpi3Pr);
2479 //-----------------------
2480 void AliAnalysisTaskSELambdac::FillVarHists(AliAODRecoDecayHF3Prong *part,
2481 TClonesArray *arrMC,
2482 AliRDHFCutsLctopKpi *cuts,
2483 /* TList *listout,*/
2486 // function used in UserExec to fill variable histograms analysing MC
2489 TString fillthis="";
2491 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
2492 Double_t invmasscut=0.05;
2494 Int_t pdgDgLctopKpi[3]={2212,321,211};
2496 // Bool_t IsLcfromLb=0;
2499 lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
2501 AliAODMCParticle *partDp = (AliAODMCParticle*)arrMC->At(lab);
2502 AliVertexingHFUtils *util = new AliVertexingHFUtils();
2503 Int_t pdgMom=util->CheckOrigin(arrMC,partDp,kFALSE);
2504 // if(pdgMom == 5) IsLcfromLb =1;
2505 if(pdgMom == 4) IsLcfromc =1;
2509 // Int_t isSelectedPID=cuts->IsSelectedPID(part); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
2510 // 2 Lc -> pi+ K- p (K at center because different sign is there),
2511 // 3 both (it should never happen...)
2512 Int_t isSelectedPID=cuts->IsSelected(part,AliRDHFCuts::kPID,aod); // 0 rejected, 1 Lc -> p K- pi+ (K at center because different sign is there),
2513 // 2 Lc -> pi+ K- p (K at center because different sign is there),
2514 // 3 both (it should never happen...)
2516 if (isSelectedPID==0)fNentries->Fill(7);
2517 if (isSelectedPID==1)fNentries->Fill(8);
2518 if (isSelectedPID==2)fNentries->Fill(9);
2519 if (isSelectedPID==3)fNentries->Fill(10);
2521 AliAODTrack *prong0=(AliAODTrack*)part->GetDaughter(0);
2522 AliAODTrack *prong1=(AliAODTrack*)part->GetDaughter(1);
2523 AliAODTrack *prong2=(AliAODTrack*)part->GetDaughter(2);
2524 if (!prong0 || !prong1 || !prong2) {
2529 Double_t minvLcpKpi = part->InvMassLcpKpi();
2530 Double_t minvLcpiKp = part->InvMassLcpiKp();
2533 //check pdg of the prongs
2534 Int_t labprong[3]={-1,-1,-1};
2536 labprong[0]=prong0->GetLabel();
2537 labprong[1]=prong1->GetLabel();
2538 labprong[2]=prong2->GetLabel();
2541 AliAODMCParticle *mcprong=0;
2542 Int_t pdgProngMC[3]={-1,-1,-1};
2544 for (Int_t iprong=0;iprong<3;iprong++){
2545 if(labprong[iprong]<0) continue;
2546 mcprong = (AliAODMCParticle*)arrMC->At(labprong[iprong]);
2547 pdgProngMC[iprong]=TMath::Abs(mcprong->GetPdgCode());
2551 Int_t pdgProngPID[3]={-1,-1,-1};
2552 if(isSelectedPID>0){
2554 if(isSelectedPID==1) {pdgProngPID[0]=2212;pdgProngPID[2]=211;}
2555 if(isSelectedPID==2) {pdgProngPID[0]=211;pdgProngPID[2]=2212;}
2558 //fill hRealTot ---> PID efficiency denominators
2559 //cuts->SetUsePID(kFALSE); //PAOLA
2560 Int_t selectionTrack = cuts->IsSelected(part,AliRDHFCuts::kTracks,aod);
2563 Bool_t IsInjected = 0;
2565 AliAODMCHeader *mcHeader2 = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
2566 AliVertexingHFUtils *util = new AliVertexingHFUtils();
2567 IsInjected = util->IsCandidateInjected(part,mcHeader2,arrMC)?1:0;
2570 if(fReadMC && selectionTrack>0) { // 3prongs candidate x Lc (only track selection) Jaime
2572 if(lab>0 && IsLcfromc){ // Signal
2573 for (Int_t iprong=0; iprong<3; iprong++) {
2574 switch (pdgProngMC[iprong]) {
2576 fillthis="hpRealTot";
2577 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2581 fillthis="hKRealTot";
2582 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2586 fillthis="hpiRealTot";
2587 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2594 fillthis="hLcRealTot";
2595 if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2596 //Marcel: Should we zero isReal
2597 } else if(!IsInjected) { // bkg // bkg
2598 for (Int_t iprong=0; iprong<3; iprong++) {
2599 switch (pdgProngMC[iprong]) {
2601 fillthis="hbpRealTot";
2602 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2606 fillthis="hbKRealTot";
2607 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2611 fillthis="hbpiRealTot";
2612 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2619 fillthis="hbLcRealTot";
2620 if(isReal==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2625 //cuts->SetUsePID(kTRUE); //PAOLA
2626 Int_t selection=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
2628 if ( (lab>0 && fReadMC && IsLcfromc) || // signal X MC
2629 (isSelectedPID>0 && !fReadMC) ) { // signal+bkg X real data
2632 if ( (fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 4122) ||
2633 (!fReadMC && (isSelectedPID>0 && part->Charge()>0)) ) { // Lc
2634 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2635 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // signal+bkg X MC and real data
2636 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2637 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // signal+bkg X MC and real data
2639 else if ( (fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == -4122) ||
2640 (!fReadMC && (isSelectedPID>0 && part->Charge()<0)) ) { // anti-Lc
2641 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2642 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // signal+bkg X MC and real data
2643 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2644 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // signal+bkg X MC and real data
2647 if (selection>0) { // 3prongs candidate x Lc (yes PID)
2652 for (Int_t iprong=0; iprong<3; iprong++) {
2653 if (part->PtProng(iprong)>ptmax) ptmax=part->PtProng(iprong);
2655 AliAODTrack *prong = (AliAODTrack*)part->GetDaughter(iprong);
2656 AliAODPid *pidObjtrk = (AliAODPid*)prong->GetDetPid();
2657 AliAODPidHF *pidObj = (AliAODPidHF*)cuts->GetPidHF();
2658 Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF");
2659 Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC");
2660 Double_t tofSignal=0.;
2661 Double_t dedxTPC=0.;
2665 momTOF = prong->P();
2666 tofSignal=pidObjtrk->GetTOFsignal();
2669 momTPC = pidObjtrk->GetTPCmomentum();
2670 dedxTPC=pidObjtrk->GetTPCsignal();
2672 switch (pdgProngPID[iprong]) {
2674 fillthis="hpTOFSignal";
2675 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2676 fillthis="hpTPCSignal";
2677 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2678 fillthis="hpptProng";
2679 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2680 fillthis="hpptProngLcPt";
2681 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->PtProng(iprong));
2682 fillthis="hpd0Prong";
2683 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2684 fillthis="hpd0ProngLcPt";
2685 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
2686 fillthis="hpSignalVspTPC";
2687 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2688 fillthis="hpSignalVspTOF";
2689 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2690 AliPID::EParticleType typep;
2691 typep=AliPID::EParticleType(4);
2693 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep);
2694 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typep);
2695 fillthis="hpSigmaVspTPC";
2696 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2699 //Double_t nsigma=fUtilPid->NumberOfSigmasTOF(prong,typep);
2700 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typep);
2701 fillthis="hpSigmaVspTOF";
2702 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2705 if (fReadMC) { // fill hpIDTot ---> PID contamination denominator
2706 // hIDGood, hnoID ---> PID numerators
2708 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2710 if(pdgProngMC[iprong]==2212) { // id protons
2711 fillthis="hpIDGood";
2712 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2715 else { // misidentified electrons, muons, pions and kaons
2717 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2723 fillthis="hKTOFSignal";
2724 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2725 fillthis="hKTPCSignal";
2726 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2727 fillthis="hKptProng";
2728 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2729 fillthis="hKptProngLcPt";
2730 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->PtProng(iprong));
2731 fillthis="hKd0Prong";
2732 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2733 fillthis="hKd0ProngLcPt";
2734 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
2735 fillthis="hKSignalVspTPC";
2736 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2737 fillthis="hKSignalVspTOF";
2738 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2739 AliPID::EParticleType typek;
2740 typek=AliPID::EParticleType(3);
2742 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek);
2743 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typek);
2744 fillthis="hKSigmaVspTPC";
2745 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2748 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek);
2749 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typek); // protection against 'old' AODs...
2750 fillthis="hKSigmaVspTOF";
2751 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2754 if (fReadMC) { // fill hKIDTot ---> PID contamination denominator
2755 // hIDGood, hnoID ---> PID numerators
2757 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2759 if(pdgProngMC[iprong]==321) { // id kaons
2760 fillthis="hKIDGood";
2761 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2764 else { // misidentified electrons, muons, pions and protons
2766 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2772 fillthis="hpiTOFSignal";
2773 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2774 fillthis="hpiTPCSignal";
2775 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2776 fillthis="hpiptProng";
2777 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2778 fillthis="hpiptProngLcPt";
2779 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->PtProng(iprong));
2780 fillthis="hpid0Prong";
2781 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2782 fillthis="hpid0ProngLcPt";
2783 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
2785 fillthis="hpiSignalVspTPC";
2786 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2787 fillthis="hpiSignalVspTOF";
2788 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2789 AliPID::EParticleType typepi;
2790 typepi=AliPID::EParticleType(2);
2792 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi);
2793 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typepi);
2794 fillthis="hpiSigmaVspTPC";
2795 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2798 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi);
2799 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typepi); // protection against 'old' AODs...
2800 fillthis="hpiSigmaVspTOF";
2801 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2804 if (fReadMC) { // fill hpiIDTot ---> PID contamination denominator
2805 // hIDGood, hnoID ---> PID numerators
2806 fillthis="hpiIDTot";
2807 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2809 if(pdgProngMC[iprong]==211) { // id pions
2810 fillthis="hpiIDGood";
2811 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2814 else { // misidentified electrons, muons, kaons and protons
2815 fillthis="hnopiIDpi";
2816 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2825 }//end loop on prongs
2828 fillthis="hLcIDTot";
2829 if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2830 fillthis="hLcIDGood";
2831 if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2833 if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2835 //now histograms where we don't need to check identity
2837 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
2838 fillthis = "hDist12toPrim";
2839 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
2840 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
2841 fillthis = "hDist12toPrimLcPt";
2842 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
2843 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
2844 fillthis = "hSigmaVert";
2845 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
2846 fillthis = "hSigmaVertLcPt";
2847 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
2850 part->GetDCAs(dcas);
2851 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
2852 fillthis = "hDCAsLcPt";
2853 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
2854 fillthis = "hCosPointingAngle";
2855 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
2856 fillthis = "hCosPointingAngleLcPt";
2857 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
2858 fillthis = "hDecayLength";
2859 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
2860 fillthis = "hDecayLengthLcPt";
2861 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
2862 Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
2863 part->Getd0Prong(1)*part->Getd0Prong(1)+
2864 part->Getd0Prong(2)*part->Getd0Prong(2);
2866 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
2867 fillthis = "hSum2LcPt";
2868 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
2869 fillthis = "hptmax";
2870 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
2871 fillthis = "hptmaxLcPt";
2872 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
2875 } // end if (selection)
2877 }else if( lab<=0 && fReadMC && !IsInjected ) { // bkg x MC
2881 if (part->Charge()>0) { //Lc background
2882 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2883 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // bkg X MC
2884 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2885 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // bkg X MC
2887 else if (part->Charge()<0){ //anti-Lc background
2888 if ( (pdgProngPID[0]==2212) && (pdgProngPID[1]==321) && (pdgProngPID[2]==211) )
2889 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpKpi); // bkg X MC
2890 else if ( (pdgProngPID[0]==211) && (pdgProngPID[1]==321) && (pdgProngPID[2]==2212) )
2891 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(minvLcpiKp); // bkg X MC
2895 //apply cut on invariant mass on the pair
2896 if (TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut) {
2898 if (selection>0) { // 3prongs candidate x Lc (yes PID)
2903 for (Int_t iprong=0; iprong<3; iprong++) {
2904 if(part->PtProng(iprong)>ptmax)ptmax=part->PtProng(iprong);
2906 AliAODTrack *prong = (AliAODTrack*)part->GetDaughter(iprong);
2907 AliAODPid *pidObjtrk = (AliAODPid*)prong->GetDetPid();
2908 AliAODPidHF *pidObj = (AliAODPidHF*)cuts->GetPidHF();
2909 Bool_t hasTOF=pidObj->CheckStatus(prong,"TOF");
2910 Bool_t hasTPC=pidObj->CheckStatus(prong,"TPC");
2911 Double_t tofSignal=0.;
2912 Double_t dedxTPC=0.;
2916 momTOF = prong->P();
2917 tofSignal=pidObjtrk->GetTOFsignal();
2920 momTPC = pidObjtrk->GetTPCmomentum();
2921 dedxTPC=pidObjtrk->GetTPCsignal();
2924 switch (pdgProngPID[iprong]) {
2926 fillthis="hbpTOFSignal";
2927 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2928 fillthis="hbpTPCSignal";
2929 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2930 fillthis="hbpptProng";
2931 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2932 fillthis="hbpptProngLcPt";
2933 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->PtProng(iprong));
2934 fillthis="hbpd0Prong";
2935 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2936 fillthis="hbpd0ProngLcPt";
2937 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
2938 fillthis="hbpSignalVspTPC";
2939 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2940 fillthis="hbpSignalVspTOF";
2941 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2942 AliPID::EParticleType typep;
2943 typep=AliPID::EParticleType(4);
2945 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typep);
2946 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typep);
2947 fillthis="hbpSigmaVspTPC";
2948 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2951 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typep);
2952 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typep); // protection against 'old' AODs...
2953 fillthis="hbpSigmaVspTOF";
2954 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
2956 if(fReadMC){ // fill hbpIDTot ---> PID contamination denominator
2957 // hbIDGood, hbnoID ---> PID numerators
2958 fillthis="hbpIDTot";
2959 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2961 if(pdgProngMC[iprong]==2212) { // id protons
2962 fillthis="hbpIDGood";
2963 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2966 else { // misidentified electrons, muons, pions and kaons
2967 fillthis="hbnopIDp";
2968 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2974 fillthis="hbKTOFSignal";
2975 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
2976 fillthis="hbKTPCSignal";
2977 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
2978 fillthis="hbKptProng";
2979 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
2980 fillthis="hbKptProngLcPt";
2981 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->PtProng(iprong));
2982 fillthis="hbKd0Prong";
2983 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
2984 fillthis="hbKd0ProngLcPt";
2985 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
2986 fillthis="hbKSignalVspTPC";
2987 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
2988 fillthis="hbKSignalVspTOF";
2989 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
2990 AliPID::EParticleType typek;
2991 typek=AliPID::EParticleType(3);
2993 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typek);
2994 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typek);
2995 fillthis="hbKSigmaVspTPC";
2996 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
2999 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typek);
3000 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typek); // protection against 'old' AODs...
3001 fillthis="hbKSigmaVspTOF";
3002 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
3004 if (fReadMC) { // fill hbKIDTot ---> PID contamination denominator
3005 // hIDGood, hnoID ---> PID numerators
3006 fillthis="hbKIDTot";
3007 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3009 if(pdgProngMC[iprong]==321) { // id kaons
3010 fillthis="hbKIDGood";
3011 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3014 else { // misidentified electrons, muons, pions and protons
3015 fillthis="hbnokIDk";
3016 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3022 fillthis="hbpiTOFSignal";
3023 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(tofSignal);
3024 fillthis="hbpiTPCSignal";
3025 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dedxTPC);
3026 fillthis="hbpiptProng";
3027 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3028 fillthis="hbpiptProngLcPt";
3029 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3030 fillthis="hbpid0Prong";
3031 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Getd0Prong(iprong));
3032 fillthis="hbpid0ProngLcPt";
3033 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->Getd0Prong(iprong));
3034 fillthis="hbpiSignalVspTPC";
3035 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,dedxTPC);
3036 fillthis="hbpiSignalVspTOF";
3037 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,tofSignal);
3038 AliPID::EParticleType typepi;
3039 typepi=AliPID::EParticleType(2);
3041 //Double_t nsigmap = fUtilPid->NumberOfSigmasTPC(prong,typepi);
3042 Double_t nsigmap = fPIDResponse->NumberOfSigmasTPC(prong,typepi);
3043 fillthis="hbpiSigmaVspTPC";
3044 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTPC,nsigmap);
3047 //Double_t nsigma = fUtilPid->NumberOfSigmasTOF(prong,typepi);
3048 Double_t nsigma=fPIDResponse->NumberOfSigmasTOF(prong,typepi); // protection against 'old' AODs...
3049 fillthis="hbpiSigmaVspTOF";
3050 ((TH2F*)fOutputMC->FindObject(fillthis))->Fill(momTOF,nsigma);
3052 if (fReadMC) { // fill hbpiIDTot ---> PID contamination denominator
3053 // hIDGood, hnonIDTot ---> PID numerators
3054 fillthis="hbpiIDTot";
3055 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3057 if(pdgProngMC[iprong]==211) { // id pions
3058 fillthis="hbpiIDGood";
3059 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3062 else { // misidentified electrons, muons, kaons and protons
3063 fillthis="hbnopiIDpi";
3064 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->PtProng(iprong));
3073 } //end loop on prongs
3075 fillthis="hbLcIDTot";
3076 if(isID==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
3077 fillthis="hbLcIDGood";
3078 if(isCorrect==3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
3079 fillthis="hbLcnoID";
3080 if(isCorrect<3) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
3082 //now histograms where we don't need to check identity
3084 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt());
3086 fillthis = "hbDist12toPrim";
3087 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist12toPrim());
3088 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetDist23toPrim());
3089 fillthis = "hbDist12toPrimLcPt";
3090 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist12toPrim());
3091 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetDist23toPrim());
3092 fillthis = "hbSigmaVert";
3093 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->GetSigmaVert());
3094 fillthis = "hbSigmaVertLcPt";
3095 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->GetSigmaVert());
3096 fillthis = "hbDCAs";
3098 part->GetDCAs(dcas);
3099 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(dcas[idca]);
3100 fillthis = "hbDCAsLcPt";
3101 for (Int_t idca=0;idca<3;idca++) ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),dcas[idca]);
3102 fillthis = "hbCosPointingAngle";
3103 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->CosPointingAngle());
3104 fillthis = "hbCosPointingAngleLcPt";
3105 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->CosPointingAngle());
3106 fillthis = "hbDecayLength";
3107 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->DecayLength());
3108 fillthis = "hbDecayLengthLcPt";
3109 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),part->DecayLength());
3110 Double_t sum2=part->Getd0Prong(0)*part->Getd0Prong(0)+
3111 part->Getd0Prong(1)*part->Getd0Prong(1)+
3112 part->Getd0Prong(2)*part->Getd0Prong(2);
3113 fillthis = "hbSum2";
3114 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(sum2);
3115 fillthis = "hbSum2LcPt";
3116 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),sum2);
3117 fillthis = "hbptmax";
3118 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(ptmax);
3119 fillthis = "hbptmaxLcPt";
3120 ((TH1F*)fOutputMC->FindObject(fillthis))->Fill(part->Pt(),ptmax);
3122 } // end if (selection)
3126 } // end background case
3132 //-------------------------
3133 void AliAnalysisTaskSELambdac::FillAPrioriConcentrations(AliAODRecoDecayHF3Prong *part,
3134 AliRDHFCutsLctopKpi *cuts,
3136 TClonesArray *arrMC)
3139 // FillAPrioriConcentrations
3140 //cuts->SetUsePID(kFALSE); //Annalisa
3141 Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3143 TString fillthis="";
3145 if(isSelected3ProngByLc>0 && fReadMC) {
3147 for (Int_t ii=0; ii<3; ii++) {
3148 AliAODTrack *prongTest=(AliAODTrack*)part->GetDaughter(ii);
3149 if (!prongTest) continue;
3150 Int_t labprongTest = prongTest->GetLabel();
3151 if(labprongTest<0) continue;
3152 AliAODMCParticle *mcprongTest = (AliAODMCParticle*)arrMC->At(labprongTest);
3154 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3156 fillthis="hElIn3Prong";
3157 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3160 fillthis="hMuIn3Prong";
3161 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3164 fillthis="hPiIn3Prong";
3165 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3168 fillthis="hKaIn3Prong";
3169 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3172 fillthis="hPrIn3Prong";
3173 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3181 //cuts->SetUsePID(kTRUE); //Annalisa
3185 //-----------------------
3186 Bool_t AliAnalysisTaskSELambdac::Is3ProngFromPDG(AliAODRecoDecayHF3Prong *d,
3187 TClonesArray *arrayMC,
3188 Int_t pdgToBeCompared)
3191 // Returs kTRUE if at least one of tracks in the current 3prong
3192 // cames from particle with pdgCode=pdgToBeCompared
3195 Bool_t localFlag = kFALSE;
3197 for (Int_t ii=0;ii<3;ii++) {
3198 AliAODTrack *daugh = (AliAODTrack*)d->GetDaughter(ii);
3200 Int_t lab = daugh->GetLabel();
3202 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
3203 //Int_t partPdg = part->GetPdgCode();
3204 //printf(" -------------------------------------- partLab=%d partPdg=%d ---\n", lab, partPdg);
3206 Int_t motherLabel = part->GetMother();
3207 if(motherLabel<0) continue;
3209 AliAODMCParticle *motherPart = 0;
3210 Int_t motherPdg = 0;
3211 while (!localFlag && motherLabel>=0) {
3212 motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
3213 motherPdg = motherPart->GetPdgCode();
3214 //printf(" ------------- motherLab=%d motherPdg=%d ---\n", motherLabel, motherPdg);
3215 if (TMath::Abs(motherPdg)==pdgToBeCompared) {
3216 //printf("-------------------------- trovato quark c/cbar\n");
3220 motherLabel = motherPart->GetMother();
3230 //-----------------------
3231 Bool_t AliAnalysisTaskSELambdac::IsTrackFromPDG(const AliAODTrack *daugh,
3232 TClonesArray *arrayMC,
3233 Int_t pdgToBeCompared)
3236 // Returs kTRUE if at the tracks comes
3237 // from particle with pdgCode=pdgToBeCompared
3240 Bool_t localFlag = kFALSE;
3242 Int_t lab = daugh->GetLabel();
3243 if(lab<0) return localFlag;
3244 AliAODMCParticle *part= (AliAODMCParticle*)arrayMC->At(lab);
3245 //Int_t partPdg = part->GetPdgCode();
3246 //printf(" -------------------------------------- partLab=%d partPdg=%d ---\n", lab, partPdg);
3248 Int_t motherLabel = part->GetMother();
3249 if(motherLabel<0) return localFlag;
3251 AliAODMCParticle *motherPart = 0;
3252 Int_t motherPdg = 0;
3253 while (!localFlag && motherLabel>=0) {
3254 motherPart = (AliAODMCParticle*)arrayMC->At(motherLabel);
3255 motherPdg = motherPart->GetPdgCode();
3256 //printf(" ------------- motherLab=%d motherPdg=%d ---\n", motherLabel, motherPdg);
3257 if (TMath::Abs(motherPdg)==pdgToBeCompared) {
3258 //printf("-------------------------- trovato quark c/cbar\n");
3262 motherLabel = motherPart->GetMother();
3273 //-----------------------
3274 Bool_t AliAnalysisTaskSELambdac::IsThereAGeneratedLc(TClonesArray *arrayMC)
3277 // Returs kTRUE if there is a lepton related to the LambdaC
3280 Bool_t localFlag = kFALSE;
3282 AliAODMCParticle *searchLc;
3284 for (Int_t iii=0; iii<arrayMC->GetEntries(); iii++) {
3285 searchLc = (AliAODMCParticle*)arrayMC->At(iii);
3286 Int_t searchLcpdg = searchLc->GetPdgCode();
3287 if (TMath::Abs(searchLcpdg) == 4122){
3297 //_________________________________
3298 Int_t AliAnalysisTaskSELambdac::NumberPrimaries(const AliAODEvent *aods)
3300 ///////////////estimate primaries
3304 TClonesArray *aodtracks=(TClonesArray *)aods->GetTracks();
3306 // for(Int_t ji=0;ji<aods->GetNTracks();ji++)
3307 for(Int_t ji=0;ji<aodtracks->GetEntriesFast();ji++)
3309 AliAODTrack*aodTrack=(AliAODTrack*)aodtracks->UncheckedAt(ji);
3310 if(aodTrack->IsPrimaryCandidate()) counter++;
3315 //_________________________________
3317 void AliAnalysisTaskSELambdac::MultiplicityStudies(AliAODRecoDecayHF3Prong *part,
3318 AliRDHFCutsLctopKpi *cuts,
3320 TClonesArray *arrMC,
3321 Bool_t &flag1,Bool_t &flag2,Bool_t &flag3,
3322 Bool_t &flag4, Bool_t &flag5, Bool_t &flag6)
3326 // Multiplicity studies
3328 TString fillthis="";
3330 Int_t pdgDgLctopKpi[3]={2212,321,211};
3333 lab=part->MatchToMC(4122,arrMC,3,pdgDgLctopKpi); //return MC particle label if the array corresponds to a Lc, -1 if not (cf. AliAODRecoDecay.cxx)
3335 //cuts->SetUsePID(kFALSE); //Annalisa
3336 Int_t isSelected3ProngByLc=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3338 if(isSelected3ProngByLc>0 && fReadMC) {
3344 Bool_t is3ProngFromJPsi = Is3ProngFromPDG(part,arrMC,443);
3345 if (is3ProngFromJPsi) flag6=is3ProngFromJPsi;
3347 Bool_t is3ProngFromC = Is3ProngFromPDG(part,arrMC,4);
3348 if (is3ProngFromC) flag4=is3ProngFromC;
3350 Bool_t is3ProngFromB = Is3ProngFromPDG(part,arrMC,5);
3351 if (is3ProngFromB) flag5=is3ProngFromB;
3353 for (Int_t ii=0; ii<3; ii++) {
3354 AliAODTrack *prongTest=(AliAODTrack*)part->GetDaughter(ii);
3355 if (!prongTest) continue;
3356 Int_t labprongTest = prongTest->GetLabel();
3357 if(labprongTest<0) continue;
3358 AliAODMCParticle *mcprongTest = (AliAODMCParticle*)arrMC->At(labprongTest);
3360 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3362 fillthis="hElIn3Prong";
3363 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3364 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3365 fillthis="hElIn3Prong6";
3366 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3370 fillthis="hMuIn3Prong";
3371 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3372 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3373 fillthis="hMuIn3Prong6";
3374 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3378 fillthis="hPiIn3Prong";
3379 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3380 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3381 fillthis="hPiIn3Prong6";
3382 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3386 fillthis="hKaIn3Prong";
3387 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3388 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3389 fillthis="hKaIn3Prong6";
3390 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3394 fillthis="hPrIn3Prong";
3395 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3396 if (IsTrackFromPDG(prongTest,arrMC,443)) {
3397 fillthis="hPrIn3Prong6";
3398 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3406 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3408 fillthis="hElIn3Prong1";
3409 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3412 fillthis="hMuIn3Prong1";
3413 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3416 fillthis="hPiIn3Prong1";
3417 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3420 fillthis="hKaIn3Prong1";
3421 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3424 fillthis="hPrIn3Prong1";
3425 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3431 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3433 fillthis="hElIn3Prong2";
3434 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3435 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3436 fillthis="hElIn3Prong3";
3437 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3439 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3440 fillthis="hElIn3Prong4";
3441 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3443 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3444 fillthis="hElIn3Prong5";
3445 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3449 fillthis="hMuIn3Prong2";
3450 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3451 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3452 fillthis="hMuIn3Prong3";
3453 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3455 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3456 fillthis="hMuIn3Prong4";
3457 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3459 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3460 fillthis="hMuIn3Prong5";
3461 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3465 fillthis="hPiIn3Prong2";
3466 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3467 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3468 fillthis="hPiIn3Prong3";
3469 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3471 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3472 fillthis="hPiIn3Prong4";
3473 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3475 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3476 fillthis="hPiIn3Prong5";
3477 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3481 fillthis="hKaIn3Prong2";
3482 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3483 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3484 fillthis="hKaIn3Prong3";
3485 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3487 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3488 fillthis="hKaIn3Prong4";
3489 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3491 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3492 fillthis="hKaIn3Prong5";
3493 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3497 fillthis="hPrIn3Prong2";
3498 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3499 if (IsTrackFromPDG(prongTest,arrMC,4)) {
3500 fillthis="hPrIn3Prong3";
3501 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3503 if (IsTrackFromPDG(prongTest,arrMC,5)) {
3504 fillthis="hPrIn3Prong4";
3505 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3507 if (!IsTrackFromPDG(prongTest,arrMC,4) && !IsTrackFromPDG(prongTest,arrMC,5)) {
3508 fillthis="hPrIn3Prong5";
3509 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3517 if (is3ProngFromC) {
3518 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3520 fillthis="hElIn3Prong3";
3521 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3524 fillthis="hMuIn3Prong3";
3525 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3528 fillthis="hPiIn3Prong3";
3529 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3532 fillthis="hKaIn3Prong3";
3533 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3536 fillthis="hPrIn3Prong3";
3537 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3542 } else { // !is3ProngFromC
3543 if (is3ProngFromB) {
3544 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3546 fillthis="hElIn3Prong4";
3547 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3550 fillthis="hMuIn3Prong4";
3551 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3554 fillthis="hPiIn3Prong4";
3555 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3558 fillthis="hKaIn3Prong4";
3559 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3562 fillthis="hPrIn3Prong4";
3563 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3568 } else {//!is3ProngFromB
3569 switch (TMath::Abs(mcprongTest->GetPdgCode())) {
3571 fillthis="hElIn3Prong5";
3572 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3575 fillthis="hMuIn3Prong5";
3576 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3579 fillthis="hPiIn3Prong5";
3580 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3583 fillthis="hKaIn3Prong5";
3584 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3587 fillthis="hPrIn3Prong5";
3588 ((TH1F*)fAPriori->FindObject(fillthis))->Fill(part->PtProng(ii));
3599 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
3600 Double_t invmasscut=0.05;
3602 Double_t minvLcpKpi = part->InvMassLcpKpi();
3603 Double_t minvLcpiKp = part->InvMassLcpiKp();
3605 //cuts->SetUsePID(kTRUE); //Annalisa
3606 Int_t isSelected3ProngByLcPID=cuts->IsSelected(part,AliRDHFCuts::kCandidate,aod);
3607 if (isSelected3ProngByLcPID>0) {
3608 if (TMath::Abs(minvLcpKpi-mPDG)<invmasscut || TMath::Abs(minvLcpiKp-mPDG)<invmasscut) {