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 the track selection for the analysis on ESDs using
17 * AliESDtrackCuts as underlying structure
22 #include <TClonesArray.h>
23 #include "AliEMCalPtTaskTrackSelectionESD.h"
26 #include "AliESDEvent.h"
27 #include "AliESDtrack.h"
28 #include "AliESDtrackCuts.h"
30 #include "AliPicoTrack.h"
33 ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD)
35 namespace EMCalTriggerPtAnalysis {
37 //______________________________________________________________________________
38 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD():
39 AliEMCalPtTaskVTrackSelection(),
47 //______________________________________________________________________________
48 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(AliESDtrackCuts* cuts):
49 AliEMCalPtTaskVTrackSelection(),
53 * Constructor with cuts
57 //______________________________________________________________________________
58 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(
59 const AliEMCalPtTaskTrackSelectionESD& ref):
60 AliEMCalPtTaskVTrackSelection(ref),
64 * Copy constructor, creating a new cut object
66 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
69 //______________________________________________________________________________
70 AliEMCalPtTaskTrackSelectionESD& AliEMCalPtTaskTrackSelectionESD::operator=(
71 const AliEMCalPtTaskTrackSelectionESD& ref)
76 AliEMCalPtTaskVTrackSelection::operator=(ref);
82 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
87 //______________________________________________________________________________
88 AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
90 * Destructor, deleting track cuts
92 if(fTrackCuts) delete fTrackCuts;
95 //______________________________________________________________________________
96 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
97 const TClonesArray* const tracks) {
99 * Select tracks from a TClonesArray of input tracks
101 * @param tracks: TClonesArray of tracks (must not be null)
102 * @return: TObjArray of selected tracks
104 if(!fListOfTracks) fListOfTracks = new TObjArray;
105 else fListOfTracks->Clear();
107 AliError("Track cuts not provided");
108 return fListOfTracks;
110 TIter trackIter(tracks);
111 AliESDtrack *track(NULL);
112 AliPicoTrack *picoTrack(NULL);
113 TObject *containerObject(NULL);
114 while((containerObject = dynamic_cast<TObject *>(trackIter()))){
115 // Handle pico tracks
116 if((picoTrack = dynamic_cast<AliPicoTrack *>(containerObject)))
117 track = dynamic_cast<AliESDtrack *>(picoTrack->GetTrack());
119 track = dynamic_cast<AliESDtrack *>(containerObject);
120 if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
122 return fListOfTracks;
127 //______________________________________________________________________________
128 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
130 * Select tracks from a virtual event
132 * @param event: AliESDEvent, via interface of virtual event (must not be null)
133 * @return: TObjArray of selected tracks
135 if(!fListOfTracks) fListOfTracks = new TObjArray;
136 else fListOfTracks->Clear();
138 AliError("Track cuts not provided");
139 return fListOfTracks;
141 const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
143 AliError("Event not of type AliESDEvent");
144 return fListOfTracks;
146 std::auto_ptr<TObjArray> accepted(fTrackCuts->GetAcceptedTracks(esd));
147 TIter trackIter(accepted.get());
148 AliESDtrack *track(NULL);
149 while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
150 fListOfTracks->AddLast(track);
152 return fListOfTracks;
155 //______________________________________________________________________________
156 bool AliEMCalPtTaskTrackSelectionESD::IsTrackAccepted(AliVTrack* const trk) {
158 * Check whether track is accepted
160 * @param trk: Track to check
161 * @return: true if selected, false otherwise
163 AliESDtrack *esdt = dynamic_cast<AliESDtrack *>(trk);
164 if(!esdt) return kFALSE;
165 return fTrackCuts->AcceptTrack(esdt);
168 } /* namespace EMCalTriggerPtAnalysis */