@@ -52,7 +52,7 @@ struct UpcCandProducerGlobalMuon {
5252 Produces<o2::aod::UDFwdTracks> udFwdTracks;
5353 Produces<o2::aod::UDFwdTracksExtra> udFwdTracksExtra;
5454 Produces<o2::aod::UDFwdIndices> udFwdIndices;
55- Produces<o2::aod::UDFwdTracksCls> udFwdTrkClusters; // Added for MFT clusters
55+ Produces<o2::aod::UDFwdTracksCls> udFwdTrkClusters; // Added for MFT clusters
5656 Produces<o2::aod::UDCollisions> eventCandidates;
5757 Produces<o2::aod::UDCollisionsSelsFwd> eventCandidatesSelsFwd;
5858 Produces<o2::aod::UDZdcsReduced> udZdcsReduced;
@@ -64,7 +64,7 @@ struct UpcCandProducerGlobalMuon {
6464 Configurable<uint64_t > fBcWindowFITAmps {" fBcWindowFITAmps" , 20 , " BC range for T0A/V0A amplitudes array [-range, +(range-1)]" };
6565 Configurable<int > fBcWindowMCH {" fBcWindowMCH" , 20 , " Time window for MCH-MID to MCH-only matching for Muon candidates" };
6666 Configurable<float > fMaxFV0Amp {" fMaxFV0Amp" , 100 .f , " Max FV0 amplitude in the same BC" };
67-
67+
6868 // NEW: MFT/Global track support configurables
6969 Configurable<bool > fEnableMFT {" fEnableMFT" , true , " Enable MFT/global track processing" };
7070 Configurable<float > fMinEtaMFT {" fMinEtaMFT" , -3.6 , " Minimum eta for MFT acceptance" };
@@ -97,7 +97,7 @@ struct UpcCandProducerGlobalMuon {
9797 histRegistry.get <TH1>(HIST (" MuonsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kFwdSelRabs + 1 , " Rabs" );
9898 histRegistry.get <TH1>(HIST (" MuonsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kFwdSelpDCA + 1 , " pDCA" );
9999 histRegistry.get <TH1>(HIST (" MuonsSelCounter" ))->GetXaxis ()->SetBinLabel (upchelpers::kFwdSelChi2 + 1 , " Chi2" );
100-
100+
101101 // NEW: Add histograms for global track monitoring
102102 if (fEnableMFT ) {
103103 const AxisSpec axisTrackType{5 , -0.5 , 4.5 , " Track Type" };
@@ -106,7 +106,7 @@ struct UpcCandProducerGlobalMuon {
106106 histRegistry.get <TH1>(HIST (" hTrackTypes" ))->GetXaxis ()->SetBinLabel (2 , " MCHStandalone" );
107107 histRegistry.get <TH1>(HIST (" hTrackTypes" ))->GetXaxis ()->SetBinLabel (3 , " GlobalMuon" );
108108 histRegistry.get <TH1>(HIST (" hTrackTypes" ))->GetXaxis ()->SetBinLabel (4 , " GlobalFwd" );
109-
109+
110110 const AxisSpec axisEta{100 , -4.0 , -2.0 , " #eta" };
111111 histRegistry.add (" hEtaMFT" , " MFT track eta" , kTH1F , {axisEta});
112112 histRegistry.add (" hEtaGlobal" , " Global track eta" , kTH1F , {axisEta});
@@ -347,7 +347,7 @@ struct UpcCandProducerGlobalMuon {
347347 const auto & track = fwdTracks.iteratorAt (trackId);
348348 float px, py, pz;
349349 int sign;
350-
350+
351351 // NEW: Fill track type histogram if MFT enabled
352352 if (fEnableMFT ) {
353353 histRegistry.fill (HIST (" hTrackTypes" ), track.trackType ());
@@ -356,7 +356,7 @@ struct UpcCandProducerGlobalMuon {
356356 histRegistry.fill (HIST (" hEtaGlobal" ), track.eta ());
357357 }
358358 }
359-
359+
360360 if (fUpcCuts .getUseFwdCuts ()) {
361361 auto pft = propagateToZero (track);
362362 bool pass = cut (pft, track);
@@ -372,29 +372,29 @@ struct UpcCandProducerGlobalMuon {
372372 pz = track.pz ();
373373 sign = track.sign ();
374374 }
375-
375+
376376 udFwdTracks (candId, px, py, pz, sign, gbc, trackTime, track.trackTimeRes ());
377-
377+
378378 // NEW: Enhanced extra info for global tracks
379379 float mchmftChi2 = -1 .;
380380 if (track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack ||
381381 track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack) {
382382 mchmftChi2 = track.chi2MatchMCHMFT ();
383383 }
384-
385- udFwdTracksExtra (track.trackType (), track.nClusters (), track.pDca (), track.rAtAbsorberEnd (),
386- track.chi2 (), track.chi2MatchMCHMID (), mchmftChi2,
384+
385+ udFwdTracksExtra (track.trackType (), track.nClusters (), track.pDca (), track.rAtAbsorberEnd (),
386+ track.chi2 (), track.chi2MatchMCHMID (), mchmftChi2,
387387 track.mchBitMap (), track.midBitMap (), track.midBoards ());
388-
388+
389389 // NEW: Store MFT index for global tracks
390390 int64_t mftIndex = -1 ;
391391 if (fEnableMFT && (track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack ||
392392 track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
393393 mftIndex = track.matchMFTTrackId ();
394394 }
395-
395+
396396 udFwdIndices (candId, trackId, track.matchMCHTrackId (), mftIndex);
397-
397+
398398 if (fDoMC ) {
399399 const auto & label = mcFwdTrackLabels->iteratorAt (trackId);
400400 uint16_t mcMask = label.mcMask ();
@@ -410,12 +410,12 @@ struct UpcCandProducerGlobalMuon {
410410 {
411411 if (!fSaveMFTClusters )
412412 return ;
413-
413+
414414 std::map<int64_t , std::vector<int64_t >> clustersPerTrack;
415415 for (const auto & cls : fwdTrkCls) {
416416 clustersPerTrack[cls.fwdtrackId ()].push_back (cls.globalIndex ());
417417 }
418-
418+
419419 int newId = 0 ;
420420 for (auto trackId : trackIds) {
421421 auto it = clustersPerTrack.find (trackId);
@@ -445,10 +445,10 @@ struct UpcCandProducerGlobalMuon {
445445 o2::aod::Zdcs const & zdcs,
446446 const o2::aod::McFwdTrackLabels* mcFwdTrackLabels)
447447 {
448+ using o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack;
449+ using o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack;
448450 using o2::aod::fwdtrack::ForwardTrackTypeEnum::MCHStandaloneTrack;
449451 using o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack;
450- using o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack;
451- using o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack;
452452
453453 int32_t runNumber = bcs.iteratorAt (0 ).runNumber ();
454454 if (fUpcCuts .getUseFwdCuts ()) {
@@ -509,21 +509,21 @@ struct UpcCandProducerGlobalMuon {
509509 std::map<uint64_t , std::vector<int64_t >> mapGlobalBcsWithMCHMIDTrackIds;
510510 std::map<uint64_t , std::vector<int64_t >> mapGlobalBcsWithMCHTrackIds;
511511 std::map<uint64_t , std::vector<int64_t >> mapGlobalBcsWithGlobalTrackIds; // NEW: For global tracks
512-
512+
513513 for (const auto & fwdTrack : fwdTracks) {
514514 auto trackType = fwdTrack.trackType ();
515-
515+
516516 // Skip if not a relevant track type
517- if (trackType != MCHStandaloneTrack &&
518- trackType != MuonStandaloneTrack &&
517+ if (trackType != MCHStandaloneTrack &&
518+ trackType != MuonStandaloneTrack &&
519519 trackType != GlobalMuonTrack &&
520520 trackType != GlobalForwardTrack)
521521 continue ;
522-
522+
523523 auto trackId = fwdTrack.globalIndex ();
524524 int64_t indexBC = vAmbFwdTrackIndex[trackId] < 0 ? vColIndexBCs[fwdTrack.collisionId ()] : vAmbFwdTrackIndexBCs[vAmbFwdTrackIndex[trackId]];
525525 auto globalBC = vGlobalBCs[indexBC] + TMath::FloorNint (fwdTrack.trackTime () / o2::constants::lhc::LHCBunchSpacingNS + 1 .);
526-
526+
527527 if (trackType == MuonStandaloneTrack) { // MCH-MID
528528 mapGlobalBcsWithMCHMIDTrackIds[globalBC].push_back (trackId);
529529 } else if (trackType == MCHStandaloneTrack) { // MCH-only
@@ -534,9 +534,9 @@ struct UpcCandProducerGlobalMuon {
534534 }
535535
536536 std::vector<int64_t > selTrackIds{}; // NEW: For cluster saving
537-
537+
538538 int32_t candId = 0 ;
539-
539+
540540 // NEW: Process global tracks if MFT is enabled
541541 if (fEnableMFT && !mapGlobalBcsWithGlobalTrackIds.empty ()) {
542542 for (const auto & gbc_globalids : mapGlobalBcsWithGlobalTrackIds) {
@@ -551,15 +551,15 @@ struct UpcCandProducerGlobalMuon {
551551 if (fv0Amp > fMaxFV0Amp )
552552 continue ;
553553 }
554-
554+
555555 uint16_t numContrib = 0 ;
556556 auto & vGlobalIds = gbc_globalids.second ;
557-
557+
558558 // Check if we have global tracks (with MFT)
559559 std::vector<int64_t > tracksToSave;
560560 for (const auto & iglobal : vGlobalIds) {
561561 const auto & trk = fwdTracks.iteratorAt (iglobal);
562-
562+
563563 // Check MFT acceptance and decide which track to use
564564 if (isInMFTAcceptance (trk.eta ())) {
565565 // Inside MFT acceptance - use global track
@@ -578,18 +578,18 @@ struct UpcCandProducerGlobalMuon {
578578 }
579579 }
580580 }
581-
581+
582582 // Write selected tracks
583583 for (const auto & trkId : tracksToSave) {
584584 if (!addToFwdTable (candId, trkId, globalBcGlobal, 0 ., fwdTracks, mcFwdTrackLabels))
585585 continue ;
586586 numContrib++;
587587 selTrackIds.push_back (trkId);
588588 }
589-
589+
590590 if (numContrib < 1 )
591591 continue ;
592-
592+
593593 eventCandidates (globalBcGlobal, runNumber, 0 ., 0 ., 0 ., 0 , numContrib, 0 , 0 );
594594 std::vector<float > amplitudesV0A{};
595595 std::vector<int8_t > relBCsV0A{};
@@ -613,7 +613,7 @@ struct UpcCandProducerGlobalMuon {
613613 candId++;
614614 }
615615 }
616-
616+
617617 // Process MCH-MID tracks (original logic)
618618 for (const auto & gbc_muids : mapGlobalBcsWithMCHMIDTrackIds) {
619619 uint64_t globalBcMid = gbc_muids.first ;
@@ -684,7 +684,7 @@ struct UpcCandProducerGlobalMuon {
684684 mapGlobalBcsWithMCHMIDTrackIds.clear ();
685685 mapGlobalBcsWithMCHTrackIds.clear ();
686686 mapGlobalBcsWithGlobalTrackIds.clear (); // NEW
687- selTrackIds.clear (); // NEW
687+ selTrackIds.clear (); // NEW
688688 }
689689
690690 void processFwd (ForwardTracks const & fwdTracks,
0 commit comments