@@ -122,7 +122,7 @@ struct CorrelationTask {
122122 Filter collisionVertexTypeFilter = (aod::collision::flags & static_cast <uint16_t >(aod::collision::CollisionFlagsRun2::Run2VertexerTracks)) == static_cast <uint16_t >(aod::collision::CollisionFlagsRun2::Run2VertexerTracks);
123123
124124 // Track filters
125- Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true ));
125+ Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t )true ));
126126 Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt) && ((aod::track::trackType & (uint8_t )cfgTrackBitMask) == (uint8_t )cfgTrackBitMask);
127127
128128 // MC filters
@@ -401,8 +401,23 @@ struct CorrelationTask {
401401 using HasPartDaugh1Id = decltype (std::declval<T&>().cfParticleDaugh1Id());
402402
403403 template <typename T>
404- float getV0Rapidity (const T& track)
404+ std::tuple< bool , float > getV0Rapidity (const T& track)
405405 {
406+ if constexpr (!std::experimental::is_detected<HasDecay, T>::value)
407+ return {false , 0 .0f }; // no decay type, return dummy rapidity
408+ const auto decayType = track.decay ();
409+ float mass = 0 .f ;
410+
411+ if (decayType == aod::cf2prongtrack::K0stoPiPi) {
412+ mass = o2::constants::physics::MassK0Short;
413+ } else if (decayType == aod::cf2prongtrack::LambdatoPPi || decayType == aod::cf2prongtrack::AntiLambdatoPiP) {
414+ mass = o2::constants::physics::MassLambda;
415+ } else if (decayType == aod::cf2prongtrack::PhiToKK) {
416+ mass = o2::constants::physics::MassPhi;
417+ } else {
418+ return {false , 0 .0f }; // unsupported decay type, return dummy rapidity
419+ }
420+
406421 const float pt = track.pt ();
407422 const float eta = track.eta ();
408423 const float phi = track.phi ();
@@ -413,25 +428,8 @@ struct CorrelationTask {
413428
414429 const float p2 = px * px + py * py + pz * pz;
415430
416- if constexpr (std::experimental::is_detected<HasDecay, T>::value) {
417- const auto decayType = track.decay ();
418- float mass = 0 .f ;
419-
420- if (decayType == aod::cf2prongtrack::K0stoPiPi) {
421- mass = o2::constants::physics::MassK0Short;
422- } else if (decayType == aod::cf2prongtrack::LambdatoPPi || decayType == aod::cf2prongtrack::AntiLambdatoPiP) {
423- mass = o2::constants::physics::MassLambda;
424- } else if (decayType == aod::cf2prongtrack::PhiToKK) {
425- mass = o2::constants::physics::MassPhi;
426- } else {
427- return -999 .f ; // unsupported decay type, return dummy rapidity
428- }
429-
430- const float E = std::sqrt (p2 + mass * mass);
431- return 0 .5f * std::log ((E + pz) / (E - pz));
432- }
433-
434- return -999 .f ; // no decay type, return dummy rapidity
431+ const float E = std::sqrt (p2 + mass * mass);
432+ return {true , 0 .5f * std::log ((E + pz) / (E - pz))};
435433 }
436434
437435 template <CorrelationContainer::CFStep step, typename TTarget, typename TTracks1, typename TTracks2>
@@ -484,10 +482,12 @@ struct CorrelationTask {
484482 if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast <uint32_t >(track1.decay ()))) == 0u ) {
485483 continue ; // skip particles that do not match the decay mask
486484 }
487- if (cfgV0RapidityMax > 0 && std::abs (getV0Rapidity (track1)) > cfgV0RapidityMax) {
488- continue ; // V0s are not allowed to be outside the rapidity range
485+ if (cfgV0RapidityMax > 0 ) {
486+ auto [t, y] = getV0Rapidity (track1);
487+ if (t && std::abs (y) > cfgV0RapidityMax)
488+ continue ; // V0s are not allowed to be outside the rapidity range
489+ registry.fill (HIST (" yvspt" ), y, track1.pt ());
489490 }
490- registry.fill (HIST (" yvspt" ), getV0Rapidity (track1), track1.pt ());
491491 }
492492
493493 if constexpr (std::experimental::is_detected<HasPartDaugh0Id, typename TTracks1::iterator>::value) {
0 commit comments