diff --git a/Common/TableProducer/fwdtrackextension.cxx b/Common/TableProducer/fwdtrackextension.cxx index 5ffdf73bf7a..1fcede5d26c 100644 --- a/Common/TableProducer/fwdtrackextension.cxx +++ b/Common/TableProducer/fwdtrackextension.cxx @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -50,6 +51,7 @@ struct FwdTrackExtension { Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable configCcdbUrl{"configCcdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable propInTheAbsorber{"propInTheAbsorber", false, "Propagate muon in the absober: false to minimize standalone muons DCA calculation"}; Configurable refitGlobalMuon{"refitGlobalMuon", false, "Recompute parameters of global muons"}; Service fCCDB; @@ -63,7 +65,7 @@ struct FwdTrackExtension { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); - if (!o2::base::GeometryManager::isGeometryLoaded()) { + if (propInTheAbsorber && !o2::base::GeometryManager::isGeometryLoaded()) { LOGF(info, "Load geometry from CCDB"); fCCDB->get(geoPath); } @@ -84,8 +86,10 @@ struct FwdTrackExtension { LOGF(info, "Init field from GRP"); o2::base::Propagator::initFieldFromGRP(grpmag); } - LOGF(info, "Set field for muons"); - o2::mch::TrackExtrap::setField(); + if (propInTheAbsorber) { + LOGF(info, "Set field for muons"); + o2::mch::TrackExtrap::setField(); + } fCurrentRun = bc.runNumber(); } const float zField = grpmag->getNominalL3Field(); @@ -100,9 +104,14 @@ struct FwdTrackExtension { o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()}; fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); } - auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField); - dcaX = (proptrack.getX() - collision.posX()); - dcaY = (proptrack.getY() - collision.posY()); + if (!propInTheAbsorber && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::MCHStandaloneTrack)) { + auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField); + dcaX = (proptrack.getX() - collision.posX()); + dcaY = (proptrack.getY() - collision.posY()); + } else { + dcaX = track.pDca() / std::numbers::sqrt2 / track.p(); + dcaY = dcaX; + } } fwdDCA(dcaX, dcaY); }