]>
Commit | Line | Data |
---|---|---|
fb5b189b | 1 | // $Id$ |
2 | //************************************************************************** | |
3 | //* This file is property of and copyright by the ALICE HLT Project * | |
4 | //* ALICE Experiment at CERN, All rights reserved. * | |
5 | //* * | |
6 | //* Primary Authors: Zhongbao Yin <zbyin@mail.ccnu.edu.cn>, * | |
7 | //* Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no> * | |
8 | //* for The ALICE HLT Project. * | |
9 | //* * | |
10 | //* Permission to use, copy, modify and distribute this software and its * | |
11 | //* documentation strictly for non-commercial purposes is hereby granted * | |
12 | //* without fee, provided that the above copyright notice appears in all * | |
13 | //* copies and that both the copyright notice and this permission notice * | |
14 | //* appear in the supporting documentation. The authors make no claims * | |
15 | //* about the suitability of this software for any purpose. It is * | |
16 | //* provided "as is" without express or implied warranty. * | |
17 | //************************************************************************** | |
18 | ||
fb5b189b | 19 | /** @file AliAnalysisTaskHLT.cxx |
20 | @author Kalliopi Kanaki, Hege Erdal | |
21 | @date | |
22 | @brief An analysis task containing | |
23 | loops over HLT and offline ESD trees for comparing | |
24 | AliESDtrack properties. | |
25 | */ | |
26 | ||
27 | //#include <iostream> | |
28 | ||
29 | class AliAnalysisTask; | |
30 | class AliAnalysisManager; | |
31 | ||
be66aae0 | 32 | #include "AliAnalysisTaskHLT.h" |
4b621d9c | 33 | #include "AliHLTGlobalTriggerDecision.h" |
fb5b189b | 34 | #include "TH1F.h" |
35 | #include "TH2F.h" | |
36 | #include "TString.h" | |
37 | #include "AliESDEvent.h" | |
e9fe1336 | 38 | #include "AliESDtrackCuts.h" |
fb5b189b | 39 | #include "AliESDInputHandler.h" |
1175b105 | 40 | #include "AliTracker.h" |
b2642c4c | 41 | #include "AliCentrality.h" |
fb5b189b | 42 | |
be66aae0 | 43 | #include "TText.h" |
44 | #include "TTimeStamp.h" | |
fb5b189b | 45 | |
17ab437a | 46 | #include <iostream> |
47 | ||
fb5b189b | 48 | ClassImp(AliAnalysisTaskHLT) |
49 | ||
b2642c4c | 50 | //===============================================================// |
fb5b189b | 51 | |
52 | AliAnalysisTaskHLT::AliAnalysisTaskHLT() | |
53 | : | |
54 | AliAnalysisTaskSE() | |
4b621d9c | 55 | ,fUseHLTTrigger(kFALSE) |
be66aae0 | 56 | //,fESDOfftrackCuts(0) |
57 | //,fESDHLTtrackCuts(0) | |
fb5b189b | 58 | ,fOutputList(0) |
e302ba9e | 59 | //,fHistTrigger(0) |
5ab64231 | 60 | ,fChargeOff(0) |
1647e83b | 61 | ,fMomentumOff(0) |
1175b105 | 62 | ,fDCArOff(0) |
63 | ,fDCAzOff(0) | |
5ab64231 | 64 | ,fNclusterOff(0) |
1281a832 | 65 | ,fNITSclusterOff(0) |
fb5b189b | 66 | ,fPhiOff(0) |
c0fbe8ec | 67 | ,fEtaOff(0) |
fb5b189b | 68 | ,fMultOff(0) |
fb5b189b | 69 | ,fXvertexOff(0) |
70 | ,fYvertexOff(0) | |
71 | ,fZvertexOff(0) | |
1281a832 | 72 | ,fSPDXvertexOff(0) |
73 | ,fSPDYvertexOff(0) | |
74 | ,fSPDZvertexOff(0) | |
5ab64231 | 75 | ,fEventSpecieOff(0) |
b2642c4c | 76 | ,fV0cent(0) |
fb5b189b | 77 | |
5ab64231 | 78 | ,fChargeHLT(0) |
fb5b189b | 79 | ,fMomentumHLT(0) |
1175b105 | 80 | ,fDCArHLT(0) |
81 | ,fDCAzHLT(0) | |
fb5b189b | 82 | ,fNclusterHLT(0) |
1281a832 | 83 | ,fNITSclusterHLT(0) |
fb5b189b | 84 | ,fPhiHLT(0) |
c0fbe8ec | 85 | ,fEtaHLT(0) |
17ab437a | 86 | |
c0fbe8ec | 87 | ,fChargeHLTcut(0) |
88 | ,fMomentumHLTcut(0) | |
17ab437a | 89 | ,fDCArHLTcut(0) |
90 | ,fDCAzHLTcut(0) | |
c0fbe8ec | 91 | ,fNclusterHLTcut(0) |
92 | ,fNITSclusterHLTcut(0) | |
93 | ,fPhiHLTcut(0) | |
94 | ,fEtaHLTcut(0) | |
17ab437a | 95 | |
5ab64231 | 96 | ,fMultHLT(0) |
fb5b189b | 97 | ,fXvertexHLT(0) |
98 | ,fYvertexHLT(0) | |
99 | ,fZvertexHLT(0) | |
1281a832 | 100 | ,fSPDXvertexHLT(0) |
101 | ,fSPDYvertexHLT(0) | |
102 | ,fSPDZvertexHLT(0) | |
5ab64231 | 103 | ,fEventSpecieHLT(0) |
b2642c4c | 104 | |
be66aae0 | 105 | ,fBeamType() |
106 | ,fTextBox(0) | |
e48c64c8 | 107 | ,fCuts(0) |
be66aae0 | 108 | ,fSwitch(kTRUE) |
b2642c4c | 109 | ,fCentrality() |
e48c64c8 | 110 | ,fEta(0) |
111 | ,fPt(0) | |
112 | ,fDCAr(0) | |
113 | ,fDCAz(0) | |
971bbba6 | 114 | ,fVertexZ(0) |
fb5b189b | 115 | { |
116 | // Constructor | |
117 | // Define input and output slots here | |
118 | // Input slot #0 works with a TChain | |
119 | // DefineInput(0, TChain::Class()); | |
120 | // Output slot #0 writes into a TH1 container | |
fb5b189b | 121 | } |
122 | ||
971bbba6 | 123 | AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name, float eta, float pt, float DCAr, float DCAz, float vertexZ) |
fb5b189b | 124 | : |
4b621d9c | 125 | AliAnalysisTaskSE(name) |
126 | ,fUseHLTTrigger(kFALSE) | |
be66aae0 | 127 | //,fESDOfftrackCuts(0) |
128 | //,fESDHLTtrackCuts(0) | |
fb5b189b | 129 | ,fOutputList(0) |
e302ba9e | 130 | //,fHistTrigger(0) |
5ab64231 | 131 | ,fChargeOff(0) |
1647e83b | 132 | ,fMomentumOff(0) |
1175b105 | 133 | ,fDCArOff(0) |
134 | ,fDCAzOff(0) | |
5ab64231 | 135 | ,fNclusterOff(0) |
1281a832 | 136 | ,fNITSclusterOff(0) |
fb5b189b | 137 | ,fPhiOff(0) |
c0fbe8ec | 138 | ,fEtaOff(0) |
fb5b189b | 139 | ,fMultOff(0) |
fb5b189b | 140 | ,fXvertexOff(0) |
141 | ,fYvertexOff(0) | |
142 | ,fZvertexOff(0) | |
5ab64231 | 143 | ,fEventSpecieOff(0) |
b2642c4c | 144 | ,fV0cent(0) |
1281a832 | 145 | ,fNcontOff(0) |
146 | ||
5ab64231 | 147 | ,fChargeHLT(0) |
fb5b189b | 148 | ,fMomentumHLT(0) |
fb5b189b | 149 | ,fNclusterHLT(0) |
1281a832 | 150 | ,fNITSclusterHLT(0) |
fb5b189b | 151 | ,fPhiHLT(0) |
c0fbe8ec | 152 | ,fEtaHLT(0) |
17ab437a | 153 | |
c0fbe8ec | 154 | ,fChargeHLTcut(0) |
155 | ,fMomentumHLTcut(0) | |
17ab437a | 156 | ,fDCArHLTcut(0) |
157 | ,fDCAzHLTcut(0) | |
c0fbe8ec | 158 | ,fNclusterHLTcut(0) |
159 | ,fNITSclusterHLTcut(0) | |
160 | ,fPhiHLTcut(0) | |
161 | ,fEtaHLTcut(0) | |
17ab437a | 162 | |
5ab64231 | 163 | ,fMultHLT(0) |
fb5b189b | 164 | ,fXvertexHLT(0) |
165 | ,fYvertexHLT(0) | |
166 | ,fZvertexHLT(0) | |
5ab64231 | 167 | ,fEventSpecieHLT(0) |
1281a832 | 168 | ,fNcontHLT(0) |
b2642c4c | 169 | |
be66aae0 | 170 | ,fBeamType() |
171 | ,fTextBox(0) | |
e48c64c8 | 172 | ,fCuts(0) |
be66aae0 | 173 | ,fSwitch(kTRUE) |
b2642c4c | 174 | ,fCentrality() |
e48c64c8 | 175 | ,fEta(eta) |
176 | ,fPt(pt) | |
177 | ,fDCAr(DCAr) | |
178 | ,fDCAz(DCAz) | |
971bbba6 | 179 | ,fVertexZ(vertexZ) |
be66aae0 | 180 | { |
1647e83b | 181 | // Constructor |
fb5b189b | 182 | // Define input and output slots here |
183 | // Input slot #0 works with a TChain | |
184 | // DefineInput(0, TChain::Class()); | |
185 | // Output slot #0 writes into a TH1 container | |
fb5b189b | 186 | DefineOutput(1, TList::Class()); |
187 | } | |
188 | ||
b2642c4c | 189 | //------------------------------------------------------------------------// |
fb5b189b | 190 | |
191 | void AliAnalysisTaskHLT::UserCreateOutputObjects(){ | |
192 | // Create histograms | |
193 | ||
194 | OpenFile(1); | |
fb5b189b | 195 | fOutputList = new TList(); |
2476901d | 196 | fOutputList->SetOwner(); |
fb5b189b | 197 | fOutputList->SetName(GetName()); |
198 | ||
199 | /* | |
200 | //0 mistriggered, 1 Good triggered, 2, triggered, 3 fake trigger, | |
201 | //4 events with offline track, 5 total events processed, | |
202 | //6 offline track thru CE, 7 online track to CE | |
203 | fHistTrigger = new TH1F("fHistTrigger", "Trigger Status", 8, -0.5, 7.5); | |
204 | fHistTrigger->GetXaxis()->SetTitle(""); | |
205 | fHistTrigger->GetYaxis()->SetTitle("Events"); | |
206 | fHistTrigger->SetMarkerStyle(kFullCircle); | |
207 | fHistTrigger->SetStats(0); | |
208 | fHistTrigger->SetFillColor(2); | |
209 | //fHistTrigger->SetDrawOption("B TEXT60"); | |
210 | ||
211 | //Set bin labels | |
212 | (fHistTrigger->GetXaxis())->SetBinLabel(1,"missed"); | |
213 | (fHistTrigger->GetXaxis())->SetBinLabel(2,"triggerWofflTrk"); | |
214 | (fHistTrigger->GetXaxis())->SetBinLabel(3,"triggered"); | |
215 | (fHistTrigger->GetXaxis())->SetBinLabel(4,"triggerWOofflTrk"); | |
216 | (fHistTrigger->GetXaxis())->SetBinLabel(5,"NevWofflTrk"); | |
217 | (fHistTrigger->GetXaxis())->SetBinLabel(6,"Nevt"); | |
218 | (fHistTrigger->GetXaxis())->SetBinLabel(7,"offlTrkThruCE"); | |
219 | (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); | |
220 | */ | |
221 | ||
e302ba9e | 222 | //fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 24, 0, 24); |
223 | //fHistTrigger->GetXaxis()->SetTitle(""); | |
224 | //fHistTrigger->GetYaxis()->SetTitle("#Events"); | |
fb5b189b | 225 | |
be66aae0 | 226 | //=========== event properties =================// |
1647e83b | 227 | |
be66aae0 | 228 | if(fBeamType.Contains("Pb")){ |
c0fbe8ec | 229 | fMultOff = new TH1F("fMult_off", "",200,0,2000); |
2f281fd6 | 230 | fMultHLT = new TH1F("fMult_hlt", "TPC track multiplicity",200,0,2000); fMultHLT->SetXTitle("TPC track multiplicity"); |
c0fbe8ec | 231 | fNcontOff = new TH1F("fNcont_off","",200,0,2000); |
2f281fd6 | 232 | fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,2000); fNcontHLT->SetXTitle("# of contributors"); |
233 | fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100); fV0cent->SetXTitle("V0 centrality"); | |
be66aae0 | 234 | } |
235 | else { | |
c0fbe8ec | 236 | fMultOff = new TH1F("fMult_off","",200,0,200); |
2f281fd6 | 237 | fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity",200,0,200); fMultHLT->SetXTitle("TPC track multiplicity"); |
c0fbe8ec | 238 | fNcontOff = new TH1F("fNcont_off","",200,0,200); |
2f281fd6 | 239 | fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,200); fNcontHLT->SetXTitle("# of contributors"); |
be66aae0 | 240 | } |
c0fbe8ec | 241 | |
242 | fXvertexOff = new TH1F("fXvertex_off","",200,-0.5,0.5); | |
2f281fd6 | 243 | fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex",200,-0.5,0.5); fXvertexHLT->SetXTitle("x (cm)"); |
fb5b189b | 244 | |
c0fbe8ec | 245 | fYvertexOff = new TH1F("fYvertex_off","",200,-0.5,0.5); |
2f281fd6 | 246 | fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex",200,-0.5,0.5); fYvertexHLT->SetXTitle("y (cm)"); |
fb5b189b | 247 | |
c0fbe8ec | 248 | fZvertexOff = new TH1F("fZvertex_off","",100,-20,20); |
2f281fd6 | 249 | fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex",100,-20,20); fZvertexHLT->SetXTitle("z (cm)"); |
1281a832 | 250 | |
c0fbe8ec | 251 | fSPDXvertexOff = new TH1F("fSPDXvertex_off","",200,-0.5,0.5); |
2f281fd6 | 252 | fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex",200,-0.5,0.5); fSPDXvertexHLT->SetXTitle("x (cm)"); |
1281a832 | 253 | |
c0fbe8ec | 254 | fSPDYvertexOff = new TH1F("fSPDYvertex_off","",200,-0.5,0.5); |
2f281fd6 | 255 | fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex",200,-0.5,0.5); fSPDYvertexHLT->SetXTitle("y (cm)"); |
1281a832 | 256 | |
c0fbe8ec | 257 | fSPDZvertexOff = new TH1F("fSPDZvertex_off","",100,-20,20); |
2f281fd6 | 258 | fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex",100,-20,20); fSPDZvertexHLT->SetXTitle("z (cm)"); |
be66aae0 | 259 | |
c0fbe8ec | 260 | fEventSpecieOff = new TH1F("fEventSpecie_off","",18, 0, 18); |
261 | fEventSpecieHLT = new TH1F("fEventSpecie_hlt","event species",18, 0, 18); | |
fb5b189b | 262 | |
b2642c4c | 263 | //============== track properties =================// |
be66aae0 | 264 | |
c0fbe8ec | 265 | fChargeOff = new TH1F("fCharge_off", "", 3, -1.5, 1.5); |
2f281fd6 | 266 | fChargeHLT = new TH1F("fCharge_hlt", "charge distribution", 3, -1.5, 1.5); fChargeHLT->SetXTitle("polarity"); |
fb5b189b | 267 | |
c0fbe8ec | 268 | fMomentumOff = new TH1F("fMomentum_off", "", 100, 0, 10); |
2f281fd6 | 269 | fMomentumHLT = new TH1F("fMomentum_hlt", "transverse momentum", 100, 0, 10); fMomentumHLT->SetXTitle("p_{T} (GeV/c)"); |
fb5b189b | 270 | |
c0fbe8ec | 271 | fDCArOff = new TH1F("fDCAr_off", "", 200, -15, 15); |
2f281fd6 | 272 | fDCArHLT = new TH1F("fDCAr_hlt", "DCAr", 200, -15, 15); fDCArHLT->SetXTitle("DCAr (cm)"); |
1281a832 | 273 | |
c0fbe8ec | 274 | fDCAzOff = new TH1F("fDCAz_off", "", 200, -15, 15); |
2f281fd6 | 275 | fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz", 200, -15, 15); fDCAzHLT->SetXTitle("DCAz (cm)"); |
fb5b189b | 276 | |
c0fbe8ec | 277 | fNclusterOff = new TH1F("fNcluster_off","", 200, 0, 200); |
2f281fd6 | 278 | fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track", 200, 0, 200); fNclusterHLT->SetXTitle("TPC clusters/track"); |
be66aae0 | 279 | |
c0fbe8ec | 280 | fNITSclusterOff = new TH1F("fNITScluster_off","", 10, 0, 10); |
2f281fd6 | 281 | fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track", 10, 0, 10); fNITSclusterHLT->SetXTitle("ITS clusters/track"); |
fb5b189b | 282 | |
c0fbe8ec | 283 | fPhiOff = new TH1F("fPhi_off","",90,0,360); |
2f281fd6 | 284 | fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle",90,0,360); fPhiHLT->SetXTitle("#phi (deg)"); |
be66aae0 | 285 | |
c0fbe8ec | 286 | fEtaOff = new TH1F("fEta_off","",100,-2,2); |
2f281fd6 | 287 | fEtaHLT = new TH1F("fEta_hlt","pseudorapidity",100,-2,2); fEtaHLT->SetXTitle("#eta"); |
fb5b189b | 288 | |
2f281fd6 | 289 | fChargeHLTcut = new TH1F("fCharge_hltcut", "", 3, -1.5, 1.5); fChargeHLTcut->SetXTitle("polarity"); |
290 | fMomentumHLTcut = new TH1F("fMomentum_hltcut", "",100, 0, 10); fMomentumHLTcut ->SetXTitle("p_{T} (GeV/c)"); | |
291 | fDCArHLTcut = new TH1F("fDCAr_hltcut", "",200, -15, 15); fDCArHLTcut->SetXTitle("DCAr (cm)"); | |
292 | fDCAzHLTcut = new TH1F("fDCAz_hltcut", "",200, -15, 15); fDCAzHLTcut->SetXTitle("DCAz (cm)"); | |
293 | fNclusterHLTcut = new TH1F("fNcluster_hltcut", "",200, 0, 200); fNclusterHLTcut->SetXTitle("TPC clusters/track"); | |
294 | fNITSclusterHLTcut = new TH1F("fNITScluster_hltcut","", 10, 0, 10); fNITSclusterHLTcut->SetXTitle("ITS clusters/track"); | |
295 | fPhiHLTcut = new TH1F("fPhi_hltcut", "", 90, 0, 360); fPhiHLTcut->SetXTitle("#phi (deg)"); | |
296 | fEtaHLTcut = new TH1F("fEta_hltcut", "",100, -2, 2); fEtaHLTcut->SetXTitle("#eta"); | |
c0fbe8ec | 297 | |
be66aae0 | 298 | //--------------------------------------------------// |
fb5b189b | 299 | |
be66aae0 | 300 | fTextBox = new TText(); |
e48c64c8 | 301 | fCuts = new TText(); |
302 | fCuts->SetName("cuts"); | |
971bbba6 | 303 | TString s = Form("|#eta|<%2g, p_{T}>%2g, |DCAr|<%2g, |DCAz|<%2g, |vertexZ|<%2g", TMath::Abs(fEta), TMath::Abs(fPt), TMath::Abs(fDCAr), TMath::Abs(fDCAz),TMath::Abs(fVertexZ)); |
e48c64c8 | 304 | fCuts->SetTitle(s); |
305 | ||
e302ba9e | 306 | //fOutputList->Add(fHistTrigger); |
c0fbe8ec | 307 | fOutputList->Add(fChargeOff); fOutputList->Add(fChargeHLT); fOutputList->Add(fChargeHLTcut); |
308 | fOutputList->Add(fMomentumOff); fOutputList->Add(fMomentumHLT); fOutputList->Add(fMomentumHLTcut); | |
17ab437a | 309 | fOutputList->Add(fDCArOff); fOutputList->Add(fDCArHLT); fOutputList->Add(fDCArHLTcut); |
310 | fOutputList->Add(fDCAzOff); fOutputList->Add(fDCAzHLT); fOutputList->Add(fDCAzHLTcut); | |
311 | fOutputList->Add(fNclusterOff); fOutputList->Add(fNclusterHLT); fOutputList->Add(fNclusterHLTcut); | |
312 | fOutputList->Add(fNITSclusterOff); fOutputList->Add(fNITSclusterHLT); fOutputList->Add(fNITSclusterHLTcut); | |
313 | fOutputList->Add(fPhiOff); fOutputList->Add(fPhiHLT); fOutputList->Add(fPhiHLTcut); | |
314 | fOutputList->Add(fEtaOff); fOutputList->Add(fEtaHLT); fOutputList->Add(fEtaHLTcut); | |
c0fbe8ec | 315 | |
be66aae0 | 316 | fOutputList->Add(fMultOff); fOutputList->Add(fMultHLT); |
be66aae0 | 317 | fOutputList->Add(fXvertexOff); fOutputList->Add(fXvertexHLT); |
318 | fOutputList->Add(fYvertexOff); fOutputList->Add(fYvertexHLT); | |
319 | fOutputList->Add(fZvertexOff); fOutputList->Add(fZvertexHLT); | |
1281a832 | 320 | fOutputList->Add(fSPDXvertexOff); fOutputList->Add(fSPDXvertexHLT); |
321 | fOutputList->Add(fSPDYvertexOff); fOutputList->Add(fSPDYvertexHLT); | |
322 | fOutputList->Add(fSPDZvertexOff); fOutputList->Add(fSPDZvertexHLT); | |
be66aae0 | 323 | fOutputList->Add(fEventSpecieOff); fOutputList->Add(fEventSpecieHLT); |
1281a832 | 324 | fOutputList->Add(fNcontOff); fOutputList->Add(fNcontHLT); |
2476901d | 325 | |
b2642c4c | 326 | fOutputList->Add(fTextBox); |
e48c64c8 | 327 | fOutputList->Add(fCuts); |
b2642c4c | 328 | if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent); |
329 | ||
be66aae0 | 330 | //SetupESDtrackCuts(); |
2476901d | 331 | PostData(1, fOutputList); |
fb5b189b | 332 | } |
333 | ||
fb5b189b | 334 | void AliAnalysisTaskHLT::UserExec(Option_t *){ |
335 | // see header file of AliAnalysisTask for documentation | |
336 | ||
be66aae0 | 337 | AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent()); |
fb5b189b | 338 | if(!esdOFF){ |
be66aae0 | 339 | printf("Error:UserExec OFF esd not available\n"); |
340 | return; | |
fb5b189b | 341 | } |
be66aae0 | 342 | |
343 | if(esdOFF->GetEventSpecie()==16) return; // skip calibration events, HLT doesn't set this flag yet | |
344 | ||
fb5b189b | 345 | AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler); |
be66aae0 | 346 | if(!esdH){ |
347 | printf("The ESD input handler is empty\n"); | |
348 | return; | |
349 | } | |
350 | ||
fb5b189b | 351 | AliESDEvent *esdHLT = NULL; |
be66aae0 | 352 | if(esdH) esdHLT = esdH->GetHLTEvent(); |
d132ef8c | 353 | if(!esdHLT){ |
be66aae0 | 354 | printf("Error:UserExec HLT esd not available\n"); |
355 | return; | |
fb5b189b | 356 | } |
1647e83b | 357 | |
be66aae0 | 358 | if(fSwitch==kTRUE){ |
359 | TTimeStamp *timestamp = new TTimeStamp(esdHLT->GetTimeStamp()); | |
360 | fTextBox->SetName("text"); | |
361 | TString s = Form("Run %d, Date %d", esdHLT->GetRunNumber(), timestamp->GetDate()); | |
362 | printf("You are analyzing run %d from date %d\n\n", esdHLT->GetRunNumber(), timestamp->GetDate()); | |
363 | fTextBox->SetTitle(s); | |
364 | fSwitch=kFALSE; | |
4b621d9c | 365 | } |
fb5b189b | 366 | |
b60f0c88 | 367 | //Double_t bfield = esdOFF->GetMagneticField(); |
fb5b189b | 368 | |
be66aae0 | 369 | // UInt_t Statusnames[12]={AliESDtrack::kTPCin, |
370 | // AliESDtrack::kITSin, | |
371 | // AliESDtrack::kTPCout, | |
372 | // AliESDtrack::kITSout, | |
373 | // AliESDtrack::kITSrefit, | |
374 | // AliESDtrack::kTPCrefit, | |
375 | // AliESDtrack::kTRDin, | |
376 | // AliESDtrack::kTRDout, | |
377 | // AliESDtrack::kTRDrefit, | |
378 | // AliESDtrack::kTOFin, | |
379 | // AliESDtrack::kTOFout, | |
380 | // AliESDtrack::kTOFrefit}; | |
fb5b189b | 381 | |
e9fe1336 | 382 | |
383 | ||
384 | //---------------- HLT ESD tree -----------------------// | |
e9fe1336 | 385 | |
be66aae0 | 386 | Int_t nr_tracksHLT = 0; |
387 | const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks(); | |
1647e83b | 388 | |
be66aae0 | 389 | if(vertHLT->GetStatus()==kTRUE){ |
e9fe1336 | 390 | fXvertexHLT->Fill( vertHLT->GetX() ); |
391 | fYvertexHLT->Fill( vertHLT->GetY() ); | |
392 | fZvertexHLT->Fill( vertHLT->GetZ() ); | |
1281a832 | 393 | |
394 | fSPDXvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetX()); | |
395 | fSPDYvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetY()); | |
396 | fSPDZvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetZ()); | |
397 | ||
398 | fNcontHLT->Fill(vertHLT->GetNContributors()); | |
1647e83b | 399 | } |
5ab64231 | 400 | |
4b621d9c | 401 | fEventSpecieHLT->Fill(esdHLT->GetEventSpecie()); |
402 | ||
403 | for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){ | |
e9fe1336 | 404 | |
4b621d9c | 405 | AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); |
406 | if(!esdtrackHLT) continue; | |
407 | ||
408 | //Fill which status flags that are set for an event | |
be66aae0 | 409 | //for(int jjj=0;jjj<12;jjj++){ |
410 | // if(esdtrackHLT->GetStatus()&Statusnames[jjj]) fStatusHLT->Fill(jjj); | |
411 | //} | |
4b621d9c | 412 | |
be66aae0 | 413 | if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; // only interested in tracks with kTPCin flag |
414 | if(esdtrackHLT->GetTPCNcls()<=0) continue; | |
415 | nr_tracksHLT++; | |
b60f0c88 | 416 | |
417 | Double_t x[3]; | |
418 | esdtrackHLT->GetXYZ(x); | |
419 | Double_t b[3]; | |
420 | AliTracker::GetBxByBz(x,b); | |
421 | Bool_t isOK = esdtrackHLT->RelateToVertexTPCBxByBz(vertHLT, b, kVeryBig); | |
422 | ||
423 | Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z | |
424 | if(isOK){ | |
425 | const AliExternalTrackParam *track = esdtrackHLT->GetTPCInnerParam(); | |
426 | if(!track) return; | |
427 | esdtrackHLT->GetImpactParametersTPC(dca,cov); | |
428 | fDCArHLT->Fill(dca[0]); | |
e302ba9e | 429 | fDCAzHLT->Fill(dca[1]); |
430 | } | |
b60f0c88 | 431 | |
432 | // Float_t dca[2]; | |
433 | // if(vertHLT->GetStatus()==kTRUE){ | |
434 | // esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca); | |
435 | // fDCArHLT->Fill(dca[0]); | |
436 | // fDCAzHLT->Fill(dca[1]); | |
437 | // } | |
4b621d9c | 438 | |
439 | fChargeHLT->Fill(esdtrackHLT->Charge()); | |
be66aae0 | 440 | fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls()); |
1281a832 | 441 | fNITSclusterHLT->Fill(esdtrackHLT->GetNcls(0)); |
4b621d9c | 442 | fEtaHLT->Fill(esdtrackHLT->Eta()); |
4b621d9c | 443 | fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg()); |
be66aae0 | 444 | fMomentumHLT->Fill(TMath::Abs(esdtrackHLT->Pt())); |
c0fbe8ec | 445 | |
971bbba6 | 446 | if( TMath::Abs(esdtrackHLT->Eta())<TMath::Abs(fEta) && |
447 | TMath::Abs(esdtrackHLT->Pt())>TMath::Abs(fPt) && | |
448 | TMath::Abs(dca[0])<TMath::Abs(fDCAr) && | |
449 | TMath::Abs(dca[1])<TMath::Abs(fDCAz) && | |
450 | TMath::Abs(vertHLT->GetZ())<TMath::Abs(fVertexZ) ) | |
451 | { | |
c0fbe8ec | 452 | fChargeHLTcut->Fill(esdtrackHLT->Charge()); |
453 | fNclusterHLTcut->Fill(esdtrackHLT->GetTPCNcls()); | |
17ab437a | 454 | fDCArHLTcut->Fill(dca[0]); |
455 | fDCAzHLTcut->Fill(dca[1]); | |
c0fbe8ec | 456 | fNITSclusterHLTcut->Fill(esdtrackHLT->GetNcls(0)); |
457 | fEtaHLTcut->Fill(esdtrackHLT->Eta()); | |
458 | fPhiHLTcut->Fill(esdtrackHLT->Phi()*TMath::RadToDeg()); | |
459 | fMomentumHLTcut->Fill(TMath::Abs(esdtrackHLT->Pt())); | |
460 | } | |
4b621d9c | 461 | } // end of loop over hlt tracks |
462 | ||
463 | if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT); | |
e9fe1336 | 464 | |
fb5b189b | 465 | //----------------- OFFLINE ESD tree ----------------// |
466 | ||
be66aae0 | 467 | Int_t nr_tracksOff = 0; |
1281a832 | 468 | const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks(); |
b2642c4c | 469 | |
470 | if(fBeamType.Contains("Pb")){ | |
471 | fCentrality = esdOFF->GetCentrality(); | |
472 | // this information is only available from the offline ESD for 2010 PbPb data, the V0 info was not stored in the HLTesd (17.04.11, Kelly) | |
473 | if(!fCentrality){ | |
474 | printf("Centrality pointer is empty\n"); | |
475 | return; | |
476 | } | |
477 | else fV0cent->Fill(fCentrality->GetCentralityPercentile("V0M")); | |
478 | } | |
5ab64231 | 479 | |
1281a832 | 480 | if(vertOFF->GetStatus()==kTRUE){ |
c0fbe8ec | 481 | fXvertexOff->Fill( vertOFF->GetX() ); |
482 | fYvertexOff->Fill( vertOFF->GetY() ); | |
483 | fZvertexOff->Fill( vertOFF->GetZ() ); | |
1281a832 | 484 | |
c0fbe8ec | 485 | fSPDXvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetX()); |
486 | fSPDYvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetY()); | |
487 | fSPDZvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetZ()); | |
1281a832 | 488 | |
c0fbe8ec | 489 | fNcontOff->Fill(vertOFF->GetNContributors()); |
1647e83b | 490 | } |
e9fe1336 | 491 | |
4b621d9c | 492 | fEventSpecieOff->Fill(esdOFF->GetEventSpecie()); |
493 | ||
494 | for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ | |
495 | ||
496 | AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); | |
497 | if (!esdtrackOFF) continue; | |
498 | ||
be66aae0 | 499 | if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue; |
500 | if(esdtrackOFF->GetTPCNcls()<=0) continue; | |
4b621d9c | 501 | nr_tracksOff++; |
17ab437a | 502 | |
b60f0c88 | 503 | Double_t x[3]; |
504 | esdtrackOFF->GetXYZ(x); | |
505 | Double_t b[3]; | |
506 | AliTracker::GetBxByBz(x,b); | |
507 | Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig); | |
508 | if(isOK){ | |
509 | const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam(); | |
510 | if(!track) return; | |
511 | Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z | |
512 | esdtrackOFF->GetImpactParametersTPC(dca,cov); | |
17ab437a | 513 | fDCArOff->Fill(dca[0]); |
514 | fDCAzOff->Fill(dca[1]); | |
b60f0c88 | 515 | } |
516 | // // calculate the offline DCAs the same way like for HLT. The above way is calculating the DCA for the TPC inner barrel surface (Kelly, 17.04.11) | |
517 | // Float_t dca[2]; | |
518 | // if(vertOFF->GetStatus()==kTRUE){ | |
519 | // esdtrackOFF->GetDZ(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), esdOFF->GetPrimaryVertex()->GetZv(), bfield, dca); | |
520 | // } | |
be66aae0 | 521 | |
4b621d9c | 522 | fChargeOff->Fill(esdtrackOFF->Charge()); |
be66aae0 | 523 | fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); |
1281a832 | 524 | fNITSclusterOff->Fill(esdtrackOFF->GetNcls(0)); |
4b621d9c | 525 | fEtaOff->Fill(esdtrackOFF->Eta()); |
4b621d9c | 526 | fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg()); |
4b621d9c | 527 | fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); |
528 | ||
4b621d9c | 529 | } // end of loop over offline tracks |
5ab64231 | 530 | |
4b621d9c | 531 | if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff); |
be66aae0 | 532 | |
fb5b189b | 533 | PostData(1, fOutputList); |
534 | } | |
535 | ||
536 | void AliAnalysisTaskHLT::Terminate(Option_t *){ | |
b2642c4c | 537 | // see header file of AliAnalysisTask for documentation |
5ab64231 | 538 | } |
e9fe1336 | 539 | |
be66aae0 | 540 | // void AliAnalysisTaskHLT::SetupESDtrackCuts(){ // not called |
541 | // // Setup ESD cuts | |
542 | // // NB! Work in progress! | |
543 | // | |
544 | // Bool_t selPrimaries = kTRUE; | |
545 | // | |
546 | // fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries); | |
547 | // //To make Offline cuts = HLT cuts | |
548 | // fESDOfftrackCuts->SetRequireITSRefit(kFALSE); | |
549 | // fESDOfftrackCuts->SetEtaRange(-0.9,+0.9); | |
550 | // | |
551 | // | |
552 | // //HLT | |
553 | // //NB! Need to understand this a bit more! Which cuts should we keep? | |
554 | // fESDHLTtrackCuts = new AliESDtrackCuts; | |
555 | // | |
556 | // // TPC | |
557 | // fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin | |
558 | // fESDHLTtrackCuts->SetMinNClustersTPC(70); | |
559 | // fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4); | |
560 | // fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE); | |
561 | // | |
562 | // fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, | |
563 | // AliESDtrackCuts::kAny); | |
564 | // | |
565 | // if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9) | |
566 | // fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9"); | |
567 | // } | |
568 | // | |
569 | // fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6); | |
570 | // fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE); | |
571 | // fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE); | |
572 | // fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9); | |
573 | // | |
574 | // return; | |
575 | // } |