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,22 @@ struct mftMchMatcher {
289290
290291 HistogramRegistry registry{" registry" , {}};
291292
293+ template <typename T, typename C>
294+ o2::dataformats::GlobalFwdTrack trackToGlobalFwd (const T& track, const C& cov)
295+ {
296+ double chi2 = track.chi2 ();
297+ SMatrix5 tpars (track.x (), track.y (), track.phi (), track.tgl (), track.signed1Pt ());
298+ std::vector<double > v1{cov.cXX (), cov.cXY (), cov.cYY (), cov.cPhiX (), cov.cPhiY (),
299+ cov.cPhiPhi (), cov.cTglX (), cov.cTglY (), cov.cTglPhi (), cov.cTglTgl (),
300+ cov.c1PtX (), cov.c1PtY (), cov.c1PtPhi (), cov.c1PtTgl (), cov.c1Pt21Pt2 ()};
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.setCovariances (trackparCov.getCovariances ());
306+ return fwdtrack;
307+ }
308+
292309 template <class T , class C >
293310 bool pDCACut (const T& mchTrack, const C& collision, double nSigmaPDCA)
294311 {
@@ -317,11 +334,8 @@ struct mftMchMatcher {
317334 double pResEffect = sigmaPDCA / (1 . - nrp / (1 . + nrp));
318335 double slopeResEffect = 535 . * slopeRes * p;
319336 double sigmaPDCAWithRes = TMath::Sqrt (pResEffect * pResEffect + slopeResEffect * slopeResEffect);
320- if (pDCA > nSigmaPDCA * sigmaPDCAWithRes) {
321- return false ;
322- }
323337
324- return true ;
338+ return (pDCA <= nSigmaPDCA * sigmaPDCAWithRes) ;
325339 }
326340
327341 template <class T , class C >
@@ -334,8 +348,9 @@ struct mftMchMatcher {
334348 double nSigmaPdcaCut)
335349 {
336350 // chi2 cut
337- if (mchTrack.chi2 () > chi2Cut)
351+ if (mchTrack.chi2 () > chi2Cut) {
338352 return false ;
353+ }
339354
340355 // momentum cut
341356 if (mchTrack.p () < pCut) {
@@ -374,8 +389,9 @@ struct mftMchMatcher {
374389 std::array<double , 2 > etaCut)
375390 {
376391 // chi2 cut
377- if (mftTrack.chi2 () > chi2Cut)
392+ if (mftTrack.chi2 () > chi2Cut) {
378393 return false ;
394+ }
379395
380396 // transverse momentum cut
381397 if (mftTrack.pt () < pTCut) {
@@ -394,8 +410,9 @@ struct mftMchMatcher {
394410 template <typename BC >
395411 void initCCDB (BC const & bc)
396412 {
397- if (mRunNumber == bc.runNumber ())
413+ if (mRunNumber == bc.runNumber ()) {
398414 return ;
415+ }
399416
400417 fGrpMag = ccdbManager->getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
401418
@@ -523,8 +540,9 @@ struct mftMchMatcher {
523540 bool isPairedMuon (int64_t muonTrackId, const std::vector<std::pair<int64_t , int64_t >>& matchablePairs)
524541 {
525542 for (const auto & [id1, id2] : matchablePairs) {
526- if (muonTrackId == id1)
543+ if (muonTrackId == id1) {
527544 return true ;
545+ }
528546 }
529547 return false ;
530548 }
@@ -543,8 +561,9 @@ struct mftMchMatcher {
543561 // search for an MFT track that is associated to the MCH mother particle
544562 for (const auto & mftTrack : mftTracks) {
545563 // skip tracks that do not have an associated MC particle
546- if (!mftTrack.has_mcParticle ())
564+ if (!mftTrack.has_mcParticle ()) {
547565 continue ;
566+ }
548567
549568 if (mftTrack.mcParticle ().globalIndex () == mchMotherParticle.globalIndex ()) {
550569 return true ;
@@ -656,11 +675,11 @@ struct mftMchMatcher {
656675 }
657676
658677 mftCovIndexes.clear ();
659- for (auto & mftTrackCov : mftCovs) {
678+ for (const auto & mftTrackCov : mftCovs) {
660679 mftCovIndexes[mftTrackCov.matchMFTTrackId ()] = mftTrackCov.globalIndex ();
661680 }
662681
663- for (auto muon : muonTracks) {
682+ for (const auto & muon : muonTracks) {
664683 // only consider global MFT-MCH-MID matches
665684 if (static_cast <int >(muon.trackType ()) != 0 ) {
666685 continue ;
@@ -687,7 +706,7 @@ struct mftMchMatcher {
687706 auto mftTime = mfttrack.trackTime () + bc_coll.globalBC () * o2::constants::lhc::LHCBunchSpacingNS;
688707
689708 o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar (mfttrack, mfttrackcov);
690- o2::track::TrackParCovFwd muonprop = VarManager::FwdToTrackPar (muontrack, muontrack);
709+ o2::dataformats::GlobalFwdTrack muonprop = trackToGlobalFwd (muontrack, muontrack);
691710 if (fzMatching.value < 0 .) {
692711 mftprop = VarManager::PropagateFwd (mfttrack, mfttrackcov, fzMatching.value );
693712 muonprop = VarManager::PropagateMuon (muontrack, collision, VarManager::kToMatching );
@@ -879,8 +898,8 @@ struct mftMchMatcher {
879898 PROCESS_SWITCH (mftMchMatcher, processRD, " process_RD" , false );
880899};
881900
882- WorkflowSpec defineDataProcessing (ConfigContext const & cfgc )
901+ WorkflowSpec defineDataProcessing (ConfigContext const & context )
883902{
884903 return WorkflowSpec{
885- adaptAnalysisTask<mftMchMatcher>(cfgc )};
904+ adaptAnalysisTask<mftMchMatcher>(context )};
886905};
0 commit comments