]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx
update from pr task : sjena
[u/mrichter/AliRoot.git] / TRD / qaAnalysis / AliTRDqaElectronSpectra.cxx
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 "TH1D.h"
35 #include "TH2D.h"
36 #include "TFile.h"
37 #include "TChain.h"
38
39 #include "AliESDEvent.h"
40 #include "AliESDtrack.h"
41
42 //______________________________________________________________________________
43
44 AliTRDqaElectronSpectra::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
71 AliTRDqaElectronSpectra:: AliTRDqaElectronSpectra(const AliTRDqaElectronSpectra & /*trd*/)
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 //______________________________________________________________________________
100 AliTRDqaElectronSpectra::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 //______________________________________________________________________________
128 void 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 //________________________________________________________________________
140 void 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 //______________________________________________________________________________
190 void AliTRDqaElectronSpectra::Exec(Option_t *) 
191 {
192   // Process one event
193   Long64_t entry = fChain->GetReadEntry() ;
194   if (!(entry%100)) Info("Exec", "Entry = %lld", entry);
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;
227     if (track->GetTRDntrackletsPID() < 6) continue;
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 //______________________________________________________________________________
255 void 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 //______________________________________________________________________________