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 std::vector<PWG::EMCAL::AliEmcalTrackSelResultPtr> selectionStatus(
fListOfCuts->GetEntries());
175 if (cutresults) trackbitmap.SetBitNumber(cutcounter);
176 selectionStatus.push_back(cutresults);
197 if(
auto vcutswrapper = dynamic_cast<PWG::EMCAL::AliEmcalVCutsWrapper*>(
c)) {
198 if(
auto aodcuts = dynamic_cast<PWG::EMCAL::AliEmcalAODFilterBitCuts *>(vcutswrapper->GetCutObject())){
199 filtercuts = aodcuts;
215 if (period ==
"lhc10b" || period ==
"lhc10c" || period ==
"lhc10d" ||
216 period ==
"lhc10e" || period ==
"lhc10h" ||
217 period ==
"lhc11h" || period ==
"lhc12a" || period ==
"lhc12b" ||
218 period ==
"lhc12c" || period ==
"lhc12d" || period ==
"lhc12e" ||
219 period ==
"lhc12f" || period ==
"lhc12g" || period ==
"lhc12h" ||
220 period ==
"lhc12i" || period ==
"lhc13b" || period ==
"lhc13c" ||
221 period ==
"lhc13d" || period ==
"lhc13e" || period ==
"lhc13f" ||
222 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 ==
"lhc14j4b" || period ==
"lhc14j4c" || period ==
"lhc14j4d" ||
232 period ==
"lhc14j4e" ||
233 period ==
"lhc15i2b" || period ==
"lhc15i2c" || period ==
"lhc15i2d" ||
234 period ==
"lhc15i2e" ||
235 period ==
"lhc15g6b" || period ==
"lhc15g6c" || period ==
"lhc15g6d" ||
236 period ==
"lhc15g6e" ||
237 period ==
"lhc13b4" || period ==
"lhc13b4_fix" || period ==
"lhc13b4_plus" || period ==
"lhc14k1a" || period ==
"lhc14k1b" || period ==
"lhc13e4" ||
238 period.BeginsWith(
"lhc14a1") || period.BeginsWith(
"lhc13b2_efix") ||
239 period.BeginsWith(
"lhc15g6") || period.BeginsWith(
"lhc16c2") || period.BeginsWith(
"lhc16e1") || period.BeginsWith(
"lhc17f8") ||
240 period.BeginsWith(
"lhc18b8") || period.BeginsWith(
"lhc18f5") || period.BeginsWith(
"lhc18g2") || period.BeginsWith(
"lhc17g8a") ||
241 period.BeginsWith(
"lhc19a1")) {
246 else if (period ==
"lhc11a" || period ==
"lhc10hold" || period ==
"lhc11c" || period ==
"lhc11d") {
251 else if (period.Contains(
"lhc12a15a") || period ==
"lhc12a15f" ||
252 period ==
"lhc12a15g" || period.BeginsWith(
"lhc11a1")) {
258 ::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());
271 TestAliEmcalTrackSelectionAOD::TestAliEmcalTrackSelectionAOD() :
273 fTrackSelHybrid2010wRefit(
nullptr),
274 fTrackSelHybrid2010woRefit(
nullptr),
300 AliInfoStream() <<
"Running test for 2010 Definition with non-refit tracks" << std::endl;
301 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
302 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
303 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
304 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
305 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
306 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
307 testCat1WithRefit.SetFilterMap(BIT(8));
308 testCat2WithRefit.SetFilterMap(BIT(4));
309 testCat2WithoutRefit.SetFilterMap(BIT(4));
313 if(!result_cat1_wrefit){
314 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
319 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
323 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
330 if(!result_cat2_wrefit){
331 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
336 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
339 if(hybridcat->IsHybridTrackConstrained()) {
340 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
347 if(!result_cat2_worefit){
348 AliErrorStream() <<
"Hybrid track CAT3 not selected" << std::endl;
353 AliErrorStream() <<
"No hybrid selection result found for CAT3 hybrid track" << std::endl;
357 AliErrorStream() <<
"Incorrect hybrid track type for CAT3 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
365 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
369 return nfailure == 0;
373 AliInfoStream() <<
"Running test for 2010 Definition without non-refit tracks" << std::endl;
374 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
375 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
376 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
377 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
378 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
379 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
380 testCat1WithRefit.SetFilterMap(BIT(8));
381 testCat2WithRefit.SetFilterMap(BIT(4));
382 testCat2WithoutRefit.SetFilterMap(BIT(4));
386 if(!result_cat1_wrefit){
387 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
392 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
396 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
403 if(!result_cat2_wrefit){
404 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
409 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
412 if(hybridcat->IsHybridTrackConstrained()) {
413 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
420 if(result_cat2_worefit){
421 AliErrorStream() <<
"CAT2 track without refit selected as hybrid track in track selection excluding non-refit tracks" << std::endl;
427 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
431 return nfailure == 0;
435 AliInfoStream() <<
"Running test for 2011 Definition" << std::endl;
436 AliAODTrack testCat1, testCat2, testNoHybrid;
437 testCat1.SetIsHybridGlobalConstrainedGlobal();
438 testCat2.SetIsHybridGlobalConstrainedGlobal();
439 testCat1.SetStatus(AliVTrack::kITSrefit);
440 testCat2.SetStatus(AliVTrack::kITSrefit);
441 testCat1.SetFilterMap(BIT(8));
442 testCat2.SetFilterMap(BIT(9));
448 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
453 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
457 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
465 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
470 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
473 if(hybridcat->IsHybridTrackConstrained()) {
474 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
482 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
485 return nfailure == 0;
489 AliInfoStream() <<
"Running test for TPC-only tracks" << std::endl;
490 AliAODTrack testtrackTrue, testtrackFalse;
491 testtrackTrue.SetIsHybridTPCConstrainedGlobal(
true);
496 AliErrorStream() <<
"TPC-only constrained track rejected" << std::endl;
502 AliErrorStream() <<
"Non-TPC-only track selected as constrained track" << std::endl;
506 return nfailure == 0;
511 if(
auto hybridinfo = dynamic_cast<const AliEmcalTrackSelResultHybrid *>(data.
GetUserInfo()))
return hybridinfo;
512 if(
auto combinedinfo = dynamic_cast<const AliEmcalTrackSelResultCombined *>(data.
GetUserInfo())) {
513 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.
Global hybrid track (type I)
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.
Selection result of the hybrid track selection.
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.
Complementary hybrid track without ITS refit (type III)
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.