3 // The class definition in esdV0.h has been generated automatically
4 // by the ROOT utility TTree::MakeSelector(). This class is derived
5 // from the ROOT class TSelector. For more information on the TSelector
6 // framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.
8 // The following methods are defined in this file:
9 // Begin(): called everytime a loop on the tree starts,
10 // a convenient place to create your histograms.
11 // SlaveBegin(): called after Begin(), when on PROOF called only on the
13 // Process(): called for each event, in this function you decide what
14 // to read and fill your histograms.
15 // SlaveTerminate: called at the end of the loop on the tree, when on PROOF
16 // called only on the slave servers.
17 // Terminate(): called at the end of the loop on the tree,
18 // a convenient place to draw/fit your histograms.
20 // To use this file, try the following session on your Tree T:
22 // Root > T->Process("AliSelector.C")
23 // Root > T->Process("AliSelector.C","some options")
24 // Root > T->Process("AliSelector.C+")
27 #include "AliSelector.h"
34 #include <TFriendElement.h>
38 #include <TTimeStamp.h>
45 AliSelector::AliSelector() :
53 // Constructor. Initialization of pointers
57 AliSelector::~AliSelector()
64 fTree->ResetBranchAddresses();
73 void AliSelector::CheckOptions()
75 // checks the option string for the debug flag
77 AliLog::SetClassDebugLevel(ClassName(), AliLog::kInfo);
79 TString option = GetOption();
81 if (option.Contains("debug"))
83 printf("Enabling debug more for %s\n", ClassName());
84 AliLog::SetClassDebugLevel(ClassName(), AliLog::kDebug);
85 AliInfo(Form("Called with option %s.", option.Data()));
89 void AliSelector::Begin(TTree*)
91 // The Begin() function is called at the start of the query.
92 // When running with PROOF Begin() is only called on the client.
93 // The tree argument is deprecated (on PROOF 0 is passed).
97 AliDebug(AliLog::kDebug, "============BEGIN===========");
100 void AliSelector::SlaveBegin(TTree* tree)
102 // The SlaveBegin() function is called after the Begin() function.
103 // When running with PROOF SlaveBegin() is called on each slave server.
104 // The tree argument is deprecated (on PROOF 0 is passed).
108 AliDebug(AliLog::kDebug, "=======SLAVEBEGIN========");
109 AliDebug(AliLog::kDebug, Form("Hostname: %s", gSystem->HostName()));
110 AliDebug(AliLog::kDebug, Form("Time: %s", gSystem->Now().AsString()));
116 void AliSelector::Init(TTree *tree)
118 // The Init() function is called when the selector needs to initialize
119 // a new tree or chain. Typically here the branch addresses of the tree
120 // will be set. It is normaly not necessary to make changes to the
121 // generated code, but the routine can be extended by the user if needed.
122 // Init() will be called many times when running with PROOF.
124 AliDebug(AliLog::kDebug, "=========Init==========");
130 AliDebug(AliLog::kError, "ERROR: tree argument is 0.");
134 // Set branch address
135 fTree->SetBranchAddress("ESD", &fESD);
137 AliDebug(AliLog::kInfo, "INFO: Found ESD branch in chain.");
140 Bool_t AliSelector::Notify()
142 // The Notify() function is called when a new file is opened. This
143 // can be either for a new TTree in a TChain or when when a new TTree
144 // is started when using PROOF. Typically here the branch pointers
145 // will be retrieved. It is normaly not necessary to make changes
146 // to the generated code, but the routine can be extended by the
149 AliDebug(AliLog::kDebug, "=========NOTIFY==========");
150 AliDebug(AliLog::kDebug, Form("Hostname: %s", gSystem->HostName()));
151 AliDebug(AliLog::kDebug, Form("Time: %s", TTimeStamp(time(0)).AsString()));
156 TFile *f = fTree->GetCurrentFile();
157 AliDebug(AliLog::kInfo, Form("Processing %d. file %s", fCountFiles, f->GetName()));
161 AliDebug(AliLog::kError, "fTree not available");
164 DeleteKinematicsFile();
169 Bool_t AliSelector::Process(Long64_t entry)
171 // The Process() function is called for each entry in the tree (or possibly
172 // keyed object in the case of PROOF) to be processed. The entry argument
173 // specifies which entry in the currently loaded tree is to be processed.
174 // It can be passed to either TTree::GetEntry() or TBranch::GetEntry()
175 // to read either all or the required parts of the data. When processing
176 // keyed objects with PROOF, the object is already loaded and is available
177 // via the fObject pointer.
179 // This function should contain the "body" of the analysis. It can contain
180 // simple or elaborate selection criteria, run algorithms on the data
181 // of the event and typically fill histograms.
183 // WARNING when a selector is used with a TChain, you must use
184 // the pointer to the current TTree to call GetEntry(entry).
185 // The entry is always the local entry number in the current tree.
186 // Assuming that fTree is the pointer to the TChain being processed,
187 // use fTree->GetTree()->GetEntry(entry).
189 AliDebug(AliLog::kDebug, Form("=========PROCESS========== Entry %lld", entry));
193 AliDebug(AliLog::kError, "ERROR: fTree is 0.");
197 fTree->GetTree()->GetEntry(entry);
200 AliDebug(AliLog::kDebug, Form("ESD: We have %d tracks.", fESD->GetNumberOfTracks()));
205 void AliSelector::SlaveTerminate()
207 // The SlaveTerminate() function is called after all entries or objects
208 // have been processed. When running with PROOF SlaveTerminate() is called
209 // on each slave server.
211 AliDebug(AliLog::kDebug, "=======SLAVETERMINATE=======");
213 DeleteKinematicsFile();
216 void AliSelector::Terminate()
218 // The Terminate() function is the last function to be called during
219 // a query. It always runs on the client, it can be used to present
220 // the results graphically or save the results to file.
222 AliDebug(AliLog::kDebug, "=========TERMINATE==========");
225 TTree* AliSelector::GetKinematics()
227 // Returns kinematics tree corresponding to current ESD active in fTree
228 // Loads the kinematics from the kinematics file, the file is identified by replacing "AliESDs" to
229 // "Kinematics" in the file path of the ESD file. This is a hack, to be changed!
233 if (!fTree->GetCurrentFile())
236 TString fileName(fTree->GetCurrentFile()->GetName());
237 fileName.ReplaceAll("AliESDs", "Kinematics");
239 AliDebug(AliLog::kInfo, Form("Opening %s", fileName.Data()));
241 fKineFile = TFile::Open(fileName);
246 return dynamic_cast<TTree*> (fKineFile->Get(Form("Event%d/TreeK", fTree->GetTree()->GetReadEntry())));
249 void AliSelector::DeleteKinematicsFile()
252 // Closes the kinematics file and deletes the pointer.