@@ -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