Skip to content

Commit fcb4edd

Browse files
Proper handling of GRP objects for Run3 runs
1 parent 71a6a27 commit fcb4edd

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

Common/TableProducer/trackextension.cxx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct TrackExtension {
5757
Produces<aod::TracksExtended> extendedTrackQuantities;
5858
Service<o2::ccdb::BasicCCDBManager> ccdb;
5959

60+
o2::base::MatLayerCylSet* lut;
6061
int mRunNumber;
6162
float mMagField;
6263

@@ -68,15 +69,10 @@ struct TrackExtension {
6869
ccdb->setCaching(true);
6970
ccdb->setLocalObjectValidityChecking();
7071

71-
auto lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>(ccdbpath_lut));
72+
lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>(ccdbpath_lut));
7273

7374
if (!o2::base::GeometryManager::isGeometryLoaded()) {
7475
ccdb->get<TGeoManager>(ccdbpath_geo);
75-
/* it seems this is needed at this level for the material LUT to work properly */
76-
/* but what happens if the run changes while doing the processing? */
77-
o2::parameters::GRPObject* grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(ccdbpath_grp, analysis::trackextension::run3grp_timestamp);
78-
o2::base::Propagator::initFieldFromGRP(grpo);
79-
o2::base::Propagator::Instance()->setMatLUT(lut);
8076
}
8177
mRunNumber = 0;
8278
mMagField = 0.0;
@@ -118,7 +114,7 @@ struct TrackExtension {
118114
}
119115
PROCESS_SWITCH(TrackExtension, processRun2, "Process Run2 track extension task", true);
120116

121-
void processRun3(aod::FullTracks const& tracks, aod::Collisions const&)
117+
void processRun3(aod::FullTracks const& tracks, aod::Collisions const&, aod::BCsWithTimestamps const&)
122118
{
123119
using namespace analysis::trackextension;
124120

@@ -131,10 +127,26 @@ struct TrackExtension {
131127
/* when a new run (Run3) is processed */
132128
o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
133129

130+
int lastCollId = -1;
134131
for (auto& track : tracks) {
135132
std::array<float, 2> dca{1e10f, 1e10f};
136133
if (track.has_collision()) {
137134
if (track.trackType() == o2::aod::track::TrackTypeEnum::Track) {
135+
if (lastCollId != track.collisionId()) {
136+
auto bc = track.collision_as<aod::Collisions>().bc_as<aod::BCsWithTimestamps>();
137+
if (mRunNumber != bc.runNumber()) {
138+
auto grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(ccdbpath_grp, bc.timestamp());
139+
if (grpo != nullptr) {
140+
o2::base::Propagator::initFieldFromGRP(grpo);
141+
o2::base::Propagator::Instance()->setMatLUT(lut);
142+
LOGF(info, "Setting magnetic field to %d kG for run %d from its GRP CCDB object", grpo->getNominalL3Field(), bc.runNumber());
143+
} else {
144+
LOGF(fatal, "GRP object is not available in CCDB for run=%d at timestamp=%llu", bc.runNumber(), bc.timestamp());
145+
}
146+
mRunNumber = bc.runNumber();
147+
}
148+
lastCollId = track.collisionId();
149+
}
138150
auto trackPar = getTrackPar(track);
139151
auto const& collision = track.collision();
140152
gpu::gpustd::array<float, 2> dcaInfo;

0 commit comments

Comments
 (0)