1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /* $Id: AliTRDqaElectronSpectra.cxx $ */
19 // This class is a part of a package of high level QA monitoring for TRD.
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
27 // radomski@physi.uni-heidelberg.de
31 #include "AliTRDqaElectronSpectra.h"
32 #include "AliTRDqaAT.h"
39 #include "AliESDEvent.h"
40 #include "AliESDtrack.h"
42 //______________________________________________________________________________
44 AliTRDqaElectronSpectra::AliTRDqaElectronSpectra()
45 : AliAnalysisTask("",""),
65 // default dummy constructor
69 //______________________________________________________________________________
71 AliTRDqaElectronSpectra:: AliTRDqaElectronSpectra(const AliTRDqaElectronSpectra & /*trd*/)
72 : AliAnalysisTask("",""),
92 // Dummy copy constructor
99 //______________________________________________________________________________
100 AliTRDqaElectronSpectra::AliTRDqaElectronSpectra(const char *name)
101 : AliAnalysisTask(name,""),
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()) ;
127 //______________________________________________________________________________
128 void AliTRDqaElectronSpectra::ConnectInputData(const Option_t *)
130 // Initialisation of branch container and histograms
132 //AliInfo(Form("*** Initialization of %s", GetName())) ;
134 fChain = (TChain*)GetInputData(0);
135 fESD = new AliESDEvent();
136 fESD->ReadFromTree(fChain);
139 //________________________________________________________________________
140 void AliTRDqaElectronSpectra::CreateOutputObjects()
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);
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);
153 fPt = new TH1D("pt", "p_{T} (GeV/c)", 50, 0, 10);
154 fPtElectron = new TH1D("ptElectron", "p_{T} (GeV/c)", 50, 0, 10);
156 fMeanPt = new TH1D("meanPt", ";<p_{T}> (GeV/c)", 100, 0, 5);
157 fMeanPtElectron = new TH1D("meanPtElectron", ";<P_{T}> (GeV/c)", 100, 0, 5);
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);
162 fElectronLQ = new TH1D("elLQ", ";likelyhood", 100, 0, 1);
165 fOutputContainer = new TObjArray(50);
167 fOutputContainer->AddAt(fStatus, c++);
168 fOutputContainer->AddAt(fSector, c++);
169 fOutputContainer->AddAt(fTheta, c++);
170 fOutputContainer->AddAt(fStack, c++);
172 fOutputContainer->AddAt(fnTracks, c++);
173 fOutputContainer->AddAt(fnElTracks, c++);
174 fOutputContainer->AddAt(fTracksRatio, c++);
176 fOutputContainer->AddAt(fPt, c++);
177 fOutputContainer->AddAt(fPtElectron, c++);
179 fOutputContainer->AddAt(fMeanPt, c++);
180 fOutputContainer->AddAt(fMeanPtElectron, c++);
182 fOutputContainer->AddAt(fPtStack, c++);
183 fOutputContainer->AddAt(fPtStackElectron, c++);
185 fOutputContainer->AddAt(fElectronLQ, c++);
187 printf("n hist = %d\n", c);
189 //______________________________________________________________________________
190 void AliTRDqaElectronSpectra::Exec(Option_t *)
193 Long64_t entry = fChain->GetReadEntry() ;
194 if (!(entry%100)) Info("Exec", "Entry = %lld", entry);
196 // Processing of one event
199 //AliError("fESD is not connected to the input!") ;
203 Int_t nTracks = fESD->GetNumberOfTracks();
204 //fNTracks->Fill(nTracks);
207 for(Int_t i=0; i<nTracks; i++) {
213 // TRDrefit and TRDPid bit
216 AliESDtrack *track = fESD->GetTrack(i);
217 const AliExternalTrackParam *paramOut = track->GetOuterParam();
218 const AliExternalTrackParam *paramIn = track->GetInnerParam();
221 if (!paramIn) continue;
222 if (!paramOut) continue;
224 UInt_t status = track->GetStatus();
225 if (!(status & AliESDtrack::kTRDrefit)) continue;
226 if (!(status & AliESDtrack::kTRDpid)) continue;
227 if (track->GetTRDntrackletsPID() < 6) continue;
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();
234 //TH1D *fStatus; // track status
237 fElectronLQ->Fill(lq);
239 fTheta->Fill(paramOut->GetZ() / paramOut->GetX());
241 fnTracks->Fill(stack);
242 fnElTracks->Fill(stack, lq);
245 fPtElectron->Fill(pt, lq);
247 fPtStack->Fill(stack, pt);
248 fPtStackElectron->Fill(stack, pt, lq);
251 PostData(0, fOutputContainer);
254 //______________________________________________________________________________
255 void AliTRDqaElectronSpectra::Terminate(Option_t *)
258 fOutputContainer = (TObjArray*)GetOutputData(0);
261 fnTracks = (TH1D*)fOutputContainer->FindObject("tracks");
262 fnElTracks = (TH1D*)fOutputContainer->FindObject("elTracks");
263 fTracksRatio = (TH1D*)fOutputContainer->FindObject("fractionElectrons");
265 AliTRDqaAT::BuildRatio(fTracksRatio, fnElTracks, fnTracks);
269 TFile *file = new TFile("outElSpectra.root", "RECREATE");
270 fOutputContainer->Write();
276 //for(Int_t i=0; i<fOutputContainer->GetEntries(); i++) {
277 // TObject *obj = fOu
281 //______________________________________________________________________________