Number of sigma pedestal cut increased to 4
[u/mrichter/AliRoot.git] / STEER / AliSelector.cxx
CommitLineData
a03b623a 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$ */
17
18// Selector base class for analysis based on ESD
19// Please derive your selector-based analysis from this class, if you just want to use
20// information from the ESD.
21//
22// The ESD is available as member fESD
23//
24// The following methods can be overrriden. Please do not forgot to call the base class function.
25//
26// Begin(): called everytime a loop on the tree starts,
27// a convenient place to create your histograms.
28// SlaveBegin(): called after Begin(), when on PROOF called only on the
29// slave servers.
30// Init(): called for each new tree. Enable/Disable branches here.
31// Process(): called for each event, in this function you decide what
32// to read and fill your histograms.
33// SlaveTerminate: called at the end of the loop on the tree, when on PROOF
34// called only on the slave servers.
35// Terminate(): called at the end of the loop on the tree,
36// a convenient place to draw/fit your histograms.
37//
38// Author: Jan.Fiete.Grosse-Oetringhaus@cern.ch
39
40#include "AliSelector.h"
41
42#include <TStyle.h>
43#include <TSystem.h>
44#include <TCanvas.h>
45#include <TRegexp.h>
46#include <TTime.h>
47#include <TFriendElement.h>
48#include <TTree.h>
49#include <TChain.h>
50#include <TFile.h>
51#include <TTimeStamp.h>
52
7c2f14a7 53#include "AliLog.h"
54#include "AliESD.h"
a03b623a 55
56ClassImp(AliSelector)
57
58AliSelector::AliSelector() :
59 TSelector(),
60 fTree(0),
61 fESD(0),
62 fCountFiles(0)
63{
64 //
65 // Constructor. Initialization of pointers
66 //
67}
68
69AliSelector::~AliSelector()
70{
71 //
72 // Destructor
73 //
74
75 if (fTree)
76 fTree->ResetBranchAddresses();
77
78 if (fESD)
79 {
80 delete fESD;
81 fESD = 0;
82 }
83}
84
85void AliSelector::CheckOptions()
86{
87 // checks the option string for the debug flag
88
89 AliLog::SetClassDebugLevel(ClassName(), AliLog::kInfo);
90
91 TString option = GetOption();
92
93 if (option.Contains("moredebug"))
94 {
95 printf("Enabling verbose debug mode for %s\n", ClassName());
96 AliLog::SetClassDebugLevel(ClassName(), AliLog::kDebug+1);
97 AliInfo(Form("Called with option %s.", option.Data()));
98 }
99 else if (option.Contains("debug"))
100 {
101 printf("Enabling debug mode for %s\n", ClassName());
102 AliLog::SetClassDebugLevel(ClassName(), AliLog::kDebug);
103 AliInfo(Form("Called with option %s.", option.Data()));
104 }
105}
106
107void AliSelector::Begin(TTree*)
108{
109 // The Begin() function is called at the start of the query.
110 // When running with PROOF Begin() is only called on the client.
111 // The tree argument is deprecated (on PROOF 0 is passed).
112
113 CheckOptions();
114
115 AliDebug(AliLog::kDebug, "============BEGIN===========");
116}
117
118void AliSelector::SlaveBegin(TTree* tree)
119{
120 // The SlaveBegin() function is called after the Begin() function.
121 // When running with PROOF SlaveBegin() is called on each slave server.
122 // The tree argument is deprecated (on PROOF 0 is passed).
123
124 CheckOptions();
125
126 AliDebug(AliLog::kDebug, "=======SLAVEBEGIN========");
127 AliDebug(AliLog::kDebug, Form("Hostname: %s", gSystem->HostName()));
128 AliDebug(AliLog::kDebug, Form("Time: %s", gSystem->Now().AsString()));
129
130 if (tree != 0)
131 Init(tree);
132}
133
134void AliSelector::Init(TTree *tree)
135{
136 // The Init() function is called when the selector needs to initialize
137 // a new tree or chain. Typically here the branch addresses of the tree
138 // will be set. It is normaly not necessary to make changes to the
139 // generated code, but the routine can be extended by the user if needed.
140 // Init() will be called many times when running with PROOF.
141
142 AliDebug(AliLog::kDebug, "=========Init==========");
143
144 fTree = tree;
145
146 if (fTree == 0)
147 {
148 AliDebug(AliLog::kError, "ERROR: tree argument is 0.");
149 return;
150 }
151
152 // Set branch address
153 fTree->SetBranchAddress("ESD", &fESD);
154 if (fESD != 0)
155 AliDebug(AliLog::kInfo, "INFO: Found ESD branch in chain.");
156}
157
158Bool_t AliSelector::Notify()
159{
160 // The Notify() function is called when a new file is opened. This
161 // can be either for a new TTree in a TChain or when when a new TTree
162 // is started when using PROOF. Typically here the branch pointers
163 // will be retrieved. It is normaly not necessary to make changes
164 // to the generated code, but the routine can be extended by the
165 // user if needed.
166
167 AliDebug(AliLog::kDebug, "=========NOTIFY==========");
168 AliDebug(AliLog::kDebug, Form("Hostname: %s", gSystem->HostName()));
169 AliDebug(AliLog::kDebug, Form("Time: %s", TTimeStamp(time(0)).AsString()));
170
171 ++fCountFiles;
172 if (fTree)
173 {
174 TFile *f = fTree->GetCurrentFile();
9c61b6db 175 if (f)
176 {
177 AliDebug(AliLog::kInfo, Form("Processing %d. file %s", fCountFiles, f->GetName()));
178 }
179 else
180 AliDebug(AliLog::kError, "fTree->GetCurrentFile() is 0");
a03b623a 181 }
182 else
183 {
184 AliDebug(AliLog::kError, "fTree not available");
185 }
186
187 return kTRUE;
188}
189
190Bool_t AliSelector::Process(Long64_t entry)
191{
192 // The Process() function is called for each entry in the tree (or possibly
193 // keyed object in the case of PROOF) to be processed. The entry argument
194 // specifies which entry in the currently loaded tree is to be processed.
195 // It can be passed to either TTree::GetEntry() or TBranch::GetEntry()
196 // to read either all or the required parts of the data. When processing
197 // keyed objects with PROOF, the object is already loaded and is available
198 // via the fObject pointer.
199 //
200 // This function should contain the "body" of the analysis. It can contain
201 // simple or elaborate selection criteria, run algorithms on the data
202 // of the event and typically fill histograms.
203
204 // WARNING when a selector is used with a TChain, you must use
205 // the pointer to the current TTree to call GetEntry(entry).
206 // The entry is always the local entry number in the current tree.
207 // Assuming that fTree is the pointer to the TChain being processed,
208 // use fTree->GetTree()->GetEntry(entry).
209
210 AliDebug(AliLog::kDebug, Form("=========PROCESS========== Entry %lld", entry));
211
212 if (!fTree)
213 {
214 AliDebug(AliLog::kError, "ERROR: fTree is 0.");
215 return kFALSE;
216 }
217
218 fTree->GetTree()->GetEntry(entry);
219
220 if (fESD)
221 AliDebug(AliLog::kDebug, Form("ESD: We have %d tracks.", fESD->GetNumberOfTracks()));
222
223 return kTRUE;
224}
225
226void AliSelector::SlaveTerminate()
227{
228 // The SlaveTerminate() function is called after all entries or objects
229 // have been processed. When running with PROOF SlaveTerminate() is called
230 // on each slave server.
231
232 AliDebug(AliLog::kDebug, "=======SLAVETERMINATE=======");
233}
234
235void AliSelector::Terminate()
236{
237 // The Terminate() function is the last function to be called during
238 // a query. It always runs on the client, it can be used to present
239 // the results graphically or save the results to file.
240
241 AliDebug(AliLog::kDebug, "=========TERMINATE==========");
242}