1 /**************************************************************************
2 * Copyright(c) 1998-2014, 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 **************************************************************************/
16 * Implementation of track selection in case the analysis runs on AODs
17 * For the moment it uses the AliESDtrackCuts and converts AOD tracks to
18 * ESD tracks, which might change in the future when an AOD track selection
19 * framework becomes available.
24 #include <TClonesArray.h>
25 #include <TObjArray.h>
27 #include <AliAODEvent.h>
28 #include <AliAODTrack.h>
29 #include <AliESDtrack.h>
30 #include <AliPicoTrack.h>
31 #include "AliEMCalPtTaskTrackSelectionAOD.h"
33 ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionAOD)
35 namespace EMCalTriggerPtAnalysis {
37 //______________________________________________________________________________
38 AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD() :
39 AliEMCalPtTaskVTrackSelection(),
48 //______________________________________________________________________________
49 AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(AliESDtrackCuts* cuts, UInt_t filterbits):
50 AliEMCalPtTaskVTrackSelection(),
52 fFilterBits(filterbits)
55 * Main Constructor, initalising also track cuts
57 * @param cuts: Inital track cut object
61 //______________________________________________________________________________
62 AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(const AliEMCalPtTaskTrackSelectionAOD& ref) :
63 AliEMCalPtTaskVTrackSelection(ref),
65 fFilterBits(ref.fFilterBits)
70 * @param ref: AOD track selection as basis for the copy
72 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
75 //______________________________________________________________________________
76 AliEMCalPtTaskTrackSelectionAOD& AliEMCalPtTaskTrackSelectionAOD::operator=(const AliEMCalPtTaskTrackSelectionAOD& ref) {
80 * @param ref: AOD track selection as basis for the copy
81 * @return: reference to this cut object
83 AliEMCalPtTaskVTrackSelection::operator=(ref);
89 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
94 //______________________________________________________________________________
95 AliEMCalPtTaskTrackSelectionAOD::~AliEMCalPtTaskTrackSelectionAOD() {
97 * Destructor, removes the track cuts
99 if(fTrackCuts) delete fTrackCuts;
102 //______________________________________________________________________________
103 TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const TClonesArray* const tracks) {
105 * Select tracks from a list (TClonesArray) of tracks. Internally, the tracks are converted
106 * to ESD tracks and processed by the underlying AliESDtrackCut object
108 * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
109 * @return: TObjArray of selected tracks
111 if(!fListOfTracks) fListOfTracks = new TObjArray;
112 else fListOfTracks->Clear();
113 TIter trackIter(tracks);
114 TObject *containerObject(NULL);
115 AliPicoTrack *picoTrack(NULL);
116 AliAODTrack *track(NULL);
117 while((track = dynamic_cast<AliAODTrack *>(trackIter()))){
118 // Handle pico tracks
119 if((picoTrack = dynamic_cast<AliPicoTrack *>(containerObject)))
120 track = dynamic_cast<AliAODTrack *>(picoTrack->GetTrack());
122 track = dynamic_cast<AliAODTrack *>(containerObject);
123 // First check filter bits
124 if(fFilterBits && !track->TestFilterBit(fFilterBits)) continue;
126 AliESDtrack copyTrack(track);
127 if(fTrackCuts->AcceptTrack(©Track)) fListOfTracks->AddLast(track);
130 return fListOfTracks;
133 //______________________________________________________________________________
134 TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const AliVEvent* const event) {
136 * Select tracks from a list (TClonesArray) of tracks. Internally, the tracks are converted
137 * to ESD tracks and processed by the underlying AliESDtrackCut object
139 * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
140 * @return: TObjArray of selected tracks
142 if(!fListOfTracks) fListOfTracks = new TObjArray;
143 else fListOfTracks->Clear();
144 const AliAODEvent *aod = dynamic_cast<const AliAODEvent *>(event);
146 AliError("Event not of type AliAODEvent");
147 return fListOfTracks;
149 AliAODTrack *track(NULL);
150 for(int itrk = 0; itrk < event->GetNumberOfTracks(); itrk++){
151 track = static_cast<AliAODTrack *>(event->GetTrack(itrk));
152 // First check filter bits
153 if(fFilterBits && !track->TestFilterBit(fFilterBits)) continue;
155 AliESDtrack copyTrack(track);
156 if(fTrackCuts->AcceptTrack(©Track)) fListOfTracks->AddLast(track);
159 return fListOfTracks;
162 //______________________________________________________________________________
163 bool AliEMCalPtTaskTrackSelectionAOD::IsTrackAccepted(AliVTrack * const trk){
165 * Check whether track is accepted
167 * @param trk: Track to check
168 * @return: true if selected, false otherwise
170 AliAODTrack *aodt = dynamic_cast<AliAODTrack *>(trk);
171 if(!aodt) return kFALSE;
172 if(fFilterBits && !aodt->TestFilterBit(fFilterBits)) return kFALSE;
173 AliESDtrack copyTrack(aodt);
174 return fTrackCuts->AcceptTrack(©Track);
178 } /* namespace EMCalTriggerPtAnalysis */