1 /**************************************************************************
2 * Copyright(c) 1998-2007, 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>
25 #include "AliESDEvent.h"
26 #include "AliESDtrack.h"
27 #include "AliESDtrackCuts.h"
30 #include <AliEMCalPtTaskTrackSelectionESD.h>
32 ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD)
34 namespace EMCalTriggerPtAnalysis {
36 //______________________________________________________________________________
37 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD():
38 AliEMCalPtTaskVTrackSelection(),
46 //______________________________________________________________________________
47 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(AliESDtrackCuts* cuts):
48 AliEMCalPtTaskVTrackSelection(),
52 * Constructor with cuts
56 //______________________________________________________________________________
57 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(
58 const AliEMCalPtTaskTrackSelectionESD& ref):
59 AliEMCalPtTaskVTrackSelection(ref),
63 * Copy constructor, creating a new cut object
65 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
68 //______________________________________________________________________________
69 AliEMCalPtTaskTrackSelectionESD& AliEMCalPtTaskTrackSelectionESD::operator=(
70 const AliEMCalPtTaskTrackSelectionESD& ref)
75 AliEMCalPtTaskVTrackSelection::operator=(ref);
81 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
86 //______________________________________________________________________________
87 AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
89 * Destructor, deleting track cuts
91 if(fTrackCuts) delete fTrackCuts;
94 //______________________________________________________________________________
95 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
96 const TClonesArray* const tracks) {
98 * Select tracks from a TClonesArray of input tracks
100 * @param tracks: TClonesArray of tracks (must not be null)
101 * @return: TObjArray of selected tracks
103 if(!fListOfTracks) fListOfTracks = new TObjArray;
104 else fListOfTracks->Clear();
106 AliError("Track cuts not provided");
107 return fListOfTracks;
109 TIter trackIter(tracks);
110 AliESDtrack *track(NULL);
111 while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
112 if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
114 return fListOfTracks;
119 //______________________________________________________________________________
120 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
122 * Select tracks from a virtual event
124 * @param event: AliESDEvent, via interface of virtual event (must not be null)
125 * @return: TObjArray of selected tracks
127 if(!fListOfTracks) fListOfTracks = new TObjArray;
128 else fListOfTracks->Clear();
130 AliError("Track cuts not provided");
131 return fListOfTracks;
133 const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
135 AliError("Event not of type AliESDEvent");
136 return fListOfTracks;
138 std::auto_ptr<TObjArray> accepted(fTrackCuts->GetAcceptedTracks(esd));
139 TIter trackIter(accepted.get());
140 AliESDtrack *track(NULL);
141 while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
142 fListOfTracks->AddLast(track);
144 return fListOfTracks;
147 } /* namespace EMCalTriggerPtAnalysis */