Skip to content

Commit 7ec53ef

Browse files
[PWGLF] Refactor recoed V0 analysis in derivedlambdakzeroanalysis (#18128)
1 parent a3e0adb commit 7ec53ef

1 file changed

Lines changed: 48 additions & 100 deletions

File tree

‎PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx‎

Lines changed: 48 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ struct derivedlambdakzeroanalysis {
14321432
}
14331433

14341434
template <typename TV0, typename TCollision>
1435-
uint64_t computeReconstructionBitmap(TV0 const& v0, TCollision const& collision, float rapidityLambda, float rapidityK0Short, float /*pT*/)
1435+
uint64_t computeReconstructionBitmap(TV0 const& v0, TCollision const& collision, float rapidityLambda, float rapidityK0Short)
14361436
// precalculate this information so that a check is one mask operation, not many
14371437
{
14381438
uint64_t bitMap = 0;
@@ -2926,9 +2926,9 @@ struct derivedlambdakzeroanalysis {
29262926
}
29272927

29282928
// ______________________________________________________
2929-
// Real data processing - no MC subscription
2930-
template <typename TCollision, typename TV0s>
2931-
void analyzeRecoedV0sInRealData(TCollision const& collision, TV0s const& fullV0s)
2929+
// Recoed data and MC processing (can use MC info if subscribed to it)
2930+
template <typename TCollision, typename TV0s, typename TMCCollisions>
2931+
void analyzeRecoedV0s(TCollision const& collision, TV0s const& fullV0s, TMCCollisions const& /*mcCollisions*/)
29322932
{
29332933
// Fire up CCDB
29342934
if ((mlConfigurations.useK0ShortScores && mlConfigurations.calculateK0ShortScores) ||
@@ -2951,8 +2951,6 @@ struct derivedlambdakzeroanalysis {
29512951
// Fill recoed event properties
29522952
fillReconstructedEventProperties(collision, centrality, collisionOccupancy, interactionRate, gapSide, selGapSide);
29532953

2954-
histos.fill(HIST("hInteractionRateVsOccupancy"), interactionRate, collisionOccupancy);
2955-
29562954
// __________________________________________
29572955
// perform main analysis
29582956
int nK0Shorts = 0;
@@ -2965,96 +2963,51 @@ struct derivedlambdakzeroanalysis {
29652963
if (v0.v0Type() != v0Selections.v0TypeSelection && v0Selections.v0TypeSelection > -1)
29662964
continue; // skip V0s that are not standard
29672965

2968-
// fill AP plot for all V0s
2969-
histos.fill(HIST("GeneralQA/h2dArmenterosAll"), v0.alpha(), v0.qtarm());
2970-
2971-
uint64_t selMap = computeReconstructionBitmap(v0, collision, v0.yLambda(), v0.yK0Short(), v0.pt());
2972-
2973-
// consider for histograms for all species
2974-
BITSET(selMap, selConsiderK0Short);
2975-
BITSET(selMap, selConsiderLambda);
2976-
BITSET(selMap, selConsiderAntiLambda);
2977-
2978-
BITSET(selMap, selPhysPrimK0Short);
2979-
BITSET(selMap, selPhysPrimLambda);
2980-
BITSET(selMap, selPhysPrimAntiLambda);
2981-
2982-
analyseCandidate(v0, v0.pt(), v0.yLambda(), v0.yK0Short(), centrality, selMap, selGapSide, nK0Shorts, nLambdas, nAntiLambdas);
2983-
} // end v0 loop
2984-
2985-
// fill the histograms with the number of reconstructed K0s/Lambda/antiLambda per collision
2986-
if (analyseK0Short) {
2987-
histos.fill(HIST("h2dNbrOfK0ShortVsCentrality"), centrality, nK0Shorts);
2988-
}
2989-
if (analyseLambda) {
2990-
histos.fill(HIST("h2dNbrOfLambdaVsCentrality"), centrality, nLambdas);
2991-
}
2992-
if (analyseAntiLambda) {
2993-
histos.fill(HIST("h2dNbrOfAntiLambdaVsCentrality"), centrality, nAntiLambdas);
2994-
}
2995-
}
2996-
2997-
// ______________________________________________________
2998-
// Simulated processing (subscribes to MC information too)
2999-
template <typename TCollision, typename TV0s, typename TMCCollisions>
3000-
void analyzeRecoedV0sInMonteCarlo(TCollision const& collision, TV0s const& fullV0s, TMCCollisions const& /*mcCollisions*/)
3001-
{
3002-
// Fire up CCDB
3003-
if ((mlConfigurations.useK0ShortScores && mlConfigurations.calculateK0ShortScores) ||
3004-
(mlConfigurations.useLambdaScores && mlConfigurations.calculateLambdaScores) ||
3005-
(mlConfigurations.useAntiLambdaScores && mlConfigurations.calculateAntiLambdaScores) ||
3006-
v0Selections.rejectTPCsectorBoundary) {
3007-
initCCDB(collision);
3008-
}
3009-
3010-
if (!isEventAccepted(collision, true)) {
3011-
return;
3012-
}
3013-
3014-
float centrality = -1;
3015-
float collisionOccupancy = -2; // -1 already taken for the case where occupancy cannot be evaluated
3016-
double interactionRate = -1;
3017-
// gap side
3018-
int gapSide = -1;
3019-
int selGapSide = -1; // -1 --> Hadronic ; 0 --> Single Gap - A side ; 1 --> Single Gap - C side ; 2 --> Double Gap - both A & C sides
3020-
// Fill recoed event properties
3021-
fillReconstructedEventProperties(collision, centrality, collisionOccupancy, interactionRate, gapSide, selGapSide);
3022-
3023-
histos.fill(HIST("hInteractionRateVsOccupancy"), interactionRate, collisionOccupancy);
2966+
float pt = v0.pt();
2967+
float ptMC = -1.f;
2968+
float yK0Short = v0.yK0Short();
2969+
float yLambda = v0.yLambda();
2970+
bool correctCollision = false;
2971+
int mcNch = -1;
2972+
uint64_t selMapMCassociation = 0;
2973+
2974+
if constexpr (requires { v0.v0MCCoreId(); }) {
2975+
if (doMCAssociation) {
2976+
if (!v0.has_v0MCCore())
2977+
continue;
30242978

3025-
// __________________________________________
3026-
// perform main analysis
3027-
int nK0Shorts = 0;
3028-
int nLambdas = 0;
3029-
int nAntiLambdas = 0;
3030-
for (auto const& v0 : fullV0s) {
3031-
if (std::abs(v0.negativeeta()) > v0Selections.daughterEtaCut || std::abs(v0.positiveeta()) > v0Selections.daughterEtaCut)
3032-
continue; // remove acceptance that's badly reproduced by MC / superfluous in future
2979+
auto v0MC = v0.template v0MCCore_as<soa::Join<aod::V0MCCores, aod::V0MCCollRefs>>();
30332980

3034-
if (v0.v0Type() != v0Selections.v0TypeSelection && v0Selections.v0TypeSelection > -1)
3035-
continue; // skip V0s that are not standard
2981+
ptMC = RecoDecay::sqrtSumOfSquares(v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC());
2982+
pt = ptMC;
2983+
yK0Short = RecoDecay::y(std::array{v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC(), v0MC.pzPosMC() + v0MC.pzNegMC()}, o2::constants::physics::MassKaonNeutral);
2984+
yLambda = RecoDecay::y(std::array{v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC(), v0MC.pzPosMC() + v0MC.pzNegMC()}, o2::constants::physics::MassLambda);
30362985

3037-
if (!v0.has_v0MCCore())
3038-
continue;
2986+
selMapMCassociation = computeMCAssociation(v0MC);
30392987

3040-
auto v0MC = v0.template v0MCCore_as<soa::Join<aod::V0MCCores, aod::V0MCCollRefs>>();
2988+
if constexpr (requires { collision.straMCCollisionId(); }) {
2989+
// check collision association explicitly
2990+
if (collision.has_straMCCollision()) {
2991+
auto mcCollision = collision.template straMCCollision_as<TMCCollisions>();
2992+
mcNch = mcCollision.multMCNParticlesEta05();
2993+
correctCollision = (v0MC.straMCCollisionId() == mcCollision.globalIndex());
2994+
}
2995+
}
2996+
}
2997+
}
30412998

30422999
// fill AP plot for all V0s
30433000
histos.fill(HIST("GeneralQA/h2dArmenterosAll"), v0.alpha(), v0.qtarm());
30443001

3045-
float ptmc = RecoDecay::sqrtSumOfSquares(v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC());
3046-
float ymc = 1e3;
3047-
if (v0MC.pdgCode() == PDG_t::kK0Short)
3048-
ymc = RecoDecay::y(std::array{v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC(), v0MC.pzPosMC() + v0MC.pzNegMC()}, o2::constants::physics::MassKaonNeutral);
3049-
else if (std::abs(v0MC.pdgCode()) == PDG_t::kLambda0)
3050-
ymc = RecoDecay::y(std::array{v0MC.pxPosMC() + v0MC.pxNegMC(), v0MC.pyPosMC() + v0MC.pyNegMC(), v0MC.pzPosMC() + v0MC.pzNegMC()}, o2::constants::physics::MassLambda);
3051-
3052-
uint64_t selMap = computeReconstructionBitmap(v0, collision, ymc, ymc, ptmc);
3053-
selMap = selMap | computeMCAssociation(v0MC);
3002+
uint64_t selMap = computeReconstructionBitmap(v0, collision, yK0Short, yLambda);
3003+
BITSET(selMap, selMapMCassociation);
30543004

30553005
// feeddown matrix always with association
3056-
if (calculateFeeddownMatrix)
3057-
fillFeeddownMatrix(v0, ptmc, centrality, selMap);
3006+
if constexpr (requires { v0.motherMCPartId(); }) {
3007+
if (calculateFeeddownMatrix) {
3008+
fillFeeddownMatrix(v0, ptMC, centrality, selMap);
3009+
}
3010+
}
30583011

30593012
// consider only associated candidates if asked to do so, disregard association
30603013
if (!doMCAssociation) {
@@ -3067,18 +3020,13 @@ struct derivedlambdakzeroanalysis {
30673020
BITSET(selMap, selPhysPrimAntiLambda);
30683021
}
30693022

3070-
analyseCandidate(v0, ptmc, ymc, ymc, centrality, selMap, selGapSide, nK0Shorts, nLambdas, nAntiLambdas);
3023+
analyseCandidate(v0, pt, yLambda, yK0Short, centrality, selMap, selGapSide, nK0Shorts, nLambdas, nAntiLambdas);
30713024

3072-
if (doCollisionAssociationQA) {
3073-
// check collision association explicitly
3074-
bool correctCollision = false;
3075-
int mcNch = -1;
3076-
if (collision.has_straMCCollision()) {
3077-
auto mcCollision = collision.template straMCCollision_as<TMCCollisions>();
3078-
mcNch = mcCollision.multMCNParticlesEta05();
3079-
correctCollision = (v0MC.straMCCollisionId() == mcCollision.globalIndex());
3025+
if constexpr (requires { collision.straMCCollisionId(); }) {
3026+
if (doCollisionAssociationQA) {
3027+
// check collision association explicitly
3028+
analyseCollisionAssociation(v0, ptMC, mcNch, correctCollision, selMap);
30803029
}
3081-
analyseCollisionAssociation(v0, ptmc, mcNch, correctCollision, selMap);
30823030
}
30833031

30843032
} // end v0 loop
@@ -3535,28 +3483,28 @@ struct derivedlambdakzeroanalysis {
35353483
// Real data processing in Run 3 - no MC subscription
35363484
void processRealDataRun3(soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraEvSelExtras, aod::StraStamps, aod::StraEvTimes>::iterator const& collision, V0Candidates const& fullV0s, DauTracks const&)
35373485
{
3538-
analyzeRecoedV0sInRealData(collision, fullV0s);
3486+
analyzeRecoedV0s(collision, fullV0s, static_cast<TObject*>(nullptr));
35393487
}
35403488

35413489
// ______________________________________________________
35423490
// Real data processing in Run 2 - no MC subscription
35433491
void processRealDataRun2(soa::Join<aod::StraCollisions, aod::StraCentsRun2, aod::StraEvSelsRun2, aod::StraStamps, aod::StraEvTimes>::iterator const& collision, V0Candidates const& fullV0s, DauTracks const&)
35443492
{
3545-
analyzeRecoedV0sInRealData(collision, fullV0s);
3493+
analyzeRecoedV0s(collision, fullV0s, static_cast<TObject*>(nullptr));
35463494
}
35473495

35483496
// ______________________________________________________
35493497
// Simulated processing in Run 3 (subscribes to MC information too)
35503498
void processMonteCarloRun3(soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraEvSelExtras, aod::StraStamps, aod::StraEvTimes, aod::StraCollLabels>::iterator const& collision, V0McCandidates const& fullV0s, DauTracks const&, aod::MotherMCParts const&, soa::Join<aod::StraMCCollisions, aod::StraMCCollMults, aod::McCentFV0As, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::McCentFT0CVariant1s, aod::McCentNGlobals> const& mccollisions, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const&)
35513499
{
3552-
analyzeRecoedV0sInMonteCarlo(collision, fullV0s, mccollisions);
3500+
analyzeRecoedV0s(collision, fullV0s, mccollisions);
35533501
}
35543502

35553503
// ______________________________________________________
35563504
// Simulated processing in Run 2 (subscribes to MC information too)
35573505
void processMonteCarloRun2(soa::Join<aod::StraCollisions, aod::StraCentsRun2, aod::StraEvSelsRun2, aod::StraStamps, aod::StraEvTimes, aod::StraCollLabels>::iterator const& collision, V0McCandidates const& fullV0s, DauTracks const&, aod::MotherMCParts const&, soa::Join<aod::StraMCCollisions, aod::StraMCCollMults> const& mccollisions, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const&)
35583506
{
3559-
analyzeRecoedV0sInMonteCarlo(collision, fullV0s, mccollisions);
3507+
analyzeRecoedV0s(collision, fullV0s, mccollisions);
35603508
}
35613509

35623510
// ______________________________________________________

0 commit comments

Comments
 (0)