]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MFT/AliAnalysisTaskMFTExample.cxx
remove debug message
[u/mrichter/AliRoot.git] / MFT / AliAnalysisTaskMFTExample.cxx
CommitLineData
d30a0b7b 1#include "TH1D.h"
2#include "AliAODEvent.h"
3#include "AliAODMCParticle.h"
4#include "AliAODMCHeader.h"
5#include "AliAnalysisTaskMFTExample.h"
6#include "TDatabasePDG.h"
7#include "AliMUONTrackParam.h"
8#include "AliMUONTrackExtrap.h"
9#include "AliAODDimuon.h"
10#include "AliAODTrack.h"
11#include "AliAODHeader.h"
12#include "TClonesArray.h"
13#include "AliMFTConstants.h"
14#include "AliMFTSupport.h"
15#include "TRandom.h"
16
17ClassImp(AliAnalysisTaskMFTExample)
18
19//====================================================================================================================================================
20
21AliAnalysisTaskMFTExample::AliAnalysisTaskMFTExample() :
22 AliAnalysisTaskSE(),
23 fVertexMode(0),
24 fHistPtSingleMuons(0),
25 fHistPtSingleMuonsFromJpsi(0),
26 fHistPtDimuonsOS(0),
27 fHistMassDimuonsOS(0),
28 fHistPtDimuonsJpsi(0),
29 fHistMassDimuonsJpsi(0),
30 fHistResidualXVtxJpsi(0),
31 fHistResidualYVtxJpsi(0),
32 fHistResidualZVtxJpsi(0) {
33
34 // Default constructor
35
36 for (Int_t i=0; i<3; i++) fPrimaryVertex[i] = 0;
37 fVtxResolutionITS[0] = 5.e-4;
38 fVtxResolutionITS[1] = 5.e-4;
39 fVtxResolutionITS[2] = 4.e-4;
40
41}
42
43//====================================================================================================================================================
44
45AliAnalysisTaskMFTExample::AliAnalysisTaskMFTExample(const Char_t *name) :
46 AliAnalysisTaskSE(name),
47 fVertexMode(0),
48 fHistPtSingleMuons(0),
49 fHistPtSingleMuonsFromJpsi(0),
50 fHistPtDimuonsOS(0),
51 fHistMassDimuonsOS(0),
52 fHistPtDimuonsJpsi(0),
53 fHistMassDimuonsJpsi(0),
54 fHistResidualXVtxJpsi(0),
55 fHistResidualYVtxJpsi(0),
56 fHistResidualZVtxJpsi(0) {
57
58 // Constructor
59
60 for (Int_t i=0; i<3; i++) fPrimaryVertex[i] = 0;
61 fVtxResolutionITS[0] = 5.e-4;
62 fVtxResolutionITS[1] = 5.e-4;
63 fVtxResolutionITS[2] = 4.e-4;
64
65 // Define input and output slots here
66 DefineOutput(1, TH1D::Class());
67 DefineOutput(2, TH1D::Class());
68 DefineOutput(3, TH1D::Class());
69 DefineOutput(4, TH1D::Class());
70 DefineOutput(5, TH1D::Class());
71 DefineOutput(6, TH1D::Class());
72 DefineOutput(7, TH1D::Class());
73 DefineOutput(8, TH1D::Class());
74 DefineOutput(9, TH1D::Class());
75
76}
77
78//====================================================================================================================================================
79
80void AliAnalysisTaskMFTExample::UserCreateOutputObjects() {
81
82 // Called once
83
84 fHistPtSingleMuons = new TH1D("fHistPtSingleMuons","p_{T} of single muons (All)", 100, 0, 10);
85 fHistPtSingleMuons -> SetXTitle("p_{T} [GeV/c]");
86 fHistPtSingleMuons -> Sumw2();
87
88 fHistPtSingleMuonsFromJpsi = new TH1D("fHistPtSingleMuonsFromJpsi", "p_{T} of single muons (from J/#psi)", 100, 0, 10);
89 fHistPtSingleMuonsFromJpsi -> SetXTitle("p_{T} [GeV/c]");
90 fHistPtSingleMuonsFromJpsi -> Sumw2();
91
92 fHistMassDimuonsOS = new TH1D("fHistMassDimuonsOS", "Mass of OS dimuons", 500, 0, 10);
93 fHistMassDimuonsOS -> SetXTitle("Mass [GeV/c^{2}]");
94 fHistMassDimuonsOS -> Sumw2();
95
96 fHistMassDimuonsJpsi = new TH1D("fHistMassDimuonsJpsi", "Mass of J/#psi dimuons", 500, 0, 10);
97 fHistMassDimuonsJpsi -> SetXTitle("Mass [GeV/c^{2}]");
98 fHistMassDimuonsJpsi -> Sumw2();
99
100 fHistPtDimuonsOS = new TH1D("fHistPtDimuonsOS", "p_{T} of OS dimuons", 100, 0, 10);
101 fHistPtDimuonsOS -> SetXTitle("p_{T} [GeV/c]");
102 fHistPtDimuonsOS -> Sumw2();
103
104 fHistPtDimuonsJpsi = new TH1D("fHistPtDimuonsJpsi", "p_{T} of J/#psi dimuons", 100, 0, 10);
105 fHistPtDimuonsJpsi -> SetXTitle("p_{T} [GeV/c]");
106 fHistPtDimuonsJpsi -> Sumw2();
107
108 fHistResidualXVtxJpsi = new TH1D("fHistResidualXVtxJpsi", "J/#psi vertex residuals along x", 100, -100, 100);
109 fHistResidualXVtxJpsi -> SetXTitle("Residual [#mum]");
110 fHistResidualXVtxJpsi -> Sumw2();
111
112 fHistResidualYVtxJpsi = new TH1D("fHistResidualYVtxJpsi", "J/#psi vertex residuals along y", 100, -100, 100);
113 fHistResidualYVtxJpsi -> SetXTitle("Residual [#mum]");
114 fHistResidualYVtxJpsi -> Sumw2();
115
116 fHistResidualZVtxJpsi = new TH1D("fHistResidualZVtxJpsi", "J/#psi vertex residuals along z", 100, -1000, 1000);
117 fHistResidualZVtxJpsi -> SetXTitle("Residual [#mum]");
118 fHistResidualZVtxJpsi -> Sumw2();
119
120 PostData(1, fHistPtSingleMuons);
121 PostData(2, fHistPtSingleMuonsFromJpsi);
122 PostData(3, fHistMassDimuonsOS);
123 PostData(4, fHistMassDimuonsJpsi);
124 PostData(5, fHistPtDimuonsOS);
125 PostData(6, fHistPtDimuonsJpsi);
126 PostData(7, fHistResidualXVtxJpsi);
127 PostData(8, fHistResidualYVtxJpsi);
128 PostData(9, fHistResidualZVtxJpsi);
129
130}
131
132//====================================================================================================================================================
133
134void AliAnalysisTaskMFTExample::UserExec(Option_t *) {
135
136 // Main loop
137 // Called for each event
138
139 AliAODEvent *aodEv = dynamic_cast<AliAODEvent*>(InputEvent());
140 if (!aodEv) return;
141
142 aodEv->GetHeader()->InitMagneticField();
143 AliMUONTrackExtrap::SetField();
144
145 TClonesArray *stackMC = (TClonesArray*) (aodEv->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
146
147 // Getting primary vertex, either from the generation or from the reconstruction -------------------
148
149 if (fVertexMode == kGenerated) {
150 AliAODMCHeader *mcHeader = (AliAODMCHeader*) (aodEv->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
151 mcHeader->GetVertex(fPrimaryVertex);
152 for (Int_t i=0; i<3; i++) fPrimaryVertex[i] = gRandom->Gaus(fPrimaryVertex[i], fVtxResolutionITS[i]);
153 }
154 else if (fVertexMode == kReconstructed) {
155 aodEv->GetPrimaryVertex()->GetXYZ(fPrimaryVertex);
156 }
157
158 // -------------------------------------------------------------------------------------------------
159
160 AliAODTrack *recMuon1=0, *recMuon2=0;
161 AliAODMCParticle *mcMuon1=0, *mcMuon2=0;
162 AliAODMCParticle *mcMother1=0;
163 Bool_t isMuon1FromJpsi=0;
164
165 // Loop over MUON+MFT muons
166
167 //--------------------------------------------------------------------------------------------------
168
169 for (Int_t iTrack=0; iTrack<aodEv->GetNumberOfTracks(); iTrack++) {
170
171 if (!(aodEv->GetTrack(iTrack)->IsMuonGlobalTrack())) continue;
172
173 recMuon1 = aodEv->GetTrack(iTrack);
174 isMuon1FromJpsi = kFALSE;
175
176 // pt all muons
177 fHistPtSingleMuons -> Fill(recMuon1->Pt());
178
179 // pt muons from J/psi
180 if (recMuon1->GetLabel() >= 0) {
181 mcMuon1 = (AliAODMCParticle*) stackMC->At(recMuon1->GetLabel());
182 if (mcMuon1) {
183 if (mcMuon1->GetMother()>=0) {
184 mcMother1 = (AliAODMCParticle*) stackMC->At(mcMuon1->GetMother());
185 if (mcMother1->PdgCode()==443) {
186 isMuon1FromJpsi = kTRUE;
187 fHistPtSingleMuonsFromJpsi -> Fill(recMuon1->Pt());
188 }
189 }
190 }
191 }
192
193 for (Int_t jTrack=0; jTrack<iTrack; jTrack++) {
194
195 if (!(aodEv->GetTrack(jTrack)->IsMuonGlobalTrack())) continue;
196
197 recMuon2 = aodEv->GetTrack(jTrack);
198
199 AliAODDimuon *dimuon = new AliAODDimuon(recMuon1, recMuon2);
200 if (dimuon->Charge()) continue;
201
202 // pt and mass all OS dimuons
203 fHistPtDimuonsOS -> Fill(dimuon->Pt());
204 fHistMassDimuonsOS -> Fill(dimuon->Mass());
205
206 // pt and mass J/psi dimuons
207 if (!isMuon1FromJpsi) continue;
208 if (recMuon2->GetLabel() >= 0) {
209 mcMuon2 = (AliAODMCParticle*) stackMC->At(recMuon2->GetLabel());
210 if (mcMuon2) {
211 if (mcMuon2->GetMother() == mcMuon1->GetMother()) {
212 Double_t vertex[3]={0};
213 TLorentzVector kinem(0,0,0,0);
214 if (!AliMFTSupport::RefitAODDimuonWithCommonVertex(dimuon, vertex, kinem)) continue;
215 fHistPtDimuonsJpsi -> Fill(kinem.Pt());
216 fHistMassDimuonsJpsi -> Fill(kinem.M());
217 fHistResidualXVtxJpsi -> Fill(1.e4*(vertex[0] - fPrimaryVertex[0]));
218 fHistResidualYVtxJpsi -> Fill(1.e4*(vertex[1] - fPrimaryVertex[1]));
219 fHistResidualZVtxJpsi -> Fill(1.e4*(vertex[2] - fPrimaryVertex[2]));
220 }
221 }
222 }
223
224 } // end of loop on 2nd muon
225
226 } // end of loop on 1st muon
227
228 //--------------------------------------------------------------------------------------------------
229
230 PostData(1, fHistPtSingleMuons);
231 PostData(2, fHistPtSingleMuonsFromJpsi);
232 PostData(3, fHistMassDimuonsOS);
233 PostData(4, fHistMassDimuonsJpsi);
234 PostData(5, fHistPtDimuonsOS);
235 PostData(6, fHistPtDimuonsJpsi);
236 PostData(7, fHistResidualXVtxJpsi);
237 PostData(8, fHistResidualYVtxJpsi);
238 PostData(9, fHistResidualZVtxJpsi);
239
240}
241
242//====================================================================================================================================================
243
244void AliAnalysisTaskMFTExample::Terminate(Option_t *) {
245
246 // Draw result to the screen
247 // Called once at the end of the query
248
249}
250
251//====================================================================================================================================================