Skip to content

Commit cbbb165

Browse files
Adding configurable to reduce memory usage for muon track extension
1 parent 7c5afe4 commit cbbb165

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

Common/TableProducer/fwdtrackextension.cxx

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)