From c285f1c77e172f06538dc9e49eb78fe6f6b157e5 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 16:07:43 +0200 Subject: [PATCH 01/18] PV refit, TrackParCov, AmbigTracks --- .../DataModel/CandidateReconstructionTables.h | 7 +- .../TableProducer/candidateCreatorToXiPi.cxx | 132 +++++++++++++----- .../TableProducer/candidateSelectorToXiPi.cxx | 42 ++++-- PWGJE/TableProducer/CMakeLists.txt | 6 +- 4 files changed, 138 insertions(+), 49 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 6b03fb37b83..022887dbc17 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1478,10 +1478,12 @@ DECLARE_SOA_COLUMN(EtaPiFromOme, etaPiFromOme, double); DECLARE_SOA_COLUMN(EtaOmegac, etaOmegac, double); DECLARE_SOA_COLUMN(EtaCascade, etaCascade, double); DECLARE_SOA_COLUMN(EtaV0, etaV0, double); -DECLARE_SOA_COLUMN(DcaXYToPVPrimaryPi, dcaXYToPVPrimaryPi, double); DECLARE_SOA_COLUMN(DcaXYToPVV0Dau0, dcaXYToPVV0dau0, double); DECLARE_SOA_COLUMN(DcaXYToPVV0Dau1, dcaXYToPVV0dau1, double); DECLARE_SOA_COLUMN(DcaXYToPVCascDau, dcaXYToPVCascdau, double); +DECLARE_SOA_COLUMN(DcaZToPVV0Dau0, dcaZToPVV0dau0, double); +DECLARE_SOA_COLUMN(DcaZToPVV0Dau1, dcaZToPVV0dau1, double); +DECLARE_SOA_COLUMN(DcaZToPVCascDau, dcaZToPVCascdau, double); DECLARE_SOA_COLUMN(DcaCascDau, dcaCascDau, double); DECLARE_SOA_COLUMN(DcaV0Dau, dcaV0Dau, double); DECLARE_SOA_COLUMN(DcaOmegacDau, dcaOmegacDau, double); @@ -1527,7 +1529,8 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_toxipi::CTauOmegac, hf_cand_toxipi::CTauCascade, hf_cand_toxipi::CTauV0, hf_cand_toxipi::CTauXic, hf_cand_toxipi::EtaV0PosDau, hf_cand_toxipi::EtaV0NegDau, hf_cand_toxipi::EtaPiFromCasc, hf_cand_toxipi::EtaPiFromOme, hf_cand_toxipi::EtaOmegac, hf_cand_toxipi::EtaCascade, hf_cand_toxipi::EtaV0, - hf_cand_toxipi::DcaXYToPVPrimaryPi, hf_cand_toxipi::DcaXYToPVV0Dau0, hf_cand_toxipi::DcaXYToPVV0Dau1, hf_cand_toxipi::DcaXYToPVCascDau, + hf_cand_toxipi::DcaXYToPVV0Dau0, hf_cand_toxipi::DcaXYToPVV0Dau1, hf_cand_toxipi::DcaXYToPVCascDau, + hf_cand_toxipi::DcaZToPVV0Dau0, hf_cand_toxipi::DcaZToPVV0Dau1, hf_cand_toxipi::DcaZToPVCascDau, hf_cand_toxipi::DcaCascDau, hf_cand_toxipi::DcaV0Dau, hf_cand_toxipi::DcaOmegacDau, hf_track_index::HFflag); // table with results of reconstruction level MC matching diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index db749503cb7..f68e8da3953 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -17,6 +17,7 @@ #include "Common/Core/trackUtilities.h" #include "Common/Core/RecoDecay.h" #include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/CollisionAssociation.h" #include "DataFormatsParameters/GRPMagField.h" #include "DataFormatsParameters/GRPObject.h" #include "DetectorsBase/Propagator.h" @@ -50,6 +51,8 @@ using namespace o2::aod::hf_cand_toxipi; struct HfCandidateCreatorToXiPi { Produces rowCandidate; + Configurable doPvRefit{"doPvRefit", false, "set to true if you do PV refit in trackIndexSkimsCreator.cxx"}; + Configurable propagateToPCA{"propagateToPCA", false, "create tracks version propagated to PCA"}; Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; Configurable useWeightedFinalPCA{"useWeightedFinalPCA", true, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; @@ -77,12 +80,18 @@ struct HfCandidateCreatorToXiPi { // filter to use only HF selected collisions Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); + Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng >= 4); using SelectedCollisions = soa::Filtered>; - using MyTracks = soa::Join; + using MyTracks = soa::Join; + using FilteredHfTrackAssocSel = soa::Filtered>; //HfTrackAssoc using MyCascTable = soa::Join; using MyV0Table = soa::Join; + Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit + Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId + Preslice cascadesPerCollision = aod::cascdata::collisionId; + OutputObj hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)}; void init(InitContext const&) @@ -94,14 +103,18 @@ struct HfCandidateCreatorToXiPi { runNumber = 0; } - void process(SelectedCollisions::iterator const& collision, + void process(SelectedCollisions const& collisions, aod::BCsWithTimestamps const& bcWithTimeStamps, MyCascTable const& cascades, MyTracks const& tracks, + FilteredHfTrackAssocSel const& trackIndices, + //aod::HfPvRefitTrack const&, MyV0Table const&, aod::V0sLinked const&) { + for(const auto& collision : collisions) { + // set the magnetic field from CCDB auto bc = collision.bc_as(); initCCDB(bc, runNumber, ccdb, isRun2 ? ccdbPathGrp : ccdbPathGrpMag, lut, isRun2); @@ -128,11 +141,10 @@ struct HfCandidateCreatorToXiPi { double massXicFromPDG = RecoDecay::getMassPDG(kXiCZero); // pdg code 4132 // loop over cascades reconstructed by cascadebuilder.cxx - for (auto const& casc : cascades) { + auto thisCollId = collision.globalIndex(); + auto groupedCascades = cascades.sliceBy(cascadesPerCollision, thisCollId); - if (collision.globalIndex() != casc.collisionId()) { // check to be further processed when the problem of ambiguous tracks will be solved - continue; - } + for (auto const& casc : groupedCascades) { //----------------accessing particles in the decay chain------------- // cascade daughter - charged particle @@ -171,35 +183,65 @@ struct HfCandidateCreatorToXiPi { // info from LF table std::array pVecV0 = {v0Element.px(), v0Element.py(), v0Element.pz()}; // pVec stands for vector containing the 3-momentum components std::array vertexV0 = {v0Element.x(), v0Element.y(), v0Element.z()}; - const std::array covVtxV0 = {v0Element.positionCovMat()[0], v0Element.positionCovMat()[1], v0Element.positionCovMat()[2], v0Element.positionCovMat()[3], v0Element.positionCovMat()[4], v0Element.positionCovMat()[5]}; + std::array covV0 = {0.}; + constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + for (int i = 0; i < 6; i++) { + covV0[MomInd[i]] = v0Element.momentumCovMat()[i]; + covV0[i] = v0Element.positionCovMat()[i]; + } + // create V0 track + auto trackV0 = o2::track::TrackParCov(vertexV0, pVecV0, covV0, 0, true); + trackV0.setAbsCharge(0); + trackV0.setPID(o2::track::PID::Lambda); std::array pVecV0Dau0 = {casc.pxpos(), casc.pypos(), casc.pzpos()}; std::array pVecV0Dau1 = {casc.pxneg(), casc.pyneg(), casc.pzneg()}; - // create V0 track - auto trackV0 = o2::dataformats::V0(vertexV0, pVecV0, covVtxV0, trackParCovV0Dau0, trackParCovV0Dau1, {0, 0}, {0, 0}); auto trackV0Copy = trackV0; //-----------------------------reconstruct cascade track----------------------------- // pseudorapidity double pseudorapPiFromCas = trackXiDauCharged.eta(); + // pion <- casc track to be processed with DCAfitter + auto trackParVarXiDauCharged = getTrackParCov(trackXiDauCharged); + // info from LF table std::array vertexCasc = {casc.x(), casc.y(), casc.z()}; std::array pVecCasc = {casc.px(), casc.py(), casc.pz()}; const std::array covVtxCasc = {casc.positionCovMat()[0], casc.positionCovMat()[1], casc.positionCovMat()[2], casc.positionCovMat()[3], casc.positionCovMat()[4], casc.positionCovMat()[5]}; + + // begin new + std::array covCasc = {0.}; + for (int i = 0; i < 6; i++) { + covCasc[MomInd[i]] = casc.momentumCovMat()[i]; + covCasc[i] = casc.positionCovMat()[i]; + } + // create cascade track (the charge in the constructor is a signed value, not an abs) + o2::track::TrackParCov trackCasc; + if(trackXiDauCharged.sign() > 0) { + trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, 1, true); + } else if (trackXiDauCharged.sign() < 0) { + trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, -1, true); + } else { + continue; + } + trackCasc.setAbsCharge(1); + trackCasc.setPID(o2::track::PID::XiMinus); // see AliceO2/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx + // end new std::array pVecPionFromCasc = {casc.pxbach(), casc.pybach(), casc.pzbach()}; - // pion <- casc track to be processed with DCAfitter - auto trackParVarXiDauCharged = getTrackParCov(trackXiDauCharged); - // create cascade track - auto trackCasc = o2::dataformats::V0(vertexCasc, pVecCasc, covVtxCasc, trackV0, trackParVarXiDauCharged, {0, 0}, {0, 0}); + //auto trackCasc = o2::dataformats::V0(vertexCasc, pVecCasc, covVtxCasc, trackV0, trackParVarXiDauCharged, {0, 0}, {0, 0}); + auto trackCascCopy = trackCasc; //-------------------combining cascade and pion tracks-------------------------- - for (auto const& trackPion : tracks) { + auto groupedTrackIndices = trackIndices.sliceBy(trackIndicesPerCollision, thisCollId); + for (auto const& trackIndexPion : groupedTrackIndices) { + + auto trackPion = trackIndexPion.track_as(); if ((rejDiffCollTrack) && (trackXiDauCharged.collisionId() != trackPion.collisionId())) { // check to be further processed when the problem of ambiguous tracks will be solved continue; @@ -242,27 +284,49 @@ struct HfCandidateCreatorToXiPi { std::array coordVtxOmegac = df.getPCACandidatePos(); std::array covVtxOmegac = df.calcPCACovMatrixFlat(); + // begin new + o2::track::TrackParCov trackOmegac = df.createParentTrackParCov(); + trackOmegac.setAbsCharge(0); + // end new + // create omegac track - auto trackOmegac = o2::dataformats::V0(coordVtxOmegac, pVecOmegac, covVtxOmegac, trackCasc, trackParVarPi, {0, 0}, {0, 0}); + //auto trackOmegac = o2::dataformats::V0(coordVtxOmegac, pVecOmegac, covVtxOmegac, trackCasc, trackParVarPi, {0, 0}, {0, 0}); - // impact parameter omegac - o2::dataformats::DCA impactParameterOmegac; + // primary vertex of the collision auto primaryVertex = getPrimaryVertex(collision); // get the associated covariance matrix with auto covMatrixPV = primaryVertex.getCov(); - trackOmegac.propagateToDCA(primaryVertex, magneticField, &impactParameterOmegac); + std::array pvCoord = {collision.posX(), collision.posY(), collision.posZ()}; + + if(doPvRefit){ // if I asked for PV refit in trackIndexSkimCreator.cxx + pvCoord[0] = trackPion.pvRefitX(); + pvCoord[1] = trackPion.pvRefitY(); + pvCoord[2] = trackPion.pvRefitZ(); + + //o2::dataformats::VertexBase Pvtx; + primaryVertex.setX(trackPion.pvRefitX()); + primaryVertex.setY(trackPion.pvRefitY()); + primaryVertex.setZ(trackPion.pvRefitZ()); + primaryVertex.setCov(trackPion.pvRefitSigmaX2(), trackPion.pvRefitSigmaXY(), trackPion.pvRefitSigmaY2(), trackPion.pvRefitSigmaXZ(), trackPion.pvRefitSigmaYZ(), trackPion.pvRefitSigmaZ2()); + } - // impact parameter + // impact parameters o2::dataformats::DCA impactParameterCasc; o2::dataformats::DCA impactParameterPrimaryPi; o2::dataformats::DCA impactParameterV0; - trackCascCopy.propagateToDCA(primaryVertex, magneticField, &impactParameterCasc); - trackParVarPiCopy.propagateToDCA(primaryVertex, magneticField, &impactParameterPrimaryPi); - trackV0Copy.propagateToDCA(primaryVertex, magneticField, &impactParameterV0); + o2::dataformats::DCA impactParameterOmegac; + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackCascCopy, 2.f, matCorr, &impactParameterCasc); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParVarPiCopy, 2.f, matCorr, &impactParameterPrimaryPi); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackV0Copy, 2.f, matCorr, &impactParameterV0); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); - // DCAxy - double dcaxyPrimaryPi = trackPion.dcaXY(); + // DCAxy (computed with propagateToDCABxByBz method) double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); - double dcaxyCascDau = trackXiDauCharged.dcaXY(); + double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); + + // DCAz (computed with propagateToDCABxByBz method) + double dcazV0Dau0 = trackV0Dau0.dcaZ(); + double dcazV0Dau1 = trackV0Dau1.dcaZ(); + double dcazPiFromCasc = trackXiDauCharged.dcaZ(); // invariant mass under the hypothesis of particles ID corresponding to the decay chain double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis @@ -273,14 +337,17 @@ struct HfCandidateCreatorToXiPi { // computing cosPA double cpaV0 = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); - double cpaOmegac = RecoDecay::cpa(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); + //double cpaOmegac = RecoDecay::cpa(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); + double cpaOmegac = RecoDecay::cpa(pvCoord, coordVtxOmegac, pVecOmegac); double cpaCasc = RecoDecay::cpa(coordVtxOmegac, vertexCasc, pVecCasc); double cpaxyV0 = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); - double cpaxyOmegac = RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); + //double cpaxyOmegac = RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); + double cpaxyOmegac = RecoDecay::cpaXY(pvCoord, coordVtxOmegac, pVecOmegac); double cpaxyCasc = RecoDecay::cpaXY(coordVtxOmegac, vertexCasc, pVecCasc); // computing decay length and ctau - double decLenOmegac = RecoDecay::distance(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac); + //double decLenOmegac = RecoDecay::distance(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac); + double decLenOmegac = RecoDecay::distance(pvCoord, coordVtxOmegac); double decLenCascade = RecoDecay::distance(coordVtxOmegac, vertexCasc); double decLenV0 = RecoDecay::distance(vertexCasc, vertexV0); double ctOmegac = RecoDecay::ct(pVecOmegac, decLenOmegac, massOmegacFromPDG); @@ -302,7 +369,6 @@ struct HfCandidateCreatorToXiPi { int hfFlag = 1 << DecayType::DecayToXiPi; // fill test histograms - hInvMassOmegac->Fill(mOmegac); // fill the table @@ -313,7 +379,7 @@ struct HfCandidateCreatorToXiPi { vertexV0[0], vertexV0[1], vertexV0[2], trackXiDauCharged.sign(), chi2PCAOmegac, covVtxOmegac[0], covVtxOmegac[1], covVtxOmegac[2], covVtxOmegac[3], covVtxOmegac[4], covVtxOmegac[5], - covVtxV0[0], covVtxV0[1], covVtxV0[2], covVtxV0[3], covVtxV0[4], covVtxV0[5], + covV0[0], covV0[1], covV0[2], covV0[3], covV0[4], covV0[5], covVtxCasc[0], covVtxCasc[1], covVtxCasc[2], covVtxCasc[3], covVtxCasc[4], covVtxCasc[5], pVecOmegac[0], pVecOmegac[1], pVecOmegac[2], pVecCasc[0], pVecCasc[1], pVecCasc[2], @@ -334,11 +400,13 @@ struct HfCandidateCreatorToXiPi { ctOmegac, ctCascade, ctV0, ctXic, pseudorapV0PosDau, pseudorapV0NegDau, pseudorapPiFromCas, pseudorapPiFromOme, pseudorapOmegac, pseudorapCascade, pseudorapV0, - dcaxyPrimaryPi, dcaxyV0Dau0, dcaxyV0Dau1, dcaxyCascDau, + dcaxyV0Dau0, dcaxyV0Dau1, dcaxyPiFromCasc, + dcazV0Dau0, dcazV0Dau1, dcazPiFromCasc, dcaCascDau, dcaV0Dau, dcaOmegacDau, hfFlag); } // loop over pions - } // loop over candidates + } // loop over cascades + } // close loop collisions } // end of process }; // end of struct diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 22ea4d13384..e492c7036b8 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -52,9 +52,16 @@ struct HfCandidateSelectorToXiPi { Configurable etaTrackMax{"etaTrackMax", 0.8, "Max absolute value of eta"}; Configurable ptPiFromCascMin{"ptPiFromCascMin", 0.15, "Min pT pi <- casc"}; Configurable ptPiFromOmeMin{"ptPiFromOmeMin", 0.2, "Min pT pi <- omegac"}; - Configurable dcaXYPriPiMin{"dcaXYPriPiMin", 0., "Min dcaxy primary pi track to PV"}; - Configurable dcaXYPriPiMax{"dcaXYPriPiMax", 10., "Max dcaxy primary pi track to PV"}; - Configurable impactParameterZPriPiMax{"impactParameterZPriPiMax", 10., "Max impact parameter primary pi track to PV in Z direction"}; + + Configurable impactParameterXYPriPiMin{"impactParameterXYPriPiMin", 0., "Min dcaxy primary pi track to PV"}; + Configurable impactParameterXYPriPiMax{"impactParameterXYPriPiMax", 10., "Max dcaxy primary pi track to PV"}; + Configurable impactParameterZPriPiMin{"impactParameterZPriPiMin", 0., "Min dcaz primary pi track to PV"}; + Configurable impactParameterZPriPiMax{"impactParameterZPriPiMax", 10., "Max dcaz primary pi track to PV"}; + + Configurable impactParameterXYCascMin{"impactParameterXYCascMin", 0., "Min dcaxy cascade track to PV"}; + Configurable impactParameterXYCascMax{"impactParameterXYCascMax", 10., "Max dcaxy cascade track to PV"}; + Configurable impactParameterZCascMin{"impactParameterZCascMin", 0., "Min dcaz cascade track to PV"}; + Configurable impactParameterZCascMax{"impactParameterZCascMax", 10., "Max dcaz cascade track to PV"}; Configurable ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"}; Configurable ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"}; @@ -97,7 +104,7 @@ struct HfCandidateSelectorToXiPi { Configurable nClustersItsMin{"nClustersItsMin", 3, "Minimum number of ITS clusters requirement for pi <- Omegac"}; Configurable nClustersItsInnBarrMin{"nClustersItsInnBarrMin", 1, "Minimum number of ITS clusters in inner barrel requirement for pi <- Omegac"}; - using MyTrackInfo = soa::Join; + using MyTrackInfo = aod::BigTracksPIDExtended; // removed aod::TrackSelection OutputObj hxVertexOmegac{TH1F("hxVertexOmegac", "x Omegac vertex;xVtx;entries", 500, -10, 10)}; OutputObj hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)}; @@ -131,8 +138,9 @@ struct HfCandidateSelectorToXiPi { double massLambdaFromPDG = RecoDecay::getMassPDG(kLambda0); double massXiFromPDG = RecoDecay::getMassPDG(kXiMinus); - int collIdCasc = -999; - int collIdPrimaryPi = -999; + //int collIdCasc = -999; + //int collIdPrimaryPi = -999; + int collId = -999; // looping over omegac candidates for (auto const& candidate : candidates) { @@ -201,11 +209,19 @@ struct HfCandidateSelectorToXiPi { resultSelections = false; } - // cut on primary pion dcaXY and impact parameter - if ((candidate.dcaXYToPVPrimaryPi() < dcaXYPriPiMin) || (candidate.dcaXYToPVPrimaryPi() > dcaXYPriPiMax)) { + // cut on primary pion dcaXY and dcaZ + if ((candidate.impactParPrimaryPiXY() < impactParameterXYPriPiMin) || (candidate.impactParPrimaryPiXY() > impactParameterXYPriPiMax)) { + resultSelections = false; + } + if ((candidate.impactParPrimaryPiZ() < impactParameterZPriPiMin) || (candidate.impactParPrimaryPiZ() > impactParameterZPriPiMax)) { + resultSelections = false; + } + + // cut on cascade dcaXY and dcaZ + if ((candidate.impactParCascXY() < impactParameterXYCascMin) || (candidate.impactParCascXY() > impactParameterXYCascMax)) { resultSelections = false; } - if (candidate.impactParPrimaryPiZ() > impactParameterZPriPiMax) { + if ((candidate.impactParCascZ() < impactParameterZCascMin) || (candidate.impactParCascZ() > impactParameterZCascMax)) { resultSelections = false; } @@ -388,7 +404,11 @@ struct HfCandidateSelectorToXiPi { hCTauOmegac->Fill(candidate.ctauOmegac()); hCTauXic->Fill(candidate.ctauXic()); - if (trackPiFromCasc.collisionId() != collIdCasc) { + if (candidate.collisionId() != collId) { + hNEventsSaved->Fill(0.5); + collId = trackPiFromCasc.collisionId(); + } + /*if (trackPiFromCasc.collisionId() != collIdCasc) { hNEventsSaved->Fill(0.5); collIdCasc = trackPiFromCasc.collisionId(); } @@ -398,7 +418,7 @@ struct HfCandidateSelectorToXiPi { } if (trackPiFromOmeg.collisionId() != trackPiFromCasc.collisionId()) { hNEventsSaved->Fill(2.5); - } + }*/ } } } diff --git a/PWGJE/TableProducer/CMakeLists.txt b/PWGJE/TableProducer/CMakeLists.txt index d928806bd88..a2728425ec3 100644 --- a/PWGJE/TableProducer/CMakeLists.txt +++ b/PWGJE/TableProducer/CMakeLists.txt @@ -42,7 +42,5 @@ o2physics_add_dpl_workflow(jet-matching-hf COMPONENT_NAME Analysis) endif() -o2physics_add_dpl_workflow(emcal-correction-task - SOURCES emcalCorrectionTask.cxx - PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsBase O2::EMCALBase O2::EMCALReconstruction - COMPONENT_NAME Analysis) + + From f676532f778733c5a407084249663d425ebb9e1d Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:18:14 +0200 Subject: [PATCH 02/18] Adapt for PV refit --- .../TableProducer/candidateCreatorToXiPi.cxx | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index f68e8da3953..cefc5355a2f 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -204,7 +204,7 @@ struct HfCandidateCreatorToXiPi { double pseudorapPiFromCas = trackXiDauCharged.eta(); // pion <- casc track to be processed with DCAfitter - auto trackParVarXiDauCharged = getTrackParCov(trackXiDauCharged); + auto trackParCovXiDauCharged = getTrackParCov(trackXiDauCharged); // info from LF table std::array vertexCasc = {casc.x(), casc.y(), casc.z()}; @@ -233,7 +233,7 @@ struct HfCandidateCreatorToXiPi { std::array pVecPionFromCasc = {casc.pxbach(), casc.pybach(), casc.pzbach()}; // create cascade track - //auto trackCasc = o2::dataformats::V0(vertexCasc, pVecCasc, covVtxCasc, trackV0, trackParVarXiDauCharged, {0, 0}, {0, 0}); + //auto trackCasc = o2::dataformats::V0(vertexCasc, pVecCasc, covVtxCasc, trackV0, trackParCovXiDauCharged, {0, 0}, {0, 0}); auto trackCascCopy = trackCasc; @@ -292,11 +292,21 @@ struct HfCandidateCreatorToXiPi { // create omegac track //auto trackOmegac = o2::dataformats::V0(coordVtxOmegac, pVecOmegac, covVtxOmegac, trackCasc, trackParVarPi, {0, 0}, {0, 0}); + // DCAxy (computed with propagateToDCABxByBz method) + double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); + double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); + double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); + + // DCAz (computed with propagateToDCABxByBz method) + double dcazV0Dau0 = trackV0Dau0.dcaZ(); + double dcazV0Dau1 = trackV0Dau1.dcaZ(); + double dcazPiFromCasc = trackXiDauCharged.dcaZ(); + // primary vertex of the collision auto primaryVertex = getPrimaryVertex(collision); // get the associated covariance matrix with auto covMatrixPV = primaryVertex.getCov(); std::array pvCoord = {collision.posX(), collision.posY(), collision.posZ()}; - if(doPvRefit){ // if I asked for PV refit in trackIndexSkimCreator.cxx + if(doPvRefit && ((trackPion.pvRefitSigmaX2() != 1e10f) || (trackPion.pvRefitSigmaY2() != 1e10f) || (trackPion.pvRefitSigmaZ2() != 1e10f))){ // if I asked for PV refit in trackIndexSkimCreator.cxx pvCoord[0] = trackPion.pvRefitX(); pvCoord[1] = trackPion.pvRefitY(); pvCoord[2] = trackPion.pvRefitZ(); @@ -306,6 +316,19 @@ struct HfCandidateCreatorToXiPi { primaryVertex.setY(trackPion.pvRefitY()); primaryVertex.setZ(trackPion.pvRefitZ()); primaryVertex.setCov(trackPion.pvRefitSigmaX2(), trackPion.pvRefitSigmaXY(), trackPion.pvRefitSigmaY2(), trackPion.pvRefitSigmaXZ(), trackPion.pvRefitSigmaYZ(), trackPion.pvRefitSigmaZ2()); + + o2::dataformats::DCA impactParameterV0Dau0; + o2::dataformats::DCA impactParameterV0Dau1; + o2::dataformats::DCA impactParameterPiFromCasc ; + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau0, 2.f, matCorr, &impactParameterV0Dau0); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau1, 2.f, matCorr, &impactParameterV0Dau1); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovXiDauCharged, 2.f, matCorr, &impactParameterPiFromCasc); + dcaxyV0Dau0 = impactParameterV0Dau0.getY(); + dcaxyV0Dau1 = impactParameterV0Dau1.getY(); + dcaxyPiFromCasc = impactParameterPiFromCasc.getY(); + dcazV0Dau0 = impactParameterV0Dau0.getZ(); + dcazV0Dau1 = impactParameterV0Dau1.getZ(); + dcazPiFromCasc = impactParameterPiFromCasc.getZ(); } // impact parameters @@ -318,16 +341,6 @@ struct HfCandidateCreatorToXiPi { o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackV0Copy, 2.f, matCorr, &impactParameterV0); o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); - // DCAxy (computed with propagateToDCABxByBz method) - double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); - double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); - double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); - - // DCAz (computed with propagateToDCABxByBz method) - double dcazV0Dau0 = trackV0Dau0.dcaZ(); - double dcazV0Dau1 = trackV0Dau1.dcaZ(); - double dcazPiFromCasc = trackXiDauCharged.dcaZ(); - // invariant mass under the hypothesis of particles ID corresponding to the decay chain double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis double mAntiLambda = v0Element.mAntiLambda(); // from LF table, V0 mass under anti-lambda hypothesis From 32681e6f5e346d918f06dcf67b87f97f389ef6fc Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:46:11 +0200 Subject: [PATCH 03/18] Save PV from refit --- PWGHF/DataModel/CandidateReconstructionTables.h | 5 ++++- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 2 +- PWGHF/TableProducer/candidateSelectorToXiPi.cxx | 15 +-------------- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 022887dbc17..4757e46c039 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1393,6 +1393,9 @@ namespace hf_cand_toxipi { // Data processing results: DECLARE_SOA_INDEX_COLUMN(Collision, collision); +DECLARE_SOA_COLUMN(XPv, xPv, float); +DECLARE_SOA_COLUMN(YPv, yPv, float); +DECLARE_SOA_COLUMN(ZPv, zPv, float); DECLARE_SOA_COLUMN(XDecayVtxOmegac, xDecayVtxOmegac, float); DECLARE_SOA_COLUMN(YDecayVtxOmegac, yDecayVtxOmegac, float); DECLARE_SOA_COLUMN(ZDecayVtxOmegac, zDecayVtxOmegac, float); @@ -1503,7 +1506,7 @@ enum DecayType { DecayToXiPi = 0, // declare dedicated Omegac and Xic to Xi Pi candidate table DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", o2::soa::Index<>, - hf_cand_toxipi::CollisionId, collision::PosX, collision::PosY, collision::PosZ, + hf_cand_toxipi::CollisionId, hf_cand_toxipi::XPv, hf_cand_toxipi::YPv, hf_cand_toxipi::ZPv, hf_cand_toxipi::XDecayVtxOmegac, hf_cand_toxipi::YDecayVtxOmegac, hf_cand_toxipi::ZDecayVtxOmegac, hf_cand_toxipi::XDecayVtxCascade, hf_cand_toxipi::YDecayVtxCascade, hf_cand_toxipi::ZDecayVtxCascade, hf_cand_toxipi::XDecayVtxV0, hf_cand_toxipi::YDecayVtxV0, hf_cand_toxipi::ZDecayVtxV0, diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index cefc5355a2f..b3b93ce5780 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -386,7 +386,7 @@ struct HfCandidateCreatorToXiPi { // fill the table rowCandidate(collision.globalIndex(), - collision.posX(), collision.posY(), collision.posZ(), + pvCoord[0], pvCoord[1], pvCoord[2], vertexOmegacFromFitter[0], vertexOmegacFromFitter[1], vertexOmegacFromFitter[2], vertexCasc[0], vertexCasc[1], vertexCasc[2], vertexV0[0], vertexV0[1], vertexV0[2], diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index e492c7036b8..5f6f7b35aca 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -104,7 +104,7 @@ struct HfCandidateSelectorToXiPi { Configurable nClustersItsMin{"nClustersItsMin", 3, "Minimum number of ITS clusters requirement for pi <- Omegac"}; Configurable nClustersItsInnBarrMin{"nClustersItsInnBarrMin", 1, "Minimum number of ITS clusters in inner barrel requirement for pi <- Omegac"}; - using MyTrackInfo = aod::BigTracksPIDExtended; // removed aod::TrackSelection + using MyTrackInfo = aod::BigTracksPIDExtended; OutputObj hxVertexOmegac{TH1F("hxVertexOmegac", "x Omegac vertex;xVtx;entries", 500, -10, 10)}; OutputObj hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)}; @@ -138,8 +138,6 @@ struct HfCandidateSelectorToXiPi { double massLambdaFromPDG = RecoDecay::getMassPDG(kLambda0); double massXiFromPDG = RecoDecay::getMassPDG(kXiMinus); - //int collIdCasc = -999; - //int collIdPrimaryPi = -999; int collId = -999; // looping over omegac candidates @@ -408,17 +406,6 @@ struct HfCandidateSelectorToXiPi { hNEventsSaved->Fill(0.5); collId = trackPiFromCasc.collisionId(); } - /*if (trackPiFromCasc.collisionId() != collIdCasc) { - hNEventsSaved->Fill(0.5); - collIdCasc = trackPiFromCasc.collisionId(); - } - if (trackPiFromOmeg.collisionId() != collIdPrimaryPi) { - hNEventsSaved->Fill(1.5); - collIdPrimaryPi = trackPiFromOmeg.collisionId(); - } - if (trackPiFromOmeg.collisionId() != trackPiFromCasc.collisionId()) { - hNEventsSaved->Fill(2.5); - }*/ } } } From 5266637319f43908c3b9d6d5289a422bdc1731dd Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:51:36 +0200 Subject: [PATCH 04/18] Remove comments --- .../TableProducer/candidateCreatorToXiPi.cxx | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index b3b93ce5780..870035a9123 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -162,7 +162,7 @@ struct HfCandidateCreatorToXiPi { auto trackV0Dau1 = v0Element.negTrack_as(); // pion <- V0 track (negative track) from MyTracks table // check that particles come from the same collision - if (rejDiffCollTrack) { // check to be further processed when the problem of ambiguous tracks will be solved + if (rejDiffCollTrack) { if (trackV0Dau0.collisionId() != trackV0Dau1.collisionId()) { continue; } @@ -211,13 +211,12 @@ struct HfCandidateCreatorToXiPi { std::array pVecCasc = {casc.px(), casc.py(), casc.pz()}; const std::array covVtxCasc = {casc.positionCovMat()[0], casc.positionCovMat()[1], casc.positionCovMat()[2], casc.positionCovMat()[3], casc.positionCovMat()[4], casc.positionCovMat()[5]}; - // begin new std::array covCasc = {0.}; for (int i = 0; i < 6; i++) { covCasc[MomInd[i]] = casc.momentumCovMat()[i]; covCasc[i] = casc.positionCovMat()[i]; } - // create cascade track (the charge in the constructor is a signed value, not an abs) + // create cascade track o2::track::TrackParCov trackCasc; if(trackXiDauCharged.sign() > 0) { trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, 1, true); @@ -227,14 +226,10 @@ struct HfCandidateCreatorToXiPi { continue; } trackCasc.setAbsCharge(1); - trackCasc.setPID(o2::track::PID::XiMinus); // see AliceO2/DataFormats/Reconstruction/src/TrackParametrizationWithError.cxx - // end new + trackCasc.setPID(o2::track::PID::XiMinus); std::array pVecPionFromCasc = {casc.pxbach(), casc.pybach(), casc.pzbach()}; - // create cascade track - //auto trackCasc = o2::dataformats::V0(vertexCasc, pVecCasc, covVtxCasc, trackV0, trackParCovXiDauCharged, {0, 0}, {0, 0}); - auto trackCascCopy = trackCasc; //-------------------combining cascade and pion tracks-------------------------- @@ -284,13 +279,9 @@ struct HfCandidateCreatorToXiPi { std::array coordVtxOmegac = df.getPCACandidatePos(); std::array covVtxOmegac = df.calcPCACovMatrixFlat(); - // begin new + // create omegac track o2::track::TrackParCov trackOmegac = df.createParentTrackParCov(); trackOmegac.setAbsCharge(0); - // end new - - // create omegac track - //auto trackOmegac = o2::dataformats::V0(coordVtxOmegac, pVecOmegac, covVtxOmegac, trackCasc, trackParVarPi, {0, 0}, {0, 0}); // DCAxy (computed with propagateToDCABxByBz method) double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); @@ -350,16 +341,13 @@ struct HfCandidateCreatorToXiPi { // computing cosPA double cpaV0 = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); - //double cpaOmegac = RecoDecay::cpa(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); double cpaOmegac = RecoDecay::cpa(pvCoord, coordVtxOmegac, pVecOmegac); double cpaCasc = RecoDecay::cpa(coordVtxOmegac, vertexCasc, pVecCasc); double cpaxyV0 = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); - //double cpaxyOmegac = RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac, pVecOmegac); double cpaxyOmegac = RecoDecay::cpaXY(pvCoord, coordVtxOmegac, pVecOmegac); double cpaxyCasc = RecoDecay::cpaXY(coordVtxOmegac, vertexCasc, pVecCasc); // computing decay length and ctau - //double decLenOmegac = RecoDecay::distance(std::array{collision.posX(), collision.posY(), collision.posZ()}, coordVtxOmegac); double decLenOmegac = RecoDecay::distance(pvCoord, coordVtxOmegac); double decLenCascade = RecoDecay::distance(coordVtxOmegac, vertexCasc); double decLenV0 = RecoDecay::distance(vertexCasc, vertexV0); From 49b2e683be38bbbdce7d02ec2e2cd37d587b358c Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:52:59 +0200 Subject: [PATCH 05/18] Remove comments --- PWGJE/TableProducer/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PWGJE/TableProducer/CMakeLists.txt b/PWGJE/TableProducer/CMakeLists.txt index a2728425ec3..27fe4cc49d1 100644 --- a/PWGJE/TableProducer/CMakeLists.txt +++ b/PWGJE/TableProducer/CMakeLists.txt @@ -42,5 +42,8 @@ o2physics_add_dpl_workflow(jet-matching-hf COMPONENT_NAME Analysis) endif() - +o2physics_add_dpl_workflow(emcal-correction-task + SOURCES emcalCorrectionTask.cxx + PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsBase O2::EMCALBase O2::EMCALReconstruction + COMPONENT_NAME Analysis) From e42e0a7785a94c2727ff798065135219abd1274b Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:53:25 +0200 Subject: [PATCH 06/18] Remove comments --- PWGJE/TableProducer/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PWGJE/TableProducer/CMakeLists.txt b/PWGJE/TableProducer/CMakeLists.txt index 27fe4cc49d1..98268c4da78 100644 --- a/PWGJE/TableProducer/CMakeLists.txt +++ b/PWGJE/TableProducer/CMakeLists.txt @@ -45,5 +45,4 @@ endif() o2physics_add_dpl_workflow(emcal-correction-task SOURCES emcalCorrectionTask.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsBase O2::EMCALBase O2::EMCALReconstruction - COMPONENT_NAME Analysis) - + COMPONENT_NAME Analysis) \ No newline at end of file From c4ed6247b879784cb90eb5aa8c4853d7c9a0bb74 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:54:00 +0200 Subject: [PATCH 07/18] Remove comments --- PWGJE/TableProducer/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PWGJE/TableProducer/CMakeLists.txt b/PWGJE/TableProducer/CMakeLists.txt index 98268c4da78..c296ff4550d 100644 --- a/PWGJE/TableProducer/CMakeLists.txt +++ b/PWGJE/TableProducer/CMakeLists.txt @@ -45,4 +45,5 @@ endif() o2physics_add_dpl_workflow(emcal-correction-task SOURCES emcalCorrectionTask.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsBase O2::EMCALBase O2::EMCALReconstruction - COMPONENT_NAME Analysis) \ No newline at end of file + COMPONENT_NAME Analysis) + \ No newline at end of file From 2e332260134259bbad37baa452d2c1c5e857d6c7 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 18:58:05 +0200 Subject: [PATCH 08/18] Remove comments --- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index 870035a9123..dedb8ce4258 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -51,7 +51,7 @@ using namespace o2::aod::hf_cand_toxipi; struct HfCandidateCreatorToXiPi { Produces rowCandidate; - Configurable doPvRefit{"doPvRefit", false, "set to true if you do PV refit in trackIndexSkimsCreator.cxx"}; + Configurable doPvRefit{"doPvRefit", false, "set to true if you do PV refit in trackIndexSkimCreator.cxx"}; Configurable propagateToPCA{"propagateToPCA", false, "create tracks version propagated to PCA"}; Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; @@ -238,7 +238,7 @@ struct HfCandidateCreatorToXiPi { auto trackPion = trackIndexPion.track_as(); - if ((rejDiffCollTrack) && (trackXiDauCharged.collisionId() != trackPion.collisionId())) { // check to be further processed when the problem of ambiguous tracks will be solved + if ((rejDiffCollTrack) && (trackXiDauCharged.collisionId() != trackPion.collisionId())) { continue; } From a41b1d16109c85f78f915f7e654be22dc18960c3 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 19:00:42 +0200 Subject: [PATCH 09/18] Remove comments --- PWGJE/TableProducer/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/PWGJE/TableProducer/CMakeLists.txt b/PWGJE/TableProducer/CMakeLists.txt index c296ff4550d..d928806bd88 100644 --- a/PWGJE/TableProducer/CMakeLists.txt +++ b/PWGJE/TableProducer/CMakeLists.txt @@ -46,4 +46,3 @@ o2physics_add_dpl_workflow(emcal-correction-task SOURCES emcalCorrectionTask.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsBase O2::EMCALBase O2::EMCALReconstruction COMPONENT_NAME Analysis) - \ No newline at end of file From 111f52acf8ca3eb89e1cdb4033454b2332ad802d Mon Sep 17 00:00:00 2001 From: ZFederica Date: Sat, 1 Apr 2023 19:17:26 +0200 Subject: [PATCH 10/18] Remove old cascade covMat --- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index dedb8ce4258..e685e922849 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -209,8 +209,6 @@ struct HfCandidateCreatorToXiPi { // info from LF table std::array vertexCasc = {casc.x(), casc.y(), casc.z()}; std::array pVecCasc = {casc.px(), casc.py(), casc.pz()}; - const std::array covVtxCasc = {casc.positionCovMat()[0], casc.positionCovMat()[1], casc.positionCovMat()[2], casc.positionCovMat()[3], casc.positionCovMat()[4], casc.positionCovMat()[5]}; - std::array covCasc = {0.}; for (int i = 0; i < 6; i++) { covCasc[MomInd[i]] = casc.momentumCovMat()[i]; @@ -381,7 +379,7 @@ struct HfCandidateCreatorToXiPi { trackXiDauCharged.sign(), chi2PCAOmegac, covVtxOmegac[0], covVtxOmegac[1], covVtxOmegac[2], covVtxOmegac[3], covVtxOmegac[4], covVtxOmegac[5], covV0[0], covV0[1], covV0[2], covV0[3], covV0[4], covV0[5], - covVtxCasc[0], covVtxCasc[1], covVtxCasc[2], covVtxCasc[3], covVtxCasc[4], covVtxCasc[5], + covCasc[0], covCasc[1], covCasc[2], covCasc[3], covCasc[4], covCasc[5], pVecOmegac[0], pVecOmegac[1], pVecOmegac[2], pVecCasc[0], pVecCasc[1], pVecCasc[2], pVecPionFromOmegac[0], pVecPionFromOmegac[1], pVecPionFromOmegac[2], From b7230dfed8dc5d6ff25614e7e08844d4b310f7b9 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sat, 1 Apr 2023 17:18:41 +0000 Subject: [PATCH 11/18] Please consider the following formatting changes --- .../TableProducer/candidateCreatorToXiPi.cxx | 566 +++++++++--------- 1 file changed, 283 insertions(+), 283 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index e685e922849..71ed8379e6e 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -84,13 +84,13 @@ struct HfCandidateCreatorToXiPi { using SelectedCollisions = soa::Filtered>; using MyTracks = soa::Join; - using FilteredHfTrackAssocSel = soa::Filtered>; //HfTrackAssoc + using FilteredHfTrackAssocSel = soa::Filtered>; // HfTrackAssoc using MyCascTable = soa::Join; using MyV0Table = soa::Join; - Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit - Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId - Preslice cascadesPerCollision = aod::cascdata::collisionId; + Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit + Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId + Preslice cascadesPerCollision = aod::cascdata::collisionId; OutputObj hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)}; @@ -108,304 +108,304 @@ struct HfCandidateCreatorToXiPi { MyCascTable const& cascades, MyTracks const& tracks, FilteredHfTrackAssocSel const& trackIndices, - //aod::HfPvRefitTrack const&, + // aod::HfPvRefitTrack const&, MyV0Table const&, aod::V0sLinked const&) { - for(const auto& collision : collisions) { - - // set the magnetic field from CCDB - auto bc = collision.bc_as(); - initCCDB(bc, runNumber, ccdb, isRun2 ? ccdbPathGrp : ccdbPathGrpMag, lut, isRun2); - auto magneticField = o2::base::Propagator::Instance()->getNominalBz(); // z component - - // 2-prong vertex fitter to build the omegac vertex - o2::vertexing::DCAFitterN<2> df; - df.setBz(magneticField); - df.setPropagateToPCA(propagateToPCA); - df.setMaxR(maxR); - df.setMaxDZIni(maxDZIni); - df.setMaxDXYIni(maxDXYIni); - df.setMinParamChange(minParamChange); - df.setMinRelChi2Change(minRelChi2Change); - df.setMaxChi2(maxChi2); - df.setUseAbsDCA(useAbsDCA); - df.setWeightedFinalPCA(useWeightedFinalPCA); - df.setRefitWithMatCorr(refitWithMatCorr); - - double massPionFromPDG = RecoDecay::getMassPDG(kPiPlus); // pdg code 211 - double massLambdaFromPDG = RecoDecay::getMassPDG(kLambda0); // pdg code 3122 - double massXiFromPDG = RecoDecay::getMassPDG(kXiMinus); // pdg code 3312 - double massOmegacFromPDG = RecoDecay::getMassPDG(kOmegaC0); // pdg code 4332 - double massXicFromPDG = RecoDecay::getMassPDG(kXiCZero); // pdg code 4132 - - // loop over cascades reconstructed by cascadebuilder.cxx - auto thisCollId = collision.globalIndex(); - auto groupedCascades = cascades.sliceBy(cascadesPerCollision, thisCollId); - - for (auto const& casc : groupedCascades) { - - //----------------accessing particles in the decay chain------------- - // cascade daughter - charged particle - // int indexTrackXiDauCharged = casc.bachelorId(); // pion <- xi index from cascade table (not used) - auto trackXiDauCharged = casc.bachelor_as(); // pion <- xi track from MyTracks table - // cascade daughter - V0 - if (!casc.v0_as().has_v0Data()) { // check that V0 data are stored - continue; - } - auto v0 = casc.v0_as(); - auto v0Element = v0.v0Data_as(); // V0 element from LF table containing V0 info - // V0 positive daughter - auto trackV0Dau0 = v0Element.posTrack_as(); // p <- V0 track (positive track) from MyTracks table - // V0 negative daughter - auto trackV0Dau1 = v0Element.negTrack_as(); // pion <- V0 track (negative track) from MyTracks table - - // check that particles come from the same collision - if (rejDiffCollTrack) { - if (trackV0Dau0.collisionId() != trackV0Dau1.collisionId()) { + for (const auto& collision : collisions) { + + // set the magnetic field from CCDB + auto bc = collision.bc_as(); + initCCDB(bc, runNumber, ccdb, isRun2 ? ccdbPathGrp : ccdbPathGrpMag, lut, isRun2); + auto magneticField = o2::base::Propagator::Instance()->getNominalBz(); // z component + + // 2-prong vertex fitter to build the omegac vertex + o2::vertexing::DCAFitterN<2> df; + df.setBz(magneticField); + df.setPropagateToPCA(propagateToPCA); + df.setMaxR(maxR); + df.setMaxDZIni(maxDZIni); + df.setMaxDXYIni(maxDXYIni); + df.setMinParamChange(minParamChange); + df.setMinRelChi2Change(minRelChi2Change); + df.setMaxChi2(maxChi2); + df.setUseAbsDCA(useAbsDCA); + df.setWeightedFinalPCA(useWeightedFinalPCA); + df.setRefitWithMatCorr(refitWithMatCorr); + + double massPionFromPDG = RecoDecay::getMassPDG(kPiPlus); // pdg code 211 + double massLambdaFromPDG = RecoDecay::getMassPDG(kLambda0); // pdg code 3122 + double massXiFromPDG = RecoDecay::getMassPDG(kXiMinus); // pdg code 3312 + double massOmegacFromPDG = RecoDecay::getMassPDG(kOmegaC0); // pdg code 4332 + double massXicFromPDG = RecoDecay::getMassPDG(kXiCZero); // pdg code 4132 + + // loop over cascades reconstructed by cascadebuilder.cxx + auto thisCollId = collision.globalIndex(); + auto groupedCascades = cascades.sliceBy(cascadesPerCollision, thisCollId); + + for (auto const& casc : groupedCascades) { + + //----------------accessing particles in the decay chain------------- + // cascade daughter - charged particle + // int indexTrackXiDauCharged = casc.bachelorId(); // pion <- xi index from cascade table (not used) + auto trackXiDauCharged = casc.bachelor_as(); // pion <- xi track from MyTracks table + // cascade daughter - V0 + if (!casc.v0_as().has_v0Data()) { // check that V0 data are stored continue; } - if (trackXiDauCharged.collisionId() != trackV0Dau0.collisionId()) { - continue; + auto v0 = casc.v0_as(); + auto v0Element = v0.v0Data_as(); // V0 element from LF table containing V0 info + // V0 positive daughter + auto trackV0Dau0 = v0Element.posTrack_as(); // p <- V0 track (positive track) from MyTracks table + // V0 negative daughter + auto trackV0Dau1 = v0Element.negTrack_as(); // pion <- V0 track (negative track) from MyTracks table + + // check that particles come from the same collision + if (rejDiffCollTrack) { + if (trackV0Dau0.collisionId() != trackV0Dau1.collisionId()) { + continue; + } + if (trackXiDauCharged.collisionId() != trackV0Dau0.collisionId()) { + continue; + } } - } - //--------------------------reconstruct V0 track--------------------------- - // pseudorapidity - double pseudorapV0PosDau = trackV0Dau0.eta(); - double pseudorapV0NegDau = trackV0Dau1.eta(); - - // pion & p <- V0 tracks - auto trackParCovV0Dau0 = getTrackParCov(trackV0Dau0); - auto trackParCovV0Dau1 = getTrackParCov(trackV0Dau1); - - // info from LF table - std::array pVecV0 = {v0Element.px(), v0Element.py(), v0Element.pz()}; // pVec stands for vector containing the 3-momentum components - std::array vertexV0 = {v0Element.x(), v0Element.y(), v0Element.z()}; - std::array covV0 = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covV0[MomInd[i]] = v0Element.momentumCovMat()[i]; - covV0[i] = v0Element.positionCovMat()[i]; - } - // create V0 track - auto trackV0 = o2::track::TrackParCov(vertexV0, pVecV0, covV0, 0, true); - trackV0.setAbsCharge(0); - trackV0.setPID(o2::track::PID::Lambda); - - std::array pVecV0Dau0 = {casc.pxpos(), casc.pypos(), casc.pzpos()}; - std::array pVecV0Dau1 = {casc.pxneg(), casc.pyneg(), casc.pzneg()}; - - auto trackV0Copy = trackV0; - - //-----------------------------reconstruct cascade track----------------------------- - // pseudorapidity - double pseudorapPiFromCas = trackXiDauCharged.eta(); - - // pion <- casc track to be processed with DCAfitter - auto trackParCovXiDauCharged = getTrackParCov(trackXiDauCharged); - - // info from LF table - std::array vertexCasc = {casc.x(), casc.y(), casc.z()}; - std::array pVecCasc = {casc.px(), casc.py(), casc.pz()}; - std::array covCasc = {0.}; - for (int i = 0; i < 6; i++) { - covCasc[MomInd[i]] = casc.momentumCovMat()[i]; - covCasc[i] = casc.positionCovMat()[i]; - } - // create cascade track - o2::track::TrackParCov trackCasc; - if(trackXiDauCharged.sign() > 0) { - trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, 1, true); - } else if (trackXiDauCharged.sign() < 0) { - trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, -1, true); - } else { - continue; - } - trackCasc.setAbsCharge(1); - trackCasc.setPID(o2::track::PID::XiMinus); + //--------------------------reconstruct V0 track--------------------------- + // pseudorapidity + double pseudorapV0PosDau = trackV0Dau0.eta(); + double pseudorapV0NegDau = trackV0Dau1.eta(); + + // pion & p <- V0 tracks + auto trackParCovV0Dau0 = getTrackParCov(trackV0Dau0); + auto trackParCovV0Dau1 = getTrackParCov(trackV0Dau1); + + // info from LF table + std::array pVecV0 = {v0Element.px(), v0Element.py(), v0Element.pz()}; // pVec stands for vector containing the 3-momentum components + std::array vertexV0 = {v0Element.x(), v0Element.y(), v0Element.z()}; + std::array covV0 = {0.}; + constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + for (int i = 0; i < 6; i++) { + covV0[MomInd[i]] = v0Element.momentumCovMat()[i]; + covV0[i] = v0Element.positionCovMat()[i]; + } + // create V0 track + auto trackV0 = o2::track::TrackParCov(vertexV0, pVecV0, covV0, 0, true); + trackV0.setAbsCharge(0); + trackV0.setPID(o2::track::PID::Lambda); + + std::array pVecV0Dau0 = {casc.pxpos(), casc.pypos(), casc.pzpos()}; + std::array pVecV0Dau1 = {casc.pxneg(), casc.pyneg(), casc.pzneg()}; + + auto trackV0Copy = trackV0; + + //-----------------------------reconstruct cascade track----------------------------- + // pseudorapidity + double pseudorapPiFromCas = trackXiDauCharged.eta(); + + // pion <- casc track to be processed with DCAfitter + auto trackParCovXiDauCharged = getTrackParCov(trackXiDauCharged); + + // info from LF table + std::array vertexCasc = {casc.x(), casc.y(), casc.z()}; + std::array pVecCasc = {casc.px(), casc.py(), casc.pz()}; + std::array covCasc = {0.}; + for (int i = 0; i < 6; i++) { + covCasc[MomInd[i]] = casc.momentumCovMat()[i]; + covCasc[i] = casc.positionCovMat()[i]; + } + // create cascade track + o2::track::TrackParCov trackCasc; + if (trackXiDauCharged.sign() > 0) { + trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, 1, true); + } else if (trackXiDauCharged.sign() < 0) { + trackCasc = o2::track::TrackParCov(vertexCasc, pVecCasc, covCasc, -1, true); + } else { + continue; + } + trackCasc.setAbsCharge(1); + trackCasc.setPID(o2::track::PID::XiMinus); - std::array pVecPionFromCasc = {casc.pxbach(), casc.pybach(), casc.pzbach()}; + std::array pVecPionFromCasc = {casc.pxbach(), casc.pybach(), casc.pzbach()}; - auto trackCascCopy = trackCasc; + auto trackCascCopy = trackCasc; - //-------------------combining cascade and pion tracks-------------------------- - auto groupedTrackIndices = trackIndices.sliceBy(trackIndicesPerCollision, thisCollId); - for (auto const& trackIndexPion : groupedTrackIndices) { + //-------------------combining cascade and pion tracks-------------------------- + auto groupedTrackIndices = trackIndices.sliceBy(trackIndicesPerCollision, thisCollId); + for (auto const& trackIndexPion : groupedTrackIndices) { - auto trackPion = trackIndexPion.track_as(); + auto trackPion = trackIndexPion.track_as(); - if ((rejDiffCollTrack) && (trackXiDauCharged.collisionId() != trackPion.collisionId())) { - continue; - } + if ((rejDiffCollTrack) && (trackXiDauCharged.collisionId() != trackPion.collisionId())) { + continue; + } - // ask for opposite sign daughters (omegac daughters) - if (trackPion.sign() * trackXiDauCharged.sign() >= 0) { - continue; - } + // ask for opposite sign daughters (omegac daughters) + if (trackPion.sign() * trackXiDauCharged.sign() >= 0) { + continue; + } - // check not to take the same particle twice in the decay chain - if (trackPion.globalIndex() == trackXiDauCharged.globalIndex() || trackPion.globalIndex() == trackV0Dau0.globalIndex() || trackPion.globalIndex() == trackV0Dau1.globalIndex() || trackPion.globalIndex() == casc.globalIndex()) { - continue; - } + // check not to take the same particle twice in the decay chain + if (trackPion.globalIndex() == trackXiDauCharged.globalIndex() || trackPion.globalIndex() == trackV0Dau0.globalIndex() || trackPion.globalIndex() == trackV0Dau1.globalIndex() || trackPion.globalIndex() == casc.globalIndex()) { + continue; + } - // pseudirapidity - double pseudorapPiFromOme = trackPion.eta(); + // pseudirapidity + double pseudorapPiFromOme = trackPion.eta(); - // primary pion track to be processed with DCAFitter - auto trackParVarPi = getTrackParCov(trackPion); - auto trackParVarPiCopy = trackParVarPi; + // primary pion track to be processed with DCAFitter + auto trackParVarPi = getTrackParCov(trackPion); + auto trackParVarPiCopy = trackParVarPi; - // reconstruct omegac with DCAFitter - int nVtxFromFitterOmegac = df.process(trackCasc, trackParVarPi); - if (nVtxFromFitterOmegac == 0) { - continue; - } - auto vertexOmegacFromFitter = df.getPCACandidate(); - auto chi2PCAOmegac = df.getChi2AtPCACandidate(); - std::array pVecCascAsD; - std::array pVecPionFromOmegac; - df.propagateTracksToVertex(); - if (!df.isPropagateTracksToVertexDone()) { - continue; - } - df.getTrack(0).getPxPyPzGlo(pVecCascAsD); - df.getTrack(1).getPxPyPzGlo(pVecPionFromOmegac); - std::array pVecOmegac = {pVecCascAsD[0] + pVecPionFromOmegac[0], pVecCascAsD[1] + pVecPionFromOmegac[1], pVecCascAsD[2] + pVecPionFromOmegac[2]}; - - std::array coordVtxOmegac = df.getPCACandidatePos(); - std::array covVtxOmegac = df.calcPCACovMatrixFlat(); - - // create omegac track - o2::track::TrackParCov trackOmegac = df.createParentTrackParCov(); - trackOmegac.setAbsCharge(0); - - // DCAxy (computed with propagateToDCABxByBz method) - double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); - double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); - double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); - - // DCAz (computed with propagateToDCABxByBz method) - double dcazV0Dau0 = trackV0Dau0.dcaZ(); - double dcazV0Dau1 = trackV0Dau1.dcaZ(); - double dcazPiFromCasc = trackXiDauCharged.dcaZ(); - - // primary vertex of the collision - auto primaryVertex = getPrimaryVertex(collision); // get the associated covariance matrix with auto covMatrixPV = primaryVertex.getCov(); - std::array pvCoord = {collision.posX(), collision.posY(), collision.posZ()}; - - if(doPvRefit && ((trackPion.pvRefitSigmaX2() != 1e10f) || (trackPion.pvRefitSigmaY2() != 1e10f) || (trackPion.pvRefitSigmaZ2() != 1e10f))){ // if I asked for PV refit in trackIndexSkimCreator.cxx - pvCoord[0] = trackPion.pvRefitX(); - pvCoord[1] = trackPion.pvRefitY(); - pvCoord[2] = trackPion.pvRefitZ(); - - //o2::dataformats::VertexBase Pvtx; - primaryVertex.setX(trackPion.pvRefitX()); - primaryVertex.setY(trackPion.pvRefitY()); - primaryVertex.setZ(trackPion.pvRefitZ()); - primaryVertex.setCov(trackPion.pvRefitSigmaX2(), trackPion.pvRefitSigmaXY(), trackPion.pvRefitSigmaY2(), trackPion.pvRefitSigmaXZ(), trackPion.pvRefitSigmaYZ(), trackPion.pvRefitSigmaZ2()); - - o2::dataformats::DCA impactParameterV0Dau0; - o2::dataformats::DCA impactParameterV0Dau1; - o2::dataformats::DCA impactParameterPiFromCasc ; - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau0, 2.f, matCorr, &impactParameterV0Dau0); - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau1, 2.f, matCorr, &impactParameterV0Dau1); - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovXiDauCharged, 2.f, matCorr, &impactParameterPiFromCasc); - dcaxyV0Dau0 = impactParameterV0Dau0.getY(); - dcaxyV0Dau1 = impactParameterV0Dau1.getY(); - dcaxyPiFromCasc = impactParameterPiFromCasc.getY(); - dcazV0Dau0 = impactParameterV0Dau0.getZ(); - dcazV0Dau1 = impactParameterV0Dau1.getZ(); - dcazPiFromCasc = impactParameterPiFromCasc.getZ(); - } + // reconstruct omegac with DCAFitter + int nVtxFromFitterOmegac = df.process(trackCasc, trackParVarPi); + if (nVtxFromFitterOmegac == 0) { + continue; + } + auto vertexOmegacFromFitter = df.getPCACandidate(); + auto chi2PCAOmegac = df.getChi2AtPCACandidate(); + std::array pVecCascAsD; + std::array pVecPionFromOmegac; + df.propagateTracksToVertex(); + if (!df.isPropagateTracksToVertexDone()) { + continue; + } + df.getTrack(0).getPxPyPzGlo(pVecCascAsD); + df.getTrack(1).getPxPyPzGlo(pVecPionFromOmegac); + std::array pVecOmegac = {pVecCascAsD[0] + pVecPionFromOmegac[0], pVecCascAsD[1] + pVecPionFromOmegac[1], pVecCascAsD[2] + pVecPionFromOmegac[2]}; + + std::array coordVtxOmegac = df.getPCACandidatePos(); + std::array covVtxOmegac = df.calcPCACovMatrixFlat(); + + // create omegac track + o2::track::TrackParCov trackOmegac = df.createParentTrackParCov(); + trackOmegac.setAbsCharge(0); + + // DCAxy (computed with propagateToDCABxByBz method) + double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); + double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); + double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); + + // DCAz (computed with propagateToDCABxByBz method) + double dcazV0Dau0 = trackV0Dau0.dcaZ(); + double dcazV0Dau1 = trackV0Dau1.dcaZ(); + double dcazPiFromCasc = trackXiDauCharged.dcaZ(); + + // primary vertex of the collision + auto primaryVertex = getPrimaryVertex(collision); // get the associated covariance matrix with auto covMatrixPV = primaryVertex.getCov(); + std::array pvCoord = {collision.posX(), collision.posY(), collision.posZ()}; + + if (doPvRefit && ((trackPion.pvRefitSigmaX2() != 1e10f) || (trackPion.pvRefitSigmaY2() != 1e10f) || (trackPion.pvRefitSigmaZ2() != 1e10f))) { // if I asked for PV refit in trackIndexSkimCreator.cxx + pvCoord[0] = trackPion.pvRefitX(); + pvCoord[1] = trackPion.pvRefitY(); + pvCoord[2] = trackPion.pvRefitZ(); + + // o2::dataformats::VertexBase Pvtx; + primaryVertex.setX(trackPion.pvRefitX()); + primaryVertex.setY(trackPion.pvRefitY()); + primaryVertex.setZ(trackPion.pvRefitZ()); + primaryVertex.setCov(trackPion.pvRefitSigmaX2(), trackPion.pvRefitSigmaXY(), trackPion.pvRefitSigmaY2(), trackPion.pvRefitSigmaXZ(), trackPion.pvRefitSigmaYZ(), trackPion.pvRefitSigmaZ2()); + + o2::dataformats::DCA impactParameterV0Dau0; + o2::dataformats::DCA impactParameterV0Dau1; + o2::dataformats::DCA impactParameterPiFromCasc; + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau0, 2.f, matCorr, &impactParameterV0Dau0); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovV0Dau1, 2.f, matCorr, &impactParameterV0Dau1); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParCovXiDauCharged, 2.f, matCorr, &impactParameterPiFromCasc); + dcaxyV0Dau0 = impactParameterV0Dau0.getY(); + dcaxyV0Dau1 = impactParameterV0Dau1.getY(); + dcaxyPiFromCasc = impactParameterPiFromCasc.getY(); + dcazV0Dau0 = impactParameterV0Dau0.getZ(); + dcazV0Dau1 = impactParameterV0Dau1.getZ(); + dcazPiFromCasc = impactParameterPiFromCasc.getZ(); + } - // impact parameters - o2::dataformats::DCA impactParameterCasc; - o2::dataformats::DCA impactParameterPrimaryPi; - o2::dataformats::DCA impactParameterV0; - o2::dataformats::DCA impactParameterOmegac; - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackCascCopy, 2.f, matCorr, &impactParameterCasc); - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParVarPiCopy, 2.f, matCorr, &impactParameterPrimaryPi); - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackV0Copy, 2.f, matCorr, &impactParameterV0); - o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); - - // invariant mass under the hypothesis of particles ID corresponding to the decay chain - double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis - double mAntiLambda = v0Element.mAntiLambda(); // from LF table, V0 mass under anti-lambda hypothesis - double mCasc = casc.mXi(); - const std::array arrMassOmegac = {massXiFromPDG, massPionFromPDG}; - double mOmegac = RecoDecay::m(std::array{pVecCascAsD, pVecPionFromOmegac}, arrMassOmegac); - - // computing cosPA - double cpaV0 = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); - double cpaOmegac = RecoDecay::cpa(pvCoord, coordVtxOmegac, pVecOmegac); - double cpaCasc = RecoDecay::cpa(coordVtxOmegac, vertexCasc, pVecCasc); - double cpaxyV0 = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); - double cpaxyOmegac = RecoDecay::cpaXY(pvCoord, coordVtxOmegac, pVecOmegac); - double cpaxyCasc = RecoDecay::cpaXY(coordVtxOmegac, vertexCasc, pVecCasc); - - // computing decay length and ctau - double decLenOmegac = RecoDecay::distance(pvCoord, coordVtxOmegac); - double decLenCascade = RecoDecay::distance(coordVtxOmegac, vertexCasc); - double decLenV0 = RecoDecay::distance(vertexCasc, vertexV0); - double ctOmegac = RecoDecay::ct(pVecOmegac, decLenOmegac, massOmegacFromPDG); - double ctXic = RecoDecay::ct(pVecOmegac, decLenOmegac, massXicFromPDG); - double ctCascade = RecoDecay::ct(pVecCasc, decLenCascade, massXiFromPDG); - double ctV0 = RecoDecay::ct(pVecV0, decLenV0, massLambdaFromPDG); - - // computing eta - double pseudorapOmegac = RecoDecay::eta(pVecOmegac); - double pseudorapCascade = RecoDecay::eta(pVecCasc); - double pseudorapV0 = RecoDecay::eta(pVecV0); - - // DCA between daughters - double dcaCascDau = casc.dcacascdaughters(); - double dcaV0Dau = casc.dcaV0daughters(); - double dcaOmegacDau = std::sqrt(df.getChi2AtPCACandidate()); - - // set hfFlag - int hfFlag = 1 << DecayType::DecayToXiPi; - - // fill test histograms - hInvMassOmegac->Fill(mOmegac); - - // fill the table - rowCandidate(collision.globalIndex(), - pvCoord[0], pvCoord[1], pvCoord[2], - vertexOmegacFromFitter[0], vertexOmegacFromFitter[1], vertexOmegacFromFitter[2], - vertexCasc[0], vertexCasc[1], vertexCasc[2], - vertexV0[0], vertexV0[1], vertexV0[2], - trackXiDauCharged.sign(), - chi2PCAOmegac, covVtxOmegac[0], covVtxOmegac[1], covVtxOmegac[2], covVtxOmegac[3], covVtxOmegac[4], covVtxOmegac[5], - covV0[0], covV0[1], covV0[2], covV0[3], covV0[4], covV0[5], - covCasc[0], covCasc[1], covCasc[2], covCasc[3], covCasc[4], covCasc[5], - pVecOmegac[0], pVecOmegac[1], pVecOmegac[2], - pVecCasc[0], pVecCasc[1], pVecCasc[2], - pVecPionFromOmegac[0], pVecPionFromOmegac[1], pVecPionFromOmegac[2], - pVecV0[0], pVecV0[1], pVecV0[2], - pVecPionFromCasc[0], pVecPionFromCasc[1], pVecPionFromCasc[2], - pVecV0Dau0[0], pVecV0Dau0[1], pVecV0Dau0[2], - pVecV0Dau1[0], pVecV0Dau1[1], pVecV0Dau1[2], - impactParameterCasc.getY(), impactParameterPrimaryPi.getY(), - impactParameterCasc.getZ(), impactParameterPrimaryPi.getZ(), - impactParameterV0.getY(), impactParameterV0.getZ(), - std::sqrt(impactParameterCasc.getSigmaY2()), std::sqrt(impactParameterPrimaryPi.getSigmaY2()), std::sqrt(impactParameterV0.getSigmaY2()), - v0Element.globalIndex(), v0Element.posTrackId(), v0Element.negTrackId(), - casc.globalIndex(), trackPion.globalIndex(), trackXiDauCharged.globalIndex(), - impactParameterOmegac.getY(), impactParameterOmegac.getZ(), - mLambda, mAntiLambda, mCasc, mOmegac, - cpaV0, cpaOmegac, cpaCasc, cpaxyV0, cpaxyOmegac, cpaxyCasc, - ctOmegac, ctCascade, ctV0, ctXic, - pseudorapV0PosDau, pseudorapV0NegDau, pseudorapPiFromCas, pseudorapPiFromOme, - pseudorapOmegac, pseudorapCascade, pseudorapV0, - dcaxyV0Dau0, dcaxyV0Dau1, dcaxyPiFromCasc, - dcazV0Dau0, dcazV0Dau1, dcazPiFromCasc, - dcaCascDau, dcaV0Dau, dcaOmegacDau, hfFlag); - - } // loop over pions - } // loop over cascades - } // close loop collisions + // impact parameters + o2::dataformats::DCA impactParameterCasc; + o2::dataformats::DCA impactParameterPrimaryPi; + o2::dataformats::DCA impactParameterV0; + o2::dataformats::DCA impactParameterOmegac; + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackCascCopy, 2.f, matCorr, &impactParameterCasc); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackParVarPiCopy, 2.f, matCorr, &impactParameterPrimaryPi); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackV0Copy, 2.f, matCorr, &impactParameterV0); + o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); + + // invariant mass under the hypothesis of particles ID corresponding to the decay chain + double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis + double mAntiLambda = v0Element.mAntiLambda(); // from LF table, V0 mass under anti-lambda hypothesis + double mCasc = casc.mXi(); + const std::array arrMassOmegac = {massXiFromPDG, massPionFromPDG}; + double mOmegac = RecoDecay::m(std::array{pVecCascAsD, pVecPionFromOmegac}, arrMassOmegac); + + // computing cosPA + double cpaV0 = RecoDecay::cpa(vertexCasc, vertexV0, pVecV0); + double cpaOmegac = RecoDecay::cpa(pvCoord, coordVtxOmegac, pVecOmegac); + double cpaCasc = RecoDecay::cpa(coordVtxOmegac, vertexCasc, pVecCasc); + double cpaxyV0 = RecoDecay::cpaXY(vertexCasc, vertexV0, pVecV0); + double cpaxyOmegac = RecoDecay::cpaXY(pvCoord, coordVtxOmegac, pVecOmegac); + double cpaxyCasc = RecoDecay::cpaXY(coordVtxOmegac, vertexCasc, pVecCasc); + + // computing decay length and ctau + double decLenOmegac = RecoDecay::distance(pvCoord, coordVtxOmegac); + double decLenCascade = RecoDecay::distance(coordVtxOmegac, vertexCasc); + double decLenV0 = RecoDecay::distance(vertexCasc, vertexV0); + double ctOmegac = RecoDecay::ct(pVecOmegac, decLenOmegac, massOmegacFromPDG); + double ctXic = RecoDecay::ct(pVecOmegac, decLenOmegac, massXicFromPDG); + double ctCascade = RecoDecay::ct(pVecCasc, decLenCascade, massXiFromPDG); + double ctV0 = RecoDecay::ct(pVecV0, decLenV0, massLambdaFromPDG); + + // computing eta + double pseudorapOmegac = RecoDecay::eta(pVecOmegac); + double pseudorapCascade = RecoDecay::eta(pVecCasc); + double pseudorapV0 = RecoDecay::eta(pVecV0); + + // DCA between daughters + double dcaCascDau = casc.dcacascdaughters(); + double dcaV0Dau = casc.dcaV0daughters(); + double dcaOmegacDau = std::sqrt(df.getChi2AtPCACandidate()); + + // set hfFlag + int hfFlag = 1 << DecayType::DecayToXiPi; + + // fill test histograms + hInvMassOmegac->Fill(mOmegac); + + // fill the table + rowCandidate(collision.globalIndex(), + pvCoord[0], pvCoord[1], pvCoord[2], + vertexOmegacFromFitter[0], vertexOmegacFromFitter[1], vertexOmegacFromFitter[2], + vertexCasc[0], vertexCasc[1], vertexCasc[2], + vertexV0[0], vertexV0[1], vertexV0[2], + trackXiDauCharged.sign(), + chi2PCAOmegac, covVtxOmegac[0], covVtxOmegac[1], covVtxOmegac[2], covVtxOmegac[3], covVtxOmegac[4], covVtxOmegac[5], + covV0[0], covV0[1], covV0[2], covV0[3], covV0[4], covV0[5], + covCasc[0], covCasc[1], covCasc[2], covCasc[3], covCasc[4], covCasc[5], + pVecOmegac[0], pVecOmegac[1], pVecOmegac[2], + pVecCasc[0], pVecCasc[1], pVecCasc[2], + pVecPionFromOmegac[0], pVecPionFromOmegac[1], pVecPionFromOmegac[2], + pVecV0[0], pVecV0[1], pVecV0[2], + pVecPionFromCasc[0], pVecPionFromCasc[1], pVecPionFromCasc[2], + pVecV0Dau0[0], pVecV0Dau0[1], pVecV0Dau0[2], + pVecV0Dau1[0], pVecV0Dau1[1], pVecV0Dau1[2], + impactParameterCasc.getY(), impactParameterPrimaryPi.getY(), + impactParameterCasc.getZ(), impactParameterPrimaryPi.getZ(), + impactParameterV0.getY(), impactParameterV0.getZ(), + std::sqrt(impactParameterCasc.getSigmaY2()), std::sqrt(impactParameterPrimaryPi.getSigmaY2()), std::sqrt(impactParameterV0.getSigmaY2()), + v0Element.globalIndex(), v0Element.posTrackId(), v0Element.negTrackId(), + casc.globalIndex(), trackPion.globalIndex(), trackXiDauCharged.globalIndex(), + impactParameterOmegac.getY(), impactParameterOmegac.getZ(), + mLambda, mAntiLambda, mCasc, mOmegac, + cpaV0, cpaOmegac, cpaCasc, cpaxyV0, cpaxyOmegac, cpaxyCasc, + ctOmegac, ctCascade, ctV0, ctXic, + pseudorapV0PosDau, pseudorapV0NegDau, pseudorapPiFromCas, pseudorapPiFromOme, + pseudorapOmegac, pseudorapCascade, pseudorapV0, + dcaxyV0Dau0, dcaxyV0Dau1, dcaxyPiFromCasc, + dcazV0Dau0, dcazV0Dau1, dcazPiFromCasc, + dcaCascDau, dcaV0Dau, dcaOmegacDau, hfFlag); + + } // loop over pions + } // loop over cascades + } // close loop collisions } // end of process }; // end of struct From 403e6d77062a782b1aac207b7ea074d2148d0034 Mon Sep 17 00:00:00 2001 From: Federica Zanone <94552525+ZFederica@users.noreply.github.com> Date: Tue, 4 Apr 2023 09:29:19 +0200 Subject: [PATCH 12/18] Update PWGHF/TableProducer/candidateCreatorToXiPi.cxx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vít Kučera --- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index 71ed8379e6e..2602f271be5 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -250,7 +250,7 @@ struct HfCandidateCreatorToXiPi { continue; } - // pseudirapidity + // pseudorapidity double pseudorapPiFromOme = trackPion.eta(); // primary pion track to be processed with DCAFitter From 025faa91b564ef33ef7e1b733e7b469fa838e904 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Tue, 4 Apr 2023 09:41:55 +0200 Subject: [PATCH 13/18] Implement requested changes --- PWGHF/DataModel/CandidateReconstructionTables.h | 16 ++++++++-------- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 11 +++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 4757e46c039..5cc5685fc0e 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1481,12 +1481,12 @@ DECLARE_SOA_COLUMN(EtaPiFromOme, etaPiFromOme, double); DECLARE_SOA_COLUMN(EtaOmegac, etaOmegac, double); DECLARE_SOA_COLUMN(EtaCascade, etaCascade, double); DECLARE_SOA_COLUMN(EtaV0, etaV0, double); -DECLARE_SOA_COLUMN(DcaXYToPVV0Dau0, dcaXYToPVV0dau0, double); -DECLARE_SOA_COLUMN(DcaXYToPVV0Dau1, dcaXYToPVV0dau1, double); -DECLARE_SOA_COLUMN(DcaXYToPVCascDau, dcaXYToPVCascdau, double); -DECLARE_SOA_COLUMN(DcaZToPVV0Dau0, dcaZToPVV0dau0, double); -DECLARE_SOA_COLUMN(DcaZToPVV0Dau1, dcaZToPVV0dau1, double); -DECLARE_SOA_COLUMN(DcaZToPVCascDau, dcaZToPVCascdau, double); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0dau0, double); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0dau1, double); +DECLARE_SOA_COLUMN(DcaXYToPvCascDau, dcaXYToPvCascdau, double); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau0, dcaZToPvV0dau0, double); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau1, dcaZToPvV0dau1, double); +DECLARE_SOA_COLUMN(DcaZToPvCascDau, dcaZToPvCascdau, double); DECLARE_SOA_COLUMN(DcaCascDau, dcaCascDau, double); DECLARE_SOA_COLUMN(DcaV0Dau, dcaV0Dau, double); DECLARE_SOA_COLUMN(DcaOmegacDau, dcaOmegacDau, double); @@ -1532,8 +1532,8 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_toxipi::CTauOmegac, hf_cand_toxipi::CTauCascade, hf_cand_toxipi::CTauV0, hf_cand_toxipi::CTauXic, hf_cand_toxipi::EtaV0PosDau, hf_cand_toxipi::EtaV0NegDau, hf_cand_toxipi::EtaPiFromCasc, hf_cand_toxipi::EtaPiFromOme, hf_cand_toxipi::EtaOmegac, hf_cand_toxipi::EtaCascade, hf_cand_toxipi::EtaV0, - hf_cand_toxipi::DcaXYToPVV0Dau0, hf_cand_toxipi::DcaXYToPVV0Dau1, hf_cand_toxipi::DcaXYToPVCascDau, - hf_cand_toxipi::DcaZToPVV0Dau0, hf_cand_toxipi::DcaZToPVV0Dau1, hf_cand_toxipi::DcaZToPVCascDau, + hf_cand_toxipi::DcaXYToPvV0Dau0, hf_cand_toxipi::DcaXYToPvV0Dau1, hf_cand_toxipi::DcaXYToPvCascDau, + hf_cand_toxipi::DcaZToPvV0Dau0, hf_cand_toxipi::DcaZToPvV0Dau1, hf_cand_toxipi::DcaZToPvCascDau, hf_cand_toxipi::DcaCascDau, hf_cand_toxipi::DcaV0Dau, hf_cand_toxipi::DcaOmegacDau, hf_track_index::HFflag); // table with results of reconstruction level MC matching diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index e685e922849..919bde2f654 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -78,15 +78,14 @@ struct HfCandidateCreatorToXiPi { o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT; int runNumber; - // filter to use only HF selected collisions - Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); - Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng >= 4); - - using SelectedCollisions = soa::Filtered>; using MyTracks = soa::Join; - using FilteredHfTrackAssocSel = soa::Filtered>; //HfTrackAssoc using MyCascTable = soa::Join; using MyV0Table = soa::Join; + + Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); // filter to use only HF selected collisions + using SelectedCollisions = soa::Filtered>; + Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng >= 4); + using FilteredHfTrackAssocSel = soa::Filtered>; Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId From fddd7866afeb464b7cf2c6ac0578870ce8a39e95 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Tue, 4 Apr 2023 09:56:05 +0200 Subject: [PATCH 14/18] Implement requested changes --- .../DataModel/CandidateReconstructionTables.h | 18 +++++++++--------- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 5cc5685fc0e..9cef35d4b60 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1481,15 +1481,15 @@ DECLARE_SOA_COLUMN(EtaPiFromOme, etaPiFromOme, double); DECLARE_SOA_COLUMN(EtaOmegac, etaOmegac, double); DECLARE_SOA_COLUMN(EtaCascade, etaCascade, double); DECLARE_SOA_COLUMN(EtaV0, etaV0, double); -DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0dau0, double); -DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0dau1, double); -DECLARE_SOA_COLUMN(DcaXYToPvCascDau, dcaXYToPvCascdau, double); -DECLARE_SOA_COLUMN(DcaZToPvV0Dau0, dcaZToPvV0dau0, double); -DECLARE_SOA_COLUMN(DcaZToPvV0Dau1, dcaZToPvV0dau1, double); -DECLARE_SOA_COLUMN(DcaZToPvCascDau, dcaZToPvCascdau, double); -DECLARE_SOA_COLUMN(DcaCascDau, dcaCascDau, double); -DECLARE_SOA_COLUMN(DcaV0Dau, dcaV0Dau, double); -DECLARE_SOA_COLUMN(DcaOmegacDau, dcaOmegacDau, double); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0dau0, float); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0dau1, float); +DECLARE_SOA_COLUMN(DcaXYToPvCascDau, dcaXYToPvCascdau, float); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau0, dcaZToPvV0dau0, float); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau1, dcaZToPvV0dau1, float); +DECLARE_SOA_COLUMN(DcaZToPvCascDau, dcaZToPvCascdau, float); +DECLARE_SOA_COLUMN(DcaCascDau, dcaCascDau, float); +DECLARE_SOA_COLUMN(DcaV0Dau, dcaV0Dau, float); +DECLARE_SOA_COLUMN(DcaOmegacDau, dcaOmegacDau, float); // MC matching result: DECLARE_SOA_COLUMN(FlagMcMatchRec, flagMcMatchRec, int8_t); // reconstruction level diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index f61a1bfb597..79fb8462c5e 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -281,14 +281,14 @@ struct HfCandidateCreatorToXiPi { trackOmegac.setAbsCharge(0); // DCAxy (computed with propagateToDCABxByBz method) - double dcaxyV0Dau0 = trackV0Dau0.dcaXY(); - double dcaxyV0Dau1 = trackV0Dau1.dcaXY(); - double dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); + float dcaxyV0Dau0 = trackV0Dau0.dcaXY(); + float dcaxyV0Dau1 = trackV0Dau1.dcaXY(); + float dcaxyPiFromCasc = trackXiDauCharged.dcaXY(); // DCAz (computed with propagateToDCABxByBz method) - double dcazV0Dau0 = trackV0Dau0.dcaZ(); - double dcazV0Dau1 = trackV0Dau1.dcaZ(); - double dcazPiFromCasc = trackXiDauCharged.dcaZ(); + float dcazV0Dau0 = trackV0Dau0.dcaZ(); + float dcazV0Dau1 = trackV0Dau1.dcaZ(); + float dcazPiFromCasc = trackXiDauCharged.dcaZ(); // primary vertex of the collision auto primaryVertex = getPrimaryVertex(collision); // get the associated covariance matrix with auto covMatrixPV = primaryVertex.getCov(); @@ -359,9 +359,9 @@ struct HfCandidateCreatorToXiPi { double pseudorapV0 = RecoDecay::eta(pVecV0); // DCA between daughters - double dcaCascDau = casc.dcacascdaughters(); - double dcaV0Dau = casc.dcaV0daughters(); - double dcaOmegacDau = std::sqrt(df.getChi2AtPCACandidate()); + float dcaCascDau = casc.dcacascdaughters(); + float dcaV0Dau = casc.dcaV0daughters(); + float dcaOmegacDau = std::sqrt(df.getChi2AtPCACandidate()); // set hfFlag int hfFlag = 1 << DecayType::DecayToXiPi; From 847e9d40ea401a9c4fc306cdf6d70f12390fd4a5 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Tue, 4 Apr 2023 15:52:24 +0200 Subject: [PATCH 15/18] Implement comments and switch to cascade table info --- PWGHF/DataModel/CandidateReconstructionTables.h | 3 +-- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 16 +++++++--------- PWGHF/TableProducer/candidateSelectorToXiPi.cxx | 7 +------ 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 9cef35d4b60..0f3f45d43b2 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1461,7 +1461,6 @@ DECLARE_SOA_INDEX_COLUMN_FULL(PrimaryPi, primaryPi, int, Tracks, "_primarypi"); DECLARE_SOA_COLUMN(ImpactParOmegacXY, impactParOmegacXY, float); DECLARE_SOA_COLUMN(ImpactParOmegacZ, impactParOmegacZ, float); DECLARE_SOA_COLUMN(InvMassLambda, invMassLambda, double); -DECLARE_SOA_COLUMN(InvMassAntiLambda, invMassAntiLambda, double); DECLARE_SOA_COLUMN(InvMassCascade, invMassCascade, double); DECLARE_SOA_COLUMN(InvMassOmegac, invMassOmegac, double); DECLARE_SOA_COLUMN(CosPAV0, cosPAV0, double); @@ -1527,7 +1526,7 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_toxipi::ErrImpactParCascXY, hf_cand_toxipi::ErrImpactParPrimaryPiXY, hf_cand_toxipi::ErrImpactParV0XY, hf_cand_toxipi::V0Id, v0data::PosTrackId, v0data::NegTrackId, hf_cand_toxipi::CascadeId, hf_cand_toxipi::PrimaryPiId, cascdata::BachelorId, hf_cand_toxipi::ImpactParOmegacXY, hf_cand_toxipi::ImpactParOmegacZ, - hf_cand_toxipi::InvMassLambda, hf_cand_toxipi::InvMassAntiLambda, hf_cand_toxipi::InvMassCascade, hf_cand_toxipi::InvMassOmegac, + hf_cand_toxipi::InvMassLambda, hf_cand_toxipi::InvMassCascade, hf_cand_toxipi::InvMassOmegac, hf_cand_toxipi::CosPAV0, hf_cand_toxipi::CosPAOmegac, hf_cand_toxipi::CosPACasc, hf_cand_toxipi::CosPAXYV0, hf_cand_toxipi::CosPAXYOmegac, hf_cand_toxipi::CosPAXYCasc, hf_cand_toxipi::CTauOmegac, hf_cand_toxipi::CTauCascade, hf_cand_toxipi::CTauV0, hf_cand_toxipi::CTauXic, hf_cand_toxipi::EtaV0PosDau, hf_cand_toxipi::EtaV0NegDau, hf_cand_toxipi::EtaPiFromCasc, hf_cand_toxipi::EtaPiFromOme, diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index 79fb8462c5e..f0c5f224e9f 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -78,15 +78,15 @@ struct HfCandidateCreatorToXiPi { o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT; int runNumber; + using SelectedCollisions = soa::Filtered>; using MyTracks = soa::Join; + using FilteredHfTrackAssocSel = soa::Filtered>; using MyCascTable = soa::Join; using MyV0Table = soa::Join; Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); // filter to use only HF selected collisions - using SelectedCollisions = soa::Filtered>; Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng >= 4); - using FilteredHfTrackAssocSel = soa::Filtered>; - + Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId Preslice cascadesPerCollision = aod::cascdata::collisionId; @@ -107,7 +107,6 @@ struct HfCandidateCreatorToXiPi { MyCascTable const& cascades, MyTracks const& tracks, FilteredHfTrackAssocSel const& trackIndices, - // aod::HfPvRefitTrack const&, MyV0Table const&, aod::V0sLinked const&) { @@ -180,8 +179,8 @@ struct HfCandidateCreatorToXiPi { auto trackParCovV0Dau1 = getTrackParCov(trackV0Dau1); // info from LF table - std::array pVecV0 = {v0Element.px(), v0Element.py(), v0Element.pz()}; // pVec stands for vector containing the 3-momentum components - std::array vertexV0 = {v0Element.x(), v0Element.y(), v0Element.z()}; + std::array pVecV0 = {casc.pxlambda(), casc.pylambda(), casc.pzlambda()}; // pVec stands for vector containing the 3-momentum components + std::array vertexV0 = {casc.xlambda(), casc.ylambda(), casc.zlambda()}; std::array covV0 = {0.}; constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component for (int i = 0; i < 6; i++) { @@ -330,8 +329,7 @@ struct HfCandidateCreatorToXiPi { o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); // invariant mass under the hypothesis of particles ID corresponding to the decay chain - double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis - double mAntiLambda = v0Element.mAntiLambda(); // from LF table, V0 mass under anti-lambda hypothesis + double mLambda = casc.mLambda(); // from LF table, V0 mass under lambda hypothesis double mCasc = casc.mXi(); const std::array arrMassOmegac = {massXiFromPDG, massPionFromPDG}; double mOmegac = RecoDecay::m(std::array{pVecCascAsD, pVecPionFromOmegac}, arrMassOmegac); @@ -393,7 +391,7 @@ struct HfCandidateCreatorToXiPi { v0Element.globalIndex(), v0Element.posTrackId(), v0Element.negTrackId(), casc.globalIndex(), trackPion.globalIndex(), trackXiDauCharged.globalIndex(), impactParameterOmegac.getY(), impactParameterOmegac.getZ(), - mLambda, mAntiLambda, mCasc, mOmegac, + mLambda, mCasc, mOmegac, cpaV0, cpaOmegac, cpaCasc, cpaxyV0, cpaxyOmegac, cpaxyCasc, ctOmegac, ctCascade, ctV0, ctXic, pseudorapV0PosDau, pseudorapV0NegDau, pseudorapPiFromCas, pseudorapPiFromOme, diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 5f6f7b35aca..85cea7ed51d 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -325,12 +325,7 @@ struct HfCandidateSelectorToXiPi { bool statusInvMassCascade = false; bool statusInvMassOmegac = false; - double invMassLambda = 0; - if (signDecay < 0) { - invMassLambda = candidate.invMassLambda(); - } else if (signDecay > 0) { - invMassLambda = candidate.invMassAntiLambda(); - } + double invMassLambda = candidate.invMassLambda(); double invMassCascade = candidate.invMassCascade(); double invMassOmegac = candidate.invMassOmegac(); From ebf1ef977cb3dfe12ee29fed3d14e9f1535f6288 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 4 Apr 2023 13:53:14 +0000 Subject: [PATCH 16/18] Please consider the following formatting changes --- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index f0c5f224e9f..7deda2801bb 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -83,10 +83,10 @@ struct HfCandidateCreatorToXiPi { using FilteredHfTrackAssocSel = soa::Filtered>; using MyCascTable = soa::Join; using MyV0Table = soa::Join; - + Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); // filter to use only HF selected collisions Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng >= 4); - + Preslice tracksPerCollision = aod::track::collisionId; // needed for PV refit Preslice trackIndicesPerCollision = aod::track_association::collisionId; // aod::hf_track_association::collisionId Preslice cascadesPerCollision = aod::cascdata::collisionId; @@ -329,7 +329,7 @@ struct HfCandidateCreatorToXiPi { o2::base::Propagator::Instance()->propagateToDCABxByBz(primaryVertex, trackOmegac, 2.f, matCorr, &impactParameterOmegac); // invariant mass under the hypothesis of particles ID corresponding to the decay chain - double mLambda = casc.mLambda(); // from LF table, V0 mass under lambda hypothesis + double mLambda = casc.mLambda(); // from LF table, V0 mass under lambda hypothesis double mCasc = casc.mXi(); const std::array arrMassOmegac = {massXiFromPDG, massPionFromPDG}; double mOmegac = RecoDecay::m(std::array{pVecCascAsD, pVecPionFromOmegac}, arrMassOmegac); From c883f0642ad74efd685084119d3eb9e3d7e9f7f3 Mon Sep 17 00:00:00 2001 From: ZFederica Date: Tue, 4 Apr 2023 16:43:16 +0200 Subject: [PATCH 17/18] Adapt cascade table to LF PR --- PWGHF/TableProducer/candidateCreatorToXiPi.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx index f0c5f224e9f..f67c8fdf6bc 100644 --- a/PWGHF/TableProducer/candidateCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateCreatorToXiPi.cxx @@ -81,7 +81,7 @@ struct HfCandidateCreatorToXiPi { using SelectedCollisions = soa::Filtered>; using MyTracks = soa::Join; using FilteredHfTrackAssocSel = soa::Filtered>; - using MyCascTable = soa::Join; + using MyCascTable = soa::Join; using MyV0Table = soa::Join; Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == 0); // filter to use only HF selected collisions @@ -104,9 +104,9 @@ struct HfCandidateCreatorToXiPi { void process(SelectedCollisions const& collisions, aod::BCsWithTimestamps const& bcWithTimeStamps, - MyCascTable const& cascades, MyTracks const& tracks, FilteredHfTrackAssocSel const& trackIndices, + MyCascTable const& cascades, MyV0Table const&, aod::V0sLinked const&) { From 98d4f3a199a8c219acddb30a6d083ced10c70920 Mon Sep 17 00:00:00 2001 From: Federica Zanone <94552525+ZFederica@users.noreply.github.com> Date: Tue, 4 Apr 2023 18:07:04 +0200 Subject: [PATCH 18/18] Update PWGHF/DataModel/CandidateReconstructionTables.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vít Kučera --- PWGHF/DataModel/CandidateReconstructionTables.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 88a4b64acfd..54f17c4c478 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1481,12 +1481,12 @@ DECLARE_SOA_COLUMN(EtaPiFromOme, etaPiFromOme, double); DECLARE_SOA_COLUMN(EtaOmegac, etaOmegac, double); DECLARE_SOA_COLUMN(EtaCascade, etaCascade, double); DECLARE_SOA_COLUMN(EtaV0, etaV0, double); -DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0dau0, float); -DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0dau1, float); -DECLARE_SOA_COLUMN(DcaXYToPvCascDau, dcaXYToPvCascdau, float); -DECLARE_SOA_COLUMN(DcaZToPvV0Dau0, dcaZToPvV0dau0, float); -DECLARE_SOA_COLUMN(DcaZToPvV0Dau1, dcaZToPvV0dau1, float); -DECLARE_SOA_COLUMN(DcaZToPvCascDau, dcaZToPvCascdau, float); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0Dau0, float); +DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0Dau1, float); +DECLARE_SOA_COLUMN(DcaXYToPvCascDau, dcaXYToPvCascDau, float); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau0, dcaZToPvV0Dau0, float); +DECLARE_SOA_COLUMN(DcaZToPvV0Dau1, dcaZToPvV0Dau1, float); +DECLARE_SOA_COLUMN(DcaZToPvCascDau, dcaZToPvCascDau, float); DECLARE_SOA_COLUMN(DcaCascDau, dcaCascDau, float); DECLARE_SOA_COLUMN(DcaV0Dau, dcaV0Dau, float); DECLARE_SOA_COLUMN(DcaOmegacDau, dcaOmegacDau, float);