diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index cce9a09a6ef..e195c373252 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -48,7 +48,7 @@ DECLARE_SOA_COLUMN(DCANegToPV, dcanegtopv, float); //! DCA negative pron DECLARE_SOA_COLUMN(PositionCovMat, positionCovMat, float[6]); //! covariance matrix elements DECLARE_SOA_COLUMN(MomentumCovMat, momentumCovMat, float[6]); //! covariance matrix elements -// Saved from KF particle fit for specic table +// Saved from KF particle fit for specic table DECLARE_SOA_COLUMN(KFV0Chi2, kfV0Chi2, float); //! // Derived expressions @@ -298,9 +298,9 @@ DECLARE_SOA_TABLE(V0Tags, "AOD", "V0TAGS", namespace kfcascdata { - // declare in different namespace to 'overload' operator - DECLARE_SOA_COLUMN(MLambda, mLambda, float); //! -} +// declare in different namespace to 'overload' operator +DECLARE_SOA_COLUMN(MLambda, mLambda, float); //! +} // namespace kfcascdata namespace cascdata { @@ -345,18 +345,18 @@ DECLARE_SOA_COLUMN(DCAZCascToPV, dcaZCascToPV, float); //! // Saved from finding: covariance matrix of parent track (on request) DECLARE_SOA_COLUMN(PositionCovMat, positionCovMat, float[6]); //! covariance matrix elements DECLARE_SOA_COLUMN(MomentumCovMat, momentumCovMat, float[6]); //! covariance matrix elements -DECLARE_SOA_COLUMN(KFTrackMat, kfTrackCovMat, float[15]); //! covariance matrix elements for KF method +DECLARE_SOA_COLUMN(KFTrackMat, kfTrackCovMat, float[15]); //! covariance matrix elements for KF method // Selection to avoid spurious invariant mass correlation // bachelor-baryon cosine of pointing angle / DCA to PV DECLARE_SOA_COLUMN(BachBaryonCosPA, bachBaryonCosPA, float); //! avoid bach-baryon correlated inv mass structure in analysis DECLARE_SOA_COLUMN(BachBaryonDCAxyToPV, bachBaryonDCAxyToPV, float); //! avoid bach-baryon correlated inv mass structure in analysis -// Saved from KF particle fit for specic table +// Saved from KF particle fit for specic table // note: separate chi2 is a consequence of fit -> conversion -> propagation -> fit logic // which, in turn, is necessary to do material corrections at the moment // this could be improved in the future! -DECLARE_SOA_COLUMN(KFV0Chi2, kfV0Chi2, float); //! +DECLARE_SOA_COLUMN(KFV0Chi2, kfV0Chi2, float); //! DECLARE_SOA_COLUMN(KFCascadeChi2, kfCascadeChi2, float); //! // Saved from strangeness tracking @@ -460,7 +460,7 @@ DECLARE_SOA_TABLE(StoredKFCascDatas, "AOD", "KFCASCDATA", //! cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV, // KF particle fit specific - kfcascdata::MLambda, cascdata::KFV0Chi2, cascdata::KFCascadeChi2, + kfcascdata::MLambda, cascdata::KFV0Chi2, cascdata::KFCascadeChi2, // Dynamic columns cascdata::Pt, diff --git a/PWGLF/TableProducer/cascadebuilder.cxx b/PWGLF/TableProducer/cascadebuilder.cxx index 3e458768587..c264e7e3f8d 100644 --- a/PWGLF/TableProducer/cascadebuilder.cxx +++ b/PWGLF/TableProducer/cascadebuilder.cxx @@ -161,7 +161,7 @@ struct cascadeBuilder { Configurable dQAXiMassWindow{"dQAXiMassWindow", 0.005, "Xi mass window for ITS cluster map QA"}; Configurable dQAOmegaMassWindow{"dQAOmegaMassWindow", 0.005, "Omega mass window for ITS cluster map QA"}; - // for KF particle operation + // for KF particle operation Configurable kfTuneForOmega{"kfTuneForOmega", false, "if enabled, take main cascade properties from Omega fit instead of Xi fit (= default)"}; Configurable kfConstructMethod{"kfConstructMethod", 2, "KF Construct Method"}; Configurable kfUseV0MassConstraint{"kfUseV0MassConstraint", true, "KF: use Lambda mass constraint"}; @@ -289,7 +289,7 @@ struct cascadeBuilder { void init(InitContext& context) { resetHistos(); - registry.add("hKFParticleStatistics", "hKFParticleStatistics", kTH1F, {{10,-0.5f,9.5f}}); + registry.add("hKFParticleStatistics", "hKFParticleStatistics", kTH1F, {{10, -0.5f, 9.5f}}); // Optionally, add extra QA histograms to processing chain if (d_doQA) { @@ -621,7 +621,7 @@ struct cascadeBuilder { // FIXME: could be an utility somewhere else // from Carolina Reetz (thank you!) template - KFParticle createKFParticleFromTrackParCov(const o2::track::TrackParametrizationWithError& trackparCov, int charge, float mass) + KFParticle createKFParticleFromTrackParCov(const o2::track::TrackParametrizationWithError& trackparCov, int charge, float mass) { std::array xyz, pxpypz; float xyzpxpypz[6]; @@ -643,7 +643,7 @@ struct cascadeBuilder { float Mini, SigmaMini, M, SigmaM; kfPart.GetMass(Mini, SigmaMini); LOG(debug) << "Daughter KFParticle mass before creation: " << Mini << " +- " << SigmaMini; - + try { kfPart.Create(xyzpxpypz, cv.data(), charge, mass); } catch (std::runtime_error& e) { @@ -670,9 +670,9 @@ struct cascadeBuilder { pxpypz[0] = kfParticle.GetPx(); pxpypz[1] = kfParticle.GetPy(); pxpypz[2] = kfParticle.GetPz(); - + // set covariance matrix elements (lower triangle) - for (int i =0; i < 21; i++) { + for (int i = 0; i < 21; i++) { cv[i] = kfParticle.GetCovariance(i); } @@ -947,8 +947,8 @@ struct cascadeBuilder { { registry.fill(HIST("hKFParticleStatistics"), 0.0f); //*>~<*>~<*>~<*>~<*>~<*>~<*>~<*>~<*>~<* - // KF particle based rebuilding - // dispenses prior V0 generation, uses constrained (re-)fit based on bachelor charge + // KF particle based rebuilding + // dispenses prior V0 generation, uses constrained (re-)fit based on bachelor charge //*>~<*>~<*>~<*>~<*>~<*>~<*>~<*>~<*>~<* // Track casting @@ -997,18 +997,18 @@ struct cascadeBuilder { o2::track::TrackParCov posTrackParCov = getTrackParCov(posTrack); float massPosTrack, massNegTrack; - if (cascadecandidate.charge < 0) { + if (cascadecandidate.charge < 0) { massPosTrack = o2::constants::physics::MassProton; massNegTrack = o2::constants::physics::MassPionCharged; - } else { + } else { massPosTrack = o2::constants::physics::MassPionCharged; massNegTrack = o2::constants::physics::MassProton; } //__________________________________________ //*>~<* step 1 : V0 with dca fitter, uses material corrections implicitly - // This is optional - move close to minima and therefore take material - if(kfDoDCAFitterPreMinim){ + // This is optional - move close to minima and therefore take material + if (kfDoDCAFitterPreMinim) { int nCand = 0; try { nCand = fitter.process(posTrackParCov, negTrackParCov); @@ -1019,7 +1019,7 @@ struct cascadeBuilder { if (nCand == 0) { return false; } - // save classical DCA daughters + // save classical DCA daughters cascadecandidate.v0dcadau = TMath::Sqrt(fitter.getChi2AtPCACandidate()); // re-acquire from DCA fitter @@ -1054,7 +1054,7 @@ struct cascadeBuilder { //__________________________________________ //*>~<* step 3 : Cascade with dca fitter (with material corrections) - if(kfDoDCAFitterPreMinim){ + if (kfDoDCAFitterPreMinim) { int nCandCascade = 0; try { nCandCascade = fitter.process(v0TrackParCov, lBachelorTrack); @@ -1065,7 +1065,7 @@ struct cascadeBuilder { if (nCandCascade == 0) return false; - // save classical DCA daughters + // save classical DCA daughters cascadecandidate.dcacascdau = TMath::Sqrt(fitter.getChi2AtPCACandidate()); v0TrackParCov = fitter.getTrack(0); @@ -1075,7 +1075,7 @@ struct cascadeBuilder { //__________________________________________ //*>~<* step 4 : Cascade with KF particle (potentially mass-constrained if asked) float massBachelorPion = o2::constants::physics::MassPionCharged; - float massBachelorKaon = o2::constants::physics::MassKaonCharged; + float massBachelorKaon = o2::constants::physics::MassKaonCharged; KFParticle kfpV0 = createKFParticleFromTrackParCov(v0TrackParCov, 0, o2::constants::physics::MassLambda); KFParticle kfpBachPion = createKFParticleFromTrackParCov(lBachelorTrack, cascadecandidate.charge, massBachelorPion); @@ -1110,9 +1110,9 @@ struct cascadeBuilder { //__________________________________________ //*>~<* step 5 : propagate cascade to primary vertex with material corrections if asked - if(!kfTuneForOmega){ + if (!kfTuneForOmega) { lCascadeTrack = getTrackParCovFromKFP(KFXi, o2::track::PID::XiMinus, cascadecandidate.charge); - }else{ + } else { lCascadeTrack = getTrackParCovFromKFP(KFOmega, o2::track::PID::OmegaMinus, cascadecandidate.charge); } dcaInfo[0] = 999; @@ -1124,14 +1124,14 @@ struct cascadeBuilder { //__________________________________________ //*>~<* step 6 : acquire all parameters for analysis - // basic indices + // basic indices cascadecandidate.v0Id = v0.globalIndex(); cascadecandidate.bachelorId = bachTrack.globalIndex(); - // KF chi2 + // KF chi2 cascadecandidate.kfV0Chi2 = KFV0.GetChi2(); cascadecandidate.kfCascadeChi2 = KFXi.GetChi2(); - if(kfTuneForOmega) + if (kfTuneForOmega) cascadecandidate.kfCascadeChi2 = KFOmega.GetChi2(); // Daughter momentum not KF-updated FIXME @@ -1144,15 +1144,15 @@ struct cascadeBuilder { cascadecandidate.v0pos[1] = KFV0.GetY(); cascadecandidate.v0pos[2] = KFV0.GetZ(); - // Mother position + momentum is KF updated - if(!kfTuneForOmega){ + // Mother position + momentum is KF updated + if (!kfTuneForOmega) { cascadecandidate.pos[0] = KFXi.GetX(); cascadecandidate.pos[1] = KFXi.GetY(); cascadecandidate.pos[2] = KFXi.GetZ(); cascadecandidate.cascademom[0] = KFXi.GetPx(); cascadecandidate.cascademom[1] = KFXi.GetPy(); cascadecandidate.cascademom[2] = KFXi.GetPz(); - }else{ + } else { cascadecandidate.pos[0] = KFOmega.GetX(); cascadecandidate.pos[1] = KFOmega.GetY(); cascadecandidate.pos[2] = KFOmega.GetZ(); @@ -1176,7 +1176,7 @@ struct cascadeBuilder { return false; // Calculate masses a priori - cascadecandidate.kfMLambda = KFV0.GetMass(); + cascadecandidate.kfMLambda = KFV0.GetMass(); cascadecandidate.mXi = KFXi.GetMass(); cascadecandidate.mOmega = KFOmega.GetMass(); cascadecandidate.yXi = KFXi.GetRapidity(); @@ -1185,7 +1185,6 @@ struct cascadeBuilder { return true; } - template void buildStrangenessTables(TCascTable const& cascades) { @@ -1254,36 +1253,35 @@ struct cascadeBuilder { continue; // doesn't pass cascade selections registry.fill(HIST("hKFParticleStatistics"), 2.0f); kfcascdata(cascadecandidate.v0Id, - cascade.globalIndex(), - cascadecandidate.bachelorId, - cascade.collisionId(), - cascadecandidate.charge, cascadecandidate.mXi, cascadecandidate.mOmega, - cascadecandidate.pos[0], cascadecandidate.pos[1], cascadecandidate.pos[2], - cascadecandidate.v0pos[0], cascadecandidate.v0pos[1], cascadecandidate.v0pos[2], - cascadecandidate.v0mompos[0], cascadecandidate.v0mompos[1], cascadecandidate.v0mompos[2], - cascadecandidate.v0momneg[0], cascadecandidate.v0momneg[1], cascadecandidate.v0momneg[2], - cascadecandidate.bachP[0], cascadecandidate.bachP[1], cascadecandidate.bachP[2], - cascadecandidate.bachP[0] + cascadecandidate.v0mompos[0] + cascadecandidate.v0momneg[0], // <--- redundant but ok - cascadecandidate.bachP[1] + cascadecandidate.v0mompos[1] + cascadecandidate.v0momneg[1], // <--- redundant but ok - cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2], // <--- redundant but ok - cascadecandidate.v0dcadau, cascadecandidate.dcacascdau, - cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv, - cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz, - cascadecandidate.bachBaryonCosPA, cascadecandidate.bachBaryonDCAxyToPV, - cascadecandidate.kfMLambda, cascadecandidate.kfV0Chi2, cascadecandidate.kfCascadeChi2); + cascade.globalIndex(), + cascadecandidate.bachelorId, + cascade.collisionId(), + cascadecandidate.charge, cascadecandidate.mXi, cascadecandidate.mOmega, + cascadecandidate.pos[0], cascadecandidate.pos[1], cascadecandidate.pos[2], + cascadecandidate.v0pos[0], cascadecandidate.v0pos[1], cascadecandidate.v0pos[2], + cascadecandidate.v0mompos[0], cascadecandidate.v0mompos[1], cascadecandidate.v0mompos[2], + cascadecandidate.v0momneg[0], cascadecandidate.v0momneg[1], cascadecandidate.v0momneg[2], + cascadecandidate.bachP[0], cascadecandidate.bachP[1], cascadecandidate.bachP[2], + cascadecandidate.bachP[0] + cascadecandidate.v0mompos[0] + cascadecandidate.v0momneg[0], // <--- redundant but ok + cascadecandidate.bachP[1] + cascadecandidate.v0mompos[1] + cascadecandidate.v0momneg[1], // <--- redundant but ok + cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2], // <--- redundant but ok + cascadecandidate.v0dcadau, cascadecandidate.dcacascdau, + cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv, + cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz, + cascadecandidate.bachBaryonCosPA, cascadecandidate.bachBaryonDCAxyToPV, + cascadecandidate.kfMLambda, cascadecandidate.kfV0Chi2, cascadecandidate.kfCascadeChi2); if (createCascCovMats) { gpu::gpustd::array covmatrix; float trackCovariance[15]; covmatrix = lBachelorTrack.getCov(); - for(int i=0;i<15;i++) - trackCovariance[i] = covmatrix[i]; + for (int i = 0; i < 15; i++) + trackCovariance[i] = covmatrix[i]; kfcasccovs(trackCovariance); } } } - template void buildStrangenessTablesWithStrangenessTracking(TCascTable const& cascades, TStraTrack const& trackedCascades) { diff --git a/PWGLF/Tasks/QC/kfPerformanceStudy.cxx b/PWGLF/Tasks/QC/kfPerformanceStudy.cxx index 3f1e3113304..77004d95885 100644 --- a/PWGLF/Tasks/QC/kfPerformanceStudy.cxx +++ b/PWGLF/Tasks/QC/kfPerformanceStudy.cxx @@ -9,8 +9,8 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. // -/// \brief this task allows for the direct one-to-one comparison of -// cascades computed with standard DCAFitter methods and the KFparticle +/// \brief this task allows for the direct one-to-one comparison of +// cascades computed with standard DCAFitter methods and the KFparticle // package. It is meant for the purposes of larger-scale QA of KF reco. #include "Framework/runDataProcessing.h" @@ -44,15 +44,15 @@ struct kfPerformanceStudy { ConfigurableAxis axisXiMass{"axisXiMass", {200, 1.222f, 1.422f}, ""}; ConfigurableAxis axisOmegaMass{"axisOmegaMass", {200, 1.572f, 1.772f}, ""}; ConfigurableAxis axisDCAxy{"axisDCAxy", {200, -1.0f, 1.0f}, ""}; - + HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; void init(InitContext const&) { - histos.add("hEventCounter", "hEventCounter", kTH1F, {{1,0.0f,1.0f}}); - histos.add("hChargeCounter", "hChargeCounter", kTH1F, {{3,-1.5f,1.5f}}); + histos.add("hEventCounter", "hEventCounter", kTH1F, {{1, 0.0f, 1.0f}}); + histos.add("hChargeCounter", "hChargeCounter", kTH1F, {{3, -1.5f, 1.5f}}); - //baseline simple histograms of mass + // baseline simple histograms of mass histos.add("hMassXiMinus", "hMassXiMinus", kTH2F, {axisPt, axisXiMass}); histos.add("hMassXiPlus", "hMassXiPlus", kTH2F, {axisPt, axisXiMass}); histos.add("hMassOmegaMinus", "hMassOmegaMinus", kTH2F, {axisPt, axisOmegaMass}); @@ -62,11 +62,11 @@ struct kfPerformanceStudy { histos.add("hKFMassOmegaMinus", "hKFMassOmegaMinus", kTH2F, {axisPt, axisOmegaMass}); histos.add("hKFMassOmegaPlus", "hKFMassOmegaPlus", kTH2F, {axisPt, axisOmegaMass}); - histos.add("h3dMassXiMinus", "h3dMassXiMinus", kTH3F, {axisPt, axisXiMass,axisXiMass}); - histos.add("h3dMassXiPlus", "h3dMassXiPlus", kTH3F, {axisPt, axisXiMass,axisXiMass}); - histos.add("h3dMassOmegaMinus", "h3dMassOmegaMinus", kTH3F, {axisPt, axisOmegaMass,axisOmegaMass}); - histos.add("h3dMassOmegaPlus", "h3dMassOmegaPlus", kTH3F, {axisPt, axisOmegaMass,axisOmegaMass}); - + histos.add("h3dMassXiMinus", "h3dMassXiMinus", kTH3F, {axisPt, axisXiMass, axisXiMass}); + histos.add("h3dMassXiPlus", "h3dMassXiPlus", kTH3F, {axisPt, axisXiMass, axisXiMass}); + histos.add("h3dMassOmegaMinus", "h3dMassOmegaMinus", kTH3F, {axisPt, axisOmegaMass, axisOmegaMass}); + histos.add("h3dMassOmegaPlus", "h3dMassOmegaPlus", kTH3F, {axisPt, axisOmegaMass, axisOmegaMass}); + histos.add("h3dMassLambda", "h3dMassLambda", kTH3F, {axisPt, axisLambdaMass, axisLambdaMass}); /// for x check only histos.add("h3dDCAxy", "h3dDCAxy", kTH3F, {axisPt, axisDCAxy, axisDCAxy}); histos.add("hPtCorrelation", "hPtCorrelation", kTH2F, {axisPt, axisPt}); @@ -75,58 +75,58 @@ struct kfPerformanceStudy { void process(aod::Collision const& Collision, CascadesCrossLinked const& Cascades, aod::CascDatas const&, aod::KFCascDatas const&, aod::TracksIU const&) { histos.fill(HIST("hEventCounter"), 0.5); - for (auto& cascade : Cascades) { // allows for cross-referencing everything - float pt = 0.0f, ptKF = 0.0f; - float massXi = 0.0f, massXiKF = 0.0f; - float massOmega = 0.0f, massOmegaKF = 0.0f; - float massLambda = 0.0f, massLambdaKF = 0.0f; - float dcaXY = 0.0f, dcaXYKF = 0.0f; + for (auto& cascade : Cascades) { // allows for cross-referencing everything + float pt = 0.0f, ptKF = 0.0f; + float massXi = 0.0f, massXiKF = 0.0f; + float massOmega = 0.0f, massOmegaKF = 0.0f; + float massLambda = 0.0f, massLambdaKF = 0.0f; + float dcaXY = 0.0f, dcaXYKF = 0.0f; // get charge from bachelor (unambiguous wrt to building) auto bachTrack = cascade.bachelor_as(); - if(bachTrack.sign()<0) + if (bachTrack.sign() < 0) charge = -1; histos.fill(HIST("hChargeCounter"), charge); - if(cascade.has_cascData()){ + if (cascade.has_cascData()) { // check aod::Cascades -> aod::CascData link // if present: this candidate was accepted by default DCAfitter building - auto cascdata = cascade.cascData(); + auto cascdata = cascade.cascData(); pt = cascdata.pt(); massLambda = cascdata.mLambda(); massXi = cascdata.mXi(); massOmega = cascdata.mOmega(); dcaXY = cascdata.dcaXYCascToPV(); } - if(cascade.has_kfCascData()){ + if (cascade.has_kfCascData()) { // check aod::Cascades -> aod::KFCascData link // if present: this candidate was accepted by KF building - auto cascdata = cascade.kfCascData(); + auto cascdata = cascade.kfCascData(); ptKF = cascdata.pt(); massLambdaKF = cascdata.mLambda(); massXiKF = cascdata.mXi(); massOmegaKF = cascdata.mOmega(); dcaXYKF = cascdata.dcaXYCascToPV(); } - + histos.fill(HIST("hPtCorrelation"), pt, ptKF); histos.fill(HIST("h3dMassLambda"), pt, massLambda, massLambdaKF); // <- implicit pT choice, beware - histos.fill(HIST("h3dDCAxy"), pt, dcaXY, dcaXYKF); // <- implicit pT choice, beware - if(charge<0){ + histos.fill(HIST("h3dDCAxy"), pt, dcaXY, dcaXYKF); // <- implicit pT choice, beware + if (charge < 0) { histos.fill(HIST("hMassXiMinus"), pt, massXi); histos.fill(HIST("hMassOmegaMinus"), pt, massOmega); histos.fill(HIST("hKFMassXiMinus"), ptKF, massXiKF); histos.fill(HIST("hKFMassOmegaMinus"), ptKF, massOmegaKF); - histos.fill(HIST("h3dMassXiMinus"), pt, massXi, massXiKF); // <- implicit pT choice, beware + histos.fill(HIST("h3dMassXiMinus"), pt, massXi, massXiKF); // <- implicit pT choice, beware histos.fill(HIST("h3dMassOmegaMinus"), pt, massOmega, massOmegaKF); // <- implicit pT choice, beware } - if(charge>0){ + if (charge > 0) { histos.fill(HIST("hMassXiPlus"), pt, massXi); histos.fill(HIST("hMassOmegaPlus"), pt, massOmega); histos.fill(HIST("hKFMassXiPlus"), ptKF, massXiKF); histos.fill(HIST("hKFMassOmegaPlus"), ptKF, massOmegaKF); - histos.fill(HIST("h3dMassXiPlus"), pt, massXi, massXiKF); // <- implicit pT choice, beware + histos.fill(HIST("h3dMassXiPlus"), pt, massXi, massXiKF); // <- implicit pT choice, beware histos.fill(HIST("h3dMassOmegaPlus"), pt, massOmega, massOmegaKF); // <- implicit pT choice, beware } }