Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 32 additions & 26 deletions Common/TableProducer/fwdtrackextension.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ struct FwdTrackExtension {
Configurable<std::string> geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"};
Configurable<std::string> grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"};
Configurable<std::string> configCcdbUrl{"configCcdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", true, "Recompute parameters of global muons"};
Configurable<bool> refitGlobalMuon{"refitGlobalMuon", false, "Recompute parameters of global muons"};

Service<o2::ccdb::BasicCCDBManager> fCCDB;
o2::parameters::GRPMagField* grpmag = nullptr; // for run 3, we access GRPMagField from GLO/Config/GRPMagField
Expand All @@ -69,35 +69,41 @@ struct FwdTrackExtension {
}
}

void process(aod::Collisions::iterator const& collision, o2::aod::BCsWithTimestamps const& /*...*/, MuonsWithCov const& tracks, aod::MFTTracks const& /*...*/)
void process(MuonsWithCov const& tracks, aod::MFTTracks const& /*...*/, o2::aod::BCsWithTimestamps const& /*...*/, aod::Collisions const& /*...*/)
{
auto bc = collision.template bc_as<o2::aod::BCsWithTimestamps>();
if (fCurrentRun != bc.runNumber()) {
grpmag = fCCDB->getForTimeStamp<o2::parameters::GRPMagField>(grpmagPath, bc.timestamp());
if (grpmag != nullptr) {
LOGF(info, "Init field from GRP");
o2::base::Propagator::initFieldFromGRP(grpmag);
}
LOGF(info, "Set field for muons");
o2::mch::TrackExtrap::setField();
fCurrentRun = bc.runNumber();
}
const float zField = grpmag->getNominalL3Field();
for (const auto& track : tracks) {
const auto trackType = track.trackType();
o2::dataformats::GlobalFwdTrack fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd(track, track);
if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
auto muontrack = track.template matchMCHTrack_as<MuonsWithCov>();
auto mfttrack = track.template matchMFTTrack_as<aod::MFTTracks>();
o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField);
SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt());
SMatrix55 tcovs{};
o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()};
fwdtrack = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft);
float dcaX = -999;
float dcaY = -999;
if (track.has_collision()) {
auto const& collision = track.collision();
auto bc = collision.template bc_as<o2::aod::BCsWithTimestamps>();
if (fCurrentRun != bc.runNumber()) {
grpmag = fCCDB->getForTimeStamp<o2::parameters::GRPMagField>(grpmagPath, bc.timestamp());
if (grpmag != nullptr) {
LOGF(info, "Init field from GRP");
o2::base::Propagator::initFieldFromGRP(grpmag);
}
LOGF(info, "Set field for muons");
o2::mch::TrackExtrap::setField();
fCurrentRun = bc.runNumber();
}
const float zField = grpmag->getNominalL3Field();

o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwdShift(track, 0.0);
if (refitGlobalMuon && (trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack || trackType == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalForwardTrack)) {
auto muontrack = track.template matchMCHTrack_as<MuonsWithCov>();
auto mfttrack = track.template matchMFTTrack_as<aod::MFTTracks>();
o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, 0.f, zField);
SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt());
SMatrix55 tcovs{};
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());
}
const auto proptrack = o2::aod::fwdtrackutils::propagateTrackParCovFwd(fwdtrack, trackType, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, 0.f, zField);
const float dcaX = (proptrack.getX() - collision.posX());
const float dcaY = (proptrack.getY() - collision.posY());
fwdDCA(dcaX, dcaY);
}
}
Expand Down
Loading