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" ||
225 (period.Length() == 6 && (period.BeginsWith(
"lhc15") || period.BeginsWith(
"lhc16") || period.BeginsWith(
"lhc17")))
231 else if (period ==
"lhc10f7a" || period ==
"lhc12a15e" || period.BeginsWith(
"lhc12a17") ||
232 period ==
"lhc14j4b" || period ==
"lhc14j4c" || period ==
"lhc14j4d" ||
233 period ==
"lhc14j4e" ||
234 period ==
"lhc15i2b" || period ==
"lhc15i2c" || period ==
"lhc15i2d" ||
235 period ==
"lhc15i2e" ||
236 period ==
"lhc15g6b" || period ==
"lhc15g6c" || period ==
"lhc15g6d" ||
237 period ==
"lhc15g6e" ||
238 period ==
"lhc13b4" || period ==
"lhc13b4_fix" || period ==
"lhc13b4_plus" || period ==
"lhc14k1a" || period ==
"lhc14k1b" || period ==
"lhc13e4" ||
239 period.BeginsWith(
"lhc14a1") || period.BeginsWith(
"lhc13b2_efix") ||
240 period.BeginsWith(
"lhc15g6") || period.BeginsWith(
"lhc16c2") || period.BeginsWith(
"lhc16e1") || period.BeginsWith(
"lhc17f8") || period.BeginsWith(
"lhc18b8") || period.BeginsWith(
"lhc18f5") || period.BeginsWith(
"lhc18g2") || period.BeginsWith(
"lhc17g8a")) {
245 else if (period ==
"lhc11a" || period ==
"lhc10hold" || period ==
"lhc11c" || period ==
"lhc11d") {
250 else if (period.Contains(
"lhc12a15a") || period ==
"lhc12a15f" ||
251 period ==
"lhc12a15g" || period.BeginsWith(
"lhc11a1")) {
257 ::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());
270 TestAliEmcalTrackSelectionAOD::TestAliEmcalTrackSelectionAOD() :
272 fTrackSelHybrid2010wRefit(
nullptr),
273 fTrackSelHybrid2010woRefit(
nullptr),
299 AliInfoStream() <<
"Running test for 2010 Definition with non-refit tracks" << std::endl;
300 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
301 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
302 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
303 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
304 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
305 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
306 testCat1WithRefit.SetFilterMap(BIT(8));
307 testCat2WithRefit.SetFilterMap(BIT(4));
308 testCat2WithoutRefit.SetFilterMap(BIT(4));
312 if(!result_cat1_wrefit){
313 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
318 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
322 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
329 if(!result_cat2_wrefit){
330 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
335 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
338 if(hybridcat->IsHybridTrackConstrained()) {
339 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
346 if(!result_cat2_worefit){
347 AliErrorStream() <<
"Hybrid track CAT3 not selected" << std::endl;
352 AliErrorStream() <<
"No hybrid selection result found for CAT3 hybrid track" << std::endl;
356 AliErrorStream() <<
"Incorrect hybrid track type for CAT3 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
364 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
368 return nfailure == 0;
372 AliInfoStream() <<
"Running test for 2010 Definition without non-refit tracks" << std::endl;
373 AliAODTrack testCat1WithRefit, testCat2WithRefit, testCat2WithoutRefit, testNoHybrid;
374 testCat1WithRefit.SetIsHybridGlobalConstrainedGlobal();
375 testCat2WithRefit.SetIsHybridGlobalConstrainedGlobal();
376 testCat2WithoutRefit.SetIsHybridGlobalConstrainedGlobal();
377 testCat1WithRefit.SetStatus(AliVTrack::kITSrefit);
378 testCat2WithRefit.SetStatus(AliVTrack::kITSrefit);
379 testCat1WithRefit.SetFilterMap(BIT(8));
380 testCat2WithRefit.SetFilterMap(BIT(4));
381 testCat2WithoutRefit.SetFilterMap(BIT(4));
385 if(!result_cat1_wrefit){
386 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
391 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
395 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
402 if(!result_cat2_wrefit){
403 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
408 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
411 if(hybridcat->IsHybridTrackConstrained()) {
412 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
419 if(result_cat2_worefit){
420 AliErrorStream() <<
"CAT2 track without refit selected as hybrid track in track selection excluding non-refit tracks" << std::endl;
426 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
430 return nfailure == 0;
434 AliInfoStream() <<
"Running test for 2011 Definition" << std::endl;
435 AliAODTrack testCat1, testCat2, testNoHybrid;
436 testCat1.SetIsHybridGlobalConstrainedGlobal();
437 testCat2.SetIsHybridGlobalConstrainedGlobal();
438 testCat1.SetStatus(AliVTrack::kITSrefit);
439 testCat2.SetStatus(AliVTrack::kITSrefit);
440 testCat1.SetFilterMap(BIT(8));
441 testCat2.SetFilterMap(BIT(9));
447 AliErrorStream() <<
"Hybrid track CAT1 not selected" << std::endl;
452 AliErrorStream() <<
"No hybrid selection result found for CAT1 hybrid track" << std::endl;
456 AliErrorStream() <<
"Incorrect hybrid track type for CAT1 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
464 AliErrorStream() <<
"Hybrid track CAT2 not selected" << std::endl;
469 AliErrorStream() <<
"No hybrid selection result found for CAT2 hybrid track" << std::endl;
472 if(hybridcat->IsHybridTrackConstrained()) {
473 AliErrorStream() <<
"Incorrect hybrid track type for CAT2 hybrid track: " << hybridcat->GetHybridTrackType() << std::endl;
481 AliErrorStream() <<
"Non-hybrid track selected as hybrid track" << std::endl;
484 return nfailure == 0;
488 AliInfoStream() <<
"Running test for TPC-only tracks" << std::endl;
489 AliAODTrack testtrackTrue, testtrackFalse;
490 testtrackTrue.SetIsHybridTPCConstrainedGlobal(
true);
495 AliErrorStream() <<
"TPC-only constrained track rejected" << std::endl;
501 AliErrorStream() <<
"Non-TPC-only track selected as constrained track" << std::endl;
505 return nfailure == 0;
510 if(
auto hybridinfo = dynamic_cast<const AliEmcalTrackSelResultHybrid *>(data.
GetUserInfo()))
return hybridinfo;
511 if(
auto combinedinfo = dynamic_cast<const AliEmcalTrackSelResultCombined *>(data.
GetUserInfo())) {
512 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.