From 10c246ba45cbcb3ffc8251605655faff55e7148d Mon Sep 17 00:00:00 2001 From: David Dobrigkeit Chinellato Date: Mon, 20 Nov 2023 14:07:42 -0300 Subject: [PATCH 1/4] Example pcm qa at builder --- PWGLF/TableProducer/lambdakzerobuilder.cxx | 51 +++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/lambdakzerobuilder.cxx b/PWGLF/TableProducer/lambdakzerobuilder.cxx index 76935d57284..ab0172fb1df 100644 --- a/PWGLF/TableProducer/lambdakzerobuilder.cxx +++ b/PWGLF/TableProducer/lambdakzerobuilder.cxx @@ -153,6 +153,8 @@ struct lambdakzeroBuilder { ConfigurableAxis axisX{"axisX", {200, 0, 200}, "X_{IU}"}; ConfigurableAxis axisRadius{"axisRadius", {500, 0, 50}, "Radius (cm)"}; + ConfigurableAxis axisDeltaDistanceRadii{"axisDeltaDistanceRadii", {500, -50, 50}, "(cm)"}; + ConfigurableAxis axisPositionGuess{"axisPositionGuess", {240, 0, 120}, "(cm)"}; int mRunNumber; float d_bz; @@ -290,6 +292,16 @@ struct lambdakzeroBuilder { registry.add("h2dTopoVarPosDCAToPV", "h2dTopoVarPosDCAToPV", kTH2D, {axisPtQA, axisTopoVarDCAToPV}); registry.add("h2dTopoVarNegDCAToPV", "h2dTopoVarNegDCAToPV", kTH2D, {axisPtQA, axisTopoVarDCAToPV}); registry.add("h2dTopoVarDCAV0ToPV", "h2dTopoVarDCAV0ToPV", kTH2D, {axisPtQA, axisTopoVarDCAV0ToPV}); + + // QA for PCM + registry.add("h2d_pcm_DeltaDistanceRadii_True", "h2d_pcm_DeltaDistanceRadii_True", kTH2D, {axisPtQA, axisDeltaDistanceRadii}); + registry.add("h2d_pcm_DeltaDistanceRadii_Bg", "h2d_pcm_DeltaDistanceRadii_Bg", kTH2D, {axisPtQA, axisDeltaDistanceRadii}); + registry.add("h2d_pcm_PositionGuess_True", "h2d_pcm_PositionGuess_True", kTH2D, {axisPtQA, axisPositionGuess}); + registry.add("h2d_pcm_PositionGuess_Bg", "h2d_pcm_PositionGuess_Bg", kTH2D, {axisPtQA, axisPositionGuess}); + registry.add("h2d_pcm_RadiallyOutgoingAtThisRadius1_True", "h2d_pcm_RadiallyOutgoingAtThisRadius1_True", kTH2D, {axisPtQA, axisPositionGuess}); + registry.add("h2d_pcm_RadiallyOutgoingAtThisRadius2_True", "h2d_pcm_RadiallyOutgoingAtThisRadius2_True", kTH2D, {axisPtQA, axisPositionGuess}); + registry.add("h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg", "h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg", kTH2D, {axisPtQA, axisPositionGuess}); + registry.add("h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg", "h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg", kTH2D, {axisPtQA, axisPositionGuess}); } mRunNumber = 0; @@ -663,7 +675,7 @@ struct lambdakzeroBuilder { // QA extra: DCA to PV float dcaV0toPV = std::sqrt((std::pow((primaryVertex.getY() - v0candidate.pos[1]) * pz - (primaryVertex.getZ() - v0candidate.pos[2]) * py, 2) + std::pow((primaryVertex.getX() - v0candidate.pos[0]) * pz - (primaryVertex.getZ() - v0candidate.pos[2]) * px, 2) + std::pow((primaryVertex.getX() - v0candidate.pos[0]) * py - (primaryVertex.getY() - v0candidate.pos[1]) * px, 2)) / (px * px + py * py + pz * pz)); - + registry.fill(HIST("h2dTopoVarPointingAngle"), lPt, TMath::ACos(v0candidate.cosPA)); registry.fill(HIST("h2dTopoVarRAP"), lPt, TMath::ACos(v0candidate.cosPA) * v0candidate.V0radius); registry.fill(HIST("h2dTopoVarV0Radius"), lPt, v0candidate.V0radius); @@ -672,6 +684,43 @@ struct lambdakzeroBuilder { registry.fill(HIST("h2dTopoVarNegDCAToPV"), lPt, v0candidate.negDCAxy); registry.fill(HIST("h2dTopoVarDCAV0ToPV"), lPt, dcaV0toPV); + // ------------------------------------------------------------------------------------- + // PCM finding tests + // + // a) delta1 = D - R1 - R2 + // D: distance between two track helix centers in xy + // R1, R2: track radii + + o2::math_utils::CircleXYf_t trcCircle1, trcCircle2; + float sna, csa; + posTrackPar.getCircleParams(d_bz, trcCircle1, sna, csa); + negTrackPar.getCircleParams(d_bz, trcCircle2, sna, csa); + + // distance between circle centers (one circle is at origin -> easy) + float centerDistance = std::hypot(trcCircle1.xC-trcCircle2.xC, trcCircle1.yC-trcCircle2.yC); + + // b) delta2 = abs(R2/(R1+R2)*rvec1 + R1/(R1+R2)*rvec2) + float r1_r = trcCircle1.rC/(trcCircle1.rC + trcCircle2.rC); + float r2_r = trcCircle2.rC/(trcCircle1.rC + trcCircle2.rC); + float delta2 = std::hypot(r2_r*trcCircle1.xC+r1_r*trcCircle2.xC,r2_r*trcCircle1.yC+r1_r*trcCircle2.yC ); + + // c) delta3 = sqrt(D^2-R^2); D: distance origin-center, R: radius + float delta3_track1 = TMath::Sqrt(TMath::Power(trcCircle1.xC,2)+TMath::Power(trcCircle1.yC,2)-TMath::Power(trcCircle1.rC,2)); + float delta3_track2 = TMath::Sqrt(TMath::Power(trcCircle2.xC,2)+TMath::Power(trcCircle2.yC,2)-TMath::Power(trcCircle2.rC,2)); + + // let's just use tagged, cause we can + if(V0.isTrueGamma()){ + registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_True"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); + registry.fill(HIST("h2d_pcm_PositionGuess_True"), lPt, delta2); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_True"), lPt, delta3_track1); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_True"), lPt, delta3_track2); + }else{ + registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_Bg"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); + registry.fill(HIST("h2d_pcm_PositionGuess_Bg"), lPt, delta2); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg"), lPt, delta3_track1); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg"), lPt, delta3_track2); + } + // ------------------------------------------------------------------------------------- } // end QA return true; } From 791fc68af36e11fe8a2d7b5aa3c5c73b1579fba8 Mon Sep 17 00:00:00 2001 From: David Dobrigkeit Chinellato Date: Mon, 20 Nov 2023 14:37:29 -0300 Subject: [PATCH 2/4] Require TPC only --- PWGLF/TableProducer/lambdakzerobuilder.cxx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/PWGLF/TableProducer/lambdakzerobuilder.cxx b/PWGLF/TableProducer/lambdakzerobuilder.cxx index ab0172fb1df..6e70393855d 100644 --- a/PWGLF/TableProducer/lambdakzerobuilder.cxx +++ b/PWGLF/TableProducer/lambdakzerobuilder.cxx @@ -709,16 +709,18 @@ struct lambdakzeroBuilder { float delta3_track2 = TMath::Sqrt(TMath::Power(trcCircle2.xC,2)+TMath::Power(trcCircle2.yC,2)-TMath::Power(trcCircle2.rC,2)); // let's just use tagged, cause we can - if(V0.isTrueGamma()){ - registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_True"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); - registry.fill(HIST("h2d_pcm_PositionGuess_True"), lPt, delta2); - registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_True"), lPt, delta3_track1); - registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_True"), lPt, delta3_track2); - }else{ - registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_Bg"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); - registry.fill(HIST("h2d_pcm_PositionGuess_Bg"), lPt, delta2); - registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg"), lPt, delta3_track1); - registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg"), lPt, delta3_track2); + if(!posTrack.hasITS() && !negTrack.hasITS()){ + if(V0.isTrueGamma()){ + registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_True"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); + registry.fill(HIST("h2d_pcm_PositionGuess_True"), lPt, delta2); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_True"), lPt, delta3_track1); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_True"), lPt, delta3_track2); + }else{ + registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_Bg"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); + registry.fill(HIST("h2d_pcm_PositionGuess_Bg"), lPt, delta2); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg"), lPt, delta3_track1); + registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg"), lPt, delta3_track2); + } } // ------------------------------------------------------------------------------------- } // end QA From 3c437b7071602515a33747925a7b17f27a6761c8 Mon Sep 17 00:00:00 2001 From: ALICE Builder Date: Mon, 20 Nov 2023 18:41:26 +0100 Subject: [PATCH 3/4] Please consider the following formatting changes (#187) --- PWGLF/TableProducer/lambdakzerobuilder.cxx | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PWGLF/TableProducer/lambdakzerobuilder.cxx b/PWGLF/TableProducer/lambdakzerobuilder.cxx index 6e70393855d..3762a2362b9 100644 --- a/PWGLF/TableProducer/lambdakzerobuilder.cxx +++ b/PWGLF/TableProducer/lambdakzerobuilder.cxx @@ -675,7 +675,7 @@ struct lambdakzeroBuilder { // QA extra: DCA to PV float dcaV0toPV = std::sqrt((std::pow((primaryVertex.getY() - v0candidate.pos[1]) * pz - (primaryVertex.getZ() - v0candidate.pos[2]) * py, 2) + std::pow((primaryVertex.getX() - v0candidate.pos[0]) * pz - (primaryVertex.getZ() - v0candidate.pos[2]) * px, 2) + std::pow((primaryVertex.getX() - v0candidate.pos[0]) * py - (primaryVertex.getY() - v0candidate.pos[1]) * px, 2)) / (px * px + py * py + pz * pz)); - + registry.fill(HIST("h2dTopoVarPointingAngle"), lPt, TMath::ACos(v0candidate.cosPA)); registry.fill(HIST("h2dTopoVarRAP"), lPt, TMath::ACos(v0candidate.cosPA) * v0candidate.V0radius); registry.fill(HIST("h2dTopoVarV0Radius"), lPt, v0candidate.V0radius); @@ -686,8 +686,8 @@ struct lambdakzeroBuilder { // ------------------------------------------------------------------------------------- // PCM finding tests - // - // a) delta1 = D - R1 - R2 + // + // a) delta1 = D - R1 - R2 // D: distance between two track helix centers in xy // R1, R2: track radii @@ -697,25 +697,25 @@ struct lambdakzeroBuilder { negTrackPar.getCircleParams(d_bz, trcCircle2, sna, csa); // distance between circle centers (one circle is at origin -> easy) - float centerDistance = std::hypot(trcCircle1.xC-trcCircle2.xC, trcCircle1.yC-trcCircle2.yC); + float centerDistance = std::hypot(trcCircle1.xC - trcCircle2.xC, trcCircle1.yC - trcCircle2.yC); // b) delta2 = abs(R2/(R1+R2)*rvec1 + R1/(R1+R2)*rvec2) - float r1_r = trcCircle1.rC/(trcCircle1.rC + trcCircle2.rC); - float r2_r = trcCircle2.rC/(trcCircle1.rC + trcCircle2.rC); - float delta2 = std::hypot(r2_r*trcCircle1.xC+r1_r*trcCircle2.xC,r2_r*trcCircle1.yC+r1_r*trcCircle2.yC ); + float r1_r = trcCircle1.rC / (trcCircle1.rC + trcCircle2.rC); + float r2_r = trcCircle2.rC / (trcCircle1.rC + trcCircle2.rC); + float delta2 = std::hypot(r2_r * trcCircle1.xC + r1_r * trcCircle2.xC, r2_r * trcCircle1.yC + r1_r * trcCircle2.yC); // c) delta3 = sqrt(D^2-R^2); D: distance origin-center, R: radius - float delta3_track1 = TMath::Sqrt(TMath::Power(trcCircle1.xC,2)+TMath::Power(trcCircle1.yC,2)-TMath::Power(trcCircle1.rC,2)); - float delta3_track2 = TMath::Sqrt(TMath::Power(trcCircle2.xC,2)+TMath::Power(trcCircle2.yC,2)-TMath::Power(trcCircle2.rC,2)); + float delta3_track1 = TMath::Sqrt(TMath::Power(trcCircle1.xC, 2) + TMath::Power(trcCircle1.yC, 2) - TMath::Power(trcCircle1.rC, 2)); + float delta3_track2 = TMath::Sqrt(TMath::Power(trcCircle2.xC, 2) + TMath::Power(trcCircle2.yC, 2) - TMath::Power(trcCircle2.rC, 2)); // let's just use tagged, cause we can - if(!posTrack.hasITS() && !negTrack.hasITS()){ - if(V0.isTrueGamma()){ + if (!posTrack.hasITS() && !negTrack.hasITS()) { + if (V0.isTrueGamma()) { registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_True"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); registry.fill(HIST("h2d_pcm_PositionGuess_True"), lPt, delta2); registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_True"), lPt, delta3_track1); registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius2_True"), lPt, delta3_track2); - }else{ + } else { registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_Bg"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); registry.fill(HIST("h2d_pcm_PositionGuess_Bg"), lPt, delta2); registry.fill(HIST("h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg"), lPt, delta3_track1); From aff88d481d6f2545294582c47206d583aec488d0 Mon Sep 17 00:00:00 2001 From: David Dobrigkeit Chinellato Date: Mon, 20 Nov 2023 15:11:51 -0300 Subject: [PATCH 4/4] true TPC only ONLY --- PWGLF/TableProducer/lambdakzerobuilder.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/lambdakzerobuilder.cxx b/PWGLF/TableProducer/lambdakzerobuilder.cxx index 3762a2362b9..bf02b78527b 100644 --- a/PWGLF/TableProducer/lambdakzerobuilder.cxx +++ b/PWGLF/TableProducer/lambdakzerobuilder.cxx @@ -709,7 +709,7 @@ struct lambdakzeroBuilder { float delta3_track2 = TMath::Sqrt(TMath::Power(trcCircle2.xC, 2) + TMath::Power(trcCircle2.yC, 2) - TMath::Power(trcCircle2.rC, 2)); // let's just use tagged, cause we can - if (!posTrack.hasITS() && !negTrack.hasITS()) { + if (!posTrack.hasITS() && !posTrack.hasTRD() && !posTrack.hasTOF() && !negTrack.hasITS() && !negTrack.hasTRD() && !negTrack.hasTOF()) { if (V0.isTrueGamma()) { registry.fill(HIST("h2d_pcm_DeltaDistanceRadii_True"), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC); registry.fill(HIST("h2d_pcm_PositionGuess_True"), lPt, delta2);