diff --git a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx index 86b0513ef07..7525ce0b398 100644 --- a/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx +++ b/PWGLF/TableProducer/Nuspex/ebyeMaker.cxx @@ -54,7 +54,6 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -using TracksFull = soa::Join; using TracksFullPID = soa::Join; using TracksFullIUPID = soa::Join; using BCsWithRun2Info = soa::Join; @@ -258,6 +257,7 @@ struct EbyeMaker { Configurable> cfgTrackSels{"cfgTrackSels", {kTrackSels, 1, 12, particleName, trackSelsNames}, "Track selections"}; Configurable> cfgDcaSelsParam{"cfgDcaSelsParam", {kDcaSelsParam[0], 3, 3, dcaSelsNames, dcaParNames}, "DCA threshold settings"}; + Configurable fillMini{"fillMini", false, "fill mini tables"}; std::array ptMin; std::array ptTof; @@ -267,7 +267,6 @@ struct EbyeMaker { HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - Preslice perCollisionTracksFull = o2::aod::track::collisionId; Preslice perCollisionTracksFullPID = o2::aod::track::collisionId; Preslice perCollisionTracksFullIUPID = o2::aod::track::collisionId; Preslice perCollisionV0 = o2::aod::v0::collisionId; @@ -427,12 +426,40 @@ struct EbyeMaker { return static_cast((track.tpcSignal() - expBethe) / expSigma); } - template - float getOuterPID(T const& track) + template + void fillTableMiniTrack(CandidateTrack& candidateTrack, T const& tk, float const& nSigmaITS = -999.f) { - if (!(doprocessRun2 || doprocessMcRun2) && track.hasTOF() && track.pt() > antipPtTof) - return track.tofNSigmaPr(); - return -999.f; + int selMask = -1; + if ((isMc && candidateTrack.isreco) || !isMc) { + float outerPID = tk.pt() > antipPtTof ? tk.tofNSigmaPr() : -999.f; + candidateTrack.itsnsigma = nSigmaITS; + candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; + selMask = getTrackSelMask(candidateTrack); + if (candidateTrack.outerPID < outerPIDMin) + return; + if (isMc && candidateTrack.pdgcodemoth > 0) + selMask |= candidateTrack.pdgcodemoth; + } else if (isMc && candidateTrack.pdgcodemoth > 0) { + selMask = candidateTrack.pdgcodemoth; + } + if (isMc && selMask >= 0) { + mcMiniTrkTable( + miniCollTable.lastIndex(), + candidateTrack.pt, + static_cast(candidateTrack.eta * 100), + selMask, + candidateTrack.outerPID, + candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, + static_cast(candidateTrack.geneta * 100), + candidateTrack.isreco); + } else if (!isMc) { + miniTrkTable( + miniCollTable.lastIndex(), + candidateTrack.pt, + static_cast(candidateTrack.eta * 100), + selMask, + candidateTrack.outerPID); + } } template @@ -523,8 +550,6 @@ struct EbyeMaker { { if (doprocessRun3 || doprocessMcRun3) return tracksAll.sliceBy(perCollisionTracksFullIUPID, collId); - else if (doprocessRun2 || doprocessMcRun2) - return tracksAll.sliceBy(perCollisionTracksFull, collId); else return tracksAll.sliceBy(perCollisionTracksFullPID, collId); } @@ -912,27 +937,15 @@ struct EbyeMaker { fillRecoEvent(collision, tracks, v0TableThisCollision, centrality); miniCollTable(static_cast(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - candidateTrack.itsnsigma = -999.f; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - int selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.outerPID < outerPIDMin) - continue; - miniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID); + fillTableMiniTrack(candidateTrack, tk); } } } PROCESS_SWITCH(EbyeMaker, processRun3, "process (Run 3)", false); - void processRun2(soa::Join const& collisions, TracksFull const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&) + void processRun2(soa::Join const& collisions, TracksFullPID const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&) { for (const auto& collision : collisions) { auto bc = collision.bc_as(); @@ -974,32 +987,38 @@ struct EbyeMaker { histos.fill(HIST("QA/V0MvsCL0"), centralityCl0, centrality); histos.fill(HIST("QA/trackletsVsV0M"), centrality, multTracklets); - collisionEbyeTable(centrality, collision.posZ()); - - for (const auto& candidateV0 : candidateV0s) { - lambdaEbyeTable( - collisionEbyeTable.lastIndex(), - candidateV0.pt, - candidateV0.eta, - candidateV0.mass, - candidateV0.dcav0pv, - candidateV0.dcav0daugh, - candidateV0.cpa, - candidateV0.globalIndexNeg, - candidateV0.globalIndexPos); - } - - for (int iP{0}; iP < kNpart; ++iP) { - for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons - nucleiEbyeTable( + if (fillMini) { + miniCollTable(static_cast(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl); + for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) + auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); + fillTableMiniTrack(candidateTrack, tk); + } + } else { + collisionEbyeTable(centrality, collision.posZ()); + for (const auto& candidateV0 : candidateV0s) { + lambdaEbyeTable( collisionEbyeTable.lastIndex(), - candidateTrack.pt, - candidateTrack.eta, - candidateTrack.mass, - candidateTrack.dcapv, - candidateTrack.tpcncls, - candidateTrack.tpcnsigma, - candidateTrack.tofmass); + candidateV0.pt, + candidateV0.eta, + candidateV0.mass, + candidateV0.dcav0pv, + candidateV0.dcav0daugh, + candidateV0.cpa, + candidateV0.globalIndexNeg, + candidateV0.globalIndexPos); + } + for (int iP{0}; iP < kNpart; ++iP) { + for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons + nucleiEbyeTable( + collisionEbyeTable.lastIndex(), + candidateTrack.pt, + candidateTrack.eta, + candidateTrack.mass, + candidateTrack.dcapv, + candidateTrack.tpcncls, + candidateTrack.tpcnsigma, + candidateTrack.tofmass); + } } } } @@ -1047,24 +1066,13 @@ struct EbyeMaker { if (triggerCut != 0x0 && (trigger & triggerCut) != triggerCut) { continue; } - miniCollTable(static_cast(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl); + miniCollTable(static_cast(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl); for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal); - candidateTrack.itsnsigma = nSigmaITS; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - int selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.outerPID < outerPIDMin) - continue; - miniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID); + fillTableMiniTrack(candidateTrack, tk, nSigmaITS); } } } @@ -1091,37 +1099,15 @@ struct EbyeMaker { fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) - int selMask = -1; - if (candidateTrack.isreco) { - auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - candidateTrack.itsnsigma = -999.f; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.pdgcodemoth > 0) - selMask |= candidateTrack.pdgcodemoth; - } else if (candidateTrack.pdgcodemoth > 0) { - selMask = candidateTrack.pdgcodemoth; - } - if (selMask < 0) - continue; - mcMiniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID, - candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, - static_cast(candidateTrack.geneta * 100), - candidateTrack.isreco); + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + fillTableMiniTrack(candidateTrack, tk); } } } PROCESS_SWITCH(EbyeMaker, processMcRun3, "process MC (Run 3)", false); - void processMcRun2(soa::Join const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFull const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&) + void processMcRun2(soa::Join const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFullPID const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&) { for (const auto& collision : collisions) { auto bc = collision.bc_as(); @@ -1143,40 +1129,46 @@ struct EbyeMaker { fillMcEvent(collision, tracks, v0TableThisCollision, centrality, mcParticles, mcLab); fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); - collisionEbyeTable(centrality, collision.posZ()); - - for (const auto& candidateV0 : candidateV0s) { - mcLambdaEbyeTable( - collisionEbyeTable.lastIndex(), - candidateV0.pt, - candidateV0.eta, - candidateV0.mass, - candidateV0.dcav0pv, - candidateV0.dcav0daugh, - candidateV0.cpa, - candidateV0.globalIndexNeg, - candidateV0.globalIndexPos, - candidateV0.genpt, - candidateV0.geneta, - candidateV0.pdgcode, - candidateV0.isreco); - } - - for (int iP{0}; iP < kNpart; ++iP) { - for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons - mcNucleiEbyeTable( + if (fillMini) { + miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); + for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + fillTableMiniTrack(candidateTrack, tk); + } + } else { + collisionEbyeTable(centrality, collision.posZ()); + for (const auto& candidateV0 : candidateV0s) { + mcLambdaEbyeTable( collisionEbyeTable.lastIndex(), - candidateTrack.pt, - candidateTrack.eta, - candidateTrack.mass, - candidateTrack.dcapv, - candidateTrack.tpcncls, - candidateTrack.tpcnsigma, - candidateTrack.tofmass, - candidateTrack.genpt, - candidateTrack.geneta, - candidateTrack.pdgcode, - candidateTrack.isreco); + candidateV0.pt, + candidateV0.eta, + candidateV0.mass, + candidateV0.dcav0pv, + candidateV0.dcav0daugh, + candidateV0.cpa, + candidateV0.globalIndexNeg, + candidateV0.globalIndexPos, + candidateV0.genpt, + candidateV0.geneta, + candidateV0.pdgcode, + candidateV0.isreco); + } + for (int iP{0}; iP < kNpart; ++iP) { + for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons + mcNucleiEbyeTable( + collisionEbyeTable.lastIndex(), + candidateTrack.pt, + candidateTrack.eta, + candidateTrack.mass, + candidateTrack.dcapv, + candidateTrack.tpcncls, + candidateTrack.tpcnsigma, + candidateTrack.tofmass, + candidateTrack.genpt, + candidateTrack.geneta, + candidateTrack.pdgcode, + candidateTrack.isreco); + } } } } @@ -1206,33 +1198,12 @@ struct EbyeMaker { fillMcGen(mcParticles, mcLab, collision.mcCollisionId()); miniCollTable(static_cast(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl); - for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref) - int selMask = -1; - if (candidateTrack.isreco) { - auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex); - float outerPID = getOuterPID(tk); - auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); + auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0); + auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2); + if (candidateTrack.isreco) histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal); - candidateTrack.itsnsigma = nSigmaITS; - candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID; - selMask = getTrackSelMask(candidateTrack); - if (candidateTrack.pdgcodemoth > 0) - selMask |= candidateTrack.pdgcodemoth; - } else if (candidateTrack.pdgcodemoth > 0) { - selMask = candidateTrack.pdgcodemoth; - } - if (selMask < 0) - continue; - mcMiniTrkTable( - miniCollTable.lastIndex(), - candidateTrack.pt, - static_cast(candidateTrack.eta * 100), - selMask, - candidateTrack.outerPID, - candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt, - static_cast(candidateTrack.geneta * 100), - candidateTrack.isreco); + fillTableMiniTrack(candidateTrack, tk, nSigmaITS); } } }