@@ -78,43 +78,38 @@ struct FwdTrackExtension {
7878 float dcaY = -999 ;
7979 if (track.has_collision ()) {
8080 auto const & collision = track.collision ();
81- if (propInTheAbsorber) {
82- auto bc = collision. template bc_as <o2::aod::BCsWithTimestamps>();
83- if ( fCurrentRun != bc.runNumber ()) {
84- grpmag = fCCDB -> getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc. timestamp ());
85- if (grpmag != nullptr ) {
86- LOGF (info, " Init field from GRP " );
87- o2::base::Propagator::initFieldFromGRP (grpmag);
88- }
81+ auto bc = collision. template bc_as <o2::aod::BCsWithTimestamps>();
82+ if ( fCurrentRun != bc. runNumber ()) {
83+ grpmag = fCCDB -> getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
84+ if ( grpmag != nullptr ) {
85+ LOGF (info, " Init field from GRP " );
86+ o2::base::Propagator::initFieldFromGRP (grpmag );
87+ }
88+ if (propInTheAbsorber) {
8989 LOGF (info, " Set field for muons" );
9090 o2::mch::TrackExtrap::setField ();
91- fCurrentRun = bc.runNumber ();
92- }
93- const float zField = grpmag->getNominalL3Field ();
94-
95- o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift (track, 0.0 );
96- if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
97- auto muontrack = track.template matchMCHTrack_as <MuonsWithCov>();
98- auto mfttrack = track.template matchMFTTrack_as <aod::MFTTracks>();
99- o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon (muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex , 0 .f , zField);
100- SMatrix5 tpars (mfttrack.x (), mfttrack.y (), mfttrack.phi (), mfttrack.tgl (), mfttrack.signed1Pt ());
101- SMatrix55 tcovs{};
102- o2::track::TrackParCovFwd mft{mfttrack.z (), tpars, tcovs, mfttrack.chi2 ()};
103- fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov (propmuon, mft);
10491 }
92+ fCurrentRun = bc.runNumber ();
93+ }
94+ const float zField = grpmag->getNominalL3Field ();
95+
96+ o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift (track, 0.0 );
97+ if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
98+ auto muontrack = track.template matchMCHTrack_as <MuonsWithCov>();
99+ auto mfttrack = track.template matchMFTTrack_as <aod::MFTTracks>();
100+ o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon (muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex , 0 .f , zField);
101+ SMatrix5 tpars (mfttrack.x (), mfttrack.y (), mfttrack.phi (), mfttrack.tgl (), mfttrack.signed1Pt ());
102+ SMatrix55 tcovs{};
103+ o2::track::TrackParCovFwd mft{mfttrack.z (), tpars, tcovs, mfttrack.chi2 ()};
104+ fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov (propmuon, mft);
105+ }
106+ if (!propInTheAbsorber && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MCHStandaloneTrack)) {
105107 auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd (fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA , 0 .f , zField);
106108 dcaX = (proptrack.getX () - collision.posX ());
107109 dcaY = (proptrack.getY () - collision.posY ());
108110 } else {
109- double chi2 = track.chi2 ();
110- SMatrix5 tpars (track.x (), track.y (), track.phi (), track.tgl (), track.signed1Pt ());
111- std::vector<double > v1;
112- SMatrix55 tcovs (v1.begin (), v1.end ());
113- o2::track::TrackParCovFwd pars1{track.z (), tpars, tcovs, chi2};
114- pars1.propagateToZlinear (collision.posZ ());
115-
116- dcaX = (pars1.getX () - collision.posX ());
117- dcaY = (pars1.getY () - collision.posY ());
111+ dcaX = track.pDca () / sqrt (2 ) / track.p ();
112+ dcaY = dcaX;
118113 }
119114 }
120115 fwdDCA (dcaX, dcaY);
0 commit comments