Skip to content

Commit 1add4e2

Browse files
[PWGJE] Track efficiency in jet finder (#13335)
1 parent f15a83f commit 1add4e2

File tree

6 files changed

+101
-33
lines changed

6 files changed

+101
-33
lines changed

PWGJE/Core/JetFindingUtilities.h

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ constexpr bool isEMCALClusterTable()
9292
*/
9393

9494
template <typename T, typename U>
95-
void analyseTracks(std::vector<fastjet::PseudoJet>& inputParticles, T const& tracks, int trackSelection, double trackingEfficinecy, const U* candidate = nullptr)
95+
void analyseTracks(std::vector<fastjet::PseudoJet>& inputParticles, T const& tracks, int trackSelection, bool applyTrackingEfficiency, std::vector<double> trackingEfficiency, std::vector<double> trackingEfficiencyPtBinning, const U* candidate = nullptr)
9696
{
9797
for (auto& track : tracks) {
9898
if (!jetderiveddatautilities::selectTrack(track, trackSelection)) {
@@ -103,10 +103,14 @@ void analyseTracks(std::vector<fastjet::PseudoJet>& inputParticles, T const& tra
103103
continue;
104104
}
105105
}
106-
if (trackingEfficinecy < 0.999) { // this code is a bit ugly but it stops us needing to do the random generation unless asked for
107-
TRandom3 randomNumber(0);
108-
if (randomNumber.Rndm() > trackingEfficinecy) { // Is Rndm ok to use?
109-
continue;
106+
if (applyTrackingEfficiency) {
107+
auto iter = std::upper_bound(trackingEfficiencyPtBinning.begin(), trackingEfficiencyPtBinning.end(), track.pt());
108+
if (iter != trackingEfficiencyPtBinning.begin() && iter != trackingEfficiencyPtBinning.end()) {
109+
std::size_t index = std::distance(trackingEfficiencyPtBinning.begin(), iter) - 1;
110+
TRandom3 randomNumber(0);
111+
if (randomNumber.Rndm() > trackingEfficiency[index]) {
112+
continue;
113+
}
110114
}
111115
}
112116
fastjetutilities::fillTracks(track, inputParticles, track.globalIndex());
@@ -123,7 +127,7 @@ void analyseTracks(std::vector<fastjet::PseudoJet>& inputParticles, T const& tra
123127
*/
124128

125129
template <typename T, typename U>
126-
void analyseTracksMultipleCandidates(std::vector<fastjet::PseudoJet>& inputParticles, T const& tracks, int trackSelection, double trackingEfficinecy, U const& candidates)
130+
void analyseTracksMultipleCandidates(std::vector<fastjet::PseudoJet>& inputParticles, T const& tracks, int trackSelection, bool applyTrackingEfficiency, std::vector<double> trackingEfficiency, std::vector<double> trackingEfficiencyPtBinning, U const& candidates)
127131
{
128132
for (auto& track : tracks) {
129133
if (!jetderiveddatautilities::selectTrack(track, trackSelection)) {
@@ -134,10 +138,14 @@ void analyseTracksMultipleCandidates(std::vector<fastjet::PseudoJet>& inputParti
134138
continue;
135139
}
136140
}
137-
if (trackingEfficinecy < 0.999) { // this code is a bit ugly but it stops us needing to do the random generation unless asked for
138-
TRandom3 randomNumber(0);
139-
if (randomNumber.Rndm() > trackingEfficinecy) { // Is Rndm ok to use?
140-
continue;
141+
if (applyTrackingEfficiency) {
142+
auto iter = std::upper_bound(trackingEfficiencyPtBinning.begin(), trackingEfficiencyPtBinning.end(), track.pt());
143+
if (iter != trackingEfficiencyPtBinning.begin() && iter != trackingEfficiencyPtBinning.end()) {
144+
std::size_t index = std::distance(trackingEfficiencyPtBinning.begin(), iter) - 1;
145+
TRandom3 randomNumber(0);
146+
if (randomNumber.Rndm() > trackingEfficiency[index]) {
147+
continue;
148+
}
141149
}
142150
}
143151
fastjetutilities::fillTracks(track, inputParticles, track.globalIndex());

PWGJE/JetFinders/jetFinder.cxx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <Framework/HistogramRegistry.h>
3131
#include <Framework/HistogramSpec.h>
3232
#include <Framework/InitContext.h>
33+
#include <Framework/Logger.h>
3334
#include <Framework/O2DatabasePDGPlugin.h>
3435
#include <Framework/runDataProcessing.h> // IWYU pragma: export
3536

@@ -72,7 +73,9 @@ struct JetFinderTask {
7273
Configurable<float> trackEtaMax{"trackEtaMax", 0.9, "maximum track eta"};
7374
Configurable<float> trackPhiMin{"trackPhiMin", -999, "minimum track phi"};
7475
Configurable<float> trackPhiMax{"trackPhiMax", 999, "maximum track phi"};
75-
Configurable<double> trackingEfficiency{"trackingEfficiency", 1.0, "tracking efficiency applied to jet finding"};
76+
Configurable<bool> applyTrackingEfficiency{"applyTrackingEfficiency", {false}, "configurable to decide whether to apply artificial tracking efficiency (discarding tracks) in jet finding"};
77+
Configurable<std::vector<double>> trackingEfficiencyPtBinning{"trackingEfficiencyPtBinning", {0., 10, 999.}, "pt binning of tracking efficiency array if applyTrackingEfficiency is true"};
78+
Configurable<std::vector<double>> trackingEfficiency{"trackingEfficiency", {1.0, 1.0}, "tracking efficiency array applied to jet finding if applyTrackingEfficiency is true"};
7679
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections"};
7780
Configurable<std::string> particleSelections{"particleSelections", "PhysicalPrimary", "set particle selections"};
7881

@@ -161,6 +164,15 @@ struct JetFinderTask {
161164
registry.add("hJetEWS", "sparse for data or mcd event-wise subtracted jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
162165
registry.add("hJetMCP", "sparse for mcp jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
163166
}
167+
168+
if (applyTrackingEfficiency) {
169+
if (trackingEfficiencyPtBinning->size() < 2) {
170+
LOGP(fatal, "jetFinder workflow: trackingEfficiencyPtBinning configurable should have at least two bin edges");
171+
}
172+
if (trackingEfficiency->size() + 1 != trackingEfficiencyPtBinning->size()) {
173+
LOGP(fatal, "jetFinder workflow: trackingEfficiency configurable should have exactly one less entry than the number of bin edges set in trackingEfficiencyPtBinning configurable");
174+
}
175+
}
164176
}
165177

166178
aod::EMCALClusterDefinition clusterDefinition = aod::emcalcluster::getClusterDefinitionFromString(clusterDefinitionS.value);
@@ -177,7 +189,7 @@ struct JetFinderTask {
177189
return;
178190
}
179191
inputParticles.clear();
180-
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, trackingEfficiency);
192+
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning);
181193
jetfindingutilities::findJets(jetFinder, inputParticles, jetPtMin, jetPtMax, jetRadius, jetAreaFractionMin, collision, jetsTable, constituentsTable, fillTHnSparse ? registry.get<THn>(HIST("hJet")) : std::shared_ptr<THn>(nullptr), fillTHnSparse);
182194
}
183195

@@ -190,7 +202,7 @@ struct JetFinderTask {
190202
return;
191203
}
192204
inputParticles.clear();
193-
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracksSub>, soa::Filtered<aod::JetTracksSub>::iterator>(inputParticles, tracks, trackSelection, trackingEfficiency);
205+
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracksSub>, soa::Filtered<aod::JetTracksSub>::iterator>(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning);
194206
jetfindingutilities::findJets(jetFinder, inputParticles, jetEWSPtMin, jetEWSPtMax, jetRadius, jetAreaFractionMin, collision, jetsEvtWiseSubTable, constituentsEvtWiseSubTable, fillTHnSparse ? registry.get<THn>(HIST("hJetEWS")) : std::shared_ptr<THn>(nullptr), fillTHnSparse);
195207
}
196208

@@ -216,7 +228,7 @@ struct JetFinderTask {
216228
return;
217229
}
218230
inputParticles.clear();
219-
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, trackingEfficiency);
231+
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning);
220232
jetfindingutilities::analyseClusters(inputParticles, &clusters, hadronicCorrectionType);
221233
jetfindingutilities::findJets(jetFinder, inputParticles, jetPtMin, jetPtMax, jetRadius, jetAreaFractionMin, collision, jetsTable, constituentsTable, fillTHnSparse ? registry.get<THn>(HIST("hJet")) : std::shared_ptr<THn>(nullptr), fillTHnSparse);
222234
}

PWGJE/JetFinders/jetFinderHF.cxx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <Framework/HistogramRegistry.h>
3030
#include <Framework/HistogramSpec.h>
3131
#include <Framework/InitContext.h>
32+
#include <Framework/Logger.h>
3233
#include <Framework/O2DatabasePDGPlugin.h>
3334
#include <Framework/runDataProcessing.h> // IWYU pragma: export
3435

@@ -70,7 +71,9 @@ struct JetFinderHFTask {
7071
Configurable<float> trackEtaMax{"trackEtaMax", 0.9, "maximum track eta"};
7172
Configurable<float> trackPhiMin{"trackPhiMin", -999, "minimum track phi"};
7273
Configurable<float> trackPhiMax{"trackPhiMax", 999, "maximum track phi"};
73-
Configurable<double> trackingEfficiency{"trackingEfficiency", 1.0, "tracking efficiency applied to jet finding"};
74+
Configurable<bool> applyTrackingEfficiency{"applyTrackingEfficiency", {false}, "configurable to decide whether to apply artificial tracking efficiency (discarding tracks) in jet finding"};
75+
Configurable<std::vector<double>> trackingEfficiencyPtBinning{"trackingEfficiencyPtBinning", {0., 10, 999.}, "pt binning of tracking efficiency array if applyTrackingEfficiency is true"};
76+
Configurable<std::vector<double>> trackingEfficiency{"trackingEfficiency", {1.0, 1.0}, "tracking efficiency array applied to jet finding if applyTrackingEfficiency is true"};
7477
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections"};
7578
Configurable<std::string> particleSelections{"particleSelections", "PhysicalPrimary", "set particle selections"};
7679

@@ -165,6 +168,15 @@ struct JetFinderHFTask {
165168

166169
registry.add("hJet", "sparse for data or mcd jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
167170
registry.add("hJetMCP", "sparse for mcp jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
171+
172+
if (applyTrackingEfficiency) {
173+
if (trackingEfficiencyPtBinning->size() < 2) {
174+
LOGP(fatal, "jetFinderHF workflow: trackingEfficiencyPtBinning configurable should have at least two bin edges");
175+
}
176+
if (trackingEfficiency->size() + 1 != trackingEfficiencyPtBinning->size()) {
177+
LOGP(fatal, "jetFinderHF workflow: trackingEfficiency configurable should have exactly one less entry than the number of bin edges set in trackingEfficiencyPtBinning configurable");
178+
}
179+
}
168180
}
169181

170182
aod::EMCALClusterDefinition clusterDefinition = aod::emcalcluster::getClusterDefinitionFromString(clusterDefinitionS.value);
@@ -215,9 +227,9 @@ struct JetFinderHFTask {
215227
}
216228
}
217229
if constexpr (isEvtWiseSub) {
218-
jetfindingutilities::analyseTracks<U, typename U::iterator>(inputParticles, tracks, trackSelection, trackingEfficiency);
230+
jetfindingutilities::analyseTracks<U, typename U::iterator>(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning);
219231
} else {
220-
jetfindingutilities::analyseTracks(inputParticles, tracks, trackSelection, trackingEfficiency, &candidate);
232+
jetfindingutilities::analyseTracks(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning, &candidate);
221233
}
222234
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTableInput, constituentsTableInput, registry.get<THn>(HIST("hJet")), fillTHnSparse, true);
223235
}

PWGJE/JetFinders/jetFinderV0.cxx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <Framework/HistogramRegistry.h>
2626
#include <Framework/HistogramSpec.h>
2727
#include <Framework/InitContext.h>
28+
#include <Framework/Logger.h>
2829
#include <Framework/O2DatabasePDGPlugin.h>
2930
#include <Framework/runDataProcessing.h> // IWYU pragma: export
3031

@@ -65,7 +66,9 @@ struct JetFinderV0Task {
6566
Configurable<float> trackEtaMax{"trackEtaMax", 0.9, "maximum track eta"};
6667
Configurable<float> trackPhiMin{"trackPhiMin", -999, "minimum track phi"};
6768
Configurable<float> trackPhiMax{"trackPhiMax", 999, "maximum track phi"};
68-
Configurable<double> trackingEfficiency{"trackingEfficiency", 1.0, "tracking efficiency applied to jet finding"};
69+
Configurable<bool> applyTrackingEfficiency{"applyTrackingEfficiency", {false}, "configurable to decide whether to apply artificial tracking efficiency (discarding tracks) in jet finding"};
70+
Configurable<std::vector<double>> trackingEfficiencyPtBinning{"trackingEfficiencyPtBinning", {0., 10, 999.}, "pt binning of tracking efficiency array if applyTrackingEfficiency is true"};
71+
Configurable<std::vector<double>> trackingEfficiency{"trackingEfficiency", {1.0, 1.0}, "tracking efficiency array applied to jet finding if applyTrackingEfficiency is true"};
6972
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections"};
7073
Configurable<std::string> particleSelections{"particleSelections", "PhysicalPrimary", "set particle selections"};
7174

@@ -156,6 +159,15 @@ struct JetFinderV0Task {
156159

157160
registry.add("hJet", "sparse for data or mcd jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
158161
registry.add("hJetMCP", "sparse for mcp jets", {HistType::kTHnD, {{jetRadiiBins, ""}, {jetPtBinNumber, jetPtMinDouble, jetPtMaxDouble}, {40, -1.0, 1.0}, {18, 0.0, 7.0}}});
162+
163+
if (applyTrackingEfficiency) {
164+
if (trackingEfficiencyPtBinning->size() < 2) {
165+
LOGP(fatal, "jetFinderV0 workflow: trackingEfficiencyPtBinning configurable should have at least two bin edges");
166+
}
167+
if (trackingEfficiency->size() + 1 != trackingEfficiencyPtBinning->size()) {
168+
LOGP(fatal, "jetFinderV0 workflow: trackingEfficiency configurable should have exactly one less entry than the number of bin edges set in trackingEfficiencyPtBinning configurable");
169+
}
170+
}
159171
}
160172

161173
Filter collisionFilter = (nabs(aod::jcollision::posZ) < vertexZCut && aod::jcollision::centFT0M >= centralityMin && aod::jcollision::centFT0M < centralityMax && aod::jcollision::trackOccupancyInTimeRange <= trackOccupancyInTimeRangeMax && ((skipMBGapEvents.node() == false) || (aod::jcollision::subGeneratorId != static_cast<int>(jetderiveddatautilities::JCollisionSubGeneratorId::mbGap))));
@@ -184,7 +196,7 @@ struct JetFinderV0Task {
184196
}
185197
}
186198
*/
187-
jetfindingutilities::analyseTracksMultipleCandidates(inputParticles, tracks, trackSelection, trackingEfficiency, candidates);
199+
jetfindingutilities::analyseTracksMultipleCandidates(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning, candidates);
188200

189201
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTableInput, constituentsTableInput, registry.get<THn>(HIST("hJet")), fillTHnSparse, saveJetsWithCandidatesOnly);
190202
}

PWGJE/TableProducer/eventwiseConstituentSubtractor.cxx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <Framework/AnalysisHelpers.h>
2727
#include <Framework/Configurable.h>
2828
#include <Framework/InitContext.h>
29+
#include <Framework/Logger.h>
2930
#include <Framework/runDataProcessing.h>
3031

3132
#include <fastjet/PseudoJet.hh>
@@ -67,7 +68,9 @@ struct eventWiseConstituentSubtractorTask {
6768
Configurable<float> trackEtaMax{"trackEtaMax", 0.9, "maximum track eta"};
6869
Configurable<float> trackPhiMin{"trackPhiMin", -999, "minimum track phi"};
6970
Configurable<float> trackPhiMax{"trackPhiMax", 999, "maximum track phi"};
70-
Configurable<double> trackingEfficiency{"trackingEfficiency", 1.0, "tracking efficiency applied to jet finding"};
71+
Configurable<bool> applyTrackingEfficiency{"applyTrackingEfficiency", {false}, "configurable to decide whether to apply artificial tracking efficiency (discarding tracks) in the collision analysed by this task"};
72+
Configurable<std::vector<double>> trackingEfficiencyPtBinning{"trackingEfficiencyPtBinning", {0., 10, 999.}, "pt binning of tracking efficiency array if applyTrackingEfficiency is true"};
73+
Configurable<std::vector<double>> trackingEfficiency{"trackingEfficiency", {1.0, 1.0}, "tracking efficiency array applied if applyTrackingEfficiency is true"};
7174
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections"};
7275

7376
Configurable<std::string> particleSelections{"particleSelections", "PhysicalPrimary", "set particle selections"};
@@ -95,6 +98,15 @@ struct eventWiseConstituentSubtractorTask {
9598
eventWiseConstituentSubtractor.setDoRhoMassSub(doRhoMassSub);
9699
eventWiseConstituentSubtractor.setConstSubAlphaRMax(alpha, rMax);
97100
eventWiseConstituentSubtractor.setMaxEtaEvent(eventEtaMax);
101+
102+
if (applyTrackingEfficiency) {
103+
if (trackingEfficiencyPtBinning->size() < 2) {
104+
LOGP(fatal, "eventWiseConstituentSubtractor workflow: trackingEfficiencyPtBinning configurable should have at least two bin edges");
105+
}
106+
if (trackingEfficiency->size() + 1 != trackingEfficiencyPtBinning->size()) {
107+
LOGP(fatal, "eventWiseConstituentSubtractor workflow: trackingEfficiency configurable should have exactly one less entry than the number of bin edges set in trackingEfficiencyPtBinning configurable");
108+
}
109+
}
98110
}
99111

100112
Filter trackCuts = (aod::jtrack::pt >= trackPtMin && aod::jtrack::pt < trackPtMax && aod::jtrack::eta > trackEtaMin && aod::jtrack::eta < trackEtaMax && aod::jtrack::phi >= trackPhiMin && aod::jtrack::phi <= trackPhiMax);
@@ -106,7 +118,7 @@ struct eventWiseConstituentSubtractorTask {
106118
for (auto& candidate : candidates) {
107119
inputParticles.clear();
108120
tracksSubtracted.clear();
109-
jetfindingutilities::analyseTracks(inputParticles, tracks, trackSelection, trackingEfficiency, &candidate);
121+
jetfindingutilities::analyseTracks(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning, &candidate);
110122

111123
tracksSubtracted = eventWiseConstituentSubtractor.JetBkgSubUtils::doEventConstSub(inputParticles, candidate.rho(), candidate.rhoM());
112124
for (auto const& trackSubtracted : tracksSubtracted) {
@@ -137,7 +149,7 @@ struct eventWiseConstituentSubtractorTask {
137149
}
138150
inputParticles.clear();
139151
tracksSubtracted.clear();
140-
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, trackingEfficiency);
152+
jetfindingutilities::analyseTracks<soa::Filtered<aod::JetTracks>, soa::Filtered<aod::JetTracks>::iterator>(inputParticles, tracks, trackSelection, applyTrackingEfficiency, trackingEfficiency, trackingEfficiencyPtBinning);
141153

142154
tracksSubtracted = eventWiseConstituentSubtractor.JetBkgSubUtils::doEventConstSub(inputParticles, collision.rho(), collision.rhoM());
143155

0 commit comments

Comments
 (0)