29 #include <TClonesArray.h> 31 #include <TObjArray.h> 33 #include "AliAODEvent.h" 34 #include "AliAODTrack.h" 43 #include "AliESDtrackCuts.h" 65 filterbitcuts->SetFilterBits(filterbits,
true);
84 hybridcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
98 AddTrackCuts(AliESDtrackCuts::GetStandardITSSATrackCuts2010());
107 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
117 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
118 trackcuts->SetSelectNonITSrefitTracks(kFALSE);
128 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
138 trackcuts->SetHybridFilterBits(hybridbits[0], hybridbits[1]);
139 trackcuts->SetSelectNonITSrefitTracks(kFALSE);
151 AliAODTrack *aodt =
dynamic_cast<AliAODTrack*
>(trk);
155 aodt =
dynamic_cast<AliAODTrack *
>(picotrack->
GetTrack());
158 AliError(
"Track neither AOD track nor pico track");
163 AliError(
"Failed getting AOD track");
167 TBits trackbitmap(64);
168 trackbitmap.ResetAllBits();
170 TClonesArray selectionStatus(
"PWG::EMCAL::AliEmcalTrackSelResultPtr",
fListOfCuts->GetEntries());
171 selectionStatus.SetOwner(kTRUE);
176 if (cutresults) trackbitmap.SetBitNumber(cutcounter);
198 if(
auto vcutswrapper = dynamic_cast<PWG::EMCAL::AliEmcalVCutsWrapper*>(
c)) {
199 if(
auto aodcuts = dynamic_cast<PWG::EMCAL::AliEmcalAODFilterBitCuts *>(vcutswrapper->GetCutObject())){
200 filtercuts = aodcuts;
216 if (period ==
"lhc10b" || period ==
"lhc10c" || period ==
"lhc10d" ||
217 period ==
"lhc10e" || period ==
"lhc10h" ||
218 period ==
"lhc11h" || period ==
"lhc12a" || period ==
"lhc12b" ||
219 period ==
"lhc12c" || period ==
"lhc12d" || period ==
"lhc12e" ||
220 period ==
"lhc12f" || period ==
"lhc12g" || period ==
"lhc12h" ||
221 period ==
"lhc12i" || period ==
"lhc13b" || period ==
"lhc13c" ||
222 period ==
"lhc13d" || period ==
"lhc13e" || period ==
"lhc13f" ||
223 period ==
"lhc13g" ||
224 (period.Length() == 6 && (period.BeginsWith(
"lhc15") || period.BeginsWith(
"lhc16") || period.BeginsWith(
"lhc17")))
230 else if (period ==
"lhc10f7a" || period ==
"lhc12a15e" || period.BeginsWith(
"lhc12a17") ||
231 period ==
"lhc13b4" || period ==
"lhc13b4_fix" || period ==
"lhc13b4_plus" || period ==
"lhc14k1a" || period ==
"lhc14k1b" || period ==
"lhc13e4" ||
232 period.BeginsWith(
"lhc14a1") || period.BeginsWith(
"lhc13b2_efix") ||
233 period.BeginsWith(
"lhc15g6") || period.BeginsWith(
"lhc16e1") || period.BeginsWith(
"lhc17f8")) {
238 else if (period ==
"lhc11a" || period ==
"lhc10hold" || period ==
"lhc11c" || period ==
"lhc11d") {
243 else if (period.Contains(
"lhc12a15a") || period ==
"lhc12a15f" ||
244 period ==
"lhc12a15g" || period.BeginsWith(
"lhc11a1")) {
250 ::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());
263 TestAliEmcalTrackSelectionAOD::TestAliEmcalTrackSelectionAOD() :
265 fTrackSelHybrid2010wRefit(
nullptr),
266 fTrackSelHybrid2010woRefit(
nullptr),
292 AliInfoStream() <<
"Running test for 2010 Definition with non-refit tracks" << std::endl;
293 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
294 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
295 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
296 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
297 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
298 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
299 testCat1WithRefit.SetFilterMap(BIT(8));
300 testCat2WithRefit.SetFilterMap(BIT(4));
301 testCat2WithoutRefit.SetFilterMap(BIT(4));
305 if(!result_cat1_wrefit){
306 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
311 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
315 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
322 if(!result_cat2_wrefit){
323 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
328 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
332 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
339 if(!result_cat2_worefit){
340 AliErrorStream() <<
"Hybrid track CAT3 not selected" << std::endl;
345 AliErrorStream() <<
"No hybrid selection result found for CAT3 hybrid track" << std::endl;
349 AliErrorStream() <<
"Incorrect hybrid track type for CAT3 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
357 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
361 return nfailure == 0;
365 AliInfoStream() <<
"Running test for 2010 Definition without non-refit tracks" << std::endl;
366 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
367 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
368 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
369 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
370 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
371 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
372 testCat1WithRefit.SetFilterMap(BIT(8));
373 testCat2WithRefit.SetFilterMap(BIT(4));
374 testCat2WithoutRefit.SetFilterMap(BIT(4));
378 if(!result_cat1_wrefit){
379 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
384 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
388 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
395 if(!result_cat2_wrefit){
396 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
401 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
405 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
412 if(result_cat2_worefit){
413 AliErrorStream() <<
"CAT2 track without refit selected as hybrid track in track selection excluding non-refit tracks" << std::endl;
419 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
423 return nfailure == 0;
427 AliInfoStream() <<
"Running test for 2011 Definition" << std::endl;
428 AliAODTrack testCat1, testCat2, testNoHybrid;
429 testCat1.SetIsHybridGlobalConstrainedGlobal();
430 testCat2.SetIsHybridGlobalConstrainedGlobal();
431 testCat1.SetStatus(AliVTrack::kITSrefit);
432 testCat2.SetStatus(AliVTrack::kITSrefit);
433 testCat1.SetFilterMap(BIT(8));
434 testCat2.SetFilterMap(BIT(9));
440 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
445 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
449 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
457 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
462 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
466 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
474 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
477 return nfailure == 0;
481 AliInfoStream() <<
"Running test for TPC-only tracks" << std::endl;
482 AliAODTrack testtrackTrue, testtrackFalse;
483 testtrackTrue.SetIsHybridTPCConstrainedGlobal(
true);
488 AliErrorStream() <<
"TPC-only constrained track rejected" << std::endl;
494 AliErrorStream() <<
"Non-TPC-only track selected as constrained track" << std::endl;
498 return nfailure == 0;
503 if(
auto hybridinfo = dynamic_cast<const AliEmcalTrackSelResultHybrid *>(data.
GetUserInfo()))
return hybridinfo;
504 if(
auto combinedinfo = dynamic_cast<const AliEmcalTrackSelResultCombined *>(data.
GetUserInfo())) {
505 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)
Namespace for EMCAL framework classes and task.
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)
Namespace for PWG framework classes.
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.
Unit test for the class AliEmcalTrackSelectionAOD.