Skip to content

Commit c5d18d8

Browse files
author
Henrik Fribert
committed
Fix wrong phi calculation for Sigmas
1 parent c87ee2d commit c5d18d8

2 files changed

Lines changed: 79 additions & 3 deletions

File tree

‎PWGCF/Femto/Core/femtoUtils.h‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "Common/Core/TableHelper.h"
2020

21+
#include <CommonConstants/MathConstants.h>
2122
#include <CommonConstants/PhysicsConstants.h>
2223
#include <Framework/InitContext.h>
2324
#include <Framework/Logger.h>
@@ -173,6 +174,23 @@ concept HasEventShapeRow = requires(T row) {
173174
template <typename T>
174175
concept HasEventShape = HasEventShapeRow<std::decay_t<T>> || (requires { typename std::decay_t<T>::iterator; } && HasEventShapeRow<typename std::decay_t<T>::iterator>);
175176

177+
/// Azimuth of the momentum of a charged particle at the primary vertex, from its azimuth at the decay vertex.
178+
/// The decay vertex (xDecay, yDecay) has to be given relative to the primary vertex. In a solenoidal field the transverse
179+
/// trajectory is a circle through both points, and the tangents at the two ends of a chord make the same angle with it:
180+
/// phiPV = 2*phiChord - phiDecay (independent of polarity).
181+
inline float phiAtPrimaryVertex(float phiDecay, float xDecay, float yDecay)
182+
{
183+
constexpr float TwoPi = o2::constants::math::TwoPI;
184+
if (xDecay == 0.f && yDecay == 0.f) {
185+
return phiDecay;
186+
}
187+
float phi = std::fmod(2.f * std::atan2(yDecay, xDecay) - phiDecay, TwoPi);
188+
if (phi < 0.f) {
189+
phi += TwoPi;
190+
}
191+
return phi;
192+
}
193+
176194
/// Recalculate the pT of a kink mother from its direction and the charged daughter momentum
177195
inline float calcPtnew(float pxMother, float pyMother, float pzMother, float pxDaughter, float pyDaughter, float pzDaughter,
178196
float massMother, float massChargedDaughter, float massNeutralDaughter)

‎PWGCF/Femto/TableProducer/femtoProducer.cxx‎

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,13 @@ struct FemtoProducer {
270270
}
271271
if ((builders.sigmaBuilder.fillAnyTable() || builders.sigmaPlusBuilder.fillAnyTable()) &&
272272
(!doprocessTracksKinksRun3pp && !doprocessTracksV0sCascadesKinksRun3pp && !doprocessTracksV0sCascadesKinksPhotonsRun3pp &&
273-
!doprocessTracksKinksRun3ppMc && !doprocessTracksV0sKinksRun3ppMc)) {
273+
!doprocessTracksKinksRun3ppMc && !doprocessTracksV0sKinksRun3ppMc &&
274+
!doprocessTracksKinksSigmaPlusPcmsRun3pp && !doprocessTracksKinksSigmaPlusPcmsRun3ppMc)) {
274275
LOG(fatal) << "At least one kink table is enabled, but wrong process function is enabled. Breaking...";
275276
}
276277
if (builders.sigmaPlusPcmBuilder.fillAnyTable() &&
277-
(!doprocessTracksSigmaPlusPcmsRun3pp && !doprocessTracksSigmaPlusPcmsRun3ppMc)) {
278+
(!doprocessTracksSigmaPlusPcmsRun3pp && !doprocessTracksSigmaPlusPcmsRun3ppMc &&
279+
!doprocessTracksKinksSigmaPlusPcmsRun3pp && !doprocessTracksKinksSigmaPlusPcmsRun3ppMc)) {
278280
LOG(fatal) << "At least one sigma plus (PCM) table is enabled, but wrong process function is enabled. Breaking...";
279281
}
280282
if ((builders.d0Builder.fillAnyTable() || builders.d0barBuilder.fillAnyTable()) &&
@@ -292,7 +294,7 @@ struct FemtoProducer {
292294
!doprocessTracksV0sRun3ppMc && !doprocessTracksV0sRun3PbPbMc &&
293295
!doprocessTracksV0sCascadesRun3ppMc && !doprocessTracksV0sCascadesRun3PbPbMc &&
294296
!doprocessTracksKinksRun3ppMc && !doprocessTracksV0sKinksRun3ppMc &&
295-
!doprocessTracksSigmaPlusPcmsRun3ppMc &&
297+
!doprocessTracksSigmaPlusPcmsRun3ppMc && !doprocessTracksKinksSigmaPlusPcmsRun3ppMc &&
296298
!doprocessTracksD0sRun3ppMc && !doprocessTracksD0sRun3PbPbMc &&
297299
!doprocessTracksLcsRun3ppMc && !doprocessTracksLcsRun3PbPbMc &&
298300
!doprocessMcOnly)) {
@@ -379,6 +381,7 @@ struct FemtoProducer {
379381
static_cast<int>(doprocessTracksV0sCascadesKinksRun3pp) +
380382
static_cast<int>(doprocessTracksV0sCascadesKinksPhotonsRun3pp) +
381383
static_cast<int>(doprocessTracksSigmaPlusPcmsRun3pp) +
384+
static_cast<int>(doprocessTracksKinksSigmaPlusPcmsRun3pp) +
382385
static_cast<int>(doprocessTracksD0sRun3pp) +
383386
static_cast<int>(doprocessTracksD0sRun3PbPb) +
384387
static_cast<int>(doprocessTracksRun3ppMc) +
@@ -390,6 +393,7 @@ struct FemtoProducer {
390393
static_cast<int>(doprocessTracksKinksRun3ppMc) +
391394
static_cast<int>(doprocessTracksV0sKinksRun3ppMc) +
392395
static_cast<int>(doprocessTracksSigmaPlusPcmsRun3ppMc) +
396+
static_cast<int>(doprocessTracksKinksSigmaPlusPcmsRun3ppMc) +
393397
static_cast<int>(doprocessTracksD0sRun3ppMc) +
394398
static_cast<int>(doprocessTracksD0sRun3PbPbMc) +
395399
static_cast<int>(doprocessTracksLcsRun3pp) +
@@ -833,6 +837,29 @@ struct FemtoProducer {
833837
}
834838
PROCESS_SWITCH(FemtoProducer, processTracksSigmaPlusPcmsRun3pp, "Provide tracks and sigma plus reconstructed with a PCM photon", false);
835839

840+
void processTracksKinksSigmaPlusPcmsRun3pp(rawinputs::Run3PpCollisions const& cols,
841+
o2::aod::BCsWithTimestamps const& bcs,
842+
rawinputs::Run3FullPidTracks const& tracks,
843+
rawinputs::Run3Kinks const& kinks,
844+
rawinputs::Run3SigmaPlusPcms const& sigmaPlusPcms)
845+
{
846+
builders.trackBuilder.reset(tracks);
847+
for (auto const& col : cols) {
848+
auto tracksThisCol = tracks.sliceBy(preslices.perColTracks, col.globalIndex());
849+
if (!processCollisions<modes::System::kPP_Run3>(col, bcs, tracksThisCol)) {
850+
continue;
851+
}
852+
auto tracksWithItsPid = o2::soa::Attach<rawinputs::Run3FullPidTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
853+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracksThisCol);
854+
processTracks<modes::System::kPP_Run3>(col, tracksWithItsPid);
855+
auto kinksThisCol = kinks.sliceBy(preslices.perColRecoKinks, col.globalIndex());
856+
processKinks<modes::System::kPP_Run3>(col, tracksThisCol, kinksThisCol);
857+
auto sigmaPlusPcmsThisCol = sigmaPlusPcms.sliceBy(preslices.perColSigmaPlusPcms, col.globalIndex());
858+
processSigmaPlusPcms<modes::System::kPP_Run3>(col, tracksThisCol, sigmaPlusPcmsThisCol);
859+
}
860+
}
861+
PROCESS_SWITCH(FemtoProducer, processTracksKinksSigmaPlusPcmsRun3pp, "Provide tracks, kinks and sigma plus reconstructed with a PCM photon", false);
862+
836863
void processTracksV0sCascadesKinksRun3pp(rawinputs::Run3PpCollisions const& cols,
837864
o2::aod::BCsWithTimestamps const& bcs,
838865
rawinputs::Run3FullPidTracks const& tracks,
@@ -1168,6 +1195,37 @@ struct FemtoProducer {
11681195
}
11691196
PROCESS_SWITCH(FemtoProducer, processTracksSigmaPlusPcmsRun3ppMc, "Provide reconstructed and generated tracks and sigma plus reconstructed with a PCM photon", false);
11701197

1198+
void processTracksKinksSigmaPlusPcmsRun3ppMc(rawinputs::Run3PpMcGenCollisions const& mcCols,
1199+
rawinputs::Run3PpMcRecoCollisions const& cols,
1200+
o2::aod::BCsWithTimestamps const& bcs,
1201+
rawinputs::Run3McRecoTracks const& tracks,
1202+
rawinputs::Run3Kinks const& kinks,
1203+
rawinputs::Run3RecoSigmaPlusPcms const& sigmaPlusPcms,
1204+
rawinputs::Run3McGenParticles const& mcParticles)
1205+
{
1206+
builders.mcBuilder.reset(mcCols, mcParticles);
1207+
builders.trackBuilder.reset(tracks);
1208+
if (builders.mcBuilder.isPassThrough()) {
1209+
builders.mcBuilder.fillMcPassThrough<modes::System::kPP_Run3_MC>(mcCols, mcParticles, preslices.perMcCollision, mcProducts);
1210+
}
1211+
1212+
for (const auto& col : cols) {
1213+
auto tracksThisCol = tracks.sliceBy(preslices.perColRecoTracks, col.globalIndex());
1214+
if (!processMcCollisions<modes::System::kPP_Run3_MC>(col, mcCols, bcs, tracksThisCol)) {
1215+
continue;
1216+
}
1217+
auto tracksWithItsPid = o2::soa::Attach<rawinputs::Run3McRecoTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
1218+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracksThisCol);
1219+
processMcTracks<modes::System::kPP_Run3_MC>(col, mcCols, tracksThisCol, tracksWithItsPid, mcParticles);
1220+
1221+
auto kinksThisCol = kinks.sliceBy(preslices.perColRecoKinks, col.globalIndex());
1222+
processMcKinks<modes::System::kPP_Run3_MC>(col, mcCols, tracks, kinksThisCol, mcParticles);
1223+
auto sigmaPlusPcmsThisCol = sigmaPlusPcms.sliceBy(preslices.perColRecoSigmaPlusPcms, col.globalIndex());
1224+
processMcSigmaPlusPcms<modes::System::kPP_Run3_MC>(col, mcCols, tracks, sigmaPlusPcmsThisCol, mcParticles);
1225+
}
1226+
}
1227+
PROCESS_SWITCH(FemtoProducer, processTracksKinksSigmaPlusPcmsRun3ppMc, "Provide reconstructed and generated tracks, kinks and sigma plus reconstructed with a PCM photon", false);
1228+
11711229
void processTracksV0sKinksRun3ppMc(rawinputs::Run3PpMcGenCollisions const& mcCols,
11721230
rawinputs::Run3PpMcRecoCollisions const& cols,
11731231
o2::aod::BCsWithTimestamps const& bcs,

0 commit comments

Comments
 (0)