@@ -50,6 +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 > propInTheAbsorber{" propInTheAbsorber" , false , " Propagate muon in the absober: false to minimize standalone muons DCA calculation" };
5354 Configurable<bool > refitGlobalMuon{" refitGlobalMuon" , false , " Recompute parameters of global muons" };
5455
5556 Service<o2::ccdb::BasicCCDBManager> fCCDB ;
@@ -63,7 +64,7 @@ struct FwdTrackExtension {
6364 fCCDB ->setCaching (true );
6465 fCCDB ->setLocalObjectValidityChecking ();
6566
66- if (!o2::base::GeometryManager::isGeometryLoaded ()) {
67+ if (propInTheAbsorber && !o2::base::GeometryManager::isGeometryLoaded ()) {
6768 LOGF (info, " Load geometry from CCDB" );
6869 fCCDB ->get <TGeoManager>(geoPath);
6970 }
@@ -77,32 +78,44 @@ struct FwdTrackExtension {
7778 float dcaY = -999 ;
7879 if (track.has_collision ()) {
7980 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);
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+ }
89+ LOGF (info, " Set field for muons" );
90+ o2::mch::TrackExtrap::setField ();
91+ fCurrentRun = bc.runNumber ();
8692 }
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);
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);
104+ }
105+ auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd (fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA , 0 .f , zField);
106+ dcaX = (proptrack.getX () - collision.posX ());
107+ dcaY = (proptrack.getY () - collision.posY ());
108+ } 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 ());
102118 }
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 ());
106119 }
107120 fwdDCA (dcaX, dcaY);
108121 }
0 commit comments