Skip to content

Commit 73ea449

Browse files
committed
[PWGJE] V0 Jet Framework update
* Added option to either save all jets or only those containing V0 candidates * Added option to select all MCP V0s or only those that decay to charged particles
1 parent b979cda commit 73ea449

File tree

4 files changed

+56
-9
lines changed

4 files changed

+56
-9
lines changed

PWGJE/Core/JetFindingUtilities.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ bool analyseV0s(std::vector<fastjet::PseudoJet>& inputParticles, T const& v0s, f
271271
* @param doHFJetFinding set whether only jets containing a HF candidate are saved
272272
*/
273273
template <typename T, typename U, typename V>
274-
void findJets(JetFinder& jetFinder, std::vector<fastjet::PseudoJet>& inputParticles, float jetPtMin, float jetPtMax, std::vector<double> jetRadius, float jetAreaFractionMin, T const& collision, U& jetsTable, V& constituentsTable, std::shared_ptr<THn> thnSparseJet, bool fillThnSparse, bool doCandidateJetFinding = false)
274+
void findJets(JetFinder& jetFinder, std::vector<fastjet::PseudoJet>& inputParticles, float jetPtMin, float jetPtMax, std::vector<double> jetRadius, float jetAreaFractionMin, T const& collision, U& jetsTable, V& constituentsTable, std::shared_ptr<THn> thnSparseJet, bool fillThnSparse, bool doCandidateJetFinding = false, bool saveJetsWithoutCandidates = false)
275275
{
276276
auto jetRValues = static_cast<std::vector<double>>(jetRadius);
277277
jetFinder.jetPtMin = jetPtMin;
@@ -296,7 +296,7 @@ void findJets(JetFinder& jetFinder, std::vector<fastjet::PseudoJet>& inputPartic
296296
break;
297297
}
298298
}
299-
if (!isCandidateJet) {
299+
if (!isCandidateJet && !saveJetsWithoutCandidates) {
300300
continue;
301301
}
302302
}

PWGJE/Core/JetV0Utilities.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,13 @@ auto slicedPerV0Candidate(T const& table, U const& candidate, V const& perV0Cand
138138
}
139139

140140
template <typename T, typename U>
141-
bool isV0Particle(T const& particles, U const& particle)
141+
bool isV0Particle(T const& particles, U const& particle, bool onlyChargedDecays)
142142
{
143-
return RecoDecay::isMatchedMCGen(particles, particle, +kK0Short, std::array{+kPiPlus, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, +kLambda0, std::array{+kProton, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, -kLambda0, std::array{-kProton, +kPiPlus}, true);
143+
if (onlyChargedDecays) {
144+
return RecoDecay::isMatchedMCGen(particles, particle, +kK0Short, std::array{+kPiPlus, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, +kLambda0, std::array{+kProton, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, -kLambda0, std::array{-kProton, +kPiPlus}, true);
145+
} else {
146+
return RecoDecay::isMatchedMCGen(particles, particle, +kK0Short, std::array{+kPiPlus, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, +kK0Short, std::array{+kPi0, +kPi0}, true) || RecoDecay::isMatchedMCGen(particles, particle, +kLambda0, std::array{+kProton, -kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, +kLambda0, std::array{+kNeutron, +kPi0}, true) || RecoDecay::isMatchedMCGen(particles, particle, -kLambda0, std::array{-kProton, +kPiPlus}, true) || RecoDecay::isMatchedMCGen(particles, particle, -kLambda0, std::array{+kNeutron, +kPi0}, true);
147+
}
144148
}
145149

146150
enum JV0ParticleDecays {

PWGJE/JetFinders/jetFinderV0.cxx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ struct JetFinderV0Task {
9393
Configurable<bool> fillTHnSparse{"fillTHnSparse", true, "switch to fill the THnSparse"};
9494
Configurable<double> jetExtraParam{"jetExtraParam", -99.0, "sets the _extra_param in fastjet"};
9595
Configurable<bool> useV0SignalFlags{"useV0SignalFlags", true, "use V0 signal flags table"};
96+
Configurable<bool> saveJetsWithoutCandidates{"saveJetsWithoutCandidates", false, "save all jets, even those without V0s"};
9697

9798
Service<o2::framework::O2DatabasePDG> pdgDatabase;
9899
int trackSelection = -1;
@@ -171,7 +172,9 @@ struct JetFinderV0Task {
171172
}
172173
inputParticles.clear();
173174
if (!jetfindingutilities::analyseV0s(inputParticles, candidates, candPtMin, candPtMax, candYMin, candYMax, candIndex, useV0SignalFlags)) {
174-
return;
175+
if (!saveJetsWithoutCandidates) {
176+
return;
177+
}
175178
}
176179

177180
/*
@@ -183,7 +186,7 @@ struct JetFinderV0Task {
183186
*/
184187
jetfindingutilities::analyseTracksMultipleCandidates(inputParticles, tracks, trackSelection, trackingEfficiency, candidates);
185188

186-
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTableInput, constituentsTableInput, registry.get<THn>(HIST("hJet")), fillTHnSparse, true);
189+
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTableInput, constituentsTableInput, registry.get<THn>(HIST("hJet")), fillTHnSparse, true, saveJetsWithoutCandidates);
187190
}
188191

189192
template <typename T, typename U, typename V>
@@ -192,10 +195,12 @@ struct JetFinderV0Task {
192195

193196
inputParticles.clear();
194197
if (!jetfindingutilities::analyseV0s(inputParticles, candidates, candPtMin, candPtMax, candYMin, candYMax, candIndex, useV0SignalFlags)) {
195-
return;
198+
if (!saveJetsWithoutCandidates) {
199+
return;
200+
}
196201
}
197202
jetfindingutilities::analyseParticles<true>(inputParticles, particleSelection, jetTypeParticleLevel, particles, pdgDatabase, &candidates);
198-
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTable, constituentsTable, registry.get<THn>(HIST("hJetMCP")), fillTHnSparse, true);
203+
jetfindingutilities::findJets(jetFinder, inputParticles, minJetPt, maxJetPt, jetRadius, jetAreaFractionMin, collision, jetsTable, constituentsTable, registry.get<THn>(HIST("hJetMCP")), fillTHnSparse, true, saveJetsWithoutCandidates);
199204
}
200205

201206
void processDummy(aod::JetCollisions const&)

PWGJE/TableProducer/derivedDataProducer.cxx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -763,8 +763,9 @@ struct JetDerivedDataProducerTask {
763763
void processV0MC(aod::McCollision const& mcCollision, aod::McParticles const& particles)
764764
{ // can loop over McV0Labels tables if we want to only store matched V0Particles
765765
bool filledV0McCollisionTable = false;
766+
bool onlyChargedDecays = false;
766767
for (auto const& particle : particles) {
767-
if (jetv0utilities::isV0Particle(particles, particle)) {
768+
if (jetv0utilities::isV0Particle(particles, particle, onlyChargedDecays)) {
768769
if (!filledV0McCollisionTable) {
769770
products.jV0McCollisionsTable(mcCollision.posX(), mcCollision.posY(), mcCollision.posZ());
770771
products.jV0McCollisionIdsTable(mcCollision.globalIndex());
@@ -796,6 +797,43 @@ struct JetDerivedDataProducerTask {
796797
}
797798
PROCESS_SWITCH(JetDerivedDataProducerTask, processV0MC, "produces V0 particles", false);
798799

800+
void processV0MCChargedDecays(aod::McCollision const& mcCollision, aod::McParticles const& particles)
801+
{ // can loop over McV0Labels tables if we want to only store matched V0Particles
802+
bool filledV0McCollisionTable = false;
803+
bool onlyChargedDecays = true;
804+
for (auto const& particle : particles) {
805+
if (jetv0utilities::isV0Particle(particles, particle, onlyChargedDecays)) {
806+
if (!filledV0McCollisionTable) {
807+
products.jV0McCollisionsTable(mcCollision.posX(), mcCollision.posY(), mcCollision.posZ());
808+
products.jV0McCollisionIdsTable(mcCollision.globalIndex());
809+
filledV0McCollisionTable = true;
810+
}
811+
std::vector<int32_t> mothersId;
812+
if (particle.has_mothers()) {
813+
auto mothersIdTemps = particle.mothersIds();
814+
for (auto mothersIdTemp : mothersIdTemps) {
815+
mothersId.push_back(mothersIdTemp);
816+
}
817+
}
818+
int daughtersId[2] = {-1, -1};
819+
auto i = 0;
820+
if (particle.has_daughters()) {
821+
for (auto daughterId : particle.daughtersIds()) {
822+
if (i > 1) {
823+
break;
824+
}
825+
daughtersId[i] = daughterId;
826+
i++;
827+
}
828+
}
829+
auto pdgParticle = pdgDatabase->GetParticle(particle.pdgCode());
830+
products.jV0McsTable(products.jV0McCollisionsTable.lastIndex(), particle.pt(), particle.eta(), particle.phi(), particle.y(), particle.e(), pdgParticle->Mass(), particle.pdgCode(), particle.getGenStatusCode(), particle.getHepMCStatusCode(), particle.isPhysicalPrimary(), jetv0utilities::setV0ParticleDecayBit(particles, particle));
831+
products.jV0McIdsTable(mcCollision.globalIndex(), particle.globalIndex(), mothersId, daughtersId);
832+
}
833+
}
834+
}
835+
PROCESS_SWITCH(JetDerivedDataProducerTask, processV0MCChargedDecays, "produces V0 particles that decay to charged particles", false);
836+
799837
void processDielectronCollisions(aod::ReducedEventsInfo::iterator const& DielectronCollision)
800838
{
801839
products.jDielectronCollisionIdsTable(DielectronCollision.collisionId());

0 commit comments

Comments
 (0)