]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGUD/UPC/AliAnalysisTaskUpcTree.cxx
ATO-17 Removing compilation warnings (copy constructor)
[u/mrichter/AliRoot.git] / PWGUD / UPC / AliAnalysisTaskUpcTree.cxx
CommitLineData
cb89681c 1/*************************************************************************
2* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
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// Task to create upc tree
17// evgeny.kryshen@cern.ch
18
19#include "AliAnalysisTaskUpcTree.h"
20#include "AliAnalysisTaskSE.h"
21#include "TChain.h"
22#include "AliVEvent.h"
23#include "AliAODEvent.h"
24#include "AliESDEvent.h"
25#include "AliVHeader.h"
26#include "AliMultiplicity.h"
27#include "AliESDEvent.h"
28#include "AliESDHeader.h"
29#include "AliESDMuonTrack.h"
30#include "AliESDtrack.h"
31#include "TTree.h"
32#include "TList.h"
33#include "TFile.h"
34#include "TObjString.h"
35#include "TH1I.h"
36#include "TLorentzVector.h"
37#include "AliAnalysisManager.h"
38#include "AliInputEventHandler.h"
39#include "AliUpcParticle.h"
40#include "AliAnalysisFilter.h"
41#include "AliESDtrackCuts.h"
42#include "AliMuonTrackCuts.h"
43#include "AliTriggerIR.h"
44ClassImp(AliAnalysisTaskUpcTree)
45
46//-----------------------------------------------------------------------------
47AliAnalysisTaskUpcTree::AliAnalysisTaskUpcTree(const char* name) :
48 AliAnalysisTaskSE(name),
49 fIsMC(0),
50 fIsAOD(0),
51 fMuonTrackCuts(new AliMuonTrackCuts),
52 fTrackFilter(NULL),
53 fListOfHistos(NULL),
54 fEventStatistics(NULL),
55 fTriggersPerRun(NULL),
56 fTree(NULL),
57 fTPCtracks(NULL),
58 fMUONtracks(NULL),
59 fChunkFileName(new TObjString()),
60 fEventInFile(-1),
61 fPeriod(-1),
62 fOrbit(-1),
63 fBC(-1),
64 fL0inputs(0),
65 fL1inputs(0),
66 fRunNumber(0),
67 fNofTracklets(0),
68 fBBonlineV0A(kFALSE),
69 fBGonlineV0A(kFALSE),
70 fBBonlineV0C(kFALSE),
71 fBGonlineV0C(kFALSE),
72 fV0ADecision(kFALSE),
73 fV0CDecision(kFALSE),
74 fZNAtdc(kFALSE),
75 fZNCtdc(kFALSE),
76 fZPAtdc(kFALSE),
77 fZPCtdc(kFALSE),
78 fZEM1tdc(kFALSE),
79 fZEM2tdc(kFALSE),
80 fZNAenergy(-1000),
81 fZNCenergy(-1000),
82 fZPAenergy(-1000),
83 fZPCenergy(-1000),
84 fZEM1energy(-1000),
85 fZEM2energy(-1000),
86 fZNAtower0(-1000),
87 fZNCtower0(-1000),
88 fZPAtower0(-1000),
89 fZPCtower0(-1000),
90 fVtxX(-1000),
91 fVtxY(-1000),
92 fVtxZ(-1000),
93 fVtxTPC(kFALSE),
94 fIR1(),
95 fIR2(),
96 fFOmap(),
97 fFiredChipMap()
98{
99 fMuonTrackCuts->SetPassName("muon_pass2");
100 fMuonTrackCuts->SetAllowDefaultParams(kTRUE);
101 fMuonTrackCuts->SetFilterMask(AliMuonTrackCuts::kMuPdca);
102
103 for (Int_t i=0;i<NTRIGGERS;i++) fTriggerFired[i]=0;
104 for (Int_t i=0;i<32;i++) {
105 fV0AMult[i]=0;
106 fV0CMult[i]=0;
107 fV0ATime[i]=0;
108 fV0CTime[i]=0;
109 fBBTriggerV0A[i]=0;
110 fBGTriggerV0A[i]=0;
111 fBBTriggerV0C[i]=0;
112 fBGTriggerV0C[i]=0;
113 }
114 for (Int_t i=0;i<64;i++) {
115 fBBFlag[i]=0;
116 fBGFlag[i]=0;
117 }
118 DefineInput(0,TChain::Class());
119 DefineOutput(1,TList::Class());
120 DefineOutput(2,TTree::Class());
121}
122//-----------------------------------------------------------------------------
123
124
125//-----------------------------------------------------------------------------
126void AliAnalysisTaskUpcTree::NotifyRun(){
127 if (fMuonTrackCuts) fMuonTrackCuts->SetRun(fInputHandler);
128 fInputHandler->SetNeedField();
129}
130//-----------------------------------------------------------------------------
131
132
133//-----------------------------------------------------------------------------
134void AliAnalysisTaskUpcTree::UserCreateOutputObjects(){
135 fListOfHistos = new TList();
136 fListOfHistos->SetOwner();
137 fEventStatistics = new TH1I("fEventStatistics","",10,0,10);
138 fEventStatistics->SetBit(TH1::kCanRebin);
139 fListOfHistos->Add(fEventStatistics);
140
141 fTriggersPerRun = new TH2I("fTriggersPerRun",";;Events",2000,195600,197600,NTRIGGERS,-0.5,NTRIGGERS+0.5);
142 fListOfHistos->Add(fTriggersPerRun);
143
144 TDirectory *owd = gDirectory;
145 OpenFile(1);
146 fTree = new TTree("events","events");
147 owd->cd();
148 fTPCtracks = new TClonesArray("AliUpcParticle",100);
149 fMUONtracks = new TClonesArray("AliUpcParticle",10);
150 fTree->Branch("fTriggerFired",&fTriggerFired,Form("fTriggerFired[%i]/O",NTRIGGERS));
151 fTree->Branch("fChunkFileName",&fChunkFileName);
152 fTree->Branch("fEventInFile",&fEventInFile);
153 fTree->Branch("fPeriod",&fPeriod);
154 fTree->Branch("fOrbit",&fOrbit);
155 fTree->Branch("fBC",&fBC);
156 fTree->Branch("fRunNumber",&fRunNumber);
157 fTree->Branch("fNofTracklets",&fNofTracklets);
158 fTree->Branch("fV0AMult",&fV0AMult,"fV0AMult[32]/F");
159 fTree->Branch("fV0CMult",&fV0CMult,"fV0CMult[32]/F");
160 fTree->Branch("fV0ATime",&fV0ATime,"fV0ATime[32]/F");
161 fTree->Branch("fV0CTime",&fV0CTime,"fV0CTime[32]/F");
162 fTree->Branch("fBBFlag",&fBBFlag,"fBBFlag[64]/O");
163 fTree->Branch("fBGFlag",&fBGFlag,"fBGFlag[64]/O");
164 fTree->Branch("fBBTriggerV0A",&fBBTriggerV0A,"fBBTriggerV0A[32]/O");
165 fTree->Branch("fBGTriggerV0A",&fBGTriggerV0A,"fBGTriggerV0A[32]/O");
166 fTree->Branch("fBBTriggerV0C",&fBBTriggerV0C,"fBBTriggerV0C[32]/O");
167 fTree->Branch("fBGTriggerV0C",&fBGTriggerV0C,"fBGTriggerV0C[32]/O");
168 fTree->Branch("fBBonlineV0A",&fBBonlineV0A);
169 fTree->Branch("fBGonlineV0A",&fBGonlineV0A);
170 fTree->Branch("fBBonlineV0C",&fBBonlineV0C);
171 fTree->Branch("fBGonlineV0C",&fBGonlineV0C);
172 fTree->Branch("fV0ADecision",&fV0ADecision);
173 fTree->Branch("fV0CDecision",&fV0CDecision);
174 fTree->Branch("fZNAtdc",&fZNAtdc);
175 fTree->Branch("fZNCtdc",&fZNCtdc);
176 fTree->Branch("fZPAtdc",&fZPAtdc);
177 fTree->Branch("fZPCtdc",&fZPCtdc);
178 fTree->Branch("fZEM1tdc",&fZEM1tdc);
179 fTree->Branch("fZEM2tdc",&fZEM2tdc);
180 fTree->Branch("fZPAenergy",&fZPAenergy);
181 fTree->Branch("fZPCenergy",&fZPCenergy);
182 fTree->Branch("fZNAenergy",&fZNAenergy);
183 fTree->Branch("fZNCenergy",&fZNCenergy);
184 fTree->Branch("fZEM1energy",&fZEM1energy);
185 fTree->Branch("fZEM2energy",&fZEM2energy);
186 fTree->Branch("fZNAtower0",&fZNAtower0);
187 fTree->Branch("fZNCtower0",&fZNCtower0);
188 fTree->Branch("fZPAtower0",&fZPAtower0);
189 fTree->Branch("fZPCtower0",&fZPCtower0);
190 fTree->Branch("fVtxX",&fVtxX);
191 fTree->Branch("fVtxY",&fVtxY);
192 fTree->Branch("fVtxZ",&fVtxZ);
193 fTree->Branch("fVtxTPC",&fVtxTPC);
194 fTree->Branch("fTPCtracks",&fTPCtracks);
195 fTree->Branch("fMUONtracks",&fMUONtracks);
196 fTree->Branch("fNofITSClusters",&fNofITSClusters,"fNofITSClusters[6]/I");
197 fTree->Branch("fIR1",&fIR1);
198 fTree->Branch("fIR2",&fIR2);
199 fTree->Branch("fL0inputs",&fL0inputs);
200 fTree->Branch("fL1inputs",&fL1inputs);
201 fTree->Branch("fFOmap",&fFOmap);
202 fTree->Branch("fFiredChipMap",&fFiredChipMap);
203
204 PostData(1,fListOfHistos);
205 PostData(2,fTree);
206}
207//-----------------------------------------------------------------------------
208
209
210//-----------------------------------------------------------------------------
211void AliAnalysisTaskUpcTree::UserExec(Option_t *){
212 fMUONtracks->Clear();
213 fTPCtracks->Clear();
214 fEventStatistics->Fill("before cuts",1);
215 AliVEvent* event = fInputHandler->GetEvent();
216 if (!event) return;
217 AliAODEvent* aod = fIsAOD ? (AliAODEvent*) event : 0;
218 AliESDEvent* esd = !fIsAOD ? (AliESDEvent*) event : 0;
219
220 fEventStatistics->Fill("after event check",1);
221
222 TString trigger = event->GetFiredTriggerClasses();
223
224 for (Int_t i=0;i<NTRIGGERS;i++) fTriggerFired[i]=0;
225 fTriggerFired[ 0] = 1;
226 fTriggerFired[ 1] = trigger.Contains("CCUP7-B");
227 fTriggerFired[ 2] = trigger.Contains("CMUP5-B");
228 fTriggerFired[ 3] = trigger.Contains("CMUP7-B");
229 fTriggerFired[ 4] = trigger.Contains("CMUP9-B");
230 fTriggerFired[ 5] = trigger.Contains("CMSL7-B-NOPF-MUON");
231 fTriggerFired[ 6] = trigger.Contains("CMSL7-B-NOPF-ALLNOTRD");
232
233 fRunNumber = event->GetRunNumber();
234 Bool_t isTrigger=0;
235 for (Int_t i=0;i<NTRIGGERS;i++){
236 if (!fTriggerFired[i]) continue;
237 fTriggersPerRun->Fill(fRunNumber,i);
238 if (!i) continue;
239 isTrigger=1;
240 }
241 if (!isTrigger && !fIsMC) { PostData(1,fListOfHistos); return; }
242 fEventStatistics->Fill("after trigger check",1);
243
244 fNofTracklets = fIsAOD ? aod->GetTracklets()->GetNumberOfTracklets() : esd->GetMultiplicity()->GetNumberOfTracklets();
245
246 if (fNofTracklets>1 && fTriggerFired[5]) { PostData(1,fListOfHistos); return; }
247 if (fNofTracklets>1 && fTriggerFired[6]) { PostData(1,fListOfHistos); return; }
248
249 fEventStatistics->Fill("after tracklet check",1);
250
251 fPeriod = event->GetPeriodNumber();
252 fOrbit = event->GetOrbitNumber();
253 fBC = event->GetBunchCrossNumber();
254 fL0inputs = fIsAOD ? aod->GetHeader()->GetL0TriggerInputs() : esd->GetHeader()->GetL0TriggerInputs();
255 fL1inputs = fIsAOD ? aod->GetHeader()->GetL1TriggerInputs() : esd->GetHeader()->GetL1TriggerInputs();
256
257 for (Int_t i=0;i<6;i++) fNofITSClusters[i] = fIsAOD ? aod->GetHeader()->GetNumberOfITSClusters(i) : esd->GetMultiplicity()->GetNumberOfITSClusters(i);
258
aafaf2f3 259 fIR1 = fIsAOD ? aod->GetHeader()->GetIRInt1InteractionMap() : esd->GetHeader()->GetIRInt1InteractionMap();
260 fIR2 = fIsAOD ? aod->GetHeader()->GetIRInt2InteractionMap() : esd->GetHeader()->GetIRInt2InteractionMap();
cb89681c 261
262 AliVVZERO* vzero = event->GetVZEROData();
263 for (Int_t i=0; i<32; i++){
264 fV0AMult[i] = vzero->GetMultiplicityV0A(i);
265 fV0CMult[i] = vzero->GetMultiplicityV0C(i);
266 fV0ATime[i] = vzero->GetV0ATime();
267 fV0CTime[i] = vzero->GetV0CTime();
268 fBBTriggerV0A[i] = vzero->BBTriggerV0A(i);
269 fBGTriggerV0A[i] = vzero->BGTriggerV0A(i);
270 fBBTriggerV0C[i] = vzero->BBTriggerV0C(i);
271 fBGTriggerV0C[i] = vzero->BGTriggerV0C(i);
272 }
273
274 fBBonlineV0A = kFALSE;
275 fBGonlineV0A = kFALSE;
276 fBBonlineV0C = kFALSE;
277 fBGonlineV0C = kFALSE;
278 for (Int_t i=0; i<64; i++){
279 fBBFlag[i] = vzero->GetBBFlag(i);
280 fBGFlag[i] = vzero->GetBGFlag(i);
281 if (fBBFlag[i] && i>=32) fBBonlineV0A = kTRUE;
282 if (fBGFlag[i] && i>=32) fBGonlineV0A = kTRUE;
283 if (fBBFlag[i] && i <32) fBBonlineV0C = kTRUE;
284 if (fBGFlag[i] && i <32) fBGonlineV0C = kTRUE;
285 }
286
287 fV0ADecision = vzero->GetV0ADecision();
288 fV0CDecision = vzero->GetV0CDecision();
289
290 // ZDC data
291 AliVZDC* zdc = event->GetZDCData();
292 fZNAenergy = zdc->GetZNAEnergy();
293 fZNCenergy = zdc->GetZNCEnergy();
294 fZPAenergy = zdc->GetZPAEnergy();
295 fZPCenergy = zdc->GetZPCEnergy();
296 fZEM1energy = zdc->GetZEM1Energy();
297 fZEM2energy = zdc->GetZEM2Energy();
298 fZNAtower0 = zdc->GetZNATowerEnergy()[0];
299 fZNCtower0 = zdc->GetZNCTowerEnergy()[0];
300 fZPAtower0 = zdc->GetZPATowerEnergy()[0];
301 fZPCtower0 = zdc->GetZPCTowerEnergy()[0];
302 // ZDC timing
303 fZEM1tdc = kFALSE;
304 fZEM2tdc = kFALSE;
305 fZNCtdc = kFALSE;
306 fZPCtdc = kFALSE;
307 fZNAtdc = kFALSE;
308 fZPAtdc = kFALSE;
309 if (!fIsAOD) {
310 AliESDZDC* esdzdc = (AliESDZDC*) zdc;
311 for(Int_t i=0;i<4;i++) {
312 if (esdzdc->GetZDCTDCData( 8,i)) fZEM1tdc = kTRUE;
313 if (esdzdc->GetZDCTDCData( 9,i)) fZEM2tdc = kTRUE;
314 if (esdzdc->GetZDCTDCData(10,i)) fZNCtdc = kTRUE;
315 if (esdzdc->GetZDCTDCData(11,i)) fZPCtdc = kTRUE;
316 if (esdzdc->GetZDCTDCData(12,i)) fZNAtdc = kTRUE;
317 if (esdzdc->GetZDCTDCData(13,i)) fZPAtdc = kTRUE;
318 }
319 }
320
321 if (!esd) return; // AOD not yet implemented
322
323 fEventInFile = esd->GetHeader()->GetEventNumberInFile();
324 fChunkFileName->SetString(((TTree*) GetInputData(0))->GetCurrentFile()->GetName());
325
326 const AliESDVertex* vertex = esd->GetPrimaryVertex();
327 fVtxX = -1000;
328 fVtxY = -1000;
329 fVtxZ = -1000;
330 fVtxTPC = 1;
331 if (vertex) {
332 fVtxX = vertex->GetX();
333 fVtxY = vertex->GetY();
334 fVtxZ = vertex->GetZ();
335 TString name(vertex->GetName());
336 fVtxTPC = name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex");
337 }
338
339 fFOmap = esd->GetMultiplicity()->GetFastOrFiredChips();
340 fFiredChipMap = esd->GetMultiplicity()->GetFiredChipMap();
341
342 for (Int_t itr=0;itr<event->GetNumberOfTracks();itr++){
343 AliESDtrack* track = (AliESDtrack*) esd->GetTrack(itr);
344 Float_t pt = track->Pt();
345 Float_t eta = track->Eta();
346 Float_t phi = track->Phi();
347 Short_t charge = track->Charge();
348 UInt_t mask = 0;//track->GetFilterMap();
349
350 if (!fTrackFilter) AliFatal("Track filter undefined");
351 mask |= fTrackFilter->IsSelected(track);
352
353 if (!mask) continue;
354 UInt_t itsClusterMap = track->GetITSClusterMap();
355 Bool_t itsRefit = track->GetStatus() & AliVTrack::kITSrefit;
356 Bool_t tpcRefit = track->GetStatus() & AliVTrack::kTPCrefit;
357 Bool_t kink = track->GetKinkIndex(0)>0;
358 mask |= itsRefit << 20;
359 mask |= tpcRefit << 21;
360 mask |= kink << 22;
361 mask |= itsClusterMap << 23;
362
363 AliUpcParticle* part = new ((*fTPCtracks)[fTPCtracks->GetEntriesFast()]) AliUpcParticle(pt,eta,phi,charge,mask,10);
364 Float_t dedx = track->GetTPCsignal();
365 Float_t nCrossedRaws = track->GetTPCCrossedRows();
366 Float_t nFindableClusters = track->GetTPCNclsF();
367 Float_t nSharedClusters = track->GetTPCnclsS();
368 Float_t nClusters = track->GetTPCncls();
369 Float_t chi2tpc = track->GetTPCchi2();
370 Float_t chi2its = track->GetITSchi2();
371 Float_t chi2golden = 0;//vertex ? track->GetChi2TPCConstrainedVsGlobal(vertex) : 0;
372 Float_t bxy,bz;
373 track->GetImpactParameters(bxy,bz);
374 part->SetAt(dedx,0);
375 part->SetAt(nCrossedRaws,1);
376 part->SetAt(nFindableClusters,2);
377 part->SetAt(nSharedClusters,3);
378 part->SetAt(nClusters,4);
379 part->SetAt(chi2tpc,5);
380 part->SetAt(chi2its,6);
381 part->SetAt(chi2golden,7);
382 part->SetAt(bxy,8);
383 part->SetAt(bz,9);
384 }
385
386 for (Int_t itr=0;itr<esd->GetNumberOfMuonTracks();itr++){
387 AliESDMuonTrack* track = esd->GetMuonTrack(itr);
388 if (!track->ContainTrackerData()) continue;
389 Float_t pt = track->Pt();
390 Float_t eta = track->Eta();
391 Float_t phi = track->Phi();
392 Short_t charge = track->Charge();
393 UInt_t mask = fMuonTrackCuts->IsSelected(track);
394 Float_t dca = track->GetDCA();
395 Float_t chi2 = track->GetChi2();
396 Float_t ndf = track->GetNDF();
397 Float_t rabs = track->GetRAtAbsorberEnd();
398 Float_t match = track->GetMatchTrigger();
399 AliUpcParticle* part = new ((*fMUONtracks)[fMUONtracks->GetEntriesFast()]) AliUpcParticle(pt,eta,phi,charge,mask,5);
400 part->SetAt(dca,0);
401 part->SetAt(chi2,1);
402 part->SetAt(ndf,2);
403 part->SetAt(rabs,3);
404 part->SetAt(match,4);
405 }
406
407 fTree->Fill();
408 PostData(1,fListOfHistos);
409 PostData(2,fTree);
410}
411//-----------------------------------------------------------------------------
412