99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111
12- // / \file propagationService .cxx
13- // / \brief
12+ // / \file propagationServiceV2 .cxx
13+ // / \brief V2: GRPMagField and MeanVertexObject migrated to declarative CCDB columns.
1414// / \author ALICE
1515
1616// ===============================================================
3232#include " Common/Tools/TrackTuner.h"
3333
3434#include < CCDB/BasicCCDBManager.h>
35+ #include < DataFormatsCalibration/MeanVertexObject.h>
36+ #include < DataFormatsParameters/GRPMagField.h>
37+ #include < DetectorsBase/MatLayerCylSet.h>
38+ #include < DetectorsBase/Propagator.h>
39+ #include < Framework/ASoA.h>
3540#include < Framework/AnalysisDataModel.h>
3641#include < Framework/AnalysisHelpers.h>
3742#include < Framework/AnalysisTask.h>
4449
4550#include < string>
4651
52+ // Declarative CCDB columns for GRPMagField and MeanVertexObject.
53+ // MatLayerCylSet is intentionally excluded: it requires
54+ // MatLayerCylSet::rectifyPtrFromFile() after deserialisation, a type-specific
55+ // fixup the CCDB column mechanism does not perform. It continues to be fetched
56+ // via Service<BasicCCDBManager> below.
57+ // strangenessBuilderModule uses ccdb->instance() for V-drift management
58+ // (excluded from migration per recipe).
59+ namespace o2 ::aod
60+ {
61+ namespace propsvcv2
62+ {
63+ DECLARE_SOA_CCDB_COLUMN (GRPMagField, grpMagField, o2::parameters::GRPMagField, " GLO/Config/GRPMagField" ); // !
64+ DECLARE_SOA_CCDB_COLUMN (MeanVertex, meanVertex, o2::dataformats::MeanVertexObject, " GLO/Calib/MeanVertex" ); // !
65+ } // namespace propsvcv2
66+
67+ DECLARE_SOA_TIMESTAMPED_TABLE (PropSvcV2CCDBObjects, aod::Timestamps, o2::aod::timestamp::Timestamp, 1 , " PROPSVCV2CC" , // !
68+ propsvcv2::GRPMagField, propsvcv2::MeanVertex);
69+ } // namespace o2::aod
70+
4771using namespace o2 ;
4872using namespace o2 ::framework;
49- // using namespace o2::framework::expressions;
5073
5174// use parameters + cov mat non-propagated, aux info + (extension propagated)
5275using FullTracksExt = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov>;
@@ -62,15 +85,22 @@ using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
6285// For dE/dx association in pre-selection
6386using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
6487
65- struct propagationService {
66- // CCDB boilerplate declarations
88+ struct propagationServiceV2 {
89+ // Service<BasicCCDBManager> kept for MatLUT (rectifyPtrFromFile) and
90+ // strangenessBuilderModule (V-drift via ccdb->instance()).
91+ // GRPMagField and MeanVertex are sourced from CCDB columns instead.
6792 o2::framework::Configurable<std::string> ccdburl{" ccdburl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
6893 Service<o2::ccdb::BasicCCDBManager> ccdb;
6994
70- // propagation stuff
95+ // propagation stuff — ccdbLoader used only for lut + mMeanVtx (set from column) + runNumber
7196 o2::common::StandardCCDBLoaderConfigurables standardCCDBLoaderConfigurables;
7297 o2::common::StandardCCDBLoader ccdbLoader;
7398
99+ // Declarative CCDB path overrides (replace grpmagPath / mVtxPath in StandardCCDBLoaderConfigurables)
100+ // Option names: "ccdb:fGRPMagField" and "ccdb:fMeanVertex" respectively.
101+ ConfigurableCCDBPath<o2::aod::propsvcv2::GRPMagField> grpmagPath;
102+ ConfigurableCCDBPath<o2::aod::propsvcv2::MeanVertex> mVtxPath ;
103+
74104 // boilerplate: strangeness builder stuff
75105 o2::pwglf::strangenessbuilder::products products;
76106 o2::pwglf::strangenessbuilder::coreConfigurables baseOpts;
@@ -87,12 +117,14 @@ struct propagationService {
87117 o2::common::TrackPropagationConfigurables trackPropagationConfigurables;
88118 o2::common::TrackPropagationModule trackPropagation;
89119
120+ using MyBCs = soa::Join<aod::BCsWithTimestamps, aod::PropSvcV2CCDBObjects>;
121+
90122 // registry
91123 HistogramRegistry histos{" histos" };
92124
93125 void init (o2::framework::InitContext& initContext)
94126 {
95- // CCDB boilerplate init
127+ // Only needed for MatLUT fetch and strangenessBuilderModule V-drift
96128 ccdb->setCaching (true );
97129 ccdb->setLocalObjectValidityChecking ();
98130 ccdb->setURL (ccdburl.value );
@@ -102,38 +134,72 @@ struct propagationService {
102134 strangenessBuilderModule.init (baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
103135 }
104136
105- 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, aod::BCsWithTimestamps const & bcs)
137+ // Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field per run from
138+ // GRPMagField CCDB column, and refresh mMeanVtx pointer every call (pointer into current
139+ // BC table, valid only for the duration of this process() invocation).
140+ template <typename TBC>
141+ void initCCDB (TBC const & bc0)
142+ {
143+ if (!ccdbLoader.lut ) {
144+ LOG (info) << " Loading material look-up table for run: " << bc0.runNumber ();
145+ ccdbLoader.lut = o2::base::MatLayerCylSet::rectifyPtrFromFile (
146+ ccdb->template getForRun <o2::base::MatLayerCylSet>(standardCCDBLoaderConfigurables.lutPath .value , bc0.runNumber ()));
147+ o2::base::Propagator::Instance ()->setMatLUT (ccdbLoader.lut );
148+ }
149+ // Always refresh: pointer into current BC table, invalidated after process() returns
150+ ccdbLoader.mMeanVtx = &bc0.meanVertex ();
151+ if (ccdbLoader.runNumber != bc0.runNumber ()) {
152+ const auto & grpmag = bc0.grpMagField (); // from declarative CCDB column
153+ LOG (info) << " Setting B-field to current " << grpmag.getL3Current () << " A for run " << bc0.runNumber () << " from GRPMagField CCDB column" ;
154+ o2::base::Propagator::initFieldFromGRP (&grpmag);
155+ ccdbLoader.runNumber = bc0.runNumber ();
156+ }
157+ }
158+
159+ 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, MyBCs const & bcs)
106160 {
107- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
161+ if (bcs.size () == 0 ) {
162+ return ;
163+ }
164+ initCCDB (bcs.begin ());
108165 trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
109166 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
110167 }
111168
112- void processMonteCarlo (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIU const & tracks, aod::BCsWithTimestamps const & bcs, aod::McParticles const & mcParticles)
169+ void processMonteCarlo (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIU const & tracks, MyBCs const & bcs, aod::McParticles const & mcParticles)
113170 {
114- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
171+ if (bcs.size () == 0 ) {
172+ return ;
173+ }
174+ initCCDB (bcs.begin ());
115175 trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
116176 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
117177 }
118178
119- void processRealDataWithPID (soa::Join<aod::Collisions, aod::EvSels> const & collisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtIUWithPID const & tracks, aod::BCsWithTimestamps const & bcs)
179+ void processRealDataWithPID (soa::Join<aod::Collisions, aod::EvSels> const & collisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtIUWithPID const & tracks, MyBCs const & bcs)
120180 {
121- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
181+ if (bcs.size () == 0 ) {
182+ return ;
183+ }
184+ initCCDB (bcs.begin ());
122185 trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
123186 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
124187 }
125188
126- void processMonteCarloWithPID (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIUWithPID const & tracks, aod::BCsWithTimestamps const & bcs, aod::McParticles const & mcParticles)
189+ void processMonteCarloWithPID (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIUWithPID const & tracks, MyBCs const & bcs, aod::McParticles const & mcParticles)
127190 {
128- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
191+ if (bcs.size () == 0 ) {
192+ return ;
193+ }
194+ initCCDB (bcs.begin ());
129195 trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
130196 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
131197 }
132198
133- PROCESS_SWITCH (propagationService , processRealData, " process real data" , true );
134- PROCESS_SWITCH (propagationService , processMonteCarlo, " process monte carlo" , false );
135- PROCESS_SWITCH (propagationService , processRealDataWithPID, " process real data" , false );
136- PROCESS_SWITCH (propagationService , processMonteCarloWithPID, " process monte carlo" , false );
199+ PROCESS_SWITCH (propagationServiceV2 , processRealData, " process real data" , true );
200+ PROCESS_SWITCH (propagationServiceV2 , processMonteCarlo, " process monte carlo" , false );
201+ PROCESS_SWITCH (propagationServiceV2 , processRealDataWithPID, " process real data" , false );
202+ PROCESS_SWITCH (propagationServiceV2 , processMonteCarloWithPID, " process monte carlo" , false );
137203};
138204
139205// ****************************************************************************************
@@ -143,6 +209,6 @@ struct propagationService {
143209// ****************************************************************************************
144210WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
145211{
146- WorkflowSpec workflow{adaptAnalysisTask<propagationService >(cfgc)};
212+ WorkflowSpec workflow{adaptAnalysisTask<propagationServiceV2 >(cfgc)};
147213 return workflow;
148214}
0 commit comments