31 #include "AliAnalysisTaskSE.h" 32 #include "AliAnalysisManager.h" 34 #include "AliVParticle.h" 35 #include "AliESDEvent.h" 36 #include "AliESDInputHandler.h" 38 #include "AliESDcascade.h" 39 #include "AliESDtrack.h" 40 #include "AliESDtrackCuts.h" 41 #include "AliCentrality.h" 42 #include "AliVVertex.h" 43 #include "AliESDVZERO.h" 44 #include "AliESDUtils.h" 46 #include "AliTPCPIDResponse.h" 47 #include "AliTOFPIDResponse.h" 48 #include "AliPIDResponse.h" 50 #include "AliAODEvent.h" 51 #include "AliAODInputHandler.h" 52 #include "AliAODTrack.h" 53 #include "AliAODVZERO.h" 54 #include "AliAODcascade.h" 57 #include "TObjArray.h" 89 for (
Int_t i=0; i!=8; ++i)
107 fCutsEvent(cutsEvent),
108 fCutsRPTPC(cutsRPTPC),
109 fCutsRPVZE(cutsRPVZE),
119 for (
Int_t i=0; i!=8; ++i)
122 DefineInput( 0,TChain::Class());
123 DefineOutput(1,AliFlowEventSimple::Class());
124 DefineOutput(2,AliFlowEventSimple::Class());
125 DefineOutput(3,TList::Class());
146 AliInputEventHandler* inputHandler
147 = (AliInputEventHandler*) (man->GetInputEventHandler());
200 tQAEvents->SetName(
"Events");
201 tQAEvents->SetOwner();
202 TH1I* tEvent =
new TH1I(
"Event",
"Number of Events", 3,0,3);
203 tQAEvents->Add(tEvent);
206 "TPC Reference Flow Particles;multiplicity",
208 tQAEvents->Add(tTPCRFP);
210 "VZERO Reference Flow Particles;multiplicity",
212 tQAEvents->Add(tVZERFP);
214 TProfile *tCuts =
new TProfile(
"Cuts",
"Analysis Cuts",10,0,10);
216 tCuts->GetXaxis()->SetBinLabel(1,
"dcaXiDau");
218 tCuts->GetXaxis()->SetBinLabel(2,
"XiCPA");
220 tCuts->GetXaxis()->SetBinLabel(3,
"dcaV0Vtx");
222 tCuts->GetXaxis()->SetBinLabel(4,
"dcaBachVtx");
224 tCuts->GetXaxis()->SetBinLabel(5,
"dcaV0Dau");
226 tCuts->GetXaxis()->SetBinLabel(6,
"V0CPA");
228 tCuts->GetXaxis()->SetBinLabel(7,
"dcaV0DauVtx");
230 tCuts->GetXaxis()->SetBinLabel(8,
"V0Mass");
231 tQAEvents->Add(tCuts);
239 TList *tQACandidates;
241 tQACandidates =
new TList();
242 tQACandidates->SetOwner();
243 tQACandidates->SetName(
"Candidates");
245 TH1F* tChi2Xi =
new TH1F(
"Chi2Xi",
246 "Cascade #chi^{2}; #chi^{2}; Number of Cascades",
248 tQACandidates->Add(tChi2Xi);
250 TH1F* tDCAXiDaughters
251 =
new TH1F(
"DcaXiDaughters",
252 "DCA between Xi Daughters; DCA (cm); Number of Cascades",
254 tQACandidates->Add(tDCAXiDaughters);
256 TH1F * tDCABachToPrimVertex
257 =
new TH1F(
"DcaBachToPrimVertex",
258 "DCA of Bach. to Prim. Vertex; DCA (cm);Number of Cascades",
260 tQACandidates->Add(tDCABachToPrimVertex);
262 TH1F * tXiCosOfPointingAngle
263 =
new TH1F(
"XiCosOfPointingAngle",
264 "Cos of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis",
266 tQACandidates->Add(tXiCosOfPointingAngle);
268 TH1F * tXiRadius =
new TH1F(
"XiRadius",
269 "Casc. decay transv. radius; r (cm); Counts" ,
271 tQACandidates->Add(tXiRadius);
274 =
new TH1F(
"MassLambdaAsCascDghter",
275 "#Lambda assoc. to Casc. candidates; Eff. Mass (GeV/c^{2}); Counts",
277 tQACandidates->Add(tMassLambda);
279 TH1F *tV0Chi2 =
new TH1F(
"V0Chi2Xi",
280 "V0 #chi^{2}, in cascade; #chi^{2};Counts",
282 tQACandidates->Add(tV0Chi2);
284 TH1F * tV0CosOfPointingAngle
285 =
new TH1F(
"V0CosOfPointingAngleXi",
286 "Cos of V0 Pointing Angle, in cascade;Cos(V0 Point. Angl); Counts",
288 tQACandidates->Add(tV0CosOfPointingAngle);
290 TH1F *tV0Radius =
new TH1F(
"V0RadiusXi",
291 "V0 decay radius, in cascade; radius (cm); Counts",
293 tQACandidates->Add(tV0Radius);
295 TH1F * tDcaV0DaughtersXi
296 =
new TH1F(
"DcaV0DaughtersXi",
297 "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s",
299 tQACandidates->Add(tDcaV0DaughtersXi);
301 TH1F * tDcaV0ToPrimVertex
302 =
new TH1F(
"DcaV0ToPrimVertexXi",
303 "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.);
304 tQACandidates->Add(tDcaV0ToPrimVertex);
306 TH1F * tDCAPosToPrimVertex =
307 new TH1F(
"DcaPosToPrimVertexXi",
308 "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Counts",
310 tQACandidates->Add(tDCAPosToPrimVertex);
312 TH1F * tDCANegToPrimVertex
313 =
new TH1F(
"DcaNegToPrimVertexXi",
314 "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Counts",
316 tQACandidates->Add(tDCANegToPrimVertex);
318 TH1F *tV0toXiCosOfPointingAngle
319 =
new TH1F(
"V0toXiCosOfPointingAngle",
320 "Cos. of V0 Ptng Angl Xi vtx; Cos(V0 Point. Angl / Xi vtx); Counts",
322 tQACandidates->Add(tV0toXiCosOfPointingAngle);
325 =
new TH2F(
"Armenteros",
326 "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm} ; Pt_{Arm} (GeV/c)",
327 140, -1.2, 1.2, 300, 0., 0.3);
328 tQACandidates->Add(th2Armenteros);
330 TH2F *th2TPCdEdxOfCascDghters
331 =
new TH2F(
"TPCdEdxOfCascDghters",
332 "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC) ",
333 200, -10.0, 10.0, 450, 0., 900.);
334 tQACandidates->Add(th2TPCdEdxOfCascDghters);
337 =
new TH2F(
"MassVsPtAll",
338 "M_{candidates} vs Pt; Pt (GeV/c); M (GeV/c^{2})",
340 tQACandidates->Add(th2MassVsPtAll);
342 TH1F *tDistToVtxZAfter
343 =
new TH1F(
"DistToVtxZAfter",
344 "Distance to vtx z after propagation to vtx; z [cm]",
346 tQACandidates->Add(tDistToVtxZAfter);
348 TH1F * tDistToVtxXYAfter
349 =
new TH1F(
"DistToVtxXYAfter",
350 "Distance to vtx xy after propagation to vtx",
352 tQACandidates->Add(tDistToVtxXYAfter);
354 TH2F *th2DistToVtxZBeforeVsAfter
355 =
new TH2F(
"DistToVtxZBeforeVsAfter",
356 "Distance to vtx z before vs after propagation; Distance before [cm]; Distance after [cm]",
357 500, -50., 50., 100, -5., 5.);
358 tQACandidates->Add(th2DistToVtxZBeforeVsAfter);
360 TH2F *th2DistToVtxXYBeforeVsAfter
361 =
new TH2F(
"DistToVtxXYBeforeVsAfter",
362 "Distance to vtx xy before vs after propagation; Distance before [cm]; Distance after [cm]",
363 500, 0., 50, 500, 0., 50);
364 tQACandidates->Add(th2DistToVtxXYBeforeVsAfter);
366 TH2F * th2PxBeforeVsAfter
367 =
new TH2F(
"PxBeforeVsAfter",
368 "Px before vs after propagation; Px [GeV/c]; Px' [GeV/c]",
369 200, -10., 10, 200, -10., 10.);
370 tQACandidates->Add(th2PxBeforeVsAfter);
372 TH2F * th2PyBeforeVsAfter
373 =
new TH2F(
"PyBeforeVsAfter",
374 "Py before vs after propagation; Py [GeV/c]; Py' [GeV/c]",
375 200, -10., 10, 200, -10., 10.);
376 tQACandidates->Add(th2PyBeforeVsAfter);
378 TH2F * th2PhiPosBeforeVsAfter
379 =
new TH2F(
"PhiPosBeforeVsAfter",
380 "Phi for positively charged candidates before vs after propagation; #phi; #phi'",
381 360, 0., 2.0*TMath::Pi(), 360, 0., 2.0*TMath::Pi());
382 tQACandidates->Add(th2PhiPosBeforeVsAfter);
384 TH2F *th2PhiNegBeforeVsAfter
385 =
new TH2F(
"PhiNegBeforeVsAfter",
386 "Phi for negatively charged candidates before vs after propagation; #phi; #phi'",
387 360, 0., 2.0*TMath::Pi(), 360, 0., 2.0*TMath::Pi());
388 tQACandidates->Add(th2PhiNegBeforeVsAfter);
402 Bool_t acceptEvent=kFALSE;
419 const AliVVertex *vtxGlb = fESD->GetPrimaryVertexTracks();
420 const AliVVertex *vtxSPD = fESD->GetPrimaryVertexSPD();
421 if(!vtxGlb || !vtxSPD)
return;
428 const AliVVertex *vtxGlb = fAOD->GetPrimaryVertex();
429 const AliVVertex *vtxSPD = fAOD->GetPrimaryVertexSPD();
430 if(!vtxGlb || !vtxSPD)
return;
461 if(!acceptEvent)
return;
490 for(
int iCand=0; iCand!=
fCandidates->GetEntriesFast(); ++iCand ) {
544 Double_t trkPrimaryVtxPos[3] = {-100., -100., -100.};
545 Double_t bestPrimaryVtxPos[3] = {-100., -100., -100.};
546 int nCascades=fESD->GetNumberOfCascades();
548 const AliESDVertex *primaryTrackingESDVtx = fESD->GetPrimaryVertexTracks();
549 primaryTrackingESDVtx->GetXYZ(trkPrimaryVtxPos);
551 const AliESDVertex *primaryBestESDVtx = fESD->GetPrimaryVertex();
552 primaryBestESDVtx->GetXYZ(bestPrimaryVtxPos);
554 Double_t b = fESD->GetMagneticField();
556 for(
int i = 0; i != nCascades; ++i) {
563 Double_t XiCosOfPointingAngle = -1.;
564 Double_t posXi[3] = {-1000., -1000., -1000.};
570 Double_t invMassLambdaAsCascDghter = 0.;
574 Double_t dcaBachToPrimaryVtxXi = -1.;
576 Double_t dcaPosToPrimaryVtxXi = -1.;
577 Double_t dcaNegToPrimaryVtxXi = -1.;
578 Double_t V0CosOfPointingAngleXi = -1.;
579 Double_t posV0Xi[3] = {-1000., -1000., -1000.};
603 Bool_t isBachelorKaonForTPC = kFALSE;
604 Bool_t isBachelorPionForTPC = kFALSE;
605 Bool_t isNegPionForTPC = kFALSE;
606 Bool_t isPosPionForTPC = kFALSE;
607 Bool_t isNegProtonForTPC = kFALSE;
608 Bool_t isPosProtonForTPC = kFALSE;
610 Double_t XiPx = 0., XiPy = 0., XiPz = 0.;
614 Double_t bachPx = 0., bachPy = 0., bachPz = 0.;
619 Double_t V0toXiCosOfPointingAngle = 0.;
632 Double_t XiPAfter[3] = {-999., -999., -999.};
635 AliESDcascade *xi = fESD->GetCascade(i);
639 xi->ChangeMassHypothesis(V0quality, 3312);
640 else if(xi->Charge() > 0)
641 xi->ChangeMassHypothesis(V0quality, -3312);
644 effMassXi = xi->GetEffMassXi();
645 chi2Xi = xi->GetChi2Xi();
646 dcaXiDaughters = xi->GetDcaXiDaughters();
648 = xi->GetCascadeCosineOfPointingAngle(bestPrimaryVtxPos[0],
649 bestPrimaryVtxPos[1],
650 bestPrimaryVtxPos[2]);
651 xi->GetXYZcascade(posXi[0], posXi[1], posXi[2]);
652 XiRadius = TMath::Sqrt(posXi[0]*posXi[0]
660 if(idxBach == idxPosXi || idxBach == idxNegXi)
continue;
662 AliESDtrack *pTrkXi = fESD->GetTrack(idxPosXi);
663 AliESDtrack *nTrkXi = fESD->GetTrack(idxNegXi);
664 AliESDtrack *bTrkXi = fESD->GetTrack(idxBach);
666 if( !pTrkXi || !nTrkXi || !bTrkXi )
continue;
672 const AliExternalTrackParam *pExtTrk = pTrkXi->GetInnerParam();
673 const AliExternalTrackParam *nExtTrk = nTrkXi->GetInnerParam();
674 const AliExternalTrackParam *bExtTrk = bTrkXi->GetInnerParam();
676 if(pExtTrk && pTrkXi->IsOn(AliESDtrack::kTPCin)){
677 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(pExtTrk->GetP()*pExtTrk->Charge(), pTrkXi->GetTPCsignal());
679 if(nExtTrk && nTrkXi->IsOn(AliESDtrack::kTPCin)){
680 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(nExtTrk->GetP()*nExtTrk->Charge(), nTrkXi->GetTPCsignal());
682 if(bExtTrk && bTrkXi->IsOn(AliESDtrack::kTPCin)){
683 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(bExtTrk->GetP()*bExtTrk->Charge(), bTrkXi->GetTPCsignal());
686 invMassLambdaAsCascDghter = xi->GetEffMass();
687 dcaV0DaughtersXi = xi->GetDcaV0Daughters();
688 V0Chi2Xi = xi->GetChi2V0();
689 V0CosOfPointingAngleXi
690 = xi->GetV0CosineOfPointingAngle(bestPrimaryVtxPos[0],
691 bestPrimaryVtxPos[1],
692 bestPrimaryVtxPos[2]);
693 dcaV0ToPrimaryVtxXi = xi->GetD(bestPrimaryVtxPos[0],
694 bestPrimaryVtxPos[1],
695 bestPrimaryVtxPos[2]);
696 dcaBachToPrimaryVtxXi = TMath::Abs(bTrkXi->GetD(bestPrimaryVtxPos[0],
697 bestPrimaryVtxPos[1],
698 bestPrimaryVtxPos[2]));
701 xi->GetXYZ(posV0Xi[0], posV0Xi[1], posV0Xi[2]);
702 V0RadiusXi = TMath::Sqrt(posV0Xi[0]*posV0Xi[0]
703 +posV0Xi[1]*posV0Xi[1]
704 +posV0Xi[2]*posV0Xi[2]);
705 dcaPosToPrimaryVtxXi = TMath::Abs(pTrkXi->GetD(bestPrimaryVtxPos[0],
706 bestPrimaryVtxPos[1],
707 bestPrimaryVtxPos[2]));
708 dcaNegToPrimaryVtxXi = TMath::Abs(nTrkXi->GetD(bestPrimaryVtxPos[0],
709 bestPrimaryVtxPos[1],
710 bestPrimaryVtxPos[2]));
726 if(TMath::Abs(invMassLambdaAsCascDghter-1.11568) >
fCascadeCuts[7])
743 if(bTrkXi->Charge()<0){
745 xi->ChangeMassHypothesis(V0quality, 3312);
746 invMassXiMinus = xi->GetEffMassXi();
749 xi->ChangeMassHypothesis(V0quality, 3334);
750 invMassOmegaMinus = xi->GetEffMassXi();
753 xi->ChangeMassHypothesis(V0quality, 3312);
756 if(bTrkXi->Charge() > 0){
758 xi->ChangeMassHypothesis(V0quality, -3312);
759 invMassXiPlus = xi->GetEffMassXi();
762 xi->ChangeMassHypothesis(V0quality, -3334);
763 invMassOmegaPlus = xi->GetEffMassXi();
766 xi->ChangeMassHypothesis(V0quality, -3312);
895 isBachelorKaonForTPC = kTRUE;
897 isBachelorPionForTPC = kTRUE;
901 isNegPionForTPC = kTRUE;
903 isNegProtonForTPC = kTRUE;
907 isPosPionForTPC = kTRUE;
909 isPosProtonForTPC = kTRUE;
913 xi->GetPxPyPz(XiPx, XiPy, XiPz);
914 XiPt = TMath::Sqrt(XiPx*XiPx + XiPy*XiPy);
915 XiPtot= TMath::Sqrt(XiPx*XiPx + XiPy*XiPy + XiPz*XiPz);
921 xi->GetBPxPyPz(bachPx, bachPy, bachPz);
922 bachPt = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy);
923 bachPtot = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy + bachPz*bachPz);
927 V0toXiCosOfPointingAngle
928 = xi->GetV0CosineOfPointingAngle(posXi[0], posXi[1], posXi[2]);
930 rapOmega = xi->RapOmega();
932 alphaXi = xi->AlphaXi();
933 ptArmXi = xi->PtArmXi();
935 distToVtxZBefore = posXi[2]-bestPrimaryVtxPos[2];
937 = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
938 *(posXi[0] - bestPrimaryVtxPos[0])
939 +(posXi[1] - bestPrimaryVtxPos[1])
940 *(posXi[1] - bestPrimaryVtxPos[1]));
943 Propagate(bestPrimaryVtxPos, posXi, XiPAfter, b, xi->Charge());
944 distToVtxZAfter = posXi[2] - bestPrimaryVtxPos[2];
945 distToVtxXYAfter = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
946 *(posXi[0] - bestPrimaryVtxPos[0])
947 +(posXi[1] - bestPrimaryVtxPos[1])
948 *(posXi[1] - bestPrimaryVtxPos[1]));
949 phiAfter = TMath::Pi() + TMath::ATan2(-XiPAfter[1],-XiPAfter[0]);
951 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxZAfter"))->Fill(distToVtxZAfter);
952 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxXYAfter"))->Fill(distToVtxXYAfter);
953 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxZBeforeVsAfter"))->Fill(distToVtxZBefore, distToVtxZAfter);
954 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxXYBeforeVsAfter"))->Fill(distToVtxXYBefore, distToVtxXYAfter);
959 else if(xi->Charge()<0)
965 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaBachToPrimVertex"))->Fill(dcaBachToPrimaryVtxXi);
966 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"XiCosOfPointingAngle"))->Fill(XiCosOfPointingAngle);
970 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"MassLambdaAsCascDghter"))->Fill(invMassLambdaAsCascDghter);
972 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaV0DaughtersXi"))->Fill(dcaV0DaughtersXi);
973 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"V0CosOfPointingAngleXi"))->Fill(V0CosOfPointingAngleXi);
975 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaV0ToPrimVertexXi"))->Fill(dcaV0ToPrimaryVtxXi);
976 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaPosToPrimVertexXi"))->Fill(dcaPosToPrimaryVtxXi);
977 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaNegToPrimVertexXi"))->Fill(dcaNegToPrimaryVtxXi);
979 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"V0toXiCosOfPointingAngle"))->Fill(V0toXiCosOfPointingAngle);
984 if(xi->Charge() < 0){
990 if(isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
995 phiAfter, xi->Eta(), pTrkXi->GetID(),
996 nTrkXi->GetID(), bTrkXi->GetID());
1001 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8){
1004 phiAfter, xi->Eta(),
1005 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1012 if(xi->Charge() > 0){
1013 if(isNegProtonForTPC
1014 && isPosPionForTPC){
1018 if(isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
1023 phiAfter, xi->Eta(),
1024 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1029 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8){
1032 phiAfter, xi->Eta(),
1033 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1056 Double_t bestPrimaryVtxPos[3] = {-100., -100., -100.};
1058 Double_t b = fAOD->GetMagneticField();
1060 int nCascades=fAOD->GetNumberOfCascades();
1061 const AliAODVertex *primaryBestAODVtx = fAOD->GetPrimaryVertex();
1062 primaryBestAODVtx->GetXYZ(bestPrimaryVtxPos);
1065 for(
Int_t iXi = 0; iXi < nCascades; iXi++){
1069 Double_t XiCosOfPointingAngle = -1.;
1070 Double_t posXi[3] = {-1000., -1000., -1000.};
1073 Double_t invMassLambdaAsCascDghter = 0.;
1077 Double_t dcaBachToPrimaryVtxXi = -1.;
1078 Double_t dcaV0ToPrimaryVtxXi = -1.;
1079 Double_t dcaPosToPrimaryVtxXi = -1.;
1080 Double_t dcaNegToPrimaryVtxXi = -1.;
1081 Double_t V0CosOfPointingAngleXi = -1.;
1082 Double_t posV0Xi[3] = {-1000., -1000., -1000.};
1107 Bool_t isBachelorKaonForTPC = kFALSE;
1108 Bool_t isBachelorPionForTPC = kFALSE;
1109 Bool_t isNegPionForTPC = kFALSE;
1110 Bool_t isPosPionForTPC = kFALSE;
1111 Bool_t isNegProtonForTPC = kFALSE;
1112 Bool_t isPosProtonForTPC = kFALSE;
1114 Double_t XiPx = 0., XiPy = 0., XiPz = 0.;
1118 Double_t bachPx = 0., bachPy = 0., bachPz = 0.;
1123 Double_t V0toXiCosOfPointingAngle = 0.;
1133 Double_t distToVtxXYBefore = -999.;
1135 Double_t XiPAfter[3] = {-999., -999., -999.};
1138 const AliAODcascade *xi = fAOD->GetCascade(iXi);
1141 effMassXi = xi->MassXi();
1142 chi2Xi = xi->Chi2Xi();
1143 dcaXiDaughters = xi->DcaXiDaughters();
1144 XiCosOfPointingAngle = xi->CosPointingAngleXi(bestPrimaryVtxPos[0],
1145 bestPrimaryVtxPos[1],
1146 bestPrimaryVtxPos[2]);
1147 posXi[0] = xi->DecayVertexXiX();
1148 posXi[1] = xi->DecayVertexXiY();
1149 posXi[2] = xi->DecayVertexXiZ();
1150 XiRadius = TMath::Sqrt(posXi[0]*posXi[0]
1152 +posXi[2]*posXi[2]);
1154 AliAODTrack *pTrkXi =
dynamic_cast<AliAODTrack*
>( xi->GetDaughter(0) );
1155 AliAODTrack *nTrkXi =
dynamic_cast<AliAODTrack*
>( xi->GetDaughter(1) );
1157 =
dynamic_cast<AliAODTrack*
>( xi->GetDecayVertexXi()->GetDaughter(0) );
1159 if(!pTrkXi || !nTrkXi || !bTrkXi)
continue;
1161 UInt_t idxPosXi = (
UInt_t) TMath::Abs( pTrkXi->GetID() );
1162 UInt_t idxNegXi = (
UInt_t) TMath::Abs( nTrkXi->GetID() );
1163 UInt_t idxBach = (
UInt_t) TMath::Abs( bTrkXi->GetID() );
1165 if(idxBach == idxNegXi || idxBach == idxPosXi)
continue;
1172 if(pTrkXi->IsOn(AliESDtrack::kTPCin)){
1173 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(pTrkXi->P()*pTrkXi->Charge(), pTrkXi->GetTPCsignal());
1175 if( nTrkXi->IsOn(AliESDtrack::kTPCin) ){
1176 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(nTrkXi->P()*nTrkXi->Charge(), nTrkXi->GetTPCsignal());
1178 if(bTrkXi->IsOn(AliESDtrack::kTPCin)){
1179 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"TPCdEdxOfCascDghters"))->Fill(bTrkXi->P()*bTrkXi->Charge(), bTrkXi->GetTPCsignal());
1182 if(xi->ChargeXi() < 0)
1183 invMassLambdaAsCascDghter = xi->MassLambda();
1185 invMassLambdaAsCascDghter = xi->MassAntiLambda();
1187 dcaV0DaughtersXi = xi->DcaV0Daughters();
1188 V0Chi2Xi = xi->Chi2V0();
1189 V0CosOfPointingAngleXi
1190 = xi->CosPointingAngle(bestPrimaryVtxPos);
1191 dcaV0ToPrimaryVtxXi = xi->DcaV0ToPrimVertex();
1192 dcaBachToPrimaryVtxXi = xi->DcaBachToPrimVertex();
1195 posV0Xi[0] = xi->DecayVertexV0X();
1196 posV0Xi[1] = xi->DecayVertexV0Y();
1197 posV0Xi[2] = xi->DecayVertexV0Z();
1198 V0RadiusXi = TMath::Sqrt(posV0Xi[0]*posV0Xi[0]
1199 +posV0Xi[1]*posV0Xi[1]
1200 +posV0Xi[2]*posV0Xi[2]);
1201 dcaPosToPrimaryVtxXi = xi->DcaPosToPrimVertex();
1202 dcaNegToPrimaryVtxXi = xi->DcaNegToPrimVertex();
1218 if(TMath::Abs(invMassLambdaAsCascDghter-1.11568) >
fCascadeCuts[7])
1236 if(xi->ChargeXi()<0){
1237 invMassXiMinus = xi->MassXi();
1238 invMassOmegaMinus = xi->MassOmega();
1240 invMassXiPlus = xi->MassXi();
1241 invMassOmegaPlus = xi->MassOmega();
1271 isBachelorKaonForTPC = kTRUE;
1273 isBachelorPionForTPC = kTRUE;
1277 isNegPionForTPC = kTRUE;
1279 isNegProtonForTPC = kTRUE;
1283 isPosPionForTPC = kTRUE;
1285 isPosProtonForTPC = kTRUE;
1288 XiPx = xi->MomXiX();
1289 XiPy = xi->MomXiY();
1290 XiPz = xi->MomXiZ();
1291 XiPt = TMath::Sqrt(XiPx*XiPx + XiPy*XiPy);
1292 XiPtot= TMath::Sqrt(XiPx*XiPx + XiPy*XiPy + XiPz*XiPz);
1294 bachPx = xi->MomBachX();
1295 bachPy = xi->MomBachY();
1296 bachPz = xi->MomBachZ();
1298 bachPt = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy);
1299 bachPtot = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy + bachPz*bachPz);
1301 V0toXiCosOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
1303 rapXi = xi->RapXi();
1304 rapOmega = xi->RapOmega();
1306 alphaXi = xi->AlphaXi();
1307 ptArmXi = xi->PtArmXi();
1309 distToVtxZBefore = posXi[2]-bestPrimaryVtxPos[2];
1311 = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
1312 *(posXi[0] - bestPrimaryVtxPos[0])
1313 +(posXi[1] - bestPrimaryVtxPos[1])
1314 *(posXi[1] - bestPrimaryVtxPos[1]));
1321 Propagate(bestPrimaryVtxPos, posXi, XiPAfter, b, xi->ChargeXi());
1322 distToVtxZAfter = posXi[2] - bestPrimaryVtxPos[2];
1323 distToVtxXYAfter = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
1324 *(posXi[0] - bestPrimaryVtxPos[0])
1325 +(posXi[1] - bestPrimaryVtxPos[1])
1326 *(posXi[1] - bestPrimaryVtxPos[1]));
1327 phiAfter = TMath::Pi() + TMath::ATan2(-XiPAfter[1],-XiPAfter[0]);
1329 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxZAfter"))->Fill(distToVtxZAfter);
1330 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxXYAfter"))->Fill(distToVtxXYAfter);
1331 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxZBeforeVsAfter"))->Fill(distToVtxZBefore, distToVtxZAfter);
1332 ((
TH2F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DistToVtxXYBeforeVsAfter"))->Fill(distToVtxXYBefore, distToVtxXYAfter);
1335 if(xi->ChargeXi()>0)
1337 else if(xi->ChargeXi()<0)
1342 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaXiDaughters"))->Fill(dcaXiDaughters);
1343 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaBachToPrimVertex"))->Fill(dcaBachToPrimaryVtxXi);
1344 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"XiCosOfPointingAngle"))->Fill(XiCosOfPointingAngle);
1348 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"MassLambdaAsCascDghter"))->Fill(invMassLambdaAsCascDghter);
1350 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaV0DaughtersXi"))->Fill(dcaV0DaughtersXi);
1351 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"V0CosOfPointingAngleXi"))->Fill(V0CosOfPointingAngleXi);
1353 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaV0ToPrimVertexXi"))->Fill(dcaV0ToPrimaryVtxXi);
1354 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaPosToPrimVertexXi"))->Fill(dcaPosToPrimaryVtxXi);
1355 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"DcaNegToPrimVertexXi"))->Fill(dcaNegToPrimaryVtxXi);
1357 ((TH1F*)((
TList*)
fQAList->FindObject(
"Candidates"))->
FindObject(
"V0toXiCosOfPointingAngle"))->Fill(V0toXiCosOfPointingAngle);
1362 if(xi->ChargeXi()<0){
1363 if(isPosProtonForTPC && isNegPionForTPC){
1366 if( isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
1369 phiAfter, xi->Eta(),
1370 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1376 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8
1377 && (invMassXiMinus > 1.32486 || invMassXiMinus < 1.30486)){
1381 phiAfter, xi->Eta(),
1382 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1389 if(xi->ChargeXi() > 0){
1390 if(isNegProtonForTPC && isPosPionForTPC){
1393 if (isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
1398 phiAfter, xi->Eta(),
1399 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1404 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8
1405 && (invMassXiPlus > 1.32486 || invMassXiPlus < 1.30486)){
1408 phiAfter, xi->Eta(),
1409 pTrkXi->GetID(), nTrkXi->GetID(), bTrkXi->GetID());
1432 Bool_t overwrite = kTRUE;
1478 Double_t pp = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
1479 Double_t len = (vv[2]-x[2])*pp/p[2];
1483 x[0] += p[0]*TMath::Sin(rho*len)/a - p[1]*(1-TMath::Cos(rho*len))/a;
1484 x[1] += p[1]*TMath::Sin(rho*len)/a + p[0]*(1-TMath::Cos(rho*len))/a;
1485 x[2] += p[2]*len/pp;
1488 p[0] = p0 *TMath::Cos(rho*len) - p[1]*TMath::Sin(rho*len);
1489 p[1] = p[1]*TMath::Cos(rho*len) + p0 *TMath::Sin(rho*len);
void SetMassMin(Double_t i)
void SetEta(Double_t eta)
void ReadFromESDv0(AliESDEvent *fESD)
Int_t GetNumberOfRPs() const
void SetNbinsPhi(Int_t i)
void SetPhiMin(Double_t i)
void AddDaughter(Int_t value)
void SetMass(Double_t mass)
void SetEtaMax(Double_t i)
virtual Bool_t IsSelected(TObject *obj, Int_t id=-666)
void SetParamType(trackParameterType paramType)
AliPIDResponse * fPIDResponse
trackParameterType GetParamType() const
Bool_t InRPSelection() const
AliFlowTrack * GetTrack(Int_t i)
void SetCommonConstants(Int_t massBins, Double_t minMass, Double_t maxMass)
void SetForRPSelection(Bool_t b=kTRUE)
void SetPtRange(Float_t r1, Float_t r2)
Int_t GetNDaughters(void) const
void SetNumberOfRPs(Int_t nr)
void Fill(AliFlowTrackCuts *rpCuts, AliFlowTrackCuts *poiCuts)
virtual void UserExec(Option_t *)
void SetNbinsEta(Int_t i)
virtual void UserCreateOutputObjects()
virtual ~AliAnalysisTaskFlowCascade()
AliFlowTrackCuts * fCutsRPVZE
void SetNbinsMult(Int_t i)
void SetMassMax(Double_t i)
static AliFlowCommonConstants * GetMaster()
AliFlowTrackCuts * fCutsRPTPC
void ReadFromAODv0(AliAODEvent *fAOD)
void SetNbinsMass(Int_t i)
AliFlowTrackCuts * fCutsDau
AliFlowEvent * fFlowEventTPC
TObject * FindObject(int bin, const char *nameH, const TList *lst, Bool_t normPerEvent=kTRUE)
void SetPhi(Double_t phi)
AliAnalysisTaskFlowCascade()
list for QA histos
void SetMultMax(Double_t i)
Int_t GetIDDaughter(Int_t value) const
void SetPtMax(Double_t i)
void Propagate(Double_t vv[3], Double_t x[3], Double_t p[3], Double_t bz, Short_t sign)
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
virtual void Terminate(Option_t *)
void SetPhiMax(Double_t i)
void SetEtaMin(Double_t i)
AliFlowTrackCuts * fCutsPOI
void SetForPOISelection(Bool_t b=kTRUE)
AliFlowEvent * fFlowEventVZE
void SetMultMin(Double_t i)
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
void MakeTrack(double mass, double pt, double phi, double eta, int iid, int jid, int kid)
AliFlowEventCuts * fCutsEvent
void SetPtMin(Double_t i)
void SetCuts2010(int setOfCuts)
void InsertTrack(AliFlowTrack *)
void SetEtaRange(Float_t r1, Float_t r2)
Int_t NumberOfTracks() const