11 #include "TProfile2D.h"
14 #include "AliAnalysisTaskSE.h"
15 #include "AliAnalysisManager.h"
17 #include "AliESDEvent.h"
19 #include "AliESDcascade.h"
20 #include "AliVVertex.h"
22 #include "AliESDtrack.h"
23 #include "AliESDtrackCuts.h"
24 #include "AliESDVZERO.h"
25 #include "AliESDUtils.h"
27 #include "AliAODEvent.h"
29 #include "AliESDInputHandler.h"
30 #include "AliCentrality.h"
31 #include "AliMultiplicity.h"
37 #include "AliTPCPIDResponse.h"
38 #include "AliTOFPIDResponse.h"
39 #include "AliPIDResponse.h"
41 #include "AliOADBContainer.h"
74 ,fh1DCAXiDaughters(0x0)
75 ,fh1DCABachToPrimVertex(0x0)
76 ,fh1XiCosOfPointingAngle(0x0)
80 ,fh1V0CosOfPointingAngle(0x0)
82 ,fh1DcaV0DaughtersXi(0x0)
83 ,fh1DcaV0ToPrimVertex(0x0)
84 ,fh1DCAPosToPrimVertex(0x0)
85 ,fh1DCANegToPrimVertex(0x0)
88 ,fh1MassOmegaMinus(0x0)
89 ,fh1MassOmegaPlus(0x0)
97 ,fh1V0toXiCosOfPointingAngle(0x0)
100 ,fh2MassLambdaVsMassXiMinus(0x0)
101 ,fh2MassXiVsMassOmegaMinus(0x0)
102 ,fh2MassLambdaVsMassXiPlus(0x0)
103 ,fh2MassXiVsMassOmegaPlus(0x0)
104 ,fh2XiRadiusVsMassXiMinus(0x0)
105 ,fh2XiRadiusVsMassXiPlus(0x0)
106 ,fh2XiRadiusVsMassOmegaMinus(0x0)
107 ,fh2XiRadiusVsMassOmegaPlus(0x0)
108 ,fh2TPCdEdxOfCascDghters(0x0)
109 ,fh2MassVsPtXiMinus(0x0)
110 ,fh2MassVsPtXiPlus(0x0)
111 ,fh2MassVsPtXiAll(0x0)
112 ,fh2MassVsPtOmegaMinus(0x0)
113 ,fh2MassVsPtOmegaPlus(0x0)
114 ,fh2MassVsPtOmegaAll(0x0)
116 ,fhOmegaRapidity (0x0)
117 ,fProfResolution (0x0)
118 ,fh1DistToVtxZAfter(0x0)
119 ,fh1DistToVtxXYAfter(0x0)
120 ,fh2DistToVtxZBeforeVsAfter(0x0)
121 ,fh2DistToVtxXYBeforeVsAfter(0x0)
122 ,fh2PxBeforeVsAfter(0x0)
123 ,fh2PyBeforeVsAfter(0x0)
124 ,fh2PhiPosBeforeVsAfter(0x0)
125 ,fh2PhiNegBeforeVsAfter(0x0)
128 for(
Int_t i = 0; i < 3; i++){
129 fProfXiV2PtV0A[i] = NULL;
130 fProfOmegaV2PtV0A[i] = NULL;
131 fProfXiSinePtV0A[i] = NULL;
132 fProfOmegaSinePtV0A[i] = NULL;
134 fProfXiV2PtV0C[i] = NULL;
135 fProfOmegaV2PtV0C[i] = NULL;
136 fProfXiSinePtV0C[i] = NULL;
137 fProfOmegaSinePtV0C[i] = NULL;
139 fProfXiV2Pt[i] = NULL;
140 fProfOmegaV2Pt[i] = NULL;
141 fProfXiSinePt[i] = NULL;
142 fProfOmegaSinePt[i] = NULL;
144 fProf2dXiV2PtV0A[i] = NULL;
145 fProf2dOmegaV2PtV0A[i] = NULL;
146 fProf2dXiV2PtV0C[i] = NULL;
147 fProf2dOmegaV2PtV0C[i] = NULL;
148 fProf2dXiV2Pt[i] = NULL;
149 fProf2dOmegaV2Pt[i] = NULL;
152 for(
int i=0; i!=3; ++i)
153 for(
int j=0; j!=2; ++j) {
155 fOmegaBands[i][j] = 0;
158 for(
Int_t i = 0; i != 2; ++i)
159 for(
Int_t j = 0; j != 2; ++j)
160 for(
Int_t iC = 0; iC < 9; iC++){
161 fMeanQ[iC][i][j] = 0.;
162 fWidthQ[iC][i][j] = 0.;
186 ,fhEPangleVZero (0x0)
191 ,fh1DCAXiDaughters(0x0)
192 ,fh1DCABachToPrimVertex(0x0)
193 ,fh1XiCosOfPointingAngle(0x0)
197 ,fh1V0CosOfPointingAngle(0x0)
199 ,fh1DcaV0DaughtersXi(0x0)
200 ,fh1DcaV0ToPrimVertex(0x0)
201 ,fh1DCAPosToPrimVertex(0x0)
202 ,fh1DCANegToPrimVertex(0x0)
205 ,fh1MassOmegaMinus(0x0)
206 ,fh1MassOmegaPlus(0x0)
214 ,fh1V0toXiCosOfPointingAngle(0x0)
217 ,fh2MassLambdaVsMassXiMinus(0x0)
218 ,fh2MassXiVsMassOmegaMinus(0x0)
219 ,fh2MassLambdaVsMassXiPlus(0x0)
220 ,fh2MassXiVsMassOmegaPlus(0x0)
221 ,fh2XiRadiusVsMassXiMinus(0x0)
222 ,fh2XiRadiusVsMassXiPlus(0x0)
223 ,fh2XiRadiusVsMassOmegaMinus(0x0)
224 ,fh2XiRadiusVsMassOmegaPlus(0x0)
225 ,fh2TPCdEdxOfCascDghters(0x0)
226 ,fh2MassVsPtXiMinus(0x0)
227 ,fh2MassVsPtXiPlus(0x0)
228 ,fh2MassVsPtXiAll(0x0)
229 ,fh2MassVsPtOmegaMinus(0x0)
230 ,fh2MassVsPtOmegaPlus(0x0)
231 ,fh2MassVsPtOmegaAll(0x0)
233 ,fhOmegaRapidity (0x0)
234 ,fProfResolution (0x0)
235 ,fh1DistToVtxZAfter(0x0)
236 ,fh1DistToVtxXYAfter(0x0)
237 ,fh2DistToVtxZBeforeVsAfter(0x0)
238 ,fh2DistToVtxXYBeforeVsAfter(0x0)
239 ,fh2PxBeforeVsAfter(0x0)
240 ,fh2PyBeforeVsAfter(0x0)
241 ,fh2PhiPosBeforeVsAfter(0x0)
242 ,fh2PhiNegBeforeVsAfter(0x0)
245 for(
Int_t i = 0; i < 3; i++){
270 for(
int i=0; i!=3; ++i)
271 for(
int j=0; j!=2; ++j) {
276 for(
Int_t i = 0; i != 2; ++i)
277 for(
Int_t j = 0; j != 2; ++j)
278 for(
Int_t iC = 0; iC <9; iC++){
283 DefineInput( 0,TChain::Class());
285 DefineOutput(1, TList::Class());
290 cout<<
"AliAnalysisTaskFlowEPCascade::UserCreateOutputObjects()"<<endl;
293 AliInputEventHandler* inputHandler
294 = (AliInputEventHandler*) (man->GetInputEventHandler());
297 TString oadbfilename =
"$ALICE_PHYSICS/OADB/PWGCF/VZERO/VZEROcalibEP.root";
298 fOADB = TFile::Open(oadbfilename.Data());
301 printf(
"OADB file %s cannot be opened\n",oadbfilename.Data());
309 fhEvent =
new TH1I(
"Event",
"Number of Events", 3, 0, 3);
313 "EP from VZERO; #Psi; Number of Events",
314 15, 0., TMath::Pi());
318 "EP from V0A; #Psi; Number of Events",
319 15, 0., TMath::Pi());
323 "EP from V0C; #Psi; Number of Events",
324 15, 0., TMath::Pi());
329 "EP from TPC; #Psi; Number of Events",
330 15, 0., TMath::Pi());
334 "Cascade #chi^{2}; #chi^{2}; Number of Cascades",
339 =
new TH1F(
"DcaXiDaughters",
340 "DCA between Xi Daughters; DCA (cm); Number of Cascades",
345 =
new TH1F(
"DcaBachToPrimVertex",
346 "DCA of Bach. to Prim. Vertex; DCA (cm);Number of Cascades",
351 =
new TH1F(
"XiCosineOfPointingAngle",
352 "Cos of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis",
357 "Casc. decay transv. radius; r (cm); Counts" ,
362 =
new TH1F(
"MassLambdaAsCascDghter",
363 "#Lambda assoc. to Casc. candidates; Eff. Mass (GeV/c^{2}); Counts", 300,1.00,1.3);
367 "V0 #chi^{2}, in cascade; #chi^{2};Counts",
372 =
new TH1F(
"V0CosOfPointingAngleXi",
373 "Cos of V0 Pointing Angle, in cascade;Cos(V0 Point. Angl); Counts",
378 "V0 decay radius, in cascade; radius (cm); Counts",
383 "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s", 120, 0., 0.6);
387 "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.);
391 new TH1F(
"DcaPosToPrimVertexXi",
392 "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Counts",
397 =
new TH1F(
"DcaNegToPrimVertexXi",
398 "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Counts",
403 =
new TH1F(
"MassXiMinus",
404 "#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts",
410 =
new TH1F(
"MassXiPlus",
411 "#Xi^{+} candidates;M(#bar{#Lambda}^{0}, #pi^{+}) (GeV/c^{2});Counts",
417 "#Xi candidates;M(#bar{#Lambda}, #pi) (GeV/c^{2});Counts",
422 =
new TH1F(
"MassOmegaMinus",
423 "#Omega^{-} candidates; M(#Lambda, K^{-})(GeV/c^{2});Counts",
428 =
new TH1F(
"MassOmega",
429 "#Omega candidates; M(#Lambda, K)(GeV/c^{2});Counts",
434 =
new TH1F(
"MassOmegaPlus",
435 "#Omega^{+} candidates;M(#bar{#Lambda}^{0}, K^{+})(GeV/c^{2});Counts", 2000, 1.5, 2.5);
440 "#Xi Pt (cand. around the mass peak);p_{t}(#Xi)(GeV/c);Counts",
445 =
new TH1F(
"XiTotMom",
446 "#Xi momentum (cand. around the mass peak); p_{tot}(#Xi)(GeV/c); Counts",
451 "#Xi Bach. transverse momentum (cand. around the mass peak) ; p_{t}(Bach.) (GeV/c); Counts",
456 "#Xi Bach. momentum (cand. around the mass peak); p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
460 "Charge of casc. candidates; Sign; Counts",
465 =
new TH1F(
"V0toXiCosineOfPointingAngle",
466 "Cos. of V0 Ptng Angl Xi vtx; Cos(V0 Point. Angl / Xi vtx); Counts",
472 "#phi of #Xi candidates (around the mass peak); #phi (deg); Counts", 64, 0., 6.4);
476 =
new TH2F(
"Armenteros",
477 "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm} ; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3);
481 =
new TH2F(
"XiRadiusVsEffMassXiMinus",
482 "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ",
483 450, 0., 45.0, 1600, 1.2, 2.0);
487 =
new TH2F(
"XiRadiusVsEffMassXiPlus",
488 "Transv. R_{Xi Decay} Vs M_{#Xi^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2}) ",
489 450, 0., 45.0, 1600, 1.2, 2.0);
493 =
new TH2F(
"XiRadiusVsEffMassOmegaMinus",
494 "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2})",
495 450, 0., 45.0, 2000, 1.5, 2.5);
499 =
new TH2F(
"XiRadiusVsEffMassOmegaPlus",
500 "Transv. R_{Xi Decay} Vs M_{#Omega^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ",
501 450, 0., 45.0, 2000, 1.5, 2.5);
505 =
new TH2F(
"f2dHistEffMassLambdaVsEffMassXiMinus",
506 "M_{#Lambda} Vs M_{#Xi^{-} candidates} ; Inv. M_{#Lambda^{0}}\
507 (GeV/c^{2}); M(#Lambda, #pi^{-}) (GeV/c^{2})",
508 300, 1.1, 1.13, 1600, 1.2, 2.0);
512 =
new TH2F(
"EffMassXiVsEffMassOmegaMinus",
513 "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates} ; M( #Lambda , #pi^{-} ) (GeV/c^{2}) ; M( #Lambda , K^{-} ) (GeV/c^{2})",
514 1600, 1.2, 2.0, 2000, 1.5, 2.5);
518 =
new TH2F(
"EffMassLambdaVsEffMassXiPlus",
519 "M_{#Lambda} Vs M_{#Xi^{+} candidates}; Inv. M_{#Lambda^{0}}(GeV/c^{2}); M( #Lambda , #pi^{+} ) (GeV/c^{2})",
520 300, 1.1,1.13, 1600, 1.2, 2.0);
524 =
new TH2F(
"EffMassXiVsEffMassOmegaPlus",
525 "M_{#Xi^{+} candidates} Vs M_{#Omega^{+} candidates} ; M( #Lambda, #pi^{+} ) (GeV/c^{2}) ; M( #Lambda , K^{+} ) (GeV/c^{2})",
526 1600, 1.2, 2.0, 2000, 1.5, 2.5);
530 =
new TH2F(
"TPCdEdxOfCascDghters",
531 "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC) ",
532 2000, -10.0, 10.0, 450, 0., 900.);
536 =
new TH2F(
"MassVsPtXiMinus",
537 "M_{#Xi^{-} candidates} vs Pt; Pt (GeV/c); M(#Lambda, #pi^{-}) (GeV/c^{2})",
538 100, 0., 10., 1600, 1.2, 2.0);
542 =
new TH2F(
"MassVsPtXiPlus",
543 "M_{#Xi^{+} candidates} vs Pt; Pt (GeV/c); M(#Lambda, #pi^{+})(GeV/c^{2})",
544 100, 0., 10., 1600, 1.2, 2.0);
548 =
new TH2F(
"MassVsPtXiAll",
549 "M_{#Xi candidates} vs Pt; Pt (GeV/c); M(#Lambda, #pi) (GeV/c^{2})",
550 100, 0., 10., 1600, 1.2, 2.0);
554 =
new TH2F(
"MassVsPtOmegaMinus",
555 "M_{#Omega^{-} candidates} vs Pt; Pt (GeV/c); M(#Lambda, K^{-}) (GeV/c^{2})",
556 100, 0., 10., 2000, 1.5, 2.5);
560 =
new TH2F(
"MassVsPtOmegaPlus",
561 "M_{#Omega^{+} candidates} vs Pt; Pt (GeV/c); M(#Lambda, K^{+}) (GeV/c^{2})",
562 100, 0., 10., 2000, 1.5, 2.5);
566 =
new TH2F(
"MassVsPtOmegaAll",
567 "M_{#Omega candidates} vs Pt; Pt (GeV/c); M(#Lambda, K^{+}) (GeV/c^{2})",
568 100, 0., 10., 2000, 1.5, 2.5);
572 "#Xi rapidity distribution before rap. cut; y; Number of counts",
577 "#Omega rapidity distr. before rap. cut; y; Number of counts",
581 for(
Int_t i = 0; i < 3; i++){
583 "; p_{T}[GeV/c]; v_{2}",
588 "; p_{T}[GeV/c]; v_{2}",
593 ";p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
598 =
new TProfile(Form(
"hProfOmegaSinePtV0A%d", i),
599 "; p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
605 "; p_{T}[GeV/c]; v_{2}",
610 "; p_{T}[GeV/c]; v_{2}",
615 ";p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
620 =
new TProfile(Form(
"hProfOmegaSinePtV0C%d", i),
621 "; p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
626 fProfXiV2Pt[i] =
new TProfile(Form(
"hProfXiV2Pt%d", i),
627 "; p_{T}[GeV/c]; v_{2}",
632 "; p_{T}[GeV/c]; v_{2}",
637 ";p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
642 "; p_{T}[GeV/c]; <sin[2(#phi-#Psi)]>",
647 "; p_{T}[GeV/c]; #Psi; v_{2}",
649 15, 0., TMath::Pi());
653 "; p_{T}[GeV/c]; #Psi; v_{2}",
660 "; p_{T}[GeV/c]; #Psi; v_{2}",
662 15, 0., TMath::Pi());
666 "; p_{T}[GeV/c]; #Psi; v_{2}",
672 fProf2dXiV2Pt[i] =
new TProfile2D(Form(
"hProf2dXiV2Pt%d", i),
673 "; p_{T}[GeV/c]; #Psi; v_{2}",
675 15, 0., TMath::Pi());
679 "; p_{T}[GeV/c]; #Psi; v_{2}",
687 "Distance to vtx z after propagation to vtx; z [cm]",
692 "Distance to vtx xy after propagation to vtx",
697 =
new TH2F(
"DistToVtxZBeforeVsAfter",
698 "Distance to vtx z before vs after propagation; Distance before [cm]; Distance after [cm]",
699 500, -50., 50., 100, -5., 5.);
703 =
new TH2F(
"DistToVtxXYBeforeVsAfter",
704 "Distance to vtx xy before vs after propagation; Distance before [cm]; Distance after [cm]",
705 500, 0., 50, 500, 0., 50);
709 =
new TH2F(
"PxBeforeVsAfter",
710 "Px before vs after propagation; Px [GeV/c]; Px' [GeV/c]",
711 200, -10., 10, 200, -10., 10.);
715 =
new TH2F(
"PyBeforeVsAfter",
716 "Py before vs after propagation; Py [GeV/c]; Py' [GeV/c]",
717 200, -10., 10, 200, -10., 10.);
721 =
new TH2F(
"PhiPosBeforeVsAfter",
722 "Phi for positively charged candidates before vs after propagation; #phi; #phi'",
723 360, 0., 2.0*TMath::Pi(), 360, 0., 2.0*TMath::Pi());
727 =
new TH2F(
"PhiNegBeforeVsAfter",
728 "Phi for negatively charged candidates before vs after propagation; #phi; #phi'",
729 360, 0., 2.0*TMath::Pi(), 360, 0., 2.0*TMath::Pi());
733 "correlations between event planes",
736 ->SetBinLabel(1,
"<cos[2(#Psi^{V0A})-#Psi^{V0C}]>");
738 ->SetBinLabel(2,
"<cos[2(#Psi^{V0A})-#Psi^{TPC}]>");
740 ->SetBinLabel(3,
"<cos[2(#Psi^{V0C})-#Psi^{TPC}]>");
742 ->SetBinLabel(4,
"<cos[2(#Psi^{ZDCA})-#Psi^{ZDCC}]>");
756 Info(
"UserExec",
"This task doesn't work with ESD!");
771 AliAODHeader *aodHeader =
dynamic_cast<AliAODHeader*
>(fAOD->GetHeader());
772 if(!aodHeader) AliFatal(
"Not a standard AOD");
773 if(!aodHeader)
return;
774 AliCentrality *
centrality = aodHeader->GetCentralityP();
775 if(!centrality)
return;
776 Double_t cent = centrality->GetCentralityPercentile(
"V0M" );
777 if(cent<fMinCent||cent>=
fMaxCent)
return;
779 if(cent >= 0 && cent < 5)
fICent = 0;
780 else if(cent >= 5 && cent < 10)
fICent = 1;
781 else if(cent >= 10 && cent < 20)
fICent = 2;
782 else if(cent >= 20 && cent < 30)
fICent = 3;
783 else if(cent >= 30 && cent < 40)
fICent = 4;
784 else if(cent >= 40 && cent < 50)
fICent = 5;
785 else if(cent >= 50 && cent < 60)
fICent = 6;
786 else if(cent >= 60 && cent < 70)
fICent = 7;
787 else if(cent >= 70 && cent < 80)
fICent = 8;
791 Double_t zvtx = fAOD->GetPrimaryVertex()->GetZ();
792 if(TMath::Abs(zvtx) >
fVtxCut)
return;
1437 AliEventplane * ep = ((AliVAODHeader*)fAOD->GetHeader())->GetEventplaneP();
1438 Double_t psiTPC = ep->GetEventplane(
"Q", fAOD, 2);
1443 Int_t run = fAOD->GetRunNumber();
1456 AliAODVZERO* aodV0 = fAOD->GetVZEROData();
1458 for (
Int_t iv0 = 0; iv0 < 64; iv0++) {
1459 Double_t phiV0 = TMath::PiOver4()*(0.5 + iv0 % 8);
1460 Float_t multv0 = aodV0->GetMultiplicity(iv0);
1462 Qxc2 += TMath::Cos(2*phiV0)*multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1463 Qyc2 += TMath::Sin(2*phiV0)*multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1465 Qxa2 += TMath::Cos(2*phiV0)*multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1466 Qya2 += TMath::Sin(2*phiV0)*multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1485 Double_t QxaCor2 = (Qxa2 - Qxamean2)/Qxarms2;
1486 Double_t QyaCor2 = (Qya2 - Qyamean2)/Qyarms2;
1487 Double_t QxcCor2 = (Qxc2 - Qxcmean2)/Qxcrms2;
1488 Double_t QycCor2 = (Qyc2 - Qycmean2)/Qycrms2;
1490 Double_t QxCor2 = (Qxa2 - Qxamean2 + Qxc2 - Qxcmean2)
1491 /TMath::Sqrt(Qxarms2*Qxarms2 + Qxcrms2*Qxcrms2);
1492 Double_t QyCor2 = (Qya2 - Qyamean2 + Qyc2 - Qycmean2)
1493 /TMath::Sqrt(Qyarms2*Qyarms2 + Qycrms2*Qycrms2);
1495 Double_t psiV0A =(TMath::Pi() + TMath::ATan2(-QyaCor2, -QxaCor2))/2.;
1496 Double_t psiV0C = (TMath::Pi() + TMath::ATan2(-QycCor2, -QxcCor2))/2.;
1497 Double_t psiVZero = (TMath::Pi() + TMath::ATan2(-QyCor2, -QxCor2))/2.;
1508 Double_t bestPrimaryVtxPos[3] = {-100., -100., -100.};
1510 Double_t b = fAOD->GetMagneticField();
1512 int nCascades=fAOD->GetNumberOfCascades();
1515 const AliAODVertex *primaryBestAODVtx = fAOD->GetPrimaryVertex();
1516 primaryBestAODVtx->GetXYZ(bestPrimaryVtxPos);
1518 for(
Int_t iXi = 0; iXi < nCascades; iXi++){
1522 Double_t XiCosOfPointingAngle = -1.;
1523 Double_t posXi[3] = {-1000., -1000., -1000.};
1526 Double_t invMassLambdaAsCascDghter = 0.;
1530 Double_t dcaBachToPrimaryVtxXi = -1.;
1531 Double_t dcaV0ToPrimaryVtxXi = -1.;
1532 Double_t dcaPosToPrimaryVtxXi = -1.;
1533 Double_t dcaNegToPrimaryVtxXi = -1.;
1534 Double_t V0CosOfPointingAngleXi = -1.;
1535 Double_t posV0Xi[3] = {-1000., -1000., -1000.};
1558 Bool_t isBachelorKaonForTPC = kFALSE;
1559 Bool_t isBachelorPionForTPC = kFALSE;
1560 Bool_t isNegPionForTPC = kFALSE;
1561 Bool_t isPosPionForTPC = kFALSE;
1562 Bool_t isNegProtonForTPC = kFALSE;
1563 Bool_t isPosProtonForTPC = kFALSE;
1565 Double_t XiPx = 0., XiPy = 0., XiPz = 0.;
1569 Double_t bachPx = 0., bachPy = 0., bachPz = 0.;
1574 Double_t V0toXiCosOfPointingAngle = 0.;
1584 Double_t distToVtxXYBefore = -999.;
1586 Double_t XiPAfter[3] = {-999., -999., -999.};
1589 const AliAODcascade *xi = fAOD->GetCascade(iXi);
1593 chi2Xi = xi->Chi2Xi();
1594 dcaXiDaughters = xi->DcaXiDaughters();
1595 XiCosOfPointingAngle = xi->CosPointingAngleXi(bestPrimaryVtxPos[0],
1596 bestPrimaryVtxPos[1],
1597 bestPrimaryVtxPos[2]);
1598 posXi[0] = xi->DecayVertexXiX();
1599 posXi[1] = xi->DecayVertexXiY();
1600 posXi[2] = xi->DecayVertexXiZ();
1601 XiRadius = TMath::Sqrt(posXi[0]*posXi[0]
1603 +posXi[2]*posXi[2]);
1605 AliAODTrack *pTrkXi =
dynamic_cast<AliAODTrack*
>( xi->GetDaughter(0) );
1606 AliAODTrack *nTrkXi =
dynamic_cast<AliAODTrack*
>( xi->GetDaughter(1) );
1608 =
dynamic_cast<AliAODTrack*
>( xi->GetDecayVertexXi()->GetDaughter(0) );
1610 if(!pTrkXi || !nTrkXi || !bTrkXi)
continue;
1612 UInt_t idxPosXi = (
UInt_t) TMath::Abs( pTrkXi->GetID() );
1613 UInt_t idxNegXi = (
UInt_t) TMath::Abs( nTrkXi->GetID() );
1614 UInt_t idxBach = (
UInt_t) TMath::Abs( bTrkXi->GetID() );
1616 if(idxBach == idxNegXi || idxBach == idxPosXi)
continue;
1622 if(pTrkXi->IsOn(AliESDtrack::kTPCin)){
1624 pTrkXi->GetTPCsignal());
1626 if( nTrkXi->IsOn(AliESDtrack::kTPCin) ){
1628 nTrkXi->GetTPCsignal());
1630 if(bTrkXi->IsOn(AliESDtrack::kTPCin)){
1632 bTrkXi->GetTPCsignal());
1636 if(xi->ChargeXi() < 0)
1637 invMassLambdaAsCascDghter = xi->MassLambda();
1639 invMassLambdaAsCascDghter = xi->MassAntiLambda();
1641 dcaV0DaughtersXi = xi->DcaV0Daughters();
1642 V0Chi2Xi = xi->Chi2V0();
1644 V0CosOfPointingAngleXi
1645 = xi->CosPointingAngle(bestPrimaryVtxPos);
1646 dcaV0ToPrimaryVtxXi = xi->DcaV0ToPrimVertex();
1647 dcaBachToPrimaryVtxXi = xi->DcaBachToPrimVertex();
1650 posV0Xi[0] = xi->DecayVertexV0X();
1651 posV0Xi[1] = xi->DecayVertexV0Y();
1652 posV0Xi[2] = xi->DecayVertexV0Z();
1653 V0RadiusXi = TMath::Sqrt(posV0Xi[0]*posV0Xi[0]
1654 +posV0Xi[1]*posV0Xi[1]
1655 +posV0Xi[2]*posV0Xi[2]);
1656 dcaPosToPrimaryVtxXi = xi->DcaPosToPrimVertex();
1657 dcaNegToPrimaryVtxXi = xi->DcaNegToPrimVertex();
1668 if(TMath::Abs(invMassLambdaAsCascDghter-1.11568) > 0.01)
continue;
1679 if(xi->ChargeXi()<0){
1680 invMassXiMinus = xi->MassXi();
1681 invMassOmegaMinus = xi->MassOmega();
1683 invMassXiPlus = xi->MassXi();
1684 invMassOmegaPlus = xi->MassOmega();
1713 if(TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(bTrkXi, AliPID::kKaon))<3.)
1714 isBachelorKaonForTPC = kTRUE;
1715 if(TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(bTrkXi, AliPID::kPion))<3.)
1716 isBachelorPionForTPC = kTRUE;
1719 if(TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(nTrkXi, AliPID::kPion))<3.)
1720 isNegPionForTPC = kTRUE;
1722 isNegProtonForTPC = kTRUE;
1725 if(TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(pTrkXi, AliPID::kPion))<3.)
1726 isPosPionForTPC = kTRUE;
1728 isPosProtonForTPC = kTRUE;
1731 XiPx = xi->MomXiX();
1732 XiPy = xi->MomXiY();
1733 XiPz = xi->MomXiZ();
1734 XiPt = TMath::Sqrt(XiPx*XiPx + XiPy*XiPy);
1735 XiPtot= TMath::Sqrt(XiPx*XiPx + XiPy*XiPy + XiPz*XiPz);
1737 bachPx = xi->MomBachX();
1738 bachPy = xi->MomBachY();
1739 bachPz = xi->MomBachZ();
1741 bachPt = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy);
1742 bachPtot = TMath::Sqrt(bachPx*bachPx + bachPy*bachPy + bachPz*bachPz);
1744 V0toXiCosOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
1746 rapXi = xi->RapXi();
1747 rapOmega = xi->RapOmega();
1749 alphaXi = xi->AlphaXi();
1750 ptArmXi = xi->PtArmXi();
1752 distToVtxZBefore = posXi[2]-bestPrimaryVtxPos[2];
1754 = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
1755 *(posXi[0] - bestPrimaryVtxPos[0])
1756 +(posXi[1] - bestPrimaryVtxPos[1])
1757 *(posXi[1] - bestPrimaryVtxPos[1]));
1764 Propagate(bestPrimaryVtxPos, posXi, XiPAfter, b, xi->ChargeXi());
1765 distToVtxZAfter = posXi[2] - bestPrimaryVtxPos[2];
1766 distToVtxXYAfter = TMath::Sqrt((posXi[0] - bestPrimaryVtxPos[0])
1767 *(posXi[0] - bestPrimaryVtxPos[0])
1768 +(posXi[1] - bestPrimaryVtxPos[1])
1769 *(posXi[1] - bestPrimaryVtxPos[1]));
1770 phiAfter = TMath::Pi() + TMath::ATan2(-XiPAfter[1],-XiPAfter[0]);
1778 if(xi->ChargeXi()>0)
1780 else if(xi->ChargeXi()<0)
1783 if( (xi->ChargeXi() < 0 && isBachelorPionForTPC
1784 && isPosProtonForTPC && isNegPionForTPC)
1785 || (xi->ChargeXi() > 0 && isBachelorPionForTPC
1786 && isNegProtonForTPC && isPosPionForTPC))
1807 if ( TMath::Abs( invMassXiMinus-1.3217 ) < 0.012
1808 || TMath::Abs( invMassXiPlus-1.3217 ) < 0.012)
1820 if(xi->ChargeXi()<0){
1834 if(xi->ChargeXi() > 0){
1869 if(xi->ChargeXi() < 0){
1870 if(isPosProtonForTPC
1871 && isNegPionForTPC){
1872 if(isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
1877 for(
int r=0; r!=3; ++r) {
1879 && invMassXiMinus <
fXiBands[r][1]){
1891 fProf2dXiV2Pt[r]->Fill(XiPt, psiVZero, TMath::Cos(2.*phiV0));
1896 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8){
1900 for(
int r=0; r!=3; ++r) {
1906 TMath::Cos(2.*phiV0A));
1911 TMath::Cos(2.*phiV0C));
1916 TMath::Cos(2.*phiV0));
1923 if(xi->ChargeXi() > 0){
1924 if(isNegProtonForTPC
1925 && isPosPionForTPC){
1926 if(isBachelorPionForTPC && TMath::Abs(rapXi) < 0.8){
1931 for(
int r=0; r!=3; ++r) {
1933 && invMassXiPlus <
fXiBands[r][1]){
1944 fProf2dXiV2Pt[r]->Fill(XiPt, psiVZero, TMath::Cos(2.*phiV0));
1949 if(isBachelorKaonForTPC && TMath::Abs(rapOmega) < 0.8){
1954 for(
int r=0; r!=3; ++r) {
1960 TMath::Cos(2.*phiV0A));
1966 TMath::Cos(2.*phiV0C));
1971 TMath::Cos(2.*phiV0));
2012 Double_t pp = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
2013 Double_t len = (vv[2]-x[2])*pp/p[2];
2017 x[0] += p[0]*TMath::Sin(rho*len)/a - p[1]*(1-TMath::Cos(rho*len))/a;
2018 x[1] += p[1]*TMath::Sin(rho*len)/a + p[0]*(1-TMath::Cos(rho*len))/a;
2019 x[2] += p[2]*len/pp;
2022 p[0] = p0 *TMath::Cos(rho*len) - p[1]*TMath::Sin(rho*len);
2023 p[1] = p[1]*TMath::Cos(rho*len) + p0 *TMath::Sin(rho*len);
2030 AliOADBContainer *cont = (AliOADBContainer*)
fOADB->Get(
"hMultV0BefCorr");
2032 printf(
"OADB object hMultV0BefCorr is not available in the file\n");
2036 if(!(cont->GetObject(run))){
2037 printf(
"OADB object hMultV0BefCorr is not available for run %i (used run 137366)\n",run);
2040 fMultV0 = ((
TH2F *) cont->GetObject(run))->ProfileX();
2042 TF1 *fpol0 =
new TF1(
"fpol0",
"pol0");
2043 fMultV0->Fit(fpol0,
"",
"",0,32);
2044 fV0Cpol = fpol0->GetParameter(0);
2045 fMultV0->Fit(fpol0,
"",
"",32,64);
2046 fV0Apol = fpol0->GetParameter(0);
2048 for(
Int_t iside=0;iside<2;iside++){
2049 for(
Int_t icoord=0;icoord<2;icoord++){
2050 for(
Int_t i=0;i < 9;i++){
2052 if(iside==0 && icoord==0)
2053 snprintf(namecont,100,
"hQxc2_%i", i);
2054 else if(iside==1 && icoord==0)
2055 snprintf(namecont,100,
"hQxa2_%i", i);
2056 else if(iside==0 && icoord==1)
2057 snprintf(namecont,100,
"hQyc2_%i", i);
2058 else if(iside==1 && icoord==1)
2059 snprintf(namecont,100,
"hQya2_%i", i);
2061 cont = (AliOADBContainer*)
fOADB->Get(namecont);
2063 printf(
"OADB object %s is not available in the file\n",namecont);
2067 if(!(cont->GetObject(run))){
2068 printf(
"OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
2071 fMeanQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
2072 fWidthQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
TH2F * fh2MassXiVsMassOmegaMinus
Xi- effective mass vs V0 eff. mass.
virtual void UserCreateOutputObjects()
TH2F * fh2XiRadiusVsMassOmegaMinus
TH2F * fh2PxBeforeVsAfter
TH2F * fh2MassVsPtOmegaPlus
TH2F * fh2MassLambdaVsMassXiPlus
TProfile2D * fProf2dXiV2PtV0A[3]
TProfile * fProfOmegaSinePt[3]
TH2F * fh2PyBeforeVsAfter
TH1F * fh1DistToVtxZAfter
virtual ~AliAnalysisTaskFlowEPCascade()
TH1F * fh1XiBachPt
total momentum
TProfile * fProfXiSinePtV0C[3]
TH2F * fh2MassLambdaVsMassXiMinus
alpha vs ptArm for casc. candidate
TH1F * fh1DcaV0DaughtersXi
TProfile * fProfXiSinePt[3]
TH1F * fh1MassOmegaPlus
effective mass under Omega- hyp.
void Propagate(Double_t vv[3], Double_t x[3], Double_t p[3], Double_t bz, Short_t sign)
AliPIDResponse * fPIDResponse
AliAnalysisTaskFlowEPCascade()
TH2F * fh2TPCdEdxOfCascDghters
TH1F * fh1XiP
transverse momentum
TH2F * fh2XiRadiusVsMassXiPlus
decay radius under Xi- hyp.
virtual Bool_t IsSelected(TObject *obj, Int_t id=-666)
TProfile * fMultV0
centrality bin number
TH2F * fh2DistToVtxXYBeforeVsAfter
TH1F * fh1DCANegToPrimVertex
V0 positive daughter to prim. vertex.
TH1F * fh1PhiXi
cos of pointing angle btw the V0 mom and the Xi-V0 vtx line
void ReadFromAODv0(AliAODEvent *fAOD)
TProfile * fProfXiV2Pt[3]
AliFlowTrackCuts * fCutsDau
ClassImp(AliAnalysisTaskFlowEPCascade) AliAnalysisTaskFlowEPCascade
TH2F * fh2MassXiVsMassOmegaPlus
TH2F * fh2DistToVtxZBeforeVsAfter
TH1F * fh1V0toXiCosOfPointingAngle
TProfile2D * fProf2dOmegaV2Pt[3]
three mass bands V0A&V0C
TProfile2D * fProf2dOmegaV2PtV0A[3]
three mass bands V0A
TProfile * fProfResolution
Float_t fMeanQ[9][2][2]
loaded by OADB
virtual void UserExec(Option_t *option)
TProfile * fProfXiV2PtV0C[3]
TProfile * fProfXiV2PtV0A[3]
Int_t fICent
current run checked to load VZERO calibration
TH2F * fh2MassVsPtXiMinus
dEdx with the cascade daughters
TH1F * fh1XiCosOfPointingAngle
TProfile * fProfOmegaSinePtV0C[3]
TProfile2D * fProf2dXiV2Pt[3]
TH1F * fh1MassXiMinus
V0 neg. daughter to prim. vertex.
Float_t fWidthQ[9][2][2]
and recentering
TH2F * fh2MassVsPtOmegaAll
Float_t fV0Cpol
object containing VZERO calibration info
TH1F * fh1V0CosOfPointingAngle
for V0 associated to a cascade
TProfile2D * fProf2dOmegaV2PtV0C[3]
three mass bands V0C
TProfile2D * fProf2dXiV2PtV0C[3]
TH1F * fh1DistToVtxXYAfter
After propagation to vertex.
Double_t fOmegaBands[3][2]
TH2F * fh2MassVsPtOmegaMinus
TH1F * fh1MassXiPlus
effective mass under Xi- hyp.
Float_t fV0Apol
loaded by OADB
TH1F * fh1DCAPosToPrimVertex
DCA of V0 to prim. vtx.
TProfile * fProfOmegaV2PtV0A[3]
three mass bands V0A
TProfile * fProfOmegaV2Pt[3]
three mass bands V0A&V0C
TProfile * fProfOmegaV2PtV0C[3]
three mass bands V0C
TH1F * fh1DCABachToPrimVertex
TH2F * fh2PhiPosBeforeVsAfter
TProfile * fProfXiSinePtV0A[3]
TH2F * fh2XiRadiusVsMassXiMinus
void OpenInfoCalbration(Int_t run)
TProfile * fProfOmegaSinePtV0A[3]
virtual void Terminate(Option_t *)
TH2F * fh2PhiNegBeforeVsAfter
TH1F * fh1DcaV0ToPrimVertex
TH2F * fh2XiRadiusVsMassOmegaPlus
decay radius under Omega- hyp.
TH1F * fh1V0Chi2
mass of lambda as the cascade daughter