Skip to content

Commit 75b1d0b

Browse files
committed
Fix initialisation order
1 parent 458f551 commit 75b1d0b

1 file changed

Lines changed: 14 additions & 11 deletions

File tree

Common/TableProducer/propagationServiceV2.cxx

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,26 +109,29 @@ struct propagationServiceV2 {
109109
strangenessBuilderModule.init(baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
110110
}
111111

112-
// Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field per run from
113-
// GRPMagField CCDB column, and refresh mMeanVtx pointer every call (pointer into current
114-
// BC table, valid only for the duration of this process() invocation).
112+
// Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field and mean vertex
113+
// once per run from GRPMagField/MeanVertex CCDB columns.
115114
template <typename TBC>
116115
void initCCDB(TBC const& bc0)
117116
{
117+
if (ccdbLoader.runNumber != bc0.runNumber()) {
118+
LOG(info) << "Setting B-field to current " << bc0.grpMagField().getL3Current() << " A for run " << bc0.runNumber() << " from GRPMagField CCDB column";
119+
o2::base::Propagator::initFieldFromGRP(&bc0.grpMagField());
120+
ccdbLoader.mMeanVtx = &bc0.meanVertex();
121+
ccdbLoader.runNumber = bc0.runNumber();
122+
} else {
123+
// Verify the CCDB column buffer has not been replaced mid-run.
124+
// The deserialised pointer must be stable for the lifetime of a run.
125+
if (&bc0.meanVertex() != ccdbLoader.mMeanVtx) {
126+
LOG(fatal) << "MeanVertex CCDB column pointer changed within run " << bc0.runNumber() << " — unexpected buffer replacement";
127+
}
128+
}
118129
if (!ccdbLoader.lut) {
119130
LOG(info) << "Loading material look-up table for run: " << bc0.runNumber();
120131
ccdbLoader.lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(
121132
ccdb->template getForRun<o2::base::MatLayerCylSet>(standardCCDBLoaderConfigurables.lutPath.value, bc0.runNumber()));
122133
o2::base::Propagator::Instance()->setMatLUT(ccdbLoader.lut);
123134
}
124-
// Always refresh: pointer into current BC table, invalidated after process() returns
125-
ccdbLoader.mMeanVtx = &bc0.meanVertex();
126-
if (ccdbLoader.runNumber != bc0.runNumber()) {
127-
const auto& grpmag = bc0.grpMagField(); // from declarative CCDB column
128-
LOG(info) << "Setting B-field to current " << grpmag.getL3Current() << " A for run " << bc0.runNumber() << " from GRPMagField CCDB column";
129-
o2::base::Propagator::initFieldFromGRP(&grpmag);
130-
ccdbLoader.runNumber = bc0.runNumber();
131-
}
132135
}
133136

134137
void processRealData(soa::Join<aod::Collisions, aod::EvSels> const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtIU const& tracks, BCsWithCCDB const& bcs)

0 commit comments

Comments
 (0)