Skip to content

Commit 91cab90

Browse files
committed
Options to configure TPC corr.maps scaling
All workflows which need TPC correction maps got an extra option --require-ctp-lumi, if active it will request CTP LumiInfo which will be used to rescale the TPC corrections maps a la Run2. Additionally, every device using TPC corr.maps got extra options --corrmap-lumi-mean <float> and --corrmap-lumi-inst <float> which allow to override the mean lumi characterizing the map and instantaneous lumi for rescaling (normally expected from CTP LumiInfo).
1 parent bf3be00 commit 91cab90

28 files changed

+255
-87
lines changed

Detectors/Align/Workflow/src/BarrelAlignmentSpec.cxx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ void BarrelAlignmentSpec::init(InitContext& ic)
126126
mTimer.Stop();
127127
mTimer.Reset();
128128
o2::base::GRPGeomHelper::instance().setRequest(mGRPGeomRequest);
129+
129130
int dbg = ic.options().get<int>("debug-output"), inst = ic.services().get<const o2::framework::DeviceSpec>().inputTimesliceId;
130131
mController = std::make_unique<Controller>(mDetMask, mMPsrc, mCosmic, mUseMC, inst);
131132
if (dbg) {
@@ -178,6 +179,7 @@ void BarrelAlignmentSpec::init(InitContext& ic)
178179
}
179180
mIgnoreCCDBAlignment = ic.options().get<bool>("ignore-ccdb-alignment");
180181
if (!mPostProcessing) {
182+
mTPCCorrMapsLoader.init(ic);
181183
if (GTrackID::includesDet(DetID::TRD, mMPsrc)) {
182184
mTRDTransformer.reset(new o2::trd::TrackletTransformer);
183185
if (ic.options().get<bool>("apply-xor")) {
@@ -252,7 +254,7 @@ void BarrelAlignmentSpec::updateTimeDependentParams(ProcessingContext& pc)
252254
}
253255

254256
mTPCVDriftHelper.extractCCDBInputs(pc);
255-
o2::tpc::CorrectionMapsLoader::extractCCDBInputs(pc);
257+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
256258
bool updateMaps = false;
257259
if (mTPCCorrMapsLoader.isUpdated()) {
258260
mController->setTPCCorrMaps(&mTPCCorrMapsLoader);
@@ -359,6 +361,14 @@ DataProcessorSpec getBarrelAlignmentSpec(GTrackID::mask_t srcMP, GTrackID::mask_
359361
std::vector<OutputSpec> outputs;
360362
auto dataRequest = std::make_shared<DataRequest>();
361363
bool loadTPCCalib = false;
364+
Options opts{
365+
ConfigParamSpec{"apply-xor", o2::framework::VariantType::Bool, false, {"flip the 8-th bit of slope and position (for processing TRD CTFs from 2021 pilot beam)"}},
366+
ConfigParamSpec{"allow-afterburner-tracks", VariantType::Bool, false, {"allow using ITS-TPC afterburner tracks"}},
367+
ConfigParamSpec{"ignore-ccdb-alignment", VariantType::Bool, false, {"do not aplly CCDB alignment to ideal geometry"}},
368+
ConfigParamSpec{"initial-params-file", VariantType::String, "", {"initial parameters file"}},
369+
ConfigParamSpec{"config-macro", VariantType::String, "", {"configuration macro with signature (o2::align::Controller*, int) to execute from init"}},
370+
ConfigParamSpec{"ignore-initial-params-errors", VariantType::Bool, false, {"ignore initial params (if any) errors for precondition"}},
371+
ConfigParamSpec{"debug-output", VariantType::Int, 0, {"produce debugging output root files"}}};
362372
if (!postprocess) {
363373
dataRequest->requestTracks(src, useMC);
364374
dataRequest->requestClusters(src, false, skipDetClusters);
@@ -371,7 +381,7 @@ DataProcessorSpec getBarrelAlignmentSpec(GTrackID::mask_t srcMP, GTrackID::mask_
371381
}
372382
if (src[DetID::TPC] && !skipDetClusters[DetID::TPC]) {
373383
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
374-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs);
384+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, src[GTrackID::CTP]);
375385
loadTPCCalib = true;
376386
}
377387
}
@@ -390,14 +400,7 @@ DataProcessorSpec getBarrelAlignmentSpec(GTrackID::mask_t srcMP, GTrackID::mask_
390400
dataRequest->inputs,
391401
outputs,
392402
AlgorithmSpec{adaptFromTask<BarrelAlignmentSpec>(srcMP, dataRequest, ccdbRequest, dets, enableCosmic, postprocess, useMC, loadTPCCalib)},
393-
Options{
394-
ConfigParamSpec{"apply-xor", o2::framework::VariantType::Bool, false, {"flip the 8-th bit of slope and position (for processing TRD CTFs from 2021 pilot beam)"}},
395-
ConfigParamSpec{"allow-afterburner-tracks", VariantType::Bool, false, {"allow using ITS-TPC afterburner tracks"}},
396-
ConfigParamSpec{"ignore-ccdb-alignment", VariantType::Bool, false, {"do not aplly CCDB alignment to ideal geometry"}},
397-
ConfigParamSpec{"initial-params-file", VariantType::String, "", {"initial parameters file"}},
398-
ConfigParamSpec{"config-macro", VariantType::String, "", {"configuration macro with signature (o2::align::Controller*, int) to execute from init"}},
399-
ConfigParamSpec{"ignore-initial-params-errors", VariantType::Bool, false, {"ignore initial params (if any) errors for precondition"}},
400-
ConfigParamSpec{"debug-output", VariantType::Int, 0, {"produce debugging output root files"}}}};
403+
opts};
401404
}
402405

403406
} // namespace align

Detectors/Align/Workflow/src/barrel-alignment-workflow.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
5555
{"enable-tpc-tracks", VariantType::Bool, false, {"allow reading TPC tracks"}},
5656
{"enable-tpc-clusters", VariantType::Bool, false, {"allow reading TPC clusters (will trigger TPC tracks reading)"}},
5757
{"enable-cosmic", VariantType::Bool, false, {"enable cosmic tracks)"}},
58+
{"require-ctp-lumi", o2::framework::VariantType::Bool, false, {"require CTP lumi for TPC correction scaling"}},
5859
{"postprocessing", VariantType::Int, 0, {"postprocessing bits: 1 - extract alignment objects, 2 - check constraints, 4 - print mpParams/Constraints, 8 - relabel pede results"}},
5960
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}}};
6061
o2::raw::HBFUtilsInitializer::addConfigOption(options);
@@ -90,6 +91,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
9091
bool loadTPCTracks = configcontext.options().get<bool>("enable-tpc-tracks");
9192
bool enableCosmic = configcontext.options().get<bool>("enable-cosmic");
9293
bool useMC = configcontext.options().get<bool>("enable-mc");
94+
auto requireCTPLumi = configcontext.options().get<bool>("require-ctp-lumi");
9395

9496
DetID::mask_t dets = allowedDets & DetID::getMask(configcontext.options().get<std::string>("detectors"));
9597
DetID::mask_t skipDetClusters; // optionally skip automatically loaded clusters
@@ -138,6 +140,9 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
138140
}
139141
LOG(info) << "adding TOF request";
140142
}
143+
if (requireCTPLumi) {
144+
src = src | GID::getSourcesMask("CTP");
145+
}
141146
// write the configuration used for the workflow
142147
o2::conf::ConfigurableParam::writeINI("o2_barrel_alignment_configuration.ini");
143148
}

Detectors/GlobalTrackingWorkflow/src/CosmicsMatchingSpec.cxx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ void CosmicsMatchingSpec::init(InitContext& ic)
8787
o2::base::GRPGeomHelper::instance().setRequest(mGGCCDBRequest);
8888
mMatching.setDebugFlag(ic.options().get<int>("debug-tree-flags"));
8989
mMatching.setUseMC(mUseMC);
90+
mTPCCorrMapsLoader.init(ic);
9091
//
9192
}
9293

@@ -109,7 +110,7 @@ void CosmicsMatchingSpec::updateTimeDependentParams(ProcessingContext& pc)
109110
{
110111
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
111112
mTPCVDriftHelper.extractCCDBInputs(pc);
112-
o2::tpc::CorrectionMapsLoader::extractCCDBInputs(pc);
113+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
113114
static bool initOnceDone = false;
114115
if (!initOnceDone) { // this params need to be queried only once
115116
initOnceDone = true;
@@ -174,6 +175,10 @@ void CosmicsMatchingSpec::endOfStream(EndOfStreamContext& ec)
174175
DataProcessorSpec getCosmicsMatchingSpec(GTrackID::mask_t src, bool useMC)
175176
{
176177
std::vector<OutputSpec> outputs;
178+
Options opts{
179+
{"material-lut-path", VariantType::String, "", {"Path of the material LUT file"}},
180+
{"debug-tree-flags", VariantType::Int, 0, {"DebugFlagTypes bit-pattern for debug tree"}}};
181+
177182
auto dataRequest = std::make_shared<DataRequest>();
178183

179184
dataRequest->requestTracks(src, useMC);
@@ -193,16 +198,14 @@ DataProcessorSpec getCosmicsMatchingSpec(GTrackID::mask_t src, bool useMC)
193198
dataRequest->inputs,
194199
true);
195200
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
196-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs);
201+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, src[GTrackID::CTP]);
197202

198203
return DataProcessorSpec{
199204
"cosmics-matcher",
200205
dataRequest->inputs,
201206
outputs,
202207
AlgorithmSpec{adaptFromTask<CosmicsMatchingSpec>(dataRequest, ggRequest, useMC)},
203-
Options{
204-
{"material-lut-path", VariantType::String, "", {"Path of the material LUT file"}},
205-
{"debug-tree-flags", VariantType::Int, 0, {"DebugFlagTypes bit-pattern for debug tree"}}}};
208+
opts};
206209
}
207210

208211
} // namespace globaltracking

Detectors/GlobalTrackingWorkflow/src/SecondaryVertexingSpec.cxx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ void SecondaryVertexingSpec::init(InitContext& ic)
8181
mVertexer.setEnableCascades(mEnableCascades);
8282
mVertexer.setEnable3BodyDecays(mEnable3BodyVertices);
8383
mVertexer.setNThreads(ic.options().get<int>("threads"));
84+
mTPCCorrMapsLoader.init(ic);
8485
}
8586

8687
void SecondaryVertexingSpec::run(ProcessingContext& pc)
@@ -130,7 +131,7 @@ void SecondaryVertexingSpec::updateTimeDependentParams(ProcessingContext& pc)
130131
{
131132
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
132133
mTPCVDriftHelper.extractCCDBInputs(pc);
133-
o2::tpc::CorrectionMapsLoader::extractCCDBInputs(pc);
134+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
134135
static bool initOnceDone = false;
135136
if (!initOnceDone) { // this params need to be queried only once
136137
initOnceDone = true;
@@ -163,6 +164,9 @@ void SecondaryVertexingSpec::updateTimeDependentParams(ProcessingContext& pc)
163164
DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCasc, bool enable3body)
164165
{
165166
std::vector<OutputSpec> outputs;
167+
Options opts{
168+
{"material-lut-path", VariantType::String, "", {"Path of the material LUT file"}},
169+
{"threads", VariantType::Int, 1, {"Number of threads"}}};
166170
auto dataRequest = std::make_shared<DataRequest>();
167171

168172
bool useMC = false;
@@ -177,7 +181,7 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
177181
dataRequest->inputs,
178182
true);
179183
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
180-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs);
184+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, src[GTrackID::CTP]);
181185

182186
outputs.emplace_back("GLO", "V0S", 0, Lifetime::Timeframe); // found V0s
183187
outputs.emplace_back("GLO", "PVTX_V0REFS", 0, Lifetime::Timeframe); // prim.vertex -> V0s refs
@@ -191,8 +195,7 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
191195
dataRequest->inputs,
192196
outputs,
193197
AlgorithmSpec{adaptFromTask<SecondaryVertexingSpec>(dataRequest, ggRequest, enableCasc, enable3body)},
194-
Options{{"material-lut-path", VariantType::String, "", {"Path of the material LUT file"}},
195-
{"threads", VariantType::Int, 1, {"Number of threads"}}}};
198+
opts};
196199
}
197200

198201
} // namespace vertexing

Detectors/GlobalTrackingWorkflow/src/TOFMatcherSpec.cxx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,16 @@ void TOFMatcherSpec::init(InitContext& ic)
8989
if (mStrict) {
9090
mMatcher.setHighPurity();
9191
}
92+
mTPCCorrMapsLoader.init(ic);
9293
mMatcher.storeMatchable(mPushMatchable);
93-
9494
mMatcher.setExtraTimeToleranceTRD(mExtraTolTRD);
9595
}
9696

9797
void TOFMatcherSpec::updateTimeDependentParams(ProcessingContext& pc)
9898
{
9999
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
100100
mTPCVDriftHelper.extractCCDBInputs(pc);
101-
o2::tpc::CorrectionMapsLoader::extractCCDBInputs(pc);
101+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
102102
static bool initOnceDone = false;
103103
if (!initOnceDone) { // this params need to be queried only once
104104
const auto bcs = o2::base::GRPGeomHelper::instance().getGRPLHCIF()->getBunchFilling().getFilledBCs();
@@ -240,6 +240,7 @@ void TOFMatcherSpec::endOfStream(EndOfStreamContext& ec)
240240
DataProcessorSpec getTOFMatcherSpec(GID::mask_t src, bool useMC, bool useFIT, bool tpcRefit, bool strict, float extratolerancetrd, bool pushMatchable)
241241
{
242242
uint32_t ss = o2::globaltracking::getSubSpec(strict ? o2::globaltracking::MatchingType::Strict : o2::globaltracking::MatchingType::Standard);
243+
Options opts;
243244
auto dataRequest = std::make_shared<DataRequest>();
244245
if (strict) {
245246
dataRequest->setMatchingInputStrict();
@@ -259,7 +260,7 @@ DataProcessorSpec getTOFMatcherSpec(GID::mask_t src, bool useMC, bool useFIT, bo
259260
dataRequest->inputs,
260261
true);
261262
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
262-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs);
263+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, src[GID::CTP]);
263264
std::vector<OutputSpec> outputs;
264265
if (GID::includesSource(GID::TPC, src)) {
265266
outputs.emplace_back(o2::header::gDataOriginTOF, "MTC_TPC", ss, Lifetime::Timeframe);
@@ -314,7 +315,7 @@ DataProcessorSpec getTOFMatcherSpec(GID::mask_t src, bool useMC, bool useFIT, bo
314315
dataRequest->inputs,
315316
outputs,
316317
AlgorithmSpec{adaptFromTask<TOFMatcherSpec>(dataRequest, ggRequest, useMC, useFIT, tpcRefit, strict, pushMatchable)},
317-
Options{}};
318+
opts};
318319
}
319320

320321
} // namespace globaltracking

Detectors/GlobalTrackingWorkflow/src/TPCITSMatchingSpec.cxx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ void TPCITSMatchingDPL::init(InitContext& ic)
9090
mMatching.setNThreads(std::max(1, ic.options().get<int>("nthreads")));
9191
mMatching.setUseBCFilling(!ic.options().get<bool>("ignore-bc-check"));
9292
mMatching.setDebugFlag(ic.options().get<int>("debug-tree-flags"));
93+
mTPCCorrMapsLoader.init(ic);
9394
}
9495

9596
void TPCITSMatchingDPL::run(ProcessingContext& pc)
@@ -150,7 +151,7 @@ void TPCITSMatchingDPL::updateTimeDependentParams(ProcessingContext& pc)
150151
{
151152
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
152153
mTPCVDriftHelper.extractCCDBInputs(pc);
153-
o2::tpc::CorrectionMapsLoader::extractCCDBInputs(pc);
154+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
154155
static bool initOnceDone = false;
155156
if (!initOnceDone) { // this params need to be queried only once
156157
initOnceDone = true;
@@ -232,18 +233,21 @@ DataProcessorSpec getTPCITSMatchingSpec(GTrackID::mask_t src, bool useFT0, bool
232233
o2::base::GRPGeomRequest::Aligned, // geometry
233234
dataRequest->inputs,
234235
true); // query only once all objects except mag.field
236+
237+
Options opts{
238+
{"nthreads", VariantType::Int, 1, {"Number of afterburner threads"}},
239+
{"ignore-bc-check", VariantType::Bool, false, {"Do not check match candidate against BC filling"}},
240+
{"debug-tree-flags", VariantType::Int, 0, {"DebugFlagTypes bit-pattern for debug tree"}}};
241+
235242
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
236-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs);
243+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, src[GTrackID::CTP]);
237244

238245
return DataProcessorSpec{
239246
"itstpc-track-matcher",
240247
dataRequest->inputs,
241248
outputs,
242249
AlgorithmSpec{adaptFromTask<TPCITSMatchingDPL>(dataRequest, ggRequest, useFT0, calib, skipTPCOnly, useMC)},
243-
Options{
244-
{"nthreads", VariantType::Int, 1, {"Number of afterburner threads"}},
245-
{"ignore-bc-check", VariantType::Bool, false, {"Do not check match candidate against BC filling"}},
246-
{"debug-tree-flags", VariantType::Int, 0, {"DebugFlagTypes bit-pattern for debug tree"}}}};
250+
opts};
247251
}
248252

249253
} // namespace globaltracking

Detectors/GlobalTrackingWorkflow/src/cosmics-match-workflow.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
4949
{"disable-root-input", o2::framework::VariantType::Bool, false, {"disable root-files input reader"}},
5050
{"disable-root-output", o2::framework::VariantType::Bool, false, {"disable root-files output writer"}},
5151
{"track-sources", VariantType::String, std::string{GID::ALL}, {"comma-separated list of sources to use"}},
52+
{"require-ctp-lumi", o2::framework::VariantType::Bool, false, {"require CTP lumi for TPC correction scaling"}},
5253
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}}};
5354
o2::raw::HBFUtilsInitializer::addConfigOption(options);
5455
std::swap(workflowOptions, options);
@@ -83,8 +84,12 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
8384

8485
auto useMC = !configcontext.options().get<bool>("disable-mc");
8586
auto disableRootOut = configcontext.options().get<bool>("disable-root-output");
87+
auto requireCTPLumi = configcontext.options().get<bool>("require-ctp-lumi");
8688

8789
GID::mask_t src = alowedSources & GID::getSourcesMask(configcontext.options().get<std::string>("track-sources"));
90+
if (requireCTPLumi) {
91+
src = src | GID::getSourcesMask("CTP");
92+
}
8893
GID::mask_t dummy;
8994
specs.emplace_back(o2::globaltracking::getCosmicsMatchingSpec(src, useMC));
9095

Detectors/GlobalTrackingWorkflow/src/secondary-vertexing-workflow.cxx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
5454
{"disable-cascade-finder", o2::framework::VariantType::Bool, false, {"do not run cascade finder"}},
5555
{"enable-3body-finder", o2::framework::VariantType::Bool, false, {"run 3 body finder"}},
5656
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}},
57+
{"require-ctp-lumi", o2::framework::VariantType::Bool, false, {"require CTP lumi for TPC correction scaling"}},
5758
{"combine-source-devices", o2::framework::VariantType::Bool, false, {"merge DPL source devices"}}};
5859
o2::raw::HBFUtilsInitializer::addConfigOption(options);
5960
std::swap(workflowOptions, options);
@@ -75,10 +76,13 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
7576
auto disableRootOut = configcontext.options().get<bool>("disable-root-output");
7677
auto enableCasc = !configcontext.options().get<bool>("disable-cascade-finder");
7778
auto enable3body = configcontext.options().get<bool>("enable-3body-finder");
79+
auto requireCTPLumi = configcontext.options().get<bool>("require-ctp-lumi");
7880

7981
GID::mask_t src = allowedSources & GID::getSourcesMask(configcontext.options().get<std::string>("vertexing-sources"));
8082
GID::mask_t dummy, srcClus = GID::includesDet(DetID::TOF, src) ? GID::getSourceMask(GID::TOF) : dummy; // eventually, TPC clusters will be needed for refit
81-
83+
if (requireCTPLumi) {
84+
src = src | GID::getSourcesMask("CTP");
85+
}
8286
WorkflowSpec specs;
8387

8488
specs.emplace_back(o2::vertexing::getSecondaryVertexingSpec(src, enableCasc, enable3body));

Detectors/GlobalTrackingWorkflow/src/tof-matcher-workflow.cxx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
6464
{"enable-dia", o2::framework::VariantType::Bool, false, {"to require diagnostic freq and then write to calib outputs (obsolete since now default)"}},
6565
{"trd-extra-tolerance", o2::framework::VariantType::Float, 500.0f, {"Extra time tolerance for TRD tracks in ns"}},
6666
{"write-matchable", o2::framework::VariantType::Bool, false, {"write all matchable pairs in a file (o2matchable_tof.root)"}},
67+
{"require-ctp-lumi", o2::framework::VariantType::Bool, false, {"require CTP lumi for TPC correction scaling"}},
6768
{"configKeyValues", VariantType::String, "", {"Semicolon separated key=value strings ..."}},
6869
{"combine-devices", o2::framework::VariantType::Bool, false, {"merge DPL source/writer devices"}}};
6970
o2::raw::HBFUtilsInitializer::addConfigOption(options);
@@ -92,7 +93,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
9293
auto diagnostic = configcontext.options().get<bool>("enable-dia");
9394
auto extratolerancetrd = configcontext.options().get<float>("trd-extra-tolerance");
9495
auto writeMatchable = configcontext.options().get<bool>("write-matchable");
95-
96+
auto requireCTPLumi = configcontext.options().get<bool>("require-ctp-lumi");
9697
bool writematching = 0;
9798
bool writecalib = 0;
9899
auto outputType = configcontext.options().get<std::string>("output-type");
@@ -137,7 +138,9 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
137138
if (useFIT) {
138139
clustermask |= GID::getSourceMask(GID::FT0);
139140
}
140-
141+
if (requireCTPLumi) {
142+
src = src | GID::getSourcesMask("CTP");
143+
}
141144
if (useMC) {
142145
mcmaskcl |= GID::getSourceMask(GID::TOF);
143146
}

0 commit comments

Comments
 (0)