]>
Commit | Line | Data |
---|---|---|
84164254 | 1 | #include "TChain.h" |
2 | #include "TTree.h" | |
3 | #include "TH1F.h" | |
4 | #include "TH2F.h" | |
40b41983 | 5 | #include "TH3D.h" |
84164254 | 6 | #include "TCanvas.h" |
7 | #include "TParticle.h" | |
8 | #include "TObjArray.h" | |
9 | ||
10 | #include "AliAnalysisTask.h" | |
11 | #include "AliAnalysisManager.h" | |
12 | ||
13 | #include "AliStack.h" | |
14 | #include "AliMCEvent.h" | |
15 | #include "AliESDEvent.h" | |
16 | #include "AliESDInputHandler.h" | |
17 | #include "AliESDtrackCuts.h" | |
18 | #include "AliCentrality.h" | |
6d6eb2df | 19 | #include "AliLog.h" |
84164254 | 20 | |
21 | #include "AliAnalysisTaskEfficiencyBF.h" | |
22 | ||
23 | // --------------------------------------------------------------------- | |
24 | // | |
25 | // Task for calculating the efficiency of the Balance Function | |
26 | // for single particles and pairs | |
27 | // | |
28 | // Authors: Panos Christakoglou, Michael Weber | |
29 | // | |
30 | // --------------------------------------------------------------------- | |
31 | ||
32 | ClassImp(AliAnalysisTaskEfficiencyBF) | |
33 | ||
34 | //________________________________________________________________________ | |
35 | AliAnalysisTaskEfficiencyBF::AliAnalysisTaskEfficiencyBF(const char *name) | |
36 | : AliAnalysisTaskSE(name), fESD(0), fQAList(0), fOutputList(0), | |
37 | fHistEventStats(0), fHistCentrality(0), fHistNMult(0), | |
40b41983 | 38 | fHistGeneratedEtaPtPhiPlus(0), fHistFindableEtaPtPhiPlus(0), |
39 | fHistReconstructedEtaPtPhiPlus(0), fHistSurvivedEtaPtPhiPlus(0), | |
40 | fHistGeneratedEtaPtPhiMinus(0), fHistFindableEtaPtPhiMinus(0), | |
41 | fHistReconstructedEtaPtPhiMinus(0), fHistSurvivedEtaPtPhiMinus(0), | |
84164254 | 42 | fHistGeneratedEtaPtPlusControl(0), fHistFindableEtaPtPlusControl(0), |
43 | fHistReconstructedEtaPtPlusControl(0), fHistSurvivedEtaPtPlusControl(0), | |
44 | fHistGeneratedEtaPtMinusControl(0), fHistFindableEtaPtMinusControl(0), | |
45 | fHistReconstructedEtaPtMinusControl(0), fHistSurvivedEtaPtMinusControl(0), | |
46 | fHistGeneratedEtaPtPlusPlus(0), fHistFindableEtaPtPlusPlus(0), | |
47 | fHistReconstructedEtaPtPlusPlus(0), fHistSurvivedEtaPtPlusPlus(0), | |
48 | fHistGeneratedEtaPtMinusMinus(0), fHistFindableEtaPtMinusMinus(0), | |
49 | fHistReconstructedEtaPtMinusMinus(0), fHistSurvivedEtaPtMinusMinus(0), | |
50 | fHistGeneratedEtaPtPlusMinus(0), fHistFindableEtaPtPlusMinus(0), | |
51 | fHistReconstructedEtaPtPlusMinus(0), fHistSurvivedEtaPtPlusMinus(0), | |
40b41983 | 52 | fHistGeneratedPhiEtaPlusPlus(0), fHistFindablePhiEtaPlusPlus(0), |
53 | fHistReconstructedPhiEtaPlusPlus(0), fHistSurvivedPhiEtaPlusPlus(0), | |
54 | fHistGeneratedPhiEtaMinusMinus(0), fHistFindablePhiEtaMinusMinus(0), | |
55 | fHistReconstructedPhiEtaMinusMinus(0), fHistSurvivedPhiEtaMinusMinus(0), | |
56 | fHistGeneratedPhiEtaPlusMinus(0), fHistFindablePhiEtaPlusMinus(0), | |
57 | fHistReconstructedPhiEtaPlusMinus(0), fHistSurvivedPhiEtaPlusMinus(0), | |
84164254 | 58 | fESDtrackCuts(0), fAnalysisMode(0), |
59 | fCentralityEstimator("V0M"), fCentralityPercentileMin(0.0), fCentralityPercentileMax(5.0), | |
60 | fVxMax(3.0), fVyMax(3.0), fVzMax(10.), | |
61 | fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), fMaxDCAxy(3.0), fMaxDCAz(3.0), | |
d9906391 | 62 | fMinPt(0.3), fMaxPt(1.5), fMinEta(-0.8), fMaxEta(0.8),fEtaRangeMin(0.0), fEtaRangeMax(1.6), fPtRangeMin(0.3), fPtRangeMax(1.5), fPhiRangeMin(0.0),fPhiRangeMax(360.),fdPhiRangeMax(180.), fEtaBin(100),fdEtaBin(64),fPtBin(49),fPhiBin(100),fdPhiBin(90) { |
84164254 | 63 | // Define input and output slots here |
64 | // Input slot #0 works with a TChain | |
65 | DefineInput(0, TChain::Class()); | |
66 | // Output slot #0 id reserved by the base class for AOD | |
67 | // Output slot #1 writes into a TH1 container | |
68 | DefineOutput(1, TList::Class()); | |
69 | DefineOutput(2, TList::Class()); | |
70 | } | |
71 | ||
72 | //________________________________________________________________________ | |
73 | void AliAnalysisTaskEfficiencyBF::UserCreateOutputObjects() { | |
74 | // Create histograms | |
75 | // Called once | |
76 | ||
211b716d | 77 | // global switch disabling the reference |
78 | // (to avoid "Replacing existing TH1" if several wagons are created in train) | |
79 | Bool_t oldStatus = TH1::AddDirectoryStatus(); | |
80 | TH1::AddDirectory(kFALSE); | |
81 | ||
84164254 | 82 | fQAList = new TList(); |
83 | fQAList->SetName("QAList"); | |
84 | fQAList->SetOwner(); | |
85 | ||
86 | fOutputList = new TList(); | |
87 | fOutputList->SetName("OutputList"); | |
88 | fOutputList->SetOwner(); | |
89 | ||
90 | //Event stats. | |
91 | TString gCutName[4] = {"Total","Offline trigger", | |
92 | "Vertex","Analyzed"}; | |
93 | fHistEventStats = new TH1F("fHistEventStats", | |
94 | "Event statistics;;N_{events}", | |
95 | 4,0.5,4.5); | |
96 | for(Int_t i = 1; i <= 4; i++) | |
97 | fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); | |
98 | fQAList->Add(fHistEventStats); | |
99 | ||
100 | //ESD analysis | |
101 | fHistCentrality = new TH1F("fHistCentrality",";Centrality bin;Events", | |
102 | 20,0.5,20.5); | |
103 | fQAList->Add(fHistCentrality); | |
104 | ||
105 | //multiplicity (good MC tracks) | |
106 | TString histName; | |
107 | histName = "fHistNMult"; | |
108 | fHistNMult = new TH1F(histName.Data(), | |
109 | ";N_{mult.}", | |
110 | 200,0,20000); | |
111 | fQAList->Add(fHistNMult); | |
112 | ||
113 | //eta vs pt for MC positives | |
40b41983 | 114 | fHistGeneratedEtaPtPhiPlus = new TH3D("fHistGeneratedEtaPtPhiPlus", |
115 | "Generated positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 116 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 117 | fOutputList->Add(fHistGeneratedEtaPtPhiPlus); |
118 | fHistFindableEtaPtPhiPlus = new TH3D("fHistFindableEtaPtPhiPlus", | |
119 | "Findable positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 120 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 121 | fOutputList->Add(fHistFindableEtaPtPhiPlus); |
122 | fHistReconstructedEtaPtPhiPlus = new TH3D("fHistReconstructedEtaPtPhiPlus", | |
123 | "Reconstructed positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 124 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 125 | fOutputList->Add(fHistReconstructedEtaPtPhiPlus); |
126 | fHistSurvivedEtaPtPhiPlus = new TH3D("fHistSurvivedEtaPtPhiPlus", | |
127 | "Survived positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 128 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 129 | fOutputList->Add(fHistSurvivedEtaPtPhiPlus); |
84164254 | 130 | |
131 | //eta vs pt for MC negatives | |
40b41983 | 132 | fHistGeneratedEtaPtPhiMinus = new TH3D("fHistGeneratedEtaPtPhiMinus", |
133 | "Generated positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 134 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 135 | fOutputList->Add(fHistGeneratedEtaPtPhiMinus); |
136 | fHistFindableEtaPtPhiMinus = new TH3D("fHistFindableEtaPtPhiMinus", | |
137 | "Findable positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 138 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 139 | fOutputList->Add(fHistFindableEtaPtPhiMinus); |
140 | fHistReconstructedEtaPtPhiMinus = new TH3D("fHistReconstructedEtaPtPhiMinus", | |
141 | "Reconstructed positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 142 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 143 | fOutputList->Add(fHistReconstructedEtaPtPhiMinus); |
144 | fHistSurvivedEtaPtPhiMinus = new TH3D("fHistSurvivedEtaPtPhiMinus", | |
145 | "Survived positive primaries;#eta;p_{T} (GeV/c);#phi", | |
622c9e7f | 146 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax,fPhiBin,fPhiRangeMin,fPhiRangeMax); |
40b41983 | 147 | fOutputList->Add(fHistSurvivedEtaPtPhiMinus); |
84164254 | 148 | |
149 | //eta vs pt for MC positives (control) | |
150 | fHistGeneratedEtaPtPlusControl = new TH2F("fHistGeneratedEtaPtPlusControl", | |
151 | "Generated positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 152 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 153 | fOutputList->Add(fHistGeneratedEtaPtPlusControl); |
154 | fHistFindableEtaPtPlusControl = new TH2F("fHistFindableEtaPtPlusControl", | |
155 | "Findable positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 156 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 157 | fOutputList->Add(fHistFindableEtaPtPlusControl); |
158 | fHistReconstructedEtaPtPlusControl = new TH2F("fHistReconstructedEtaPtPlusControl", | |
159 | "Reconstructed positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 160 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 161 | fOutputList->Add(fHistReconstructedEtaPtPlusControl); |
162 | fHistSurvivedEtaPtPlusControl = new TH2F("fHistSurvivedEtaPtPlusControl", | |
163 | "Survived positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 164 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 165 | fOutputList->Add(fHistSurvivedEtaPtPlusControl); |
166 | ||
167 | //eta vs pt for MC negatives (control) | |
168 | fHistGeneratedEtaPtMinusControl = new TH2F("fHistGeneratedEtaPtMinusControl", | |
169 | "Generated positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 170 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 171 | fOutputList->Add(fHistGeneratedEtaPtMinusControl); |
172 | fHistFindableEtaPtMinusControl = new TH2F("fHistFindableEtaPtMinusControl", | |
173 | "Findable positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 174 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 175 | fOutputList->Add(fHistFindableEtaPtMinusControl); |
176 | fHistReconstructedEtaPtMinusControl = new TH2F("fHistReconstructedEtaPtMinusControl", | |
177 | "Reconstructed positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 178 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 179 | fOutputList->Add(fHistReconstructedEtaPtMinusControl); |
180 | fHistSurvivedEtaPtMinusControl = new TH2F("fHistSurvivedEtaPtMinusControl", | |
181 | "Survived positive primaries;#eta;p_{T} (GeV/c)", | |
622c9e7f | 182 | fEtaBin,fMinEta,fMaxEta,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 183 | fOutputList->Add(fHistSurvivedEtaPtMinusControl); |
184 | ||
185 | //eta vs pt for MC ++ | |
186 | fHistGeneratedEtaPtPlusPlus = new TH2F("fHistGeneratedEtaPtPlusPlus", | |
187 | "Generated ++ primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 188 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 189 | fOutputList->Add(fHistGeneratedEtaPtPlusPlus); |
190 | fHistFindableEtaPtPlusPlus = new TH2F("fHistFindableEtaPtPlusPlus", | |
191 | "Findable ++ primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 192 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 193 | fOutputList->Add(fHistFindableEtaPtPlusPlus); |
194 | fHistReconstructedEtaPtPlusPlus = new TH2F("fHistReconstructedEtaPtPlusPlus", | |
195 | "Reconstructed ++ primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 196 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 197 | fOutputList->Add(fHistReconstructedEtaPtPlusPlus); |
198 | fHistSurvivedEtaPtPlusPlus = new TH2F("fHistSurvivedEtaPtPlusPlus", | |
199 | "Survived ++ primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 200 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 201 | fOutputList->Add(fHistSurvivedEtaPtPlusPlus); |
202 | ||
203 | //eta vs pt for MC -- | |
204 | fHistGeneratedEtaPtMinusMinus = new TH2F("fHistGeneratedEtaPtMinusMinus", | |
205 | "Generated -- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 206 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 207 | fOutputList->Add(fHistGeneratedEtaPtMinusMinus); |
208 | fHistFindableEtaPtMinusMinus = new TH2F("fHistFindableEtaPtMinusMinus", | |
209 | "Findable -- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 210 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 211 | fOutputList->Add(fHistFindableEtaPtMinusMinus); |
212 | fHistReconstructedEtaPtMinusMinus = new TH2F("fHistReconstructedEtaPtMinusMinus", | |
213 | "Reconstructed -- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 214 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 215 | fOutputList->Add(fHistReconstructedEtaPtMinusMinus); |
216 | fHistSurvivedEtaPtMinusMinus = new TH2F("fHistSurvivedEtaPtMinusMinus", | |
217 | "Survived -- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 218 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 219 | fOutputList->Add(fHistSurvivedEtaPtMinusMinus); |
220 | ||
221 | //eta vs pt for MC +- | |
222 | fHistGeneratedEtaPtPlusMinus = new TH2F("fHistGeneratedEtaPtPlusMinus", | |
223 | "Generated +- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 224 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 225 | fOutputList->Add(fHistGeneratedEtaPtPlusMinus); |
226 | fHistFindableEtaPtPlusMinus = new TH2F("fHistFindableEtaPtPlusMinus", | |
227 | "Findable +- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 228 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 229 | fOutputList->Add(fHistFindableEtaPtPlusMinus); |
230 | fHistReconstructedEtaPtPlusMinus = new TH2F("fHistReconstructedEtaPtPlusMinus", | |
231 | "Reconstructed +- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 232 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 233 | fOutputList->Add(fHistReconstructedEtaPtPlusMinus); |
234 | fHistSurvivedEtaPtPlusMinus = new TH2F("fHistSurvivedEtaPtPlusMinus", | |
235 | "Survived +- primaries;#Delta#eta;p_{T} (GeV/c)", | |
d9906391 | 236 | fdEtaBin,fEtaRangeMin,fEtaRangeMax,fPtBin,fPtRangeMin,fPtRangeMax); |
84164254 | 237 | fOutputList->Add(fHistSurvivedEtaPtPlusMinus); |
238 | ||
40b41983 | 239 | //=============================// |
240 | //phi vs eta for MC ++ | |
241 | fHistGeneratedPhiEtaPlusPlus = new TH2F("fHistGeneratedPhiEtaPlusPlus", | |
242 | "Generated ++ primaries;#Delta#phi", | |
d9906391 | 243 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 244 | fOutputList->Add(fHistGeneratedPhiEtaPlusPlus); |
245 | fHistFindablePhiEtaPlusPlus = new TH2F("fHistFindablePhiEtaPlusPlus", | |
246 | "Findable ++ primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 247 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 248 | fOutputList->Add(fHistFindablePhiEtaPlusPlus); |
249 | fHistReconstructedPhiEtaPlusPlus = new TH2F("fHistReconstructedPhiEtaPlusPlus", | |
250 | "Reconstructed ++ primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 251 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 252 | fOutputList->Add(fHistReconstructedPhiEtaPlusPlus); |
253 | fHistSurvivedPhiEtaPlusPlus = new TH2F("fHistSurvivedPhiEtaPlusPlus", | |
254 | "Survived ++ primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 255 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 256 | fOutputList->Add(fHistSurvivedPhiEtaPlusPlus); |
257 | ||
258 | //phi vs eta for MC -- | |
259 | fHistGeneratedPhiEtaMinusMinus = new TH2F("fHistGeneratedPhiEtaMinusMinus", | |
260 | "Generated -- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 261 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 262 | fOutputList->Add(fHistGeneratedPhiEtaMinusMinus); |
263 | fHistFindablePhiEtaMinusMinus = new TH2F("fHistFindablePhiEtaMinusMinus", | |
264 | "Findable -- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 265 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 266 | fOutputList->Add(fHistFindablePhiEtaMinusMinus); |
267 | fHistReconstructedPhiEtaMinusMinus = new TH2F("fHistReconstructedPhiEtaMinusMinus", | |
268 | "Reconstructed -- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 269 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 270 | fOutputList->Add(fHistReconstructedPhiEtaMinusMinus); |
271 | fHistSurvivedPhiEtaMinusMinus = new TH2F("fHistSurvivedPhiEtaMinusMinus", | |
272 | "Survived -- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 273 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 274 | fOutputList->Add(fHistSurvivedPhiEtaMinusMinus); |
275 | ||
276 | //phi vs eta for MC +- | |
277 | fHistGeneratedPhiEtaPlusMinus = new TH2F("fHistGeneratedPhiEtaPlusMinus", | |
278 | "Generated +- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 279 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 280 | fOutputList->Add(fHistGeneratedPhiEtaPlusMinus); |
281 | fHistFindablePhiEtaPlusMinus = new TH2F("fHistFindablePhiEtaPlusMinus", | |
282 | "Findable +- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 283 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 284 | fOutputList->Add(fHistFindablePhiEtaPlusMinus); |
285 | fHistReconstructedPhiEtaPlusMinus = new TH2F("fHistReconstructedPhiEtaPlusMinus", | |
286 | "Reconstructed +- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 287 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 288 | fOutputList->Add(fHistReconstructedPhiEtaPlusMinus); |
289 | fHistSurvivedPhiEtaPlusMinus = new TH2F("fHistSurvivedPhiEtaPlusMinus", | |
290 | "Survived +- primaries;#Delta#phi;#Delta#eta", | |
d9906391 | 291 | fdPhiBin,fPhiRangeMin,fdPhiRangeMax,fdEtaBin,fEtaRangeMin,fEtaRangeMax); |
40b41983 | 292 | fOutputList->Add(fHistSurvivedPhiEtaPlusMinus); |
293 | //=============================// | |
294 | ||
84164254 | 295 | fQAList->Print(); |
296 | fOutputList->Print(); | |
297 | ||
298 | PostData(1, fQAList); | |
299 | PostData(2, fOutputList); | |
211b716d | 300 | |
301 | TH1::AddDirectory(oldStatus); | |
302 | ||
84164254 | 303 | } |
304 | ||
305 | //________________________________________________________________________ | |
306 | void AliAnalysisTaskEfficiencyBF::UserExec(Option_t *) { | |
307 | // Main loop | |
308 | // Called for each event | |
309 | ||
310 | // Post output data. | |
311 | //ESD analysis | |
312 | fESD = dynamic_cast<AliESDEvent*>(InputEvent()); | |
313 | if (!fESD) { | |
314 | printf("ERROR: fESD not available\n"); | |
315 | return; | |
316 | } | |
317 | ||
318 | AliMCEvent* mcEvent = MCEvent(); | |
319 | if (!mcEvent) { | |
6d6eb2df | 320 | AliError("ERROR: Could not retrieve MC event"); |
84164254 | 321 | return; |
322 | } | |
323 | AliStack* stack = mcEvent->Stack(); | |
324 | if (!stack) { | |
6d6eb2df | 325 | AliError("ERROR: Could not retrieve MC stack"); |
84164254 | 326 | return; |
327 | } | |
328 | ||
329 | // arrays for 2 particle histograms | |
330 | Int_t nMCLabelCounter = 0; | |
331 | const Int_t maxMCLabelCounter = 20000; | |
332 | ||
84164254 | 333 | Double_t eta[maxMCLabelCounter]; |
40b41983 | 334 | Double_t pt[maxMCLabelCounter]; |
335 | Double_t phi[maxMCLabelCounter]; | |
84164254 | 336 | Int_t level[maxMCLabelCounter]; |
337 | Int_t charge[maxMCLabelCounter]; | |
338 | ||
84164254 | 339 | //AliInfo(Form("%d %d",mcEvent->GetNumberOfTracks(),fESD->GetNumberOfTracks())); |
340 | fHistEventStats->Fill(1); //all events | |
341 | ||
342 | //Centrality stuff | |
343 | AliCentrality *centrality = fESD->GetCentrality(); | |
344 | Int_t nCentrality = 0; | |
345 | nCentrality = (Int_t)(centrality->GetCentralityPercentile(fCentralityEstimator.Data())/10.); | |
346 | ||
347 | //Printf("Centrality: %lf",centrality->GetCentralityPercentile(fCentralityEstimator.Data())); | |
348 | ||
349 | if(centrality->IsEventInCentralityClass(fCentralityPercentileMin, | |
350 | fCentralityPercentileMax, | |
351 | fCentralityEstimator.Data())) { | |
352 | fHistEventStats->Fill(2); //triggered + centrality | |
353 | fHistCentrality->Fill(nCentrality+1); | |
354 | ||
355 | //Printf("Centrality selection: %lf - %lf",fCentralityPercentileMin,fCentralityPercentileMax); | |
356 | ||
357 | if(fAnalysisMode.CompareTo("TPC") == 0 ) { | |
358 | const AliESDVertex *vertex = fESD->GetPrimaryVertexTPC(); | |
359 | if(vertex) { | |
360 | if(vertex->GetNContributors() > 0) { | |
361 | if(vertex->GetZRes() != 0) { | |
362 | fHistEventStats->Fill(3); //events with a proper vertex | |
363 | if(TMath::Abs(vertex->GetXv()) < fVxMax) { | |
364 | if(TMath::Abs(vertex->GetYv()) < fVyMax) { | |
365 | if(TMath::Abs(vertex->GetZv()) < fVzMax) { | |
366 | fHistEventStats->Fill(4); //analyzed events | |
367 | ||
368 | Int_t nMCParticles = mcEvent->GetNumberOfTracks(); | |
369 | TArrayI labelMCArray(nMCParticles); | |
370 | ||
371 | for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) { | |
372 | AliMCParticle *mcTrack = (AliMCParticle*) mcEvent->GetTrack(iTracks); | |
373 | if (!mcTrack) { | |
6d6eb2df | 374 | AliError(Form("ERROR: Could not receive track %d (mc loop)", iTracks)); |
84164254 | 375 | continue; |
376 | } | |
377 | ||
378 | //exclude particles generated out of the acceptance | |
379 | Double_t vz = mcTrack->Zv(); | |
380 | if (TMath::Abs(vz) > 50.) continue; | |
40b41983 | 381 | |
84164254 | 382 | //acceptance |
622c9e7f | 383 | if(TMath::Abs(mcTrack->Eta()) > fMaxEta) |
40b41983 | 384 | continue; |
622c9e7f | 385 | if((mcTrack->Pt() > fMaxPt)||(mcTrack->Pt() < fMinPt)) |
84164254 | 386 | continue; |
40b41983 | 387 | if((mcTrack->Phi() > fPhiRangeMax)||(mcTrack->Phi() < fPhiRangeMin)) |
84164254 | 388 | continue; |
389 | ||
390 | TParticle* particle = mcTrack->Particle(); | |
391 | if(!particle) continue; | |
392 | if(!stack->IsPhysicalPrimary(iTracks)) continue; | |
393 | ||
394 | if(iTracks <= stack->GetNprimary()) { | |
395 | Short_t gMCCharge = mcTrack->Charge(); | |
77e61e9e | 396 | Double_t phiRad = particle->Phi(); |
397 | Double_t phiDeg = phiRad*TMath::RadToDeg(); | |
398 | ||
84164254 | 399 | if(gMCCharge > 0) |
40b41983 | 400 | fHistGeneratedEtaPtPhiPlus->Fill(particle->Eta(), |
401 | particle->Pt(), | |
77e61e9e | 402 | phiDeg); |
84164254 | 403 | else if(gMCCharge < 0) |
40b41983 | 404 | fHistGeneratedEtaPtPhiMinus->Fill(particle->Eta(), |
405 | particle->Pt(), | |
77e61e9e | 406 | phiDeg); |
84164254 | 407 | |
408 | ||
409 | // findable tracks --> DOES NOT WORK???? | |
410 | // Loop over Track References | |
411 | Bool_t labelTPC = kTRUE; | |
412 | AliTrackReference* trackRef = 0; | |
413 | ||
414 | for (Int_t iTrackRef = 0; iTrackRef < mcTrack->GetNumberOfTrackReferences(); iTrackRef++) { | |
415 | trackRef = mcTrack->GetTrackReference(iTrackRef); | |
416 | if(trackRef) { | |
417 | Int_t detectorId = trackRef->DetectorId(); | |
418 | if (detectorId == AliTrackReference::kTPC) { | |
419 | labelTPC = kTRUE; | |
420 | break; | |
421 | } | |
422 | } | |
423 | }//loop over track references | |
424 | ||
425 | if(labelTPC) { | |
426 | labelMCArray.AddAt(iTracks,nMCLabelCounter); | |
427 | ||
428 | if(nMCLabelCounter >= maxMCLabelCounter){ | |
429 | AliWarning(Form("MC Label Counter > Limit (%d) --> stop loop here",maxMCLabelCounter)); | |
430 | break; | |
431 | } | |
432 | ||
40b41983 | 433 | //fill the arrays for 2 particle analysis |
84164254 | 434 | eta[nMCLabelCounter] = particle->Eta(); |
435 | pt[nMCLabelCounter] = particle->Pt(); | |
77e61e9e | 436 | phi[nMCLabelCounter] = particle->Phi()*TMath::RadToDeg(); |
84164254 | 437 | charge[nMCLabelCounter] = gMCCharge; |
77e61e9e | 438 | |
84164254 | 439 | // findable = generated in this case! |
40b41983 | 440 | |
84164254 | 441 | level[nMCLabelCounter] = 1; |
84164254 | 442 | nMCLabelCounter += 1; |
40b41983 | 443 | |
444 | ||
84164254 | 445 | if(gMCCharge > 0) |
40b41983 | 446 | fHistFindableEtaPtPhiPlus->Fill(particle->Eta(), |
447 | particle->Pt(), | |
77e61e9e | 448 | phiDeg); |
84164254 | 449 | else if(gMCCharge < 0) |
40b41983 | 450 | fHistFindableEtaPtPhiMinus->Fill(particle->Eta(), |
451 | particle->Pt(), | |
77e61e9e | 452 | phiDeg); |
84164254 | 453 | } |
454 | }//primaries | |
455 | }//loop over MC particles | |
456 | ||
457 | fHistNMult->Fill(nMCLabelCounter); | |
458 | ||
459 | // not used so far | |
460 | //Float_t dcaXY = 0.0, dcaZ = 0.0; | |
461 | ||
462 | //ESD track loop | |
463 | Int_t nGoodTracks = fESD->GetNumberOfTracks(); | |
464 | ||
465 | TArrayI labelArray(nGoodTracks); | |
466 | Int_t labelCounter = 0; | |
467 | for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { | |
468 | AliESDtrack* track = fESD->GetTrack(iTracks); | |
469 | //AliESDtrack* track = fESDtrackCuts->GetTPCOnlyTrack(fESD,iTracks); | |
470 | if(!track) continue; | |
471 | ||
472 | AliESDtrack *tpcOnlyTrack = new AliESDtrack(); | |
473 | ||
474 | if (!track->FillTPCOnlyTrack(*tpcOnlyTrack)) { | |
475 | delete tpcOnlyTrack; | |
476 | continue; | |
477 | } | |
478 | ||
479 | Int_t label = TMath::Abs(track->GetTPCLabel()); | |
480 | if(IsLabelUsed(labelArray,label)) continue; | |
481 | labelArray.AddAt(label,labelCounter); | |
482 | labelCounter += 1; | |
483 | ||
484 | Bool_t iFound = kFALSE; | |
485 | Int_t mcGoods = nMCLabelCounter; | |
486 | for (Int_t k = 0; k < mcGoods; k++) { | |
487 | Int_t mcLabel = labelMCArray.At(k); | |
488 | iFound = kFALSE; | |
489 | ||
490 | if (mcLabel != TMath::Abs(label)) continue; | |
491 | if(mcLabel != label) continue; | |
492 | if(label > stack->GetNtrack()) continue; | |
493 | ||
494 | TParticle *particle = stack->Particle(label); | |
495 | if(!particle) continue; | |
496 | ||
497 | //acceptance | |
622c9e7f | 498 | if(TMath::Abs(particle->Eta()) > fMaxEta) |
40b41983 | 499 | continue; |
622c9e7f | 500 | if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) |
84164254 | 501 | continue; |
40b41983 | 502 | if((particle->Phi() > fPhiRangeMax)||(particle->Phi() < fPhiRangeMin)) |
84164254 | 503 | continue; |
40b41983 | 504 | |
84164254 | 505 | if(!stack->IsPhysicalPrimary(label)) continue; |
506 | ||
507 | if(label <= stack->GetNprimary()) { | |
508 | ||
509 | // reconstructed | |
510 | level[k] = 2; | |
511 | ||
512 | Short_t gCharge = track->Charge(); | |
77e61e9e | 513 | Double_t phiRad = particle->Phi(); |
514 | Double_t phiDeg = phiRad*TMath::RadToDeg(); | |
515 | ||
84164254 | 516 | if(gCharge > 0) |
40b41983 | 517 | fHistReconstructedEtaPtPhiPlus->Fill(particle->Eta(), |
518 | particle->Pt(), | |
77e61e9e | 519 | phiDeg); |
84164254 | 520 | else if(gCharge < 0) |
40b41983 | 521 | fHistReconstructedEtaPtPhiMinus->Fill(particle->Eta(), |
522 | particle->Pt(), | |
77e61e9e | 523 | phiDeg); |
84164254 | 524 | |
525 | // track cuts + analysis kinematic cuts | |
526 | if(fESDtrackCuts->AcceptTrack(track) && TMath::Abs(track->Eta()) < fMaxEta && track->Pt() > fMinPt && track->Pt() < fMaxPt ){ | |
527 | ||
528 | // survived | |
529 | level[k] = 3; | |
530 | ||
531 | if(gCharge > 0) | |
40b41983 | 532 | fHistSurvivedEtaPtPhiPlus->Fill(particle->Eta(), |
533 | particle->Pt(), | |
77e61e9e | 534 | phiDeg); |
84164254 | 535 | else if(gCharge < 0) |
40b41983 | 536 | fHistSurvivedEtaPtPhiMinus->Fill(particle->Eta(), |
537 | particle->Pt(), | |
77e61e9e | 538 | phiDeg); |
40b41983 | 539 | |
84164254 | 540 | }//track cuts |
541 | }//primary particles | |
542 | }//findable track loop | |
543 | }//ESD track loop | |
40b41983 | 544 | |
84164254 | 545 | labelMCArray.Reset(); |
546 | labelArray.Reset(); | |
40b41983 | 547 | |
548 | ||
84164254 | 549 | }//Vz cut |
550 | }//Vy cut | |
551 | }//Vx cut | |
552 | }//Vz resolution | |
553 | }//number of contributors | |
554 | }//valid vertex | |
555 | }//TPC analysis mode | |
556 | }//centrality | |
557 | ||
558 | ||
559 | ||
560 | // Here comes the 2 particle analysis | |
561 | // loop over all good MC particles | |
562 | for (Int_t i = 0; i < nMCLabelCounter ; i++) { | |
40b41983 | 563 | |
84164254 | 564 | // control 1D histograms (charge might be different?) |
565 | if(charge[i] > 0){ | |
566 | if(level[i] > 0) fHistGeneratedEtaPtPlusControl->Fill(eta[i],pt[i]); | |
567 | if(level[i] > 1) fHistReconstructedEtaPtPlusControl->Fill(eta[i],pt[i]); | |
568 | if(level[i] > 2) fHistSurvivedEtaPtPlusControl->Fill(eta[i],pt[i]); | |
569 | } | |
570 | else if(charge[i] < 0){ | |
571 | if(level[i] > 0) fHistGeneratedEtaPtMinusControl->Fill(eta[i],pt[i]); | |
572 | if(level[i] > 1) fHistReconstructedEtaPtMinusControl->Fill(eta[i],pt[i]); | |
573 | if(level[i] > 2) fHistSurvivedEtaPtMinusControl->Fill(eta[i],pt[i]); | |
574 | } | |
40b41983 | 575 | |
576 | ||
84164254 | 577 | for (Int_t j = i+1; j < nMCLabelCounter ; j++) { |
578 | ||
579 | if(charge[i] > 0 && charge[j] > 0 ){ | |
40b41983 | 580 | if(level[i] > 0 && level[j] > 0) { |
581 | fHistGeneratedEtaPtPlusPlus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 582 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 583 | fHistGeneratedPhiEtaPlusPlus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
584 | } | |
585 | if(level[i] > 1 && level[j] > 1) { | |
586 | fHistReconstructedEtaPtPlusPlus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 587 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 588 | fHistReconstructedPhiEtaPlusPlus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
589 | } | |
590 | if(level[i] > 2 && level[j] > 2) { | |
591 | fHistSurvivedEtaPtPlusPlus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 592 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 593 | fHistSurvivedPhiEtaPlusPlus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
594 | } | |
84164254 | 595 | } |
596 | ||
597 | else if(charge[i] < 0 && charge[j] < 0 ){ | |
40b41983 | 598 | if(level[i] > 0 && level[j] > 0) { |
599 | fHistGeneratedEtaPtMinusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 600 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 601 | fHistGeneratedPhiEtaMinusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
602 | } | |
603 | if(level[i] > 1 && level[j] > 1) { | |
604 | fHistReconstructedEtaPtMinusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
605 | fHistReconstructedPhiEtaMinusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); | |
606 | } | |
607 | if(level[i] > 2 && level[j] > 2) { | |
77e61e9e | 608 | fHistSurvivedEtaPtMinusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); |
609 | if (TMath::Abs(phi[i]-phi[j]) < 180) | |
40b41983 | 610 | fHistSurvivedPhiEtaMinusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
611 | } | |
84164254 | 612 | } |
40b41983 | 613 | |
84164254 | 614 | else if((charge[i] > 0 && charge[j] < 0)||(charge[i] < 0 && charge[j] > 0)){ |
40b41983 | 615 | if(level[i] > 0 && level[j] > 0) { |
616 | fHistGeneratedEtaPtPlusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 617 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 618 | fHistGeneratedPhiEtaPlusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
619 | } | |
620 | if(level[i] > 1 && level[j] > 1) { | |
621 | fHistReconstructedEtaPtPlusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
622 | fHistReconstructedPhiEtaPlusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); | |
623 | } | |
624 | if(level[i] > 2 && level[j] > 2) { | |
625 | fHistSurvivedEtaPtPlusMinus->Fill(TMath::Abs(eta[i]-eta[j]),pt[i]); | |
77e61e9e | 626 | if (TMath::Abs(phi[i]-phi[j]) < 180) |
40b41983 | 627 | fHistSurvivedPhiEtaPlusMinus->Fill(TMath::Abs(phi[i]-phi[j]),TMath::Abs(eta[i]-eta[j])); |
628 | } | |
84164254 | 629 | } |
630 | } | |
40b41983 | 631 | } |
632 | ||
633 | //Checking Entries for generated and survived | |
634 | /*TH1F* GeneratedEtaPt = (TH1F*)fHistGeneratedEtaPtPlusMinus->ProjectionX("GeneratedEtaPt",5,15); | |
635 | Int_t xGeneratedPt = fHistGeneratedEtaPtPlusMinus->GetNbinsX(); | |
636 | for (Int_t h=1; h < xGeneratedPt+1; h++){ | |
637 | Double_t binEntriesGenerated = GeneratedEtaPt->GetBinContent(h); | |
638 | Printf("binEntriesGenerated: %lf - xGeneratedPt: %d",binEntriesGenerated,h); | |
639 | } | |
640 | TH1F* GeneratedPhiEta = (TH1F*)fHistGeneratedPhiEtaPlusMinus->ProjectionY("GeneratedPhiEta",5,15); | |
641 | Int_t yGeneratedPhi = fHistGeneratedPhiEtaPlusMinus->GetNbinsY(); | |
642 | for (Int_t h=1; h < yGeneratedPhi+1; h++){ | |
643 | Double_t binEntriesGenerated = GeneratedPhiEta->GetBinContent(h); | |
644 | Printf("binEntriesGenerated: %lf - yGeneratedPhi: %d",binEntriesGenerated,h); | |
645 | }*/ | |
646 | ||
647 | /*TH1F* SurvivedEtaPt = (TH1F*)fHistSurvivedEtaPtPlusMinus->ProjectionX("SurvivedEtaPt",5,15); | |
648 | Int_t xSurvivedPt = fHistSurvivedEtaPtPlusMinus->GetNbinsX(); | |
649 | for (Int_t h=1; h < xSurvivedPt+1; h++){ | |
650 | Double_t binEntriesSurvived = SurvivedEtaPt->GetBinContent(h); | |
651 | Printf("binEntriesSurvived: %lf - xSurvivedPt: %d",binEntriesSurvived,h); | |
652 | } | |
653 | TH1F* SurvivedPhiEta = (TH1F*)fHistSurvivedPhiEtaPlusMinus->ProjectionY("SurvivedPhiEta",5,15); | |
654 | Int_t ySurvivedPhi = fHistSurvivedPhiEtaPlusMinus->GetNbinsY(); | |
655 | for (Int_t h=1; h < ySurvivedPhi+1; h++){ | |
656 | Double_t binEntriesSurvived = SurvivedPhiEta->GetBinContent(h); | |
657 | Printf("binEntriesSurvived: %lf - ySurvivedPhi: %d",binEntriesSurvived,h); | |
658 | }*/ | |
84164254 | 659 | } |
40b41983 | 660 | //________________________________________________________________________ |
84164254 | 661 | void AliAnalysisTaskEfficiencyBF::Terminate(Option_t *) { |
662 | // Draw result to the screen | |
663 | // Called once at the end of the query | |
664 | ||
665 | fOutputList = dynamic_cast<TList*> (GetOutputData(1)); | |
666 | if (!fOutputList) { | |
667 | printf("ERROR: Output list not available\n"); | |
668 | return; | |
669 | } | |
670 | } | |
671 | ||
672 | //____________________________________________________________________// | |
673 | Bool_t AliAnalysisTaskEfficiencyBF::IsLabelUsed(TArrayI labelArray, Int_t label) { | |
674 | //Checks if the label is used already | |
675 | Bool_t status = kFALSE; | |
676 | for(Int_t i = 0; i < labelArray.GetSize(); i++) { | |
677 | if(labelArray.At(i) == label) | |
678 | status = kTRUE; | |
679 | } | |
680 | ||
681 | return status; | |
682 | } |