]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/Tracks/AliEMCalPtTaskTrackSelectionAOD.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / Tracks / AliEMCalPtTaskTrackSelectionAOD.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2014, 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 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.
20  *
21  * Author:
22  *   Markus Fasel
23  */
24 #include <TClonesArray.h>
25 #include <TObjArray.h>
26
27 #include <AliAODEvent.h>
28 #include <AliAODTrack.h>
29 #include <AliESDtrack.h>
30 #include <AliPicoTrack.h>
31 #include "AliEMCalPtTaskTrackSelectionAOD.h"
32
33 ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionAOD)
34
35 namespace EMCalTriggerPtAnalysis {
36
37         //______________________________________________________________________________
38         AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD() :
39                 AliEMCalPtTaskVTrackSelection(),
40                 fTrackCuts(NULL),
41                 fFilterBits(0)
42         {
43                 /*
44                  * Main constructor
45                  */
46         }
47
48         //______________________________________________________________________________
49         AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(AliESDtrackCuts* cuts, UInt_t filterbits):
50                 AliEMCalPtTaskVTrackSelection(),
51                 fTrackCuts(cuts),
52                 fFilterBits(filterbits)
53         {
54                 /*
55                  * Main Constructor, initalising also track cuts
56                  *
57                  * @param cuts: Inital track cut object
58                  */
59         }
60
61         //______________________________________________________________________________
62         AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(const AliEMCalPtTaskTrackSelectionAOD& ref) :
63                 AliEMCalPtTaskVTrackSelection(ref),
64                 fTrackCuts(NULL),
65                 fFilterBits(ref.fFilterBits)
66         {
67                 /*
68                  * copy constructor
69                  *
70                  * @param ref: AOD track selection as basis for the copy
71                  */
72                 if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
73         }
74
75         //______________________________________________________________________________
76         AliEMCalPtTaskTrackSelectionAOD& AliEMCalPtTaskTrackSelectionAOD::operator=(const AliEMCalPtTaskTrackSelectionAOD& ref) {
77                 /*
78                  * Assignment operator
79                  *
80                  * @param ref: AOD track selection as basis for the copy
81                  * @return: reference to this cut object
82                  */
83                 AliEMCalPtTaskVTrackSelection::operator=(ref);
84                 if(this != &ref){
85                         if(fTrackCuts) {
86                                 delete fTrackCuts;
87                                 fTrackCuts = NULL;
88                         }
89                         if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
90                 }
91                 return *this;
92         }
93
94         //______________________________________________________________________________
95         AliEMCalPtTaskTrackSelectionAOD::~AliEMCalPtTaskTrackSelectionAOD() {
96                 /*
97                  * Destructor, removes the track cuts
98                  */
99                 if(fTrackCuts) delete fTrackCuts;
100         }
101
102         //______________________________________________________________________________
103         TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const TClonesArray* const tracks) {
104                 /*
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
107                  *
108                  * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
109                  * @return: TObjArray of selected tracks
110                  */
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());
121                   else
122                     track = dynamic_cast<AliAODTrack *>(containerObject);
123                         // First check filter bits
124                         if(fFilterBits && !track->TestFilterBit(fFilterBits)) continue;
125                         if(fTrackCuts){
126                                 AliESDtrack copyTrack(track);
127                                 if(fTrackCuts->AcceptTrack(&copyTrack)) fListOfTracks->AddLast(track);
128                         }
129                 }
130                 return fListOfTracks;
131         }
132
133         //______________________________________________________________________________
134         TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const AliVEvent* const event) {
135                 /*
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
138                  *
139                  * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
140                  * @return: TObjArray of selected tracks
141                  */
142                 if(!fListOfTracks) fListOfTracks = new TObjArray;
143                 else fListOfTracks->Clear();
144                 const AliAODEvent *aod = dynamic_cast<const AliAODEvent *>(event);
145                 if(!aod){
146                         AliError("Event not of type AliAODEvent");
147                         return fListOfTracks;
148                 }
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;
154                         if(fTrackCuts){
155                                 AliESDtrack copyTrack(track);
156                                 if(fTrackCuts->AcceptTrack(&copyTrack)) fListOfTracks->AddLast(track);
157                         }
158                 }
159                 return fListOfTracks;
160         }
161
162         //______________________________________________________________________________
163         bool AliEMCalPtTaskTrackSelectionAOD::IsTrackAccepted(AliVTrack * const trk){
164           /*
165            * Check whether track is accepted
166            *
167            * @param trk: Track to check
168            * @return: true if selected, false otherwise
169            */
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(&copyTrack);
175         }
176
177
178 } /* namespace EMCalTriggerPtAnalysis */
179