12#ifndef O2_TRD_VDANDEXBCALIBSPEC_H
13#define O2_TRD_VDANDEXBCALIBSPEC_H
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::CalibratorVdExB>();
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) {
75 LOG(detail) <<
"Processing TF " << mCalibrator->getCurrentTFInfo().tfCounter <<
" with " << dataAngRes.getNEntries() <<
" AngularResidHistos entries";
76 mCalibrator->process(dataAngRes);
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::CalibratorVdExB> 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();
141 std::vector<OutputSpec> outputs;
144 std::vector<InputSpec> inputs;
145 inputs.emplace_back(
"input",
"TRD",
"ANGRESHISTS");
146 inputs.emplace_back(
"calvdexb",
"TRD",
"CALVDRIFTEXB", 0, Lifetime::Condition,
ccdbParamSpec(
"TRD/Calib/CalVdriftExB"));
147 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
155 "calib-vdexb-calibration",
160 {
"sec-per-slot",
VariantType::UInt32, 900u, {
"number of seconds per calibration time slot"}},
162 {
"enable-root-output",
VariantType::Bool,
false, {
"output tprofiles and fits to root file"}},
Class to store the angular residuals of TRD tracklets wrt TPC tracks for each TRD chamber.
TimeSlot-based calibration of vDrift and ExB.
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)
void init(o2::framework::InitContext &ic) final
VdAndExBCalibDevice(std::shared_ptr< o2::base::GRPGeomRequest > req)
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void run(o2::framework::ProcessingContext &pc) final
void stop() final
This is invoked on stop.
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"