Skip to content

Commit d3c69b4

Browse files
committed
Migrate the propagation service to CCDB tables
1 parent cf6831e commit d3c69b4

1 file changed

Lines changed: 86 additions & 20 deletions

File tree

Common/TableProducer/propagationServiceV2.cxx

Lines changed: 86 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
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
//===============================================================
@@ -32,6 +32,11 @@
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>
@@ -44,9 +49,27 @@
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+
4771
using namespace o2;
4872
using namespace o2::framework;
49-
// using namespace o2::framework::expressions;
5073

5174
// use parameters + cov mat non-propagated, aux info + (extension propagated)
5275
using 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
6386
using 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
//****************************************************************************************
144210
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
145211
{
146-
WorkflowSpec workflow{adaptAnalysisTask<propagationService>(cfgc)};
212+
WorkflowSpec workflow{adaptAnalysisTask<propagationServiceV2>(cfgc)};
147213
return workflow;
148214
}

0 commit comments

Comments
 (0)