8 #include <TDatabasePDG.h>
9 #include <TClonesArray.h>
12 #include "AliAODMCHeader.h"
13 #include "AliAODMCParticle.h"
15 #include "AliAODEvent.h"
17 #include "AliAODcascade.h"
19 #include "AliCentrality.h"
22 #include "AliPIDResponse.h"
23 #include "AliAODPid.h"
25 #include "AliInputEventHandler.h"
26 #include "AliAnalysisManager.h"
28 #include "AliAnalysisTaskCTauPbPbaod.h"
32 ClassImp(AliAnalysisTaskCTauPbPbaod)
34 static Int_t nbins=100; // number of bins
35 static Double_t lMin=0.0, lMax=100.;
36 static Double_t pMin=0.0, pMax=10.;
37 static Double_t yMax=0.5;
41 // This is a little task for checking the c*tau of the strange particles
44 AliAnalysisTaskCTauPbPbaod::AliAnalysisTaskCTauPbPbaod(const char *name) :
45 AliAnalysisTaskSE(name),
79 fLambdaBarFromXiBar(0),
83 // Constructor. Initialization of pointers
84 DefineOutput(1, TList::Class());
87 void AliAnalysisTaskCTauPbPbaod::UserCreateOutputObjects()
89 fOutput = new TList();
93 fMult=new TH1F("fMult","Multiplicity",1100,0.,3300);
94 fMult->GetXaxis()->SetTitle("N tracks");
97 fdEdx=new TH2F("fdEdx","dE/dx",50,0.2,3,50,0.,6.);
100 fdEdxPid=new TH2F("fdEdxPid","dE/dx with PID",50,0.2,3,50,0.,6.);
101 fOutput->Add(fdEdxPid);
104 new TH2F("fK0sM", "Mass for K^{0}_{s}", nbins/2,0.448,0.548,nbins,pMin,pMax);
105 fK0sM->GetXaxis()->SetTitle("Mass (GeV/c)");
109 new TH2F("fK0sSi","L_{T} vs p_{T} for K^{0}_{s}, side-band subtracted",
110 nbins,pMin,pMax,nbins,lMin,lMax);
111 fK0sSi->GetXaxis()->SetTitle("p_{T} (GeV/c)");
112 fK0sSi->GetYaxis()->SetTitle("L_{T} (cm)");
113 fOutput->Add(fK0sSi);
116 new TH2F("fK0sMC","L_{T} vs p_{T} for K^{0}_{s}, from MC stack",
117 nbins,pMin,pMax,nbins,lMin,lMax);
118 fK0sMC->GetXaxis()->SetTitle("p_{T} (GeV/c)");
119 fK0sMC->GetYaxis()->SetTitle("L_{T} (cm)");
120 fOutput->Add(fK0sMC);
123 new TH2F("fK0sAs", "L_{T} vs p_{T} for K^{0}_{s}, associated",
124 nbins,pMin,pMax,nbins,lMin,lMax);
125 fK0sAs->GetXaxis()->SetTitle("p_{T} (GeV/c)");
126 fK0sAs->GetYaxis()->SetTitle("L_{T} (cm)");
127 fOutput->Add(fK0sAs);
129 //----------------------
132 new TH2F("fLambdaM","Mass for \\Lambda", nbins, 1.065, 1.165,nbins,pMin,pMax);
133 fLambdaM->GetXaxis()->SetTitle("Mass (GeV/c)");
134 fOutput->Add(fLambdaM);
137 new TH2F("fLambdaSi","L_{T} vs p_{T} for \\Lambda, side-band subtructed",
138 nbins,pMin,pMax,nbins,lMin,lMax);
139 fLambdaSi->GetXaxis()->SetTitle("p_{T} (GeV/c)");
140 fLambdaSi->GetYaxis()->SetTitle("L_{T} (cm)");
141 fOutput->Add(fLambdaSi);
144 new TH2F("fLambdaMC","L_{T} vs p_{T} for \\Lambda, from MC stack",
145 nbins,pMin,pMax,nbins,lMin,lMax);
146 fLambdaMC->GetXaxis()->SetTitle("p_{T} (GeV/c)");
147 fLambdaMC->GetYaxis()->SetTitle("L_{T} (cm)");
148 fOutput->Add(fLambdaMC);
151 new TH2F("fLambdaAs","L_{T} vs p_{T} for \\Lambda, associated",
152 nbins,pMin,pMax,nbins,lMin,lMax);
153 fLambdaAs->GetXaxis()->SetTitle("p_{T} (GeV/c)");
154 fLambdaAs->GetYaxis()->SetTitle("L_{T} (cm)");
155 fOutput->Add(fLambdaAs);
159 new TH2F("fLambdaBarM","Mass for anti-\\Lambda", nbins, 1.065, 1.165,nbins,pMin,pMax);
160 fLambdaBarM->GetXaxis()->SetTitle("Mass (GeV/c)");
161 fOutput->Add(fLambdaBarM);
164 new TH2F("fLambdaBarSi","L_{T} vs p_{T} for anti-\\Lambda, side-band subtructed",
165 nbins,pMin,pMax,nbins,lMin,lMax);
166 fLambdaBarSi->GetXaxis()->SetTitle("p_{T} (GeV/c)");
167 fLambdaBarSi->GetYaxis()->SetTitle("L_{T} (cm)");
168 fOutput->Add(fLambdaBarSi);
171 new TH2F("fLambdaBarMC","L_{T} vs p_{T} for anti-\\Lambda, from MC stack",
172 nbins,pMin,pMax,nbins,lMin,lMax);
173 fLambdaBarMC->GetXaxis()->SetTitle("p_{T} (GeV/c)");
174 fLambdaBarMC->GetYaxis()->SetTitle("L_{T} (cm)");
175 fOutput->Add(fLambdaBarMC);
178 new TH2F("fLambdaBarAs","L_{T} vs p_{T} for anti-\\Lambda, associated",
179 nbins,pMin,pMax,nbins,lMin,lMax);
180 fLambdaBarAs->GetXaxis()->SetTitle("p_{T} (GeV/c)");
181 fLambdaBarAs->GetYaxis()->SetTitle("L_{T} (cm)");
182 fOutput->Add(fLambdaBarAs);
186 fCPA=new TH1F("fCPA","Cosine of the pointing angle",30,0.9978,1.);
188 fDCA=new TH1F("fDCA","DCA between the daughters",30,0.,1.1);
191 fLambdaEff=fLambdaAs->ProjectionX();
192 fLambdaEff->SetName("fLambdaEff");
193 fLambdaEff->SetTitle("Efficiency for #Lambda");
194 fOutput->Add(fLambdaEff);
196 fLambdaPt=fLambdaAs->ProjectionX();
197 fLambdaPt->SetName("fLambdaPt");
198 fLambdaPt->SetTitle("Raw #Lambda pT spectrum");
199 fOutput->Add(fLambdaPt);
201 //----------------------
203 fLambdaFromXi=new TH3F("fLambdaFromXi","L_{T} vs p_{T} vs p_{T} of \\Xi for \\Lambda from \\Xi",
204 nbins,pMin,pMax,nbins,lMin,lMax,33,pMin,pMax+2);
205 fOutput->Add(fLambdaFromXi);
208 new TH2F("fXiM", "\\Xi mass distribution", 50, 1.271, 1.371,12,pMin,pMax+2);
211 fXiSiP = new TH1F("fXiSiP", "Pt for \\Xi, side-band subracted",
213 fOutput->Add(fXiSiP);
216 fLambdaBarFromXiBar=new TH3F("fLambdaBarFromXiBar","L_{T} vs p_{T} vs p_{T} of anti-\\Xi for anti-\\Lambda from anti-\\Xi",
217 nbins,pMin,pMax,nbins,lMin,lMax,33,pMin,pMax+2);
218 fOutput->Add(fLambdaFromXi);
221 new TH2F("fXiBarM", "anti-\\Xi mass distribution", 50, 1.271, 1.371,12,pMin,pMax+2);
222 fOutput->Add(fXiBarM);
224 fXiBarSiP = new TH1F("fXiBarSiP", "Pt for anti-\\Xi, side-band subracted",
226 fOutput->Add(fXiBarSiP);
229 PostData(1, fOutput);
232 static Bool_t AcceptTrack(const AliAODTrack *t) {
233 if (!t->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
234 //if (t->GetKinkIndex(0)>0) return kFALSE;
236 Float_t nCrossedRowsTPC = t->GetTPCClusterInfo(2,1);
237 if (nCrossedRowsTPC < 70) return kFALSE;
238 Int_t findable=t->GetTPCNclsF();
239 if (findable <= 0) return kFALSE;
240 if (nCrossedRowsTPC/findable < 0.8) return kFALSE;
242 if (TMath::Abs(t->Eta()) > 0.8) return kFALSE;
247 static Bool_t AcceptV0(const AliAODv0 *v1, const AliAODEvent *aod) {
249 if (v1->GetOnFlyStatus()) return kFALSE;
251 if (v1->Pt() < pMin) return kFALSE;
253 const AliAODTrack *ntrack1=(AliAODTrack *)v1->GetDaughter(1);
254 if (!AcceptTrack(ntrack1)) return kFALSE;
256 const AliAODTrack *ptrack1=(AliAODTrack *)v1->GetDaughter(0);
257 if (!AcceptTrack(ptrack1)) return kFALSE;
259 Float_t xy=v1->DcaNegToPrimVertex();
260 if (TMath::Abs(xy)<0.1) return kFALSE;
261 xy=v1->DcaPosToPrimVertex();
262 if (TMath::Abs(xy)<0.1) return kFALSE;
264 Double_t dca=v1->DcaV0Daughters();
265 if (dca>1.0) return kFALSE;
266 //if (dca>0.7) return kFALSE;
267 //if (dca>0.4) return kFALSE;
269 Double_t cpa=v1->CosPointingAngle(aod->GetPrimaryVertex());
270 if (cpa<0.998) return kFALSE;
271 //if (cpa<0.99875) return kFALSE;
272 //if (cpa<0.9995) return kFALSE;
274 Double_t xyz[3]; v1->GetSecondaryVtx(xyz);
275 Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1];
276 if (r2<0.9*0.9) return kFALSE;
277 if (r2>100*100) return kFALSE;
282 static Bool_t AcceptCascade(const AliAODcascade *cs, const AliAODEvent *aod) {
284 if (cs->Pt() < pMin) return kFALSE;
286 AliAODVertex *xi = cs->GetDecayVertexXi();
287 const AliAODTrack *bach=(AliAODTrack *)xi->GetDaughter(0);
288 if (!AcceptTrack(bach)) return kFALSE;
290 Double_t xy=cs->DcaBachToPrimVertex();
291 if (TMath::Abs(xy) < 0.03) return kFALSE;
293 const AliAODVertex *vtx=aod->GetPrimaryVertex();
294 Double_t xv=vtx->GetX(), yv=vtx->GetY(), zv=vtx->GetZ();
295 Double_t cpa=cs->CosPointingAngleXi(xv,yv,zv);
296 if (cpa<0.999) return kFALSE;
298 if (cs->DcaXiDaughters() > 0.3) return kFALSE;
303 static Bool_t AcceptPID(const AliPIDResponse *pidResponse,
304 const AliAODTrack *ptrack, const TClonesArray *stack) {
306 Bool_t isProton=kTRUE;
310 Int_t ntrk=stack->GetEntriesFast();
311 Int_t plab=TMath::Abs(ptrack->GetLabel());
314 AliAODMCParticle *pp=(AliAODMCParticle*)stack->UncheckedAt(plab);
315 if (pp->Charge() > 0) {
316 if (pp->GetPdgCode() != kProton) isProton=kFALSE;
318 if (pp->GetPdgCode() != kProtonBar) isProton=kFALSE;
323 const AliAODPid *pid=ptrack->GetDetPid();
325 if (pid->GetTPCmomentum() < 1.) {
326 Double_t nsig=pidResponse->NumberOfSigmasTPC(ptrack,AliPID::kProton);
327 if (TMath::Abs(nsig) > 3.) isProton=kFALSE;
335 void AliAnalysisTaskCTauPbPbaod::UserExec(Option_t *)
338 AliAODEvent *aod=(AliAODEvent *)InputEvent();
341 Printf("ERROR: aod not available");
346 const AliAODVertex *vtx=aod->GetPrimaryVertex();
347 if (vtx->GetNContributors()<3) return;
348 Double_t xv=vtx->GetX(), yv=vtx->GetY(), zv=vtx->GetZ();
350 if (TMath::Abs(zv) > 10.) return ;
354 AliAnalysisManager *mgr= AliAnalysisManager::GetAnalysisManager();
355 AliInputEventHandler *hdr=(AliInputEventHandler*)mgr->GetInputEventHandler();
356 UInt_t maskIsSelected = hdr->IsEventSelected();
357 Bool_t isSelected = (maskIsSelected & AliVEvent::kMB);
358 if (!isSelected) return;
360 fMult->Fill(-100); //event counter
362 // Centrality selection
363 AliCentrality *cent=aod->GetCentrality();
364 if (!cent->IsEventInCentralityClass(fCMin,fCMax,"V0M")) return;
366 AliPIDResponse *pidResponse = hdr->GetPIDResponse();
371 TClonesArray *stack = 0x0;
372 Double_t mcXv=0., mcYv=0., mcZv=0.;
375 TList *lst = aod->GetList();
376 stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName());
378 Printf("ERROR: stack not available");
382 mcHdr=(AliAODMCHeader*)lst->FindObject(AliAODMCHeader::StdBranchName());
384 mcXv=mcHdr->GetVtxX(); mcYv=mcHdr->GetVtxY(); mcZv=mcHdr->GetVtxZ();
386 Int_t ntrk1=stack->GetEntriesFast(), ntrk0=ntrk1;
388 AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(ntrk1);
389 Int_t code=p0->GetPdgCode();
390 if (code != kK0Short)
391 if (code != kLambda0)
392 if (code != kLambda0Bar) continue;
394 Int_t plab=p0->GetDaughter(0), nlab=p0->GetDaughter(1);
395 if (nlab==plab) continue;
396 if (nlab<0) continue;
397 if (plab<0) continue;
398 if (nlab>=ntrk0) continue;
399 if (plab>=ntrk0) continue;
400 AliAODMCParticle *part = (AliAODMCParticle *)stack->UncheckedAt(plab);
402 Double_t charge=part->Charge();
403 if (charge == 0.) continue;
405 Double_t pt=p0->Pt();
406 if (pt<pMin) continue;
407 if (TMath::Abs(p0->Y())>yMax) continue;
409 Double_t x=p0->Xv(), y=p0->Yv(), z=p0->Zv();
410 Double_t dxmc=mcXv-x, dymc=mcYv-y, dzmc=mcZv-z;
411 Double_t l=TMath::Sqrt(dxmc*dxmc + dymc*dymc + dzmc*dzmc);
413 if (l > 0.001) continue; // secondary V0
415 x=part->Xv(); y=part->Yv();
416 dxmc=mcXv-x; dymc=mcYv-y;
417 Double_t lt=TMath::Sqrt(dxmc*dxmc + dymc*dymc);
419 if (code == kK0Short) {
422 if (code == kLambda0) {
423 fLambdaMC->Fill(pt,lt);
425 if (code == kLambda0Bar) {
426 fLambdaBarMC->Fill(pt,lt);
433 Int_t ntrk2=aod->GetNumberOfTracks();
435 for (Int_t i=0; i<ntrk2; i++) {
436 AliAODTrack *t=aod->GetTrack(i);
437 if (t->IsMuonTrack()) continue;
438 if (!t->IsOn(AliAODTrack::kTPCrefit)) continue;
441 if (t->GetPosition(xyz)) continue;
442 if (TMath::Abs(xyz[0])>3.) continue;
443 if (TMath::Abs(xyz[1])>3.) continue;
445 Double_t pt=t->Pt(),pz=t->Pz();
446 if (TMath::Abs(pz/pt)>0.8) continue;
450 const AliAODPid *pid=t->GetDetPid();
453 Double_t p=pid->GetTPCmomentum();
454 Double_t dedx=pid->GetTPCsignal()/47.;
455 fdEdx->Fill(p,dedx,1);
457 Double_t nsig=pidResponse->NumberOfSigmasTPC(t,AliPID::kProton);
458 if (TMath::Abs(nsig) < 3.) fdEdxPid->Fill(p,dedx,1);
464 Int_t nv0 = aod->GetNumberOfV0s();
466 AliAODv0 *v0=aod->GetV0(nv0);
468 if (!AcceptV0(v0,aod)) continue;
470 const AliAODTrack *ntrack=(AliAODTrack *)v0->GetDaughter(1);
471 const AliAODTrack *ptrack=(AliAODTrack *)v0->GetDaughter(0);
473 Double_t xyz[3]; v0->GetSecondaryVtx(xyz);
474 Double_t dxv=xyz[0]-xv, dyv=xyz[1]-yv;
475 Double_t lt=TMath::Sqrt(dxv*dxv + dyv*dyv);
477 Double_t pt=TMath::Sqrt(v0->Pt2V0());
479 Bool_t ctK=kTRUE; if (0.4977*lt/pt > 3*2.68) ctK=kFALSE;
480 Bool_t ctL=kTRUE; if (1.1157*lt/pt > 3*7.89) ctL=kFALSE;
482 Bool_t isProton =AcceptPID(pidResponse, ptrack, stack);
483 Bool_t isProtonBar=AcceptPID(pidResponse, ntrack, stack);
487 Int_t ntrk=stack->GetEntriesFast();
489 Int_t nlab=TMath::Abs(ntrack->GetLabel());
490 if (nlab<0) goto noas;
491 if (nlab>=ntrk) goto noas;
492 AliAODMCParticle *np=(AliAODMCParticle*)stack->UncheckedAt(nlab);
494 Int_t plab=TMath::Abs(ptrack->GetLabel());
495 if (plab<0) goto noas;
496 if (plab>=ntrk) goto noas;
497 AliAODMCParticle *pp=(AliAODMCParticle*)stack->UncheckedAt(plab);
499 Int_t i0=pp->GetMother();
500 //if (np->GetMother() != i0) goto noas;
502 Int_t in0=np->GetMother();
503 if (in0<0) goto noas;
504 if (in0>=ntrk) goto noas;
505 if (in0 != i0) { // did the negative daughter decay ?
506 AliAODMCParticle *nnp=(AliAODMCParticle*)stack->UncheckedAt(in0);
507 if (nnp->GetMother() != i0) goto noas;
511 if (i0>=ntrk) goto noas;
512 AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(i0);
514 Int_t code=p0->GetPdgCode();
515 if (code != kK0Short)
516 if (code != kLambda0)
517 if (code != kLambda0Bar) goto noas;
519 if (p0->Pt()<pMin) goto noas;
520 if (TMath::Abs(p0->Y())>yMax ) goto noas;
522 Double_t dz0=mcZv - p0->Zv(),dy0=mcYv - p0->Yv(),dx0=mcXv - p0->Xv();
523 Double_t l = TMath::Sqrt(dx0*dx0 + dy0*dy0 + dz0*dz0);
525 dx0 = mcXv - pp->Xv(); dy0 = mcYv - pp->Yv();
526 Double_t ltAs=TMath::Sqrt(dx0*dx0 + dy0*dy0);
527 Double_t ptAs=p0->Pt();
529 if (l > 0.001) { // Secondary V0
530 if (code != kLambda0)
531 if (code != kLambda0Bar) goto noas;
532 Int_t nx=p0->GetMother();
534 if (nx>=ntrk) goto noas;
535 AliAODMCParticle *xi=(AliAODMCParticle*)stack->UncheckedAt(nx);
536 Int_t xcode=xi->GetPdgCode();
537 if (code==kLambda0) {
538 if ( xcode != kXiMinus )
539 if( xcode != 3322 ) goto noas;
540 fLambdaFromXi->Fill(ptAs,ltAs,xi->Pt());
541 } else if (code==kLambda0Bar) {
542 if ( xcode != kXiPlusBar )
543 if( xcode != -3322 ) goto noas;
544 fLambdaBarFromXiBar->Fill(ptAs,ltAs,xi->Pt());
547 if (code == kLambda0) {
548 if (ctL) fLambdaAs->Fill(ptAs,ltAs);
549 }else if (code == kLambda0Bar) {
550 if (ctL) fLambdaBarAs->Fill(ptAs,ltAs);
552 if (ctK) fK0sAs->Fill(ptAs,ltAs);
561 Double_t dca=v0->DcaV0Daughters();
562 Double_t cpa=v0->CosPointingAngle(aod->GetPrimaryVertex());
564 Double_t mass=0., m=0., s=0.;
566 if (TMath::Abs(v0->RapK0Short())<yMax) {
567 mass=v0->MassK0Short();
568 fK0sM->Fill(mass,pt);
570 m=TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
571 s=0.0044 + (0.008-0.0044)/(10-1)*(pt - 1.);
572 if (TMath::Abs(m-mass) < 3*s) {
575 if (TMath::Abs(m-mass + 4.5*s) < 1.5*s) {
576 fK0sSi->Fill(pt,lt,-1);
578 if (TMath::Abs(m-mass - 4.5*s) < 1.5*s) {
579 fK0sSi->Fill(pt,lt,-1);
585 if (TMath::Abs(v0->RapLambda())<yMax) {
586 mass=v0->MassLambda();
587 fLambdaM->Fill(mass,pt);
589 m=TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
590 //s=0.0027 + (0.004-0.0027)/(10-1)*(pt-1);
591 //s=0.0015 + (0.002-0.0015)/(2.6-1)*(pt-1);
592 s=0.0023 + (0.004-0.0023)/(6-1)*(pt-1);
593 if (TMath::Abs(m-mass) < 3*s) {
594 fLambdaSi->Fill(pt,lt);
598 if (TMath::Abs(m-mass + 4.5*s) < 1.5*s) {
599 fLambdaSi->Fill(pt,lt,-1);
603 if (TMath::Abs(m-mass - 4.5*s) < 1.5*s) {
604 fLambdaSi->Fill(pt,lt,-1);
612 if (TMath::Abs(v0->RapLambda())<yMax) {
613 mass=v0->MassAntiLambda();
614 fLambdaBarM->Fill(mass,pt);
616 m=TDatabasePDG::Instance()->GetParticle(kLambda0Bar)->Mass();
617 //s=0.0027 + (0.004-0.0027)/(10-1)*(pt-1);
618 //s=0.0015 + (0.002-0.0015)/(2.6-1)*(pt-1);
619 s=0.0023 + (0.004-0.0023)/(6-1)*(pt-1);
620 if (TMath::Abs(m-mass) < 3*s) {
621 fLambdaBarSi->Fill(pt,lt);
625 if (TMath::Abs(m-mass + 4.5*s) < 1.5*s) {
626 fLambdaBarSi->Fill(pt,lt,-1);
630 if (TMath::Abs(m-mass - 4.5*s) < 1.5*s) {
631 fLambdaBarSi->Fill(pt,lt,-1);
638 Int_t ncs=aod->GetNumberOfCascades();
639 for (Int_t i=0; i<ncs; i++) {
640 AliAODcascade *cs=aod->GetCascade(i);
642 if (TMath::Abs(cs->RapXi()) > yMax) continue;
643 if (!AcceptCascade(cs,aod)) continue;
645 const AliAODv0 *v0=(AliAODv0*)cs;
646 if (v0->RapLambda() > yMax) continue;
647 if (!AcceptV0(v0,aod)) continue;
649 Double_t pt=TMath::Sqrt(cs->Pt2Xi());
651 const AliAODTrack *ptrack=(AliAODTrack *)v0->GetDaughter(0);
652 Bool_t isProton=AcceptPID(pidResponse, ptrack, stack);
654 const AliAODTrack *ntrack=(AliAODTrack *)v0->GetDaughter(1);
655 Bool_t isProtonBar=AcceptPID(pidResponse, ntrack, stack);
657 Int_t charge=cs->ChargeXi();
660 Double_t mass=cs->MassXi();
662 Double_t m=TDatabasePDG::Instance()->GetParticle(kXiMinus)->Mass();
664 Double_t s=0.002 + (0.0032-0.002)/(6-1.5)*(pt-1.5);
665 if (TMath::Abs(m-mass) < 3*s) {
668 if (TMath::Abs(m-mass + 4.5*s) < 1.5*s) {
671 if (TMath::Abs(m-mass - 4.5*s) < 1.5*s) {
677 Double_t mass=cs->MassXi();
678 fXiBarM->Fill(mass,pt);
679 Double_t m=TDatabasePDG::Instance()->GetParticle(kXiPlusBar)->Mass();
681 Double_t s=0.002 + (0.0032-0.002)/(6-1.5)*(pt-1.5);
682 if (TMath::Abs(m-mass) < 3*s) {
685 if (TMath::Abs(m-mass + 4.5*s) < 1.5*s) {
686 fXiBarSiP->Fill(pt,-1);
688 if (TMath::Abs(m-mass - 4.5*s) < 1.5*s) {
689 fXiBarSiP->Fill(pt,-1);
696 void AliAnalysisTaskCTauPbPbaod::Terminate(Option_t *)
698 // The Terminate() function is the last function to be called during
699 // a query. It always runs on the client, it can be used to present
700 // the results graphically or save the results to file.
702 fOutput=(TList*)GetOutputData(1);
704 Printf("ERROR: fOutput not available");
708 fMult = dynamic_cast<TH1F*>(fOutput->FindObject("fMult")) ;
710 Printf("ERROR: fMult not available");
714 fdEdx = dynamic_cast<TH2F*>(fOutput->FindObject("fdEdx")) ;
716 Printf("ERROR: fdEdx not available");
720 fdEdxPid = dynamic_cast<TH2F*>(fOutput->FindObject("fdEdxPid")) ;
722 Printf("ERROR: fdEdxPid not available");
727 fK0sMC = dynamic_cast<TH2F*>(fOutput->FindObject("fK0sMC")) ;
729 Printf("ERROR: fK0sMC not available");
732 TH1D *k0sMcPx=fK0sMC->ProjectionX(); k0sMcPx->Sumw2();
733 fK0sAs = dynamic_cast<TH2F*>(fOutput->FindObject("fK0sAs")) ;
735 Printf("ERROR: fK0sAs not available");
738 TH1D *k0sAsPx=fK0sAs->ProjectionX();
739 k0sAsPx->Sumw2(); //k0sAsPx->Scale(0.69);
743 fLambdaFromXi = dynamic_cast<TH3F*>(fOutput->FindObject("fLambdaFromXi")) ;
744 if (!fLambdaFromXi) {
745 Printf("ERROR: fLambdaFromXi not available");
748 TH1D *lambdaFromXiPx=fLambdaFromXi->ProjectionX(); lambdaFromXiPx->Sumw2();
751 fLambdaMC = dynamic_cast<TH2F*>(fOutput->FindObject("fLambdaMC")) ;
753 Printf("ERROR: fLambdaMC not available");
756 TH1D *lambdaMcPx=fLambdaMC->ProjectionX(); lambdaMcPx->Sumw2();
758 fLambdaAs = dynamic_cast<TH2F*>(fOutput->FindObject("fLambdaAs")) ;
760 Printf("ERROR: fLambdaAs not available");
763 TH1D *lambdaAsPx=fLambdaAs->ProjectionX();
764 lambdaAsPx->Sumw2(); //lambdaAsPx->Scale(0.64);
766 fLambdaSi = dynamic_cast<TH2F*>(fOutput->FindObject("fLambdaSi")) ;
768 Printf("ERROR: fLambdaSi not available");
771 TH1D *lambdaSiPx=fLambdaSi->ProjectionX();
772 lambdaSiPx->SetName("fLambdaPt");
775 fLambdaEff = dynamic_cast<TH1D*>(fOutput->FindObject("fLambdaEff")) ;
777 Printf("ERROR: fLambdaEff not available");
780 fLambdaPt = dynamic_cast<TH1D*>(fOutput->FindObject("fLambdaPt")) ;
782 Printf("ERROR: fLambdaPt not available");
787 if (!gROOT->IsBatch()) {
789 TCanvas *c1 = new TCanvas("c1","Mulitplicity");
793 new TCanvas("c2","dE/dx");
796 new TCanvas("c3","dE/dx with PID");
797 fdEdxPid->DrawCopy() ;
801 TH1D effK(*k0sAsPx); effK.SetTitle("Efficiency for K0s");
802 effK.Divide(k0sAsPx,k0sMcPx,1,1,"b");
803 new TCanvas("c4","Efficiency for K0s");
807 fLambdaEff->Divide(lambdaAsPx,lambdaMcPx,1,1,"b");
808 new TCanvas("c5","Efficiency for #Lambda");
809 fLambdaEff->DrawCopy("E") ;
811 lambdaSiPx->Add(lambdaFromXiPx,-1);
812 lambdaSiPx->Divide(fLambdaEff);
814 new TCanvas("c6","Corrected #Lambda pt");
815 lambdaSiPx->SetTitle("Corrected #Lambda pt");
816 *fLambdaPt = *lambdaSiPx;
817 fLambdaPt->SetLineColor(2);
818 fLambdaPt->DrawCopy("E");
820 lambdaMcPx->DrawCopy("same");
823 new TCanvas("c6","Raw #Lambda pt");
824 lambdaSiPx->SetTitle("Raw #Lambda pt");
825 *fLambdaPt = *lambdaSiPx;
826 fLambdaPt->SetLineColor(2);
827 fLambdaPt->DrawCopy("E");