Skip to content

Commit

Permalink
[PWGJE,Trigger] Adding the ability to modularise event selection (#9663)
Browse files Browse the repository at this point in the history
  • Loading branch information
nzardosh authored Feb 4, 2025
1 parent 917d279 commit ab1c268
Show file tree
Hide file tree
Showing 38 changed files with 380 additions and 293 deletions.
7 changes: 4 additions & 3 deletions EventFiltering/PWGJE/jetFilter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <TMath.h>
#include <cmath>
#include <string>
#include <vector>

#include "Framework/ASoA.h"
#include "Framework/ASoAHelpers.h"
Expand Down Expand Up @@ -94,13 +95,13 @@ struct jetFilter {

Filter trackFilter = (nabs(aod::jtrack::eta) < static_cast<float>(cfgEtaTPC)) && (aod::jtrack::pt > trackPtMin);
int trackSelection = -1;
int eventSelection = -1;
std::vector<int> eventSelectionBits;

void init(o2::framework::InitContext&)
{
triggerJetR = TMath::Nint(cfgJetR * 100.0f);
trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast<std::string>(trackSelections));
eventSelection = jetderiveddatautilities::initialiseEventSelection(static_cast<std::string>(evSel));
eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast<std::string>(evSel));

spectra.add("fCollZpos", "collision z position", HistType::kTH1F,
{{200, -20., +20., "#it{z}_{vtx} position (cm)"}});
Expand Down Expand Up @@ -196,7 +197,7 @@ struct jetFilter {
spectra.fill(HIST("fCollZpos"), collision.posZ());
hProcessedEvents->Fill(static_cast<float>(kBinAllEvents) + 0.1f); // all minimum bias events

if (!jetderiveddatautilities::selectCollision(collision, eventSelection)) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
tags(keepEvent[kJetChLowPt], keepEvent[kJetChHighPt], keepEvent[kTrackLowPt], keepEvent[kTrackHighPt]);
return;
}
Expand Down
190 changes: 119 additions & 71 deletions PWGJE/Core/JetDerivedDataUtilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ static constexpr float mPion = 0.139; // TDatabasePDG::Instance()->GetParticle(2

enum JCollisionSel {
sel8 = 0,
sel8Full = 1,
sel8FullPbPb = 2,
selMC = 3,
selMCFull = 4,
selMCFullPbPb = 5,
selUnanchoredMC = 6,
selTVX = 7,
sel7 = 8,
sel7KINT7 = 9
sel7 = 1,
sel7KINT7 = 2,
selTVX = 3,
selNoTimeFrameBorder = 4,
selNoITSROFrameBorder = 5,
selNoSameBunchPileup = 6,
selIsGoodZvtxFT0vsPV = 7,
selNoCollInTimeRangeStandard = 8,
selNoCollInRofStandard = 9
};

enum JCollisionSubGeneratorId {
Expand All @@ -46,50 +46,96 @@ enum JCollisionSubGeneratorId {
};

template <typename T>
bool selectCollision(T const& collision, int eventSelection = -1, bool skipMBGapEvents = true)
bool selectCollision(T const& collision, std::vector<int> eventSelectionMaskBits, bool skipMBGapEvents = true)
{
if (skipMBGapEvents && collision.subGeneratorId() == JCollisionSubGeneratorId::mbGap) {
return false;
}
if (eventSelection == -1) {
if (eventSelectionMaskBits.size() == 0) {
return true;
}
return (collision.eventSel() & (1 << eventSelection));
for (auto eventSelectionMaskBit : eventSelectionMaskBits) {
if (!(collision.eventSel() & (1 << eventSelectionMaskBit))) {
return false;
}
}
return true;
}

bool eventSelectionMasksContainSelection(std::string eventSelectionMasks, std::string selection)
{
size_t position = 0;
while ((position = eventSelectionMasks.find(selection, position)) != std::string::npos) {
bool validStart = (position == 0 || eventSelectionMasks[position - 1] == '+');
bool validEnd = (position + selection.length() == eventSelectionMasks.length() || eventSelectionMasks[position + selection.length()] == '+');
if (validStart && validEnd) {
return true;
}
position += selection.length();
}
return false;
}

int initialiseEventSelection(std::string eventSelection)
std::vector<int> initialiseEventSelectionBits(std::string eventSelectionMasks)
{
if (eventSelection == "sel8") {
return JCollisionSel::sel8;
std::vector<int> eventSelectionMaskBits;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "sel8")) {
eventSelectionMaskBits.push_back(JCollisionSel::sel8);
}
if (eventSelection == "sel8Full") {
return JCollisionSel::sel8Full;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "sel7")) {
eventSelectionMaskBits.push_back(JCollisionSel::sel7);
}
if (eventSelection == "sel8FullPbPb") {
return JCollisionSel::sel8FullPbPb;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "sel7KINT7")) {
eventSelectionMaskBits.push_back(JCollisionSel::sel7KINT7);
}
if (eventSelection == "selMC") {
return JCollisionSel::selMC;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "TVX")) {
eventSelectionMaskBits.push_back(JCollisionSel::selTVX);
}
if (eventSelection == "selMCFull") {
return JCollisionSel::selMCFull;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "NoTimeFrameBorder")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoTimeFrameBorder);
}
if (eventSelection == "selMCFullPbPb") {
return JCollisionSel::selMCFullPbPb;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "NoITSROFrameBorder")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoITSROFrameBorder);
}
if (eventSelection == "selUnanchoredMC") {
return JCollisionSel::selUnanchoredMC;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "NoSameBunchPileup")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoSameBunchPileup);
}
if (eventSelection == "selTVX") {
return JCollisionSel::selTVX;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "IsGoodZvtxFT0vsPV")) {
eventSelectionMaskBits.push_back(JCollisionSel::selIsGoodZvtxFT0vsPV);
}
if (eventSelection == "sel7") {
return JCollisionSel::sel7;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "NoCollInTimeRangeStandard")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInTimeRangeStandard);
}
if (eventSelection == "sel7KINT7") {
return JCollisionSel::sel7KINT7;
if (eventSelectionMasksContainSelection(eventSelectionMasks, "NoCollInRofStandard")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInRofStandard);
}
return -1;

if (eventSelectionMasksContainSelection(eventSelectionMasks, "sel8Full")) {
eventSelectionMaskBits.push_back(JCollisionSel::sel8);
eventSelectionMaskBits.push_back(JCollisionSel::selNoSameBunchPileup);
}
if (eventSelectionMasksContainSelection(eventSelectionMasks, "sel8FullPbPb")) {
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInTimeRangeStandard);
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInRofStandard);
}
if (eventSelectionMasksContainSelection(eventSelectionMasks, "selUnanchoredMC")) {
eventSelectionMaskBits.push_back(JCollisionSel::selTVX);
eventSelectionMaskBits.push_back(JCollisionSel::selNoTimeFrameBorder);
}
if (eventSelectionMasksContainSelection(eventSelectionMasks, "selMC")) {
eventSelectionMaskBits.push_back(JCollisionSel::selTVX);
}
if (eventSelectionMasksContainSelection(eventSelectionMasks, "selMCFull")) {
eventSelectionMaskBits.push_back(JCollisionSel::selTVX);
eventSelectionMaskBits.push_back(JCollisionSel::selNoTimeFrameBorder);
eventSelectionMaskBits.push_back(JCollisionSel::selNoSameBunchPileup);
}
if (eventSelectionMasksContainSelection(eventSelectionMasks, "selMCFullPbPb")) {
eventSelectionMaskBits.push_back(JCollisionSel::selTVX);
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInTimeRangeStandard);
eventSelectionMaskBits.push_back(JCollisionSel::selNoCollInRofStandard);
}
return eventSelectionMaskBits;
}

template <typename T>
Expand All @@ -98,12 +144,6 @@ uint16_t setEventSelectionBit(T const& collision)
uint16_t bit = 0;
if (collision.sel8()) {
SETBIT(bit, JCollisionSel::sel8);
if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup) && collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
SETBIT(bit, JCollisionSel::sel8Full);
if (collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
SETBIT(bit, JCollisionSel::sel8FullPbPb);
}
}
}
if (collision.sel7()) {
SETBIT(bit, JCollisionSel::sel7);
Expand All @@ -113,16 +153,24 @@ uint16_t setEventSelectionBit(T const& collision)
}
if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) {
SETBIT(bit, JCollisionSel::selTVX);
SETBIT(bit, JCollisionSel::selUnanchoredMC);
if (collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) {
SETBIT(bit, JCollisionSel::selMC);
if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup) && collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
SETBIT(bit, JCollisionSel::selMCFull);
if (collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
SETBIT(bit, JCollisionSel::selMCFullPbPb);
}
}
}
}
if (collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) {
SETBIT(bit, JCollisionSel::selNoTimeFrameBorder);
}
if (collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) {
SETBIT(bit, JCollisionSel::selNoITSROFrameBorder);
}
if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) {
SETBIT(bit, JCollisionSel::selNoSameBunchPileup);
}
if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
SETBIT(bit, JCollisionSel::selIsGoodZvtxFT0vsPV);
}
if (collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
SETBIT(bit, JCollisionSel::selNoCollInTimeRangeStandard);
}
if (collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
SETBIT(bit, JCollisionSel::selNoCollInRofStandard);
}
return bit;
}
Expand Down Expand Up @@ -210,67 +258,67 @@ std::vector<int> initialiseTriggerMaskBits(std::string triggerMasks)
{
std::vector<int> triggerMaskBits;
if (triggerMasksContainTrigger(triggerMasks, "fJetChLowPt")) {
triggerMaskBits.push_back(JetChLowPt);
triggerMaskBits.push_back(JTrigSel::JetChLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetChHighPt")) {
triggerMaskBits.push_back(JetChHighPt);
triggerMaskBits.push_back(JTrigSel::JetChHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fTrackLowPt")) {
triggerMaskBits.push_back(TrackLowPt);
triggerMaskBits.push_back(JTrigSel::TrackLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fTrackHighPt")) {
triggerMaskBits.push_back(TrackHighPt);
triggerMaskBits.push_back(JTrigSel::TrackHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetD0ChLowPt")) {
triggerMaskBits.push_back(JetD0ChLowPt);
triggerMaskBits.push_back(JTrigSel::JetD0ChLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetD0ChHighPt")) {
triggerMaskBits.push_back(JetD0ChHighPt);
triggerMaskBits.push_back(JTrigSel::JetD0ChHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetLcChLowPt")) {
triggerMaskBits.push_back(JetLcChLowPt);
triggerMaskBits.push_back(JTrigSel::JetLcChLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetLcChHighPt")) {
triggerMaskBits.push_back(JetLcChHighPt);
triggerMaskBits.push_back(JTrigSel::JetLcChHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fEMCALReadout")) {
triggerMaskBits.push_back(EMCALReadout);
triggerMaskBits.push_back(JTrigSel::EMCALReadout);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetFullHighPt")) {
triggerMaskBits.push_back(JetFullHighPt);
triggerMaskBits.push_back(JTrigSel::JetFullHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetFullLowPt")) {
triggerMaskBits.push_back(JetFullLowPt);
triggerMaskBits.push_back(JTrigSel::JetFullLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetNeutralHighPt")) {
triggerMaskBits.push_back(JetNeutralHighPt);
triggerMaskBits.push_back(JTrigSel::JetNeutralHighPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fJetNeutralLowPt")) {
triggerMaskBits.push_back(JetNeutralLowPt);
triggerMaskBits.push_back(JTrigSel::JetNeutralLowPt);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaVeryHighPtEMCAL")) {
triggerMaskBits.push_back(GammaVeryHighPtEMCAL);
triggerMaskBits.push_back(JTrigSel::GammaVeryHighPtEMCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaVeryHighPtDCAL")) {
triggerMaskBits.push_back(GammaVeryHighPtDCAL);
triggerMaskBits.push_back(JTrigSel::GammaVeryHighPtDCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaHighPtEMCAL")) {
triggerMaskBits.push_back(GammaHighPtEMCAL);
triggerMaskBits.push_back(JTrigSel::GammaHighPtEMCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaHighPtDCAL")) {
triggerMaskBits.push_back(GammaHighPtDCAL);
triggerMaskBits.push_back(JTrigSel::GammaHighPtDCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaLowPtEMCAL")) {
triggerMaskBits.push_back(GammaLowPtEMCAL);
triggerMaskBits.push_back(JTrigSel::GammaLowPtEMCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaLowPtDCAL")) {
triggerMaskBits.push_back(GammaLowPtDCAL);
triggerMaskBits.push_back(JTrigSel::GammaLowPtDCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaVeryLowPtEMCAL")) {
triggerMaskBits.push_back(GammaVeryLowPtEMCAL);
triggerMaskBits.push_back(JTrigSel::GammaVeryLowPtEMCAL);
}
if (triggerMasksContainTrigger(triggerMasks, "fGammaVeryLowPtDCAL")) {
triggerMaskBits.push_back(GammaVeryLowPtDCAL);
triggerMaskBits.push_back(JTrigSel::GammaVeryLowPtDCAL);
}
return triggerMaskBits;
}
Expand Down
4 changes: 3 additions & 1 deletion PWGJE/DataModel/JetReducedData.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ DECLARE_SOA_COLUMN(ReadCountsWithTVXAndZVertexAndSelUnanchoredMC, readCountsWith
DECLARE_SOA_COLUMN(ReadCountsWithTVXAndZVertexAndSelTVX, readCountsWithTVXAndZVertexAndSelTVX, std::vector<int>);
DECLARE_SOA_COLUMN(ReadCountsWithTVXAndZVertexAndSel7, readCountsWithTVXAndZVertexAndSel7, std::vector<int>);
DECLARE_SOA_COLUMN(ReadCountsWithTVXAndZVertexAndSel7KINT7, readCountsWithTVXAndZVertexAndSel7KINT7, std::vector<int>);
DECLARE_SOA_COLUMN(ReadCountsWithCustom, readCountsWithCustom, std::vector<int>);
DECLARE_SOA_COLUMN(IsAmbiguous, isAmbiguous, bool);
DECLARE_SOA_COLUMN(IsEMCALReadout, isEmcalReadout, bool);
} // namespace jcollision
Expand Down Expand Up @@ -146,7 +147,8 @@ DECLARE_SOA_TABLE_STAGED(CollisionCounts, "COLLCOUNT",
jcollision::ReadCountsWithTVXAndZVertexAndSelUnanchoredMC,
jcollision::ReadCountsWithTVXAndZVertexAndSelTVX,
jcollision::ReadCountsWithTVXAndZVertexAndSel7,
jcollision::ReadCountsWithTVXAndZVertexAndSel7KINT7);
jcollision::ReadCountsWithTVXAndZVertexAndSel7KINT7,
jcollision::ReadCountsWithCustom);

namespace jmccollision
{
Expand Down
8 changes: 4 additions & 4 deletions PWGJE/JetFinders/jetFinder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ struct JetFinderTask {

Service<o2::framework::O2DatabasePDG> pdgDatabase;
int trackSelection = -1;
int eventSelection = -1;
std::vector<int> eventSelectionBits;
std::string particleSelection;

JetFinder jetFinder;
Expand All @@ -98,7 +98,7 @@ struct JetFinderTask {

void init(InitContext const&)
{
eventSelection = jetderiveddatautilities::initialiseEventSelection(static_cast<std::string>(eventSelections));
eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast<std::string>(eventSelections));
triggerMaskBits = jetderiveddatautilities::initialiseTriggerMaskBits(triggerMasks);
trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast<std::string>(trackSelections));
particleSelection = static_cast<std::string>(particleSelections);
Expand Down Expand Up @@ -151,7 +151,7 @@ struct JetFinderTask {
void processChargedJets(soa::Filtered<aod::JetCollisions>::iterator const& collision,
soa::Filtered<aod::JetTracks> const& tracks)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelection) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits) || (doEMCALEventSelectionChargedJets && !jetderiveddatautilities::eventEMCAL(collision))) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits) || (doEMCALEventSelectionChargedJets && !jetderiveddatautilities::eventEMCAL(collision))) {
return;
}
inputParticles.clear();
Expand All @@ -164,7 +164,7 @@ struct JetFinderTask {
void processChargedEvtWiseSubJets(soa::Filtered<aod::JetCollisions>::iterator const& collision,
soa::Filtered<aod::JetTracksSub> const& tracks)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelection) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits) || (doEMCALEventSelectionChargedJets && !jetderiveddatautilities::eventEMCAL(collision))) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits) || (doEMCALEventSelectionChargedJets && !jetderiveddatautilities::eventEMCAL(collision))) {
return;
}
inputParticles.clear();
Expand Down
6 changes: 3 additions & 3 deletions PWGJE/JetFinders/jetFinderHF.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ struct JetFinderHFTask {

Service<o2::framework::O2DatabasePDG> pdgDatabase;
int trackSelection = -1;
int eventSelection = -1;
std::vector<int> eventSelectionBits;
std::string particleSelection;

JetFinder jetFinder;
Expand All @@ -112,7 +112,7 @@ struct JetFinderHFTask {
{
trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast<std::string>(trackSelections));
triggerMaskBits = jetderiveddatautilities::initialiseTriggerMaskBits(triggerMasks);
eventSelection = jetderiveddatautilities::initialiseEventSelection(static_cast<std::string>(eventSelections));
eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast<std::string>(eventSelections));
particleSelection = static_cast<std::string>(particleSelections);

jetFinder.etaMin = trackEtaMin;
Expand Down Expand Up @@ -173,7 +173,7 @@ struct JetFinderHFTask {
template <bool isEvtWiseSub, typename T, typename U, typename V, typename M, typename N, typename O>
void analyseCharged(T const& collision, U const& tracks, V const& candidate, M& jetsTableInput, N& constituentsTableInput, O& /*originalTracks*/, float minJetPt, float maxJetPt)
{
if (!jetderiveddatautilities::selectCollision(collision, eventSelection) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits) || !jetderiveddatautilities::selectTrigger(collision, triggerMaskBits)) {
return;
}
inputParticles.clear();
Expand Down
Loading

0 comments on commit ab1c268

Please sign in to comment.