]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/QA/tasks/AliAnalysisTaskHLT.cxx
- fill more histograms to match the central barrel task output
[u/mrichter/AliRoot.git] / HLT / QA / tasks / AliAnalysisTaskHLT.cxx
CommitLineData
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
29class AliAnalysisTask;
30class 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
46ClassImp(AliAnalysisTaskHLT)
47
b2642c4c 48//===============================================================//
fb5b189b 49
50AliAnalysisTaskHLT::AliAnalysisTaskHLT()
51:
52AliAnalysisTaskSE()
4b621d9c 53 ,fUseHLTTrigger(kFALSE)
be66aae0 54 //,fESDOfftrackCuts(0)
55 //,fESDHLTtrackCuts(0)
fb5b189b 56 ,fOutputList(0)
57 ,fHistTrigger(0)
5ab64231 58 ,fChargeOff(0)
1647e83b 59 ,fMomentumOff(0)
1175b105 60 ,fDCArOff(0)
61 ,fDCAzOff(0)
5ab64231 62 ,fNclusterOff(0)
1281a832 63 ,fNITSclusterOff(0)
5ab64231 64 ,fNclusterOffwCut(0)
fb5b189b 65 ,fPhiOff(0)
fb5b189b 66 ,fMultOff(0)
67 ,fXYvertexOff(0)
68 ,fXvertexOff(0)
69 ,fYvertexOff(0)
70 ,fZvertexOff(0)
1281a832 71 ,fSPDXvertexOff(0)
72 ,fSPDYvertexOff(0)
73 ,fSPDZvertexOff(0)
fb5b189b 74 ,fEtaOff(0)
1647e83b 75 ,fEtaMomentumcutOff(0)
fb5b189b 76 ,fNclusVSphiOff(0)
77 ,fNclusVSthetaOff(0)
5ab64231 78 ,fEventSpecieOff(0)
b2642c4c 79 ,fV0cent(0)
fb5b189b 80
5ab64231 81 ,fChargeHLT(0)
fb5b189b 82 ,fMomentumHLT(0)
1175b105 83 ,fDCArHLT(0)
84 ,fDCAzHLT(0)
fb5b189b 85 ,fNclusterHLT(0)
1281a832 86 ,fNITSclusterHLT(0)
5ab64231 87 ,fNclusterHLTwCut(0)
fb5b189b 88 ,fPhiHLT(0)
5ab64231 89 ,fMultHLT(0)
fb5b189b 90 ,fXYvertexHLT(0)
91 ,fXvertexHLT(0)
92 ,fYvertexHLT(0)
93 ,fZvertexHLT(0)
1281a832 94 ,fSPDXvertexHLT(0)
95 ,fSPDYvertexHLT(0)
96 ,fSPDZvertexHLT(0)
fb5b189b 97 ,fEtaHLT(0)
1647e83b 98 ,fEtaMomentumcutHLT(0)
fb5b189b 99 ,fNclusVSphiHLT(0)
100 ,fNclusVSthetaHLT(0)
5ab64231 101 ,fEventSpecieHLT(0)
b2642c4c 102
be66aae0 103 ,fBeamType()
104 ,fTextBox(0)
105 ,fSwitch(kTRUE)
b2642c4c 106 ,fCentrality()
fb5b189b 107{
108 // Constructor
109 // Define input and output slots here
110 // Input slot #0 works with a TChain
111 // DefineInput(0, TChain::Class());
112 // Output slot #0 writes into a TH1 container
fb5b189b 113}
114
115AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
116 :
4b621d9c 117 AliAnalysisTaskSE(name)
118 ,fUseHLTTrigger(kFALSE)
be66aae0 119 //,fESDOfftrackCuts(0)
120 //,fESDHLTtrackCuts(0)
fb5b189b 121 ,fOutputList(0)
122 ,fHistTrigger(0)
5ab64231 123 ,fChargeOff(0)
1647e83b 124 ,fMomentumOff(0)
1175b105 125 ,fDCArOff(0)
126 ,fDCAzOff(0)
5ab64231 127 ,fNclusterOff(0)
1281a832 128 ,fNITSclusterOff(0)
5ab64231 129 ,fNclusterOffwCut(0)
fb5b189b 130 ,fPhiOff(0)
fb5b189b 131 ,fMultOff(0)
132 ,fXYvertexOff(0)
133 ,fXvertexOff(0)
134 ,fYvertexOff(0)
135 ,fZvertexOff(0)
136 ,fEtaOff(0)
1647e83b 137 ,fEtaMomentumcutOff(0)
fb5b189b 138 ,fNclusVSphiOff(0)
139 ,fNclusVSthetaOff(0)
5ab64231 140 ,fEventSpecieOff(0)
b2642c4c 141 ,fV0cent(0)
1281a832 142 ,fNcontOff(0)
143
5ab64231 144 ,fChargeHLT(0)
fb5b189b 145 ,fMomentumHLT(0)
fb5b189b 146 ,fNclusterHLT(0)
1281a832 147 ,fNITSclusterHLT(0)
5ab64231 148 ,fNclusterHLTwCut(0)
fb5b189b 149 ,fPhiHLT(0)
5ab64231 150 ,fMultHLT(0)
fb5b189b 151 ,fXYvertexHLT(0)
152 ,fXvertexHLT(0)
153 ,fYvertexHLT(0)
154 ,fZvertexHLT(0)
155 ,fEtaHLT(0)
1647e83b 156 ,fEtaMomentumcutHLT(0)
fb5b189b 157 ,fNclusVSphiHLT(0)
158 ,fNclusVSthetaHLT(0)
5ab64231 159 ,fEventSpecieHLT(0)
1281a832 160 ,fNcontHLT(0)
b2642c4c 161
be66aae0 162 ,fBeamType()
163 ,fTextBox(0)
164 ,fSwitch(kTRUE)
b2642c4c 165 ,fCentrality()
be66aae0 166{
1647e83b 167 // Constructor
fb5b189b 168 // Define input and output slots here
169 // Input slot #0 works with a TChain
170 // DefineInput(0, TChain::Class());
171 // Output slot #0 writes into a TH1 container
fb5b189b 172 DefineOutput(1, TList::Class());
173}
174
b2642c4c 175//------------------------------------------------------------------------//
fb5b189b 176
177void AliAnalysisTaskHLT::UserCreateOutputObjects(){
178 // Create histograms
179
180 OpenFile(1);
fb5b189b 181 fOutputList = new TList();
2476901d 182 fOutputList->SetOwner();
fb5b189b 183 fOutputList->SetName(GetName());
184
185 /*
186 //0 mistriggered, 1 Good triggered, 2, triggered, 3 fake trigger,
187 //4 events with offline track, 5 total events processed,
188 //6 offline track thru CE, 7 online track to CE
189 fHistTrigger = new TH1F("fHistTrigger", "Trigger Status", 8, -0.5, 7.5);
190 fHistTrigger->GetXaxis()->SetTitle("");
191 fHistTrigger->GetYaxis()->SetTitle("Events");
192 fHistTrigger->SetMarkerStyle(kFullCircle);
193 fHistTrigger->SetStats(0);
194 fHistTrigger->SetFillColor(2);
195 //fHistTrigger->SetDrawOption("B TEXT60");
196
197 //Set bin labels
198 (fHistTrigger->GetXaxis())->SetBinLabel(1,"missed");
199 (fHistTrigger->GetXaxis())->SetBinLabel(2,"triggerWofflTrk");
200 (fHistTrigger->GetXaxis())->SetBinLabel(3,"triggered");
201 (fHistTrigger->GetXaxis())->SetBinLabel(4,"triggerWOofflTrk");
202 (fHistTrigger->GetXaxis())->SetBinLabel(5,"NevWofflTrk");
203 (fHistTrigger->GetXaxis())->SetBinLabel(6,"Nevt");
204 (fHistTrigger->GetXaxis())->SetBinLabel(7,"offlTrkThruCE");
205 (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE");
206 */
207
be66aae0 208 fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 24, 0, 24);
fb5b189b 209 fHistTrigger->GetXaxis()->SetTitle("");
210 fHistTrigger->GetYaxis()->SetTitle("#Events");
211
be66aae0 212 //=========== event properties =================//
1647e83b 213
be66aae0 214 if(fBeamType.Contains("Pb")){
1281a832 215 fMultOff = new TH1F("fMult_off", "TPC track multiplicity (OFF)",200,0,2000);
216 fMultHLT = new TH1F("fMult_hlt", "TPC track multiplicity (HLT)",200,0,2000);
217 fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,2000);
218 fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,2000);
219 fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100);
be66aae0 220 }
221 else {
222 fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,200);
1281a832 223 fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);
224 fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,200);
225 fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,200);
be66aae0 226 }
fb5b189b 227
be66aae0 228 fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (OFF)",100,-1,1,100,-1,1);
229 fXYvertexHLT = new TH2F("fXYvertex_hlt","XY primary vertex (HLT)",100,-1,1,100,-1,1);
230
231 fXvertexOff = new TH1F("fXvertex_off","X primary vertex (OFF)",200,-0.5,0.5);
232 fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex (HLT)",200,-0.5,0.5);
5ab64231 233
be66aae0 234 fYvertexOff = new TH1F("fYvertex_off","Y primary vertex (OFF)",200,-0.5,0.5);
235 fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex (HLT)",200,-0.5,0.5);
fb5b189b 236
be66aae0 237 fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (OFF)",100,-20,20);
238 fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",100,-20,20);
1281a832 239
240 fSPDXvertexOff = new TH1F("fSPDXvertex_off","X SPD primary vertex (OFF)",200,-0.5,0.5);
241 fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex (HLT)",200,-0.5,0.5);
242
243 fSPDYvertexOff = new TH1F("fSPDYvertex_off","Y SPD primary vertex (OFF)",200,-0.5,0.5);
244 fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex (HLT)",200,-0.5,0.5);
245
246 fSPDZvertexOff = new TH1F("fSPDZvertex_off","Z SPD primary vertex (OFF)",100,-20,20);
247 fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex (HLT)",100,-20,20);
be66aae0 248
249 fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for OFF",18, 0, 18);
250 fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
fb5b189b 251
b2642c4c 252 //============== track properties =================//
be66aae0 253
254 fChargeOff = new TH1F("fCharge_off", "Charge distribution (OFF)", 3, -1.5, 1.5);
255 fChargeHLT = new TH1F("fCharge_hlt", "Charge distribution (HLT)", 3, -1.5, 1.5);
fb5b189b 256
be66aae0 257 fMomentumOff = new TH1F("fMomentum_off", "p_{T} (OFF)", 100, 0, 10);
258 fMomentumHLT = new TH1F("fMomentum_hlt", "p_{T} (HLT)", 100, 0, 10);
1175b105 259
1281a832 260 fDCArOff = new TH1F("fDCAr_off", "DCAr to beam line (OFF)", 200, -15, 15);
261 fDCArHLT = new TH1F("fDCAr_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
be66aae0 262
263 fDCAzOff = new TH1F("fDCAz_off", "DCAz to beam line (OFF)", 200, -15, 15);
264 fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz to beam line (HLT)", 200, -15, 15);
fb5b189b 265
be66aae0 266 fNclusterOff = new TH1F("fNcluster_off","TPC clusters/track (OFF)", 200, 0, 200);
267 fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track (HLT)", 200, 0, 200);
1281a832 268
269 fNITSclusterOff = new TH1F("fNITScluster_off","ITS clusters/track (OFF)", 10, 0, 10);
270 fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track (HLT)", 10, 0, 10);
fb5b189b 271
be66aae0 272 fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (OFF)",90,0,360);
273 fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)", 90,0,360);
274
275 fEtaOff = new TH1F("fEta_off","pseudorapidity (OFF)",100,-2,2);
276 fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",100,-2,2);
277
278
fb5b189b 279
be66aae0 280 fNclusterOffwCut = new TH1F("fNcluster_wcut_off","TPC clusters per track with cuts (OFF)", 200, 0, 200);
281 fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","TPC clusters per track with cuts (HLT)", 200, 0, 200);
282
283 fEtaMomentumcutOff = new TH1F("fEtaMomentumcut_off","pseudorapidity DCAcut (OFF)",100,-2,2);
1647e83b 284 fEtaMomentumcutHLT = new TH1F("fEtaMomentumcut_hlt","pseudorapidity DCAcut (HLT)", 100,-2,2);
5ab64231 285
be66aae0 286 fNclusVSphiOff = new TH2F("fNclus_vs_phi_off","clusters per track vs. #phi (OFF)",360,0,360,160,0,160);
fb5b189b 287 fNclusVSphiHLT = new TH2F("fNclus_vs_phi_hlt","clusters per track vs. #phi (HLT)", 360,0,360,160,0,160);
288
be66aae0 289 fNclusVSthetaOff = new TH2F("fNclus_vs_theta_off","clusters per track vs. #theta (OFF)",180,0,180,160,0,160);
fb5b189b 290 fNclusVSthetaHLT = new TH2F("fNclus_vs_theta_hlt","clusters per track vs. #theta (HLT)", 180,0,180,160,0,160);
be66aae0 291
292 //--------------------------------------------------//
fb5b189b 293
be66aae0 294 fTextBox = new TText();
fb5b189b 295
296 fOutputList->Add(fHistTrigger);
be66aae0 297
298 fOutputList->Add(fChargeOff); fOutputList->Add(fChargeHLT);
299 fOutputList->Add(fMomentumOff); fOutputList->Add(fMomentumHLT);
300 fOutputList->Add(fDCArOff); fOutputList->Add(fDCArHLT);
301 fOutputList->Add(fDCAzOff); fOutputList->Add(fDCAzHLT);
302 fOutputList->Add(fNclusterOff); fOutputList->Add(fNclusterHLT);
1281a832 303 fOutputList->Add(fNITSclusterOff); fOutputList->Add(fNITSclusterHLT);
be66aae0 304 fOutputList->Add(fNclusterOffwCut); fOutputList->Add(fNclusterHLTwCut);
305 fOutputList->Add(fPhiOff); fOutputList->Add(fPhiHLT);
306 fOutputList->Add(fMultOff); fOutputList->Add(fMultHLT);
307 fOutputList->Add(fXYvertexOff); fOutputList->Add(fXYvertexHLT);
308 fOutputList->Add(fXvertexOff); fOutputList->Add(fXvertexHLT);
309 fOutputList->Add(fYvertexOff); fOutputList->Add(fYvertexHLT);
310 fOutputList->Add(fZvertexOff); fOutputList->Add(fZvertexHLT);
1281a832 311 fOutputList->Add(fSPDXvertexOff); fOutputList->Add(fSPDXvertexHLT);
312 fOutputList->Add(fSPDYvertexOff); fOutputList->Add(fSPDYvertexHLT);
313 fOutputList->Add(fSPDZvertexOff); fOutputList->Add(fSPDZvertexHLT);
be66aae0 314 fOutputList->Add(fEtaOff); fOutputList->Add(fEtaHLT);
315 fOutputList->Add(fEtaMomentumcutOff); fOutputList->Add(fEtaMomentumcutHLT);
316 fOutputList->Add(fNclusVSphiOff); fOutputList->Add(fNclusVSphiHLT);
317 fOutputList->Add(fNclusVSthetaOff); fOutputList->Add(fNclusVSthetaHLT);
318 fOutputList->Add(fEventSpecieOff); fOutputList->Add(fEventSpecieHLT);
1281a832 319 fOutputList->Add(fNcontOff); fOutputList->Add(fNcontHLT);
2476901d 320
b2642c4c 321 fOutputList->Add(fTextBox);
322 if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent);
323
be66aae0 324 //SetupESDtrackCuts();
2476901d 325 PostData(1, fOutputList);
fb5b189b 326}
327
fb5b189b 328void AliAnalysisTaskHLT::UserExec(Option_t *){
329 // see header file of AliAnalysisTask for documentation
330
be66aae0 331 AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
fb5b189b 332 if(!esdOFF){
be66aae0 333 printf("Error:UserExec OFF esd not available\n");
334 return;
fb5b189b 335 }
be66aae0 336
337 if(esdOFF->GetEventSpecie()==16) return; // skip calibration events, HLT doesn't set this flag yet
338
fb5b189b 339 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
be66aae0 340 if(!esdH){
341 printf("The ESD input handler is empty\n");
342 return;
343 }
344
fb5b189b 345 AliESDEvent *esdHLT = NULL;
be66aae0 346 if(esdH) esdHLT = esdH->GetHLTEvent();
d132ef8c 347 if(!esdHLT){
be66aae0 348 printf("Error:UserExec HLT esd not available\n");
349 return;
fb5b189b 350 }
1647e83b 351
be66aae0 352 if(fSwitch==kTRUE){
353 TTimeStamp *timestamp = new TTimeStamp(esdHLT->GetTimeStamp());
354 fTextBox->SetName("text");
355 TString s = Form("Run %d, Date %d", esdHLT->GetRunNumber(), timestamp->GetDate());
356 printf("You are analyzing run %d from date %d\n\n", esdHLT->GetRunNumber(), timestamp->GetDate());
357 fTextBox->SetTitle(s);
358 fSwitch=kFALSE;
4b621d9c 359 }
fb5b189b 360
fb5b189b 361 Double_t bfield = esdOFF->GetMagneticField();
362
be66aae0 363// UInt_t Statusnames[12]={AliESDtrack::kTPCin,
364// AliESDtrack::kITSin,
365// AliESDtrack::kTPCout,
366// AliESDtrack::kITSout,
367// AliESDtrack::kITSrefit,
368// AliESDtrack::kTPCrefit,
369// AliESDtrack::kTRDin,
370// AliESDtrack::kTRDout,
371// AliESDtrack::kTRDrefit,
372// AliESDtrack::kTOFin,
373// AliESDtrack::kTOFout,
374// AliESDtrack::kTOFrefit};
fb5b189b 375
e9fe1336 376
377
378 //---------------- HLT ESD tree -----------------------//
e9fe1336 379
be66aae0 380 Int_t nr_tracksHLT = 0;
381 const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks();
1647e83b 382
1281a832 383
be66aae0 384 if(vertHLT->GetStatus()==kTRUE){
e9fe1336 385 fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
386 fXvertexHLT->Fill( vertHLT->GetX() );
387 fYvertexHLT->Fill( vertHLT->GetY() );
388 fZvertexHLT->Fill( vertHLT->GetZ() );
1281a832 389
390 fSPDXvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetX());
391 fSPDYvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetY());
392 fSPDZvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetZ());
393
394 fNcontHLT->Fill(vertHLT->GetNContributors());
1647e83b 395 }
396 //At the moment no constrains on vertex before filling histograms
397 //Should be changed.
5ab64231 398
4b621d9c 399 fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
400
401 for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
e9fe1336 402
4b621d9c 403 AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i);
404 if(!esdtrackHLT) continue;
405
406 //Fill which status flags that are set for an event
be66aae0 407 //for(int jjj=0;jjj<12;jjj++){
408 // if(esdtrackHLT->GetStatus()&Statusnames[jjj]) fStatusHLT->Fill(jjj);
409 //}
4b621d9c 410
be66aae0 411 if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; // only interested in tracks with kTPCin flag
412 if(esdtrackHLT->GetTPCNcls()<=0) continue;
413 nr_tracksHLT++;
b2642c4c 414
4b621d9c 415 //Calculating DCA "old" fashion
416 Float_t dca[2];
417 esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
418
4b621d9c 419 fDCArHLT->Fill(dca[0]);
420 fDCAzHLT->Fill(dca[1]);
421
422 fChargeHLT->Fill(esdtrackHLT->Charge());
be66aae0 423 fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
1281a832 424 fNITSclusterHLT->Fill(esdtrackHLT->GetNcls(0));
4b621d9c 425 fEtaHLT->Fill(esdtrackHLT->Eta());
4b621d9c 426 fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
be66aae0 427 fMomentumHLT->Fill(TMath::Abs(esdtrackHLT->Pt()));
4b621d9c 428 } // end of loop over hlt tracks
429
430 if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT);
e9fe1336 431
fb5b189b 432 //----------------- OFFLINE ESD tree ----------------//
433
be66aae0 434 Int_t nr_tracksOff = 0;
1281a832 435 const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
b2642c4c 436
437 if(fBeamType.Contains("Pb")){
438 fCentrality = esdOFF->GetCentrality();
439 // 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)
440 if(!fCentrality){
441 printf("Centrality pointer is empty\n");
442 return;
443 }
444 else fV0cent->Fill(fCentrality->GetCentralityPercentile("V0M"));
445 }
5ab64231 446
1281a832 447 if(vertOFF->GetStatus()==kTRUE){
448 fXYvertexOff->Fill(vertOFF->GetX(), vertOFF->GetY() );
449 fXvertexOff->Fill( vertOFF->GetX() );
450 fYvertexOff->Fill( vertOFF->GetY() );
451 fZvertexOff->Fill( vertOFF->GetZ() );
452
453 fSPDXvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetX());
454 fSPDYvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetY());
455 fSPDZvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetZ());
456
457 fNcontOff->Fill(vertOFF->GetNContributors());
1647e83b 458 }
e9fe1336 459
4b621d9c 460 fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
461
462 for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
463
464 AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i);
465 if (!esdtrackOFF) continue;
466
be66aae0 467 if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue;
468 if(esdtrackOFF->GetTPCNcls()<=0) continue;
4b621d9c 469 nr_tracksOff++;
470
4b621d9c 471 Double_t x[3];
472 esdtrackOFF->GetXYZ(x);
473 Double_t b[3];
474 AliTracker::GetBxByBz(x,b);
1281a832 475 Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig);
4b621d9c 476 if(!isOK) return;
477
478 const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
479 if(!track) return;
480
481 Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
482 esdtrackOFF->GetImpactParametersTPC(dca,cov);
5ab64231 483
4b621d9c 484 fDCArOff->Fill(dca[0]);
485 fDCAzOff->Fill(dca[1]);
be66aae0 486
4b621d9c 487 fChargeOff->Fill(esdtrackOFF->Charge());
be66aae0 488 fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
1281a832 489 fNITSclusterOff->Fill(esdtrackOFF->GetNcls(0));
4b621d9c 490 fEtaOff->Fill(esdtrackOFF->Eta());
4b621d9c 491 fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
4b621d9c 492 fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) );
493
4b621d9c 494 } // end of loop over offline tracks
5ab64231 495
4b621d9c 496 if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff);
be66aae0 497
fb5b189b 498 PostData(1, fOutputList);
499}
500
501void AliAnalysisTaskHLT::Terminate(Option_t *){
b2642c4c 502// see header file of AliAnalysisTask for documentation
5ab64231 503}
e9fe1336 504
be66aae0 505// void AliAnalysisTaskHLT::SetupESDtrackCuts(){ // not called
506// // Setup ESD cuts
507// // NB! Work in progress!
508//
509// Bool_t selPrimaries = kTRUE;
510//
511// fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
512// //To make Offline cuts = HLT cuts
513// fESDOfftrackCuts->SetRequireITSRefit(kFALSE);
514// fESDOfftrackCuts->SetEtaRange(-0.9,+0.9);
515//
516//
517// //HLT
518// //NB! Need to understand this a bit more! Which cuts should we keep?
519// fESDHLTtrackCuts = new AliESDtrackCuts;
520//
521// // TPC
522// fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
523// fESDHLTtrackCuts->SetMinNClustersTPC(70);
524// fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4);
525// fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE);
526//
527// fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
528// AliESDtrackCuts::kAny);
529//
530// if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
531// fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
532// }
533//
534// fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6);
535// fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE);
536// fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE);
537// fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9);
538//
539// return;
540// }