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"
41 #include "AliESDEvent.h"
42 #include "AliESDtrack.h"
44 //______________________________________________________________________________
46 AliTRDqaElectronSpectra::AliTRDqaElectronSpectra()
47 : AliAnalysisTask("",""),
67 // default dummy constructor
71 //______________________________________________________________________________
73 AliTRDqaElectronSpectra:: AliTRDqaElectronSpectra(AliTRDqaElectronSpectra& /*trd*/)
74 : AliAnalysisTask("",""),
94 // Dummy copy constructor
101 //______________________________________________________________________________
102 AliTRDqaElectronSpectra::AliTRDqaElectronSpectra(const char *name)
103 : AliAnalysisTask(name,""),
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()) ;
129 //______________________________________________________________________________
130 void AliTRDqaElectronSpectra::ConnectInputData(const Option_t *)
132 // Initialisation of branch container and histograms
134 //AliInfo(Form("*** Initialization of %s", GetName())) ;
136 fChain = (TChain*)GetInputData(0);
137 fESD = new AliESDEvent();
138 fESD->ReadFromTree(fChain);
141 //________________________________________________________________________
142 void AliTRDqaElectronSpectra::CreateOutputObjects()
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);
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);
155 fPt = new TH1D("pt", "p_{T} (GeV/c)", 50, 0, 10);
156 fPtElectron = new TH1D("ptElectron", "p_{T} (GeV/c)", 50, 0, 10);
158 fMeanPt = new TH1D("meanPt", ";<p_{T}> (GeV/c)", 100, 0, 5);
159 fMeanPtElectron = new TH1D("meanPtElectron", ";<P_{T}> (GeV/c)", 100, 0, 5);
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);
164 fElectronLQ = new TH1D("elLQ", ";likelyhood", 100, 0, 1);
167 fOutputContainer = new TObjArray(50);
169 fOutputContainer->AddAt(fStatus, c++);
170 fOutputContainer->AddAt(fSector, c++);
171 fOutputContainer->AddAt(fTheta, c++);
172 fOutputContainer->AddAt(fStack, c++);
174 fOutputContainer->AddAt(fnTracks, c++);
175 fOutputContainer->AddAt(fnElTracks, c++);
176 fOutputContainer->AddAt(fTracksRatio, c++);
178 fOutputContainer->AddAt(fPt, c++);
179 fOutputContainer->AddAt(fPtElectron, c++);
181 fOutputContainer->AddAt(fMeanPt, c++);
182 fOutputContainer->AddAt(fMeanPtElectron, c++);
184 fOutputContainer->AddAt(fPtStack, c++);
185 fOutputContainer->AddAt(fPtStackElectron, c++);
187 fOutputContainer->AddAt(fElectronLQ, c++);
189 printf("n hist = %d\n", c);
191 //______________________________________________________________________________
192 void AliTRDqaElectronSpectra::Exec(Option_t *)
195 Long64_t entry = fChain->GetReadEntry() ;
196 if (!(entry%100)) Info("Exec", "Entry = %ld", entry);
198 // Processing of one event
201 //AliError("fESD is not connected to the input!") ;
205 Int_t nTracks = fESD->GetNumberOfTracks();
206 //fNTracks->Fill(nTracks);
209 for(Int_t i=0; i<nTracks; i++) {
215 // TRDrefit and TRDPid bit
218 AliESDtrack *track = fESD->GetTrack(i);
219 const AliExternalTrackParam *paramOut = track->GetOuterParam();
220 const AliExternalTrackParam *paramIn = track->GetInnerParam();
223 if (!paramIn) continue;
224 if (!paramOut) continue;
226 UInt_t status = track->GetStatus();
227 if (!(status & AliESDtrack::kTRDrefit)) continue;
228 if (!(status & AliESDtrack::kTRDpid)) continue;
229 if (track->GetTRDntrackletsPID() < 6) continue;
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();
236 //TH1D *fStatus; // track status
239 fElectronLQ->Fill(lq);
241 fTheta->Fill(paramOut->GetZ() / paramOut->GetX());
243 fnTracks->Fill(stack);
244 fnElTracks->Fill(stack, lq);
247 fPtElectron->Fill(pt, lq);
249 fPtStack->Fill(stack, pt);
250 fPtStackElectron->Fill(stack, pt, lq);
253 PostData(0, fOutputContainer);
256 //______________________________________________________________________________
257 void AliTRDqaElectronSpectra::Terminate(Option_t *)
260 fOutputContainer = (TObjArray*)GetOutputData(0);
263 fnTracks = (TH1D*)fOutputContainer->FindObject("tracks");
264 fnElTracks = (TH1D*)fOutputContainer->FindObject("elTracks");
265 fTracksRatio = (TH1D*)fOutputContainer->FindObject("fractionElectrons");
267 AliTRDqaAT::BuildRatio(fTracksRatio, fnElTracks, fnTracks);
271 TFile *file = new TFile("outElSpectra.root", "RECREATE");
272 fOutputContainer->Write();
278 //for(Int_t i=0; i<fOutputContainer->GetEntries(); i++) {
279 // TObject *obj = fOu
283 //______________________________________________________________________________