]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/Kinks/AliAnalysisKinkESDMC.cxx
mods for systematics
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / Kinks / AliAnalysisKinkESDMC.cxx
CommitLineData
10eaad41 1/**************************************************************************
2 * Authors: Martha Spyropoulou-Stassinaki and the members
3 * of the Greek group at Physics Department of Athens University
4 * Paraskevi Ganoti, Anastasia Belogianni and Filimon Roukoutakis
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
16//-----------------------------------------------------------------
17// AliAnalysisKinkESDMC class
18// Example of an analysis task for kink topology study
19// Kaons from kink topology are 'identified' in this code
20//-----------------------------------------------------------------
21
a0271296 22#include "TChain.h"
23#include "TTree.h"
10eaad41 24#include "TH1F.h"
25#include "TH2F.h"
a0271296 26#include "TH3F.h"
27#include "TH1D.h"
28#include "TH2D.h"
29#include "TParticle.h"
30#include <TVector3.h>
31#include "TF1.h"
32
33#include "AliAnalysisTask.h"
34#include "AliAnalysisManager.h"
35#include "AliTrackReference.h"
10eaad41 36
a0271296 37#include "AliVEvent.h"
10eaad41 38#include "AliESDEvent.h"
10eaad41 39#include "AliMCEvent.h"
a0271296 40#include "AliAnalysisKinkESDMC.h"
10eaad41 41#include "AliStack.h"
a0271296 42#include "AliESDpid.h"
10eaad41 43#include "AliESDkink.h"
a0271296 44#include "AliESDtrack.h"
45#include "AliESDtrackCuts.h"
46#include "AliPhysicsSelectionTask.h"
47#include "AliInputEventHandler.h"
48#include "AliESDInputHandler.h"
49#include "AliAnalysisManager.h"
50#include "AliVEvent.h"
51 #include "AliPIDResponse.h"
52///#include "AliTPCpidESD.h"
10eaad41 53
be1a7181 54ClassImp(AliAnalysisKinkESDMC)
a0271296 55
56
10eaad41 57//________________________________________________________________________
58AliAnalysisKinkESDMC::AliAnalysisKinkESDMC(const char *name)
92adf4f6 59 : AliAnalysisTaskSE(name), fHistPtESD(0),fHistPt(0),fHistQtAll(0),fHistQt1(0),fHistQt2(0)
a0271296 60 , fHistPtKaon(0),fHistPtKPDG(0),fHistEta(0),fHistEtaK(0),fptKMC(0),fMultiplMC(0),fESDMult(0),frad(0),
61 fradMC(0), fKinkKaon(0), fKinkKaonBg(0), fM1kaon(0), fgenPtEtR(0),fPtKink(0),
92adf4f6 62 fcodeH(0), fdcodeH(0), fAngMomK(0),fAngMomPi(0), fAngMomKC(0), fMultESDK(0), fMultMCK(0),
a0271296 63 fSignPtNcl(0), fSignPtEta(0), fSignPtEtaMC(0), fSignPtMC(0), fEtaNcl(0), fSignPt(0), fChi2NclTPC(0), fRatChi2Ncl(0),
64 fRadiusNcl(0), fTPCSgnlP(0), fTPCSgnlPa(0), fSignPtGen(0),
65 fRpr(0),fZpr(0), fdcatoVxXY(0), fMCEtaKaon(0),
66 fZvXv(0),fZvYv(0),fXvYv(0),fPtPrKink(0),fgenPtEtRP(0),fgenPtEtRN(0),fkinkKaonP(0),fkinkKaonN(0),
67 frapidESDK(0), frapidKMC(0), fPtKPlMC(0), fPtKMnMC(0),
68 fHistPtKaoP(0), fHistPtKaoN(0), fHiPtKPDGP(0), fHiPtKPDGN(0),fKinKBGP(0),fKinKBGN(0),
69 fQtKMu(0),fQtKPi(0),fQtKEl(0),fFakepipi(0), fFakeKPi(0),
70 fDCAkink(0), fDCAkinkBG(0), fPosiKink(0), fPosiKinkK(0), fPosiKinKXZ(0), fPosiKinKYZ(0), fPosiKinKBgZY(0),
71 fcode2(0), fcode4(0), fZkinkZDau(0),
72 fQtKMuMC(0), fQtKElMC(0), fQtKPiMC(0), fQtK3PiP(0),fQtK3PiM(0), fmaxAngMomKmu(0),
73 fPosiKinKBgZX(0), fPosiKinKBgXY(0), fMinvPi(0),fMinvKa(0),fMinvPr(0),
74 fTPCSgnlPtpc(0),
75 fTPCMomNSgnl(0), fMothKinkMomSgnl(0), fNSigmTPC(0), fTPCSgnlKinkDau(0),fcodeDau1(0),fcodeDau2(0), fMothKinkMomSgnlD(0),
76 fInvMassMuNuAll(0), fInvMassMuNuPt(0), fRatioCrossedRows(0), fRatioCrossedRowsKink(0), fRadiusPt(0), fRadiusPtcln(0),
77 fPtCut1(0), fPtCut2(0), fPtCut3(0), fAngMomKKinks(0),
78 flengthMCK(0), flifetiMCK(0), flifetim2(0), fLHelESDK(0),flifeInt(0), flifeYuri(0), flenYuri(0), flenTrRef(0),flifeSmall(0), flifetime(0),flifTiESDK(0),
79 flifeKink(), flenHelx(0), fradPtRapMC(0), fradPtRapDC(0), fradPtRapESD(0), fRadNclcln(0),
80 f1(0), f2(0),
81 fListOfHistos(0),fLowMulcut(-1),fUpMulcut(-1), fKinkRadUp(200),fKinkRadLow(130), fCutsMul(0),fMaxDCAtoVtxCut(0), fPIDResponse(0)
10eaad41 82
83{
84 // Constructor
85
86 // Define input and output slots here
a0271296 87
88 DefineOutput(1, TList::Class());
10eaad41 89}
90
91//________________________________________________________________________
92adf4f6 92void AliAnalysisKinkESDMC::UserCreateOutputObjects()
10eaad41 93{
a0271296 94
95 // Input slot #0 works with a TChain
96 // DefineInput(0, TChain::Class());liESDtrackCuts("Mul","Mul");
97 fCutsMul=new AliESDtrackCuts("Mul","Mul");
98 fCutsMul->SetMinNClustersTPC(70);
99 fCutsMul->SetMaxChi2PerClusterTPC(4);
100 fCutsMul->SetAcceptKinkDaughters(kFALSE);
101 fCutsMul->SetRequireTPCRefit(kTRUE);
102 // ITS
103 fCutsMul->SetRequireITSRefit(kTRUE);
104 fCutsMul->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
105 AliESDtrackCuts::kAny);
106 fCutsMul->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
107
108 fCutsMul->SetMaxDCAToVertexZ(2);
109 fCutsMul->SetDCAToVertex2D(kFALSE);
110 fCutsMul->SetRequireSigmaToVertex(kFALSE);
111
112 fCutsMul->SetEtaRange(-0.8,+0.8);
113 fCutsMul->SetPtRange(0.15, 1e10);
114//
115 fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCA", "fMaxDCA");
116 fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
117 fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36);
118
119 // Create histograms
120 // Called once
121
122 f1=new TF1("f1","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
123 f1->SetParameter(0,0.493677);
124 f1->SetParameter(1,0.9127037);
125 f1->SetParameter(2,TMath::Pi());
10eaad41 126
10eaad41 127
a0271296 128 f2=new TF1("f2","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
129 f2->SetParameter(0,0.13957018);
130 f2->SetParameter(1,0.2731374);
131 f2->SetParameter(2,TMath::Pi());
132//
133 Double_t gPt7K0[45] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,0.9,1.0,
134 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
135 2.2, 2.4, 2.6, 2.8, 3.0, 3.3, 3.6, 3.9,
136 4.2, 4.6,5.0, 5.4, 5.9, 6.5, 7.0,7.5, 8.0,8.5, 9.2, 10., 11., 12., 13.5,15.0 }; // David K0
137/*
138 Double_t gPt7TOF[47] = { 0.2,0.25, 0.3,0.35, 0.4,0.45, 0.5,0.55, 0.6,0.65, 0.7,0.75, 0.8, 0.85, 0.9, 0.95, 1.0,
139 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,1.7,1.8,1.9, 2.0,
140 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,2.8, 2.9, 3.0,
141 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8,5.0 }; // Barbara TOF Kch
142*/
143 fHistPtESD = new TH1F("fHistPtESD", "P_{T} distribution",200, 0.0,10.0);
144 fHistPt = new TH1F("fHistPt", "P_{T} distribution",200, 0.0,10.0);
145 fHistQtAll = new TH1F("fHistQtAll", "Q_{T} distr All Kinks ",100, 0.0,.300);
146 fHistQt1= new TH1F("fHistQt1", "Q_{T} distribution",100, 0.0,.300);
147 fHistQt2= new TH1F("fHistQt2", "Q_{T} distribution",100, 0.0,.300);
148// fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",200, 0.0,10.0);
149 fHistPtKaon = new TH1F("fHistPtKaon", "P_{T}Kaon distribution",44,gPt7K0);
150 fHistPtKPDG = new TH1F("fHistPtKPDG", "P_{T}Kaon distribution",44, gPt7K0 );
151 fHistEta= new TH1F("fHistEta", "Eta distribution", 26,-1.3, 1.3);
152 fHistEtaK= new TH1F("fHistEtaK", "EtaK distribution", 26,-1.3, 1.3);
153 fptKMC= new TH1F("fptKMC", "P_{T}Kaon generated",44, gPt7K0 );
154 fMultiplMC= new TH1F("fMultiplMC", " charge particle multipl",100, 0.0,2500.);
155 fESDMult= new TH1F("fESDMult", "charge multipliESD",100, 0.0,100.);
156 frad= new TH1F("frad", "radius K ESD recon",100,0.,1000.);
157 fradMC= new TH1F("fradMC", "radius K generated",100,0.,1000.);
158 fKinkKaon= new TH1F("fKinkKaon", "P_{T}Kaon kinks identi", 44, gPt7K0 );
159 fKinkKaonBg= new TH1F("fKinkKaonBg", "P_{T}Kaon kinks backgr",44 , gPt7K0 );
160 fM1kaon= new TH1F("fM1kaon","Invar m(kaon) from kink->mu+netrino decay",180,0.1, 1.0);
161 fgenPtEtR= new TH1F("fgenPtEtR", "P_{T}Kaon distribution", 44, gPt7K0 );
162 fPtKink= new TH1F("fPtKink", "P_{T}Kaon Kink bution",44, gPt7K0 );
163 fcodeH = new TH2F("fcodeH", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
164 fdcodeH = new TH2F("fdcodeH", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
165 fAngMomK= new TH2F("fAngMomK","Decay angle vrs Mother Mom,K",100,0.0,10.0,80,0.,80.);
166 fAngMomPi= new TH2F("fAngMomPi","Decay angle vrs Mother Mom,Pi",100,0.0,10.0,80,0.,80.);
167 fAngMomKC= new TH2F("fAngMomKC","Decay angle vrs Mother Mom,K",100,0.0,10.0,80,0.,80.);
168 fMultESDK=new TH1F("fMultESDK", "charge multipliESD kaons",100, 0.,2500.);
169 fMultMCK=new TH1F("fMultMCK", "charge multipli MC kaons",100, 0.,2500.);
170 fSignPtNcl= new TH2F("fSignPtNcl","SignPt vrs Ncl,K",80,-4.,4.0,70,20.,160.);
171 fSignPtEta= new TH2F("fSignPtEta","SignPt vrs Eta,K",80,-4.0,4.0,30,-1.5,1.5);
172 fSignPtEtaMC= new TH2F("fSignPtEtaMC","SignPt vrs Eta,K",80,-4.0,4.0,30,-1.5,1.5);
173 fSignPtMC= new TH1F("fSignPtMC","SignPt ,K",100,-5.,5.0);
174 fEtaNcl= new TH2F("fEtaNcl","Eta vrs Ncl,K",26,-1.3,1.3,70,20.,160.);
175 fSignPt= new TH1F("fSignPt","SignPt ,K",100,-5.,5.0);
176 fChi2NclTPC= new TH2F("fChi2NclTPC","Chi2vrs nclust,K",100,0.,500., 70,20, 160);
177 fRatChi2Ncl= new TH1F("fRatChi2Ncl","Ratio chi2/nclusters in TPC,K",50,0.0,5.0);
178 fRadiusNcl = new TH2F("fRadiusNcl","KinkRadius Ncl,K",75,100.,250., 80,0, 160);
179 fTPCSgnlP = new TH2F("fTPCSgnlP","Kink TCP de/dx,K",300,0.,15.,150,0.,300);
180 fTPCSgnlPa= new TH2F("fTPCSgnlPa","Kink TCP de/dx,a",300,0.,15.,150,0.,300);
181 fSignPtGen= new TH1F("fSignPtGen","SignPtGen ,K",100,-5.0,5.0);
182 fRpr = new TH1D("fRpr", "rad distribution PID pr",100,-1.0,1.0);
183 fZpr = new TH1D("fZpr", "z distribution PID pr ",60,-15.,15.);
184 fdcatoVxXY = new TH1D("fdcatoVxXY", "dca distribution PID ",20,-1.,1.);
185 fMCEtaKaon = new TH1F("fMCEtaKaon"," Hist of Eta K -Kink Selecied",26,-1.3,1.3);
186 fZvXv= new TH2F("fZvXv","Xv-Zv main vtx",60,-0.5,0.5, 60, -15., 15.);
187 fZvYv= new TH2F("fZvYv","Yv-Zv main vtx",60,-0.5,0.5, 60, -15., 15.);
188 fXvYv= new TH2F("fXvYv","Xv-Yv main vtx", 60,-1.5,1.5, 60, -1.5, 1.5);
189 fPtPrKink=new TH1F("fPtPrKink","pt of ESD kaonKink tracks",300, 0.0,15.0);
190 fgenPtEtRP= new TH1F("fgenPtEtRP", "P_{T}Kaon distribution positive", 44, gPt7K0 );
191 fgenPtEtRN= new TH1F("fgenPtEtRN", "P_{T}Kaon distribution negative", 44, gPt7K0 );
192 fkinkKaonP= new TH1F("fKinkKaonP", "P_{T}Kaon distribution positive", 44, gPt7K0 );
193 fkinkKaonN= new TH1F("fKinkKaonN", "P_{T}Kaon distribution negative", 44, gPt7K0 );
194 frapidESDK= new TH1F("frapidESDK", "rapidity distribution", 26,-1.3, 1.3);
195 frapidKMC = new TH1F("frapidKMC ", "rapidity distri MC ",26,-1.3, 1.3);
196 fPtKPlMC= new TH1F("fPtKPlMC", "P_{T}Kaon Pos generated", 44, gPt7K0 );
197 fPtKMnMC= new TH1F("fPtKMnMC", "P_{T}Kaon Minusgenerated",44 , gPt7K0 );
198 fHistPtKaoP= new TH1F("fHistPtKaoP", "P_{T}Kaon Pos ESD", 44, gPt7K0 );
199 fHistPtKaoN= new TH1F("fHistPtKaoN", "P_{T}Kaon Neg ESD", 44, gPt7K0 );
200 fHiPtKPDGP= new TH1F("fHiPtKPDGP", "P_{T}Kaon Pos ESD", 44, gPt7K0 );
201 fHiPtKPDGN= new TH1F("fHiPtKPDGN", "P_{T}Kaon neg ESD", 44, gPt7K0 );
202 fKinKBGP = new TH1F("fKinKBGP ", "P_{T}Kaon Pos ESD", 44, gPt7K0 );
203 fKinKBGN= new TH1F("fKinKBGN", "P_{T}Kaon neg ESD", 44, gPt7K0 );
204 fQtKMu= new TH1F("fQtKMu", "Q_{T} distribution K to mu ",100, 0.0,.300);
205 fQtKPi= new TH1F("fQtKPi", "Q_{T} distribution K to pi",100, 0.0,.300);
206 fQtKEl= new TH1F("fQtKEl", "Q_{T} distribution K to elec",100, 0.0,.300);
207 fFakepipi = new TH1F("fFakepipi", "P_{T}fake pipi ",44 , gPt7K0 );
208 fFakeKPi = new TH1F("fFakeKPi", "P_{T}fake Kpi ", 44, gPt7K0 );
209 fDCAkink = new TH1F("fDCAkink", "DCA kink vetrex ",50, 0.0,1.0);
210 fDCAkinkBG = new TH1F("fDCAkinkBG", "DCA kink vetrex ",50, 0.0,1.0);
211 fPosiKink= new TH2F("fPosiKink", "Y vrx kink Vrex ",100, -300.0,300.0,100, -300, 300.);
212 fPosiKinkK= new TH2F("fPosiKinkK", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
213 fPosiKinKXZ= new TH2F("fPosiKinKXZ", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
214 fPosiKinKYZ= new TH2F("fPosiKinKYZ", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
215 fPosiKinKBgZY= new TH2F("fPosiKinKBgZY", "Y vrx Z kink Vrexbg ",100, -300.0,300.0,100, -300, 300.);
216 fcode2 = new TH2F("fcode2", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
217 fcode4 = new TH2F("fcode4", "code vrs dcode dist. kinks,K",100,0.,2500.,100,0.,2500.);
218 fZkinkZDau = new TH2F("fZkinkZDau", "Y vrx kink VrexK ",100, -300.0,300.0,100, -300, 300.);
219 fQtKMuMC= new TH1F("fQtKMuMC", "Q_{T} distribution K to mu MC",100, 0.0,.300);
220 fQtKPiMC= new TH1F("fQtKPiMC", "Q_{T} distribution K to pi MC",100, 0.0,.300);
221 fQtKElMC= new TH1F("fQtKElMC", "Q_{T} distribution K to elec MC",100, 0.0,.300);
222 fQtK3PiP= new TH1F("fQtK3PiP", "Q_{T} distribution K to 3pi ",100, 0.0,.300);
223 fQtK3PiM= new TH1F("fQtK3PiM", "Q_{T} distribution K to 3pi ",100, 0.0,.300);
224 fmaxAngMomKmu= new TH2F("fmaxAngMomKmu","Decay angle vrs Mother Mom,Kmu",100,0.0,10.0,80,0.,80.);
225 fPosiKinKBgZX= new TH2F("fPosiKinKBgZX", "X vrx Z kink Vrexbg ",100, -20.0,20.0,100, 0., 300.);
226 fPosiKinKBgXY= new TH2F("fPosiKinKBgXY", "Y vrx X kink Vrexbg ",100, -300.0,300.0,100, -300, 300.);
227 fMinvPi= new TH1F("fMinvPi","Invar m(kaon) from kink-> decay",100,0.0, 1.2);
228 fMinvKa= new TH1F("fMinvKa","Invar m(kaon) from kink-> decay",100,0.0, 2.0);
229 fMinvPr= new TH1F("fMinvPr","Invar m(kaon) from kink-> decay",100,0.0, 1.2);
230 fTPCSgnlPtpc = new TH2F("fTPCSgnlPtpc","TPC signal de/dx Mom TPC,K ",100,0.0,8.0,100, 0., 250. );
231 fTPCMomNSgnl = new TH2F("fTPCMomNsgnl","TPC signal de/dx Mom TPC,K ",100,0.0,8.0,20 , -10., 10.);
232 fMothKinkMomSgnl = new TH2F("fMothKinkMomSgnl","TPC signal de/dx Mom TPC,Kink ",100,0.0,250.,100, 0., 250. );
233 fNSigmTPC = new TH1F("fNSigmTPC","TPC Nsigma de/dx TPC,K ", 30 , -7.5, 7.5);
234 fTPCSgnlKinkDau = new TH2F("fTPCSgnlKinkDau","TPC signal de/dx Mom,K",100,0.0,8.0,100,0.,250.);
235 fcodeDau1 = new TH2F("fcodeDau1", "code vrs dcode dist. kinks,K",100,0.,500.,100,0.,500.);
236 fcodeDau2 = new TH2F("fcodeDau2", "code vrs dcode dist. kinks,K",100,0.,500.,100,0.,500.);
237 fMothKinkMomSgnlD = new TH2F("fMothKinkMomSgnlD","TPC signal de/dx Mom TPC,Kink ",100,0.0,250.,100, 0., 250. );
238 fInvMassMuNuAll = new TH1F("fInvMassMuNuAll","Invar from kink->mu+netrino decay",180,0.1, 1.0);
239 fInvMassMuNuPt = new TH2F("fInvMassMuNuPt","Invar from kink->mu+netrino decay vs Pt",180,0.1, 1.0, 100, 0. , 10.);
240 fRatioCrossedRows = new TH1F("fRatioCrossedRows","Ratio crossed rows in TPC",20,0.0,1.0);
241 fRatioCrossedRowsKink = new TH1F("fRatioCrossedRowsKink","Ratio crossed rows in TPC for kinks",20,0.0,1.0);
242 fRadiusPt =new TH2F("fRadiusPt","radius vs pt ",80, 90.,250.,100, 0.,10. );
243 fRadiusPtcln =new TH2F("fRadiusPtcln","radius vs pt clean ",80, 90.,250.,100, 0.,10. );
244 fPtCut1 = new TH1F("fPtCut1", "P_{T}Kaon distribution",300, 0.0,15.0);
245 fPtCut2 = new TH1F("fPtCut2", "P_{T}Kaon distribution",300, 0.0,15.0);
246 fPtCut3 = new TH1F("fPtCut3", "P_{T}Kaon distribution",300, 0.0,15.0);
247 fAngMomKKinks = new TH2F("fAngMomKKinks","Decay angle vrs Mother Mom,Kinks",300,0.0,15.0,100,0.,100.);
248 flengthMCK=new TH1F("flengthMCK", "length of K MCref decay ",100,0.,1000.0);
249 flifetiMCK=new TH1F("flifetiMCK", "lifetime ref K Decay ",100,0.,1000.0);
250 flifetim2 =new TH1F("flifetim2", "lifetime ref K Decay ",100,0.,1000.0);
251 fLHelESDK =new TH1F("fLHelESDK", "lifetime ref K Decay ",100,0.,1000.0);
252 flifeInt =new TH1F("flifeInt", "lifetime ref K Decay ",100,0.,1000.0);
253 flifeYuri=new TH1F("flifeYuri","lifetime ref K Decay ",100,0.,1000.0);
254 flenYuri=new TH1F("flenYuri","lifetime ref K Decay ",100,0.,1000.0);
255 flenTrRef =new TH1F("flenTrRef","lifetime ref K Decay ",100,0.,1000.0);
256 flifeSmall=new TH1F("flifeSmall","lifetime ref K Decay ",100,0.,1000.0);
257 flifetime =new TH1F("flifetime","lifetime ref K Decay ",100,0.,1000.0);
258 flifTiESDK=new TH1F("flifTiESDK","lifetime ref K Decay ",100,0.,1000.0);
259 flifeKink =new TH1F("flifeKink", "lifetime ref K Decay ",100,0.,1000.0);
260 flenHelx =new TH1F("flenHelx", "lifetime ref K Decay ",100,0.,1000.0);
261 fradPtRapMC=new TH3F("fradPtRapMC","rad pt rap dat",28,100.,240., 20, 0., 5., 20, -1., 1. );
262 fradPtRapDC=new TH3F("fradPtRapDC","rad pt rap dat",28,100.,240., 20, 0., 5., 20, -1., 1. );
263 fradPtRapESD=new TH3F("fradPtRapESD","rad pt rap dat",28,100.,240., 20, 0., 5., 20, -1., 1. );
264 fRadNclcln = new TH2F("fRadNclcln","KinkRadius Ncl,K",75,100.,250., 80,0, 160);
265
266
267
268
269 fListOfHistos=new TList();
270 fListOfHistos->SetOwner();
10eaad41 271 fListOfHistos->Add(fHistPtESD);
272 fListOfHistos->Add(fHistPt);
273 fListOfHistos->Add(fHistQtAll);
274 fListOfHistos->Add(fHistQt1);
275 fListOfHistos->Add(fHistQt2);
276 fListOfHistos->Add(fHistPtKaon);
277 fListOfHistos->Add(fHistPtKPDG);
278 fListOfHistos->Add(fHistEta);
279 fListOfHistos->Add(fHistEtaK);
280 fListOfHistos->Add(fptKMC);
281 fListOfHistos->Add(fMultiplMC);
282 fListOfHistos->Add(fESDMult);
10eaad41 283 fListOfHistos->Add(frad);
a0271296 284 fListOfHistos->Add(fradMC);
10eaad41 285 fListOfHistos->Add(fKinkKaon);
286 fListOfHistos->Add(fKinkKaonBg);
287 fListOfHistos->Add(fM1kaon);
288 fListOfHistos->Add(fgenPtEtR);
289 fListOfHistos->Add(fPtKink);
10eaad41 290 fListOfHistos->Add(fcodeH);
291 fListOfHistos->Add(fdcodeH);
10eaad41 292 fListOfHistos->Add(fAngMomK);
293 fListOfHistos->Add(fAngMomPi);
92adf4f6 294 fListOfHistos->Add(fAngMomKC);
295 fListOfHistos->Add(fMultESDK);
296 fListOfHistos->Add(fMultMCK);
a0271296 297 fListOfHistos->Add(fSignPtNcl);
298 fListOfHistos->Add(fSignPtEta);
299 fListOfHistos->Add(fSignPtEtaMC);
300 fListOfHistos->Add(fSignPtMC);
301 fListOfHistos->Add(fEtaNcl);
302 fListOfHistos->Add(fSignPt);
303 fListOfHistos->Add(fChi2NclTPC);
304 fListOfHistos->Add(fRatChi2Ncl);
305 fListOfHistos->Add(fRadiusNcl);
306 fListOfHistos->Add(fTPCSgnlP);
307 fListOfHistos->Add(fTPCSgnlPa);
308 fListOfHistos->Add(fSignPtGen);
10eaad41 309 fListOfHistos->Add(fRpr);
310 fListOfHistos->Add(fZpr);
a0271296 311 fListOfHistos->Add(fdcatoVxXY);
312 fListOfHistos->Add(fMCEtaKaon);
10eaad41 313 fListOfHistos->Add(fZvXv);
314 fListOfHistos->Add(fZvYv);
315 fListOfHistos->Add(fXvYv);
316 fListOfHistos->Add(fPtPrKink);
a0271296 317 fListOfHistos->Add(fgenPtEtRP);
318 fListOfHistos->Add(fgenPtEtRN);
319 fListOfHistos->Add(fkinkKaonP);
320 fListOfHistos->Add(fkinkKaonN);
321 fListOfHistos->Add(frapidESDK);
322 fListOfHistos->Add(frapidKMC);
323 fListOfHistos->Add(fPtKPlMC);
324 fListOfHistos->Add(fPtKMnMC);
325 fListOfHistos->Add(fHistPtKaoP);
326 fListOfHistos->Add(fHistPtKaoN);
327 fListOfHistos->Add(fHiPtKPDGP);
328 fListOfHistos->Add(fHiPtKPDGN);
329 fListOfHistos->Add(fKinKBGP);
330 fListOfHistos->Add(fKinKBGN);
331 fListOfHistos->Add(fQtKMu);
332 fListOfHistos->Add(fQtKPi);
333 fListOfHistos->Add(fQtKEl);
334 fListOfHistos->Add(fFakepipi);
335 fListOfHistos->Add(fFakeKPi);
336 fListOfHistos->Add(fDCAkink);
337 fListOfHistos->Add(fDCAkinkBG);
338 fListOfHistos->Add(fPosiKink);
339 fListOfHistos->Add(fPosiKinkK);
340 fListOfHistos->Add(fPosiKinKXZ);
341 fListOfHistos->Add(fPosiKinKYZ);
342 fListOfHistos->Add(fPosiKinKBgZY);
343 fListOfHistos->Add(fcode2);
344 fListOfHistos->Add(fcode4);
345 fListOfHistos->Add(fZkinkZDau);
346 fListOfHistos->Add(fQtKMuMC);
347 fListOfHistos->Add(fQtKPiMC);
348 fListOfHistos->Add(fQtKElMC);
349 fListOfHistos->Add(fQtK3PiP);
350 fListOfHistos->Add(fQtK3PiM);
351 fListOfHistos->Add(fmaxAngMomKmu);
352 fListOfHistos->Add(fPosiKinKBgZX);
353 fListOfHistos->Add(fPosiKinKBgXY);
354 fListOfHistos->Add(fMinvPi);
355 fListOfHistos->Add(fMinvKa);
356 fListOfHistos->Add(fMinvPr);
357 fListOfHistos->Add(fTPCSgnlPtpc);
358 fListOfHistos->Add(fTPCMomNSgnl);
359 fListOfHistos->Add(fMothKinkMomSgnl);
360 fListOfHistos->Add(fNSigmTPC);
361 fListOfHistos->Add(fTPCSgnlKinkDau);
362 fListOfHistos->Add(fcodeDau1);
363 fListOfHistos->Add(fcodeDau2);
364 fListOfHistos->Add(fMothKinkMomSgnlD);
365 fListOfHistos->Add(fInvMassMuNuAll);
366 fListOfHistos->Add(fInvMassMuNuPt);
367 fListOfHistos->Add(fRatioCrossedRows);
368 fListOfHistos->Add(fRatioCrossedRowsKink);
369 fListOfHistos->Add(fRadiusPt);
370 fListOfHistos->Add(fRadiusPtcln);
371 fListOfHistos->Add(fPtCut1);
372 fListOfHistos->Add(fPtCut2);
373 fListOfHistos->Add(fPtCut3);
374 fListOfHistos->Add(fAngMomKKinks);
375 fListOfHistos->Add(flengthMCK);
376 fListOfHistos->Add(flifetiMCK);
377 fListOfHistos->Add(flifetim2);
378 fListOfHistos->Add(fLHelESDK);
379 fListOfHistos->Add(flifeInt);
380 fListOfHistos->Add(flifeYuri);
381 fListOfHistos->Add(flenYuri);
382 fListOfHistos->Add(flenTrRef);
383 fListOfHistos->Add(flifeSmall);
384 fListOfHistos->Add(flifetime);
385 fListOfHistos->Add(flifTiESDK);
386 fListOfHistos->Add(flifeKink);
387 fListOfHistos->Add(flenHelx);
388 fListOfHistos->Add(fradPtRapMC);
389 fListOfHistos->Add(fradPtRapDC);
390 fListOfHistos->Add(fradPtRapESD);
391 fListOfHistos->Add(fRadNclcln);
392
393 PostData(1, fListOfHistos);
10eaad41 394}
395
396//________________________________________________________________________
92adf4f6 397void AliAnalysisKinkESDMC::UserExec(Option_t *)
10eaad41 398{
399 // Main loop
400 // Called for each event
401
402 // Process MC truth, therefore we receive the AliAnalysisManager and ask it for the AliMCEventHandler
403 // This handler can return the current MC event
92adf4f6 404
405 AliVEvent *event = InputEvent();
406 if (!event) {
407 Printf("ERROR: Could not retrieve event");
408 return;
409 }
410
411 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
412 if (!esd) {
413 Printf("ERROR: Could not retrieve esd");
414 return;
a0271296 415}
10eaad41 416
92adf4f6 417 AliMCEvent* mcEvent = MCEvent();
10eaad41 418 if (!mcEvent) {
419 Printf("ERROR: Could not retrieve MC event");
420 return;
421 }
a0271296 422 fMultMCK->Fill(mcEvent->GetNumberOfTracks() );
423//
424
425
426// multiplicity selection
427 Float_t refmultiplicity=fCutsMul->CountAcceptedTracks(esd);
428 if(fLowMulcut>-1)
429 {
430 if(refmultiplicity<fLowMulcut)
431 return;
432 }
433 if(fUpMulcut>-1)
434 {
435 if(refmultiplicity>fUpMulcut)
436 return;
437 }
438
439
440 fMultESDK->Fill(refmultiplicity);
441
442
443
10eaad41 444
7ccf0419 445 Printf("MC particles: %d", mcEvent->GetNumberOfTracks());
10eaad41 446
10eaad41 447 AliStack* stack=mcEvent->Stack();
448
449//primary tracks in MC
450 Int_t nPrim = stack->GetNprimary();
451//
a0271296 452
453 // loop over mc particles
454
455 // variable to count tracks
456 Int_t nMCTracks = 0;
457 Int_t nMCKinkKs = 0;
458
459// 15/2/12 OK for (Int_t iMc = 0; iMc < nPrim; iMc++)
460 //for (Int_t iMc = 0; iMc < stack->GetNtrack(); iMc++)
461 for (Int_t iMc = 0; iMc < mcEvent->GetNumberOfTracks(); iMc++)
462 {
463
464 TParticle* particle = stack->Particle(iMc);
465
466 if (!particle)
467 {
468 // AliDebug(AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack (mc loop).", iMc));
469 continue;
470 }
471// keep only primaries
472 if (!stack->IsPhysicalPrimary(iMc)) continue;
473
474 //
475
476 Double_t ptK = particle->Pt();
477
478 if( ptK <0.200) continue; // 12/2/2012
479//
480
481 Float_t charg=0;
482 Float_t code = particle->GetPdgCode();
483 Int_t mcProcess=-1011;
484//---------------------------------------kaon selection
485 if ((code==321)||(code==-321)){
486
487
488 Double_t etracKMC= TMath::Sqrt(particle->P() *particle->P() + 0.493677 *0.493677 );
489 Double_t rapidiKMC = 0.5 * (TMath::Log( (etracKMC +particle->Pz())/( etracKMC-particle->Pz() )) ) ;
490
491 if ( TMath::Abs( rapidiKMC) > 0.7) continue; //
492 frapidKMC ->Fill(rapidiKMC) ; //18/feb rapiddistr of PDG kink ESD kaons
493
494
495// maximum angle vrs momentum
496 // Double_t maxDecAnKmu=f1->Eval(particle->P(), 0.,0.,0.);
497 // fmaxAngMomKmu->Fill(particle->P() , maxDecAnKmu);
498
499 if(code > 0 ) charg =1;
500 if(code < 0 ) charg =-1;
501 Float_t chargPt= charg*ptK;
502
503 fptKMC->Fill(ptK);
504 fSignPtGen->Fill(chargPt);// kaon gensign pt
505 if (charg==1 ) fPtKPlMC->Fill( ptK );
506 if ( charg==-1) fPtKMnMC->Fill( ptK );
507// primary vertex
508 // Double_t mVx=particle->Vx();
509 // Double_t mVy=particle->Vy();
510 Double_t mVz=particle->Vz();
511// 25/11/2012 ???????back 10/1/2013
512 TClonesArray* trArray=0;
513 TParticle* tempParticle=0;
514
515 TVector3 DecayMomentumK(0,0,0);
516 Float_t lengthKMC=0;
517 if (mcEvent->GetParticleAndTR(iMc, tempParticle, trArray) != -1) {
518 AliTrackReference* MCtrackReference = static_cast<AliTrackReference*>(trArray->Last());
519 lengthKMC = MCtrackReference->GetLength();
520
521// DecayMomentumK.SetXYZ(MCtrackReference->Px(), MCtrackReference->Py(), MCtrackReference->Pz());
522 }
523 flenTrRef ->Fill(lengthKMC);
524 flifetime ->Fill( (lengthKMC*0.493667 /particle->P())); // 19/7
525 if ((lengthKMC>100.)&& (lengthKMC<300.) ) flifeSmall->Fill( (lengthKMC*0.493667/particle->P() ) );
526
527 Int_t nMCKpi =0;
528 Int_t mcProc4 =0;
529 Int_t mcProc13=0;
530 Double_t radiusD=0;
531 // Double_t lengthK =0.;
532 Double_t LengthK =0.;
533 Double_t lenYuri =0.;
534 Double_t MCQt =0.;
535 Double_t MCQt3[2];
536 Int_t firstD=particle->GetFirstDaughter();
537 Int_t lastD=particle->GetLastDaughter();
538
539 if( (lastD<=0) || (firstD<=0) ) continue;
540
541 if ( lastD > mcEvent->GetNumberOfTracks() ) continue;
542 if (firstD > mcEvent->GetNumberOfTracks() ) continue;
543// 25/112012
544// TClonesArray* trArray=0;
545// TParticle* tempParticle=0;
546 // TVector3 DecayMomentumK(0,0,0);
547//loop on secondaries
548 for (Int_t k=firstD;k<=lastD;k++) {
549 if ( k > 0 ) {
550 TParticle* daughter1=stack->Particle(k); // 27/8
551 Float_t dcode = daughter1->GetPdgCode();
552
553// mother momentum trackrefs and QtMC // 17/9/2010, test Feb 2011
554 if (mcEvent->GetParticleAndTR(iMc, tempParticle, trArray) != -1) {
555 AliTrackReference* MCtrackReference = static_cast<AliTrackReference*>(trArray->Last());
556 DecayMomentumK.SetXYZ(MCtrackReference->Px(), MCtrackReference->Py(), MCtrackReference->Pz());
557 }
558 const TVector3 MCP3d(daughter1->Px(), daughter1->Py(), daughter1->Pz()); //MC daughter's momentum
559 MCQt = MCP3d.Perp(DecayMomentumK); //MC daughter's transverse momentum in mother's frame
560//
561 Double_t MCKinkAngle = TMath::ASin(MCQt/daughter1->P() );
562 Double_t MCKinkAngle2= TMath::RadToDeg() * MCKinkAngle; // in degrees
563 // fmaxAngMomKmu->Fill(particle->P() , MCKinkAngle2);// MC
564//
565 mcProcess=daughter1->GetUniqueID();
566 radiusD=daughter1->R();
567// secondary vertex
568 // Double_t hVx=daughter1->Vx();
569 // Double_t hVy=daughter1->Vy();
570 Double_t hVz=daughter1->Vz();
571
572 LengthK = TMath::Sqrt( radiusD*radiusD + ( mVz-hVz) * (mVz-hVz) ); // 19/7/2010 mss
573
574// lengthK = TMath::Sqrt( (mVx -hVx)*( mVx -hVx) + ( mVy -hVy)* (mVy -hVy ) + ( mVz -hVz ) * (mVz -hVz) );
575 lenYuri = (TMath::Abs( mVz-hVz))* (TMath::Sqrt( 1.+ ( ptK*ptK)/ (particle->Pz() * particle->Pz()) )) ;
576
577 if(mcProcess==13) {
578 mcProc13++;
579
580 if(mcProc13==1) flifeInt ->Fill( (lengthKMC*0.493667 /particle->P())); // 19/7
581
582 // if( (charg==1)&&(mcProc13==1 )) fradIntKP->Fill(daughter1->R());
583
584 // if( ( charg ==-1)&&(mcProc13==1)) fradIntKM->Fill(daughter1->R());
585 }
586
587
588//
589 if (mcProcess==4) {
590
591 mcProc4++;
592 if ( mcProc4==1) {
593 // 10/1/13 if( (radiusD >120.)&&( radiusD< 210.) ) {
594 flifeYuri ->Fill( (lenYuri *0.493667 /particle->P())); // 19/7
595 flifetiMCK->Fill(LengthK);
596 flenYuri ->Fill(lenYuri);
597// 10/1/13 }
598
599 // flengthMCK->Fill(lengthK); //
600 // flifetime ->Fill( (lengthK*0.493667 /particle->P())); // 19/7
601 flengthMCK->Fill(lengthKMC); //
602 flifetime ->Fill( (lengthKMC*0.493667 /particle->P())); // 19/7
603 fradPtRapMC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
604 }
605
606//
607 if ( ( ( code==321 )&&( dcode ==-13 ))||( ( code ==-321)&&(dcode== 13) ) || ( ( code==321 )&&( dcode ==-11 )) || ( (code ==-321)&&(dcode== 11))) {
608 flifetim2 ->Fill( (lengthKMC*0.493667 /particle->P()));
609 // 8/2/2013allgh radius if( (radiusD >120.)&&( radiusD< 210.) )
610 // 14/2/13 if( (radiusD >130.)&&( radiusD< 200.) )
611 if( (radiusD >fKinkRadLow )&&( radiusD< fKinkRadUp) )
612 fmaxAngMomKmu->Fill(particle->P() , MCKinkAngle2);// MC
613 }
614
615 if (( (TMath::Abs(code)==321 )&&(TMath::Abs(dcode) ==211 ))&& ( mcProc4<2)) flifetim2->Fill( lengthKMC *0.493667 /particle->P()) ;//19/7
616
617/// inside radius region ----------------------------------------------
618 if(MCKinkAngle2 < 2.) continue; // as in ESD
619 // ====== 8/2/13 if (((daughter1->R())>120)&&((daughter1->R())<210)&& (MCQt>0.120) ){
620 if (((daughter1->R())> fKinkRadLow )&&((daughter1->R())< fKinkRadUp )&& (MCQt>0.120) ){
621
622 if ( ( code==321 )&&( dcode ==-13 )) {
623 fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
624 fradMC->Fill(daughter1->R());
625 fQtKMuMC ->Fill(MCQt );//to muon
626 fgenPtEtR->Fill( ptK );//to muon
627 fgenPtEtRP->Fill( ptK );//to muon
628 fMCEtaKaon ->Fill(rapidiKMC );//to muon
629 fSignPtEtaMC->Fill(ptK,rapidiKMC );//to muon
630 fSignPtMC->Fill(ptK);//to muon
631 flifetiMCK->Fill( lenYuri*0.4933667/particle->P() );
632 // flifetiMCK->Fill( LengthK*0.4933667/ ptK
633 } // positive kaon
634 if ( ( code ==-321)&&(dcode== 13)){
635 fgenPtEtR->Fill( ptK );//to muon
636 fQtKMuMC ->Fill(MCQt );//to muon
637 fgenPtEtRN->Fill(ptK); //
638 fSignPtEtaMC->Fill(chargPt,rapidiKMC );//to muon
639 fMCEtaKaon ->Fill(rapidiKMC );//to muon
640 fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
641 fradMC->Fill(daughter1->R());
642 fSignPtMC->Fill(chargPt);//to muon
643 flifetiMCK->Fill( lenYuri*0.4933667/particle->P() ) ;
644 // flifetiMCK->Fill( LengthK*0.4933667/ ptK ) ;
645
646 } // negative code
647 // if (( ( code==321 )&& ( dcode ==211 ))|| (( code == -321 )&& ( dcode ==-211))) fgenPtEtR->Fill( ptK );//to pion
648 if ( ( code==321 )&&( dcode ==-11 )) {
649 fQtKElMC ->Fill(MCQt );//to muon
650 fgenPtEtR->Fill( ptK );//to electron
651 fgenPtEtRP->Fill( ptK );//to muon
652 fMCEtaKaon ->Fill(rapidiKMC );//to electron
653 fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
654 fradMC->Fill(daughter1->R());
655 fSignPtEtaMC->Fill(ptK,rapidiKMC );//to electron
656 fSignPtMC->Fill(ptK);
657 flifetiMCK->Fill( lenYuri*0.4933667/particle->P() );
658 // flifetiMCK->Fill( LengthK*0.4933667/ ptK );
659
660 } // positive kaon
661 if ( ( code ==-321)&&(dcode== 11)){
662 fgenPtEtR->Fill( ptK );//to electron
663 fQtKElMC ->Fill(MCQt );//to muon
664 fgenPtEtRN->Fill(ptK); //
665 fSignPtEtaMC->Fill(chargPt,rapidiKMC );//to electron
666 fMCEtaKaon ->Fill(rapidiKMC );//to electron
667 fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
668 fradMC->Fill(daughter1->R());
669 fSignPtMC->Fill(chargPt);//to electron
670 flifetiMCK->Fill( lenYuri*0.4933667/particle->P() );
671 // flifetiMCK->Fill( LengthK*0.4933667/ ptK );
672
673 } // negative code
674
675 if (( ( code==321 )&& ( dcode ==211 ))|| (( code == -321 )&& ( dcode ==-211))) nMCKpi++ ;
676 if (( ( code==321 )&& ( dcode ==211 ))|| (( code == -321 )&& ( dcode ==-211))) {
677 if ( nMCKpi > 0) {
678 MCQt3[nMCKpi-1] = MCQt ;// k to pipipi
679}
680 }
681 nMCKinkKs++;
682 }
683
684 }// decay
685 } // positive k
686 }// daughters
687
688
689
690 if ( code > 0) {
691 if( nMCKpi == 1) fgenPtEtR->Fill(ptK); // k to pipi
692 if( nMCKpi == 1) fgenPtEtRP->Fill(ptK); // k to pipi
693 if( nMCKpi == 1) fSignPtEtaMC->Fill(ptK,rapidiKMC ); // k to pipi
694 if( nMCKpi == 1) fSignPtMC->Fill(ptK); // k to pipi
695 if( nMCKpi == 1) fMCEtaKaon->Fill(rapidiKMC ); // k to pipi
696 if(nMCKpi==1) fradMC->Fill(radiusD );
697 if(nMCKpi==1) fQtKPiMC->Fill( MCQt );
698 if (nMCKpi==1) fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
699 if(nMCKpi==1) flifetiMCK->Fill( lenYuri*0.4933667/particle->P() );
700 // if(nMCKpi==1) flifetiMCK->Fill( LengthK*0.4933667/ ptK );
701 } //positive kaon
702 //
703 if ( code < 0) {
704
705 if( nMCKpi == 1) fgenPtEtR->Fill( ptK ); // k to pipi
706 if( nMCKpi == 1) fgenPtEtRN->Fill(ptK); // k to pipi
707 if( nMCKpi == 1) fSignPtEtaMC->Fill(chargPt,rapidiKMC ); // k to pipi
708 if( nMCKpi == 1) fSignPtMC->Fill(chargPt); // k to pipi
709 if( nMCKpi == 1) fMCEtaKaon->Fill(rapidiKMC ); // k to pipi
710 if(nMCKpi==1) fradMC->Fill(radiusD );
711 if(nMCKpi==1) fQtKPiMC->Fill( MCQt );
712 if( nMCKpi== 1) fradPtRapDC->Fill( radiusD, 1./ptK, rapidiKMC); // systematics 26/8
713 if(nMCKpi==1) flifetiMCK->Fill( lenYuri*0.4933667/particle->P() );
714 // if(nMCKpi==1) flifetiMCK->Fill( LengthK*0.4933667/ ptK );
715
716 } //negative K
717
718 } /// kaons loop
719
720
721
722 nMCTracks++;
723 }// end of mc particle
724
725// Phys sel 2012 EFF calculation
726Bool_t isSelected =
727((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB;
728
729 if ( isSelected ==kFALSE) return; // 24/6/11 apo MF
730//
731 fMultiplMC->Fill(nPrim);
732//=======================================================================================
733// main vertex selection
92adf4f6 734 const AliESDVertex *vertex=GetEventVertex(esd);
10eaad41 735 if(!vertex) return;
a0271296 736///
737// fMultiplMC->Fill(nPrim);
10eaad41 738//
a0271296 739/* / apo Alexander Feb 2012
740 AliESDpid *fESDpid = new AliESDpid();
741 if (!fESDpid) fESDpid =
742 ((AliESDInputHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetESDpid();
743*/ ///========================================================================
744// apo Eftihi
745 if(!fPIDResponse) {
746 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
747 AliInputEventHandler* inputHandler =
748(AliInputEventHandler*)(man->GetInputEventHandler());
749 fPIDResponse = inputHandler->GetPIDResponse();
750 }
751
752
753 Double_t vpos[3];
754 vertex->GetXYZ(vpos);
10eaad41 755 fZpr->Fill(vpos[2]);
a0271296 756 if ( TMath::Abs( vpos[2]) > 10. ) return; /// it is applied on ESD and generation
10eaad41 757
758 Double_t vtrack[3], ptrack[3];
759
760
92adf4f6 761 // Int_t nESDTracK = 0;
10eaad41 762
92adf4f6 763 Int_t nGoodTracks = esd->GetNumberOfTracks();
a0271296 764//
10eaad41 765 fESDMult->Fill(nGoodTracks);
92adf4f6 766
10eaad41 767//
a0271296 768 Double_t nsigmall = 100.0;
769 Double_t nsigma = 100.0;
770 Double_t nsigmaPion =-100.0;
771 Double_t nsigmaPi=-100.0;
772 // Double_t dEdxDauMC = 0.0;
773
774//
775for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
776
777 AliESDtrack* trackD = esd->GetTrack(iTrack);
778 if (!trackD) {
779 Printf("ERROR: Could not receive track %d", iTrack);
780 continue;
781 }
782
783 Int_t indexKinkDau=trackD->GetKinkIndex(0);
784// daughter kink
785 nsigmaPion = (fPIDResponse->NumberOfSigmasTPC(trackD , AliPID::kPion));// 26/10 eftihis
786 // nsigmaPion= (fESDpid->NumberOfSigmasTPC(trackD,AliPID::kPion));
787 // 22/11/12 if((indexKinkDau >0)&& (nsigmaPion>1.2)) fTPCSgnlKinkDau->Fill(trackD->P(), (trackD->GetTPCsignal() ) ) ; // daughter kink
788 //if((indexKinkDau >0)) fTPCSgnlKinkDau->Fill(trackD->P(), (trackD->GetTPCsignal() ) ) ; // daughter kink
789// if((indexKinkDau >0)) dEdxDauMC = trackD->GetTPCsignal() ; // daughter kink
790 }
791
792// loop on ESD tracks
793
794//
92adf4f6 795 for (Int_t iTracks = 0; iTracks < esd->GetNumberOfTracks(); iTracks++) {
92adf4f6 796
797 AliESDtrack* track = esd->GetTrack(iTracks);
10eaad41 798 if (!track) {
7ccf0419 799 Printf("ERROR: Could not receive track %d", iTracks);
10eaad41 800 continue;
801 }
802
803
a0271296 804
805// sigmas
806 nsigmall = (fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
807// nsigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track,AliPID::kKaon));
808 // nsigmall = (fESDpid->NumberOfSigmasTPC(track,AliPID::kKaon));
809 nsigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
810
811//==================================
812 Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
813 Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
814 if (track->GetTPCNclsF()>0) {
815 ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC / track->GetTPCNclsF();
816 fRatioCrossedRows->Fill(ratioCrossedRowsOverFindableClustersTPC);
817 }
818
10eaad41 819 fHistPt->Fill(track->Pt());
820
92adf4f6 821
a0271296 822 Double_t tpcNCl = track->GetTPCclusters(0); //
823 //Int_t tpcNCl = track->GetTPCclusters(0); //
824 Double_t tpcSign = track->GetSign(); //
825
826 Int_t label = track->GetLabel();
827
92adf4f6 828 label = TMath::Abs(label);
a0271296 829
830 if(label > mcEvent->GetNumberOfTracks()) continue; //
831
92adf4f6 832 TParticle * part = stack->Particle(label);
833 if (!part) continue;
834// loop only on Primary tracks
a0271296 835 if (label > nPrim) continue; /// primary tracks only ,21/3/10 EFF study
92adf4f6 836
a0271296 837 // pt cut
838 if ( (track->Pt())<.200)continue; //12/2/2012 -------------------------------------------
10eaad41 839
a0271296 840 UInt_t status=track->GetStatus();
10eaad41 841
a0271296 842 if((status&AliESDtrack::kITSrefit)==0) continue;
843 if((status&AliESDtrack::kTPCrefit)==0) continue; //6 feb
844 // if((track->GetTPCchi2()/track->GetTPCclusters(0))>3.8) continue;
845 //if((track->GetTPCchi2()/track->GetTPCclusters(0))>4.5) continue; // test 10/3/2012
846 if((track->GetTPCchi2()/track->GetTPCclusters(0))>4.0) continue; // test 10/3/2012
10eaad41 847
848 Double_t extCovPos[15];
849 track->GetExternalCovariance(extCovPos);
a0271296 850//
10eaad41 851
852
853 track->GetXYZ(vtrack);
854 fXvYv->Fill(vtrack[0],vtrack[1]);
92adf4f6 855 fZvYv->Fill(vtrack[0],vtrack[2]);
856 fZvXv->Fill(vtrack[1],vtrack[2]);
10eaad41 857
858// track momentum
859 track->GetPxPyPz(ptrack);
860
861 TVector3 trackMom(ptrack[0],ptrack[1],ptrack[2]);
862
a0271296 863 Double_t etracK= TMath::Sqrt(trackMom.Mag()*trackMom.Mag() + 0.493677 *0.493677 );
864 Double_t rapiditK = 0.5 * (TMath::Log( (etracK + ptrack[2] ) / ( etracK - ptrack[2]) )) ;
10eaad41 865 Double_t trackEta=trackMom.Eta();
a0271296 866 // Double_t trMoment= trackMom.Mag();
867 Double_t trackPt = track->Pt();
10eaad41 868
10eaad41 869
870 Float_t bpos[2];
871 Float_t bCovpos[3];
872 track->GetImpactParameters(bpos,bCovpos);
873
874 if (bCovpos[0]<=0 || bCovpos[2]<=0) {
7ccf0419 875 Printf("Estimated b resolution lower or equal zero!");
10eaad41 876 bCovpos[0]=0; bCovpos[2]=0;
877 }
878
879 Float_t dcaToVertexXYpos = bpos[0];
880 Float_t dcaToVertexZpos = bpos[1];
881
a0271296 882 //fRpr->Fill(dcaToVertexZpos);
883 fRpr->Fill(dcaToVertexXYpos);
884
885 //if((TMath::Abs(dcaToVertexXYpos) >0.3)||(TMath::Abs(dcaToVertexZpos)>2.5)) continue; // 22/7/11
886 // if((TMath::Abs(dcaToVertexXYpos) >0.24)||(TMath::Abs(dcaToVertexZpos)>2.5)) continue; // 12/2/13
887 if (!fMaxDCAtoVtxCut->AcceptTrack(track)) continue;
10eaad41 888
10eaad41 889
890 // cut on eta
a0271296 891 // if( (TMath::Abs(trackEta )) > 0.9 ) continue;
892 if( (TMath::Abs(rapiditK )) > 0.7 ) continue; //// rapid K, Feb 20
10eaad41 893 fHistPtESD->Fill(track->Pt());
894
895 // Add Kink analysis
896
897 Int_t indexKinkPos=track->GetKinkIndex(0);
a0271296 898// loop on mother kinks
10eaad41 899 if(indexKinkPos<0){
900 fPtKink->Fill(track->Pt()); /// pt from track
901
a0271296 902 fRatioCrossedRowsKink->Fill(ratioCrossedRowsOverFindableClustersTPC);
903
10eaad41 904 // select kink class
905
92adf4f6 906 AliESDkink *kink=esd->GetKink(TMath::Abs(indexKinkPos)-1);
10eaad41 907//
908
a0271296 909// DCA kink
910 Double_t Dist2 = kink->GetDistance();
911 // fDCAkink->Fill( Dist2 );
912//
10eaad41 913 Int_t eSDfLabel1=kink->GetLabel(0);
914 TParticle *particle1= stack->Particle(TMath::Abs(eSDfLabel1));
915 Int_t code1= particle1->GetPdgCode();
a0271296 916 // Int_t mcProcssMo= particle1->GetUniqueID();
10eaad41 917
918 Int_t eSDfLabeld=kink->GetLabel(1);
919 TParticle *particled= stack->Particle(TMath::Abs(eSDfLabeld));
920 Int_t dcode1= particled->GetPdgCode();
a0271296 921 Int_t mcProcssDa= particled->GetUniqueID();
922//
923// loop on MC daugthres for 3Pi 24/9/2010
924 Int_t nESDKpi =0;
925 if(mcProcssDa==4) {
926 Int_t firstDa=particle1->GetFirstDaughter();
927 Int_t lastDa=particle1->GetLastDaughter();
928
929 if( (lastDa<=0) || (firstDa<=0) ) continue;
930
931 if ( lastDa > mcEvent->GetNumberOfTracks() ) continue;
932 if (firstDa > mcEvent->GetNumberOfTracks() ) continue;
933//loop on secondaries
934 for (Int_t kk=firstDa;kk<=lastDa;kk++) {
935 if ( kk > 0 ) {
936 TParticle* daughter3=stack->Particle(kk); // 24/9
937 Float_t dcode3= daughter3->GetPdgCode();
938 if (( ( code1==321 )&& ( dcode3==211 ))|| (( code1 == -321 )&& ( dcode3==-211))) nESDKpi++ ;
939 }
940 }
941 }
942//---------------------------edw telos 9/2010
943 Double_t hVzdau=particled->Vz();
10eaad41 944
945 const TVector3 motherMfromKink(kink->GetMotherP());
946 const TVector3 daughterMKink(kink->GetDaughterP());
947 Float_t qT=kink->GetQt();
a0271296 948 // Float_t motherPt=motherMfromKink.Pt();
949// Kink mother momentum
950 Double_t trMomTPCKink=motherMfromKink.Mag();
951// TPC mother momentun
952 Double_t trMomTPC=track->GetTPCmomentum();
953 // Float_t etaMother=motherMfromKink.Eta();
954
10eaad41 955
10eaad41 956 fHistQtAll->Fill(qT) ; // Qt distr
a0271296 957
958 const TVector3 vposKink(kink->GetPosition());
959 fPosiKink ->Fill( vposKink[0], vposKink[1] );
960
961 Double_t dxKink = vpos[0]-vposKink[0], dyKink=vpos[1]-vposKink[1], dzKink=vpos[2]-vposKink[2] ;
962 // Double_t dzKink=vpos[2]-vposKink[2] ; /// ??
963 Double_t lifeKink= TMath::Sqrt( dxKink*dxKink + dyKink*dyKink + dzKink*dzKink ) ;
964
965 Double_t tanLamda = track-> GetTgl() ;// ??
966 if (tanLamda ==0 ) continue;// ??
967 Double_t lenHelx = (TMath::Abs(dzKink ) ) *(TMath::Sqrt( 1. + tanLamda *tanLamda ) ) / ( TMath::Abs( tanLamda)) ;// ??
968
969
970
10eaad41 971
92adf4f6 972 Float_t kinkAngle=TMath::RadToDeg()*kink->GetAngle(2);
973
10eaad41 974// fake kinks, small Qt and small kink angle
a0271296 975 if(( kinkAngle<1.)) fHistQt1 ->Fill(qT) ; // Qt distr
976//
977 if( ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==321))) fFakeKPi->Fill(track->Pt());
978 if( ( (TMath::Abs(code1)==211)&&(TMath::Abs(dcode1)==211))) fFakepipi->Fill(track->Pt());
979//
10eaad41 980
10eaad41 981//remove the double taracks
a0271296 982 if( (kinkAngle<2.) ) continue; // test 15/7 2010 , it removes 3 from 10000 good Kaons
983 // BG ?????==============
984 if ( TMath::Abs(vposKink[2]) > 225. ) continue ;
985 if ( TMath::Abs(vposKink[2]) < 0.5 ) continue ;
7ccf0419 986
a0271296 987 fPtCut1 ->Fill(trackPt );
988 fChi2NclTPC->Fill( (track->GetTPCchi2() ) , tpcNCl );
989
990 Float_t signPt= tpcSign*trackPt;
10eaad41 991//
10eaad41 992
a0271296 993 // ======8/1/13 if((kink->GetR()>120.)&&(kink->GetR()<210.)&&(TMath::Abs(rapiditK)<0.7)&&(label<nPrim)) {
994 if((kink->GetR()> fKinkRadLow )&&(kink->GetR()< fKinkRadUp )&&(TMath::Abs(rapiditK)<0.7)&&(label<nPrim)) {
995 if( ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==13))) fQtKMu->Fill(qT);
996 if ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==11)) fQtKEl->Fill(qT);
997 if ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==211)) fQtKPi->Fill(qT);
998 if (( nESDKpi>1) && ( ((code1)==321)&&((dcode1)==211)) ) fQtK3PiP->Fill(qT);
999 if (( nESDKpi>1) && ( ((code1)==-321)&&((dcode1)==-211)) ) fQtK3PiM->Fill(qT);
92adf4f6 1000 if( ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==13))||
1001 ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==11)) ||
1002 ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==211)) ) {
a0271296 1003 if(qT>0.120) fHistPtKPDG->Fill(track->Pt()); // ALL KAONS (pdg) inside ESD kink sample
1004 if(qT>0.120) {
1005 if(code1>0.) fHiPtKPDGP->Fill(trackPt ); // // positive KAONS (pdg) inside ESD kink sample
1006 if(code1<0.) fHiPtKPDGN->Fill( trackPt ); // // negative KAONS (pdg) inside ESD kink sample
1007 }
1008 fHistEta->Fill(trackEta) ; // Eta distr of PDG kink ESD kaons
1009 frapidESDK->Fill(rapiditK) ; //18/feb rapiddistr of PDG kink ESD kaons
1010 if( qT > 0.120 ) fHistQt2->Fill(qT); // PDG ESD kaons
92adf4f6 1011 }
1012 }
10eaad41 1013
a0271296 1014
1015 //Double_t maxDecAngKmu=f1->Eval(motherMfromKink.Mag(),0.,0.,0.);
1016 Double_t maxDecAngKmu=f1->Eval(track->P(), 0.,0.,0.);
1017 Double_t maxDecAngpimu=f2->Eval(track->P(), 0.,0.,0.);
10eaad41 1018// two dimensional plot
a0271296 1019 if(TMath::Abs(code1)==321) fAngMomK->Fill(track->P(), kinkAngle);
1020 if(TMath::Abs(code1)==211) fAngMomPi->Fill( track->P(), kinkAngle);
1021//_______
1022
10eaad41 1023//
1024// invariant mass of mother track decaying to mu
1025 Float_t energyDaughterMu=TMath::Sqrt(daughterMKink.Mag()*daughterMKink.Mag()+0.105658*0.105658);
a0271296 1026 Float_t energyDaughterPi=TMath::Sqrt(daughterMKink.Mag()*daughterMKink.Mag()+0.139570*0.139570);
1027 Float_t energyDaughterKa=TMath::Sqrt(daughterMKink.Mag()*daughterMKink.Mag()+0.493677*0.493677);
1028// Float_t energyDaughterPr=TMath::Sqrt(daughterMKink.Mag()*daughterMKink.Mag()+0.938658*0.938658);
10eaad41 1029 Float_t p1XM= motherMfromKink.Px();
1030 Float_t p1YM= motherMfromKink.Py();
1031 Float_t p1ZM= motherMfromKink.Pz();
1032 Float_t p2XM= daughterMKink.Px();
1033 Float_t p2YM= daughterMKink.Py();
1034 Float_t p2ZM= daughterMKink.Pz();
1035 Float_t p3Daughter=TMath::Sqrt(((p1XM-p2XM)*(p1XM-p2XM))+((p1YM-p2YM)*(p1YM-p2YM))+((p1ZM-p2ZM)*(p1ZM-p2ZM)));
1036 Double_t invariantMassKmu= TMath::Sqrt((energyDaughterMu+p3Daughter)*(energyDaughterMu+p3Daughter)-motherMfromKink.Mag()*motherMfromKink.Mag());
a0271296 1037 Double_t invariantMassKpi= TMath::Sqrt((energyDaughterPi+p3Daughter)*(energyDaughterPi+p3Daughter)-motherMfromKink.Mag()*motherMfromKink.Mag());
1038 Double_t invariantMassKK = TMath::Sqrt((energyDaughterKa+p3Daughter)*(energyDaughterKa+p3Daughter)-motherMfromKink.Mag()*motherMfromKink.Mag());
1039 fInvMassMuNuAll ->Fill(invariantMassKmu);
1040 fRadiusPt->Fill( kink->GetR(), track->Pt()); //
10eaad41 1041
a0271296 1042
1043 if (qT>0.120) fSignPtNcl->Fill( signPt , tpcNCl );
1044
1045//
1046 // if((qT>0.12)&&((kink->GetR()>120.)&&(kink->GetR()<210.))&&(TMath::Abs(rapiditK )<0.7)) {
1047 if((qT>0.12)&&((kink->GetR()> fKinkRadLow )&&(kink->GetR()< fKinkRadUp ))&&(TMath::Abs(rapiditK )<0.7)) {
10eaad41 1048 fM1kaon->Fill(invariantMassKmu);
a0271296 1049 fMinvPi->Fill(invariantMassKpi);
1050 fMinvKa->Fill(invariantMassKK);
1051 fRadiusNcl->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
1052 }
1053
1054//
1055 // if ( tpcNCl<30 ) continue;
1056 if ( tpcNCl<20. ) continue;
1057 //if( ( ( track->GetTPCclusters(0) ) / (kink->GetR() ) ) > 0.63 ) continue;
1058 Double_t tpcNClHigh = -51.67+ (11./12.) *( kink->GetR() ) ;
1059 if ( tpcNCl > tpcNClHigh) continue;
1060
1061 Double_t tpcNClMin = -85.5 + (65./95.) *( kink->GetR() ) ;
1062 // if ( tpcNClMin < tpcNCl ) continue;
1063 if ( tpcNCl < tpcNClMin ) continue;
1064 // 20/7/2012 if( ( ( track->GetTPCclusters(0) ) / (kink->GetR() ) ) < 0.20 ) continue;
1065
1066// if( ( ( track->GetTPCclusters(0)) / ( kink->GetR() )) > 0.63 ) continue;
1067 // Int_t tpcNClMin = -87. + (2./3.) *( kink->GetR() ) ;
1068 // if ( tpcNClMin < tpcNCl ) continue;
1069 // if ( tpcNCl < tpcNClMin ) continue;
1070
1071// if( ( ( track->GetTPCclusters(0)) / ( kink->GetR() )) < 0.20 ) continue; // 5feb
1072 // back , 20/1/2013 if (ratioCrossedRowsOverFindableClustersTPC< 0.5 )continue;// check for systematics 14/1/2013
1073 //
10eaad41 1074
1075// kaon selection from kinks
a0271296 1076
1077 //===== 8/2/13 if((kinkAngle>maxDecAngpimu)&&(qT>0.12)&&(qT<0.30)&&((kink->GetR()>120.)&&(kink->GetR()<210.))&&(TMath::Abs(rapiditK )<0.7)&&(invariantMassKmu<0.8)) {
1078 if((kinkAngle>maxDecAngpimu)&&(qT>0.12)&&(qT<0.30)&&((kink->GetR()> fKinkRadLow )&&(kink->GetR()< fKinkRadUp ))&&(TMath::Abs(rapiditK )<0.7)&&(invariantMassKmu<0.8)) {
1079// 29092010 if((kinkAngle>maxDecAngpimu)&&(qT>0.120)&&(qT<0.25)&&((kink->GetR()>120.)&&(kink->GetR()<210.))&&(TMath::Abs(rapiditK )<0.7)&&(invariantMassKmu<0.6)) {
1080// if((kinkAngle>maxDecAngpimu)&&(qT>0.04)&&(qT<0.30)&&((kink->GetR()>133.)&&(kink->GetR()<179.))&&(TMath::Abs(rapiditK )<0.5)&&(invariantMassKmu<0.6)) {
1081
1082 fAngMomKKinks->Fill(track->P(), kinkAngle);
1083 fPtCut2 ->Fill(trackPt );
1084
1085 if ( (kinkAngle>maxDecAngKmu*0.98)&& ( track->P() > 1.2 ) ) continue; // maximum angle s
1086 if ( (kinkAngle<maxDecAngpimu*1.20) ) continue; // maximum angle s
1087
1088 fPtCut3 ->Fill(trackPt );
1089 //fTPCSgnlPa->Fill(track->P(),track->GetTPCsignal());
1090 fTPCSgnlPa->Fill(track->GetInnerParam()->GetP(),track->GetTPCsignal());
1091 // if( nsigma > 3.5 ) fcode2->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
c4962da5 1092 // test 25/2/13 NOdEdx test if(nsigma > 3.5) continue; // 1/11/12
a0271296 1093 // if(nsigma > 4.0) continue; // test 17/2/2011 4% or more ? bg?
1094//
1095 fTPCSgnlP->Fill(track->GetInnerParam()->GetP(), (track->GetTPCsignal() ) ) ;
1096
1097 fInvMassMuNuPt ->Fill(invariantMassKmu, trackPt);
1098// loop on kink daughters inside mother's loop
1099 Int_t ESDLabelM = 0. ;
1100 Int_t ESDLabelD = 0. ;
1101 Double_t dEdxDauMC = 0.0;
1102 Double_t raDAU=0.;
1103 Int_t Ikink =0;
1104 Int_t IRkink =0;
1105for (Int_t jTrack = 0; jTrack < esd->GetNumberOfTracks(); jTrack++) {
1106
1107 AliESDtrack* trackDau = esd->GetTrack(jTrack);
1108 if (!trackDau) {
1109 Printf("ERROR: Could not receive track %d", jTrack);
1110 continue;
1111 }
1112 Int_t indexKinkDAU =trackDau->GetKinkIndex(0);
1113 if (indexKinkDAU <0 ){
1114 AliESDkink *kinkDau=esd->GetKink(TMath::Abs(indexKinkDAU)-1);
1115 raDAU= kinkDau->GetR();
1116 ESDLabelM=kinkDau->GetLabel(0); // mothers's label
1117 ESDLabelM = TMath::Abs(ESDLabelM);
1118 ESDLabelD=kinkDau->GetLabel(1); // Daughter'slabel
1119 ESDLabelD = TMath::Abs(ESDLabelD);
1120 if ( kink->GetR() == kinkDau->GetR() ) IRkink++;
1121 if ( ESDLabelM == label ) Ikink++ ;
1122 }
1123 // if (( ESDLabelM== eSDfLabel1)) {
1124 if ( (Ikink >0) && (IRkink>0 ) ) {
1125// daughter kink
1126 //if(indexKinkDAU >0) nsigmaPi = (fPIDResponse->NumberOfSigmasTPC(trackDau,AliPID::kPion));// 26/10 eftihis
1127 if(indexKinkDAU >0) nsigmaPi = (fPIDResponse->NumberOfSigmasTPC(trackDau,AliPID::kKaon));// 26/10 eftihis
1128 // nsigmaPion= (fESDpid->NumberOfSigmasTPC(trackD,AliPID::kPion));
1129 // 22/11/12 if((indexKinkDau >0)&& (nsigmaPion>1.2)) fTPCSgnlKinkDau->Fill(trackD->P(), (trackD->GetTPCsignal() ) ) ; // daughter kink
1130 //if((indexKinkDau >0)) fTPCSgnlKinkDau->Fill(trackD->P(), (trackD->GetTPCsignal() ) ) ; // daughter kink
1131 if((indexKinkDAU >0)) dEdxDauMC = trackDau->GetTPCsignal() ; // daughter kink
1132 }
1133 }
1134// end internal loop for kink daughters
1135
1136 // fTPCSgnlP->Fill(trMomTPC , (track->GetTPCsignal() ) ) ;
1137 // fTPCSgnlPtpc->Fill(trMomTPC , (track->GetTPCsignal() ) ) ;
1138 //fMothKinkMomSgnl ->Fill(trMomTPCKink , (track->GetTPCsignal() ) ) ;
1139 // fMothKinkMomSgnl ->Fill( dEdxDauMC , (track->GetTPCsignal() ) ) ;
1140 // fTPCMomNSgnl->Fill(trMomTPC ,pidResponse->NumberOfSigmasTPC(track, AliPID::kKaon) );
1141 fNSigmTPC ->Fill(nsigmall );
1142// daughter selection
1143 //fTPCSgnlKinkDau->Fill( daughterMKink.Mag() , dEdxDauMC ) ; // daughter kink
1144 // if( nsigmaPion > 1.0 ) fcode4->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1145 // if( dEdxDauMC > 1.5 *(track->GetTPCsignal() ) ) fcode4->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1146//
1147 //fTPCMomNSgnl->Fill(trMomTPC ,nsigmall );
1148 fTPCMomNSgnl->Fill(track->GetInnerParam()->GetP() ,nsigmall );
1149//
7ccf0419 1150
a0271296 1151 fRadNclcln->Fill( (kink->GetR()) ,(track->GetTPCclusters(0) ) ) ;
1152 fRadiusPtcln->Fill( kink->GetR(), trackPt); //
10eaad41 1153
a0271296 1154 fAngMomKC->Fill(track->P() , kinkAngle);
1155 fHistPtKaon->Fill(track->Pt() ); //all PID kink-kaon
1156 if( code1>0.) fHistPtKaoP->Fill(track->Pt() ); //all PID kink-kaon
1157 if( code1<0.) fHistPtKaoN->Fill(track->Pt() ); //all PID kink-kaon
1158// systematics
1159 fradPtRapESD->Fill(kink->GetR(), 1./ track->Pt(), rapiditK);
1160//
1161 fHistEtaK->Fill(rapiditK );
1162 frad->Fill( kink->GetR() );
1163 flenHelx->Fill( lenHelx ); //??
1164 flifeKink ->Fill(lifeKink );//??
1165 fLHelESDK ->Fill( ( lenHelx /track->P() )*0.493677);// for all 'PID' kaons 31/7/11// ??
1166 flifTiESDK->Fill( ( lifeKink /track->P() )*0.493677); // ??
10eaad41 1167
10eaad41 1168
a0271296 1169
1170 fSignPtNcl->Fill( signPt , tpcNCl );
1171 fSignPtEta->Fill(signPt , rapiditK );
1172 fEtaNcl->Fill(rapiditK, tpcNCl );
1173 fSignPt->Fill( signPt );
1174 fRatChi2Ncl-> Fill((track->GetTPCchi2()/track->GetTPCclusters(0) )) ;
1175 fdcatoVxXY->Fill(dcaToVertexXYpos);
10eaad41 1176
92adf4f6 1177// kaons from k to mun and k to pipi and to e decay
1178 if( ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==13))||
1179 ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==11)) ||
1180 ( (TMath::Abs(code1)==321)&&(TMath::Abs(dcode1)==211)) ) {
10eaad41 1181
7ccf0419 1182 if ( label<=nPrim ) fPtPrKink->Fill(track->Pt());
a0271296 1183
1184 // flifetim2 ->Fill( ( lenHelx /track->P() )*0.493667); // to compare with fLHelESDK
1185 flifTiESDK->Fill( ( lifeKink /track->P() )*0.493667);
1186
1187
1188
1189 fKinkKaon->Fill(track->Pt());
1190 fDCAkink->Fill( Dist2 );
1191 fPosiKinkK->Fill( vposKink[0], vposKink[1] );
1192 fPosiKinKXZ->Fill( vposKink[0], vposKink[2] );
1193 fPosiKinKYZ->Fill( vposKink[1], vposKink[2] );
1194 if( code1>0.) fkinkKaonP->Fill(trackPt); // kPtPID kink-kaon
1195 if( code1<0.) fkinkKaonN->Fill(trackPt); // PID kink-kaon
1196// daughters
1197 if((((nsigmaPi) > 0.)&& ( dEdxDauMC > 70. ) )) fcode4->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1198 if ( TMath::Abs(dEdxDauMC - track->GetTPCsignal() ) < 2) fcode2->Fill( TMath::Abs(code1), TMath::Abs(dcode1));
1199 // fTPCSgnlPtpc->Fill(trMomTPC , (track->GetTPCsignal() ) ) ;
1200 fTPCSgnlPtpc ->Fill( daughterMKink.Mag() , dEdxDauMC ) ; // daughter kink
1201 fMothKinkMomSgnlD->Fill( dEdxDauMC , (track->GetTPCsignal() ) ) ;
92adf4f6 1202 }
10eaad41 1203 else {
a0271296 1204 fKinkKaonBg->Fill(track->Pt());
1205 fMothKinkMomSgnl ->Fill( dEdxDauMC , (track->GetTPCsignal() ) ) ;
1206// fTPCSgnlKinkDau->Fill( daughterMKink.Mag() , dEdxDauMC ) ; // daughter kink
1207 // if( dEdxDauMC > 1.5 *(track->GetTPCsignal() ) ) fcode4->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1208 // if(( (track->P())<1. )&& ( dEdxDauMC > 1.5 *(track->GetTPCsignal() ) )) fcodeDau1 ->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1209 if( (( nsigmaPi) > 0. ) && (( dEdxDauMC > 70 ) )) fcodeDau1 ->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1210 if ( TMath::Abs(dEdxDauMC - track->GetTPCsignal() ) < 2) fcodeDau2->Fill( TMath::Abs(code1), TMath::Abs(dcode1));
1211 fTPCSgnlKinkDau->Fill( daughterMKink.Mag() , dEdxDauMC ) ; // daughter kink
1212//
1213 fMinvPr->Fill(invariantMassKmu);
1214//
1215 fDCAkinkBG->Fill( Dist2 );
1216 fPosiKinKBgXY->Fill( vposKink[0], vposKink[1] );
1217 fPosiKinKBgZY->Fill( vposKink[2], vposKink[1] );
1218 fPosiKinKBgZX->Fill( vposKink[2], kink->GetR() ); // 31/7/11
1219 if( code1>0.) fKinKBGP ->Fill( trackPt ); //all PID kink-kaon
1220 if( code1<0.) fKinKBGN ->Fill( trackPt ); //all PID kink-kaonl
7ccf0419 1221 fdcodeH->Fill( TMath::Abs(code1), TMath::Abs(dcode1)); // put it here, 22/10/2009
a0271296 1222 if (eSDfLabel1==eSDfLabeld) fcodeH->Fill(TMath::Abs(code1), TMath::Abs(dcode1));
1223 if (eSDfLabeld>nPrim ) fZkinkZDau->Fill( vposKink[2],hVzdau );
1224
7ccf0419 1225 } // primary and all +BG
10eaad41 1226
1227 } // kink selection
1228
1229
1230 } //End Kink Information
1231
1232
1233 } //track loop
1234
a0271296 1235// } // vx 10 cm only on esd
10eaad41 1236 PostData(1, fListOfHistos);
1237
1238}
1239
1240//________________________________________________________________________
1241void AliAnalysisKinkESDMC::Terminate(Option_t *)
1242{
1243 // Draw result to the screen
1244 // Called once at the end of the query
1245
1246}
10eaad41 1247
1248const AliESDVertex* AliAnalysisKinkESDMC::GetEventVertex(const AliESDEvent* esd) const
1249 // Get the vertex from the ESD and returns it if the vertex is valid
1250
1251{
1252 // Get the vertex
1253
a0271296 1254// 10/4 const AliESDVertex* vertex = esd->GetPrimaryVertex();
1255 const AliESDVertex* vertex = esd->GetPrimaryVertexTracks();
10eaad41 1256
a0271296 1257 //if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>2)) return vertex;
1258 if((vertex->GetStatus()==kTRUE)) return vertex;
10eaad41 1259 else
1260 {
1261 vertex = esd->GetPrimaryVertexSPD();
a0271296 1262 if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>0)) return vertex;
1263 // if((vertex->GetStatus()==kTRUE)) return vertex;
10eaad41 1264 else
1265 return 0;
1266 }
f92b626a 1267}