@@ -82,8 +82,8 @@ struct matchingMFT {
8282 Configurable<float > maxRelDPt{" maxRelDPt" , 1e+10f , " max. relative dpt between MFT-MCH-MID and MCH-MID" };
8383 Configurable<float > maxDEta{" maxDEta" , 1e+10f , " max. deta between MFT-MCH-MID and MCH-MID" };
8484 Configurable<float > maxDPhi{" maxDPhi" , 1e+10f , " max. dphi between MFT-MCH-MID and MCH-MID" };
85- Configurable<float > maxDEtaMP{ " maxDEtaMP " , 1e+10f , " max. deta between MFT and MCH-MID at matching plane Z" };
86- Configurable<float > maxDPhiMP{ " maxDPhiMP " , 1e+10f , " max. dphi between MFT and MCH-MID at matching plane Z" };
85+ Configurable<float > maxDXMP{ " maxDXMP " , 1e+10f , " max. dx between MFT and MCH-MID at matching plane Z" };
86+ Configurable<float > maxDYMP{ " maxDYMP " , 1e+10f , " max. dy between MFT and MCH-MID at matching plane Z" };
8787 Configurable<bool > requireMFTHitMap{" requireMFTHitMap" , false , " flag to require MFT hit map" };
8888 Configurable<std::vector<int >> requiredMFTDisks{" requiredMFTDisks" , std::vector<int >{0 }, " hit map on MFT disks [0,1,2,3,4]. logical-OR of each double-sided disk" };
8989 Configurable<float > matchingZ{" matchingZ" , -77.5 , " z position where matching is performed" };
@@ -179,14 +179,14 @@ struct matchingMFT {
179179 fRegistry .add (" MFTMCHMID/primary/correct/hEtaPhi" , " #eta vs. #varphi;#varphi (rad.);#eta" , kTH2F , {{180 , 0 , 2 * M_PI}, {80 , -5 .f , -1 .f }}, false );
180180 fRegistry .add (" MFTMCHMID/primary/correct/hEtaPhi_MatchedMCHMID" , " #eta vs. #varphi;#varphi (rad.);#eta" , kTH2F , {{180 , 0 , 2 * M_PI}, {80 , -5 .f , -1 .f }}, false );
181181 fRegistry .add (" MFTMCHMID/primary/correct/hsDelta" , " diff. between GL and associated SA;p_{T}^{gl} (GeV/c);(p_{T}^{sa} - p_{T}^{gl})/p_{T}^{gl};#eta^{sa} - #eta^{gl};#varphi^{sa} - #varphi^{gl} (rad.);" , kTHnSparseF , {axis_pt, {200 , -0.5 , +0.5 }, {200 , -1 , +1 }, {90 , -M_PI / 4 , M_PI / 4 }}, false );
182- fRegistry .add (" MFTMCHMID/primary/correct/hsDeltaAtMP" , " diff. between MFT and MCH-MID;p_{T}^{gl} (GeV/c);#varphi ^{MCH-MID} - #varphi ^{MFT} (rad.);#eta ^{MCH-MID} - #eta ^{MFT};" , kTHnSparseF , {axis_pt, {90 , -M_PI / 4 , M_PI / 4 }, {200 , -1 , + 1 }}, false );
182+ fRegistry .add (" MFTMCHMID/primary/correct/hsDeltaAtMP" , " diff. XY between MFT and MCH-MID at MP ;p_{T}^{gl} (GeV/c);X ^{MCH-MID} - X ^{MFT};Y ^{MCH-MID} - Y ^{MFT};" , kTHnSparseF , {axis_pt, {100 , -50 , 50 }, {100 , -50 , 50 }}, false );
183183 fRegistry .add (" MFTMCHMID/primary/correct/hDiffCollId" , " difference in collision index;collisionId_{TTCA} - collisionId_{MP}" , kTH1F , {{41 , -20.5 , +20.5 }}, false );
184184 fRegistry .add (" MFTMCHMID/primary/correct/hSign" , " sign;sign" , kTH1F , {{3 , -1.5 , +1.5 }}, false );
185185 fRegistry .add (" MFTMCHMID/primary/correct/hNclusters" , " Nclusters;Nclusters" , kTH1F , {{21 , -0 .5f , 20.5 }}, false );
186186 fRegistry .add (" MFTMCHMID/primary/correct/hNclustersMFT" , " NclustersMFT;Nclusters MFT" , kTH1F , {{11 , -0 .5f , 10.5 }}, false );
187187 fRegistry .add (" MFTMCHMID/primary/correct/hMFTClusterMap" , " MFT cluster map" , kTH1F , {{1024 , -0.5 , 1023.5 }}, false );
188188 fRegistry .add (" MFTMCHMID/primary/correct/hRatAbsorberEnd" , " R at absorber end;R at absorber end (cm)" , kTH1F , {{100 , 0 .0f , 100 }}, false );
189- fRegistry .add (" MFTMCHMID/primary/correct/hPDCA_Rabs" , " pDCA vs. Rabs;R at absorber end (cm);p #times DCA (GeV/c #upoint cm)" , kTH2F , {{100 , 0 , 100 }, {1000 , 0 .0f , 1000 }}, false );
189+ fRegistry .add (" MFTMCHMID/primary/correct/hPDCA_Rabs" , " pDCA vs. Rabs;R at absorber end (cm);p #times DCA (GeV/c #upoint cm)" , kTH2F , {{100 , 0 , 100 }, {100 , 0 .0f , 1000 }}, false );
190190 fRegistry .add (" MFTMCHMID/primary/correct/hChi2" , " chi2;chi2/ndf" , kTH1F , {{100 , 0 .0f , 10 }}, false );
191191 fRegistry .add (" MFTMCHMID/primary/correct/hChi2MFT" , " chi2 MFT/ndf;chi2 MFT/ndf" , kTH1F , {{100 , 0 .0f , 10 }}, false );
192192 fRegistry .add (" MFTMCHMID/primary/correct/hChi2MatchMCHMID" , " chi2 match MCH-MID;chi2" , kTH1F , {{100 , 0 .0f , 100 }}, false );
@@ -298,33 +298,61 @@ struct matchingMFT {
298298 // }
299299 // }
300300
301+ // template <typename TCollision, typename TTrackParCovFwd>
302+ // float cpaRZ(TCollision const& collision, TTrackParCovFwd const& fwdtrack)
303+ // {
304+ // float lx = fwdtrack.getX() - collision.posX(); // flight length X
305+ // float ly = fwdtrack.getY() - collision.posY(); // flight length Y
306+ // float lz = fwdtrack.getZ() - collision.posZ(); // flight length Z
307+ // float lt = RecoDecay::sqrtSumOfSquares(lx, ly); // flight length R, i.e. transverse plane.
308+
309+ // float pt = fwdtrack.getPt();
310+ // float pz = fwdtrack.getPz();
311+
312+ // float cpaRZ = RecoDecay::dotProd(std::array{lt, lz}, std::array{pt, pz}) / (RecoDecay::sqrtSumOfSquares(lt, lz) * RecoDecay::sqrtSumOfSquares(pt, pz));
313+ // if (cpaRZ < -1.f) {
314+ // return -1.f;
315+ // } else if (cpaRZ > 1.f) {
316+ // return 1.f;
317+ // }
318+ // return cpaRZ;
319+ // }
320+
301321 template <typename TFwdTracks, typename TMFTTracks, typename TCollision, typename TFwdTrack, typename TMFTrackCov>
302- void getDeltaEtaDeltaPhiAtMatchingPlane (TCollision const & collision, TFwdTrack const & fwdtrack, TMFTrackCov const & mftCovs, float & deta , float & dphi )
322+ void getDxDyAtMatchingPlane (TCollision const & collision, TFwdTrack const & fwdtrack, TMFTrackCov const & mftCovs, float & dx , float & dy )
303323 {
304324 if (fwdtrack.trackType () != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
305- deta = 999 .f ;
306- dphi = 999 .f ;
325+ dx = 999 .f ;
326+ dy = 999 .f ;
307327 return ; // do nothing
308328 }
309329
310330 auto mchtrack = fwdtrack.template matchMCHTrack_as <TFwdTracks>(); // MCH-MID
311- auto mfttrack = fwdtrack.template matchMFTTrack_as <TMFTTracks>();
331+ auto mfttrack = fwdtrack.template matchMFTTrack_as <TMFTTracks>(); // MFTsa
312332
313333 if (mchtrack.trackType () != o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) {
314- deta = 999 .f ;
315- dphi = 999 .f ;
334+ dx = 999 .f ;
335+ dy = 999 .f ;
316336 return ; // do nothing
317337 }
318338
319- o2::dataformats::GlobalFwdTrack propmuonAtPV = propagateMuon (mchtrack, mchtrack, collision, propagationPoint::kToMatchingPlane , matchingZ, mBz );
320- auto mfttrackcov = mftCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
321-
322339 auto muonAtMP = propagateMuon (mchtrack, mchtrack, collision, propagationPoint::kToMatchingPlane , matchingZ, mBz ); // propagated to matching plane
323- o2::track::TrackParCovFwd mftsaAtMP = getTrackParCovFwd (mfttrack, mfttrackcov); // values at innermost update
324- mftsaAtMP.propagateToZhelix (matchingZ, mBz ); // propagated to matching plane
325- deta = muonAtMP.getEta () - mftsaAtMP.getEta ();
326- dphi = muonAtMP.getPhi () - mftsaAtMP.getPhi ();
327- o2::math_utils::bringToPMPi (dphi);
340+
341+ auto mfttrackcov = mftCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
342+ o2::track::TrackParCovFwd mftsaAtMP = getTrackParCovFwd (mfttrack, mfttrackcov); // values at innermost update
343+ mftsaAtMP.propagateToZhelix (matchingZ, mBz ); // propagated to matching plane
344+ dx = muonAtMP.getX () - mftsaAtMP.getX ();
345+ dy = muonAtMP.getY () - mftsaAtMP.getY ();
346+ // o2::math_utils::bringToPMPi(dphi);
347+
348+ // float sigmaX = std::sqrt(muonAtMP.getSigma2X() + mftsaAtMP.getSigma2X());
349+ // float sigmaY = std::sqrt(muonAtMP.getSigma2Y() + mftsaAtMP.getSigma2Y());
350+ // dx /= sigmaX;
351+ // dy /= sigmaY;
352+
353+ // LOGF(info, "dx/sigmaX = %f, dy/sigmaY = %f", dx/sigmaX, dy/sigmaY);
354+ // LOGF(info, "muonAtMP.getX() = %f, muonAtMP.getSigma2X() = %f, muonAtMP.getY() = %f, muonAtMP.getSigma2Y() = %f", muonAtMP.getX(), muonAtMP.getSigma2X() , muonAtMP.getY(), muonAtMP.getSigma2Y());
355+ // LOGF(info, "mftsaAtMP.getX() = %f, mftsaAtMP.getSigma2X() = %f, mftsaAtMP.getY() = %f, mftsaAtMP.getSigma2Y() = %f", mftsaAtMP.getX(), mftsaAtMP.getSigma2X() , mftsaAtMP.getY(), mftsaAtMP.getSigma2Y());
328356 }
329357
330358 template <bool withMFTCov = false , typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks, typename TMFTTracksCov>
@@ -413,7 +441,7 @@ struct matchingMFT {
413441 float dcaXY_Matched = std::sqrt (dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
414442 float pDCA = mchtrack.p () * dcaXY_Matched;
415443 // float pDCA = propmuonAtPV.getP() * dcaXY;
416- float dphiMP = 999 .f , detaMP = 999 .f ;
444+ float dxMP = 999 .f , dyMP = 999 .f ;
417445
418446 pt = propmuonAtPV.getPt ();
419447 eta = propmuonAtPV.getEta ();
@@ -446,8 +474,8 @@ struct matchingMFT {
446474 }
447475 sigma_dcaXY = dcaXY / dcaXYinSigma;
448476
449- getDeltaEtaDeltaPhiAtMatchingPlane <TFwdTracks, TMFTTracks>(collision, fwdtrack, mftCovs, detaMP, dphiMP );
450- o2::math_utils::bringToPMPi (dphiMP);
477+ getDxDyAtMatchingPlane <TFwdTracks, TMFTTracks>(collision, fwdtrack, mftCovs, dxMP, dyMP );
478+ // o2::math_utils::bringToPMPi(dphiMP);
451479 }
452480
453481 if (refitGlobalMuon) {
@@ -465,7 +493,7 @@ struct matchingMFT {
465493 if (std::sqrt (std::pow (deta / maxDEta, 2 ) + std::pow (dphi / maxDPhi, 2 )) > 1 .f ) {
466494 return ;
467495 }
468- if (std::sqrt (std::pow (detaMP / maxDEtaMP , 2 ) + std::pow (dphiMP / maxDPhiMP , 2 )) > 1 .f ) {
496+ if (std::sqrt (std::pow (dxMP / maxDXMP , 2 ) + std::pow (dyMP / maxDYMP , 2 )) > 1 .f ) {
469497 return ;
470498 }
471499 if (std::fabs (dpt) > maxRelDPt) {
@@ -492,7 +520,7 @@ struct matchingMFT {
492520 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hEtaPhi" ), phi, eta);
493521 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hEtaPhi_MatchedMCHMID" ), phiMatchedMCHMID, etaMatchedMCHMID);
494522 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hsDelta" ), pt, dpt, deta, dphi);
495- fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hsDeltaAtMP" ), pt, dphiMP, detaMP );
523+ fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hsDeltaAtMP" ), pt, dxMP, dyMP );
496524 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hDiffCollId" ), collision.globalIndex () - fwdtrack.collisionId ());
497525 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hSign" ), fwdtrack.sign ());
498526 fRegistry .fill (HIST (" MFTMCHMID/primary/correct/hNclusters" ), fwdtrack.nClusters ());
@@ -530,7 +558,7 @@ struct matchingMFT {
530558 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hEtaPhi" ), phi, eta);
531559 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hEtaPhi_MatchedMCHMID" ), phiMatchedMCHMID, etaMatchedMCHMID);
532560 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hsDelta" ), pt, dpt, deta, dphi);
533- fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hsDeltaAtMP" ), pt, dphiMP, detaMP );
561+ fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hsDeltaAtMP" ), pt, dxMP, dyMP );
534562 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hDiffCollId" ), collision.globalIndex () - fwdtrack.collisionId ());
535563 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hSign" ), fwdtrack.sign ());
536564 fRegistry .fill (HIST (" MFTMCHMID/primary/wrong/hNclusters" ), fwdtrack.nClusters ());
@@ -570,7 +598,7 @@ struct matchingMFT {
570598 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hEtaPhi" ), phi, eta);
571599 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hEtaPhi_MatchedMCHMID" ), phiMatchedMCHMID, etaMatchedMCHMID);
572600 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hsDelta" ), pt, dpt, deta, dphi);
573- fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hsDeltaAtMP" ), pt, dphiMP, detaMP );
601+ fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hsDeltaAtMP" ), pt, dxMP, dyMP );
574602 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hDiffCollId" ), collision.globalIndex () - fwdtrack.collisionId ());
575603 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hSign" ), fwdtrack.sign ());
576604 fRegistry .fill (HIST (" MFTMCHMID/secondary/correct/hNclusters" ), fwdtrack.nClusters ());
@@ -608,7 +636,7 @@ struct matchingMFT {
608636 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hEtaPhi" ), phi, eta);
609637 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hEtaPhi_MatchedMCHMID" ), phiMatchedMCHMID, etaMatchedMCHMID);
610638 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hsDelta" ), pt, dpt, deta, dphi);
611- fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hsDeltaAtMP" ), pt, dphiMP, detaMP );
639+ fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hsDeltaAtMP" ), pt, dxMP, dyMP );
612640 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hDiffCollId" ), collision.globalIndex () - fwdtrack.collisionId ());
613641 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hSign" ), fwdtrack.sign ());
614642 fRegistry .fill (HIST (" MFTMCHMID/secondary/wrong/hNclusters" ), fwdtrack.nClusters ());
@@ -691,11 +719,11 @@ struct matchingMFT {
691719 continue ;
692720 }
693721
694- float deta = 999 .f , dphi = 999 .f ;
722+ float dx = 999 .f , dy = 999 .f ;
695723 if constexpr (withMFTCov) {
696- getDeltaEtaDeltaPhiAtMatchingPlane <TFwdTracks, TMFTTracks>(collision, muon_tmp, mftCovs, deta, dphi );
724+ getDxDyAtMatchingPlane <TFwdTracks, TMFTTracks>(collision, muon_tmp, mftCovs, dx, dy );
697725 }
698- float dr = std::sqrt (deta * deta + dphi * dphi );
726+ float dr = std::sqrt (dx * dx + dy * dy );
699727
700728 // auto mcParticle_MFTMCHMID = muon_tmp.template mcParticle_as<aod::McParticles>(); // this is identical to mcParticle_MCHMID
701729 auto mcParticle_MCHMID = mchtrack.template mcParticle_as <aod::McParticles>(); // this is identical to mcParticle_MFTMCHMID
0 commit comments