41 auto updateInterval = ic.options().get<uint32_t>(
"updateInterval");
42 bool updateAtTheEndOfRunOnly = ic.options().get<
bool>(
"updateAtTheEndOfRunOnly");
43 mCalibrator = std::make_unique<o2::cpv::GainCalibrator>();
44 mCalibrator->setSlotLength(0);
45 mCalibrator->setMaxSlotsDelay(10000);
46 if (updateAtTheEndOfRunOnly) {
47 mCalibrator->setUpdateAtTheEndOfRunOnly();
49 mCalibrator->setCheckIntervalInfiniteSlot(updateInterval);
50 LOG(info) <<
"CPVGainCalibratorSpec initialized";
51 LOG(info) <<
"tf-per-slot = 0 (inconfigurable, this calibrator works only in single infinite slot mode)";
52 LOG(info) <<
"max-delay = 10000 (inconfigurable for this calibrator)";
53 LOG(info) <<
"updateInterval = " << updateInterval;
54 LOG(info) <<
"updateAtTheEndOfRunOnly = " << updateAtTheEndOfRunOnly;
67 TFType tfcounter = mCalibrator->getCurrentTFInfo().startTime;
70 static bool isConfigFetched =
false;
71 if (!isConfigFetched) {
72 LOG(info) <<
"GainCalibratorSpec::run() : fetching o2::cpv::CPVCalibParams from CCDB";
74 LOG(info) <<
"GainCalibratorSpec::run() : o2::cpv::CPVCalibParams::Instance() now is following:";
76 mCalibrator->configParameters();
77 isConfigFetched =
true;
81 if (!mCalibrator->isSettedPreviousGains()) {
85 LOG(info) <<
"GainCalibratorSpec()::run() : I got previous gains";
90 if (!mCalibrator->isSettedPreviousGainCalibData()) {
93 if (previousGainCalibData) {
95 LOG(info) <<
"GainCalibratorSpec()::run() : I got previous GainCalibData: ";
96 previousGainCalibData->print();
101 auto&&
digits = pc.inputs().get<gsl::span<o2::cpv::Digit>>(
"calibdigs");
104 LOG(detail) <<
"Processing TF " << tfcounter <<
" with " <<
digits.size() <<
" digits";
105 mCalibrator->process(
digits);
108 auto gainsInfoVecSize = mCalibrator->getCcdbInfoGainsVector().size();
109 if (gainsInfoVecSize) {
110 LOG(info) <<
"Created " << gainsInfoVecSize <<
" o2::cpv::CalibParams objects.";
111 sendOutput(pc.outputs());
115 if (gainsInfoVecSize) {
116 sendOutput(pc.outputs());
122 mCalibrator->prepareForEnding();
123 auto gainCDInfoVecSize = mCalibrator->getCcdbInfoGainCalibDataVector().size();
124 if (gainCDInfoVecSize) {
125 LOG(info) <<
"Created " << gainCDInfoVecSize <<
" o2::cpv::GainCalibData objects.";
126 sendOutput(ec.outputs());
131 std::unique_ptr<o2::cpv::GainCalibrator> mCalibrator;
132 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
136 bool isSomethingSent =
false;
137 isSomethingSent = sendOutputWhat<o2::cpv::CalibParams>(mCalibrator->getGainsVector(), mCalibrator->getCcdbInfoGainsVector(),
"CPV_Gains",
output);
138 isSomethingSent += sendOutputWhat<o2::cpv::GainCalibData>(mCalibrator->getGainCalibDataVector(), mCalibrator->getCcdbInfoGainCalibDataVector(),
"CPV_GainCD",
output);
140 if (isSomethingSent) {
141 mCalibrator->initOutput();
145 template <
class Payload>
148 assert(payloadVec.size() == infoVec.size());
149 if (!payloadVec.size()) {
153 for (uint32_t
i = 0;
i < payloadVec.size();
i++) {
154 auto&
w = infoVec[
i];
156 LOG(info) <<
"Sending object " <<
w.getPath() <<
"/" <<
w.getFileName() <<
" of size " <<
image->size()
157 <<
" bytes, valid for " <<
w.getStartValidityTimestamp() <<
" : " <<
w.getEndValidityTimestamp();
174 std::vector<InputSpec> inputs;
175 inputs.emplace_back(
"calibdigs",
"CPV",
"CALIBDIGITS", 0, Lifetime::Timeframe);
176 inputs.emplace_back(
"calibdata",
"CPV",
"CPV_GainCD", 0, Lifetime::Condition,
ccdbParamSpec(
"CPV/PhysicsRun/GainCalibData"));
177 inputs.emplace_back(
"gains",
"CPV",
"CPV_Gains", 0, Lifetime::Condition,
ccdbParamSpec(
"CPV/Calib/Gains"));
178 inputs.emplace_back(
"calibparams",
"CPV",
"CPV_CalibPars", 0, Lifetime::Condition,
ccdbParamSpec(
"CPV/Config/CPVCalibParams"));
180 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
187 std::vector<OutputSpec> outputs;
195 "cpv-gain-calibration",
200 {
"updateAtTheEndOfRunOnly",
VariantType::Bool,
false, {
"finalize the slots and prepare the CCDB entries only at the end of the run."}},
201 {
"updateInterval",
VariantType::UInt32, 100u, {
"try to finalize the slot (and produce calibration) when the updateInterval has passed."}}}};
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
CPVGainCalibratorSpec(std::shared_ptr< o2::base::GRPGeomRequest > req)
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void init(o2::framework::InitContext &ic) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void run(o2::framework::ProcessingContext &pc) final
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
void printKeyValues(bool showProv=true, bool useLogger=false) const final
static const CPVCalibParams & Instance()
GLubyte GLubyte GLubyte GLubyte w
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
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"
std::vector< Digit > digits