@@ -50,7 +50,7 @@ struct FwdTrackExtension {
5050 Configurable<std::string> geoPath{" geoPath" , " GLO/Config/GeometryAligned" , " Path of the geometry file" };
5151 Configurable<std::string> grpmagPath{" grpmagPath" , " GLO/Config/GRPMagField" , " CCDB path of the GRPMagField object" };
5252 Configurable<std::string> configCcdbUrl{" configCcdbUrl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
53- Configurable<bool > refitGlobalMuon{" refitGlobalMuon" , true , " Recompute parameters of global muons" };
53+ Configurable<bool > refitGlobalMuon{" refitGlobalMuon" , false , " Recompute parameters of global muons" };
5454
5555 Service<o2::ccdb::BasicCCDBManager> fCCDB ;
5656 o2::parameters::GRPMagField* grpmag = nullptr ; // for run 3, we access GRPMagField from GLO/Config/GRPMagField
@@ -69,35 +69,41 @@ struct FwdTrackExtension {
6969 }
7070 }
7171
72- void process (aod::Collisions::iterator const & collision , o2::aod::BCsWithTimestamps const & /* ...*/ , MuonsWithCov const & tracks, aod::MFTTracks const & /* ...*/ )
72+ void process (MuonsWithCov const & tracks, aod::MFTTracks const & /* ... */ , o2::aod::BCsWithTimestamps const & /* ...*/ , aod::Collisions const & /* ...*/ )
7373 {
74- auto bc = collision.template bc_as <o2::aod::BCsWithTimestamps>();
75- if (fCurrentRun != bc.runNumber ()) {
76- grpmag = fCCDB ->getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
77- if (grpmag != nullptr ) {
78- LOGF (info, " Init field from GRP" );
79- o2::base::Propagator::initFieldFromGRP (grpmag);
80- }
81- LOGF (info, " Set field for muons" );
82- o2::mch::TrackExtrap::setField ();
83- fCurrentRun = bc.runNumber ();
84- }
85- const float zField = grpmag->getNominalL3Field ();
8674 for (const auto & track : tracks) {
8775 const auto trackType = track.trackType ();
88- o2::dataformats::GlobalFwdTrack fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd (track, track);
89- if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
90- auto muontrack = track.template matchMCHTrack_as <MuonsWithCov>();
91- auto mfttrack = track.template matchMFTTrack_as <aod::MFTTracks>();
92- o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon (muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex , 0 .f , zField);
93- SMatrix5 tpars (mfttrack.x (), mfttrack.y (), mfttrack.phi (), mfttrack.tgl (), mfttrack.signed1Pt ());
94- SMatrix55 tcovs{};
95- o2::track::TrackParCovFwd mft{mfttrack.z (), tpars, tcovs, mfttrack.chi2 ()};
96- fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov (propmuon, mft);
76+ float dcaX = -999 ;
77+ float dcaY = -999 ;
78+ if (track.has_collision ()) {
79+ auto const & collision = track.collision ();
80+ auto bc = collision.template bc_as <o2::aod::BCsWithTimestamps>();
81+ if (fCurrentRun != bc.runNumber ()) {
82+ grpmag = fCCDB ->getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
83+ if (grpmag != nullptr ) {
84+ LOGF (info, " Init field from GRP" );
85+ o2::base::Propagator::initFieldFromGRP (grpmag);
86+ }
87+ LOGF (info, " Set field for muons" );
88+ o2::mch::TrackExtrap::setField ();
89+ fCurrentRun = bc.runNumber ();
90+ }
91+ const float zField = grpmag->getNominalL3Field ();
92+
93+ o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift (track, 0.0 );
94+ if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
95+ auto muontrack = track.template matchMCHTrack_as <MuonsWithCov>();
96+ auto mfttrack = track.template matchMFTTrack_as <aod::MFTTracks>();
97+ o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon (muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex , 0 .f , zField);
98+ SMatrix5 tpars (mfttrack.x (), mfttrack.y (), mfttrack.phi (), mfttrack.tgl (), mfttrack.signed1Pt ());
99+ SMatrix55 tcovs{};
100+ o2::track::TrackParCovFwd mft{mfttrack.z (), tpars, tcovs, mfttrack.chi2 ()};
101+ fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov (propmuon, mft);
102+ }
103+ auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd (fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA , 0 .f , zField);
104+ dcaX = (proptrack.getX () - collision.posX ());
105+ dcaY = (proptrack.getY () - collision.posY ());
97106 }
98- const auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd (fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA , 0 .f , zField);
99- const float dcaX = (proptrack.getX () - collision.posX ());
100- const float dcaY = (proptrack.getY () - collision.posY ());
101107 fwdDCA (dcaX, dcaY);
102108 }
103109 }
0 commit comments