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 **************************************************************************/
18 //*************************************************************************
19 // Class AliAnalysisTaskSEDplus
20 // AliAnalysisTaskSE for the D+ candidates Invariant Mass Histogram and
21 //comparison of heavy-flavour decay candidates
22 // to MC truth (kinematics stored in the AOD)
23 // Authors: Renu Bala, bala@to.infn.it
24 // F. Prino, prino@to.infn.it
25 // G. Ortona, ortona@to.infn.it
26 /////////////////////////////////////////////////////////////
28 #include <TClonesArray.h>
34 #include <TDatabasePDG.h>
36 #include "AliAnalysisManager.h"
37 #include "AliRDHFCutsDplustoKpipi.h"
38 #include "AliAODHandler.h"
39 #include "AliAODEvent.h"
40 #include "AliAODVertex.h"
41 #include "AliAODTrack.h"
42 #include "AliAODMCHeader.h"
43 #include "AliAODMCParticle.h"
44 #include "AliAODRecoDecayHF3Prong.h"
45 #include "AliAnalysisVertexingHF.h"
46 #include "AliAnalysisTaskSE.h"
47 #include "AliAnalysisTaskSEDplus.h"
48 #include "AliNormalizationCounter.h"
50 ClassImp(AliAnalysisTaskSEDplus)
53 //________________________________________________________________________
54 AliAnalysisTaskSEDplus::AliAnalysisTaskSEDplus():
75 fUseStrangeness(kFALSE),
79 // Default constructor
82 //________________________________________________________________________
83 AliAnalysisTaskSEDplus::AliAnalysisTaskSEDplus(const char *name,AliRDHFCutsDplustoKpipi *dpluscutsana,AliRDHFCutsDplustoKpipi *dpluscutsprod,Bool_t fillNtuple):
84 AliAnalysisTaskSE(name),
99 fRDCutsProduction(dpluscutsprod),
100 fRDCutsAnalysis(dpluscutsana),
102 fFillNtuple(fillNtuple),
104 fUseStrangeness(kFALSE),
109 // Standrd constructor
111 //Double_t ptlim[5]={0.,2.,3.,5,9999999.};
112 //SetPtBinLimit(5, ptlim);
113 SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,fRDCutsAnalysis->GetPtBinLimits());
114 // Default constructor
115 // Output slot #1 writes into a TList container
116 DefineOutput(1,TList::Class()); //My private output
117 // Output slot #2 writes cut to private output
118 // DefineOutput(2,AliRDHFCutsDplustoKpipi::Class());
119 DefineOutput(2,TList::Class());
120 // Output slot #3 writes cut to private output
121 DefineOutput(3,AliNormalizationCounter::Class());
124 // Output slot #4 writes into a TNtuple container
125 DefineOutput(4,TNtuple::Class()); //My private output
129 //________________________________________________________________________
130 AliAnalysisTaskSEDplus::~AliAnalysisTaskSEDplus()
143 for(Int_t i=0;i<3;i++){
144 if(fHistCentrality[i]){delete fHistCentrality[i]; fHistCentrality[i]=0;}
146 for(Int_t i=0;i<3*fNPtBins;i++){
147 if(fMassHist[i]){ delete fMassHist[i]; fMassHist[i]=0;}
148 if(fCosPHist[i]){ delete fCosPHist[i]; fCosPHist[i]=0;}
149 if(fDLenHist[i]){ delete fDLenHist[i]; fDLenHist[i]=0;}
150 if(fSumd02Hist[i]){ delete fSumd02Hist[i]; fSumd02Hist[i]=0;}
151 if(fSigVertHist[i]){ delete fSigVertHist[i]; fSigVertHist[i]=0;}
152 if(fPtMaxHist[i]){ delete fPtMaxHist[i]; fPtMaxHist[i]=0;}
153 if(fPtKHist[i]){ delete fPtKHist[i]; fPtKHist[i]=0;}
154 if(fPtpi1Hist[i]){ delete fPtpi1Hist[i]; fPtpi1Hist[i]=0;}
155 if(fPtpi2Hist[i]){ delete fPtpi2Hist[i]; fPtpi2Hist[i]=0;}
156 if(fDCAHist[i]){ delete fDCAHist[i]; fDCAHist[i]=0;}
157 if(fMassHistTC[i]){ delete fMassHistTC[i]; fMassHistTC[i]=0;}
158 if(fMassHistTCPlus[i]){ delete fMassHistTCPlus[i]; fMassHistTCPlus[i]=0;}
159 if(fMassHistTCMinus[i]){ delete fMassHistTCMinus[i]; fMassHistTCMinus[i]=0;}
161 if(fDLxy[i]){delete fDLxy[i]; fDLxy[i]=0;}
162 if(fDLxyTC[i]){delete fDLxyTC[i]; fDLxyTC[i]=0;}
163 if(fCosxy[i]){delete fCosxy[i]; fCosxy[i]=0;}
164 if(fCosxyTC[i]){delete fCosxyTC[i]; fCosxyTC[i]=0;}
165 if(fMassHistLS[i]){ delete fMassHistLS[i]; fMassHistLS[i]=0;}
166 if(fCosPHistLS[i]){ delete fCosPHistLS[i]; fCosPHistLS[i]=0;}
167 if(fDLenHistLS[i]){ delete fDLenHistLS[i]; fDLenHistLS[i]=0;}
168 if(fSumd02HistLS[i]){ delete fSumd02HistLS[i]; fSumd02HistLS[i]=0;}
169 if(fSigVertHistLS[i]){ delete fSigVertHistLS[i]; fSigVertHistLS[i]=0;}
170 if(fPtMaxHistLS[i]){ delete fPtMaxHistLS[i]; fPtMaxHistLS[i]=0;}
171 if(fDCAHistLS[i]){ delete fDCAHistLS[i]; fDCAHistLS[i]=0;}
172 if(fMassHistLSTC[i]){ delete fMassHistLSTC[i]; fMassHistLSTC[i]=0;}
206 if(fRDCutsProduction){
207 delete fRDCutsProduction;
208 fRDCutsProduction = 0;
211 delete fRDCutsAnalysis;
222 //_________________________________________________________________
223 void AliAnalysisTaskSEDplus::SetMassLimits(Float_t range){
224 // set invariant mass limits
225 Float_t bw=GetBinWidth();
226 fUpmasslimit = 1.865+range;
227 fLowmasslimit = 1.865-range;
230 //_________________________________________________________________
231 void AliAnalysisTaskSEDplus::SetMassLimits(Float_t lowlimit, Float_t uplimit){
232 // set invariant mass limits
235 Float_t bw=GetBinWidth();
236 fUpmasslimit = lowlimit;
237 fLowmasslimit = uplimit;
241 //________________________________________________________________________
242 void AliAnalysisTaskSEDplus::SetPtBinLimit(Int_t n, Float_t* lim){
243 // define pt bins for analysis
245 printf("Max. number of Pt bins = %d\n",kMaxPtBins);
247 fArrayBinLimits[0]=0.;
248 fArrayBinLimits[1]=2.;
249 fArrayBinLimits[2]=3.;
250 fArrayBinLimits[3]=5.;
251 for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
254 fArrayBinLimits[0]=lim[0];
255 for(Int_t i=1; i<fNPtBins+1; i++)
256 if(lim[i]>fArrayBinLimits[i-1]){
257 fArrayBinLimits[i]=lim[i];
260 fArrayBinLimits[i]=fArrayBinLimits[i-1];
262 for(Int_t i=fNPtBins; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
265 printf("Number of Pt bins = %d\n",fNPtBins);
266 for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);
269 //________________________________________________________________
270 void AliAnalysisTaskSEDplus::SetBinWidth(Float_t w){
272 Int_t nbins=(Int_t)((fUpmasslimit-fLowmasslimit)/width+0.5);
273 Int_t missingbins=4-nbins%4;
274 nbins=nbins+missingbins;
275 width=(fUpmasslimit-fLowmasslimit)/nbins;
277 printf("AliAnalysisTaskSEDplus::SetBinWidth: W-bin width of %f will produce histograms not rebinnable by 4. New width set to %f\n",w,width);
280 if(fDebug>1) printf("AliAnalysisTaskSEDplus::SetBinWidth: width set to %f\n",width);
284 //_________________________________________________________________
285 Double_t AliAnalysisTaskSEDplus::GetPtBinLimit(Int_t ibin){
287 if(ibin>fNPtBins)return -1;
288 return fArrayBinLimits[ibin];
290 //_________________________________________________________________
291 Int_t AliAnalysisTaskSEDplus::GetNBinsHistos(){
292 return (Int_t)((fUpmasslimit-fLowmasslimit)/fBinWidth+0.5);
294 //_________________________________________________________________
295 void AliAnalysisTaskSEDplus::LSAnalysis(TClonesArray *arrayOppositeSign,TClonesArray *arrayLikeSign,AliAODEvent *aod,AliAODVertex *vtx1, Int_t nDplusOS){
298 // Fill the Like Sign histograms
300 if(fDebug>1)printf("started LS\n");
301 Bool_t fPlotVariables=kTRUE;
302 //histograms for like sign
303 Int_t nbins=GetNBinsHistos();;
304 TH1F *histLSPlus = new TH1F("LSPlus","LSPlus",nbins,fLowmasslimit,fUpmasslimit);
305 TH1F *histLSMinus = new TH1F("LSMinus","LSMinus",nbins,fLowmasslimit,fUpmasslimit);
307 Int_t nPosTrks=0,nNegTrks=0;
308 Int_t nOStriplets = arrayOppositeSign->GetEntriesFast();
311 Int_t nLikeSign = arrayLikeSign->GetEntriesFast();
314 // loop over like sign candidates
315 for(Int_t iLikeSign = 0; iLikeSign < nLikeSign; iLikeSign++) {
316 AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)arrayLikeSign->UncheckedAt(iLikeSign);
317 if(fUseBit && !d->HasSelectionBit(AliRDHFCuts::kDplusCuts))continue;
318 Bool_t unsetvtx=kFALSE;
319 if(!d->GetOwnPrimaryVtx()) {
320 d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
323 Double_t ptCand = d->Pt();
324 Int_t iPtBin = fRDCutsAnalysis->PtBin(ptCand);
325 if(iPtBin<0)continue;
326 Int_t sign= d->GetCharge();
332 // if(fRDCutsProduction->IsSelected(d,AliRDHFCuts::kCandidate,aod)){
333 fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate,aod);
334 Int_t passTightCuts=fRDCutsAnalysis->GetIsSelectedCuts();
336 Float_t invMass = d->InvMassDplus();
337 index=GetLSHistoIndex(iPtBin);
338 fMassHistLS[index+1]->Fill(invMass);
340 histLSPlus->Fill(invMass);
343 histLSMinus->Fill(invMass);
347 Double_t dlen=d->DecayLength();
348 Double_t cosp=d->CosPointingAngle();
349 Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
350 Double_t dca=d->GetDCA();
351 Double_t sigvert=d->GetSigmaVert();
353 for(Int_t i=0;i<3;i++){
354 if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
356 fCosPHistLS[iPtBin]->Fill(cosp);
357 fDLenHistLS[iPtBin]->Fill(dlen);
358 fSumd02HistLS[iPtBin]->Fill(sumD02);
359 fSigVertHistLS[iPtBin]->Fill(sigvert);
360 fPtMaxHistLS[iPtBin]->Fill(ptmax);
361 fDCAHistLS[iPtBin]->Fill(dca);
364 if(unsetvtx) d->UnsetOwnPrimaryVtx();
366 //wei:normalized to the number of combinations (production)
367 //wei2:normalized to the number of LS/OS (production)
368 //wei3:normalized to the number of LS/OS (analysis)
369 //wei4:normalized to the number of combinations (analysis)
371 if(nLikeSign!=0)wei2 = (Float_t)nOStriplets/(Float_t)nLikeSign;
373 if(nDplusLS!=0)wei3 = (Float_t)nDplusOS/(Float_t)(nDplusLS+nDminusLS);
374 Float_t weiplus=1.,weiminus=1.;
375 Float_t wei4plus=1.,wei4minus=1.;
376 //wei* should be automatically protected, since to get a triplet there must be at least 3 good tracks in the event
377 if(nPosTrks>2)weiplus=3.*(Float_t)nNegTrks/((Float_t)nPosTrks-2.);
378 if(nDplusLS>2)wei4plus=3.*(Float_t)nDminusLS/((Float_t)nDplusLS-2.);
379 if(nNegTrks>2)weiminus=3.*(Float_t)nPosTrks/((Float_t)nNegTrks-2.);
380 if(nDminusLS>2)wei4minus=3.*(Float_t)nDplusLS/((Float_t)nDminusLS-2.);
382 fMassHistLS[index]->Add(histLSPlus,weiplus);
383 fMassHistLS[index]->Add(histLSMinus,weiminus);
384 fMassHistLS[index+2]->Add(histLSPlus,wei2);
385 fMassHistLS[index+2]->Add(histLSMinus,wei2);
386 fMassHistLS[index+3]->Add(histLSPlus,wei3);
387 fMassHistLS[index+3]->Add(histLSMinus,wei3);
388 fMassHistLS[index+4]->Add(histLSPlus,wei4plus);
389 fMassHistLS[index+4]->Add(histLSMinus,wei4minus);
391 delete histLSPlus;histLSPlus=0;
392 delete histLSMinus;histLSMinus=0;
394 if(fDebug>1) printf("LS analysis terminated\n");
397 //__________________________________________
398 void AliAnalysisTaskSEDplus::Init(){
402 if(fDebug > 1) printf("AnalysisTaskSEDplus::Init() \n");
404 //PostData(2,fRDCutsloose);//we should then put those cuts in a tlist if we have more than 1
405 fListCuts=new TList();
406 AliRDHFCutsDplustoKpipi *production = new AliRDHFCutsDplustoKpipi(*fRDCutsProduction);
407 production->SetName("ProductionCuts");
408 AliRDHFCutsDplustoKpipi *analysis = new AliRDHFCutsDplustoKpipi(*fRDCutsAnalysis);
409 analysis->SetName("AnalysisCuts");
411 fListCuts->Add(production);
412 fListCuts->Add(analysis);
413 PostData(2,fListCuts);
418 //________________________________________________________________________
419 void AliAnalysisTaskSEDplus::UserCreateOutputObjects()
421 // Create the output container
423 if(fDebug > 1) printf("AnalysisTaskSEDplus::UserCreateOutputObjects() \n");
425 // Several histograms are more conveniently managed in a TList
426 fOutput = new TList();
428 fOutput->SetName("OutputHistos");
433 Int_t nbins=GetNBinsHistos();
434 fHistCentrality[0]=new TH1F("centrality","centrality",100,0.5,30000.5);
435 fHistCentrality[1]=new TH1F("centrality(selectedCent)","centrality(selectedCent)",100,0.5,30000.5);
436 fHistCentrality[2]=new TH1F("centrality(OutofCent)","centrality(OutofCent)",100,0.5,30000.5);
437 for(Int_t i=0;i<3;i++){
438 fHistCentrality[i]->Sumw2();
439 fOutput->Add(fHistCentrality[i]);
441 for(Int_t i=0;i<fNPtBins;i++){
443 index=GetHistoIndex(i);
444 indexLS=GetLSHistoIndex(i);
446 hisname.Form("hMassPt%d",i);
447 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
448 fMassHist[index]->Sumw2();
449 hisname.Form("hCosPAllPt%d",i);
450 fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
451 fCosPHist[index]->Sumw2();
452 hisname.Form("hDLenAllPt%d",i);
453 fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
454 fDLenHist[index]->Sumw2();
455 hisname.Form("hSumd02AllPt%d",i);
456 fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
457 fSumd02Hist[index]->Sumw2();
458 hisname.Form("hSigVertAllPt%d",i);
459 fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
460 fSigVertHist[index]->Sumw2();
461 hisname.Form("hPtMaxAllPt%d",i);
462 fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
463 fPtMaxHist[index]->Sumw2();
464 hisname.Form("hPtKPt%d",i);
465 fPtKHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
466 fPtKHist[index]->Sumw2();
467 hisname.Form("hPtpi1Pt%d",i);
468 fPtpi1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
469 fPtpi1Hist[index]->Sumw2();
470 hisname.Form("hPtpi2Pt%d",i);
471 fPtpi2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
472 fPtpi2Hist[index]->Sumw2();
473 hisname.Form("hDCAAllPt%d",i);
474 fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
475 fDCAHist[index]->Sumw2();
477 hisname.Form("hDLxyPt%d",i);
478 fDLxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
479 fDLxy[index]->Sumw2();
480 hisname.Form("hCosxyPt%d",i);
481 fCosxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
482 fCosxy[index]->Sumw2();
483 hisname.Form("hDLxyPt%dTC",i);
484 fDLxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
485 fDLxyTC[index]->Sumw2();
486 hisname.Form("hCosxyPt%dTC",i);
487 fCosxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
488 fCosxyTC[index]->Sumw2();
492 hisname.Form("hMassPt%dTC",i);
493 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
494 fMassHistTC[index]->Sumw2();
495 hisname.Form("hMassPt%dTCPlus",i);
496 fMassHistTCPlus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
497 fMassHistTCPlus[index]->Sumw2();
498 hisname.Form("hMassPt%dTCMinus",i);
499 fMassHistTCMinus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
500 fMassHistTCMinus[index]->Sumw2();
503 hisname.Form("hCosPAllPt%dLS",i);
504 fCosPHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
505 fCosPHistLS[index]->Sumw2();
506 hisname.Form("hDLenAllPt%dLS",i);
507 fDLenHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
508 fDLenHistLS[index]->Sumw2();
509 hisname.Form("hSumd02AllPt%dLS",i);
510 fSumd02HistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
511 fSumd02HistLS[index]->Sumw2();
512 hisname.Form("hSigVertAllPt%dLS",i);
513 fSigVertHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
514 fSigVertHistLS[index]->Sumw2();
515 hisname.Form("hPtMaxAllPt%dLS",i);
516 fPtMaxHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
517 fPtMaxHistLS[index]->Sumw2();
520 hisname.Form("hDCAAllPt%dLS",i);
521 fDCAHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
522 fDCAHistLS[index]->Sumw2();
524 hisname.Form("hLSPt%dLC",i);
525 fMassHistLS[indexLS] = new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
526 fMassHistLS[indexLS]->Sumw2();
528 hisname.Form("hLSPt%dTC",i);
529 fMassHistLSTC[indexLS] = new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
530 fMassHistLSTC[indexLS]->Sumw2();
534 index=GetSignalHistoIndex(i);
536 hisname.Form("hSigPt%d",i);
537 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
538 fMassHist[index]->Sumw2();
539 hisname.Form("hCosPSigPt%d",i);
540 fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
541 fCosPHist[index]->Sumw2();
542 hisname.Form("hDLenSigPt%d",i);
543 fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
544 fDLenHist[index]->Sumw2();
545 hisname.Form("hSumd02SigPt%d",i);
546 fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
547 fSumd02Hist[index]->Sumw2();
548 hisname.Form("hSigVertSigPt%d",i);
549 fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
550 fSigVertHist[index]->Sumw2();
551 hisname.Form("hPtMaxSigPt%d",i);
552 fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
553 fPtMaxHist[index]->Sumw2();
554 hisname.Form("hPtKSigPt%d",i);
555 fPtKHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
556 fPtKHist[index]->Sumw2();
557 hisname.Form("hPtpi1SigPt%d",i);
558 fPtpi1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
559 fPtpi1Hist[index]->Sumw2();
560 hisname.Form("hPtpi2SigPt%d",i);
561 fPtpi2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
562 fPtpi2Hist[index]->Sumw2();
564 hisname.Form("hDCASigPt%d",i);
565 fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
566 fDCAHist[index]->Sumw2();
568 hisname.Form("hDLxySigPt%d",i);
569 fDLxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
570 fDLxy[index]->Sumw2();
571 hisname.Form("hCosxySigPt%d",i);
572 fCosxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
573 fCosxy[index]->Sumw2();
574 hisname.Form("hDLxySigPt%dTC",i);
575 fDLxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
576 fDLxyTC[index]->Sumw2();
577 hisname.Form("hCosxySigPt%dTC",i);
578 fCosxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
579 fCosxyTC[index]->Sumw2();
580 hisname.Form("hSigPt%dTC",i);
581 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
582 fMassHistTC[index]->Sumw2();
583 hisname.Form("hSigPt%dTCPlus",i);
584 fMassHistTCPlus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
585 fMassHistTCPlus[index]->Sumw2();
586 hisname.Form("hSigPt%dTCMinus",i);
587 fMassHistTCMinus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
588 fMassHistTCMinus[index]->Sumw2();
590 hisname.Form("hLSPt%dLCnw",i);
591 fMassHistLS[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
592 fMassHistLS[indexLS]->Sumw2();
593 hisname.Form("hLSPt%dTCnw",i);
594 fMassHistLSTC[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
595 fMassHistLSTC[indexLS]->Sumw2();
599 hisname.Form("hCosPSigPt%dLS",i);
600 fCosPHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
601 fCosPHistLS[index]->Sumw2();
602 hisname.Form("hDLenSigPt%dLS",i);
603 fDLenHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
604 fDLenHistLS[index]->Sumw2();
605 hisname.Form("hSumd02SigPt%dLS",i);
606 fSumd02HistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
607 fSumd02HistLS[index]->Sumw2();
608 hisname.Form("hSigVertSigPt%dLS",i);
609 fSigVertHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
610 fSigVertHistLS[index]->Sumw2();
611 hisname.Form("hPtMaxSigPt%dLS",i);
612 fPtMaxHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
613 fPtMaxHistLS[index]->Sumw2();
615 hisname.Form("hDCASigPt%dLS",i);
616 fDCAHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
617 fDCAHistLS[index]->Sumw2();
621 index=GetBackgroundHistoIndex(i);
623 hisname.Form("hBkgPt%d",i);
624 fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
625 fMassHist[index]->Sumw2();
626 hisname.Form("hCosPBkgPt%d",i);
627 fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
628 fCosPHist[index]->Sumw2();
629 hisname.Form("hDLenBkgPt%d",i);
630 fDLenHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
631 fDLenHist[index]->Sumw2();
632 hisname.Form("hSumd02BkgPt%d",i);
633 fSumd02Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
634 fSumd02Hist[index]->Sumw2();
635 hisname.Form("hSigVertBkgPt%d",i);
636 fSigVertHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
637 fSigVertHist[index]->Sumw2();
638 hisname.Form("hPtMaxBkgPt%d",i);
639 fPtMaxHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
640 fPtMaxHist[index]->Sumw2();
641 hisname.Form("hPtKBkgPt%d",i);
642 fPtKHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
643 fPtKHist[index]->Sumw2();
644 hisname.Form("hPtpi1BkgPt%d",i);
645 fPtpi1Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
646 fPtpi1Hist[index]->Sumw2();
647 hisname.Form("hPtpi2BkgPt%d",i);
648 fPtpi2Hist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
649 fPtpi2Hist[index]->Sumw2();
650 hisname.Form("hDCABkgPt%d",i);
651 fDCAHist[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
652 fDCAHist[index]->Sumw2();
654 hisname.Form("hDLxyBkgPt%d",i);
655 fDLxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
656 fDLxy[index]->Sumw2();
657 hisname.Form("hCosxyBkgPt%d",i);
658 fCosxy[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
659 fCosxy[index]->Sumw2();
660 hisname.Form("hDLxyBkgPt%dTC",i);
661 fDLxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,10.);
662 fDLxyTC[index]->Sumw2();
663 hisname.Form("hCosxyBkgPt%dTC",i);
664 fCosxyTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.85,1.);
665 fCosxyTC[index]->Sumw2();
668 hisname.Form("hBkgPt%dTC",i);
669 fMassHistTC[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
670 fMassHistTC[index]->Sumw2();
671 hisname.Form("hBkgPt%dTCPlus",i);
672 fMassHistTCPlus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
673 fMassHistTCPlus[index]->Sumw2();
674 hisname.Form("hBkgPt%dTCMinus",i);
675 fMassHistTCMinus[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
676 fMassHistTCMinus[index]->Sumw2();
678 hisname.Form("hLSPt%dLCntrip",i);
679 fMassHistLS[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
680 fMassHistLS[indexLS]->Sumw2();
681 hisname.Form("hLSPt%dTCntrip",i);
682 fMassHistLSTC[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
683 fMassHistLSTC[indexLS]->Sumw2();
686 hisname.Form("hCosPBkgPt%dLS",i);
687 fCosPHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,1.);
688 fCosPHistLS[index]->Sumw2();
689 hisname.Form("hDLenBkgPt%dLS",i);
690 fDLenHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.5);
691 fDLenHistLS[index]->Sumw2();
692 hisname.Form("hSumd02BkgPt%dLS",i);
693 fSumd02HistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,1.);
694 fSumd02HistLS[index]->Sumw2();
695 hisname.Form("hSigVertBkgPt%dLS",i);
696 fSigVertHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
697 fSigVertHistLS[index]->Sumw2();
698 hisname.Form("hPtMaxBkgPt%dLS",i);
699 fPtMaxHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.5,5.);
700 fPtMaxHistLS[index]->Sumw2();
701 hisname.Form("hDCABkgPt%dLS",i);
702 fDCAHistLS[index]=new TH1F(hisname.Data(),hisname.Data(),nbins,0.,0.1);
703 fDCAHistLS[index]->Sumw2();
707 hisname.Form("hLSPt%dLCntripsinglecut",i);
708 fMassHistLS[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
709 fMassHistLS[indexLS]->Sumw2();
710 hisname.Form("hLSPt%dTCntripsinglecut",i);
711 fMassHistLSTC[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
712 fMassHistLSTC[indexLS]->Sumw2();
715 hisname.Form("hLSPt%dLCspc",i);
716 fMassHistLS[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
717 fMassHistLS[indexLS]->Sumw2();
718 hisname.Form("hLSPt%dTCspc",i);
719 fMassHistLSTC[indexLS]=new TH1F(hisname.Data(),hisname.Data(),nbins,fLowmasslimit,fUpmasslimit);
720 fMassHistLSTC[indexLS]->Sumw2();
723 for(Int_t i=0; i<3*fNPtBins; i++){
724 fOutput->Add(fMassHist[i]);
725 fOutput->Add(fCosPHist[i]);
726 fOutput->Add(fDLenHist[i]);
727 fOutput->Add(fSumd02Hist[i]);
728 fOutput->Add(fSigVertHist[i]);
729 fOutput->Add(fPtMaxHist[i]);
730 fOutput->Add(fPtKHist[i]);
731 fOutput->Add(fPtpi1Hist[i]);
732 fOutput->Add(fPtpi2Hist[i]);
733 fOutput->Add(fDCAHist[i]);
734 fOutput->Add(fMassHistTC[i]);
735 fOutput->Add(fMassHistTCPlus[i]);
736 fOutput->Add(fMassHistTCMinus[i]);
737 fOutput->Add(fDLxy[i]);
738 fOutput->Add(fDLxyTC[i]);
739 fOutput->Add(fCosxy[i]);
740 fOutput->Add(fCosxyTC[i]);
742 for(Int_t i=0; i<3*fNPtBins&&fDoLS; i++){
743 fOutput->Add(fCosPHistLS[i]);
744 fOutput->Add(fDLenHistLS[i]);
745 fOutput->Add(fSumd02HistLS[i]);
746 fOutput->Add(fSigVertHistLS[i]);
747 fOutput->Add(fPtMaxHistLS[i]);
748 fOutput->Add(fDCAHistLS[i]);
750 for(Int_t i=0; i<5*fNPtBins&&fDoLS; i++){
751 fOutput->Add(fMassHistLS[i]);
752 fOutput->Add(fMassHistLSTC[i]);
756 fHistNEvents = new TH1F("fHistNEvents", "number of events ",9,-0.5,8.5);
757 fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsAnal");
758 fHistNEvents->GetXaxis()->SetBinLabel(2,"nEvents with good vertex");
759 fHistNEvents->GetXaxis()->SetBinLabel(3,"nEvents with PbPb HM trigger");
760 fHistNEvents->GetXaxis()->SetBinLabel(4,"no. of Rejected pileup events");
761 fHistNEvents->GetXaxis()->SetBinLabel(5,"no. of candidate");
762 fHistNEvents->GetXaxis()->SetBinLabel(6,"no. of D+ after loose cuts");
763 fHistNEvents->GetXaxis()->SetBinLabel(7,"no. of D+ after tight cuts");
764 fHistNEvents->GetXaxis()->SetBinLabel(8,"no. of out centrality events");
765 fHistNEvents->GetXaxis()->SetBinLabel(9,"no. of cand wo bitmask");
767 fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
769 fHistNEvents->Sumw2();
770 fHistNEvents->SetMinimum(0);
771 fOutput->Add(fHistNEvents);
773 fPtVsMass=new TH2F("hPtVsMass","PtVsMass (prod. cuts)",nbins,fLowmasslimit,fUpmasslimit,200,0.,20.);
774 fPtVsMassTC=new TH2F("hPtVsMassTC","PtVsMass (analysis cuts)",nbins,fLowmasslimit,fUpmasslimit,200,0.,20.);
775 fYVsPt=new TH2F("hYVsPt","YvsPt (prod. cuts)",40,0.,20.,80,-2.,2.);
776 fYVsPtTC=new TH2F("hYVsPtTC","YvsPt (analysis cuts)",40,0.,20.,80,-2.,2.);
777 fYVsPtSig=new TH2F("hYVsPtSig","YvsPt (MC, only sig., prod. cuts)",40,0.,20.,80,-2.,2.);
778 fYVsPtSigTC=new TH2F("hYVsPtSigTC","YvsPt (MC, only Sig, analysis cuts)",40,0.,20.,80,-2.,2.);
780 fOutput->Add(fPtVsMass);
781 fOutput->Add(fPtVsMassTC);
782 fOutput->Add(fYVsPt);
783 fOutput->Add(fYVsPtTC);
784 fOutput->Add(fYVsPtSig);
785 fOutput->Add(fYVsPtSigTC);
788 //Counter for Normalization
789 TString normName="NormalizationCounter";
790 AliAnalysisDataContainer *cont = GetOutputSlot(3)->GetContainer();
791 if(cont)normName=(TString)cont->GetName();
792 fCounter = new AliNormalizationCounter(normName.Data());
793 fCounter->SetRejectPileUp(fRDCutsProduction->GetOptPileUp());
796 OpenFile(4); // 4 is the slot number of the ntuple
798 fNtupleDplus = new TNtuple("fNtupleDplus","D +","pdg:Px:Py:Pz:PtTrue:VxTrue:VyTrue:VzTrue:Ptpi:PtK:Ptpi2:PtRec:PointingAngle:DecLeng:VxRec:VyRec:VzRec:InvMass:sigvert:d0Pi:d0K:d0Pi2:dca:d0square");
805 //________________________________________________________________________
806 void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
808 // Execute analysis for current event:
809 // heavy flavor candidates association to MC truth
811 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
815 TClonesArray *array3Prong = 0;
816 TClonesArray *arrayLikeSign =0;
817 if(!aod && AODEvent() && IsStandardAOD()) {
818 // In case there is an AOD handler writing a standard AOD, use the AOD
819 // event in memory rather than the input (ESD) event.
820 aod = dynamic_cast<AliAODEvent*> (AODEvent());
821 // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
822 // have to taken from the AOD event hold by the AliAODExtension
823 AliAODHandler* aodHandler = (AliAODHandler*)
824 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
825 if(aodHandler->GetExtensions()) {
826 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
827 AliAODEvent *aodFromExt = ext->GetAOD();
828 array3Prong=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
829 arrayLikeSign=(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign3Prong");
832 array3Prong=(TClonesArray*)aod->GetList()->FindObject("Charm3Prong");
833 arrayLikeSign=(TClonesArray*)aod->GetList()->FindObject("LikeSign3Prong");
836 if(!aod || !array3Prong) {
837 printf("AliAnalysisTaskSEDplus::UserExec: Charm3Prong branch not found!\n");
840 if(!arrayLikeSign && fDoLS) {
841 printf("AliAnalysisTaskSEDplus::UserExec: LikeSign3Prong branch not found!\n");
846 // fix for temporary bug in ESDfilter
847 // the AODs with null vertex pointer didn't pass the PhysSel
848 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001) return;
849 fCounter->StoreEvent(aod,fReadMC);
850 fHistNEvents->Fill(0); // count event
852 Bool_t isEvSel=fRDCutsAnalysis->IsEventSelected(aod);
853 Float_t centrality=aod->GetNTracks();//fRDCutsAnalysis->GetCentrality(aod);
854 fHistCentrality[0]->Fill(centrality);
855 // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD
856 TString trigclass=aod->GetFiredTriggerClasses();
857 if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD")||trigclass.Contains("C0SMH-B-NOPF-ALL")) fHistNEvents->Fill(2);
858 if(fRDCutsAnalysis->GetWhyRejection()==1)fHistNEvents->Fill(3);
859 if(fRDCutsAnalysis->GetWhyRejection()==2){fHistNEvents->Fill(7);fHistCentrality[2]->Fill(centrality);}
861 // Post the data already here
865 fHistCentrality[1]->Fill(centrality);
866 fHistNEvents->Fill(1);
868 TClonesArray *arrayMC=0;
869 AliAODMCHeader *mcHeader=0;
871 // AOD primary vertex
872 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
874 TString primTitle = vtx1->GetTitle();
875 //if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0)fHistNEvents->Fill(2);
880 arrayMC = (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
882 printf("AliAnalysisTaskSEDplus::UserExec: MC particles branch not found!\n");
887 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
889 printf("AliAnalysisTaskSEDplus::UserExec: MC header branch not found!\n");
894 Int_t n3Prong = array3Prong->GetEntriesFast();
895 printf("Number of D+->Kpipi: %d and of tracks: %d\n",n3Prong,aod->GetNumberOfTracks());
900 Int_t pdgDgDplustoKpipi[3]={321,211,211};
903 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
904 AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
905 if(fUseBit && !d->HasSelectionBit(AliRDHFCuts::kDplusCuts)){
906 if(fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate,aod))nOS++;
910 // Double_t cutsDplus[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0.,10000000000.};//TO REMOVE
911 //Double_t *cutsDplus = new (Double_t*)fRDCuts->GetCuts();
912 Int_t nSelectedloose=0,nSelectedtight=0;
913 for (Int_t i3Prong = 0; i3Prong < n3Prong; i3Prong++) {
914 AliAODRecoDecayHF3Prong *d = (AliAODRecoDecayHF3Prong*)array3Prong->UncheckedAt(i3Prong);
915 fHistNEvents->Fill(4);
916 if(fUseBit && !d->HasSelectionBit(AliRDHFCuts::kDplusCuts)){
917 fHistNEvents->Fill(8);
920 Bool_t unsetvtx=kFALSE;
921 if(!d->GetOwnPrimaryVtx()){
922 d->SetOwnPrimaryVtx(vtx1);
926 if(fRDCutsProduction->IsSelected(d,AliRDHFCuts::kCandidate,aod)) {
929 Double_t ptCand = d->Pt();
931 for(Int_t ibin=0;ibin<fNPtBins&&iPtBin<0&&ptCand>fArrayBinLimits[0]&&ptCand<fArrayBinLimits[fNPtBins];ibin++){
932 if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin;
935 Int_t passTightCuts=fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate,aod);
948 labDp = d->MatchToMC(411,arrayMC,3,pdgDgDplustoKpipi);
950 AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
951 AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0));
952 deltaPx=partDp->Px()-d->Px();
953 deltaPy=partDp->Py()-d->Py();
954 deltaPz=partDp->Pz()-d->Pz();
959 pdgCode=TMath::Abs(partDp->GetPdgCode());
964 Double_t invMass=d->InvMassDplus();
965 Double_t rapid=d->YDplus();
966 fYVsPt->Fill(ptCand,rapid);
967 if(passTightCuts) {fYVsPtTC->Fill(ptCand,rapid);nOS++;}
968 Bool_t isFidAcc=fRDCutsAnalysis->IsInFiducialAcceptance(ptCand,rapid);
970 fPtVsMass->Fill(invMass,ptCand);
971 if(passTightCuts) fPtVsMassTC->Fill(invMass,ptCand);
983 tmp[8]=d->PtProng(0);
984 tmp[9]=d->PtProng(1);
985 tmp[10]=d->PtProng(2);
987 tmp[12]=d->CosPointingAngle();
988 tmp[13]=d->DecayLength();
992 tmp[17]=d->InvMassDplus();
993 tmp[18]=d->GetSigmaVert();
994 tmp[19]=d->Getd0Prong(0);
995 tmp[20]=d->Getd0Prong(1);
996 tmp[21]=d->Getd0Prong(2);
998 tmp[23]=d->Prodd0d0();
999 fNtupleDplus->Fill(tmp);
1000 PostData(4,fNtupleDplus);
1002 Double_t dlen=d->DecayLength();
1003 Double_t cosp=d->CosPointingAngle();
1004 Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
1005 Double_t dca=d->GetDCA();
1006 Double_t sigvert=d->GetSigmaVert();
1008 for(Int_t i=0;i<3;i++){
1009 if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
1012 Float_t dlxy=d->NormalizedDecayLengthXY();
1013 Float_t cxy=d->CosPointingAngleXY();
1014 index=GetHistoIndex(iPtBin);
1016 fHistNEvents->Fill(5);
1018 fMassHist[index]->Fill(invMass);
1019 fCosPHist[index]->Fill(cosp);
1020 fDLenHist[index]->Fill(dlen);
1021 fSumd02Hist[index]->Fill(sumD02);
1022 fSigVertHist[index]->Fill(sigvert);
1023 fPtMaxHist[index]->Fill(ptmax);
1024 fPtKHist[index]->Fill(d->PtProng(1));
1025 fPtpi1Hist[index]->Fill(d->PtProng(0));
1026 fPtpi2Hist[index]->Fill(d->PtProng(2));
1027 fDCAHist[index]->Fill(dca);
1028 fDLxy[index]->Fill(dlxy);
1029 fCosxy[index]->Fill(cxy);
1030 if(passTightCuts){ fHistNEvents->Fill(6);
1032 fMassHistTC[index]->Fill(invMass);
1033 fDLxyTC[index]->Fill(dlxy);
1034 fCosxyTC[index]->Fill(cxy);
1035 if(d->GetCharge()>0) fMassHistTCPlus[index]->Fill(invMass);
1036 else if(d->GetCharge()<0) fMassHistTCMinus[index]->Fill(invMass);
1042 index=GetSignalHistoIndex(iPtBin);
1044 Float_t factor[3]={1.,1.,1.};
1045 if(fUseStrangeness){
1046 for(Int_t iprong=0;iprong<3;iprong++){
1047 AliAODTrack *trad = (AliAODTrack*)d->GetDaughter(iprong);
1048 Int_t labd= trad->GetLabel();
1050 AliAODMCParticle *dau = (AliAODMCParticle*)arrayMC->At(labd);
1052 Int_t labm = dau->GetMother();
1054 AliAODMCParticle *mot = (AliAODMCParticle*)arrayMC->At(labm);
1056 if(TMath::Abs(mot->GetPdgCode())==310 || TMath::Abs(mot->GetPdgCode())==130 || TMath::Abs(mot->GetPdgCode())==321){ //K0_S, K0_L, K^+-
1057 if(d->PtProng(iprong)<=1)factor[iprong]=1./.7;
1058 else factor[iprong]=1./.6;
1059 // fNentries->Fill(12);
1061 if(TMath::Abs(mot->GetPdgCode())==3122) { //Lambda
1062 factor[iprong]=1./0.25;
1063 // fNentries->Fill(13);
1071 Float_t fact=1.;for(Int_t k=0;k<3;k++)fact=fact*factor[k];
1072 fMassHist[index]->Fill(invMass);
1073 fCosPHist[index]->Fill(cosp,fact);
1074 fDLenHist[index]->Fill(dlen,fact);
1075 fDLxy[index]->Fill(dlxy);
1076 fCosxy[index]->Fill(cxy);
1078 Float_t sumd02s=d->Getd0Prong(0)*d->Getd0Prong(0)*factor[0]*factor[0]+d->Getd0Prong(1)*d->Getd0Prong(1)*factor[1]*factor[1]+d->Getd0Prong(2)*d->Getd0Prong(2)*factor[2]*factor[2];
1079 fSumd02Hist[index]->Fill(sumd02s);
1080 fSigVertHist[index]->Fill(sigvert,fact);
1081 fPtMaxHist[index]->Fill(ptmax,fact);
1082 fPtKHist[index]->Fill(d->PtProng(1),fact);
1083 fPtpi1Hist[index]->Fill(d->PtProng(0),fact);
1084 fPtpi2Hist[index]->Fill(d->PtProng(2),fact);
1085 fDCAHist[index]->Fill(dca,fact);
1087 fMassHistTC[index]->Fill(invMass);
1088 fDLxyTC[index]->Fill(dlxy);
1089 fCosxyTC[index]->Fill(cxy);
1091 if(d->GetCharge()>0) fMassHistTCPlus[index]->Fill(invMass);
1092 else if(d->GetCharge()<0) fMassHistTCMinus[index]->Fill(invMass);
1095 fYVsPtSig->Fill(ptCand,rapid);
1096 if(passTightCuts) fYVsPtSigTC->Fill(ptCand,rapid);
1098 index=GetBackgroundHistoIndex(iPtBin);
1100 Float_t factor[3]={1.,1.,1.};
1101 if(fUseStrangeness){
1102 for(Int_t iprong=0;iprong<3;iprong++){
1103 AliAODTrack *trad = (AliAODTrack*)d->GetDaughter(iprong);
1104 Int_t labd= trad->GetLabel();
1106 AliAODMCParticle *dau = (AliAODMCParticle*)arrayMC->At(labd);
1108 Int_t labm = dau->GetMother();
1110 AliAODMCParticle *mot = (AliAODMCParticle*)arrayMC->At(labm);
1112 if(TMath::Abs(mot->GetPdgCode())==310 || TMath::Abs(mot->GetPdgCode())==130 || TMath::Abs(mot->GetPdgCode())==321){ //K0_S, K0_L, K^+-
1113 if(d->PtProng(iprong)<=1)factor[iprong]=1./.7;
1114 else factor[iprong]=1./.6;
1115 // fNentries->Fill(12);
1117 if(TMath::Abs(mot->GetPdgCode())==3122) { //Lambda
1118 factor[iprong]=1./0.25;
1119 // fNentries->Fill(13);
1127 Float_t fact=1.;for(Int_t k=0;k<3;k++)fact=fact*factor[k];
1128 fMassHist[index]->Fill(invMass);
1129 fCosPHist[index]->Fill(cosp,fact);
1130 fDLenHist[index]->Fill(dlen,fact);
1131 fDLxy[index]->Fill(dlxy);
1132 fCosxy[index]->Fill(cxy);
1134 Float_t sumd02s=d->Getd0Prong(0)*d->Getd0Prong(0)*factor[0]*factor[0]+d->Getd0Prong(1)*d->Getd0Prong(1)*factor[1]*factor[1]+d->Getd0Prong(2)*d->Getd0Prong(2)*factor[2]*factor[2];
1135 fSumd02Hist[index]->Fill(sumd02s);
1136 fSigVertHist[index]->Fill(sigvert,fact);
1137 fPtMaxHist[index]->Fill(ptmax,fact);
1138 fPtKHist[index]->Fill(d->PtProng(1),fact);
1139 fPtpi1Hist[index]->Fill(d->PtProng(0),fact);
1140 fPtpi2Hist[index]->Fill(d->PtProng(2),fact);
1141 fDCAHist[index]->Fill(dca,fact);
1143 fMassHistTC[index]->Fill(invMass);
1144 fDLxyTC[index]->Fill(dlxy);
1145 fCosxyTC[index]->Fill(cxy);
1147 if(d->GetCharge()>0) fMassHistTCPlus[index]->Fill(invMass);
1148 else if(d->GetCharge()<0) fMassHistTCMinus[index]->Fill(invMass);
1158 if(unsetvtx) d->UnsetOwnPrimaryVtx();
1160 fCounter->StoreCandidates(aod,nSelectedloose,kTRUE);
1161 fCounter->StoreCandidates(aod,nSelectedtight,kFALSE);
1164 if(fDoLS && arrayLikeSign) LSAnalysis(array3Prong,arrayLikeSign,aod,vtx1,nOS);
1166 PostData(1,fOutput);
1167 PostData(2,fListCuts);
1168 PostData(3,fCounter);
1174 //________________________________________________________________________
1175 void AliAnalysisTaskSEDplus::Terminate(Option_t */*option*/)
1177 // Terminate analysis
1179 if(fDebug > 1) printf("AnalysisTaskSEDplus: Terminate() \n");
1181 fOutput = dynamic_cast<TList*> (GetOutputData(1));
1183 printf("ERROR: fOutput not available\n");
1186 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
1191 for(Int_t i=0;i<fNPtBins;i++){
1192 index=GetHistoIndex(i);
1194 hisname.Form("hMassPt%dTC",i);
1195 fMassHistTC[index]=dynamic_cast<TH1F*>(fOutput->FindObject(hisname.Data()));
1198 TCanvas *c1=new TCanvas("c1","D+ invariant mass distribution",500,500);
1200 TH1F *hMassPt=(TH1F*)fOutput->FindObject("hMassPt3TC");
1201 hMassPt->SetLineColor(kBlue);
1202 hMassPt->SetXTitle("M[GeV/c^{2}]");