AliPhysics  4ef2867 (4ef2867)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliEmcalTrackSelectionAOD.cxx
Go to the documentation of this file.
1 /************************************************************************************
2  * Copyright (C) 2017, Copyright Holders of the ALICE Collaboration *
3  * All rights reserved. *
4  * *
5  * Redistribution and use in source and binary forms, with or without *
6  * modification, are permitted provided that the following conditions are met: *
7  * * Redistributions of source code must retain the above copyright *
8  * notice, this list of conditions and the following disclaimer. *
9  * * Redistributions in binary form must reproduce the above copyright *
10  * notice, this list of conditions and the following disclaimer in the *
11  * documentation and/or other materials provided with the distribution. *
12  * * Neither the name of the <organization> nor the *
13  * names of its contributors may be used to endorse or promote products *
14  * derived from this software without specific prior written permission. *
15  * *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
19  * DISCLAIMED. IN NO EVENT SHALL ALICE COLLABORATION BE LIABLE FOR ANY *
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
26  ************************************************************************************/
27 #include <iostream>
28 
29 #include <TClonesArray.h>
30 #include <TBits.h>
31 #include <TObjArray.h>
32 
33 #include "AliAODEvent.h"
34 #include "AliAODTrack.h"
38 #include "AliEmcalCutBase.h"
42 #include "AliEmcalVCutsWrapper.h"
43 #include "AliESDtrackCuts.h"
44 #include "AliLog.h"
45 #include "AliPicoTrack.h"
46 
49 ClassImp(PWG::EMCAL::TestAliEmcalTrackSelectionAOD)
51 
54 {
55 }
56 
59 {
60  if(cuts) AddTrackCuts(cuts);
61  if(filterbits) {
62  auto filterbitcuts = new PWG::EMCAL::AliEmcalAODFilterBitCuts("filterbitcuts", "AOD filter bit cuts");
63  filterbitcuts->SetFilterBits(filterbits, true);
64  AddTrackCuts(filterbitcuts);
65  }
66 }
67 
70 {
71  GenerateTrackCuts(type, period);
72 }
73 
75 {
76  switch (type) {
77  case kHybridTracks:
78  {
79  auto hybridcuts = new PWG::EMCAL::AliEmcalAODHybridTrackCuts("hybridcuts");
80  Char_t hybridbits[2];
81  GetHybridFilterBits(hybridbits, period);
82  hybridcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
83  AddTrackCuts(hybridcuts);
84  break;
85  }
86 
87  case kTPCOnlyTracks:
88  {
89  AddTrackCuts(new PWG::EMCAL::AliEmcalAODTPCOnlyTrackCuts("tpconlycuts", "hybrid track cuts for TPC only tracks"));
90  break;
91  }
92 
94  {
95  if (fListOfCuts) fListOfCuts->Clear();
96  AddTrackCuts(AliESDtrackCuts::GetStandardITSSATrackCuts2010());
97  break;
98  }
99 
101  {
102  auto trackcuts = new PWG::EMCAL::AliEmcalAODHybridTrackCuts("hybridcuts2010_wNoRefit");
103  Char_t hybridbits[2];
104  GetHybridFilterBits(hybridbits, period);
105  trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
106  AddTrackCuts(trackcuts);
107  break;
108  }
109 
111  {
112  auto trackcuts = new PWG::EMCAL::AliEmcalAODHybridTrackCuts("hybridcuts2010_woNoRefit");
113  Char_t hybridbits[2];
114  GetHybridFilterBits(hybridbits, period);
115  trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
116  trackcuts->SetSelectNonITSrefitTracks(kFALSE);
117  AddTrackCuts(trackcuts);
118  break;
119  }
120 
122  {
123  auto trackcuts = new PWG::EMCAL::AliEmcalAODHybridTrackCuts("hybridcuts2011_wNoRefit");
124  Char_t hybridbits[2];
125  GetHybridFilterBits(hybridbits, period);
126  trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
127  AddTrackCuts(trackcuts);
128  break;
129  }
130 
132  {
133  auto trackcuts = new PWG::EMCAL::AliEmcalAODHybridTrackCuts("hybridcuts2011_woNoRefit");
134  Char_t hybridbits[2];
135  GetHybridFilterBits(hybridbits, period);
136  trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
137  trackcuts->SetSelectNonITSrefitTracks(kFALSE);
138  AddTrackCuts(trackcuts);
139  break;
140  }
141 
142  default:
143  break;
144  }
145 }
146 
148 {
149  AliAODTrack *aodt = dynamic_cast<AliAODTrack*>(trk);
150  if (!aodt){
151  AliPicoTrack *picotrack = dynamic_cast<AliPicoTrack*>(trk);
152  if(picotrack) {
153  aodt = dynamic_cast<AliAODTrack *>(picotrack->GetTrack());
154  }
155  else {
156  AliError("Track neither AOD track nor pico track");
157  return PWG::EMCAL::AliEmcalTrackSelResultPtr(nullptr, kFALSE);
158  }
159  }
160  if(!aodt){
161  AliError("Failed getting AOD track");
162  return PWG::EMCAL::AliEmcalTrackSelResultPtr(nullptr, kFALSE);
163  }
164 
165  TBits trackbitmap(64);
166  trackbitmap.ResetAllBits();
167  UInt_t cutcounter(0);
168  TObjArray selectionStatus;
169  if (fListOfCuts) {
170  for (auto cutIter : *fListOfCuts){
171  PWG::EMCAL::AliEmcalCutBase *trackCuts = static_cast<PWG::EMCAL::AliEmcalCutBase*>(static_cast<AliEmcalManagedObject *>(cutIter)->GetObject());
172  PWG::EMCAL::AliEmcalTrackSelResultPtr cutresults = trackCuts->IsSelected(aodt);
173  if (cutresults) trackbitmap.SetBitNumber(cutcounter);
174  selectionStatus.Add(&cutresults);
175  cutcounter++;
176  }
177  }
178 
180  if (fSelectionModeAny){
181  // In case of ANY one of the cuts need to be fulfilled (equivalent to one but set)
182  result.SetSelectionResult(trackbitmap.CountBits() > 0 || cutcounter == 0);
183  }
184  else {
185  // In case of ALL all of the cuts need to be fulfilled (equivalent to all bits set)
186  result.SetSelectionResult(trackbitmap.CountBits() == cutcounter);
187  }
188  return result;
189 }
190 
192  PWG::EMCAL::AliEmcalAODFilterBitCuts *filtercuts = nullptr;
193  // Find existing filter bit cuts
194  for(auto c : *fListOfCuts) {
195  if(auto vcutswrapper = dynamic_cast<PWG::EMCAL::AliEmcalVCutsWrapper*>(c)) {
196  if(auto aodcuts = dynamic_cast<PWG::EMCAL::AliEmcalAODFilterBitCuts *>(vcutswrapper->GetCutObject())){
197  filtercuts = aodcuts;
198  break;
199  }
200  }
201  }
202  if(filtercuts) filtercuts->SetFilterBits(filterbits, false);
203  else {
204  filtercuts = new PWG::EMCAL::AliEmcalAODFilterBitCuts("filterbitcuts", "AOD filter bit cuts");
205  filtercuts->SetFilterBits(filterbits, kTRUE);
206  AddTrackCuts(filtercuts);
207  }
208 }
209 
211 {
212  period.ToLower();
213  if (period == "lhc10b" || period == "lhc10c" || period == "lhc10d" ||
214  period == "lhc10e" || period == "lhc10h" ||
215  period == "lhc11h" || period == "lhc12a" || period == "lhc12b" ||
216  period == "lhc12c" || period == "lhc12d" || period == "lhc12e" ||
217  period == "lhc12f" || period == "lhc12g" || period == "lhc12h" ||
218  period == "lhc12i" || period == "lhc13b" || period == "lhc13c" ||
219  period == "lhc13d" || period == "lhc13e" || period == "lhc13f" ||
220  period == "lhc13g" ||
221  (period.Length() == 6 && (period.BeginsWith("lhc15") || period.BeginsWith("lhc16") || period.BeginsWith("lhc17"))) // all Run-2 data, excluding MC productions
222  ) {
223  bits[0] = 8;
224  bits[1] = 9;
225  }
226 
227  else if (period == "lhc10f7a" || period == "lhc12a15e" || period.BeginsWith("lhc12a17") ||
228  period == "lhc13b4" || period == "lhc13b4_fix" || period == "lhc13b4_plus" || period == "lhc14k1a" || period == "lhc14k1b" || period == "lhc13e4" ||
229  period.BeginsWith("lhc14a1") || period.BeginsWith("lhc13b2_efix") ||
230  period.BeginsWith("lhc15g6") || period.BeginsWith("lhc16e1") || period.BeginsWith("lhc17f8")) {
231  bits[0] = 8;
232  bits[1] = 9;
233  }
234 
235  else if (period == "lhc11a" || period == "lhc10hold" || period == "lhc11c" || period == "lhc11d") {
236  bits[0] = 8;
237  bits[1] = 4;
238  }
239 
240  else if (period.Contains("lhc12a15a") || period == "lhc12a15f" ||
241  period == "lhc12a15g" || period.BeginsWith("lhc11a1")) {
242  bits[0] = 8;
243  bits[1] = 4;
244  }
245 
246  else {
247  ::Error("AliEmcalTrackSelectionAOD::GetHybridFilterBits", "Could not find period %s! Hybrid tracks will be selected, but will not be able to distinguish between global and constrained.", period.Data());
248  bits[0] = -1;
249  bits[1] = -1;
250  return kFALSE;
251  }
252 
253  return kTRUE;
254 }
255 
256 namespace PWG {
257 
258 namespace EMCAL {
259 
261  TObject(),
262  fTrackSelHybrid2010wRefit(nullptr),
263  fTrackSelHybrid2010woRefit(nullptr),
264  fTrackSelHybrid2011(nullptr),
265  fTrackSelTPConly(nullptr)
266 {
267 
268 }
269 
275 }
276 
282 }
283 
286 }
287 
289  AliInfoStream() << "Running test for 2010 Definition with non-refit tracks" << std::endl;
290  AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
291  testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
292  testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
293  testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
294  testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
295  testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
296  testCat1WithRefit.SetFilterMap(BIT(8));
297  testCat2WithRefit.SetFilterMap(BIT(4));
298  testCat2WithoutRefit.SetFilterMap(BIT(4));
299 
300  int nfailure = 0;
301  auto result_cat1_wrefit = fTrackSelHybrid2010wRefit->IsTrackAccepted(&testCat1WithRefit);
302  if(!result_cat1_wrefit){
303  AliErrorStream() << "Hybrid track CAT1 not selected" << std::endl;
304  nfailure++;
305  } else {
306  auto hybridcat = FindHybridSelectionResult(result_cat1_wrefit);
307  if(!hybridcat){
308  AliErrorStream() << "No hybrid selection result found for CAT1 hybrid track" << std::endl;
309  nfailure++;
310  } else {
311  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridGlobal) {
312  AliErrorStream() << "Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
313  nfailure++;
314  }
315  }
316  }
317 
318  auto result_cat2_wrefit = fTrackSelHybrid2010wRefit->IsTrackAccepted(&testCat2WithRefit);
319  if(!result_cat2_wrefit){
320  AliErrorStream() << "Hybrid track CAT2 not selected" << std::endl;
321  nfailure++;
322  } else {
323  auto hybridcat = FindHybridSelectionResult(result_cat2_wrefit);
324  if(!hybridcat){
325  AliErrorStream() << "No hybrid selection result found for CAT2 hybrid track" << std::endl;
326  nfailure++;
327  } else {
328  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridConstrained) {
329  AliErrorStream() << "Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
330  nfailure++;
331  }
332  }
333  }
334 
335  auto result_cat2_worefit = fTrackSelHybrid2010wRefit->IsTrackAccepted(&testCat2WithoutRefit);
336  if(!result_cat2_worefit){
337  AliErrorStream() << "Hybrid track CAT3 not selected" << std::endl;
338  nfailure++;
339  } else {
340  auto hybridcat = FindHybridSelectionResult(result_cat2_worefit);
341  if(!hybridcat){
342  AliErrorStream() << "No hybrid selection result found for CAT3 hybrid track" << std::endl;
343  nfailure++;
344  } else {
345  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridConstrainedNoITSrefit) {
346  AliErrorStream() << "Incorrect hybrid track type for CAT3 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
347  nfailure++;
348  }
349  }
350  }
351 
352  auto result_nohybrid = fTrackSelHybrid2010wRefit->IsTrackAccepted(&testNoHybrid);
353  if(result_nohybrid){
354  AliErrorStream() << "Non-hybrid track selected as hybrid track" << std::endl;
355  nfailure++;
356  }
357 
358  return nfailure == 0;
359 }
360 
362  AliInfoStream() << "Running test for 2010 Definition without non-refit tracks" << std::endl;
363  AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
364  testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
365  testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
366  testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
367  testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
368  testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
369  testCat1WithRefit.SetFilterMap(BIT(8));
370  testCat2WithRefit.SetFilterMap(BIT(4));
371  testCat2WithoutRefit.SetFilterMap(BIT(4));
372 
373  int nfailure = 0;
374  auto result_cat1_wrefit = fTrackSelHybrid2010woRefit->IsTrackAccepted(&testCat1WithRefit);
375  if(!result_cat1_wrefit){
376  AliErrorStream() << "Hybrid track CAT1 not selected" << std::endl;
377  nfailure++;
378  } else {
379  auto hybridcat = FindHybridSelectionResult(result_cat1_wrefit);
380  if(!hybridcat){
381  AliErrorStream() << "No hybrid selection result found for CAT1 hybrid track" << std::endl;
382  nfailure++;
383  } else {
384  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridGlobal) {
385  AliErrorStream() << "Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
386  nfailure++;
387  }
388  }
389  }
390 
391  auto result_cat2_wrefit = fTrackSelHybrid2010woRefit->IsTrackAccepted(&testCat2WithRefit);
392  if(!result_cat2_wrefit){
393  AliErrorStream() << "Hybrid track CAT2 not selected" << std::endl;
394  nfailure++;
395  } else {
396  auto hybridcat = FindHybridSelectionResult(result_cat2_wrefit);
397  if(!hybridcat){
398  AliErrorStream() << "No hybrid selection result found for CAT2 hybrid track" << std::endl;
399  nfailure++;
400  } else {
401  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridConstrained) {
402  AliErrorStream() << "Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
403  nfailure++;
404  }
405  }
406  }
407 
408  auto result_cat2_worefit = fTrackSelHybrid2010woRefit->IsTrackAccepted(&testCat2WithoutRefit);
409  if(result_cat2_worefit){
410  AliErrorStream() << "CAT2 track without refit selected as hybrid track in track selection excluding non-refit tracks" << std::endl;
411  nfailure++;
412  }
413 
414  auto result_nohybrid = fTrackSelHybrid2010woRefit->IsTrackAccepted(&testNoHybrid);
415  if(result_nohybrid){
416  AliErrorStream() << "Non-hybrid track selected as hybrid track" << std::endl;
417  nfailure++;
418  }
419 
420  return nfailure == 0;
421 }
422 
424  AliInfoStream() << "Running test for 2011 Definition" << std::endl;
425  AliAODTrack testCat1, testCat2, testNoHybrid;
426  testCat1.SetIsHybridGlobalConstrainedGlobal();
427  testCat2.SetIsHybridGlobalConstrainedGlobal();
428  testCat1.SetStatus(AliVTrack::kITSrefit);
429  testCat2.SetStatus(AliVTrack::kITSrefit);
430  testCat1.SetFilterMap(BIT(8));
431  testCat2.SetFilterMap(BIT(9));
432 
433  int nfailure = 0;
434 
435  auto result_cat1 = fTrackSelHybrid2011->IsTrackAccepted(&testCat1);
436  if(!result_cat1){
437  AliErrorStream() << "Hybrid track CAT1 not selected" << std::endl;
438  nfailure++;
439  } else {
440  auto hybridcat = FindHybridSelectionResult(result_cat1);
441  if(!hybridcat){
442  AliErrorStream() << "No hybrid selection result found for CAT1 hybrid track" << std::endl;
443  nfailure++;
444  } else {
445  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridGlobal) {
446  AliErrorStream() << "Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
447  nfailure++;
448  }
449  }
450  }
451 
452  auto result_cat2 = fTrackSelHybrid2011->IsTrackAccepted(&testCat2);
453  if(!result_cat2){
454  AliErrorStream() << "Hybrid track CAT2 not selected" << std::endl;
455  nfailure++;
456  } else {
457  auto hybridcat = FindHybridSelectionResult(result_cat2);
458  if(!hybridcat){
459  AliErrorStream() << "No hybrid selection result found for CAT2 hybrid track" << std::endl;
460  nfailure++;
461  } else {
462  if(hybridcat->GetHybridTrackType() != AliEmcalTrackSelResultHybrid::kHybridConstrained) {
463  AliErrorStream() << "Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
464  nfailure++;
465  }
466  }
467  }
468 
469  auto result_nohybrid = fTrackSelHybrid2011->IsTrackAccepted(&testNoHybrid);
470  if(result_nohybrid){
471  AliErrorStream() << "Non-hybrid track selected as hybrid track" << std::endl;
472  nfailure++;
473  }
474  return nfailure == 0;
475 }
476 
478  AliInfoStream() << "Running test for TPC-only tracks" << std::endl;
479  AliAODTrack testtrackTrue, testtrackFalse;
480  testtrackTrue.SetIsHybridTPCConstrainedGlobal(true);
481 
482  int nfailure = 0;
483  auto result_true = fTrackSelTPConly->IsTrackAccepted(&testtrackTrue);
484  if(!result_true) {
485  AliErrorStream() << "TPC-only constrained track rejected" << std::endl;
486  nfailure++;
487  }
488 
489  auto result_false = fTrackSelTPConly->IsTrackAccepted(&testtrackFalse);
490  if(result_false) {
491  AliErrorStream() << "Non-TPC-only track selected as constrained track" << std::endl;
492  nfailure++;
493  }
494 
495  return nfailure == 0;
496 }
497 
499  if(!data.GetUserInfo()) return nullptr;
500  if(auto hybridinfo = dynamic_cast<const AliEmcalTrackSelResultHybrid *>(data.GetUserInfo())) return hybridinfo;
501  if(auto combinedinfo = dynamic_cast<const AliEmcalTrackSelResultCombined *>(data.GetUserInfo())) {
502  for(int i = 0; i < combinedinfo->GetNumberOfSelectionResults(); i++) {
503  try{
504  auto res = FindHybridSelectionResult((*combinedinfo)[i]);
505  if(res) return res;
507  // just go on
508  }
509  }
510  }
511  return nullptr;
512 }
513 
514 }
515 
516 }
Interface for virtual track selection.
void SetFilterBits(ULong_t filterbits, Bool_t doReset=false)
Set the filter bits to be checked.
TObject * GetObject(const TCollection *parent, const TString &name, const TClass *cls=0, Bool_t verbose=true)
AliEmcalTrackSelectionAOD * fTrackSelHybrid2010wRefit
Hybrid tracks from 2010 including non-refit tracks.
char Char_t
Definition: External.C:18
TObjArray * fListOfCuts
List of track cut objects.
TCanvas * c
Definition: TestFitELoss.C:172
Structure containing the result of a given track selection step.
void AddFilterBit(UInt_t filterbits)
Add a new filter bit to the track selection.
virtual AliEmcalTrackSelResultPtr IsSelected(TObject *o)=0
void SetSelectionResult(Bool_t selectionResult)
Hybrid tracks using the 2011 definition including NoITSrefit tracks (ESD-only)
Hybrid tracks using the 2010 definition including NoITSrefit tracks (ESD-only)
virtual PWG::EMCAL::AliEmcalTrackSelResultPtr IsTrackAccepted(AliVTrack *const trk)
Performing track selection.
unsigned int UInt_t
Definition: External.C:33
Hybrid tracks using the 2010 definition excluding NoITSrefit tracks (ESD-only)
Virtual track selection for TPC-only tracks at AOD level.
Hybrid tracks using the 2011 definition excluding NoITSrefit tracks (ESD-only)
void AddTrackCuts(AliVCuts *cuts)
Add new track cuts to the list of cuts.
Implement virtual track selection for AOD analysis.
Cut class selecting hybrid tracks using the IsHybrid function.
AliVTrack * GetTrack() const
Definition: AliPicoTrack.h:60
AliEmcalTrackSelectionAOD * fTrackSelHybrid2010woRefit
Hybrid tracks from 2010 excluding non-refit tracks.
Bool_t fSelectionModeAny
Accept track if any of the cuts is fulfilled.
Implementation of the AOD filter bit selection as virtual cut class.
ETrackFilterType_t
Pre-defined track filters.
virtual void GenerateTrackCuts(ETrackFilterType_t type, const char *="")
Automatically generates track cuts depending on the requested type of filtering.
static Bool_t GetHybridFilterBits(Char_t bits[], TString period)
Returns the hybrid filter bits according to a hard-coded look-up table.
AliEmcalTrackSelectionAOD * fTrackSelTPConly
TPConly tracks.
AliEmcalTrackSelectionAOD()
Main constructor.
Smart pointer implementation for objects inheriting from TObject.
Interface for a cut class returning selection status and user information.
bool Bool_t
Definition: External.C:53
AliEmcalTrackSelectionAOD * fTrackSelHybrid2011
Hybrid tracks from 2011.
const AliEmcalTrackSelResultHybrid * FindHybridSelectionResult(const AliEmcalTrackSelResultPtr &data) const
Extract hybrid track user object from a track selection result ptr.