]>
Commit | Line | Data |
---|---|---|
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" | |
44 | ClassImp(AliAnalysisTaskUpcTree) | |
45 | ||
46 | //----------------------------------------------------------------------------- | |
47 | AliAnalysisTaskUpcTree::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 | //----------------------------------------------------------------------------- | |
126 | void AliAnalysisTaskUpcTree::NotifyRun(){ | |
127 | if (fMuonTrackCuts) fMuonTrackCuts->SetRun(fInputHandler); | |
128 | fInputHandler->SetNeedField(); | |
129 | } | |
130 | //----------------------------------------------------------------------------- | |
131 | ||
132 | ||
133 | //----------------------------------------------------------------------------- | |
134 | void 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 | //----------------------------------------------------------------------------- | |
211 | void 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 |