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 **************************************************************************/
18 //////////////////////////////////////////////////////////////////////////
20 // Base class for filtering friends
22 //////////////////////////////////////////////////////////////////////////
28 #include "AliAnalysisTaskFilter.h"
29 #include "AliAnalysisManager.h"
30 #include "AliAnalysisDataSlot.h"
31 #include "AliESDEvent.h"
33 #include "AliVEvent.h"
34 #include "AliESDHandler.h"
35 #include "AliInputEventHandler.h"
37 #include "AliESDfriend.h"
38 #include "AliESDfriendTrack.h"
41 ClassImp(AliAnalysisTaskFilter)
43 ////////////////////////////////////////////////////////////////////////
45 AliAnalysisTaskFilter::AliAnalysisTaskFilter():
52 fOutputESDfriend(0x0),
56 // Default constructor
60 //______________________________________________________________________
62 AliAnalysisTaskFilter::AliAnalysisTaskFilter(const char* name):
63 AliAnalysisTask(name, "AnalysisTaskFilter"),
69 fOutputESDfriend(0x0),
73 // Default constructor
76 DefineInput (0, TChain::Class());
77 DefineOutput(0, TTree::Class());
80 //______________________________________________________________________
82 AliAnalysisTaskFilter::AliAnalysisTaskFilter(const AliAnalysisTaskFilter& obj):
89 fOutputESDfriend(0x0),
98 fInputEvent = obj.fInputEvent;
99 fInputHandler = obj.fInputHandler;
100 fOutputESD = obj.fOutputESD;
101 fOutputESDfriend = obj.fOutputESDfriend;
106 //______________________________________________________________________
108 AliAnalysisTaskFilter& AliAnalysisTaskFilter::operator=(const AliAnalysisTaskFilter& other)
114 AliAnalysisTask::operator=(other);
115 fDebug = other.fDebug;
116 fEntry = other.fEntry;
117 fInputEvent = other.fInputEvent;
118 fInputHandler = other.fInputHandler;
119 fOutputESD = other.fOutputESD;
120 fOutputESDfriend = other.fOutputESDfriend;
121 fTreeE = other.fTreeE;
126 //______________________________________________________________________
128 void AliAnalysisTaskFilter::ConnectInputData(Option_t* /*option*/)
131 // Connect the input data
134 if (fDebug > 1) printf("AnalysisTaskFilter::ConnectInputData() \n");
135 fInputHandler = (AliInputEventHandler*)
136 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
138 fInputEvent = fInputHandler->GetEvent();
140 AliError("No Input Event Handler connected") ;
145 //______________________________________________________________________
147 void AliAnalysisTaskFilter::CreateOutputObjects()
150 // Create the output container
153 if (fDebug > 1) printf("AnalysisTaskFilter::CreateOutPutData() \n");
155 AliESDHandler* handler = (AliESDHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
158 fOutputESD = handler->GetESD();
159 fTreeE = handler->GetTree();
160 fOutputESD->GetStdContent();
163 AliWarning("No AOD Event Handler connected.") ;
166 UserCreateOutputObjects();
169 //______________________________________________________________________
171 void AliAnalysisTaskFilter::Exec(Option_t* option)
174 // Exec analysis of one event
177 if (fDebug > 1) AliInfo("AliAnalysisTaskFilter::Exec() \n");
179 if( fInputHandler ) {
180 fEntry = fInputHandler->GetReadEntry();
184 if ( !((Entry()-1)%100) && fDebug > 0) {
185 AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry()));
187 AliESDHandler* handler = (AliESDHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
189 if (UserSelectESDfriendForCurrentEvent()){
190 // Call the user analysis only if the event was selected
191 fOutputESDfriend = handler->GetESDfriend();
195 // Added protection in case the derived task is not an AOD producer.
196 AliAnalysisDataSlot *out0 = GetOutputSlot(0);
197 if (out0 && out0->IsConnected()) PostData(0, fTreeE);
200 //______________________________________________________________________
202 const char* AliAnalysisTaskFilter::CurrentFileName()
204 // Returns the current file name
206 return fInputHandler->GetTree()->GetCurrentFile()->GetName();
211 //______________________________________________________________________
213 void AliAnalysisTaskFilter::AddFriendTrackAt(AliESDfriendTrack* t, Int_t index)
216 // Adds the friend track at the i-th position in the TClonesArray
217 // of the ESD friend tracks
220 AliESDfriendTrack* currentTrack = (AliESDfriendTrack*)fOutputESDfriend->GetTrack(index);
221 if(currentTrack && currentTrack->GetCalibObject(0)){
222 AliWarning("Friend already there");
225 // AliInfo("Adding track");
226 fOutputESDfriend->AddTrackAt(t,index);