Skip to content
Merged
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
27 changes: 20 additions & 7 deletions ALICE3/TableProducer/OTF/onTheFlyDecayer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "ALICE3/Core/TrackUtilities.h"
#include "ALICE3/DataModel/tracksAlice3.h"

#include <CommonConstants/PhysicsConstants.h>
#include <Framework/AnalysisDataModel.h>
#include <Framework/AnalysisHelpers.h>
#include <Framework/AnalysisTask.h>
Expand Down Expand Up @@ -47,13 +48,19 @@
using namespace o2;
using namespace o2::framework;

static constexpr int NumDecays = 7;
static constexpr int NumDecays = 13;
static constexpr int NumParameters = 1;
static constexpr int DefaultParameters[NumDecays][NumParameters]{{1}, {1}, {1}, {1}, {1}, {1}, {1}};
static constexpr std::array<std::array<int, NumParameters>, NumDecays> DefaultParameters{{{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}}};
static const std::vector<std::string> parameterNames{"enable"};
static const std::vector<std::string> particleNames{"K0s",
"Lambda",
"Anti-Lambda",
"SigmaPlus",
"Anti-SigmaPlus",
"SigmaMinus",
"Anti-SigmaMinus",
"Xi0",
"Anti-Xi0",
"Xi",
"Anti-Xi",
"Omega",
Expand All @@ -62,6 +69,12 @@
static const std::vector<int> pdgCodes{PDG_t::kK0Short,
PDG_t::kLambda0,
PDG_t::kLambda0Bar,
PDG_t::kSigmaPlus,
PDG_t::kSigmaBarMinus,
PDG_t::kSigmaMinus,
PDG_t::kSigmaBarPlus,
o2::constants::physics::kXi0,
-o2::constants::physics::kXi0,
PDG_t::kXiMinus,
PDG_t::kXiPlusBar,
PDG_t::kOmegaMinus,
Expand All @@ -78,13 +91,13 @@
Produces<aod::OTFDecayerBits> tableOTFDecayerBits;

o2::upgrade::Decayer decayer;
Service<o2::framework::O2DatabasePDG> pdgDB;
Service<o2::framework::O2DatabasePDG> pdgDB{};
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};

Configurable<int> seed{"seed", 0, "Set seed for particle decayer"};
Configurable<float> magneticField{"magneticField", 20., "Magnetic field (kG)"};
Configurable<LabeledArray<int>> enabledDecays{"enabledDecays",
{DefaultParameters[0], NumDecays, NumParameters, particleNames, parameterNames},
{DefaultParameters[0].data(), NumDecays, NumParameters, particleNames, parameterNames},
"Enable option for particle to be decayed: 0 - no, 1 - yes"};

std::size_t indexOffset = 0;
Expand All @@ -99,7 +112,7 @@
decayer.setSeed(seed);
decayer.setBField(magneticField);
for (int i = 0; i < NumDecays; ++i) {
if (enabledDecays->get(particleNames[i].c_str(), "enable")) {
if (enabledDecays->get(particleNames[i].c_str(), "enable") != 0) {
LOG(info) << " --- Decay enabled: " << pdgCodes[i];
mEnabledDecays.push_back(pdgCodes[i]);
}
Expand Down Expand Up @@ -146,9 +159,9 @@

const float decayRadius = decayer.getDecayRadius();
const float trackVelocity = o2::upgrade::computeParticleVelocity(particle.p(), pdgDB->GetParticle(particle.pdgCode())->Mass());
const int charge = pdgDB->GetParticle(particle.pdgCode())->Charge() / 3;
const int charge = static_cast<int>(pdgDB->GetParticle(particle.pdgCode())->Charge() / 3);
float trackLength{-1.f};
if (!charge) {
if (charge == 0) {
const float dx = particle.vx() - decayer.getSecondaryVertexX();
const float dy = particle.vy() - decayer.getSecondaryVertexY();
const float dz = particle.vz() - decayer.getSecondaryVertexZ();
Expand All @@ -161,7 +174,7 @@

const float trackTimeNS = trackLength / trackVelocity * PicoToNano;
particle.setIndicesDaughter(particlesInDataframe - indexOffset + allParticles.size(), particlesInDataframe - indexOffset + allParticles.size() + (decayStack.size() - 1));
for (auto& daughter : decayStack) {

Check failure on line 177 in ALICE3/TableProducer/OTF/onTheFlyDecayer.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
daughter.setIndicesMother(particlesInDataframe - indexOffset + i, particlesInDataframe - indexOffset + i);
daughter.setCollisionId(particle.collisionId());
daughter.setBitOn(o2::upgrade::DecayerBits::ProducedByDecayer);
Expand Down Expand Up @@ -199,7 +212,7 @@
decayParticles(0, allParticles.size());

// Fill output table
for (auto& otfParticle : allParticles) {

Check failure on line 215 in ALICE3/TableProducer/OTF/onTheFlyDecayer.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
otfParticle.setIndexOffset(indexOffset);
if (otfParticle.hasNaN()) {
histos.fill(HIST("hNaNBookkeeping"), 1);
Expand Down
Loading