Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions PWGDQ/Core/CutsLibrary.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <TF1.h>
#include <vector>
#include <string>
#include <iostream>

Check warning on line 19 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[include-iostream]

Do not include iostream. Use O2 logging instead.
#include "AnalysisCompositeCut.h"
#include "VarManager.h"

Expand Down Expand Up @@ -64,10 +64,9 @@
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);

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

cut->AddCut(kineCut);
Expand All @@ -88,8 +87,8 @@
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);

AnalysisCut* pidCuts = new AnalysisCut("pidCuts", "pid cuts");
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -4.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -1.5, 4.0, false, VarManager::kPin, 5.0, 1000.0);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -3.0, 4.0, false, VarManager::kPin, 0.0, 5.0);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 5.0, 1000.0);
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kPin, 0.0, 5.0);
pidCuts->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);

Expand All @@ -111,9 +110,8 @@
qualityCuts->AddCut(VarManager::kTrackDCAz, -0.5, 0.5);

AnalysisCut* pidCuts = new AnalysisCut("pidCuts", "pid cuts");
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -4.0, 4.0, false, VarManager::kPin, 0.0, 3.5);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 3.5, 1000.0);
pidCuts->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kPin, 0.0, 3.5);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.5, 4.0, false, VarManager::kPin, 0.0, 5.0);
pidCuts->AddCut(VarManager::kTPCnSigmaEl, -2.0, 4.0, false, VarManager::kPin, 5.0, 1000.0);
pidCuts->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kPin, 0.0, 5.0);

cut->AddCut(kineCut);
Expand Down Expand Up @@ -1111,7 +1109,7 @@
return cut;
}

for (int iCut = 0; iCut < 10; iCut++) {

Check warning on line 1112 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
if (!nameStr.compare(Form("jpsiEleSel%d_ionut", iCut))) {
cut->AddCut(GetAnalysisCut("kineJpsiEle_ionut"));
cut->AddCut(GetAnalysisCut("dcaCut1_ionut"));
Expand Down Expand Up @@ -1411,7 +1409,7 @@
return cut;
}

for (int i = 1; i <= 8; i++) {

Check warning on line 1412 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
if (!nameStr.compare(Form("dalitzSelected%d", i))) {
cut->AddCut(GetAnalysisCut(Form("dalitzLeg%d", i)));
return cut;
Expand Down Expand Up @@ -1913,7 +1911,7 @@
return cut;
}

for (unsigned int i = 0; i < 30; i++) {

Check warning on line 1914 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
if (!nameStr.compare(Form("ElSelCutVar%s%i", vecPIDcase.at(icase).Data(), i))) {
cut->AddCut(GetAnalysisCut("lmeeStandardKine"));
cut->AddCut(GetAnalysisCut(Form("lmeeCutVarTrackCuts%i", i)));
Expand Down Expand Up @@ -2683,7 +2681,7 @@
return cut;
}

for (int i = 1; i <= 8; i++) {

Check warning on line 2684 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
if (!nameStr.compare(Form("lmee%s_pp502TeV_PID%s_UsePrefilter%d", vecTypetrackWithPID.at(jcase).Data(), vecPIDcase.at(icase).Data(), i))) {
cut->AddCut(GetAnalysisCut(Form("notDalitzLeg%d", i)));
cut->AddCut(GetAnalysisCut("lmeeStandardKine"));
Expand Down Expand Up @@ -2740,7 +2738,7 @@
return cut;
}

for (int i = 1; i <= 8; i++) {

Check warning on line 2741 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
if (!nameStr.compare(Form("lmee%s_eNSigmaRun3%s_UsePrefilter%d", vecTypetrackWithPID.at(jcase).Data(), vecPIDcase.at(icase).Data(), i))) {
cut->AddCut(GetAnalysisCut(Form("notDalitzLeg%d", i)));
cut->AddCut(GetAnalysisCut("lmeeStandardKine"));
Expand Down Expand Up @@ -4451,20 +4449,20 @@
cut->AddCut(VarManager::kITSncls, 6.5, 7.5);
cut->AddCut(VarManager::kTPCnclsCR, 80.0, 161.);
cut->AddCut(VarManager::kTPCncls, 90.0, 170.);
} else if (icase == 2) {

Check warning on line 4452 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
cut->AddCut(VarManager::kIsSPDfirst, 0.5, 1.5);
cut->AddCut(VarManager::kITSchi2, 0.0, 5.0);
cut->AddCut(VarManager::kITSncls, 4.5, 7.5);
} else if (icase == 3) {

Check warning on line 4456 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
cut->AddCut(VarManager::kIsSPDfirst, 0.5, 1.5);
cut->AddCut(VarManager::kITSchi2, 0.0, 5.0);
cut->AddCut(VarManager::kITSncls, 4.5, 7.5);
cut->AddCut(VarManager::kHasTPC, -0.5, 0.5);
} else if (icase == 4) {

Check warning on line 4461 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
cut->AddCut(VarManager::kTPCchi2, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnclsCR, 80.0, 161.);
cut->AddCut(VarManager::kTPCncls, 90.0, 170.);
} else if (icase == 5) {

Check warning on line 4465 in PWGDQ/Core/CutsLibrary.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
cut->AddCut(VarManager::kTPCchi2, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnclsCR, 80.0, 161.);
cut->AddCut(VarManager::kTPCncls, 90.0, 170.);
Expand Down
137 changes: 41 additions & 96 deletions PWGDQ/Tasks/filterPPwithAssociation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -492,67 +492,6 @@ struct DQMuonsSelection {
PROCESS_SWITCH(DQMuonsSelection, processDummy, "Dummy function", false);
};

/*
struct DQTrackToCollisionAssociation {

Produces<TrackAssoc> association;
Produces<TrackCompColls> reverseIndices;
Produces<FwdTrackAssoc> fwdassociation;
Produces<FwdTrkCompColls> fwdreverseIndices;

// NOTE: the options for the collision associator are common for both the barrel and muon
// We should add separate ones if needed
Configurable<float> nSigmaForTimeCompat{"nSigmaForTimeCompat", 4.f, "number of sigmas for time compatibility"};
Configurable<float> timeMargin{"timeMargin", 0.f, "time margin in ns added to uncertainty because of uncalibrated TPC"};
Configurable<bool> usePVAssociation{"usePVAssociation", true, "if the track is a PV contributor, use the collision time for it"};
Configurable<bool> includeUnassigned{"includeUnassigned", false, "consider also tracks which are not assigned to any collision"};
Configurable<bool> fillTableOfCollIdsPerTrack{"fillTableOfCollIdsPerTrack", false, "fill additional table with vector of collision ids per track"};
Configurable<int> bcWindowForOneSigma{"bcWindowForOneSigma", 60, "BC window to be multiplied by the number of sigmas to define maximum window to be considered"};

CollisionAssociation<true> collisionAssociatorBarrel;
CollisionAssociation<false> collisionAssociatorMuon;

Filter filterBarrelTrackSelected = aod::dqppfilter::isDQBarrelSelected > uint32_t(0);
Filter filterMuonTrackSelected = aod::dqppfilter::isDQMuonSelected > uint32_t(0);

void init(o2::framework::InitContext const&)
{
// set options in track-to-collision association
collisionAssociatorBarrel.setNumSigmaForTimeCompat(nSigmaForTimeCompat);
collisionAssociatorBarrel.setTimeMargin(timeMargin);
collisionAssociatorBarrel.setTrackSelectionOptionForStdAssoc(track_association::TrackSelection::None);
collisionAssociatorBarrel.setUsePvAssociation(usePVAssociation);
collisionAssociatorBarrel.setIncludeUnassigned(includeUnassigned);
collisionAssociatorBarrel.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
collisionAssociatorBarrel.setBcWindow(bcWindowForOneSigma);
// set options in muon-to-collision association
collisionAssociatorMuon.setNumSigmaForTimeCompat(nSigmaForTimeCompat);
collisionAssociatorMuon.setTimeMargin(timeMargin);
collisionAssociatorMuon.setTrackSelectionOptionForStdAssoc(track_association::TrackSelection::None);
collisionAssociatorMuon.setUsePvAssociation(false);
collisionAssociatorMuon.setIncludeUnassigned(includeUnassigned);
collisionAssociatorMuon.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
collisionAssociatorMuon.setBcWindow(bcWindowForOneSigma);
}

void processAssocWithTime(Collisions const& collisions,
MyBarrelTracksSelected const& tracksUnfiltered, soa::Filtered<MyBarrelTracksSelected> const& tracks,
FwdTracks const& muons,
AmbiguousTracks const& ambiguousTracks, AmbiguousFwdTracks const& ambiguousFwdTracks, BCs const& bcs)
{
collisionAssociatorBarrel.runAssocWithTime(collisions, tracksUnfiltered, tracks, ambiguousTracks, bcs, association, reverseIndices);
collisionAssociatorMuon.runAssocWithTime(collisions, muons, muons, ambiguousFwdTracks, bcs, fwdassociation, fwdreverseIndices);
};
void processDummy(Collisions&)
{
// do nothing
}

PROCESS_SWITCH(DQTrackToCollisionAssociation, processAssocWithTime, "Produce track-to-collision associations based on time", false);
PROCESS_SWITCH(DQTrackToCollisionAssociation, processDummy, "Dummy function", false);
};
*/

struct DQFilterPPTask {
Produces<aod::DQEventFilter> eventFilter;
Produces<aod::DqFilters> dqtable;
Expand Down Expand Up @@ -596,6 +535,10 @@ struct DQFilterPPTask {
std::map<uint64_t, uint64_t> fFiltersMap; // map of filters for events that passed at least one filter
std::map<uint64_t, std::vector<bool>> fCEFPfilters; // map of CEFP filters for events that passed at least one filter

uint32_t fPairingLSBarrel; // used to set in which cut setting LS pairs will be analysed
uint32_t fPairingLSMuon; // used to set in which cut setting LS pairs will be analysed
uint32_t fPairingLSBarrelMuon; // used to set in which cut setting LS pairs will be analysed

void DefineCuts()
{
TString barrelSelsStr = fConfigBarrelSelections.value;
Expand Down Expand Up @@ -699,6 +642,39 @@ struct DQFilterPPTask {
}
DefineCuts();

// check which selection should use like sign (LS) (--/++) barrel track pairs
fPairingLSBarrel = 0;
TString barrelLSstr = fConfigFilterLsBarrelTracksPairs.value;
std::unique_ptr<TObjArray> objArrayLS(barrelLSstr.Tokenize(","));
for (int icut = 0; icut < fNBarrelCuts; icut++) {
TString objStr = objArrayLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
fPairingLSBarrel |= (static_cast<uint32_t>(1) << icut);
}
}

// check which selection should use like sign (LS) (--/++) muon track pairs
fPairingLSMuon = 0;
TString musonLSstr = fConfigFilterLsMuonsPairs.value;
std::unique_ptr<TObjArray> objArrayMuonLS(musonLSstr.Tokenize(","));
for (int icut = 0; icut < fNMuonCuts; icut++) {
TString objStr = objArrayMuonLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
fPairingLSMuon |= (static_cast<uint32_t>(1) << icut);
}
}

// check which selection should use like sign (LS) (--/++) muon-barrel pairs
fPairingLSBarrelMuon = 0; // reset the decisions for electron-muons
TString electronMuonLSstr = fConfigFilterLsElectronMuonsPairs.value;
std::unique_ptr<TObjArray> objArrayElectronMuonLS(electronMuonLSstr.Tokenize(","));
for (int icut = 0; icut < fNElectronMuonCuts; icut++) {
TString objStr = objArrayElectronMuonLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
fPairingLSBarrelMuon |= (static_cast<uint32_t>(1) << icut);
}
}

if (fConfigQA) {
// initialize the variable manager
VarManager::SetDefaultVarNames();
Expand Down Expand Up @@ -748,7 +724,6 @@ struct DQFilterPPTask {

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

// check which selection should use like sign (LS) (--/++) barrel track pairs
TString barrelLSstr = fConfigFilterLsBarrelTracksPairs.value;
std::unique_ptr<TObjArray> objArrayLS(barrelLSstr.Tokenize(","));
for (int icut = 0; icut < fNBarrelCuts; icut++) {
TString objStr = objArrayLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
pairingLS |= (static_cast<uint32_t>(1) << icut);
}
}

// run pairing if there is at least one selection that requires it
if (pairingMask > 0) {
// run pairing on the collision grouped associations
Expand All @@ -798,7 +763,7 @@ struct DQFilterPPTask {
VarManager::FillPair<VarManager::kDecayToEE, TTrackFillMap>(t1, t2); // compute pair quantities
for (int icut = 0; icut < fNBarrelCuts; icut++) {
// select like-sign pairs if trigger has set boolean true within fConfigFilterLsBarrelTracksPairs
if (!(pairingLS & (static_cast<uint32_t>(1) << icut))) {
if (!(fPairingLSBarrel & (static_cast<uint32_t>(1) << icut))) {
if (t1.sign() * t2.sign() > 0) {
continue;
}
Expand All @@ -812,6 +777,7 @@ struct DQFilterPPTask {
}
objCountersBarrel[icut] += 1; // count the pair
if (fConfigQA) { // fill histograms if QA is enabled
// cout << "=========== filling pair for collision " << collision.globalIndex() << endl;
fHistMan->FillHistClass(fBarrelPairHistNames[icut].Data(), VarManager::fgValues);
}
}
Expand Down Expand Up @@ -841,17 +807,6 @@ struct DQFilterPPTask {
}
}

// check which selection should use like sign (LS) (--/++) muon track pairs
pairingLS = 0; // reset the decisions for muons
TString musonLSstr = fConfigFilterLsMuonsPairs.value;
std::unique_ptr<TObjArray> objArrayMuonLS(musonLSstr.Tokenize(","));
for (int icut = 0; icut < fNMuonCuts; icut++) {
TString objStr = objArrayMuonLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
pairingLS |= (static_cast<uint32_t>(1) << icut);
}
}

// run pairing if there is at least one selection that requires it
pairFilter = 0;
if (pairingMask > 0) {
Expand All @@ -875,7 +830,7 @@ struct DQFilterPPTask {
}
for (int icut = 0; icut < fNMuonCuts; icut++) {
// select like-sign pairs if trigger has set boolean true within fConfigFilterLsMuonsPairs
if (!(pairingLS & (static_cast<uint32_t>(1) << icut))) {
if (!(fPairingLSMuon & (static_cast<uint32_t>(1) << icut))) {
if (t1.sign() * t2.sign() > 0) {
continue;
}
Expand Down Expand Up @@ -908,16 +863,6 @@ struct DQFilterPPTask {
}
}
}
// check which selection should use like sign (LS) (--/++) muon track pairs
pairingLS = 0; // reset the decisions for electron-muons
TString electronMuonLSstr = fConfigFilterLsElectronMuonsPairs.value;
std::unique_ptr<TObjArray> objArrayElectronMuonLS(electronMuonLSstr.Tokenize(","));
for (int icut = 0; icut < fNElectronMuonCuts; icut++) {
TString objStr = objArrayElectronMuonLS->At(icut)->GetName();
if (!objStr.CompareTo("true")) {
pairingLS |= (static_cast<uint32_t>(1) << icut);
}
}

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