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():
51 fOutputESDfriend(0x0),
55 // Default constructor
59 //______________________________________________________________________
61 AliAnalysisTaskFilter::AliAnalysisTaskFilter(const char* name):
62 AliAnalysisTask(name, "AnalysisTaskFilter"),
67 fOutputESDfriend(0x0),
71 // Default constructor
74 DefineInput (0, TChain::Class());
75 DefineOutput(0, TTree::Class());
78 //______________________________________________________________________
80 AliAnalysisTaskFilter::AliAnalysisTaskFilter(const AliAnalysisTaskFilter& obj):
86 fOutputESDfriend(0x0),
95 fInputEvent = obj.fInputEvent;
96 fInputHandler = obj.fInputHandler;
97 fOutputESDfriend = obj.fOutputESDfriend;
98 fTreeEF = obj.fTreeEF;
102 //______________________________________________________________________
104 AliAnalysisTaskFilter& AliAnalysisTaskFilter::operator=(const AliAnalysisTaskFilter& other)
110 AliAnalysisTask::operator=(other);
111 fDebug = other.fDebug;
112 fEntry = other.fEntry;
113 fInputEvent = other.fInputEvent;
114 fInputHandler = other.fInputHandler;
115 fOutputESDfriend = other.fOutputESDfriend;
116 fTreeEF = other.fTreeEF;
121 //______________________________________________________________________
123 void AliAnalysisTaskFilter::ConnectInputData(Option_t* /*option*/)
126 // Connect the input data
129 if (fDebug > 1) printf("AnalysisTaskFilter::ConnectInputData() \n");
130 fInputHandler = (AliInputEventHandler*)
131 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
133 fInputEvent = fInputHandler->GetEvent();
135 AliError("No Input Event Handler connected") ;
140 //______________________________________________________________________
142 void AliAnalysisTaskFilter::CreateOutputObjects()
145 // Create the output container
148 if (fDebug > 1) printf("AnalysisTaskFilter::CreateOutPutData() \n");
150 AliESDHandler* handler = (AliESDHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
153 fTreeEF = handler->GetTree();
156 AliWarning("No AOD Event Handler connected.") ;
159 UserCreateOutputObjects();
162 //______________________________________________________________________
164 void AliAnalysisTaskFilter::Exec(Option_t* option)
167 // Exec analysis of one event
170 if (fDebug > 1) AliInfo("AliAnalysisTaskFilter::Exec() \n");
172 if( fInputHandler ) {
173 fEntry = fInputHandler->GetReadEntry();
177 if ( !((Entry()-1)%100) && fDebug > 0) {
178 AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry()));
180 AliESDHandler* handler = (AliESDHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
182 if (UserSelectESDfriendForCurrentEvent()){
183 // Call the user analysis only if the event was selected
184 fOutputESDfriend = handler->GetESDfriend();
189 fOutputESDfriend = 0x0;
193 // Added protection in case the derived task is not an AOD producer.
194 AliAnalysisDataSlot *out0 = GetOutputSlot(0);
195 if (out0 && out0->IsConnected()) PostData(0, fTreeEF);
198 //______________________________________________________________________
200 const char* AliAnalysisTaskFilter::CurrentFileName()
202 // Returns the current file name
204 return fInputHandler->GetTree()->GetCurrentFile()->GetName();
209 //______________________________________________________________________
211 void AliAnalysisTaskFilter::AddFriendTrackAt(AliESDfriendTrack* t, Int_t index)
214 // Adds the friend track at the i-th position in the TClonesArray
215 // of the ESD friend tracks
218 AliESDfriendTrack* currentTrack = (AliESDfriendTrack*)fOutputESDfriend->GetTrack(index);
219 if(currentTrack && currentTrack->GetCalibObject(0)){
220 AliWarning("Friend already there");
223 // AliInfo("Adding track");
224 fOutputESDfriend->AddTrackAt(t,index);