From dca83202dfea64c9adc0a575f052cd2edddc6fa6 Mon Sep 17 00:00:00 2001 From: Christopher Klumm Date: Wed, 10 Dec 2025 16:14:48 +0100 Subject: [PATCH 1/4] Implementation for Production of Derived Data --- ...toDreamProducerTaskForSpecificAnalysis.cxx | 196 +++++++++++++++++- 1 file changed, 194 insertions(+), 2 deletions(-) diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx index 33f07d2772e..e34470bed96 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx @@ -53,9 +53,10 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Configurable confRequireBitmask{"confRequireBitmask", false, "Require bitmask selection for candidates"}; // Number of candidates required - Configurable confNumberOfTracks{"confNumberOfTracks", 3, "Number of tracks"}; - Configurable confNumberOfV0{"confNumberOfV0", 0, "Number of V0"}; + Configurable confNumberOfTracks{"confNumberOfTracks", 0, "Number of tracks"}; + Configurable confNumberOfV0{"confNumberOfV0", 1, "Number of V0"}; Configurable confNumberOfCascades{"confNumberOfCascades", 0, "Number of Cascades"}; + Configurable confNumberOfReso{"confNumberOfV0", 1, "Number of Reso"}; /// Track selection Configurable confPIDthrMom{"confPIDthrMom", 1.f, "Momentum threshold from which TPC and TOF are required for PID"}; @@ -83,10 +84,41 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Configurable confMinInvMassCascade{"confMinInvMassCascade", 1.2, "Minimum invariant mass of Cascade (particle)"}; Configurable confMaxInvMassCascade{"confMaxInvMassCascade", 1.5, "Maximum invariant mass of Cascade (particle)"}; + + struct : ConfigurableGroup { //set loosest cuts + std::string prefix = std::string("Reso"); + Configurable pdgCode{"pdgCode", 333, "PDG code of particle 2 Reso"}; + + Configurable confMinInvMassReso{"confMinInvMassReso", 0.86, "Minimum invariant mass of Reso (particle)"}; + Configurable confMaxInvMassReso{"confMaxInvMassReso", 1.3, "Maximum invariant mass of Reso (particle)"}; + + + Configurable daughPosCutBit{"daughPosCutBit", 2401446, "Selection bit for positive child of V02"}; // K+ + Configurable daughPosTPCBit{"daughPosTPCBit", 4096, "PID TPC bit for positive child of V02"}; + Configurable daughPosTPCTOFBit{"daughPosTPCTOFBit", 2048, "PID TOF bit for positive child of V02"}; + Configurable daughNegCutBit{"daughNegCutBit", 2401445, "Selection bit for negative child of V02"}; // K- + Configurable daughNegMergedTPCBit{"daughNegMergedTPCBit", 16386, "PID TPC bit for negative child of V02"}; + Configurable daughNegMergedTPCTOFBit{"daughNegMergedTPCTOFBit", 8194, "PID TOF bit for negative child of V02"}; + + Configurable partType1{"partType1", kResoPosdaughTPC_NegdaughTPC}; + Configurable partType2{"partType2", kResoPosdaughTOF_NegdaughTOF}; + Configurable partType3{"partType3", kResoPosdaughTOF_NegdaughTPC}; + Configurable partType4{"partType4", kResoPosdaughTPC_NegdaughTOF}; + + } Reso; + // Partition for selected particles Partition selectedV0s = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kV0)); Partition selectedCascades = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kCascade)); + Partition selectedResos = (ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCTOFBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCTOFBit), false)) && + (aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && + (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso); + + HistogramRegistry eventRegistry{"eventRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr uint32_t kSignPlusMask = 1 << 1; @@ -386,6 +418,166 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { createSpecifiedDerivedDataTrkCascade(col, thegroupSelectedParts, thegroupSelectedCascades, parts); } PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNCascades, "Enable producing data with tracks and Cascades collisions for data", true); + + + template + void createSpecifiedDerivedDataV0Reso(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) + { + //check v0's + int v0Count = 0; + int antiV0Count = 0; + int ResoCount = 0; // no antiparticles + + for (const auto& V0 : groupSelectedV0s) { + if ((V0.mLambda() > confMinInvMassV0) && (V0.mLambda() < confMaxInvMassV0)) { + if (confRequireBitmask) { + if (ncheckbit(V0.cut(), confCutV0SameForAntipart)) { + const auto& posChild = parts.iteratorAt(V0.index() - 2); + const auto& negChild = parts.iteratorAt(V0.index() - 1); + if (((posChild.cut() & confChildPosCutV0) == confChildPosCutV0 && + (posChild.pidcut() & confChildPosTPCBitV0) == confChildPosTPCBitV0 && + (negChild.cut() & confChildNegCutV0) == confChildNegCutV0 && + (negChild.pidcut() & confChildNegTPCBitV0) == confChildNegTPCBitV0)) { + v0Count++; + } + } + } else { + v0Count++; + } + } else if ((V0.mAntiLambda() > confMinInvMassAntiV0) && (V0.mAntiLambda() < confMaxInvMassAntiV0)) { + if (confRequireBitmask) { + if (ncheckbit(V0.cut(), confCutV0SameForAntipart)) { + const auto& posChild = parts.iteratorAt(V0.index() - 2); + const auto& negChild = parts.iteratorAt(V0.index() - 1); + if (((posChild.cut() & confChildPosCutV0) == confChildPosCutV0 && + (posChild.pidcut() & confChildNegTPCBitV0) == confChildNegTPCBitV0 && // exchanged values because checking antiparticle daughters and pid of particles exchange + (negChild.cut() & confChildNegCutV0) == confChildNegCutV0 && + (negChild.pidcut() & confChildPosTPCBitV0) == confChildPosTPCBitV0)) { // exchanged values because checking antiparticle daughters and pid of particles exchange + antiV0Count++; + } + } + } else { + antiV0Count++; + } + } + } + + + for (const auto& reso : groupSelectedResos) { + + if (confRequireBitmask) { + + const auto& posChild = parts.iteratorAt(reso.index() - 2); + const auto& negChild = parts.iteratorAt(reso.index() - 1); + + if (((posresoChild.cut() & Reso2.daughPosCutBit) == Reso2.daughPosCutBit) && + ((negresoChild.cut() & Reso2.daughNegCutBit) == Reso2.daughNegCutBit)) { + + ResoCount++; + } + } else { + ResoCount++; + } + + } + + std::vector tmpIDtrack; + + if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && confNumberOfReso >= confNumberOfReso)) { + eventRegistry.fill(HIST("hStatistiscs"), 1); + outputCollision(col.posZ(), col.multV0M(), col.multNtr(), col.sphericity(), col.magField()); + for (const auto& femtoParticle : parts) { + if (aod::femtodreamparticle::ParticleType::kResoChild == femtoParticle.partType()) { // + std::vector childIDs = {0, 0}; + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + tmpIDtrack.push_back(femtoParticle.index()); + } + if (aod::femtodreamparticle::ParticleType::kV0Child == femtoParticle.partType()) { + std::vector childIDs = {0, 0}; + const auto& children = femtoParticle.childrenIds(); + int childId = (children[0] != 0) ? children[0] : children[1]; //?? + if (childId != -1) { + int rowInPrimaryTrackTable = getRowDaughters(childId, tmpIDtrack); + childIDs = (children[0] != 0) ? std::vector{rowInPrimaryTrackTable, 0} : std::vector{0, rowInPrimaryTrackTable}; + } else { + childIDs = (children[0] != 0) ? std::vector{-1, 0} : std::vector{0, -1}; + } + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + if (aod::femtodreamparticle::ParticleType::kV0 == femtoParticle.partType()) { + // If the order in primary producer is changed of storing first pos, neg daughters and then V0 - this must be updated + const int rowOfLastTrack = outputParts.lastIndex(); + std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + + if ( (Reso.partType1 == femtoParticle.partType()) || + (Reso.partType2 == femtoParticle.partType()) || + (Reso.partType3 == femtoParticle.partType()) || + (Reso.partType4 == femtoParticle.partType()) ) { + + const int rowOfLastTrack = outputParts.lastIndex(); //überprüfen + std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; //überprüfen + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + } + } else { + eventRegistry.fill(HIST("hStatistiscs"), 2); + } + } + + + void processCollisionsWithNV0AndNReso(const o2::aod::FDCollision& col, + const o2::aod::FDParticles& parts) + { + eventRegistry.fill(HIST("hStatistiscs"), 0); + auto thegroupSelectedResos = selectedResos->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + auto thegroupSelectedV0s = selectedV0s->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + + createSpecifiedDerivedDataV0Reso(col, thegroupSelectedV0s, thegroupSelectedResos, parts); + } + PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNV0AndNReso, "Enable producing data with pp collisions for data v0-reso", true); + }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From 882a5f35bb7f8c33e6037dee84a5078fde48cde8 Mon Sep 17 00:00:00 2001 From: Christopher Klumm Date: Thu, 11 Dec 2025 12:02:02 +0100 Subject: [PATCH 2/4] Compile time fixes --- ...toDreamProducerTaskForSpecificAnalysis.cxx | 78 +++++++++---------- 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx index e34470bed96..ebfdc15d876 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx @@ -56,7 +56,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Configurable confNumberOfTracks{"confNumberOfTracks", 0, "Number of tracks"}; Configurable confNumberOfV0{"confNumberOfV0", 1, "Number of V0"}; Configurable confNumberOfCascades{"confNumberOfCascades", 0, "Number of Cascades"}; - Configurable confNumberOfReso{"confNumberOfV0", 1, "Number of Reso"}; + Configurable confNumberOfReso{"confNumberOfReso", 1, "Number of Reso"}; /// Track selection Configurable confPIDthrMom{"confPIDthrMom", 1.f, "Momentum threshold from which TPC and TOF are required for PID"}; @@ -84,26 +84,24 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Configurable confMinInvMassCascade{"confMinInvMassCascade", 1.2, "Minimum invariant mass of Cascade (particle)"}; Configurable confMaxInvMassCascade{"confMaxInvMassCascade", 1.5, "Maximum invariant mass of Cascade (particle)"}; - - struct : ConfigurableGroup { //set loosest cuts + struct : ConfigurableGroup { // set loosest cuts std::string prefix = std::string("Reso"); Configurable pdgCode{"pdgCode", 333, "PDG code of particle 2 Reso"}; Configurable confMinInvMassReso{"confMinInvMassReso", 0.86, "Minimum invariant mass of Reso (particle)"}; Configurable confMaxInvMassReso{"confMaxInvMassReso", 1.3, "Maximum invariant mass of Reso (particle)"}; + Configurable daughPosCutBit{"daughPosCutBit", 2401446, "Selection bit for positive child of V02"}; // K+ + Configurable daughPosTPCBit{"daughPosTPCBit", 4096, "PID TPC bit for positive child of V02"}; + Configurable daughPosTPCTOFBit{"daughPosTPCTOFBit", 2048, "PID TOF bit for positive child of V02"}; + Configurable daughNegCutBit{"daughNegCutBit", 2401445, "Selection bit for negative child of V02"}; // K- + Configurable daughNegMergedTPCBit{"daughNegMergedTPCBit", 16386, "PID TPC bit for negative child of V02"}; + Configurable daughNegMergedTPCTOFBit{"daughNegMergedTPCTOFBit", 8194, "PID TOF bit for negative child of V02"}; - Configurable daughPosCutBit{"daughPosCutBit", 2401446, "Selection bit for positive child of V02"}; // K+ - Configurable daughPosTPCBit{"daughPosTPCBit", 4096, "PID TPC bit for positive child of V02"}; - Configurable daughPosTPCTOFBit{"daughPosTPCTOFBit", 2048, "PID TOF bit for positive child of V02"}; - Configurable daughNegCutBit{"daughNegCutBit", 2401445, "Selection bit for negative child of V02"}; // K- - Configurable daughNegMergedTPCBit{"daughNegMergedTPCBit", 16386, "PID TPC bit for negative child of V02"}; - Configurable daughNegMergedTPCTOFBit{"daughNegMergedTPCTOFBit", 8194, "PID TOF bit for negative child of V02"}; - - Configurable partType1{"partType1", kResoPosdaughTPC_NegdaughTPC}; - Configurable partType2{"partType2", kResoPosdaughTOF_NegdaughTOF}; - Configurable partType3{"partType3", kResoPosdaughTOF_NegdaughTPC}; - Configurable partType4{"partType4", kResoPosdaughTPC_NegdaughTOF}; + Configurable partType1{"partType1", aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC}; + Configurable partType2{"partType2", aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF}; + Configurable partType3{"partType3", aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC}; + Configurable partType4{"partType4", aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF}; } Reso; @@ -111,14 +109,13 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Partition selectedV0s = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kV0)); Partition selectedCascades = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kCascade)); - Partition selectedResos = (ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCTOFBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(Reso.partType1), ncheckbit(aod::femtodreamparticle::pidcut, Reso2.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso2.daughNegMergedTPCTOFBit), false)) && - (aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && - (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso); + Partition selectedResos = (ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCTOFBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCBit), false) || + ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCTOFBit), false)) && + (aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && + (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso); - HistogramRegistry eventRegistry{"eventRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr uint32_t kSignPlusMask = 1 << 1; @@ -419,11 +416,10 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNCascades, "Enable producing data with tracks and Cascades collisions for data", true); - template - void createSpecifiedDerivedDataV0Reso(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) + void createSpecifiedDerivedDataV0Reso(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) { - //check v0's + // check v0's int v0Count = 0; int antiV0Count = 0; int ResoCount = 0; // no antiparticles @@ -462,23 +458,21 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } } - for (const auto& reso : groupSelectedResos) { if (confRequireBitmask) { - const auto& posChild = parts.iteratorAt(reso.index() - 2); - const auto& negChild = parts.iteratorAt(reso.index() - 1); + const auto& posresoChild = parts.iteratorAt(reso.index() - 2); + const auto& negresoChild = parts.iteratorAt(reso.index() - 1); - if (((posresoChild.cut() & Reso2.daughPosCutBit) == Reso2.daughPosCutBit) && - ((negresoChild.cut() & Reso2.daughNegCutBit) == Reso2.daughNegCutBit)) { + if (((posresoChild.cut() & Reso.daughPosCutBit) == Reso.daughPosCutBit) && + ((negresoChild.cut() & Reso.daughNegCutBit) == Reso.daughNegCutBit)) { - ResoCount++; + ResoCount++; } } else { - ResoCount++; + ResoCount++; } - } std::vector tmpIDtrack; @@ -541,14 +535,14 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { femtoParticle.mAntiLambda()); } - if ( (Reso.partType1 == femtoParticle.partType()) || - (Reso.partType2 == femtoParticle.partType()) || - (Reso.partType3 == femtoParticle.partType()) || - (Reso.partType4 == femtoParticle.partType()) ) { + if ((aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC == femtoParticle.partType()) || // later as configurable + (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF == femtoParticle.partType()) || + (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC == femtoParticle.partType()) || + (aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF == femtoParticle.partType())) { - const int rowOfLastTrack = outputParts.lastIndex(); //überprüfen - std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; //überprüfen - outputParts(outputCollision.lastIndex(), + const int rowOfLastTrack = outputParts.lastIndex(); // überprüfen + std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; // überprüfen + outputParts(outputCollision.lastIndex(), femtoParticle.pt(), femtoParticle.eta(), femtoParticle.phi(), @@ -566,9 +560,8 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } } - - void processCollisionsWithNV0AndNReso(const o2::aod::FDCollision& col, - const o2::aod::FDParticles& parts) + void processCollisionsWithNV0AndNReso(const o2::aod::FDCollision& col, + const o2::aod::FDParticles& parts) { eventRegistry.fill(HIST("hStatistiscs"), 0); auto thegroupSelectedResos = selectedResos->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); @@ -577,7 +570,6 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { createSpecifiedDerivedDataV0Reso(col, thegroupSelectedV0s, thegroupSelectedResos, parts); } PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNV0AndNReso, "Enable producing data with pp collisions for data v0-reso", true); - }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From 1c0ac1c6ebc8e2ba81c4fe2acd7ed89e97d6d504 Mon Sep 17 00:00:00 2001 From: Christopher Klumm Date: Fri, 12 Dec 2025 16:03:36 +0100 Subject: [PATCH 3/4] Producer for Production of derived data It selects only specific particle types. Here cases for the phi, the K0short and the Kstar were added as well as process functions with switches. --- ...toDreamProducerTaskForSpecificAnalysis.cxx | 256 ++++++++++++++---- 1 file changed, 208 insertions(+), 48 deletions(-) diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx index ebfdc15d876..2d7e5167109 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx @@ -91,30 +91,29 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { Configurable confMinInvMassReso{"confMinInvMassReso", 0.86, "Minimum invariant mass of Reso (particle)"}; Configurable confMaxInvMassReso{"confMaxInvMassReso", 1.3, "Maximum invariant mass of Reso (particle)"}; - Configurable daughPosCutBit{"daughPosCutBit", 2401446, "Selection bit for positive child of V02"}; // K+ - Configurable daughPosTPCBit{"daughPosTPCBit", 4096, "PID TPC bit for positive child of V02"}; - Configurable daughPosTPCTOFBit{"daughPosTPCTOFBit", 2048, "PID TOF bit for positive child of V02"}; - Configurable daughNegCutBit{"daughNegCutBit", 2401445, "Selection bit for negative child of V02"}; // K- - Configurable daughNegMergedTPCBit{"daughNegMergedTPCBit", 16386, "PID TPC bit for negative child of V02"}; - Configurable daughNegMergedTPCTOFBit{"daughNegMergedTPCTOFBit", 8194, "PID TOF bit for negative child of V02"}; - - Configurable partType1{"partType1", aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC}; - Configurable partType2{"partType2", aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF}; - Configurable partType3{"partType3", aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC}; - Configurable partType4{"partType4", aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF}; - + Configurable daughPosCutBit{"daughPosCutBit", 2401446, "Selection bit for positive child of Reso"}; + Configurable daughNegCutBit{"daughNegCutBit", 2401445, "Selection bit for negative child of Reso"}; } Reso; // Partition for selected particles Partition selectedV0s = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kV0)); Partition selectedCascades = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kCascade)); - Partition selectedResos = (ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCTOFBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCTOFBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCBit), false) || - ifnode(aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF), ncheckbit(aod::femtodreamparticle::pidcut, Reso.daughPosTPCBit) && ncheckbit(aod::femtodreamparticle::cut, Reso.daughNegMergedTPCTOFBit), false)) && - (aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && - (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso); + Partition selectedK0Short = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kV0K0Short)); + + Partition selectedPhi = ((aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF))) && + ((aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && + (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso)); + + Partition selectedKStar = ((aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTPC_NegdaughTPC)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTPC_NegdaughTOF)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTOF_NegdaughTPC)) || + (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTOF_NegdaughTOF))) && + ((aod::femtodreamparticle::mLambda > Reso.confMinInvMassReso) && + (aod::femtodreamparticle::mLambda < Reso.confMaxInvMassReso)); HistogramRegistry eventRegistry{"eventRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; @@ -281,7 +280,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { createSpecifiedDerivedData(col, thegroupSelectedParts, thegroupSelectedV0s, parts); } - PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNV0, "Enable producing data with ppp collisions for data", true); + PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNV0, "Enable producing data with ppp collisions for data", false); /// This function stores accepted collisions in derived data /// @tparam PartitionType @@ -414,10 +413,10 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { createSpecifiedDerivedDataTrkCascade(col, thegroupSelectedParts, thegroupSelectedCascades, parts); } - PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNCascades, "Enable producing data with tracks and Cascades collisions for data", true); + PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNTracksAndNCascades, "Enable producing data with tracks and Cascades collisions for data", false); template - void createSpecifiedDerivedDataV0Reso(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) + void createSpecifiedDerivedDataV0Phi(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) { // check v0's int v0Count = 0; @@ -459,7 +458,6 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } for (const auto& reso : groupSelectedResos) { - if (confRequireBitmask) { const auto& posresoChild = parts.iteratorAt(reso.index() - 2); @@ -477,12 +475,17 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { std::vector tmpIDtrack; - if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && confNumberOfReso >= confNumberOfReso)) { + if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso)) { eventRegistry.fill(HIST("hStatistiscs"), 1); outputCollision(col.posZ(), col.multV0M(), col.multNtr(), col.sphericity(), col.magField()); + for (const auto& femtoParticle : parts) { - if (aod::femtodreamparticle::ParticleType::kResoChild == femtoParticle.partType()) { // - std::vector childIDs = {0, 0}; + + if (aod::femtodreamparticle::ParticleType::kResoChild == femtoParticle.partType()) { + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); outputParts(outputCollision.lastIndex(), femtoParticle.pt(), femtoParticle.eta(), @@ -494,18 +497,35 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { childIDs, femtoParticle.mLambda(), femtoParticle.mAntiLambda()); - tmpIDtrack.push_back(femtoParticle.index()); } + + if ((aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC == femtoParticle.partType()) || + (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF == femtoParticle.partType()) || + (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC == femtoParticle.partType()) || + (aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF == femtoParticle.partType())) { + + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + if (aod::femtodreamparticle::ParticleType::kV0Child == femtoParticle.partType()) { - std::vector childIDs = {0, 0}; + std::vector childIDs; const auto& children = femtoParticle.childrenIds(); - int childId = (children[0] != 0) ? children[0] : children[1]; //?? - if (childId != -1) { - int rowInPrimaryTrackTable = getRowDaughters(childId, tmpIDtrack); - childIDs = (children[0] != 0) ? std::vector{rowInPrimaryTrackTable, 0} : std::vector{0, rowInPrimaryTrackTable}; - } else { - childIDs = (children[0] != 0) ? std::vector{-1, 0} : std::vector{0, -1}; - } + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); outputParts(outputCollision.lastIndex(), femtoParticle.pt(), femtoParticle.eta(), @@ -520,8 +540,10 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } if (aod::femtodreamparticle::ParticleType::kV0 == femtoParticle.partType()) { // If the order in primary producer is changed of storing first pos, neg daughters and then V0 - this must be updated - const int rowOfLastTrack = outputParts.lastIndex(); - std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); outputParts(outputCollision.lastIndex(), femtoParticle.pt(), femtoParticle.eta(), @@ -534,14 +556,152 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { femtoParticle.mLambda(), femtoParticle.mAntiLambda()); } + } + } else { + eventRegistry.fill(HIST("hStatistiscs"), 2); + } + } - if ((aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTPC == femtoParticle.partType()) || // later as configurable - (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTOF == femtoParticle.partType()) || - (aod::femtodreamparticle::kResoPosdaughTOF_NegdaughTPC == femtoParticle.partType()) || - (aod::femtodreamparticle::kResoPosdaughTPC_NegdaughTOF == femtoParticle.partType())) { + void processCollisionsWithNV0AndNPhi(const o2::aod::FDCollision& col, + const o2::aod::FDParticles& parts) + { + eventRegistry.fill(HIST("hStatistiscs"), 0); + auto thegroupSelectedResos = selectedPhi->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + auto thegroupSelectedV0s = selectedV0s->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + + createSpecifiedDerivedDataV0Phi(col, thegroupSelectedV0s, thegroupSelectedResos, parts); + } + PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNV0AndNPhi, "Enable producing data with pp collisions for data v0-reso", true); - const int rowOfLastTrack = outputParts.lastIndex(); // überprüfen - std::vector childIDs = {rowOfLastTrack - 1, rowOfLastTrack}; // überprüfen + template + void createSpecifiedDerivedDataK0ShortKStar(const o2::aod::FDCollision& col, PartitionType groupSelectedV0s, PartitionType groupSelectedResos, PartType parts) + { + // check v0's + int v0Count = 0; + int antiV0Count = 0; + int ResoCount = 0; // no antiparticles + + for (const auto& V0 : groupSelectedV0s) { + if ((V0.mLambda() > confMinInvMassV0) && (V0.mLambda() < confMaxInvMassV0)) { + if (confRequireBitmask) { + if (ncheckbit(V0.cut(), confCutV0SameForAntipart)) { + const auto& posChild = parts.iteratorAt(V0.index() - 2); + const auto& negChild = parts.iteratorAt(V0.index() - 1); + if (((posChild.cut() & confChildPosCutV0) == confChildPosCutV0 && + (posChild.pidcut() & confChildPosTPCBitV0) == confChildPosTPCBitV0 && + (negChild.cut() & confChildNegCutV0) == confChildNegCutV0 && + (negChild.pidcut() & confChildNegTPCBitV0) == confChildNegTPCBitV0)) { + v0Count++; + } + } + } else { + v0Count++; + } + } else if ((V0.mAntiLambda() > confMinInvMassAntiV0) && (V0.mAntiLambda() < confMaxInvMassAntiV0)) { + if (confRequireBitmask) { + if (ncheckbit(V0.cut(), confCutV0SameForAntipart)) { + const auto& posChild = parts.iteratorAt(V0.index() - 2); + const auto& negChild = parts.iteratorAt(V0.index() - 1); + if (((posChild.cut() & confChildPosCutV0) == confChildPosCutV0 && + (posChild.pidcut() & confChildNegTPCBitV0) == confChildNegTPCBitV0 && // exchanged values because checking antiparticle daughters and pid of particles exchange + (negChild.cut() & confChildNegCutV0) == confChildNegCutV0 && + (negChild.pidcut() & confChildPosTPCBitV0) == confChildPosTPCBitV0)) { // exchanged values because checking antiparticle daughters and pid of particles exchange + antiV0Count++; + } + } + } else { + antiV0Count++; + } + } + } + + for (const auto& reso : groupSelectedResos) { + if (confRequireBitmask) { + + const auto& posresoChild = parts.iteratorAt(reso.index() - 2); + const auto& negresoChild = parts.iteratorAt(reso.index() - 1); + + if (((posresoChild.cut() & Reso.daughPosCutBit) == Reso.daughPosCutBit) && + ((negresoChild.cut() & Reso.daughNegCutBit) == Reso.daughNegCutBit)) { + + ResoCount++; + } + } else { + ResoCount++; + } + } + + std::vector tmpIDtrack; + + if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso)) { + eventRegistry.fill(HIST("hStatistiscs"), 1); + outputCollision(col.posZ(), col.multV0M(), col.multNtr(), col.sphericity(), col.magField()); + + for (const auto& femtoParticle : parts) { + + if (aod::femtodreamparticle::ParticleType::kResoKStarChild == femtoParticle.partType()) { + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + + if ((femtoParticle.partType() == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTPC_NegdaughTPC)) || + (femtoParticle.partType() == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTPC_NegdaughTOF)) || + (femtoParticle.partType() == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTOF_NegdaughTPC)) || + (femtoParticle.partType() == uint8_t(aod::femtodreamparticle::kResoKStarPosdaughTOF_NegdaughTOF))) { + + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + + if (aod::femtodreamparticle::ParticleType::kV0K0ShortChild == femtoParticle.partType()) { + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); + + outputParts(outputCollision.lastIndex(), + femtoParticle.pt(), + femtoParticle.eta(), + femtoParticle.phi(), + femtoParticle.partType(), + femtoParticle.cut(), + femtoParticle.pidcut(), + femtoParticle.tempFitVar(), + childIDs, + femtoParticle.mLambda(), + femtoParticle.mAntiLambda()); + } + if (aod::femtodreamparticle::ParticleType::kV0K0Short == femtoParticle.partType()) { + std::vector childIDs; + const auto& children = femtoParticle.childrenIds(); + childIDs.push_back(children[0]); + childIDs.push_back(children[1]); outputParts(outputCollision.lastIndex(), femtoParticle.pt(), femtoParticle.eta(), @@ -560,16 +720,16 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { } } - void processCollisionsWithNV0AndNReso(const o2::aod::FDCollision& col, - const o2::aod::FDParticles& parts) + void createSpecifiedDerivedDataNK0ShortNKStar(const o2::aod::FDCollision& col, + const o2::aod::FDParticles& parts) { eventRegistry.fill(HIST("hStatistiscs"), 0); - auto thegroupSelectedResos = selectedResos->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); - auto thegroupSelectedV0s = selectedV0s->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + auto thegroupSelectedResos = selectedKStar->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); + auto thegroupSelectedV0s = selectedK0Short->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache); - createSpecifiedDerivedDataV0Reso(col, thegroupSelectedV0s, thegroupSelectedResos, parts); + createSpecifiedDerivedDataK0ShortKStar(col, thegroupSelectedV0s, thegroupSelectedResos, parts); } - PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, processCollisionsWithNV0AndNReso, "Enable producing data with pp collisions for data v0-reso", true); + PROCESS_SWITCH(FemtoDreamProducerTaskForSpecificAnalysis, createSpecifiedDerivedDataNK0ShortNKStar, "Enable producing data with pp collisions for data K0Short-KStar", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From c0af00a795717d4496285dc7bf409e04db32293a Mon Sep 17 00:00:00 2001 From: Christopher Klumm Date: Fri, 12 Dec 2025 18:06:34 +0100 Subject: [PATCH 4/4] removal of o2 linter errors. --- ...toDreamProducerTaskForSpecificAnalysis.cxx | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx index 2d7e5167109..0f43b4ff8e0 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTaskForSpecificAnalysis.cxx @@ -117,7 +117,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { HistogramRegistry eventRegistry{"eventRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; - static constexpr uint32_t kSignPlusMask = 1 << 1; + static constexpr uint32_t KSignPlusMask = 1 << 1; template int getRowDaughters(int daughID, T const& vecID) @@ -308,7 +308,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { int ascadeCount = 0; int antiCascadeCount = 0; for (const auto& casc : groupSelectedCascades) { - if ((casc.cut() & kSignPlusMask) == kSignPlusMask) { + if ((casc.cut() & KSignPlusMask) == KSignPlusMask) { ascadeCount++; } else { antiCascadeCount++; @@ -421,7 +421,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { // check v0's int v0Count = 0; int antiV0Count = 0; - int ResoCount = 0; // no antiparticles + int resoCount = 0; // no antiparticles for (const auto& V0 : groupSelectedV0s) { if ((V0.mLambda() > confMinInvMassV0) && (V0.mLambda() < confMaxInvMassV0)) { @@ -466,16 +466,16 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { if (((posresoChild.cut() & Reso.daughPosCutBit) == Reso.daughPosCutBit) && ((negresoChild.cut() & Reso.daughNegCutBit) == Reso.daughNegCutBit)) { - ResoCount++; + resoCount++; } } else { - ResoCount++; + resoCount++; } } std::vector tmpIDtrack; - if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso)) { + if ((v0Count >= confNumberOfV0 && resoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && resoCount >= confNumberOfReso)) { eventRegistry.fill(HIST("hStatistiscs"), 1); outputCollision(col.posZ(), col.multV0M(), col.multNtr(), col.sphericity(), col.magField()); @@ -579,7 +579,7 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { // check v0's int v0Count = 0; int antiV0Count = 0; - int ResoCount = 0; // no antiparticles + int resoCount = 0; // no antiparticles for (const auto& V0 : groupSelectedV0s) { if ((V0.mLambda() > confMinInvMassV0) && (V0.mLambda() < confMaxInvMassV0)) { @@ -624,16 +624,16 @@ struct FemtoDreamProducerTaskForSpecificAnalysis { if (((posresoChild.cut() & Reso.daughPosCutBit) == Reso.daughPosCutBit) && ((negresoChild.cut() & Reso.daughNegCutBit) == Reso.daughNegCutBit)) { - ResoCount++; + resoCount++; } } else { - ResoCount++; + resoCount++; } } std::vector tmpIDtrack; - if ((v0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && ResoCount >= confNumberOfReso)) { + if ((v0Count >= confNumberOfV0 && resoCount >= confNumberOfReso) || (antiV0Count >= confNumberOfV0 && resoCount >= confNumberOfReso)) { eventRegistry.fill(HIST("hStatistiscs"), 1); outputCollision(col.posZ(), col.multV0M(), col.multNtr(), col.sphericity(), col.magField());