12#ifndef O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
13#define O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
38 mSaveToFile = ic.options().get<
bool>(
"save-to-file");
40 if (ic.options().hasOption(
"slot-len-sec")) {
41 mSlotLenSec = ic.options().get<uint32_t>(
"slot-len-sec");
43 if (ic.options().hasOption(
"one-object-per-run")) {
44 mOneObjectPerRun = ic.options().get<
bool>(
"one-object-per-run");
46 if (ic.options().hasOption(
"min-entries-number")) {
47 mMinNumberOfEntries = ic.options().get<uint32_t>(
"min-entries-number");
49 if (ic.options().hasOption(
"min-ampl-side-a")) {
50 mMinAmplitudeSideA = ic.options().get<int32_t>(
"min-ampl-side-a");
52 if (ic.options().hasOption(
"min-ampl-side-c")) {
53 mMinAmplitudeSideC = ic.options().get<int32_t>(
"min-ampl-side-c");
55 if (ic.options().hasOption(
"min-sum-of-ampl")) {
56 mMinSumOfAmplitude = ic.options().get<int32_t>(
"min-sum-of-ampl");
59 mCalibrator = std::make_unique<o2::ft0::EventsPerBcCalibrator>(mMinNumberOfEntries, mMinAmplitudeSideA, mMinAmplitudeSideC, mMinSumOfAmplitude);
61 if (mOneObjectPerRun) {
62 LOG(info) <<
"Only one object will be created at the end of run";
63 mCalibrator->setUpdateAtTheEndOfRunOnly();
65 if (mOneObjectPerRun ==
false) {
66 LOG(info) <<
"Defined slot interval to " << mSlotLenSec <<
" seconds";
67 mCalibrator->setSlotLengthInSeconds(mSlotLenSec);
79 if (tinfo.globalRunNumberChanged || mRunNoFromDH < 1) {
80 mRunNoFromDH = tinfo.runNumber;
83 auto digits = pc.inputs().get<gsl::span<o2::ft0::Digit>>(
"digits");
88 mCalibrator->process(
digits);
89 if (mOneObjectPerRun ==
false) {
96 LOG(info) <<
"Received end-of-stream, checking for slot to finalize...";
97 mCalibrator->checkSlotsToFinalize();
99 mCalibrator->initOutput();
105 const auto& tvxHists = mCalibrator->getTvxPerBc();
106 auto& infos = mCalibrator->getTvxPerBcCcdbInfo();
107 for (
unsigned int idx = 0; idx < tvxHists.size(); idx++) {
108 auto& info = infos[idx];
109 const auto& payload = tvxHists[idx];
112 LOG(info) <<
"Sending object " << info->getPath() <<
"/" << info->getFileName() <<
" of size " <<
image->size()
113 <<
" bytes, valid for " << info->getStartValidityTimestamp() <<
" : " << info->getEndValidityTimestamp();
117 std::string fnout = fmt::format(
"ft0eventsPerBC_run_{}_{}_{}.root", mRunNoFromDH, info->getStartValidityTimestamp(), info->getEndValidityTimestamp());
119 TFile flout(fnout.c_str(),
"recreate");
121 LOGP(info, R
"(Saved to file, can upload as: o2-ccdb-upload -f {} --starttimestamp {} --endtimestamp {} -k "ccdb_object" --path {} -m "runNumber={};AdjustableEOV=true;")",
122 fnout, info->getStartValidityTimestamp(), info->getEndValidityTimestamp(), info->getPath(), mRunNoFromDH);
124 } catch (
const std::exception& ex) {
125 LOGP(error,
"failed to store object to file {}, error: {}", fnout, ex.what());
130 if (tvxHists.size()) {
131 mCalibrator->initOutput();
136 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
137 std::unique_ptr<o2::ft0::EventsPerBcCalibrator> mCalibrator;
138 bool mOneObjectPerRun;
139 bool mSaveToFile =
false;
140 int mRunNoFromDH = 0;
141 uint32_t mSlotLenSec;
142 uint32_t mMinNumberOfEntries;
143 int32_t mMinAmplitudeSideA;
144 int32_t mMinAmplitudeSideC;
145 int32_t mMinSumOfAmplitude;
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 sendOutput(o2::framework::DataAllocator &output)
void init(o2::framework::InitContext &ic) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
void run(o2::framework::ProcessingContext &pc) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
FT0EventsPerBcProcessor(std::shared_ptr< o2::base::GRPGeomRequest > request)
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
static constexpr const char * CCDBOBJECT_ENTRY
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