33 mCalibrator = std::make_unique<o2::calibration::MeanVertexCalibrator>();
34 mCalibrator->setSlotLength(
params.tfPerSlot);
35 mCalibrator->setMaxSlotsDelay(
float(
params.maxTFdelay) /
params.tfPerSlot);
36 bool useVerboseMode = ic.
options().
get<
bool>(
"use-verbose-mode");
37 LOG(info) <<
" ************************* Verbose? " << useVerboseMode;
39 mCalibrator->useVerboseMode(
true);
49 if (tinfo.globalRunNumberChanged) {
54 auto data = pc.
inputs().
get<gsl::span<o2::dataformats::PrimaryVertex>>(
"input");
56 LOG(
debug) <<
"Processing TF " << mCalibrator->getCurrentTFInfo().tfCounter <<
" with " <<
data.size() <<
" vertices";
57 mCalibrator->process(
data);
59 const auto& infoVec = mCalibrator->getMeanVertexObjectInfoVector();
60 LOG(detail) <<
"Processed TF " << mCalibrator->getCurrentTFInfo().tfCounter <<
" with " <<
data.size() <<
" vertices, for which we created " << infoVec.size() <<
" objects for TF " << mCalibrator->getCurrentTFInfo().tfCounter;
74 LOG(info) <<
"Finalizing calibration";
87 const auto& payloadVec = mCalibrator->getMeanVertexObjectVector();
88 auto& infoVec = mCalibrator->getMeanVertexObjectInfoVector();
89 assert(payloadVec.size() == infoVec.size());
91 if (mDCSSubSpec && mDCSSubSpec < payloadVec.size()) {
92 LOGP(alarm,
"Minimum subspec {} of messages for DCS CCDB is below the maximum subspec {} for production CCDB, increase the former", mDCSSubSpec, payloadVec.size());
94 static std::vector<char> dcsMVObj;
95 for (uint32_t
i = 0;
i < payloadVec.size();
i++) {
97 auto& mv = payloadVec[
i];
100 <<
w.getPath() <<
"/" <<
w.getFileName() <<
" of size " <<
image->size()
101 <<
" bytes, valid for " <<
w.getStartValidityTimestamp() <<
" : " <<
w.getEndValidityTimestamp();
104 auto ts = (
w.getStartValidityTimestamp() +
w.getEndValidityTimestamp()) / 2;
105 o2::ccdb::CcdbObjectInfo dcsw(
"GLO/Calib/MeanVertexCSV",
"csv", fmt::format(
"meanvertex_{}.csv", ts), {},
w.getStartValidityTimestamp(),
w.getEndValidityTimestamp());
107 std::string csvMeanVertex = fmt::format(
"timestamp={},fillNumber={},runNumber={},x={:+.4e},y={:+.4e},z={:+.4e},sigmax={:+.4e},sigmay={:+.4e},sigmaz={:+.4e}",
108 ts, mFillNumber, mRunNumber, mv.getX(), mv.getY(), mv.getZ(), mv.getSigmaX(), mv.getSigmaY(), mv.getSigmaZ());
110 std::copy(csvMeanVertex.begin(), csvMeanVertex.end(), std::back_inserter(dcsMVObj));
119 if (payloadVec.size()) {
120 mCalibrator->initOutput();
133 std::vector<InputSpec> inputs;
134 inputs.emplace_back(
"input",
"GLO",
"PVTX");
135 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
143 std::vector<OutputSpec> outputs;
152 "mean-vertex-calibration",
155 AlgorithmSpec{adaptFromTask<device>(ccdbRequest, dcsMVsubspec)},
Utils and constants for calibration and related workflows.
Device to calibrate MeanVertex.
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void run(o2::framework::ProcessingContext &pc) final
void init(o2::framework::InitContext &ic) final
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
static constexpr long MONTH
static const MeanVertexParams & Instance()
T get(const char *key) const
DataAllocator & outputs()
ConfigParamRegistry const & options()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
GLenum const GLfloat * params
GLubyte GLubyte GLubyte GLubyte w
constexpr TFType INFINITE_TF
Defining PrimaryVertex explicitly as messageable.
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static void fillTFIDInfo(o2::framework::ProcessingContext &pc, o2::dataformats::TFIDInfo &ti)
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"