29 #include <TClonesArray.h>
31 #include <TObjArray.h>
33 #include "AliAODEvent.h"
34 #include "AliAODTrack.h"
43 #include "AliESDtrackCuts.h"
49 ClassImp(PWG::EMCAL::TestAliEmcalTrackSelectionAOD)
63 filterbitcuts->SetFilterBits(filterbits,
true);
82 hybridcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
96 AddTrackCuts(AliESDtrackCuts::GetStandardITSSATrackCuts2010());
105 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
115 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
116 trackcuts->SetSelectNonITSrefitTracks(kFALSE);
126 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
136 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
137 trackcuts->SetSelectNonITSrefitTracks(kFALSE);
149 AliAODTrack *aodt =
dynamic_cast<AliAODTrack*
>(trk);
153 aodt =
dynamic_cast<AliAODTrack *
>(picotrack->
GetTrack());
156 AliError(
"Track neither AOD track nor pico track");
161 AliError(
"Failed getting AOD track");
165 TBits trackbitmap(64);
166 trackbitmap.ResetAllBits();
173 if (cutresults) trackbitmap.SetBitNumber(cutcounter);
174 selectionStatus.Add(&cutresults);
195 if(
auto vcutswrapper = dynamic_cast<PWG::EMCAL::AliEmcalVCutsWrapper*>(
c)) {
196 if(
auto aodcuts = dynamic_cast<PWG::EMCAL::AliEmcalAODFilterBitCuts *>(vcutswrapper->GetCutObject())){
197 filtercuts = aodcuts;
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")))
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")) {
235 else if (period ==
"lhc11a" || period ==
"lhc10hold" || period ==
"lhc11c" || period ==
"lhc11d") {
240 else if (period.Contains(
"lhc12a15a") || period ==
"lhc12a15f" ||
241 period ==
"lhc12a15g" || period.BeginsWith(
"lhc11a1")) {
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());
262 fTrackSelHybrid2010wRefit(
nullptr),
263 fTrackSelHybrid2010woRefit(
nullptr),
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));
302 if(!result_cat1_wrefit){
303 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
308 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
312 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
319 if(!result_cat2_wrefit){
320 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
325 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
329 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
336 if(!result_cat2_worefit){
337 AliErrorStream() <<
"Hybrid track CAT3 not selected" << std::endl;
342 AliErrorStream() <<
"No hybrid selection result found for CAT3 hybrid track" << std::endl;
346 AliErrorStream() <<
"Incorrect hybrid track type for CAT3 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
354 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
358 return nfailure == 0;
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));
375 if(!result_cat1_wrefit){
376 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
381 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
385 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
392 if(!result_cat2_wrefit){
393 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
398 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
402 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
409 if(result_cat2_worefit){
410 AliErrorStream() <<
"CAT2 track without refit selected as hybrid track in track selection excluding non-refit tracks" << std::endl;
416 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
420 return nfailure == 0;
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));
437 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
442 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
446 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
454 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
459 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
463 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
471 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
474 return nfailure == 0;
478 AliInfoStream() <<
"Running test for TPC-only tracks" << std::endl;
479 AliAODTrack testtrackTrue, testtrackFalse;
480 testtrackTrue.SetIsHybridTPCConstrainedGlobal(
true);
485 AliErrorStream() <<
"TPC-only constrained track rejected" << std::endl;
491 AliErrorStream() <<
"Non-TPC-only track selected as constrained track" << std::endl;
495 return nfailure == 0;
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++) {
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)
void Init()
Init test suite.
bool TestHybridDef2010wRefit() const
AliEmcalTrackSelectionAOD * fTrackSelHybrid2010wRefit
Hybrid tracks from 2010 including non-refit tracks.
TObjArray * fListOfCuts
List of track cut objects.
virtual ~TestAliEmcalTrackSelectionAOD()
Destructor.
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
bool TestHybridDef2010woRefit() const
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.
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)
TestAliEmcalTrackSelectionAOD()
Constructor.
void AddTrackCuts(AliVCuts *cuts)
Add new track cuts to the list of cuts.
Implement virtual track selection for AOD analysis.
const TObject * GetUserInfo() const
Cut class selecting hybrid tracks using the IsHybrid function.
AliVTrack * GetTrack() const
AliEmcalTrackSelectionAOD * fTrackSelHybrid2010woRefit
Hybrid tracks from 2010 excluding non-refit tracks.
bool TestHybridDef2011() const
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.
bool RunAllTests() const
Run all tests.
Smart pointer implementation for objects inheriting from TObject.
Interface for a cut class returning selection status and user information.
AliEmcalTrackSelectionAOD * fTrackSelHybrid2011
Hybrid tracks from 2011.
const AliEmcalTrackSelResultHybrid * FindHybridSelectionResult(const AliEmcalTrackSelResultPtr &data) const
Extract hybrid track user object from a track selection result ptr.