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