4848#include < RtypesCore.h>
4949
5050#include < algorithm>
51+ #include < cmath>
5152#include < cstdint>
5253#include < map>
5354#include < memory>
@@ -267,13 +268,13 @@ struct mftMchMatcher {
267268 kMatchTypeWrongNonLeading = 5 ,
268269 kMatchTypeDecayNonLeading = 6 ,
269270 kMatchTypeFakeNonLeading = 7 ,
270- kMatchTypeUndefined
271+ kMatchTypeUndefined = 8
271272 };
272273
273274 o2::globaltracking::MatchGlobalFwd mExtrap ;
274275
275276 int mRunNumber {0 }; // needed to detect if the run changed and trigger update of magnetic field
276- Service<o2::ccdb::BasicCCDBManager> ccdbManager;
277+ Service<o2::ccdb::BasicCCDBManager> ccdbManager{} ;
277278 o2::ccdb::CcdbApi fCCDBApi ;
278279
279280 o2::parameters::GRPMagField* fGrpMag = nullptr ;
@@ -289,6 +290,39 @@ struct mftMchMatcher {
289290
290291 HistogramRegistry registry{" registry" , {}};
291292
293+ template <typename T>
294+ o2::dataformats::GlobalFwdTrack fwdToTrackPar (const T& track)
295+ {
296+ double chi2 = track.chi2 ();
297+ SMatrix5 tpars (track.x (), track.y (), track.phi (), track.tgl (), track.signed1Pt ());
298+ std::vector<double > v1{0 , 0 , 0 , 0 , 0 ,
299+ 0 , 0 , 0 , 0 , 0 ,
300+ 0 , 0 , 0 , 0 , 0 };
301+ SMatrix55 tcovs (v1.begin (), v1.end ());
302+ o2::track::TrackParCovFwd trackparCov{track.z (), tpars, tcovs, chi2};
303+ o2::dataformats::GlobalFwdTrack fwdtrack;
304+ fwdtrack.setParameters (trackparCov.getParameters ());
305+ fwdtrack.setZ (trackparCov.getZ ());
306+ fwdtrack.setCovariances (trackparCov.getCovariances ());
307+ return fwdtrack;
308+ }
309+
310+ template <typename T, typename C>
311+ o2::dataformats::GlobalFwdTrack fwdToTrackPar (const T& track, const C& cov)
312+ {
313+ double chi2 = track.chi2 ();
314+ SMatrix5 tpars (track.x (), track.y (), track.phi (), track.tgl (), track.signed1Pt ());
315+ std::vector<double > v1{cov.cXX (), cov.cXY (), cov.cYY (), cov.cPhiX (), cov.cPhiY (),
316+ cov.cPhiPhi (), cov.cTglX (), cov.cTglY (), cov.cTglPhi (), cov.cTglTgl (),
317+ cov.c1PtX (), cov.c1PtY (), cov.c1PtPhi (), cov.c1PtTgl (), cov.c1Pt21Pt2 ()};
318+ SMatrix55 tcovs (v1.begin (), v1.end ());
319+ o2::track::TrackParCovFwd trackparCov{track.z (), tpars, tcovs, chi2};
320+ o2::dataformats::GlobalFwdTrack fwdtrack;
321+ fwdtrack.setParameters (trackparCov.getParameters ());
322+ fwdtrack.setCovariances (trackparCov.getCovariances ());
323+ return fwdtrack;
324+ }
325+
292326 template <class T , class C >
293327 bool pDCACut (const T& mchTrack, const C& collision, double nSigmaPDCA)
294328 {
@@ -317,11 +351,8 @@ struct mftMchMatcher {
317351 double pResEffect = sigmaPDCA / (1 . - nrp / (1 . + nrp));
318352 double slopeResEffect = 535 . * slopeRes * p;
319353 double sigmaPDCAWithRes = TMath::Sqrt (pResEffect * pResEffect + slopeResEffect * slopeResEffect);
320- if (pDCA > nSigmaPDCA * sigmaPDCAWithRes) {
321- return false ;
322- }
323354
324- return true ;
355+ return (pDCA <= nSigmaPDCA * sigmaPDCAWithRes) ;
325356 }
326357
327358 template <class T , class C >
@@ -334,8 +365,9 @@ struct mftMchMatcher {
334365 double nSigmaPdcaCut)
335366 {
336367 // chi2 cut
337- if (mchTrack.chi2 () > chi2Cut)
368+ if (mchTrack.chi2 () > chi2Cut) {
338369 return false ;
370+ }
339371
340372 // momentum cut
341373 if (mchTrack.p () < pCut) {
@@ -374,8 +406,9 @@ struct mftMchMatcher {
374406 std::array<double , 2 > etaCut)
375407 {
376408 // chi2 cut
377- if (mftTrack.chi2 () > chi2Cut)
409+ if (mftTrack.chi2 () > chi2Cut) {
378410 return false ;
411+ }
379412
380413 // transverse momentum cut
381414 if (mftTrack.pt () < pTCut) {
@@ -394,8 +427,9 @@ struct mftMchMatcher {
394427 template <typename BC >
395428 void initCCDB (BC const & bc)
396429 {
397- if (mRunNumber == bc.runNumber ())
430+ if (mRunNumber == bc.runNumber ()) {
398431 return ;
432+ }
399433
400434 fGrpMag = ccdbManager->getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
401435
@@ -523,8 +557,9 @@ struct mftMchMatcher {
523557 bool isPairedMuon (int64_t muonTrackId, const std::vector<std::pair<int64_t , int64_t >>& matchablePairs)
524558 {
525559 for (const auto & [id1, id2] : matchablePairs) {
526- if (muonTrackId == id1)
560+ if (muonTrackId == id1) {
527561 return true ;
562+ }
528563 }
529564 return false ;
530565 }
@@ -543,8 +578,9 @@ struct mftMchMatcher {
543578 // search for an MFT track that is associated to the MCH mother particle
544579 for (const auto & mftTrack : mftTracks) {
545580 // skip tracks that do not have an associated MC particle
546- if (!mftTrack.has_mcParticle ())
581+ if (!mftTrack.has_mcParticle ()) {
547582 continue ;
583+ }
548584
549585 if (mftTrack.mcParticle ().globalIndex () == mchMotherParticle.globalIndex ()) {
550586 return true ;
@@ -656,11 +692,11 @@ struct mftMchMatcher {
656692 }
657693
658694 mftCovIndexes.clear ();
659- for (auto & mftTrackCov : mftCovs) {
695+ for (const auto & mftTrackCov : mftCovs) {
660696 mftCovIndexes[mftTrackCov.matchMFTTrackId ()] = mftTrackCov.globalIndex ();
661697 }
662698
663- for (auto muon : muonTracks) {
699+ for (const auto & muon : muonTracks) {
664700 // only consider global MFT-MCH-MID matches
665701 if (static_cast <int >(muon.trackType ()) != 0 ) {
666702 continue ;
@@ -686,8 +722,8 @@ struct mftMchMatcher {
686722 auto muonTime = muontrack.trackTime () + bc_coll.globalBC () * o2::constants::lhc::LHCBunchSpacingNS;
687723 auto mftTime = mfttrack.trackTime () + bc_coll.globalBC () * o2::constants::lhc::LHCBunchSpacingNS;
688724
689- o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar (mfttrack, mfttrackcov);
690- o2::track::TrackParCovFwd muonprop = VarManager::FwdToTrackPar (muontrack, muontrack);
725+ o2::dataformats::GlobalFwdTrack mftprop = fwdToTrackPar (mfttrack, mfttrackcov);
726+ o2::dataformats::GlobalFwdTrack muonprop = fwdToTrackPar (muontrack, muontrack);
691727 if (fzMatching.value < 0 .) {
692728 mftprop = VarManager::PropagateFwd (mfttrack, mfttrackcov, fzMatching.value );
693729 muonprop = VarManager::PropagateMuon (muontrack, collision, VarManager::kToMatching );
@@ -879,7 +915,7 @@ struct mftMchMatcher {
879915 PROCESS_SWITCH (mftMchMatcher, processRD, " process_RD" , false );
880916};
881917
882- WorkflowSpec defineDataProcessing (ConfigContext const & cfgc )
918+ WorkflowSpec defineDataProcessing (ConfigContext const & context )
883919{
884920 return WorkflowSpec{
885921 adaptAnalysisTask<mftMchMatcher>(cfgc)};
0 commit comments