]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliEMCalPtTaskTrackSelectionESD.cxx
Use aod track selection wrapper inside the task, when running on aods
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliEMCalPtTaskTrackSelectionESD.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15 /*
16  * Implementation of the track selection for the analysis on ESDs using
17  * AliESDtrackCuts as underlying structure
18  *
19  * Author:
20  *              Markus Fasel
21  */
22 #include <TClonesArray.h>
23 #include <memory>
24
25 #include "AliESDEvent.h"
26 #include "AliESDtrack.h"
27 #include "AliESDtrackCuts.h"
28 #include "AliLog.h"
29
30 #include <AliEMCalPtTaskTrackSelectionESD.h>
31
32 ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD)
33
34 namespace EMCalTriggerPtAnalysis {
35
36 //______________________________________________________________________________
37 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD():
38                 AliEMCalPtTaskVTrackSelection(),
39                 fTrackCuts(NULL)
40 {
41         /*
42          * Default constructor
43          */
44 }
45
46 //______________________________________________________________________________
47 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(AliESDtrackCuts* cuts):
48                 AliEMCalPtTaskVTrackSelection(),
49                 fTrackCuts(cuts)
50 {
51         /*
52          * Constructor with cuts
53          */
54 }
55
56 //______________________________________________________________________________
57 AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(
58                 const AliEMCalPtTaskTrackSelectionESD& ref):
59                 AliEMCalPtTaskVTrackSelection(ref),
60                 fTrackCuts(NULL)
61 {
62         /*
63          * Copy constructor, creating a new cut object
64          */
65         if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
66 }
67
68 //______________________________________________________________________________
69 AliEMCalPtTaskTrackSelectionESD& AliEMCalPtTaskTrackSelectionESD::operator=(
70                 const AliEMCalPtTaskTrackSelectionESD& ref)
71 {
72         /*
73          * Assignment operator
74          */
75         AliEMCalPtTaskVTrackSelection::operator=(ref);
76         if(&ref != this){
77                 if(fTrackCuts) {
78                         delete fTrackCuts;
79                         fTrackCuts = NULL;
80                 }
81                 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
82         }
83         return *this;
84 }
85
86 //______________________________________________________________________________
87 AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
88         /*
89          * Destructor, deleting track cuts
90          */
91         if(fTrackCuts) delete fTrackCuts;
92 }
93
94 //______________________________________________________________________________
95 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
96                 const TClonesArray* const tracks) {
97         /*
98          * Select tracks from a TClonesArray of input tracks
99          *
100          * @param tracks: TClonesArray of tracks (must not be null)
101          * @return: TObjArray of selected tracks
102          */
103         if(!fListOfTracks) fListOfTracks = new TObjArray;
104         else fListOfTracks->Clear();
105         if(!fTrackCuts){
106                 AliError("Track cuts not provided");
107                 return fListOfTracks;
108         }
109         TIter trackIter(tracks);
110         AliESDtrack *track(NULL);
111         while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
112                 if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
113         }
114         return fListOfTracks;
115 }
116
117
118
119 //______________________________________________________________________________
120 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
121         /*
122          * Select tracks from a virtual event
123          *
124          * @param event: AliESDEvent, via interface of virtual event (must not be null)
125          * @return: TObjArray of selected tracks
126          */
127         if(!fListOfTracks) fListOfTracks = new TObjArray;
128         else fListOfTracks->Clear();
129         if(!fTrackCuts){
130                 AliError("Track cuts not provided");
131                 return fListOfTracks;
132         }
133         const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
134         if(!esd){
135                 AliError("Event not of type AliESDEvent");
136                 return fListOfTracks;
137         }
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);
143         }
144         return fListOfTracks;
145 }
146
147 } /* namespace EMCalTriggerPtAnalysis */