]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliEMCalPtTaskTrackSelectionESD.cxx
Merge remote-tracking branch 'origin/flatdev' into mergeFlat2Master
[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                 this->~AliEMCalPtTaskTrackSelectionESD();
78         }
79         if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
80         return *this;
81 }
82
83 //______________________________________________________________________________
84 AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
85         /*
86          * Destructor, deleting track cuts
87          */
88         if(fTrackCuts) delete fTrackCuts;
89 }
90
91 //______________________________________________________________________________
92 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
93                 const TClonesArray* const tracks) {
94         /*
95          * Select tracks from a TClonesArray of input tracks
96          *
97          * @param tracks: TClonesArray of tracks (must not be null)
98          * @return: TObjArray of selected tracks
99          */
100         if(!fListOfTracks) fListOfTracks = new TObjArray;
101         else fListOfTracks->Clear();
102         if(!fTrackCuts){
103                 AliError("Track cuts not provided");
104                 return fListOfTracks;
105         }
106         TIter trackIter(tracks);
107         AliESDtrack *track(NULL);
108         while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
109                 if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
110         }
111         return fListOfTracks;
112 }
113
114
115
116 //______________________________________________________________________________
117 TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
118         /*
119          * Select tracks from a virtual event
120          *
121          * @param event: AliESDEvent, via interface of virtual event (must not be null)
122          * @return: TObjArray of selected tracks
123          */
124         if(!fListOfTracks) fListOfTracks = new TObjArray;
125         else fListOfTracks->Clear();
126         if(!fTrackCuts){
127                 AliError("Track cuts not provided");
128                 return fListOfTracks;
129         }
130         const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
131         if(!esd){
132                 AliError("Event not of type AliESDEvent");
133                 return fListOfTracks;
134         }
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);
140         }
141         return fListOfTracks;
142 }
143
144 } /* namespace EMCalTriggerPtAnalysis */