12#ifndef O2_TRD_T0FITSPEC_H
13#define O2_TRD_T0FITSPEC_H
44 T0FitDevice(std::shared_ptr<o2::base::GRPGeomRequest> req) : mCCDBRequest(req) {}
48 auto slotL = ic.options().get<uint32_t>(
"sec-per-slot");
49 auto delay = ic.options().get<uint32_t>(
"max-delay");
51 mFitInstance = std::make_unique<o2::trd::T0Fit>();
52 mFitInstance->setSlotLengthInSeconds(slotL);
53 mFitInstance->setMaxSlotsDelay(delay);
54 if (ic.options().get<
bool>(
"enable-root-output")) {
55 mFitInstance->createOutputFile();
67 if (mRunStopRequested) {
72 auto dataT0Fit = pc.inputs().get<std::vector<o2::trd::PHData>>(
"input");
74 LOG(detail) <<
"Processing TF " << mFitInstance->getCurrentTFInfo().tfCounter <<
" with " << dataT0Fit.size() <<
" PHData entries";
75 mFitInstance->process(dataT0Fit);
77 if (pc.transitionState() == TransitionHandlingState::Requested) {
78 LOG(info) <<
"Run stop requested, finalizing";
79 mRunStopRequested =
true;
81 mFitInstance->closeOutputFile();
83 sendOutput(pc.outputs());
88 if (mRunStopRequested) {
92 mFitInstance->closeOutputFile();
93 sendOutput(ec.outputs());
98 mFitInstance->closeOutputFile();
102 std::unique_ptr<o2::trd::T0Fit> mFitInstance;
103 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
104 bool mRunStopRequested =
false;
111 const auto& payloadVec = mFitInstance->getCcdbObjectVector();
112 auto& infoVec = mFitInstance->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 mFitInstance->initOutput();
141 std::vector<OutputSpec> outputs;
144 std::vector<InputSpec> inputs;
145 inputs.emplace_back(
"input",
"TRD",
"PULSEHEIGHT");
146 inputs.emplace_back(
"calt0",
"TRD",
"CALT0", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/CalT0"));
147 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
161 {
"sec-per-slot",
VariantType::UInt32, 900u, {
"number of seconds per calibration time slot"}},
163 {
"enable-root-output",
VariantType::Bool,
false, {
"output t0 values to root file"}},
Object with T0 values per chamber to be written into the CCDB.
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
Fits the TRD PH distributions to extract the t0 value.
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 run(o2::framework::ProcessingContext &pc) final
void stop() final
This is invoked on stop.
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
T0FitDevice(std::shared_ptr< o2::base::GRPGeomRequest > req)
void init(o2::framework::InitContext &ic) final
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"