AliRoot Core  3dc7879 (3dc7879)
AliVTrackSelection.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2015, 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 #include <TObjArray.h>
16 #include <TClonesArray.h>
17 #include <AliVTrack.h>
18 #include <AliVEvent.h>
19 #include <AliVTrackSelection.h>
20 #include "AliVCuts.h"
21 
22 ClassImp(AliVTrackSelection)
23 
24 
29  TObject(),
30  fListOfTracks(NULL),
31  fListOfTrackBitmaps(NULL),
32  fTrackBitmap(64),
33  fListOfCuts(NULL),
34  fSelectionModeAny(kFALSE)
35 {
36 }
37 
43  TObject(ref),
44  fListOfTracks(NULL),
45  fListOfTrackBitmaps(NULL),
46  fTrackBitmap(64),
47  fListOfCuts(NULL),
48  fSelectionModeAny(kFALSE)
49 {
50  if(ref.fListOfTracks) fListOfTracks = new TObjArray(*(ref.fListOfTracks));
51  if(ref.fListOfTrackBitmaps) fListOfTrackBitmaps = new TClonesArray(*(ref.fListOfTrackBitmaps));
52  if(ref.fListOfCuts){
53  fListOfCuts = new TObjArray;
54  fListOfCuts->SetOwner(false);
55  for(TIter cutIter = TIter(ref.fListOfCuts).Begin(); cutIter != TIter::End(); ++cutIter)
56  fListOfCuts->Add(*cutIter);
57  }
58 }
59 
66  TObject::operator=(ref);
67  if(this != &ref){
68  this->~AliVTrackSelection();
69  if(ref.fListOfTracks) fListOfTracks = new TObjArray(*(ref.fListOfTracks));
70  if(ref.fListOfTrackBitmaps) fListOfTrackBitmaps = new TClonesArray(*(ref.fListOfTrackBitmaps));
71  if(ref.fListOfCuts){
72  fListOfCuts = new TObjArray;
73  fListOfCuts->SetOwner(false);
74  for(TIter cutIter = TIter(ref.fListOfCuts).Begin(); cutIter != TIter::End(); ++cutIter)
75  fListOfCuts->Add(*cutIter);
76  } else fListOfCuts = NULL;
77  }
78  return *this;
79 }
80 
86  if(fListOfTracks) delete fListOfTracks;
88  if(fListOfCuts) delete fListOfCuts;
89 }
90 
96  if(!fListOfCuts){
97  fListOfCuts = new TObjArray;
98  fListOfCuts->SetOwner(true);
99  }
100  fListOfCuts->Add(cuts);
101 }
102 
108  TIter next(cuts);
109  AliVCuts* item = 0;
110  while ((item = static_cast<AliVCuts*>(next())))
111  {
112  AddTrackCuts(item);
113  }
114 }
115 
121  if(!fListOfCuts) return 0;
122  return fListOfCuts->GetEntries();
123 }
124 
131  if(!fListOfCuts) return NULL;
132  if(icut < fListOfCuts->GetEntries())
133  return static_cast<AliVCuts *>(fListOfCuts->At(icut));
134  return NULL;
135 }
136 
143 TObjArray* AliVTrackSelection::GetAcceptedTracks(const TClonesArray* const tracks)
144 {
145  if (!fListOfTracks) {
146  fListOfTracks = new TObjArray;
147  }
148  else {
149  fListOfTracks->Clear();
150  }
151 
152  if (!fListOfTrackBitmaps) {
153  fListOfTrackBitmaps = new TClonesArray("TBits", 1000);
154  fListOfTrackBitmaps->SetOwner(kTRUE);
155  }
156  else {
157  fListOfTrackBitmaps->Clear();
158  }
159 
160  TIter next(tracks);
161  AliVTrack* track = 0;
162  Int_t i = 0;
163  while((track = static_cast<AliVTrack*>(next()))) {
164  if (IsTrackAccepted(track)) {
165  fListOfTracks->AddLast(track);
166  }
167  else {
168  fListOfTracks->AddLast(0);
169  }
170  new ((*fListOfTrackBitmaps)[i]) TBits(fTrackBitmap);
171  i++;
172  }
173  return fListOfTracks;
174 }
175 
183 {
184  if (!fListOfTracks) {
185  fListOfTracks = new TObjArray;
186  }
187  else {
188  fListOfTracks->Clear();
189  }
190 
191  if (!fListOfTrackBitmaps) {
192  fListOfTrackBitmaps = new TClonesArray("TBits", 1000);
193  fListOfTrackBitmaps->SetOwner(kTRUE);
194  }
195  else {
196  fListOfTrackBitmaps->Clear();
197  }
198 
199  for(int itrk = 0; itrk < event->GetNumberOfTracks(); itrk++){
200  AliVTrack *trk = static_cast<AliVTrack*>(event->GetTrack(itrk));
201  if (IsTrackAccepted(trk)) {
202  fListOfTracks->AddLast(trk);
203  }
204  else {
205  fListOfTracks->AddLast(trk);
206  }
207  new ((*fListOfTrackBitmaps)[itrk]) TBits(fTrackBitmap);
208  }
209  return fListOfTracks;
210 }
#define TObjArray
Int_t GetNumberOfCutObjects() const
void AddTrackCuts(AliVCuts *cuts)
AliTPCfastTrack * track
TClonesArray * fListOfTrackBitmaps
TClonesArray with accepted tracks&#39; bit maps.
TBits fTrackBitmap
Bitmap of last accepted/rejected track.
virtual bool IsTrackAccepted(AliVTrack *const trk)=0
Declartion of class AliVTrackSelection.
TObjArray * GetAcceptedTracks(const TClonesArray *const tracks)
AliVCuts * GetTrackCuts(Int_t icut)
AliVTrackSelection & operator=(const AliVTrackSelection &ref)
TObjArray * fListOfCuts
List of track cut objects.
TObjArray * fListOfTracks
TObjArray with accepted tracks.