12#ifndef O2_FITCALIBRATIONDEVICE_H
13#define O2_FITCALIBRATIONDEVICE_H
30template <
typename InputCalibrationInfoType,
typename TimeSlotStorageType,
typename CalibrationObjectType>
34 static constexpr const char* sInputDataLabel =
"calibData";
35 static constexpr const char* sOutputDataLabelCDBPayload =
"cdbPayloadFIT";
36 static constexpr const char* sOutputDataLabelCDBWrapper =
"cdbWrapperFIT";
41 explicit FITCalibrationDevice(std::shared_ptr<o2::base::GRPGeomRequest> req = {},
const o2::header::DataDescription& dataDescription = sOutputDataDescription,
const std::string& inputDataLabel = sInputDataLabel,
const std::string& outputDataLabelCDBPayload = sOutputDataLabelCDBPayload,
const std::string& outputDataLabelCDBWrapper = sOutputDataLabelCDBWrapper)
42 : mInputDataLabel(
std::move(inputDataLabel)), mCCDBRequest(req), mOutputDataDescription(dataDescription), mOutputDataLabelCDBPayload(outputDataLabelCDBPayload), mOutputDataLabelCDBWrapper(outputDataLabelCDBWrapper) {}
47 auto slotL = context.options().get<uint32_t>(
"tf-per-slot");
48 auto delay = context.options().get<uint32_t>(
"max-delay");
49 const std::string extraInfo = context.options().get<std::string>(
"extra-info-per-slot");
50 mCalibrator = std::make_unique<CalibratorType>();
52 mCalibrator->setSlotLength(slotL);
53 mCalibrator->setMaxSlotsDelay(delay);
54 mCalibrator->setExtraInfo(extraInfo);
61 auto data = context.inputs().get<gsl::span<InputCalibrationInfoType>>(mInputDataLabel);
63 mCalibrator->process(
data);
65 _sendCalibrationObjectIfSlotFinalized(context.outputs());
73 _sendCalibrationObjectIfSlotFinalized(context.outputs());
88 inputs.emplace_back(sInputDataLabel, dataOrigin, dataDescription, o2::framework::Lifetime::Sporadic);
94 if (mCalibrator->isCalibrationObjectReadyToSend()) {
95 _sendOutputs(outputs);
102 const auto& objectsToSend = mCalibrator->getStoredCalibrationObjects();
104 uint32_t iSendChannel = 0;
105 for (
const auto& [ccdbInfo, calibObject] : objectsToSend) {
108 LOG(info) <<
"_sendOutputs " << ccdbInfo.getStartValidityTimestamp();
111 mCalibrator->initOutput();
114 const std::string mInputDataLabel;
115 const std::string mOutputDataLabelCDBPayload;
116 const std::string mOutputDataLabelCDBWrapper;
118 std::unique_ptr<CalibratorType> mCalibrator;
119 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
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)
void init(o2::framework::InitContext &context) final
void run(o2::framework::ProcessingContext &context) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
static void prepareVecInputSpec(std::vector< o2::framework::InputSpec > &inputs, o2::header::DataOrigin dataOrigin, o2::header::DataDescription dataDescription)
FITCalibrationDevice(std::shared_ptr< o2::base::GRPGeomRequest > req={}, const o2::header::DataDescription &dataDescription=sOutputDataDescription, const std::string &inputDataLabel=sInputDataLabel, const std::string &outputDataLabelCDBPayload=sOutputDataLabelCDBPayload, const std::string &outputDataLabelCDBWrapper=sOutputDataLabelCDBWrapper)
void endOfStream(o2::framework::EndOfStreamContext &context) final
This is invoked whenever we have an EndOfStream event.
static void prepareVecOutputSpec(std::vector< o2::framework::OutputSpec > &outputs, o2::header::DataDescription dataDescription)
void snapshot(const Output &spec, T const &object)
constexpr TFType INFINITE_TF
Defining DataPointCompositeObject explicitly as copiable.
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"