Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Common/TableProducer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(multcenttable

Check failure on line 42 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name multcenttable does not match its file name multCentTable.cxx. (Matches multcenttable.cxx.)
SOURCES multCentTable.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)
Expand All @@ -59,6 +59,11 @@
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(timestamptester

Check failure on line 62 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name timestamptester does not match its file name timestampTester.cxx. (Matches timestamptester.cxx.)
SOURCES timestampTester.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(weak-decay-indices
SOURCES weakDecayIndices.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
Expand All @@ -84,7 +89,7 @@
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::trackSelectionRequest
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(calo-clusters

Check failure on line 92 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name calo-clusters does not match its file name caloClusterProducer.cxx. (Matches caloClusters.cxx.)
SOURCES caloClusterProducer.cxx
PUBLIC_LINK_LIBRARIES O2::DataFormatsPHOS O2::PHOSBase O2::PHOSReconstruction O2Physics::DataModel
COMPONENT_NAME Analysis)
Expand All @@ -107,12 +112,12 @@
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(mccollisionextra

Check failure on line 115 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name mccollisionextra does not match its file name mcCollsExtra.cxx. (Matches mccollisionextra.cxx.)
SOURCES mcCollsExtra.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(qvector-table

Check failure on line 120 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name qvector-table does not match its file name qVectorsTable.cxx. (Matches qvectorTable.cxx.)
SOURCES qVectorsTable.cxx
PUBLIC_LINK_LIBRARIES O2::Framework
O2Physics::AnalysisCore
Expand All @@ -121,7 +126,7 @@
O2::CCDB
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(mftmchmatchingml

Check failure on line 129 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name mftmchmatchingml does not match its file name mftmchMatchingML.cxx. (Matches mftmchmatchingml.cxx.)
SOURCES mftmchMatchingML.cxx
PUBLIC_LINK_LIBRARIES O2::Framework
O2Physics::AnalysisCore
Expand All @@ -130,7 +135,7 @@
O2::ReconstructionDataFormats
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(match-mft-ft0

Check failure on line 138 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name match-mft-ft0 does not match its file name match-mft-ft0.cxx. (Matches matchMftFt0.cxx.)
SOURCES match-mft-ft0.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
O2::ReconstructionDataFormats
Expand All @@ -147,17 +152,17 @@
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(mftmch-matching-data

Check failure on line 155 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name mftmch-matching-data does not match its file name match-mft-mch-data.cxx. (Matches mftmchMatchingData.cxx.)
SOURCES match-mft-mch-data.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::GlobalTracking
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(occ-table-producer

Check failure on line 160 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name occ-table-producer does not match its file name occupancyTableProducer.cxx. (Matches occTableProducer.cxx.)
SOURCES occupancyTableProducer.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(mftmch-matching-data-mc

Check failure on line 165 in Common/TableProducer/CMakeLists.txt

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-workflow]

Workflow name mftmch-matching-data-mc does not match its file name match-mft-mch-data-mc.cxx. (Matches mftmchMatchingDataMc.cxx.)
SOURCES match-mft-mch-data-mc.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::GlobalTracking
COMPONENT_NAME Analysis)
Expand Down
34 changes: 24 additions & 10 deletions Common/TableProducer/eventSelectionService.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "Common/Core/trackUtilities.h"
#include "Common/DataModel/TrackSelectionTables.h"
#include "Common/Tools/EventSelectionTools.h"
#include "Common/Tools/timestampModule.h"

#include "CCDB/BasicCCDBManager.h"
#include "CCDB/CcdbApi.h"
Expand All @@ -45,18 +46,22 @@ using namespace o2::framework;

MetadataHelper metadataInfo; // Metadata helper

using BCsWithRun2InfosTimestampsAndMatches = soa::Join<aod::BCs, aod::Run2BCInfos, aod::Timestamps, aod::Run2MatchedToBCSparse>;
using BCsWithRun3Matchings = soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>;
using BCsWithRun2InfosAndMatches = soa::Join<aod::BCs, aod::Run2BCInfos, aod::Run2MatchedToBCSparse>;
using BCsWithRun3Matchings = soa::Join<aod::BCs, aod::Run3MatchedToBCSparse>;
using FullTracks = soa::Join<aod::Tracks, aod::TracksExtra>;
using FullTracksIU = soa::Join<aod::TracksIU, aod::TracksExtra>;

struct eventselectionRun2 {
o2::common::timestamp::timestampConfigurables timestampConfigurables;
o2::common::timestamp::TimestampModule timestampMod;

o2::common::eventselection::bcselConfigurables bcselOpts;
o2::common::eventselection::BcSelectionModule bcselmodule;

o2::common::eventselection::evselConfigurables evselOpts;
o2::common::eventselection::EventSelectionModule evselmodule;

Produces<aod::Timestamps> timestampTable; /// Table with SOR timestamps produced by the task
Produces<aod::BcSels> bcsel;
Produces<aod::EvSels> evsel;

Expand All @@ -69,8 +74,8 @@ struct eventselectionRun2 {

HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};

// the best: have readable cursors
// this: a stopgap solution to avoid spawning yet another device
// buffering intermediate results for passing
std::vector<uint64_t> timestamps;
std::vector<o2::common::eventselection::bcselEntry> bcselsbuffer;

// auxiliary
Expand All @@ -85,11 +90,12 @@ struct eventselectionRun2 {
ccdb->setURL(ccdburl.value);

// task-specific
timestampMod.init(timestampConfigurables, metadataInfo);
bcselmodule.init(context, bcselOpts, histos);
evselmodule.init(context, evselOpts, histos, metadataInfo);
}

void process(BCsWithRun2InfosTimestampsAndMatches const& bcs,
void process(BCsWithRun2InfosAndMatches const& bcs,
aod::Collisions const& collisions,
aod::Zdcs const&,
aod::FV0As const&,
Expand All @@ -98,12 +104,16 @@ struct eventselectionRun2 {
aod::FDDs const&,
FullTracks const&)
{
bcselmodule.processRun2(ccdb, bcs, bcselsbuffer, bcsel);
evselmodule.processRun2(ccdb, histos, collisions, tracklets, cache, bcselsbuffer, evsel);
timestampMod.process(bcs, ccdb, timestamps, timestampTable);
bcselmodule.processRun2(ccdb, bcs, timestamps, bcselsbuffer, bcsel);
evselmodule.processRun2(ccdb, histos, collisions, tracklets, cache, timestamps, bcselsbuffer, evsel);
}
};

struct eventselectionRun3 {
o2::common::timestamp::timestampConfigurables timestampConfigurables;
o2::common::timestamp::TimestampModule timestampMod;

o2::common::eventselection::bcselConfigurables bcselOpts;
o2::common::eventselection::BcSelectionModule bcselmodule;

Expand All @@ -113,6 +123,7 @@ struct eventselectionRun3 {
o2::common::eventselection::lumiConfigurables lumiOpts;
o2::common::eventselection::LumiModule lumimodule;

Produces<aod::Timestamps> timestampTable; /// Table with SOR timestamps produced by the task
Produces<aod::BcSels> bcsel;
Produces<aod::EvSels> evsel;

Expand All @@ -127,6 +138,7 @@ struct eventselectionRun3 {

// the best: have readable cursors
// this: a stopgap solution to avoid spawning yet another device
std::vector<uint64_t> timestamps;
std::vector<o2::common::eventselection::bcselEntry> bcselsbuffer;

// auxiliary
Expand All @@ -141,6 +153,7 @@ struct eventselectionRun3 {
ccdb->setURL(ccdburl.value);

// task-specific
timestampMod.init(timestampConfigurables, metadataInfo);
bcselmodule.init(context, bcselOpts, histos);
evselmodule.init(context, evselOpts, histos, metadataInfo);
lumimodule.init(context, lumiOpts, histos);
Expand All @@ -154,9 +167,10 @@ struct eventselectionRun3 {
aod::FDDs const&,
FullTracksIU const&)
{
bcselmodule.processRun3(ccdb, histos, bcs, bcselsbuffer, bcsel);
evselmodule.processRun3(ccdb, histos, bcs, collisions, pvTracks, ft0s, cache, bcselsbuffer, evsel);
lumimodule.process(ccdb, histos, bcs, bcselsbuffer);
timestampMod.process(bcs, ccdb, timestamps, timestampTable);
bcselmodule.processRun3(ccdb, histos, bcs, timestamps, bcselsbuffer, bcsel);
evselmodule.processRun3(ccdb, histos, bcs, collisions, pvTracks, ft0s, cache, timestamps, bcselsbuffer, evsel);
lumimodule.process(ccdb, histos, bcs, timestamps, bcselsbuffer);
}
};

Expand Down
72 changes: 72 additions & 0 deletions Common/TableProducer/timestampTester.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

///
/// \file timestamp.cxx
/// \author Nicolò Jacazio
/// \since 2020-06-22
/// \brief A task to fill the timestamp table from run number.
/// Uses headers from CCDB
///
#include "MetadataHelper.h"

#include "Common/Tools/timestampModule.h"

#include "CCDB/BasicCCDBManager.h"
#include "CommonDataFormat/InteractionRecord.h"
#include "DetectorsRaw/HBFUtils.h"
#include "Framework/AnalysisTask.h"
#include "Framework/runDataProcessing.h"

#include <map>
#include <vector>

using namespace o2::framework;
using namespace o2::header;
using namespace o2;

MetadataHelper metadataInfo; // Metadata helper

struct TimestampTask {
Produces<aod::Timestamps> timestampTable; /// Table with SOR timestamps produced by the task
Service<o2::ccdb::BasicCCDBManager> ccdb; /// CCDB manager to access orbit-reset timestamp
o2::ccdb::CcdbApi ccdb_api; /// API to access CCDB headers

Configurable<std::string> ccdb_url{"ccdb-url", "http://alice-ccdb.cern.ch", "URL of the CCDB database"};

o2::common::timestamp::timestampConfigurables timestampConfigurables;
o2::common::timestamp::TimestampModule timestampMod;

std::vector<int64_t> timestampBuffer;

void init(o2::framework::InitContext&)
{
// CCDB initialization
ccdb->setURL(ccdb_url.value);
ccdb_api.init(ccdb_url.value);

// timestamp configuration + init
timestampMod.init(timestampConfigurables, metadataInfo);
}

void process(aod::BCs const& bcs)
{
timestampMod.process(bcs, ccdb, timestampBuffer, timestampTable);
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
// Parse the metadata
metadataInfo.initMetadata(cfgc);

return WorkflowSpec{adaptAnalysisTask<TimestampTask>(cfgc)};
}
54 changes: 29 additions & 25 deletions Common/Tools/EventSelectionTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -264,17 +264,18 @@ class BcSelectionModule
}

//__________________________________________________
template <typename TCCDB, typename TBCs, typename TBcSelBuffer, typename TBcSelCursor>
void processRun2(TCCDB const& ccdb, TBCs const& bcs, TBcSelBuffer& bcselbuffer, TBcSelCursor& bcsel)
template <typename TCCDB, typename TBCs, typename TTimestamps, typename TBcSelBuffer, typename TBcSelCursor>
void processRun2(TCCDB const& ccdb, TBCs const& bcs, TTimestamps const& timestamps, TBcSelBuffer& bcselbuffer, TBcSelCursor& bcsel)
{
if (bcselOpts.amIneeded.value == 0) {
bcselbuffer.clear();
return;
}
bcselbuffer.clear();
for (const auto& bc : bcs) {
par = ccdb->template getForTimeStamp<EventSelectionParams>("EventSelection/EventSelectionParams", bc.timestamp());
aliases = ccdb->template getForTimeStamp<TriggerAliases>("EventSelection/TriggerAliases", bc.timestamp());
uint64_t timestamp = timestamps[bc.globalIndex()];
par = ccdb->template getForTimeStamp<EventSelectionParams>("EventSelection/EventSelectionParams", timestamp);
aliases = ccdb->template getForTimeStamp<TriggerAliases>("EventSelection/TriggerAliases", timestamp);
// fill fired aliases
uint32_t alias{0};
uint64_t triggerMask = bc.triggerMask();
Expand Down Expand Up @@ -401,8 +402,8 @@ class BcSelectionModule
} // end processRun2

//__________________________________________________
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TBcSelBuffer, typename TBcSelCursor>
void processRun3(TCCDB const& ccdb, THistoRegistry& histos, TBCs const& bcs, TBcSelBuffer& bcselbuffer, TBcSelCursor& bcsel)
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TTimestamps, typename TBcSelBuffer, typename TBcSelCursor>
void processRun3(TCCDB const& ccdb, THistoRegistry& histos, TBCs const& bcs, TTimestamps const& timestamps, TBcSelBuffer& bcselbuffer, TBcSelCursor& bcsel)
{
if (bcselOpts.amIneeded.value == 0) {
bcselbuffer.clear();
Expand All @@ -426,15 +427,16 @@ class BcSelectionModule

// bc loop
for (auto bc : bcs) { // o2-linter: disable=const-ref-in-for-loop (use bc as nonconst iterator)
uint64_t timestamp = timestamps[bc.globalIndex()];
// store rct flags
uint32_t rct = lastRCT;
int64_t thisTF = (bc.globalBC() - bcSOR) / nBCsPerTF;
if (mapRCT != nullptr && thisTF != lastTF) { // skip for unanchored runs; do it once per TF
auto itrct = mapRCT->upper_bound(bc.timestamp());
auto itrct = mapRCT->upper_bound(timestamp);
if (itrct != mapRCT->begin())
itrct--;
rct = itrct->second;
LOGP(debug, "sor={} eor={} ts={} rct={}", sorTimestamp, eorTimestamp, bc.timestamp(), rct);
LOGP(debug, "sor={} eor={} ts={} rct={}", sorTimestamp, eorTimestamp, timestamp, rct);
lastRCT = rct;
lastTF = thisTF;
}
Expand Down Expand Up @@ -560,10 +562,10 @@ class BcSelectionModule
LOGP(debug, "foundFT0={}", foundFT0);

const char* srun = Form("%d", run);
if (bc.timestamp() < sorTimestamp || bc.timestamp() > eorTimestamp) {
if (timestamp < sorTimestamp || timestamp > eorTimestamp) {
histos.template get<TH1>(HIST("bcselection/hCounterInvalidBCTimestamp"))->Fill(srun, 1);
if (bcselOpts.confCheckRunDurationLimits.value) {
LOGF(warn, "Invalid BC timestamp: %d, run: %d, sor: %d, eor: %d", bc.timestamp(), run, sorTimestamp, eorTimestamp);
LOGF(warn, "Invalid BC timestamp: %d, run: %d, sor: %d, eor: %d", timestamp, run, sorTimestamp, eorTimestamp);
alias = 0u;
selection = 0u;
}
Expand Down Expand Up @@ -692,8 +694,8 @@ class EventSelectionModule
}

//__________________________________________________
template <typename TCCDB, typename TBCs>
bool configure(TCCDB& ccdb, TBCs const& bcs)
template <typename TCCDB, typename TTimestamps, typename TBCs>
bool configure(TCCDB& ccdb, TTimestamps const& timestamps, TBCs const& bcs)
{
int run = bcs.iteratorAt(0).runNumber();
// extract bc pattern from CCDB for data or anchored MC only
Expand All @@ -705,7 +707,8 @@ class EventSelectionModule
// duration of TF in bcs
nBCsPerTF = evselOpts.confNumberOfOrbitsPerTF < 0 ? runInfo.orbitsPerTF * nBCsPerOrbit : evselOpts.confNumberOfOrbitsPerTF * nBCsPerOrbit;
// colliding bc pattern
int64_t ts = bcs.iteratorAt(0).timestamp();
int64_t ts = timestamps[0];

// getForTimeStamp replaced with getSpecific to set metadata to zero
// avoids crash related to specific run number
auto grplhcif = ccdb->template getSpecific<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", ts);
Expand All @@ -721,15 +724,16 @@ class EventSelectionModule
}

//__________________________________________________
template <typename TCCDB, typename THistoRegistry, typename TCollisions, typename TTracklets, typename TSlicecache, typename TBcSelBuffer, typename TEvselCursor>
void processRun2(TCCDB const& ccdb, THistoRegistry& histos, TCollisions const& collisions, TTracklets const& tracklets, TSlicecache& cache, TBcSelBuffer const& bcselbuffer, TEvselCursor& evsel)
template <typename TCCDB, typename THistoRegistry, typename TCollisions, typename TTracklets, typename TSlicecache, typename TTimestamps, typename TBcSelBuffer, typename TEvselCursor>
void processRun2(TCCDB const& ccdb, THistoRegistry& histos, TCollisions const& collisions, TTracklets const& tracklets, TSlicecache& cache, TTimestamps const& timestamps, TBcSelBuffer const& bcselbuffer, TEvselCursor& evsel)
{
if (evselOpts.amIneeded.value == 0) {
return; // dummy process
}
for (const auto& col : collisions) {
auto bc = col.template bc_as<soa::Join<aod::BCs, aod::Run2BCInfos, aod::Timestamps, aod::Run2MatchedToBCSparse>>();
EventSelectionParams* par = ccdb->template getForTimeStamp<EventSelectionParams>("EventSelection/EventSelectionParams", bc.timestamp());
uint64_t timestamp = timestamps[bc.globalIndex()];
EventSelectionParams* par = ccdb->template getForTimeStamp<EventSelectionParams>("EventSelection/EventSelectionParams", timestamp);
bool* applySelection = par->getSelection(evselOpts.muonSelection);
if (evselOpts.isMC == 1) {
applySelection[aod::evsel::kIsBBZAC] = 0;
Expand Down Expand Up @@ -802,13 +806,13 @@ class EventSelectionModule
} // end processRun2

//__________________________________________________
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TCollisions, typename TPVTracks, typename TFT0s, typename TSlicecache, typename TBcSelBuffer, typename TEvselCursor>
void processRun3(TCCDB const& ccdb, THistoRegistry& histos, TBCs const& bcs, TCollisions const& cols, TPVTracks const& pvTracks, TFT0s const& ft0s, TSlicecache& cache, TBcSelBuffer const& bcselbuffer, TEvselCursor& evsel)
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TCollisions, typename TPVTracks, typename TFT0s, typename TSlicecache, typename TTimestamps, typename TBcSelBuffer, typename TEvselCursor>
void processRun3(TCCDB const& ccdb, THistoRegistry& histos, TBCs const& bcs, TCollisions const& cols, TPVTracks const& pvTracks, TFT0s const& ft0s, TSlicecache& cache, TTimestamps const& timestamps, TBcSelBuffer const& bcselbuffer, TEvselCursor& evsel)
{
if (evselOpts.amIneeded.value == 0) {
return; // dummy process
}
if (!configure(ccdb, bcs))
if (!configure(ccdb, timestamps, bcs))
return; // don't do anything in case configuration reported not ok

int run = bcs.iteratorAt(0).runNumber();
Expand Down Expand Up @@ -1372,8 +1376,8 @@ class LumiModule
}
}

template <typename TCCDB, typename TBCs>
bool configure(TCCDB& ccdb, TBCs const& bcs)
template <typename TCCDB, typename TTimestamps, typename TBCs>
bool configure(TCCDB& ccdb, TTimestamps const& timestamps, TBCs const& bcs)
{
if (bcs.size() == 0)
return false;
Expand All @@ -1382,7 +1386,7 @@ class LumiModule
return false;
if (run != lastRun && run >= 520259) { // o2-linter: disable=magic-number (scalers available for runs above 520120)
lastRun = run;
int64_t ts = bcs.iteratorAt(0).timestamp();
int64_t ts = timestamps[0];

// getting GRP LHCIF object to extract colliding system, energy and colliding bc pattern
auto grplhcif = ccdb->template getForTimeStamp<parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", ts);
Expand Down Expand Up @@ -1511,14 +1515,14 @@ class LumiModule
}

//__________________________________________________
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TBcSelBuffer>
void process(TCCDB& ccdb, THistoRegistry& histos, TBCs const& bcs, TBcSelBuffer const& bcselBuffer)
template <typename TCCDB, typename THistoRegistry, typename TBCs, typename TTimestamps, typename TBcSelBuffer>
void process(TCCDB& ccdb, THistoRegistry& histos, TBCs const& bcs, TTimestamps const& timestamps, TBcSelBuffer const& bcselBuffer)
{
if (lumiOpts.amIneeded.value == 0) {
return;
}

if (!configure(ccdb, bcs))
if (!configure(ccdb, timestamps, bcs))
return; // don't do anything in case configuration reported not ok

int run = bcs.iteratorAt(0).runNumber();
Expand Down
Loading
Loading