3333#include < Math/MatrixRepresentationsStatic.h>
3434#include < Math/SMatrix.h>
3535
36+ #include < numbers>
3637#include < string>
3738#include < vector>
3839
@@ -50,6 +51,7 @@ struct FwdTrackExtension {
5051 Configurable<std::string> geoPath{" geoPath" , " GLO/Config/GeometryAligned" , " Path of the geometry file" };
5152 Configurable<std::string> grpmagPath{" grpmagPath" , " GLO/Config/GRPMagField" , " CCDB path of the GRPMagField object" };
5253 Configurable<std::string> configCcdbUrl{" configCcdbUrl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
54+ Configurable<bool > propInTheAbsorber{" propInTheAbsorber" , false , " Propagate muon in the absober: false to minimize standalone muons DCA calculation" };
5355 Configurable<bool > refitGlobalMuon{" refitGlobalMuon" , false , " Recompute parameters of global muons" };
5456
5557 Service<o2::ccdb::BasicCCDBManager> fCCDB ;
@@ -63,7 +65,7 @@ struct FwdTrackExtension {
6365 fCCDB ->setCaching (true );
6466 fCCDB ->setLocalObjectValidityChecking ();
6567
66- if (!o2::base::GeometryManager::isGeometryLoaded ()) {
68+ if (propInTheAbsorber && !o2::base::GeometryManager::isGeometryLoaded ()) {
6769 LOGF (info, " Load geometry from CCDB" );
6870 fCCDB ->get <TGeoManager>(geoPath);
6971 }
@@ -84,8 +86,10 @@ struct FwdTrackExtension {
8486 LOGF (info, " Init field from GRP" );
8587 o2::base::Propagator::initFieldFromGRP (grpmag);
8688 }
87- LOGF (info, " Set field for muons" );
88- o2::mch::TrackExtrap::setField ();
89+ if (propInTheAbsorber) {
90+ LOGF (info, " Set field for muons" );
91+ o2::mch::TrackExtrap::setField ();
92+ }
8993 fCurrentRun = bc.runNumber ();
9094 }
9195 const float zField = grpmag->getNominalL3Field ();
@@ -100,9 +104,14 @@ struct FwdTrackExtension {
100104 o2::track::TrackParCovFwd mft{mfttrack.z (), tpars, tcovs, mfttrack.chi2 ()};
101105 fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov (propmuon, mft);
102106 }
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 ());
107+ if (!propInTheAbsorber && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MCHStandaloneTrack)) {
108+ auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd (fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA , 0 .f , zField);
109+ dcaX = (proptrack.getX () - collision.posX ());
110+ dcaY = (proptrack.getY () - collision.posY ());
111+ } else {
112+ dcaX = track.pDca () / std::numbers::sqrt2 / track.p ();
113+ dcaY = dcaX;
114+ }
106115 }
107116 fwdDCA (dcaX, dcaY);
108117 }
0 commit comments