]>
Commit | Line | Data |
---|---|---|
0a28d543 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: ALICE Offline. * | |
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 | //=========================================================================// | |
18 | // AliEbyE Analysis for Particle Ratio Fluctuation // | |
19 | // Deepika Rathee | Satyajit Jena // | |
20 | // drathee@cern.ch | sjena@cern.ch // | |
21 | // Date: Wed Jul 9 18:38:30 CEST 2014 // | |
22 | // New approch to find particle ratio to reduce memory // | |
23 | // (Test Only) // | |
df4f740f | 24 | // Copied from NetParticle Classes |
25 | // Origin: Authors: Jochen Thaeder <jochen@thaeder.de> | |
26 | // Michael Weber <m.weber@cern.ch> | |
0a28d543 | 27 | //=========================================================================// |
28 | ||
29 | #include "TMath.h" | |
30 | #include "TAxis.h" | |
31 | ||
32 | #include "AliESDEvent.h" | |
33 | #include "AliStack.h" | |
34 | #include "AliMCEvent.h" | |
35 | #include "AliESDtrackCuts.h" | |
36 | ||
37 | #include "AliAODEvent.h" | |
38 | #include "AliAODMCParticle.h" | |
39 | ||
40 | #include "AliEbyEPidRatioDCA.h" | |
41 | ||
42 | using namespace std; | |
43 | ||
44 | ClassImp(AliEbyEPidRatioDCA) | |
45 | ||
46 | //________________________________________________________________________ | |
47 | AliEbyEPidRatioDCA::AliEbyEPidRatioDCA() : | |
48 | AliEbyEPidRatioBase("DCA", "DCA"), | |
49 | fESDTrackCutsBkg(NULL), | |
50 | fHnDCA(NULL) { | |
51 | // Constructor | |
52 | ||
e146cc53 | 53 | |
0a28d543 | 54 | AliLog::SetClassDebugLevel("AliEbyEPidRatioDCA",10); |
55 | } | |
56 | ||
57 | //________________________________________________________________________ | |
58 | AliEbyEPidRatioDCA::~AliEbyEPidRatioDCA() { | |
59 | // Destructor | |
60 | } | |
61 | ||
62 | //________________________________________________________________________ | |
63 | void AliEbyEPidRatioDCA::Process() { | |
64 | Float_t etaRange[2]; | |
65 | fESDTrackCutsBkg->GetEtaRange(etaRange[0],etaRange[1]); | |
66 | ||
67 | Float_t ptRange[2]; | |
68 | fESDTrackCutsBkg->GetPtRange(ptRange[0],ptRange[1]); | |
69 | ||
70 | // -- Track Loop | |
71 | for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) { | |
72 | ||
73 | AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack)); | |
74 | ||
75 | // -- Check if track is accepted for basic parameters | |
76 | if (!fHelper->IsTrackAcceptedBasicCharged(track)) | |
77 | continue; | |
78 | ||
79 | // -- Check if accepted - ESD | |
80 | if (fESD && !fESDTrackCutsBkg->AcceptTrack(dynamic_cast<AliESDtrack*>(track))) | |
81 | continue; | |
82 | ||
83 | // -- Check if accepted - AOD | |
84 | if (fAOD){ | |
85 | AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track); | |
86 | ||
87 | if (!trackAOD) { | |
88 | AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO"); | |
89 | continue; | |
90 | } | |
91 | if (!trackAOD->TestFilterBit(fAODtrackCutBit)) | |
92 | continue; | |
93 | ||
94 | // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs) | |
95 | if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1])) | |
96 | continue; | |
97 | } | |
98 | ||
99 | Int_t gPdgCode = 0; | |
100 | Int_t iPid = 0; | |
101 | Double_t pid[3]; | |
102 | if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kPion))) { iPid = 1; gPdgCode = 211;} | |
103 | else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kKaon))) { iPid = 2; gPdgCode = 321;} | |
104 | else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kProton))){ iPid = 3; gPdgCode = 2212;} | |
eac864bc | 105 | else { iPid = 0; gPdgCode = 0;} |
0a28d543 | 106 | |
15bb9247 | 107 | // cout << " --- DCA ---- " << iPid << " " << gPdgCode << endl; |
0a28d543 | 108 | Double_t yP; |
109 | if (!fHelper->IsTrackAcceptedRapidity(track, yP, iPid)) | |
110 | continue; | |
111 | ||
112 | Bool_t isDCArAccepted = fHelper->IsTrackAcceptedDCA(track); | |
113 | ||
114 | // -- Check if accepted with thighter DCA cuts | |
115 | // ?!?!? How to mimic this in AODs? | |
116 | if (fESD && !fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track))) | |
117 | isDCArAccepted = kFALSE; | |
118 | ||
119 | // -- Check for contamination | |
120 | Int_t contIdx = (fIsMC) ? GetContIdxTrack(TMath::Abs(track->GetLabel()), track->Charge(), gPdgCode) : 1; | |
121 | ||
122 | // -- Get DCAs (dca_r, dca_z, sigma_xy, sigma_xy_z, sigma_z) | |
123 | Float_t dca[2], cov[3]; // | |
124 | if (fESD) | |
125 | (dynamic_cast<AliESDtrack*>(track))->GetImpactParameters(dca, cov); | |
126 | else | |
127 | dca[0] = 1.; | |
128 | ||
129 | // -- Fill THnSparse | |
130 | ||
131 | if(iPid != 0) { | |
f62957be | 132 | Double_t hnDCA[10] = {fCentralityBin,0., |
133 | static_cast<Double_t>(track->Charge()), | |
0a28d543 | 134 | track->Eta(), |
135 | yP, | |
136 | track->Phi(), | |
137 | track->Pt(), | |
f62957be | 138 | static_cast<Double_t>(contIdx), |
139 | static_cast<Double_t>(isDCArAccepted), | |
f7ea34d2 | 140 | dca[0]}; |
0a28d543 | 141 | fHnDCA->Fill(hnDCA); |
142 | } | |
f7ea34d2 | 143 | |
f62957be | 144 | Double_t hnDCA[10] = {fCentralityBin, |
145 | static_cast<Double_t>(iPid), | |
146 | static_cast<Double_t>(track->Charge()), | |
f7ea34d2 | 147 | track->Eta(), |
148 | yP, | |
149 | track->Phi(), | |
150 | track->Pt(), | |
f62957be | 151 | static_cast<Double_t>(contIdx), |
152 | static_cast<Double_t>(isDCArAccepted), | |
f7ea34d2 | 153 | dca[0]}; |
0a28d543 | 154 | fHnDCA->Fill(hnDCA); |
155 | ||
156 | ||
157 | } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) { | |
158 | ||
159 | return; | |
160 | } | |
161 | ||
162 | //________________________________________________________________________ | |
163 | void AliEbyEPidRatioDCA::CreateHistograms() { | |
eac864bc | 164 | Int_t binHnDCA[10] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent,4, |
165 | AliEbyEPidRatioHelper::fgkfHistNBinsSign, | |
f7ea34d2 | 166 | AliEbyEPidRatioHelper::fgkfHistNBinsEta, |
167 | AliEbyEPidRatioHelper::fgkfHistNBinsRap, | |
168 | AliEbyEPidRatioHelper::fgkfHistNBinsPhi, | |
169 | AliEbyEPidRatioHelper::fgkfHistNBinsPt, | |
f7ea34d2 | 170 | 4, 2, 77}; |
171 | ||
eac864bc | 172 | Double_t minHnDCA[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],-0.5, |
173 | AliEbyEPidRatioHelper::fgkfHistRangeSign[0], | |
f7ea34d2 | 174 | AliEbyEPidRatioHelper::fgkfHistRangeEta[0], |
175 | AliEbyEPidRatioHelper::fgkfHistRangeRap[0], | |
176 | AliEbyEPidRatioHelper::fgkfHistRangePhi[0], | |
177 | AliEbyEPidRatioHelper::fgkfHistRangePt[0], | |
eac864bc | 178 | 0.5, -0.5, -3.}; |
0a28d543 | 179 | |
eac864bc | 180 | Double_t maxHnDCA[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1],3.5, |
181 | AliEbyEPidRatioHelper::fgkfHistRangeSign[1], | |
f7ea34d2 | 182 | AliEbyEPidRatioHelper::fgkfHistRangeEta[1], |
183 | AliEbyEPidRatioHelper::fgkfHistRangeRap[1], | |
184 | AliEbyEPidRatioHelper::fgkfHistRangePhi[1], | |
185 | AliEbyEPidRatioHelper::fgkfHistRangePt[1], | |
eac864bc | 186 | 4.5, 1.5, 3.}; |
0a28d543 | 187 | |
188 | ||
eac864bc | 189 | fHnDCA = new THnSparseD("hnDCA", "cent:pid:etaRec:yRec:phiRec:ptRec:sign:contPart:contSign:DCArAccepted:DCAr", 10, binHnDCA, minHnDCA, maxHnDCA); |
0a28d543 | 190 | |
191 | fHnDCA->Sumw2(); | |
f7ea34d2 | 192 | |
0a28d543 | 193 | fHnDCA->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90 --> 10 bins |
f7ea34d2 | 194 | fHnDCA->GetAxis(1)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3 |
eac864bc | 195 | fHnDCA->GetAxis(2)->SetTitle("sign"); // -1 | 0 | +1 |
196 | fHnDCA->GetAxis(3)->SetTitle("#eta_{Rec}"); // eta [-0.9, 0.9] | |
197 | fHnDCA->GetAxis(4)->SetTitle("#it{y}_{Rec}"); // rapidity [-0.5, 0.5] | |
198 | fHnDCA->GetAxis(5)->SetTitle("#varphi_{Rec} (rad)"); // phi [ 0. , 2Pi] | |
199 | fHnDCA->GetAxis(6)->SetTitle("#it{p}_{T,Rec} (GeV/#it{c})"); // pT [ 0.2, 2.6] | |
f7ea34d2 | 200 | fHnDCA->GetAxis(7)->SetTitle("contPart"); // 1 primary | 2 missId | 3 from WeakDecay | 4 p from Material |
201 | fHnDCA->GetAxis(8)->SetTitle("DCArAccepted"); // 0 not accepted | 1 accepted | |
202 | fHnDCA->GetAxis(9)->SetTitle("DCAr"); // DCAr [-3, 3] | |
0a28d543 | 203 | |
0a28d543 | 204 | |
a0b89af4 | 205 | fHelper->BinLogAxis(fHnDCA, 6, fESDTrackCuts); |
206 | fHelper->BinLogAxis(fHnDCA, 6, fESDTrackCutsBkg); | |
0a28d543 | 207 | |
208 | // -- Set binning for DCAr | |
209 | Double_t binsDCAr[77] = {-3.,-2.85,-2.7,-2.55,-2.4,-2.25,-2.1,-1.95,-1.8,-1.65,-1.5,-1.35,-1.2,-1.05,-0.9,-0.75,-0.6,-0.45,-0.3,-0.285,-0.27,-0.255,-0.24,-0.225,-0.21,-0.195,-0.18,-0.165,-0.15,-0.135,-0.12,-0.105,-0.09,-0.075,-0.06,-0.045,-0.03,-0.015,0.,0.015,0.03,0.045,0.06,0.075,0.09,0.105,0.12,0.135,0.15,0.165,0.18,0.195,0.21,0.225,0.24,0.255,0.27,0.285,0.3,0.45,0.6,0.75,0.9,1.05,1.2,1.35,1.5,1.65,1.8,1.95,2.1,2.25,2.4,2.55,2.7,2.85,3.}; | |
f7ea34d2 | 210 | fHnDCA->GetAxis(9)->Set(76, binsDCAr); |
0a28d543 | 211 | |
212 | // ------------------------------------------------------------------ | |
213 | ||
214 | return; | |
215 | } | |
216 | ||
217 | //________________________________________________________________________ | |
218 | Int_t AliEbyEPidRatioDCA::GetContIdxTrack(Int_t label, Int_t sign, Int_t gPdgCode) { | |
219 | Int_t contIdx = -1; | |
220 | ||
221 | AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label)); | |
222 | if (!particle) | |
223 | return contIdx; | |
224 | ||
eac864bc | 225 | Bool_t isPhysicalPrimary = (fESD) ? fStack->IsPhysicalPrimary(label): (static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary(); |
0a28d543 | 226 | Bool_t isSecondaryFromWeakDecay = (fESD) ? fStack->IsSecondaryFromWeakDecay(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromWeakDecay(); |
227 | Bool_t isSecondaryFromMaterial = (fESD) ? fStack->IsSecondaryFromMaterial(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromMaterial(); | |
228 | ||
229 | if (isPhysicalPrimary) { | |
230 | if (gPdgCode == 0) { | |
231 | // -- Check if correctly identified | |
232 | if (particle->PdgCode() == (sign*gPdgCode)) | |
233 | contIdx = 1; | |
234 | // -- MissIdentification | |
235 | else | |
236 | contIdx = 2; | |
237 | } | |
238 | else | |
239 | contIdx = 1; | |
240 | } | |
241 | ||
242 | // -- Check if secondaries from material or weak decay | |
243 | else if(isSecondaryFromWeakDecay) | |
244 | contIdx = 3; | |
245 | else if (isSecondaryFromMaterial) | |
246 | contIdx = 4; | |
247 | else | |
248 | contIdx = -1; | |
249 | ||
250 | return contIdx; | |
251 | } | |
252 | ||
253 | ||
254 |