Skip to content

Commit cb3d0f6

Browse files
committed
Use GRPGeomHelper to fetch GRPs/Geom related stuff from CCDB
1 parent 224d246 commit cb3d0f6

49 files changed

Lines changed: 1031 additions & 759 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

DataFormats/Detectors/GlobalTracking/src/RecoContainer.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,6 @@ void RecoContainer::addMFTClusters(ProcessingContext& pc, bool mc)
999999
commonPool[GTrackID::MFT].registerContainer(pc.inputs().get<gsl::span<o2::itsmft::ROFRecord>>("clusMFTROF"), CLUSREFS);
10001000
commonPool[GTrackID::MFT].registerContainer(pc.inputs().get<gsl::span<o2::itsmft::CompClusterExt>>("clusMFT"), CLUSTERS);
10011001
commonPool[GTrackID::MFT].registerContainer(pc.inputs().get<gsl::span<unsigned char>>("clusMFTPatt"), PATTERNS);
1002-
pc.inputs().get<o2::itsmft::TopologyDictionary*>("cldictMFT"); // just to trigger the finaliseCCDB
10031002
if (mc) {
10041003
mcITSClusters = pc.inputs().get<const dataformats::MCTruthContainer<MCCompLabel>*>("clusMFTMC");
10051004
}

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "DataFormatsZDC/BCRecData.h"
2828
#include "DataFormatsEMCAL/EventHandler.h"
2929
#include "DataFormatsPHOS/EventHandler.h"
30+
#include "DetectorsBase/GRPGeomHelper.h"
3031
#include "Framework/AnalysisDataModel.h"
3132
#include "Framework/AnalysisHelpers.h"
3233
#include "Framework/DataProcessorSpec.h"
@@ -81,7 +82,7 @@ typedef boost::unordered_map<Triplet_t, int, TripletHash, TripletEqualTo> Triple
8182
class AODProducerWorkflowDPL : public Task
8283
{
8384
public:
84-
AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr<DataRequest> dataRequest, bool enableSV, std::string resFile, bool useMC = true) : mInputSources(src), mDataRequest(dataRequest), mEnableSV(enableSV), mResFile{resFile}, mUseMC(useMC) {}
85+
AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr<DataRequest> dataRequest, std::shared_ptr<o2::base::GRPGeomRequest> gr, bool enableSV, std::string resFile, bool useMC = true) : mInputSources(src), mDataRequest(dataRequest), mGGCCDBRequest(gr), mEnableSV(enableSV), mResFile{resFile}, mUseMC(useMC) {}
8586
~AODProducerWorkflowDPL() override = default;
8687
void init(InitContext& ic) final;
8788
void run(ProcessingContext& pc) final;
@@ -162,6 +163,7 @@ class AODProducerWorkflowDPL : public Task
162163
TMap mMetaData;
163164

164165
std::shared_ptr<DataRequest> mDataRequest;
166+
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
165167

166168
static constexpr int TOFTimePrecPS = 16; // required max error in ps for TOF tracks
167169
// truncation is enabled by default

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "DataFormatsTPC/TrackTPC.h"
2626
#include "DataFormatsZDC/ZDCEnergy.h"
2727
#include "DataFormatsZDC/ZDCTDCData.h"
28+
#include "DataFormatsParameters/GRPECSObject.h"
2829
#include "CommonUtils/NameConf.h"
2930
#include "MathUtils/Utils.h"
3031
#include "DetectorsBase/GeometryManager.h"
@@ -1083,6 +1084,7 @@ void AODProducerWorkflowDPL::fillCaloTable(TEventHandler* caloEventHandler, cons
10831084
void AODProducerWorkflowDPL::init(InitContext& ic)
10841085
{
10851086
mTimer.Stop();
1087+
o2::base::GRPGeomHelper::instance().setRequest(mGGCCDBRequest);
10861088
mLPMProdTag = ic.options().get<string>("lpmp-prod-tag");
10871089
mAnchorPass = ic.options().get<string>("anchor-pass");
10881090
mAnchorProd = ic.options().get<string>("anchor-prod");
@@ -1139,9 +1141,6 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
11391141
mT0Amplitude = 0xFFFFFFFF;
11401142
}
11411143

1142-
// Needed by MCH track extrapolation
1143-
o2::base::GeometryManager::loadGeometry();
1144-
11451144
// initialize zdc helper maps
11461145
for (auto& ChannelName : o2::zdc::ChannelNames) {
11471146
mZDCEnergyMap[(string)ChannelName] = 0;
@@ -1274,21 +1273,12 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
12741273
auto caloCellsTRGTableCursor = caloCellsTRGTableBuilder.cursor<o2::aod::CaloTriggers>();
12751274
auto originCursor = originTableBuilder.cursor<o2::aod::Origins>();
12761275

1277-
std::unique_ptr<o2::steer::MCKinematicsReader> mcReader = std::make_unique<o2::steer::MCKinematicsReader>("collisioncontext.root");
1278-
if (!o2::tof::Utils::hasFillScheme()) {
1279-
LOG(debug) << "FOUND " << mcReader->getDigitizationContext()->getEventRecords().size()
1280-
<< " records" << mcReader->getDigitizationContext()->getEventParts().size() << " parts";
1281-
o2::BunchFilling bcf = mcReader->getDigitizationContext()->getBunchFilling();
1282-
std::bitset<3564> bs = bcf.getBCPattern();
1283-
for (int i = 0; i < bs.size(); i++) {
1284-
if (bs.test(i)) {
1285-
o2::tof::Utils::addInteractionBC(i);
1286-
}
1287-
}
1288-
}
1289-
12901276
const auto* dh = o2::header::get<o2::header::DataHeader*>(pc.inputs().getFirstValid(true).header);
12911277

1278+
std::unique_ptr<o2::steer::MCKinematicsReader> mcReader;
1279+
if (mUseMC) {
1280+
mcReader = std::make_unique<o2::steer::MCKinematicsReader>("collisioncontext.root");
1281+
}
12921282
std::map<uint64_t, int> bcsMap;
12931283
collectBCs(recoData, mUseMC ? mcReader->getDigitizationContext()->getEventRecords() : std::vector<o2::InteractionTimeRecord>{}, bcsMap);
12941284
if (!primVer2TRefs.empty()) { // if the vertexing was done, the last slot refers to orphan tracks
@@ -1874,18 +1864,27 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac
18741864

18751865
void AODProducerWorkflowDPL::updateTimeDependentParams(ProcessingContext& pc)
18761866
{
1867+
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
18771868
static bool initOnceDone = false;
18781869
if (!initOnceDone) { // this params need to be queried only once
18791870
initOnceDone = true;
18801871
// Note: DPLAlpideParam for ITS and MFT will be loaded by the RecoContainer
18811872

18821873
// apply settings
1883-
std::unique_ptr<o2::parameters::GRPObject> grp{o2::parameters::GRPObject::loadFrom()}; // normally will come from CCDB
1874+
auto grpECS = o2::base::GRPGeomHelper::instance().getGRPECS();
1875+
o2::BunchFilling bcf = o2::base::GRPGeomHelper::instance().getGRPLHCIF()->getBunchFilling();
1876+
std::bitset<3564> bs = bcf.getBCPattern();
1877+
for (int i = 0; i < bs.size(); i++) {
1878+
if (bs.test(i)) {
1879+
o2::tof::Utils::addInteractionBC(i);
1880+
}
1881+
}
1882+
18841883
const auto& alpParamsITS = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance();
1885-
mITSROFrameHalfLengthNS = 0.5 * (grp->isDetContinuousReadOut(o2::detectors::DetID::ITS) ? alpParamsITS.roFrameLengthInBC * o2::constants::lhc::LHCBunchSpacingNS : alpParamsITS.roFrameLengthTrig);
1884+
mITSROFrameHalfLengthNS = 0.5 * (grpECS->isDetContinuousReadOut(o2::detectors::DetID::ITS) ? alpParamsITS.roFrameLengthInBC * o2::constants::lhc::LHCBunchSpacingNS : alpParamsITS.roFrameLengthTrig);
18861885

18871886
const auto& alpParamsMFT = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::MFT>::Instance();
1888-
mMFTROFrameHalfLengthNS = 0.5 * (grp->isDetContinuousReadOut(o2::detectors::DetID::MFT) ? alpParamsMFT.roFrameLengthInBC * o2::constants::lhc::LHCBunchSpacingNS : alpParamsMFT.roFrameLengthTrig);
1887+
mMFTROFrameHalfLengthNS = 0.5 * (grpECS->isDetContinuousReadOut(o2::detectors::DetID::MFT) ? alpParamsMFT.roFrameLengthInBC * o2::constants::lhc::LHCBunchSpacingNS : alpParamsMFT.roFrameLengthTrig);
18891888

18901889
// RS FIXME: this is not yet fetched from the CCDB
18911890
auto& elParam = o2::tpc::ParameterElectronics::Instance();
@@ -1901,6 +1900,9 @@ void AODProducerWorkflowDPL::updateTimeDependentParams(ProcessingContext& pc)
19011900
void AODProducerWorkflowDPL::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
19021901
{
19031902
// Note: strictly speaking, for Configurable params we don't need finaliseCCDB check, the singletons are updated at the CCDB fetcher level
1903+
if (o2::base::GRPGeomHelper::instance().finaliseCCDB(matcher, obj)) {
1904+
return;
1905+
}
19041906
if (matcher == ConcreteDataMatcher("ITS", "ALPIDEPARAM", 0)) {
19051907
LOG(info) << "ITS Alpide param updated";
19061908
const auto& par = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance();
@@ -2043,6 +2045,14 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
20432045
if (src[GID::EMC]) {
20442046
dataRequest->requestEMCALCells(useMC);
20452047
}
2048+
auto ggRequest = std::make_shared<o2::base::GRPGeomRequest>(true, // orbitResetTime
2049+
true, // GRPECS=true
2050+
true, // GRPLHCIF
2051+
true, // GRPMagField
2052+
true, // askMatLUT
2053+
o2::base::GRPGeomRequest::Aligned, // geometry
2054+
dataRequest->inputs,
2055+
true); // query only once all objects except mag.field
20462056

20472057
outputs.emplace_back(OutputLabel{"O2bc"}, "AOD", "BC", 0, Lifetime::Timeframe);
20482058
outputs.emplace_back(OutputLabel{"O2cascade_001"}, "AOD", "CASCADE_001", 0, Lifetime::Timeframe);
@@ -2076,7 +2086,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
20762086
"aod-producer-workflow",
20772087
dataRequest->inputs,
20782088
outputs,
2079-
AlgorithmSpec{adaptFromTask<AODProducerWorkflowDPL>(src, dataRequest, enableSV, resFile, useMC)},
2089+
AlgorithmSpec{adaptFromTask<AODProducerWorkflowDPL>(src, dataRequest, ggRequest, enableSV, resFile, useMC)},
20802090
Options{
20812091
ConfigParamSpec{"run-number", VariantType::Int64, -1L, {"The run-number. If left default we try to get it from DPL header."}},
20822092
ConfigParamSpec{"aod-timeframe-id", VariantType::Int64, -1L, {"Set timeframe number"}},

Detectors/Base/include/DetectorsBase/GRPGeomHelper.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
#include <vector>
2020
#include <memory>
2121
#include "DetectorsCommonDataFormats/DetID.h"
22+
#include "DataFormatsParameters/GRPLHCIFData.h"
23+
#include "DataFormatsParameters/GRPECSObject.h"
24+
#include "DataFormatsParameters/GRPMagField.h"
2225

2326
namespace o2::framework
2427
{
@@ -69,7 +72,9 @@ class MatLayerCylSet;
6972
...
7073
}
7174
void finaliseCCDB(ConcreteDataMatcher& matcher, void* obj) {
72-
GRPGeomHelper::instance()->finaliseCCDB(matcher, obj);
75+
if (GRPGeomHelper::instance()->finaliseCCDB(matcher, obj)) {
76+
return;
77+
}
7378
...
7479
}
7580
void run(ProcessingContext& pc) {
@@ -95,9 +100,10 @@ struct GRPGeomRequest {
95100
bool askGeomAlign = false; // load aligned geometry
96101
bool askGeomIdeal = false; // load ideal geometry
97102
bool askAlignments = false; // load detector alignments but don't apply them
103+
bool askOnceAllButField = false; // for all entries but field query only once
98104

99105
GRPGeomRequest() = delete;
100-
GRPGeomRequest(bool orbitResetTime, bool GRPECS, bool GRPLHCIF, bool GRPMagField, bool askMatLUT, GeomRequest geom, std::vector<o2::framework::InputSpec>& inputs);
106+
GRPGeomRequest(bool orbitResetTime, bool GRPECS, bool GRPLHCIF, bool GRPMagField, bool askMatLUT, GeomRequest geom, std::vector<o2::framework::InputSpec>& inputs, bool askOnce = false);
101107
void addInput(const o2::framework::InputSpec&& isp, std::vector<o2::framework::InputSpec>& inputs);
102108
};
103109

@@ -113,7 +119,7 @@ class GRPGeomHelper
113119
return inst;
114120
}
115121
void setRequest(std::shared_ptr<GRPGeomRequest> req);
116-
void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj);
122+
bool finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj);
117123
void checkUpdates(o2::framework::ProcessingContext& pc) const;
118124

119125
auto getAlignment(o2::detectors::DetID det) const { return mAlignments[det]; }

Detectors/Base/src/GRPGeomHelper.cxx

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@
2929
#include "DataFormatsParameters/GRPLHCIFData.h"
3030
#include "DataFormatsParameters/GRPECSObject.h"
3131
#include "DataFormatsParameters/GRPMagField.h"
32-
#include "DataFormatsParameters/GRPMagField.h"
3332

3433
using DetID = o2::detectors::DetID;
3534
using namespace o2::base;
3635
using namespace o2::framework;
3736
namespace o2d = o2::dataformats;
3837

39-
GRPGeomRequest::GRPGeomRequest(bool orbitResetTime, bool GRPECS, bool GRPLHCIF, bool GRPMagField, bool askMatLUT, GeomRequest geom, std::vector<o2::framework::InputSpec>& inputs)
40-
: askGRPECS(GRPECS), askGRPLHCIF(GRPLHCIF), askGRPMagField(GRPMagField), askMatLUT(askMatLUT), askTime(orbitResetTime)
38+
GRPGeomRequest::GRPGeomRequest(bool orbitResetTime, bool GRPECS, bool GRPLHCIF, bool GRPMagField, bool askMatLUT, GeomRequest geom, std::vector<o2::framework::InputSpec>& inputs, bool askOnce)
39+
: askGRPECS(GRPECS), askGRPLHCIF(GRPLHCIF), askGRPMagField(GRPMagField), askMatLUT(askMatLUT), askTime(orbitResetTime), askOnceAllButField(askOnce)
4140
{
4241
if (geom == Aligned) {
4342
askGeomAlign = true;
@@ -87,7 +86,7 @@ void GRPGeomHelper::setRequest(std::shared_ptr<GRPGeomRequest> req)
8786
mRequest = req;
8887
}
8988

90-
void GRPGeomHelper::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
89+
bool GRPGeomHelper::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
9190
{
9291
if (mRequest->askGRPMagField && matcher == ConcreteDataMatcher("GLO", "GRPMAGFIELD", 0)) {
9392
bool needInit = mGRPMagField == nullptr;
@@ -102,36 +101,36 @@ void GRPGeomHelper::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
102101
}
103102
o2::base::Propagator::Instance(false)->updateField();
104103
}
105-
return;
104+
return true;
106105
}
107106
if (mRequest->askGRPECS && matcher == ConcreteDataMatcher("GLO", "GRPECS", 0)) {
108107
mGRPECS = (o2::parameters::GRPECSObject*)obj;
109108
LOG(info) << "GRP ECS object updated";
110-
return;
109+
return true;
111110
}
112111
if (mRequest->askGRPLHCIF && matcher == ConcreteDataMatcher("GLO", "GRPLHCIF", 0)) {
113112
mGRPLHCIF = (o2::parameters::GRPLHCIFData*)obj;
114113
LOG(info) << "GRP LHCIF object updated";
115-
return;
114+
return true;
116115
}
117116
if (mRequest->askTime && matcher == ConcreteDataMatcher("CTP", "ORBITRESET", 0)) {
118117
mOrbitResetTimeMS = (*(std::vector<Long64_t>*)obj)[0] / 1000;
119118
LOG(info) << "orbit reset time updated to " << mOrbitResetTimeMS;
120-
return;
119+
return true;
121120
}
122121
if (mRequest->askMatLUT && matcher == ConcreteDataMatcher("GLO", "MATLUT", 0)) {
123122
LOG(info) << "material LUT updated";
124123
mMatLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile((o2::base::MatLayerCylSet*)obj);
125124
o2::base::Propagator::Instance(false)->setMatLUT(mMatLUT);
126-
return;
125+
return true;
127126
}
128127
if (mRequest->askGeomAlign && matcher == ConcreteDataMatcher("GLO", "GEOMALIGN", 0)) {
129128
LOG(info) << "aligned geometry updated";
130-
return;
129+
return true;
131130
}
132131
if (mRequest->askGeomIdeal && matcher == ConcreteDataMatcher("GLO", "GEOMIDEAL", 0)) {
133132
LOG(info) << "ideal geometry updated";
134-
return;
133+
return true;
135134
}
136135
constexpr o2::header::DataDescription algDesc{"ALIGNMENT"};
137136
if (mRequest->askAlignments && matcher.description == algDesc) {
@@ -142,39 +141,44 @@ void GRPGeomHelper::finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
142141
break;
143142
}
144143
}
145-
return;
144+
return true;
146145
}
146+
return false;
147147
}
148148

149149
void GRPGeomHelper::checkUpdates(ProcessingContext& pc) const
150150
{
151151
// request input just to trigger finaliseCCDB if there was an update
152+
static bool initOnceDone = false;
152153
if (mRequest->askGRPMagField) {
153154
pc.inputs().get<o2::parameters::GRPMagField*>("grpfield");
154155
}
155-
if (mRequest->askGRPLHCIF) {
156+
if (mRequest->askGRPLHCIF && !initOnceDone) {
156157
pc.inputs().get<o2::parameters::GRPLHCIFData*>("grplhcif");
157158
}
158-
if (mRequest->askGRPECS) {
159+
if (mRequest->askGRPECS && !initOnceDone) {
159160
pc.inputs().get<o2::parameters::GRPECSObject*>("grpecs");
160161
}
161-
if (mRequest->askTime) {
162+
if (mRequest->askTime && !initOnceDone) {
162163
pc.inputs().get<std::vector<Long64_t>*>("orbitReset");
163164
}
164-
if (mRequest->askMatLUT) {
165+
if (mRequest->askMatLUT && !initOnceDone) {
165166
pc.inputs().get<o2::base::MatLayerCylSet*>("matLUT");
166167
}
167-
if (mRequest->askGeomAlign) {
168+
if (mRequest->askGeomAlign && !initOnceDone) {
168169
pc.inputs().get<TGeoManager*>("geomAlp");
169170
} else if (mRequest->askGeomIdeal) {
170171
pc.inputs().get<TGeoManager*>("geomIdeal");
171172
}
172-
if (mRequest->askAlignments) {
173+
if (mRequest->askAlignments && !initOnceDone) {
173174
for (auto id = DetID::First; id <= DetID::Last; id++) {
174175
std::string binding = fmt::format("align{}", DetID::getName(id));
175176
pc.inputs().get<std::vector<o2::detectors::AlignParam>*>(binding);
176177
}
177178
}
179+
if (!initOnceDone) {
180+
initOnceDone = mRequest->askOnceAllButField;
181+
}
178182
}
179183

180184
int GRPGeomHelper::getNHBFPerTF()

Detectors/Calibration/src/TPCVDriftTglCalibration.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void TPCVDriftTglCalibration::finalizeSlot(Slot& slot)
7272
}
7373
double det = sS * sXX - sX * sX;
7474
if (!det || npval < 2) {
75-
LOGP(alarm, "VDrift fit failed for slot {} ({}<=TF<={}) with {} entries: det={} npoints={}", slot.getTFStart(), slot.getTFEnd(), cont->entries, det, npval);
75+
LOGP(alarm, "VDrift fit failed for slot {}<=TF<={} with {} entries: det={} npoints={}", slot.getTFStart(), slot.getTFEnd(), cont->entries, det, npval);
7676
} else {
7777
det = 1. / det;
7878
double offs = (sXX * sY - sX * sXY) * det, slope = (sS * sXY - sX * sY) * det;

Detectors/EMCAL/workflow/include/EMCALWorkflow/AnalysisClusterSpec.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@
2020
#include "EMCALReconstruction/Clusterizer.h"
2121
#include "Framework/DataProcessorSpec.h"
2222
#include "Framework/Task.h"
23+
#include "DetectorsBase/GRPGeomHelper.h"
2324

2425
namespace o2
2526
{
26-
27+
namespace framework
28+
{
29+
class ConcreteDataMatcher;
30+
}
2731
namespace emcal
2832
{
2933

@@ -43,15 +47,15 @@ class AnalysisClusterSpec : public framework::Task
4347
{
4448
public:
4549
/// \brief Constructor
46-
AnalysisClusterSpec() : framework::Task(){};
50+
AnalysisClusterSpec(std::shared_ptr<o2::base::GRPGeomRequest> gr) : mGGCCDBRequest(gr){};
4751

4852
/// \brief Destructor
4953
~AnalysisClusterSpec() override = default;
5054

5155
/// \brief Initializing the AnalysisClusterSpec
5256
/// \param ctx Init context
5357
void init(framework::InitContext& ctx) final;
54-
58+
void finaliseCCDB(framework::ConcreteDataMatcher& matcher, void* obj) final;
5559
/// \brief Run conversion of digits to cells
5660
/// \param ctx Processing context
5761
///
@@ -62,10 +66,12 @@ class AnalysisClusterSpec : public framework::Task
6266
void run(framework::ProcessingContext& ctx) final;
6367

6468
private:
69+
void updateTimeDependentParams(framework::ProcessingContext& pc);
6570
o2::emcal::Clusterizer<InputType> mClusterizer; ///< Clusterizer object
6671
o2::emcal::Geometry* mGeometry = nullptr; ///< Pointer to geometry object
6772
o2::emcal::EventHandler<InputType>* mEventHandler = nullptr; ///< Pointer to the event builder
6873
o2::emcal::ClusterFactory<InputType>* mClusterFactory = nullptr; ///< Pointer to the cluster builder
74+
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
6975
std::vector<o2::emcal::AnalysisCluster>* mOutputAnaClusters = nullptr; ///< Container with output clusters (pointer)
7076
};
7177

0 commit comments

Comments
 (0)