dd85b97387af28adf595f50b1aca6f50688b03b9
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskLUT.cxx
1
2 /* $Id$ */
3
4 //===================================================================
5 //  Class AliAnalysisTaskLUT
6 //
7 //  Extract ESD muon tracks information and store in ntuple.
8 //  Used for offline calculation/adjustment of Look-up-Tables for the
9 //  trigger chambers.
10 //
11 //  Clermont-Ferrand 2008
12 //===================================================================
13
14 #define AliAnalysisTaskLUT_cxx
15
16 #include "Riostream.h"
17 #include "TChain.h"
18 #include "TTree.h"
19 #include "TNtuple.h"
20
21 #include "AliESDEvent.h"
22 #include "AliESDVertex.h"
23 #include "AliESDMuonTrack.h"
24
25 #include "AliAnalysisTask.h"
26 #include "AliAnalysisTaskLUT.h"
27
28 ClassImp(AliAnalysisTaskLUT)
29
30 //________________________________________________________________________
31 AliAnalysisTaskLUT::AliAnalysisTaskLUT(const char *name) :
32   AliAnalysisTask(name,""), 
33   fESDEvent(0), 
34   fTracksLUT(0)
35 {
36   // Constructor.
37   // Input slot #0 works with a TChain
38   DefineInput(0, TChain::Class());
39
40   // Output slot #0 writes into a TNtuple container
41   DefineOutput(0, TNtuple::Class());
42
43 }
44
45 //___________________________________________________________________________
46 void AliAnalysisTaskLUT::ConnectInputData(Option_t *) 
47 {
48   // Input ESD tree
49   printf("   ConnectInputData of task %s\n", GetName());
50
51   TTree *tinput = (TTree*)GetInputData(0);
52   fESDEvent = new AliESDEvent();
53   fESDEvent->ReadFromTree(tinput);
54
55 }
56
57 //___________________________________________________________________________
58 void AliAnalysisTaskLUT::CreateOutputObjects() 
59 {
60   // Output object (TNtuple)
61   printf("   CreateOutputObjects of task %s\n", GetName());
62   
63   fTracksLUT = new TNtuple("ntTracksLUT","ntTracksLUT","TrigMask:VertZ:NHit:Circ:StripX:StripY:Dev:Lpt:Hpt:Chi2:Chi2trg:Z:P:Pt:Phi:The:TrackZ:PU:PtU:PhiU:TheU:TrackZU");
64
65 }
66
67 //________________________________________________________________________
68 void AliAnalysisTaskLUT::Exec(Option_t *) 
69 {
70   // Execution
71   Float_t ntvar[22];
72
73   Float_t px, py, pz, pt;
74   Float_t zVertex;
75   Int_t dev;
76
77   if (!fESDEvent) return;
78   
79   Int_t nTracks = fESDEvent->GetNumberOfMuonTracks();
80
81   AliESDVertex* vertex = (AliESDVertex*) fESDEvent->GetVertex();
82   zVertex = 0.0;
83   if (vertex) {
84     zVertex = vertex->GetZv();
85   }
86   ULong64_t mask = fESDEvent->GetTriggerMask();
87
88   ntvar[ 0] = mask;
89   ntvar[ 1] = zVertex;
90
91   for(Int_t iTracks = 0; iTracks < nTracks; iTracks++) {
92
93     AliESDMuonTrack* muonTrack = fESDEvent->GetMuonTrack(iTracks);
94     if (muonTrack == 0x0) continue;
95
96     if (!muonTrack->GetMatchTrigger()) continue;
97
98     dev  = muonTrack->LoDev();
99     dev *= (Int_t)(TMath::Sign(1.0,muonTrack->GetInverseBendingMomentum()));
100     dev += 15;
101
102     ntvar[ 2] = muonTrack->GetNHit();
103     ntvar[ 3] = muonTrack->LoCircuit();
104     ntvar[ 4] = muonTrack->LoStripX();
105     ntvar[ 5] = muonTrack->LoStripY();
106     ntvar[ 6] = dev;
107     ntvar[ 7] = muonTrack->LoLpt();
108     ntvar[ 8] = muonTrack->LoHpt();
109     ntvar[ 9] = muonTrack->GetChi2() / (2.0 * muonTrack->GetNHit() - 5);
110     ntvar[10] = muonTrack->GetChi2MatchTrigger();
111     ntvar[11] = TMath::Sign(1.,muonTrack->GetInverseBendingMomentum());
112
113     // corrected to vertex
114
115     px = muonTrack->Px();
116     py = muonTrack->Py();
117     pz = muonTrack->Pz();
118     pt = TMath::Sqrt(px*px+py*py);
119     ntvar[12] = muonTrack->P();
120     ntvar[13] = TMath::Sqrt(px*px+py*py);
121     ntvar[14] = TMath::ATan2(py,px)*180./TMath::Pi();
122     ntvar[15] = TMath::ATan2(pt,pz)*180./TMath::Pi();
123     ntvar[16] = muonTrack->GetZ();
124
125     // uncorrected
126
127     px = muonTrack->PxUncorrected();
128     py = muonTrack->PyUncorrected();
129     pz = muonTrack->PzUncorrected();
130     pt = TMath::Sqrt(px*px+py*py);
131     ntvar[17] = muonTrack->PUncorrected();
132     ntvar[18] = TMath::Sqrt(px*px+py*py);
133     ntvar[19] = TMath::ATan2(py,px)*180./TMath::Pi();
134     ntvar[20] = TMath::ATan2(pt,pz)*180./TMath::Pi();
135     ntvar[21] = muonTrack->GetZUncorrected();
136
137     fTracksLUT->Fill(ntvar);
138
139   } // end ESD track loop
140
141   // Post final data. It will be written to a file with option "RECREATE"
142   PostData(0, fTracksLUT);
143   
144 }      
145
146 //________________________________________________________________________
147 void AliAnalysisTaskLUT::Terminate(Option_t *) {
148   // End function, empty
149 }
150