end-of-line normalization
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskFilter.cxx
CommitLineData
6d3a7bbf 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//////////////////////////////////////////////////////////////////////////
19//
20// Base class for filtering friends
21//
22//////////////////////////////////////////////////////////////////////////
23
24#include <TChain.h>
25#include <TFile.h>
26#include <TList.h>
27
28#include "AliAnalysisTaskFilter.h"
29#include "AliAnalysisManager.h"
30#include "AliAnalysisDataSlot.h"
31#include "AliESDEvent.h"
32#include "AliESD.h"
33#include "AliVEvent.h"
34#include "AliESDHandler.h"
35#include "AliInputEventHandler.h"
36#include "AliLog.h"
37#include "AliESDfriend.h"
38#include "AliESDfriendTrack.h"
39
40
41ClassImp(AliAnalysisTaskFilter)
42
43////////////////////////////////////////////////////////////////////////
44
45AliAnalysisTaskFilter::AliAnalysisTaskFilter():
46 AliAnalysisTask(),
47 fDebug(0),
48 fEntry(0),
49 fInputEvent(0x0),
50 fInputHandler(0x0),
6d3a7bbf 51 fOutputESDfriend(0x0),
3e341ccb 52 fTreeEF(0x0),
53 fInputESDfriend(0x0)
6d3a7bbf 54{
55 //
56 // Default constructor
57 //
58}
59
60//______________________________________________________________________
61
62AliAnalysisTaskFilter::AliAnalysisTaskFilter(const char* name):
63 AliAnalysisTask(name, "AnalysisTaskFilter"),
64 fDebug(0),
65 fEntry(0),
66 fInputEvent(0x0),
67 fInputHandler(0x0),
6d3a7bbf 68 fOutputESDfriend(0x0),
3e341ccb 69 fTreeEF(0x0),
70 fInputESDfriend(0x0)
6d3a7bbf 71{
72 //
73 // Default constructor
74 //
75
76 DefineInput (0, TChain::Class());
77 DefineOutput(0, TTree::Class());
78}
79
80//______________________________________________________________________
81
82AliAnalysisTaskFilter::AliAnalysisTaskFilter(const AliAnalysisTaskFilter& obj):
83 AliAnalysisTask(obj),
84 fDebug(0),
85 fEntry(0),
86 fInputEvent(0x0),
87 fInputHandler(0x0),
6d3a7bbf 88 fOutputESDfriend(0x0),
3e341ccb 89 fTreeEF(0x0),
90 fInputESDfriend(0x0)
6d3a7bbf 91{
92 //
93 // Copy constructor
94 //
95
96 fDebug = obj.fDebug;
97 fEntry = obj.fEntry;
98 fInputEvent = obj.fInputEvent;
99 fInputHandler = obj.fInputHandler;
6d3a7bbf 100 fOutputESDfriend = obj.fOutputESDfriend;
03a8000a 101 fTreeEF = obj.fTreeEF;
3e341ccb 102 fInputESDfriend = obj.fInputESDfriend;
6d3a7bbf 103}
104
105
106//______________________________________________________________________
107
108AliAnalysisTaskFilter& AliAnalysisTaskFilter::operator=(const AliAnalysisTaskFilter& other)
109{
110 //
111 // Assignment
112 //
113
9702ce91 114 if (&other != this) {
115 AliAnalysisTask::operator=(other);
116 fDebug = other.fDebug;
117 fEntry = other.fEntry;
118 fInputEvent = other.fInputEvent;
119 fInputHandler = other.fInputHandler;
120 fOutputESDfriend = other.fOutputESDfriend;
121 fTreeEF = other.fTreeEF;
122 fInputESDfriend = other.fInputESDfriend;
123 }
6d3a7bbf 124 return *this;
125}
126
127
128//______________________________________________________________________
129
130void AliAnalysisTaskFilter::ConnectInputData(Option_t* /*option*/)
131{
132 //
133 // Connect the input data
134 //
135
136 if (fDebug > 1) printf("AnalysisTaskFilter::ConnectInputData() \n");
137 fInputHandler = (AliInputEventHandler*)
138 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
139 if (fInputHandler) {
140 fInputEvent = fInputHandler->GetEvent();
3e341ccb 141 if (fInputEvent){
142 fInputESDfriend = (AliESDfriend*)(fInputEvent->FindListObject("AliESDfriend"));
143 if (!fInputESDfriend){
144 AliError("No friend found");
145 }
146 }
147 else {
148 AliError("No Input Event found, the friend will remain empty");
149 }
150 }
151 else {
6d3a7bbf 152 AliError("No Input Event Handler connected") ;
153 return ;
154 }
155}
156
157//______________________________________________________________________
158
159void AliAnalysisTaskFilter::CreateOutputObjects()
160{
161 //
162 // Create the output container
163 //
164
165 if (fDebug > 1) printf("AnalysisTaskFilter::CreateOutPutData() \n");
166
167 AliESDHandler* handler = (AliESDHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
168
169 if (handler) {
03a8000a 170 fTreeEF = handler->GetTree();
6d3a7bbf 171 }
172 else {
173 AliWarning("No AOD Event Handler connected.") ;
174 }
175
176 UserCreateOutputObjects();
177}
178
179//______________________________________________________________________
180
181void AliAnalysisTaskFilter::Exec(Option_t* option)
182{
183 //
184 // Exec analysis of one event
185 //
186
187 if (fDebug > 1) AliInfo("AliAnalysisTaskFilter::Exec() \n");
188
189 if( fInputHandler ) {
190 fEntry = fInputHandler->GetReadEntry();
191 }
192
193
194 if ( !((Entry()-1)%100) && fDebug > 0) {
195 AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry()));
196 }
197 AliESDHandler* handler = (AliESDHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
198
199 if (UserSelectESDfriendForCurrentEvent()){
200 // Call the user analysis only if the event was selected
3e341ccb 201 handler->SelectEventForFriends();
6d3a7bbf 202 fOutputESDfriend = handler->GetESDfriend();
203 UserExec(option);
3e341ccb 204 // copy the VZERO friend only if it is not already there
205 if (fOutputESDfriend->GetVZEROfriend() == 0x0){
206 AliDebug(2,"Copying VZERO friend object");
207 AliESDVZEROfriend* vZEROfriend = fInputESDfriend->GetVZEROfriend();
208 fOutputESDfriend->SetVZEROfriend(vZEROfriend);
209 }
6d3a7bbf 210 }
03a8000a 211 else {
3e341ccb 212 // Event not selected
213 AliDebug(2,"The event was not selected");
03a8000a 214 }
6d3a7bbf 215
6d3a7bbf 216 AliAnalysisDataSlot *out0 = GetOutputSlot(0);
03a8000a 217 if (out0 && out0->IsConnected()) PostData(0, fTreeEF);
6d3a7bbf 218}
219
220//______________________________________________________________________
221
222const char* AliAnalysisTaskFilter::CurrentFileName()
223{
224 // Returns the current file name
225 if( fInputHandler ){
226 return fInputHandler->GetTree()->GetCurrentFile()->GetName();
227 }
228 else return "";
229}
230
231//______________________________________________________________________
232
233void AliAnalysisTaskFilter::AddFriendTrackAt(AliESDfriendTrack* t, Int_t index)
234{
235 //
236 // Adds the friend track at the i-th position in the TClonesArray
237 // of the ESD friend tracks
238 //
239
240 AliESDfriendTrack* currentTrack = (AliESDfriendTrack*)fOutputESDfriend->GetTrack(index);
3e341ccb 241 if(currentTrack){
242 if (currentTrack->TestSkipBit()){
243 AliDebug(2,Form("Friend at index %d already there but dummy - the skip bit will be set to FALSE", index));
244 t->SetSkipBit(kFALSE);
245 }
246 else{
247 AliDebug(2,Form("Friend at index %d already there and not dummy", index));
248 return;
249 }
250 }
251 else{
252 AliDebug(2,Form("Track at %d not there yet ",index));
253 }
254 AliDebug(2,Form("Adding track at %d",index));
255 fOutputESDfriend->AddTrackAt(t,index);
256 return;
257}
258
259//______________________________________________________________________
260
261void AliAnalysisTaskFilter::SkipFriendTrackAt(Int_t index)
262{
263 //
264 // Skip the friend track at the i-th position in the TClonesArray
265 // of the ESD friend tracks
266 //
267
268 AliESDfriendTrack* currentTrack = (AliESDfriendTrack*)fOutputESDfriend->GetTrack(index);
269 if (currentTrack){
270 AliDebug(2,Form("Track already there (no matter what validity) at %d, keeping it as it is", index));
6d3a7bbf 271 }
272 else {
3e341ccb 273 AliDebug(2,Form("Adding NULL track at %d, and setting skip bit to TRUE",index));
274 AliESDfriendTrack* tNull = new AliESDfriendTrack();
275 tNull->SetSkipBit(kTRUE);
276 fOutputESDfriend->AddTrackAt(tNull,index);
6d3a7bbf 277 }
3e341ccb 278 return;
6d3a7bbf 279}