@@ -153,6 +153,8 @@ struct lambdakzeroBuilder {
153153
154154 ConfigurableAxis axisX{" axisX" , {200 , 0 , 200 }, " X_{IU}" };
155155 ConfigurableAxis axisRadius{" axisRadius" , {500 , 0 , 50 }, " Radius (cm)" };
156+ ConfigurableAxis axisDeltaDistanceRadii{" axisDeltaDistanceRadii" , {500 , -50 , 50 }, " (cm)" };
157+ ConfigurableAxis axisPositionGuess{" axisPositionGuess" , {240 , 0 , 120 }, " (cm)" };
156158
157159 int mRunNumber ;
158160 float d_bz;
@@ -290,6 +292,16 @@ struct lambdakzeroBuilder {
290292 registry.add (" h2dTopoVarPosDCAToPV" , " h2dTopoVarPosDCAToPV" , kTH2D , {axisPtQA, axisTopoVarDCAToPV});
291293 registry.add (" h2dTopoVarNegDCAToPV" , " h2dTopoVarNegDCAToPV" , kTH2D , {axisPtQA, axisTopoVarDCAToPV});
292294 registry.add (" h2dTopoVarDCAV0ToPV" , " h2dTopoVarDCAV0ToPV" , kTH2D , {axisPtQA, axisTopoVarDCAV0ToPV});
295+
296+ // QA for PCM
297+ registry.add (" h2d_pcm_DeltaDistanceRadii_True" , " h2d_pcm_DeltaDistanceRadii_True" , kTH2D , {axisPtQA, axisDeltaDistanceRadii});
298+ registry.add (" h2d_pcm_DeltaDistanceRadii_Bg" , " h2d_pcm_DeltaDistanceRadii_Bg" , kTH2D , {axisPtQA, axisDeltaDistanceRadii});
299+ registry.add (" h2d_pcm_PositionGuess_True" , " h2d_pcm_PositionGuess_True" , kTH2D , {axisPtQA, axisPositionGuess});
300+ registry.add (" h2d_pcm_PositionGuess_Bg" , " h2d_pcm_PositionGuess_Bg" , kTH2D , {axisPtQA, axisPositionGuess});
301+ registry.add (" h2d_pcm_RadiallyOutgoingAtThisRadius1_True" , " h2d_pcm_RadiallyOutgoingAtThisRadius1_True" , kTH2D , {axisPtQA, axisPositionGuess});
302+ registry.add (" h2d_pcm_RadiallyOutgoingAtThisRadius2_True" , " h2d_pcm_RadiallyOutgoingAtThisRadius2_True" , kTH2D , {axisPtQA, axisPositionGuess});
303+ registry.add (" h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg" , " h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg" , kTH2D , {axisPtQA, axisPositionGuess});
304+ registry.add (" h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg" , " h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg" , kTH2D , {axisPtQA, axisPositionGuess});
293305 }
294306
295307 mRunNumber = 0 ;
@@ -672,6 +684,45 @@ struct lambdakzeroBuilder {
672684 registry.fill (HIST (" h2dTopoVarNegDCAToPV" ), lPt, v0candidate.negDCAxy );
673685 registry.fill (HIST (" h2dTopoVarDCAV0ToPV" ), lPt, dcaV0toPV);
674686
687+ // -------------------------------------------------------------------------------------
688+ // PCM finding tests
689+ //
690+ // a) delta1 = D - R1 - R2
691+ // D: distance between two track helix centers in xy
692+ // R1, R2: track radii
693+
694+ o2::math_utils::CircleXYf_t trcCircle1, trcCircle2;
695+ float sna, csa;
696+ posTrackPar.getCircleParams (d_bz, trcCircle1, sna, csa);
697+ negTrackPar.getCircleParams (d_bz, trcCircle2, sna, csa);
698+
699+ // distance between circle centers (one circle is at origin -> easy)
700+ float centerDistance = std::hypot (trcCircle1.xC - trcCircle2.xC , trcCircle1.yC - trcCircle2.yC );
701+
702+ // b) delta2 = abs(R2/(R1+R2)*rvec1 + R1/(R1+R2)*rvec2)
703+ float r1_r = trcCircle1.rC / (trcCircle1.rC + trcCircle2.rC );
704+ float r2_r = trcCircle2.rC / (trcCircle1.rC + trcCircle2.rC );
705+ float delta2 = std::hypot (r2_r * trcCircle1.xC + r1_r * trcCircle2.xC , r2_r * trcCircle1.yC + r1_r * trcCircle2.yC );
706+
707+ // c) delta3 = sqrt(D^2-R^2); D: distance origin-center, R: radius
708+ float delta3_track1 = TMath::Sqrt (TMath::Power (trcCircle1.xC , 2 ) + TMath::Power (trcCircle1.yC , 2 ) - TMath::Power (trcCircle1.rC , 2 ));
709+ float delta3_track2 = TMath::Sqrt (TMath::Power (trcCircle2.xC , 2 ) + TMath::Power (trcCircle2.yC , 2 ) - TMath::Power (trcCircle2.rC , 2 ));
710+
711+ // let's just use tagged, cause we can
712+ if (!posTrack.hasITS () && !posTrack.hasTRD () && !posTrack.hasTOF () && !negTrack.hasITS () && !negTrack.hasTRD () && !negTrack.hasTOF ()) {
713+ if (V0.isTrueGamma ()) {
714+ registry.fill (HIST (" h2d_pcm_DeltaDistanceRadii_True" ), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC );
715+ registry.fill (HIST (" h2d_pcm_PositionGuess_True" ), lPt, delta2);
716+ registry.fill (HIST (" h2d_pcm_RadiallyOutgoingAtThisRadius1_True" ), lPt, delta3_track1);
717+ registry.fill (HIST (" h2d_pcm_RadiallyOutgoingAtThisRadius2_True" ), lPt, delta3_track2);
718+ } else {
719+ registry.fill (HIST (" h2d_pcm_DeltaDistanceRadii_Bg" ), lPt, centerDistance - trcCircle1.rC - trcCircle2.rC );
720+ registry.fill (HIST (" h2d_pcm_PositionGuess_Bg" ), lPt, delta2);
721+ registry.fill (HIST (" h2d_pcm_RadiallyOutgoingAtThisRadius1_Bg" ), lPt, delta3_track1);
722+ registry.fill (HIST (" h2d_pcm_RadiallyOutgoingAtThisRadius2_Bg" ), lPt, delta3_track2);
723+ }
724+ }
725+ // -------------------------------------------------------------------------------------
675726 } // end QA
676727 return true ;
677728 }
0 commit comments