Skip to content

Commit 3d0cdcd

Browse files
iarseneIonut Cristian Arsenealibuild
authored
[PWGDQ] A few optimizations of the electron cuts, and of the filter-pp with a… (#10747)
Co-authored-by: Ionut Cristian Arsene <iarsene@cern.ch> Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 9bdc841 commit 3d0cdcd

File tree

2 files changed

+48
-105
lines changed

2 files changed

+48
-105
lines changed

PWGDQ/Core/CutsLibrary.cxx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,9 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
6464
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);
6565

6666
AnalysisCut* pidCuts = new AnalysisCut("pidCuts", "pid cuts");
67-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -4.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
68-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -1.5, 4.0, false, VarManager::kPin, 5.0, 10.0);
69-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -1.0, 4.0, false, VarManager::kPin, 10.0, 1000.0);
70-
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kPin, 0.0, 5.0);
67+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -3.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
68+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -1.5, 4.0, false, VarManager::kPin, 5.0, 1000.0);
69+
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);
7170
pidCuts->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);
7271

7372
cut->AddCut(kineCut);
@@ -88,8 +87,8 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
8887
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);
8988

9089
AnalysisCut* pidCuts = new AnalysisCut("pidCuts", "pid cuts");
91-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -4.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
92-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -1.5, 4.0, false, VarManager::kPin, 5.0, 1000.0);
90+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -3.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
91+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 5.0, 1000.0);
9392
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kPin, 0.0, 5.0);
9493
pidCuts->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);
9594

@@ -111,9 +110,8 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
111110
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);
112111

113112
AnalysisCut* pidCuts = new AnalysisCut("pidCuts", "pid cuts");
114-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -4.0, 4.0, false, VarManager::kPin, 0.0, 3.5);
115-
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 3.5, 1000.0);
116-
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kPin, 0.0, 3.5);
113+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.5, 4.0, false, VarManager::kPin, 0.0, 5.0);
114+
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 5.0, 1000.0);
117115
pidCuts->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);
118116

119117
cut->AddCut(kineCut);

PWGDQ/Tasks/filterPPwithAssociation.cxx

Lines changed: 41 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -492,67 +492,6 @@ struct DQMuonsSelection {
492492
PROCESS_SWITCH(DQMuonsSelection, processDummy, "Dummy function", false);
493493
};
494494

495-
/*
496-
struct DQTrackToCollisionAssociation {
497-
498-
Produces<TrackAssoc> association;
499-
Produces<TrackCompColls> reverseIndices;
500-
Produces<FwdTrackAssoc> fwdassociation;
501-
Produces<FwdTrkCompColls> fwdreverseIndices;
502-
503-
// NOTE: the options for the collision associator are common for both the barrel and muon
504-
// We should add separate ones if needed
505-
Configurable<float> nSigmaForTimeCompat{"nSigmaForTimeCompat", 4.f, "number of sigmas for time compatibility"};
506-
Configurable<float> timeMargin{"timeMargin", 0.f, "time margin in ns added to uncertainty because of uncalibrated TPC"};
507-
Configurable<bool> usePVAssociation{"usePVAssociation", true, "if the track is a PV contributor, use the collision time for it"};
508-
Configurable<bool> includeUnassigned{"includeUnassigned", false, "consider also tracks which are not assigned to any collision"};
509-
Configurable<bool> fillTableOfCollIdsPerTrack{"fillTableOfCollIdsPerTrack", false, "fill additional table with vector of collision ids per track"};
510-
Configurable<int> bcWindowForOneSigma{"bcWindowForOneSigma", 60, "BC window to be multiplied by the number of sigmas to define maximum window to be considered"};
511-
512-
CollisionAssociation<true> collisionAssociatorBarrel;
513-
CollisionAssociation<false> collisionAssociatorMuon;
514-
515-
Filter filterBarrelTrackSelected = aod::dqppfilter::isDQBarrelSelected > uint32_t(0);
516-
Filter filterMuonTrackSelected = aod::dqppfilter::isDQMuonSelected > uint32_t(0);
517-
518-
void init(o2::framework::InitContext const&)
519-
{
520-
// set options in track-to-collision association
521-
collisionAssociatorBarrel.setNumSigmaForTimeCompat(nSigmaForTimeCompat);
522-
collisionAssociatorBarrel.setTimeMargin(timeMargin);
523-
collisionAssociatorBarrel.setTrackSelectionOptionForStdAssoc(track_association::TrackSelection::None);
524-
collisionAssociatorBarrel.setUsePvAssociation(usePVAssociation);
525-
collisionAssociatorBarrel.setIncludeUnassigned(includeUnassigned);
526-
collisionAssociatorBarrel.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
527-
collisionAssociatorBarrel.setBcWindow(bcWindowForOneSigma);
528-
// set options in muon-to-collision association
529-
collisionAssociatorMuon.setNumSigmaForTimeCompat(nSigmaForTimeCompat);
530-
collisionAssociatorMuon.setTimeMargin(timeMargin);
531-
collisionAssociatorMuon.setTrackSelectionOptionForStdAssoc(track_association::TrackSelection::None);
532-
collisionAssociatorMuon.setUsePvAssociation(false);
533-
collisionAssociatorMuon.setIncludeUnassigned(includeUnassigned);
534-
collisionAssociatorMuon.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
535-
collisionAssociatorMuon.setBcWindow(bcWindowForOneSigma);
536-
}
537-
538-
void processAssocWithTime(Collisions const& collisions,
539-
MyBarrelTracksSelected const& tracksUnfiltered, soa::Filtered<MyBarrelTracksSelected> const& tracks,
540-
FwdTracks const& muons,
541-
AmbiguousTracks const& ambiguousTracks, AmbiguousFwdTracks const& ambiguousFwdTracks, BCs const& bcs)
542-
{
543-
collisionAssociatorBarrel.runAssocWithTime(collisions, tracksUnfiltered, tracks, ambiguousTracks, bcs, association, reverseIndices);
544-
collisionAssociatorMuon.runAssocWithTime(collisions, muons, muons, ambiguousFwdTracks, bcs, fwdassociation, fwdreverseIndices);
545-
};
546-
void processDummy(Collisions&)
547-
{
548-
// do nothing
549-
}
550-
551-
PROCESS_SWITCH(DQTrackToCollisionAssociation, processAssocWithTime, "Produce track-to-collision associations based on time", false);
552-
PROCESS_SWITCH(DQTrackToCollisionAssociation, processDummy, "Dummy function", false);
553-
};
554-
*/
555-
556495
struct DQFilterPPTask {
557496
Produces<aod::DQEventFilter> eventFilter;
558497
Produces<aod::DqFilters> dqtable;
@@ -596,6 +535,10 @@ struct DQFilterPPTask {
596535
std::map<uint64_t, uint64_t> fFiltersMap; // map of filters for events that passed at least one filter
597536
std::map<uint64_t, std::vector<bool>> fCEFPfilters; // map of CEFP filters for events that passed at least one filter
598537

538+
uint32_t fPairingLSBarrel; // used to set in which cut setting LS pairs will be analysed
539+
uint32_t fPairingLSMuon; // used to set in which cut setting LS pairs will be analysed
540+
uint32_t fPairingLSBarrelMuon; // used to set in which cut setting LS pairs will be analysed
541+
599542
void DefineCuts()
600543
{
601544
TString barrelSelsStr = fConfigBarrelSelections.value;
@@ -699,6 +642,39 @@ struct DQFilterPPTask {
699642
}
700643
DefineCuts();
701644

645+
// check which selection should use like sign (LS) (--/++) barrel track pairs
646+
fPairingLSBarrel = 0;
647+
TString barrelLSstr = fConfigFilterLsBarrelTracksPairs.value;
648+
std::unique_ptr<TObjArray> objArrayLS(barrelLSstr.Tokenize(","));
649+
for (int icut = 0; icut < fNBarrelCuts; icut++) {
650+
TString objStr = objArrayLS->At(icut)->GetName();
651+
if (!objStr.CompareTo("true")) {
652+
fPairingLSBarrel |= (static_cast<uint32_t>(1) << icut);
653+
}
654+
}
655+
656+
// check which selection should use like sign (LS) (--/++) muon track pairs
657+
fPairingLSMuon = 0;
658+
TString musonLSstr = fConfigFilterLsMuonsPairs.value;
659+
std::unique_ptr<TObjArray> objArrayMuonLS(musonLSstr.Tokenize(","));
660+
for (int icut = 0; icut < fNMuonCuts; icut++) {
661+
TString objStr = objArrayMuonLS->At(icut)->GetName();
662+
if (!objStr.CompareTo("true")) {
663+
fPairingLSMuon |= (static_cast<uint32_t>(1) << icut);
664+
}
665+
}
666+
667+
// check which selection should use like sign (LS) (--/++) muon-barrel pairs
668+
fPairingLSBarrelMuon = 0; // reset the decisions for electron-muons
669+
TString electronMuonLSstr = fConfigFilterLsElectronMuonsPairs.value;
670+
std::unique_ptr<TObjArray> objArrayElectronMuonLS(electronMuonLSstr.Tokenize(","));
671+
for (int icut = 0; icut < fNElectronMuonCuts; icut++) {
672+
TString objStr = objArrayElectronMuonLS->At(icut)->GetName();
673+
if (!objStr.CompareTo("true")) {
674+
fPairingLSBarrelMuon |= (static_cast<uint32_t>(1) << icut);
675+
}
676+
}
677+
702678
if (fConfigQA) {
703679
// initialize the variable manager
704680
VarManager::SetDefaultVarNames();
@@ -748,7 +724,6 @@ struct DQFilterPPTask {
748724

749725
std::vector<int> objCountersBarrel(fNBarrelCuts, 0); // init all counters to zero
750726
uint32_t pairingMask = 0; // in order to know which of the selections actually require pairing
751-
uint32_t pairingLS = 0; // used to set in which cut setting LS pairs will be analysed
752727
uint32_t pairFilter = 0;
753728
// count the number of barrel tracks fulfilling each cut
754729
if constexpr (static_cast<bool>(TTrackFillMap)) {
@@ -770,16 +745,6 @@ struct DQFilterPPTask {
770745
}
771746
}
772747

773-
// check which selection should use like sign (LS) (--/++) barrel track pairs
774-
TString barrelLSstr = fConfigFilterLsBarrelTracksPairs.value;
775-
std::unique_ptr<TObjArray> objArrayLS(barrelLSstr.Tokenize(","));
776-
for (int icut = 0; icut < fNBarrelCuts; icut++) {
777-
TString objStr = objArrayLS->At(icut)->GetName();
778-
if (!objStr.CompareTo("true")) {
779-
pairingLS |= (static_cast<uint32_t>(1) << icut);
780-
}
781-
}
782-
783748
// run pairing if there is at least one selection that requires it
784749
if (pairingMask > 0) {
785750
// run pairing on the collision grouped associations
@@ -798,7 +763,7 @@ struct DQFilterPPTask {
798763
VarManager::FillPair<VarManager::kDecayToEE, TTrackFillMap>(t1, t2); // compute pair quantities
799764
for (int icut = 0; icut < fNBarrelCuts; icut++) {
800765
// select like-sign pairs if trigger has set boolean true within fConfigFilterLsBarrelTracksPairs
801-
if (!(pairingLS & (static_cast<uint32_t>(1) << icut))) {
766+
if (!(fPairingLSBarrel & (static_cast<uint32_t>(1) << icut))) {
802767
if (t1.sign() * t2.sign() > 0) {
803768
continue;
804769
}
@@ -812,6 +777,7 @@ struct DQFilterPPTask {
812777
}
813778
objCountersBarrel[icut] += 1; // count the pair
814779
if (fConfigQA) { // fill histograms if QA is enabled
780+
// cout << "=========== filling pair for collision " << collision.globalIndex() << endl;
815781
fHistMan->FillHistClass(fBarrelPairHistNames[icut].Data(), VarManager::fgValues);
816782
}
817783
}
@@ -841,17 +807,6 @@ struct DQFilterPPTask {
841807
}
842808
}
843809

844-
// check which selection should use like sign (LS) (--/++) muon track pairs
845-
pairingLS = 0; // reset the decisions for muons
846-
TString musonLSstr = fConfigFilterLsMuonsPairs.value;
847-
std::unique_ptr<TObjArray> objArrayMuonLS(musonLSstr.Tokenize(","));
848-
for (int icut = 0; icut < fNMuonCuts; icut++) {
849-
TString objStr = objArrayMuonLS->At(icut)->GetName();
850-
if (!objStr.CompareTo("true")) {
851-
pairingLS |= (static_cast<uint32_t>(1) << icut);
852-
}
853-
}
854-
855810
// run pairing if there is at least one selection that requires it
856811
pairFilter = 0;
857812
if (pairingMask > 0) {
@@ -875,7 +830,7 @@ struct DQFilterPPTask {
875830
}
876831
for (int icut = 0; icut < fNMuonCuts; icut++) {
877832
// select like-sign pairs if trigger has set boolean true within fConfigFilterLsMuonsPairs
878-
if (!(pairingLS & (static_cast<uint32_t>(1) << icut))) {
833+
if (!(fPairingLSMuon & (static_cast<uint32_t>(1) << icut))) {
879834
if (t1.sign() * t2.sign() > 0) {
880835
continue;
881836
}
@@ -908,16 +863,6 @@ struct DQFilterPPTask {
908863
}
909864
}
910865
}
911-
// check which selection should use like sign (LS) (--/++) muon track pairs
912-
pairingLS = 0; // reset the decisions for electron-muons
913-
TString electronMuonLSstr = fConfigFilterLsElectronMuonsPairs.value;
914-
std::unique_ptr<TObjArray> objArrayElectronMuonLS(electronMuonLSstr.Tokenize(","));
915-
for (int icut = 0; icut < fNElectronMuonCuts; icut++) {
916-
TString objStr = objArrayElectronMuonLS->At(icut)->GetName();
917-
if (!objStr.CompareTo("true")) {
918-
pairingLS |= (static_cast<uint32_t>(1) << icut);
919-
}
920-
}
921866

922867
// run pairing if there is at least one selection that requires it
923868
pairFilter = 0;
@@ -936,7 +881,7 @@ struct DQFilterPPTask {
936881
VarManager::FillPair<VarManager::kElectronMuon, TTrackFillMap>(t1, t2); // compute pair quantities
937882
for (int icut = 0; icut < fNElectronMuonCuts; icut++) {
938883
// select like-sign pairs if trigger has set boolean true within fConfigFilterLsElectronMuonsPairs
939-
if (!(pairingLS & (static_cast<uint32_t>(1) << icut))) {
884+
if (!(fPairingLSBarrelMuon & (static_cast<uint32_t>(1) << icut))) {
940885
if (t1.sign() * t2.sign() > 0) {
941886
continue;
942887
}

0 commit comments

Comments
 (0)