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);
77 this->~AliEMCalPtTaskTrackSelectionESD();
79 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
83 //______________________________________________________________________________
84 AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
86 * Destructor, deleting track cuts
88 if(fTrackCuts) delete fTrackCuts;
91 //______________________________________________________________________________
92 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
93 const TClonesArray* const tracks) {
95 * Select tracks from a TClonesArray of input tracks
97 * @param tracks: TClonesArray of tracks (must not be null)
98 * @return: TObjArray of selected tracks
100 if(!fListOfTracks) fListOfTracks = new TObjArray;
101 else fListOfTracks->Clear();
103 AliError("Track cuts not provided");
104 return fListOfTracks;
106 TIter trackIter(tracks);
107 AliESDtrack *track(NULL);
108 while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
109 if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
111 return fListOfTracks;
116 //______________________________________________________________________________
117 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
119 * Select tracks from a virtual event
121 * @param event: AliESDEvent, via interface of virtual event (must not be null)
122 * @return: TObjArray of selected tracks
124 if(!fListOfTracks) fListOfTracks = new TObjArray;
125 else fListOfTracks->Clear();
127 AliError("Track cuts not provided");
128 return fListOfTracks;
130 const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
132 AliError("Event not of type AliESDEvent");
133 return fListOfTracks;
135 std::auto_ptr<TObjArray> accepted(fTrackCuts->GetAcceptedTracks(esd));
136 TIter trackIter(accepted.get());
137 AliESDtrack *track(NULL);
138 while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
139 fListOfTracks->AddLast(track);
141 return fListOfTracks;
144 } /* namespace EMCalTriggerPtAnalysis */