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 sourced from aod::GloCCDBObjects declarative CCDB table.
1414// / \author ALICE
1515
1616// ===============================================================
2626#include " PWGLF/Utils/strangenessBuilderModule.h"
2727
2828#include " Common/DataModel/EventSelection.h"
29+ #include " Common/DataModel/GloCCDBObjects.h"
2930#include " Common/DataModel/PIDResponseTPC.h"
3031#include " Common/Tools/StandardCCDBLoader.h"
3132#include " Common/Tools/TrackPropagationModule.h"
3233#include " Common/Tools/TrackTuner.h"
3334
3435#include < CCDB/BasicCCDBManager.h>
36+ #include < DetectorsBase/MatLayerCylSet.h>
37+ #include < DetectorsBase/Propagator.h>
38+ #include < Framework/ASoA.h>
3539#include < Framework/AnalysisDataModel.h>
3640#include < Framework/AnalysisHelpers.h>
3741#include < Framework/AnalysisTask.h>
4650
4751using namespace o2 ;
4852using namespace o2 ::framework;
49- // using namespace o2::framework::expressions;
5053
5154// use parameters + cov mat non-propagated, aux info + (extension propagated)
5255using FullTracksExt = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov>;
@@ -62,15 +65,22 @@ using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
6265// For dE/dx association in pre-selection
6366using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
6467
65- struct propagationService {
66- // CCDB boilerplate declarations
68+ struct propagationServiceV2 {
69+ // Service<BasicCCDBManager> kept for MatLUT (rectifyPtrFromFile) and
70+ // strangenessBuilderModule (V-drift via ccdb->instance()).
71+ // GRPMagField and MeanVertex are sourced from CCDB columns instead.
6772 o2::framework::Configurable<std::string> ccdburl{" ccdburl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
6873 Service<o2::ccdb::BasicCCDBManager> ccdb;
6974
70- // propagation stuff
75+ // propagation stuff — ccdbLoader used only for lut + mMeanVtx (set from column) + runNumber
7176 o2::common::StandardCCDBLoaderConfigurables standardCCDBLoaderConfigurables;
7277 o2::common::StandardCCDBLoader ccdbLoader;
7378
79+ // Declarative CCDB path overrides (replace grpmagPath / mVtxPath in StandardCCDBLoaderConfigurables)
80+ // Option names: "ccdb:fGRPMagField" and "ccdb:fMeanVertex" respectively.
81+ ConfigurableCCDBPath<o2::aod::ccdbGlo::GRPMagField> grpmagPath;
82+ ConfigurableCCDBPath<o2::aod::ccdbGlo::MeanVertex> mVtxPath ;
83+
7484 // boilerplate: strangeness builder stuff
7585 o2::pwglf::strangenessbuilder::products products;
7686 o2::pwglf::strangenessbuilder::coreConfigurables baseOpts;
@@ -87,12 +97,14 @@ struct propagationService {
8797 o2::common::TrackPropagationConfigurables trackPropagationConfigurables;
8898 o2::common::TrackPropagationModule trackPropagation;
8999
100+ using BCsWithCCDB = soa::Join<aod::BCsWithTimestamps, aod::GloCCDBObjects>;
101+
90102 // registry
91103 HistogramRegistry histos{" histos" };
92104
93105 void init (o2::framework::InitContext& initContext)
94106 {
95- // CCDB boilerplate init
107+ // Only needed for MatLUT fetch and strangenessBuilderModule V-drift
96108 ccdb->setCaching (true );
97109 ccdb->setLocalObjectValidityChecking ();
98110 ccdb->setURL (ccdburl.value );
@@ -102,38 +114,72 @@ struct propagationService {
102114 strangenessBuilderModule.init (baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
103115 }
104116
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)
117+ // Load MatLUT once (needs rectifyPtrFromFile, kept manual), set B-field per run from
118+ // GRPMagField CCDB column, and refresh mMeanVtx pointer every call (pointer into current
119+ // BC table, valid only for the duration of this process() invocation).
120+ template <typename TBC>
121+ void initCCDB (TBC const & bc0)
122+ {
123+ if (!ccdbLoader.lut ) {
124+ LOG (info) << " Loading material look-up table for run: " << bc0.runNumber ();
125+ ccdbLoader.lut = o2::base::MatLayerCylSet::rectifyPtrFromFile (
126+ ccdb->template getForRun <o2::base::MatLayerCylSet>(standardCCDBLoaderConfigurables.lutPath .value , bc0.runNumber ()));
127+ o2::base::Propagator::Instance ()->setMatLUT (ccdbLoader.lut );
128+ }
129+ // Always refresh: pointer into current BC table, invalidated after process() returns
130+ ccdbLoader.mMeanVtx = &bc0.meanVertex ();
131+ if (ccdbLoader.runNumber != bc0.runNumber ()) {
132+ const auto & grpmag = bc0.grpMagField (); // from declarative CCDB column
133+ LOG (info) << " Setting B-field to current " << grpmag.getL3Current () << " A for run " << bc0.runNumber () << " from GRPMagField CCDB column" ;
134+ o2::base::Propagator::initFieldFromGRP (&grpmag);
135+ ccdbLoader.runNumber = bc0.runNumber ();
136+ }
137+ }
138+
139+ 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)
106140 {
107- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
141+ if (bcs.size () == 0 ) {
142+ return ;
143+ }
144+ initCCDB (bcs.begin ());
108145 trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
109146 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
110147 }
111148
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)
149+ 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, BCsWithCCDB const & bcs, aod::McParticles const & mcParticles)
113150 {
114- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
151+ if (bcs.size () == 0 ) {
152+ return ;
153+ }
154+ initCCDB (bcs.begin ());
115155 trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
116156 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
117157 }
118158
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)
159+ 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, BCsWithCCDB const & bcs)
120160 {
121- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
161+ if (bcs.size () == 0 ) {
162+ return ;
163+ }
164+ initCCDB (bcs.begin ());
122165 trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
123166 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
124167 }
125168
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)
169+ 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, BCsWithCCDB const & bcs, aod::McParticles const & mcParticles)
127170 {
128- ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
171+ if (bcs.size () == 0 ) {
172+ return ;
173+ }
174+ initCCDB (bcs.begin ());
129175 trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
130176 strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
131177 }
132178
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 );
179+ PROCESS_SWITCH (propagationServiceV2 , processRealData, " process real data" , true );
180+ PROCESS_SWITCH (propagationServiceV2 , processMonteCarlo, " process monte carlo" , false );
181+ PROCESS_SWITCH (propagationServiceV2 , processRealDataWithPID, " process real data" , false );
182+ PROCESS_SWITCH (propagationServiceV2 , processMonteCarloWithPID, " process monte carlo" , false );
137183};
138184
139185// ****************************************************************************************
@@ -143,6 +189,6 @@ struct propagationService {
143189// ****************************************************************************************
144190WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
145191{
146- WorkflowSpec workflow{adaptAnalysisTask<propagationService >(cfgc)};
192+ WorkflowSpec workflow{adaptAnalysisTask<propagationServiceV2 >(cfgc)};
147193 return workflow;
148194}
0 commit comments