]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx
Added macros for production using Geant4. 3 different physics lists can be used:...
[u/mrichter/AliRoot.git] / TRD / qaAnalysis / AliTRDqaElectronSpectra.cxx
CommitLineData
917559ee 1/**************************************************************************
2 * Copyright(c) 1998-1999, 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/* $Id: AliTRDqaElectronSpectra.cxx $ */
17
18//
19// This class is a part of a package of high level QA monitoring for TRD.
20//
21// The transverse momentum spectrum is analyzed stack-by-stack
22// for all tracks, and for electron tracks.
23// Tracks have to pass quality cuts.
24// Electrons are waighted with the PID LQ
25//
26// S. Radomski
27// radomski@physi.uni-heidelberg.de
28// March 2008
29//
30
31#include "AliTRDqaElectronSpectra.h"
32#include "AliTRDqaAT.h"
33
917559ee 34#include "TH1D.h"
35#include "TH2D.h"
36#include "TFile.h"
917559ee 37#include "TChain.h"
38
39#include "AliESDEvent.h"
40#include "AliESDtrack.h"
41
42//______________________________________________________________________________
43
44AliTRDqaElectronSpectra::AliTRDqaElectronSpectra()
45 : AliAnalysisTask("",""),
46 fChain(0),
47 fESD(0),
48 fOutputContainer(0),
49 fStatus(0),
50 fSector(0),
51 fTheta(0),
52 fStack(0),
53 fnTracks(0),
54 fnElTracks(0),
55 fTracksRatio(0),
56 fPt(0),
57 fPtElectron(0),
58 fMeanPt(0),
59 fMeanPtElectron(0),
60 fPtStack(0),
61 fPtStackElectron(0),
62 fElectronLQ(0)
63{
64 //
65 // default dummy constructor
66 //
67
68}
69//______________________________________________________________________________
70
f2e1656b 71AliTRDqaElectronSpectra:: AliTRDqaElectronSpectra(const AliTRDqaElectronSpectra & /*trd*/)
917559ee 72 : AliAnalysisTask("",""),
73 fChain(0),
74 fESD(0),
75 fOutputContainer(0),
76 fStatus(0),
77 fSector(0),
78 fTheta(0),
79 fStack(0),
80 fnTracks(0),
81 fnElTracks(0),
82 fTracksRatio(0),
83 fPt(0),
84 fPtElectron(0),
85 fMeanPt(0),
86 fMeanPtElectron(0),
87 fPtStack(0),
88 fPtStackElectron(0),
89 fElectronLQ(0)
90{
91 //
92 // Dummy copy constructor
93 //
94
95 //return *this;
96}
97
98
99//______________________________________________________________________________
100AliTRDqaElectronSpectra::AliTRDqaElectronSpectra(const char *name)
101 : AliAnalysisTask(name,""),
102 fChain(0),
103 fESD(0),
104 fOutputContainer(0),
105 fStatus(0),
106 fSector(0),
107 fTheta(0),
108 fStack(0),
109 fnTracks(0),
110 fnElTracks(0),
111 fTracksRatio(0),
112 fPt(0),
113 fPtElectron(0),
114 fMeanPt(0),
115 fMeanPtElectron(0),
116 fPtStack(0),
117 fPtStackElectron(0),
118 fElectronLQ(0)
119{
120 // Constructor.
121 // Input slot #0 works with an Ntuple
122 DefineInput(0, TChain::Class());
123 // Output slot #0 writes into a TH1 container
124 DefineOutput(0, TObjArray::Class()) ;
125}
126
127//______________________________________________________________________________
128void AliTRDqaElectronSpectra::ConnectInputData(const Option_t *)
129{
130 // Initialisation of branch container and histograms
131
132 //AliInfo(Form("*** Initialization of %s", GetName())) ;
133
134 fChain = (TChain*)GetInputData(0);
135 fESD = new AliESDEvent();
136 fESD->ReadFromTree(fChain);
137}
138
139//________________________________________________________________________
140void AliTRDqaElectronSpectra::CreateOutputObjects()
141{
142 // build histograms
143
144 fStatus = new TH1D("status", ";status bit", 32, -0.5, 31.5);
145 fSector = new TH1D("sector", ";sector", 18, -0.5, 17.5);
146 fTheta = new TH1D("theta", ";theta (rad)", 100, -1, 1);
147 fStack = new TH1D("stack", ";stack", 90, -0.5, 89.5);
148
149 fnTracks = new TH1D("tracks", ";stack;number of tracks", 90, -0.5, 89.5);
150 fnElTracks = new TH1D("elTracks", ";stack;number of electron tracks", 90, -0.5, 89.5);
151 fTracksRatio = new TH1D("fractionElectrons", ";stack;fraction of electron tracks", 90, -0.5, 89.5);
152
153 fPt = new TH1D("pt", "p_{T} (GeV/c)", 50, 0, 10);
154 fPtElectron = new TH1D("ptElectron", "p_{T} (GeV/c)", 50, 0, 10);
155
156 fMeanPt = new TH1D("meanPt", ";<p_{T}> (GeV/c)", 100, 0, 5);
157 fMeanPtElectron = new TH1D("meanPtElectron", ";<P_{T}> (GeV/c)", 100, 0, 5);
158
159 fPtStack = new TH2D("stackPt", ";stack;p_{T} (GeV/c)", 90, -0.5, 89.5, 50, 0, 10);
160 fPtStackElectron = new TH2D("stackPtEl", ";stack;p_{T} (GeV/c)", 90, -0.5, 89.5, 50, 0, 10);
161
162 fElectronLQ = new TH1D("elLQ", ";likelyhood", 100, 0, 1);
163
164 Int_t c = 0;
165 fOutputContainer = new TObjArray(50);
166
167 fOutputContainer->AddAt(fStatus, c++);
168 fOutputContainer->AddAt(fSector, c++);
169 fOutputContainer->AddAt(fTheta, c++);
170 fOutputContainer->AddAt(fStack, c++);
171
172 fOutputContainer->AddAt(fnTracks, c++);
173 fOutputContainer->AddAt(fnElTracks, c++);
174 fOutputContainer->AddAt(fTracksRatio, c++);
175
176 fOutputContainer->AddAt(fPt, c++);
177 fOutputContainer->AddAt(fPtElectron, c++);
178
179 fOutputContainer->AddAt(fMeanPt, c++);
180 fOutputContainer->AddAt(fMeanPtElectron, c++);
181
182 fOutputContainer->AddAt(fPtStack, c++);
183 fOutputContainer->AddAt(fPtStackElectron, c++);
184
185 fOutputContainer->AddAt(fElectronLQ, c++);
186
187 printf("n hist = %d\n", c);
188}
189//______________________________________________________________________________
190void AliTRDqaElectronSpectra::Exec(Option_t *)
191{
192 // Process one event
193 Long64_t entry = fChain->GetReadEntry() ;
8e2f611a 194 if (!(entry%100)) Info("Exec", "Entry = %ld", entry);
917559ee 195
196 // Processing of one event
197
198 if (!fESD) {
199 //AliError("fESD is not connected to the input!") ;
200 return ;
201 }
202
203 Int_t nTracks = fESD->GetNumberOfTracks();
204 //fNTracks->Fill(nTracks);
205
206 // track loop
207 for(Int_t i=0; i<nTracks; i++) {
208
209 //
210 // track selection
211 //
212 // param in and Out
213 // TRDrefit and TRDPid bit
214 //
215
216 AliESDtrack *track = fESD->GetTrack(i);
217 const AliExternalTrackParam *paramOut = track->GetOuterParam();
218 const AliExternalTrackParam *paramIn = track->GetInnerParam();
219
220 // long track ..
221 if (!paramIn) continue;
222 if (!paramOut) continue;
223
224 UInt_t status = track->GetStatus();
225 if (!(status & AliESDtrack::kTRDrefit)) continue;
226 if (!(status & AliESDtrack::kTRDpid)) continue;
ed15ef4f 227 if (track->GetTRDntrackletsPID() < 6) continue;
917559ee 228
229 Int_t sm = AliTRDqaAT::GetSector(paramOut->GetAlpha());
230 Int_t stack = 5*sm + AliTRDqaAT::GetStack(paramOut);
231 Double_t lq = track->GetTRDpid(AliPID::kElectron);
232 Double_t pt = paramOut->Pt();
233
234 //TH1D *fStatus; // track status
235 fSector->Fill(sm);
236 fStack->Fill(stack);
237 fElectronLQ->Fill(lq);
238
239 fTheta->Fill(paramOut->GetZ() / paramOut->GetX());
240
241 fnTracks->Fill(stack);
242 fnElTracks->Fill(stack, lq);
243
244 fPt->Fill(pt);
245 fPtElectron->Fill(pt, lq);
246
247 fPtStack->Fill(stack, pt);
248 fPtStackElectron->Fill(stack, pt, lq);
249 }
250
251 PostData(0, fOutputContainer);
252}
253
254//______________________________________________________________________________
255void AliTRDqaElectronSpectra::Terminate(Option_t *)
256{
257 // save histograms
258 fOutputContainer = (TObjArray*)GetOutputData(0);
259
260 // build ratios
261 fnTracks = (TH1D*)fOutputContainer->FindObject("tracks");
262 fnElTracks = (TH1D*)fOutputContainer->FindObject("elTracks");
263 fTracksRatio = (TH1D*)fOutputContainer->FindObject("fractionElectrons");
264
265 AliTRDqaAT::BuildRatio(fTracksRatio, fnElTracks, fnTracks);
266
267 // save the results
268
269 TFile *file = new TFile("outElSpectra.root", "RECREATE");
270 fOutputContainer->Write();
271
272 file->Flush();
273 file->Close();
274 delete file;
275
276 //for(Int_t i=0; i<fOutputContainer->GetEntries(); i++) {
277 // TObject *obj = fOu
278 // }
279}
280
281//______________________________________________________________________________