]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/AliAnalysisSelector.cxx
From Alex: updated and new macros for TRD.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisSelector.cxx
CommitLineData
c52c2132 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// Author: Andrei Gheata, 31/05/2006
18
19//==============================================================================
20// AliAnalysisSelector - A transparent selector to be created by
21// AliAnalysisManager to handle analysis.
22//==============================================================================
23
c2e40c93 24#include <Riostream.h>
25#include <TProcessID.h>
c52c2132 26
27#include "AliAnalysisManager.h"
28#include "AliAnalysisTask.h"
29#include "AliAnalysisDataContainer.h"
30#include "AliAnalysisSelector.h"
31
32ClassImp(AliAnalysisSelector)
33
34//______________________________________________________________________________
35AliAnalysisSelector::AliAnalysisSelector(AliAnalysisManager *mgr)
36 :TSelector(),
37 fInitialized(kFALSE),
38 fAnalysis(mgr)
39{
40// Constructor. Called by AliAnalysisManager which registers itself on the
41// selector running on the master.
42}
43
44//______________________________________________________________________________
45AliAnalysisSelector::~AliAnalysisSelector()
46{
47// Dtor. The analysis manager object is sent in the input list and duplicated
48// on the workers - it needs to be deleted (?)
49// if (fAnalysis) delete fAnalysis;
50}
51
52//______________________________________________________________________________
53void AliAnalysisSelector::Init(TTree *tree)
54{
55// Called after Begin/SlaveBegin, assumes that fAnalysis is already initialized.
56// Is Init called on workers in case of PROOF.
57 if (!fAnalysis) {
58 Error("Init", "Analysis manager NULL !");
59 return;
60 }
981f2614 61 if (fAnalysis->GetDebugLevel()>1) {
62 cout << "->AliAnalysisSelector->Init()" << endl;
63 }
c52c2132 64 if (!tree) {
65 Error("Init", "Input tree is NULL !");
66 return;
67 }
68 fAnalysis->Init(tree);
69 fInitialized = kTRUE;
981f2614 70 if (fAnalysis->GetDebugLevel()>1) {
71 cout << "<-AliAnalysisSelector->Init()" << endl;
72 }
c52c2132 73}
74
75//______________________________________________________________________________
76void AliAnalysisSelector::Begin(TTree *)
77{
78// Assembly the input list.
79 RestoreAnalysisManager();
981f2614 80 if (fAnalysis && fAnalysis->GetDebugLevel()>1) {
36e82a52 81 cout << "->AliAnalysisSelector->Begin: Analysis manager restored" << endl;
82 }
c52c2132 83}
84
85//______________________________________________________________________________
86void AliAnalysisSelector::SlaveBegin(TTree *tree)
87{
88// Called on each worker. We "unpack" analysis manager here and call InitAnalysis.
89 RestoreAnalysisManager();
981f2614 90 if (fAnalysis) {
91 if (fAnalysis->GetDebugLevel()>1) {
92 cout << "->AliAnalysisSelector->SlaveBegin() after Restore" << endl;
93 }
94 fAnalysis->SlaveBegin(tree);
95 if (fAnalysis->GetDebugLevel()>1) {
96 cout << "<-AliAnalysisSelector->SlaveBegin()" << endl;
97 }
98 }
36e82a52 99}
c52c2132 100
981f2614 101//______________________________________________________________________________
102Bool_t AliAnalysisSelector::Notify()
103{
104 // The Notify() function is called when a new file is opened. This
105 // can be either for a new TTree in a TChain or when when a new TTree
106 // is started when using PROOF. It is normaly not necessary to make changes
107 // to the generated code, but the routine can be extended by the
108 // user if needed. The return value is currently not used.
d8a5ee94 109 if (fAnalysis) return fAnalysis->Notify();
110 return kFALSE;
36e82a52 111}
981f2614 112
c52c2132 113//______________________________________________________________________________
114Bool_t AliAnalysisSelector::Process(Long64_t entry)
115{
116// Event loop.
117 if (fAnalysis->GetDebugLevel() >1 ) {
981f2614 118 cout << "->AliAnalysisSelector::Process()" << endl;
36e82a52 119 }
c2e40c93 120 Int_t nobjCount = TProcessID::GetObjectCount();
36e82a52 121 fAnalysis->GetEntry(entry);
c52c2132 122 fAnalysis->ExecAnalysis();
c2e40c93 123 TProcessID::SetObjectCount(nobjCount);
981f2614 124 if (fAnalysis->GetDebugLevel() >1 ) {
125 cout << "<-AliAnalysisSelector::Process()" << endl;
126 }
c52c2132 127 return kTRUE;
128}
129
130//______________________________________________________________________________
131void AliAnalysisSelector::RestoreAnalysisManager()
132{
133// Restores analysis manager from the input list.
134 if (!fAnalysis) {
135 TIter next(fInput);
136 TObject *obj;
137 while ((obj=next())) {
138 if (obj->IsA() == AliAnalysisManager::Class()) {
139 fAnalysis = (AliAnalysisManager*)obj;
981f2614 140 if (fAnalysis->GetDebugLevel()>1) {
141 cout << "->AliAnalysisSelector->RestoreAnalysisManager: Analysis manager restored" << endl;
142 }
c52c2132 143 break;
144 }
145 }
146 if (!fAnalysis) {
147 Error("SlaveBegin", "Analysis manager not found in the input list");
148 return;
149 }
150 }
151}
152
153//______________________________________________________________________________
154void AliAnalysisSelector::SlaveTerminate()
155{
156 // The SlaveTerminate() function is called after all entries or objects
157 // have been processed. When running with PROOF SlaveTerminate() is called
158 // on each slave server.
159 if (fAnalysis->GetDebugLevel() >1 ) {
981f2614 160 cout << "->AliAnalysisSelector::SlaveTerminate()" << endl;
c52c2132 161 }
162 fAnalysis->PackOutput(fOutput);
981f2614 163 if (fAnalysis->GetDebugLevel() >1 ) {
164 cout << "<-AliAnalysisSelector::SlaveTerminate()" << endl;
165 }
c52c2132 166}
167
168//______________________________________________________________________________
169void AliAnalysisSelector::Terminate()
170{
171 // The Terminate() function is the last function to be called during
172 // a query. It always runs on the client, it can be used to present
173 // the results graphically or save the results to file.
174 if (!fAnalysis) {
36e82a52 175 Error("Terminate","AliAnalysisSelector::Terminate: No analysis manager!!!");
c52c2132 176 return;
177 }
178 if (fAnalysis->GetDebugLevel() >1 ) {
981f2614 179 cout << "->AliAnalysisSelector::Terminate()" << endl;
c52c2132 180 }
181 fAnalysis->UnpackOutput(fOutput);
182 fAnalysis->Terminate();
981f2614 183 if (fAnalysis->GetDebugLevel() >1 ) {
184 cout << "<-AliAnalysisSelector::Terminate()" << endl;
185 }
c52c2132 186}