12#ifndef O2_TRD_GAINCALIBSPEC_H
13#define O2_TRD_GAINCALIBSPEC_H
43 GainCalibDevice(std::shared_ptr<o2::base::GRPGeomRequest> req) : mCCDBRequest(req) {}
47 auto slotL = ic.options().get<uint32_t>(
"sec-per-slot");
48 auto delay = ic.options().get<uint32_t>(
"max-delay");
49 mCalibrator = std::make_unique<o2::trd::CalibratorGain>();
50 mCalibrator->setSlotLengthInSeconds(slotL);
51 mCalibrator->setMaxSlotsDelay(delay);
52 if (ic.options().get<
bool>(
"enable-root-output")) {
53 mCalibrator->createOutputFile();
65 if (tinfo.globalRunNumberChanged) {
66 mRunStopRequested =
false;
67 mCalibrator->retrievePrev(pc);
69 if (mRunStopRequested) {
73 auto dataGainCalib = pc.inputs().get<std::vector<int>>(
"input");
75 LOG(
debug) <<
"Processing TF " << mCalibrator->getCurrentTFInfo().tfCounter <<
" with " << dataGainCalib.size() <<
" GainCalibHistos entries";
76 mCalibrator->process(dataGainCalib);
77 if (pc.transitionState() == TransitionHandlingState::Requested) {
78 LOG(info) <<
"Run stop requested, finalizing";
79 mRunStopRequested =
true;
81 mCalibrator->closeOutputFile();
83 sendOutput(pc.outputs());
88 if (mRunStopRequested) {
92 mCalibrator->closeOutputFile();
93 sendOutput(ec.outputs());
98 mCalibrator->closeOutputFile();
102 std::unique_ptr<o2::trd::CalibratorGain> mCalibrator;
103 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
104 bool mRunStopRequested =
false;
112 const auto& payloadVec = mCalibrator->getCcdbObjectVector();
113 auto& infoVec = mCalibrator->getCcdbObjectInfoVector();
114 assert(payloadVec.size() == infoVec.size());
116 for (uint32_t
i = 0;
i < payloadVec.size();
i++) {
117 auto&
w = infoVec[
i];
119 LOG(info) <<
"Sending object " <<
w.getPath() <<
"/" <<
w.getFileName() <<
" of size " <<
image->size()
120 <<
" bytes, valid for " <<
w.getStartValidityTimestamp() <<
" : " <<
w.getEndValidityTimestamp();
125 if (payloadVec.size()) {
126 mCalibrator->initOutput();
138 std::vector<OutputSpec> outputs;
141 std::vector<InputSpec> inputs;
142 inputs.emplace_back(
"input",
"TRD",
"GAINCALIBHISTS");
143 inputs.emplace_back(
"calgain",
"TRD",
"CALIBGAIN", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/CalGain"));
144 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
152 "calib-gain-calibration",
155 AlgorithmSpec{adaptFromTask<o2::calibration::GainCalibDevice>(ccdbRequest)},
157 {
"sec-per-slot",
VariantType::UInt32, 900u, {
"number of seconds per calibration time slot"}},
159 {
"enable-root-output",
VariantType::Bool,
false, {
"output tprofiles and fits to root file"}},
TimeSlot-based calibration of gain.
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
Class to store the TRD dEdx distribution for each TRD chamber.
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
GainCalibDevice(std::shared_ptr< o2::base::GRPGeomRequest > req)
void stop() final
This is invoked on stop.
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void run(o2::framework::ProcessingContext &pc) final
void init(o2::framework::InitContext &ic) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
GLubyte GLubyte GLubyte GLubyte w
constexpr TFType INFINITE_TF
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"