Project
Loading...
Searching...
No Matches
FT0EventsPerBcSpec.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
13#define O2_CALIBRATION_FT0_EVENTS_PER_BC_CALIBRATOR_H
14
21#include "Framework/Task.h"
24
27
28namespace o2::calibration
29{
31{
32 public:
33 FT0EventsPerBcProcessor(std::shared_ptr<o2::base::GRPGeomRequest> request) : mCCDBRequest(request) {}
34
36 {
38 mSaveToFile = ic.options().get<bool>("save-to-file");
39
40 if (ic.options().hasOption("slot-len-sec")) {
41 mSlotLenSec = ic.options().get<uint32_t>("slot-len-sec");
42 }
43 if (ic.options().hasOption("one-object-per-run")) {
44 mOneObjectPerRun = ic.options().get<bool>("one-object-per-run");
45 }
46 if (ic.options().hasOption("min-entries-number")) {
47 mMinNumberOfEntries = ic.options().get<uint32_t>("min-entries-number");
48 }
49 if (ic.options().hasOption("min-ampl-side-a")) {
50 mMinAmplitudeSideA = ic.options().get<int32_t>("min-ampl-side-a");
51 }
52 if (ic.options().hasOption("min-ampl-side-c")) {
53 mMinAmplitudeSideC = ic.options().get<int32_t>("min-ampl-side-c");
54 }
55 if (ic.options().hasOption("min-sum-of-ampl")) {
56 mMinSumOfAmplitude = ic.options().get<int32_t>("min-sum-of-ampl");
57 }
58
59 mCalibrator = std::make_unique<o2::ft0::EventsPerBcCalibrator>(mMinNumberOfEntries, mMinAmplitudeSideA, mMinAmplitudeSideC, mMinSumOfAmplitude);
60
61 if (mOneObjectPerRun) {
62 LOG(info) << "Only one object will be created at the end of run";
63 mCalibrator->setUpdateAtTheEndOfRunOnly();
64 }
65 if (mOneObjectPerRun == false) {
66 LOG(info) << "Defined slot interval to " << mSlotLenSec << " seconds";
67 mCalibrator->setSlotLengthInSeconds(mSlotLenSec);
68 }
69 }
70
75
77 {
78 const auto& tinfo = pc.services().get<o2::framework::TimingInfo>();
79 if (tinfo.globalRunNumberChanged || mRunNoFromDH < 1) { // new run is starting
80 mRunNoFromDH = tinfo.runNumber;
81 }
83 auto digits = pc.inputs().get<gsl::span<o2::ft0::Digit>>("digits");
84 o2::base::TFIDInfoHelper::fillTFIDInfo(pc, mCalibrator->getCurrentTFInfo());
85 if (digits.size() == 0) {
86 return;
87 }
88 mCalibrator->process(digits);
89 if (mOneObjectPerRun == false) {
90 sendOutput(pc.outputs());
91 }
92 }
93
95 {
96 LOG(info) << "Received end-of-stream, checking for slot to finalize...";
97 mCalibrator->checkSlotsToFinalize();
98 sendOutput(ec.outputs());
99 mCalibrator->initOutput();
100 }
101
103 {
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];
110
111 auto image = o2::ccdb::CcdbApi::createObjectImage(&payload, info.get());
112 LOG(info) << "Sending object " << info->getPath() << "/" << info->getFileName() << " of size " << image->size()
113 << " bytes, valid for " << info->getStartValidityTimestamp() << " : " << info->getEndValidityTimestamp();
114 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "EventsPerBc", idx}, *image.get());
115 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "EventsPerBc", idx}, *info.get());
116 if (mSaveToFile) {
117 std::string fnout = fmt::format("ft0eventsPerBC_run_{}_{}_{}.root", mRunNoFromDH, info->getStartValidityTimestamp(), info->getEndValidityTimestamp());
118 try {
119 TFile flout(fnout.c_str(), "recreate");
120 flout.WriteObjectAny(&payload, "o2::ft0::EventsPerBc", o2::ccdb::CcdbApi::CCDBOBJECT_ENTRY);
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);
123 flout.Close();
124 } catch (const std::exception& ex) {
125 LOGP(error, "failed to store object to file {}, error: {}", fnout, ex.what());
126 }
127 }
128 }
129
130 if (tvxHists.size()) {
131 mCalibrator->initOutput();
132 }
133 }
134
135 private:
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;
146};
147} // namespace o2::calibration
148#endif
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
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)
Definition CcdbApi.h:103
static constexpr const char * CCDBOBJECT_ENTRY
Definition CcdbApi.h:337
GLeglImageOES image
Definition glcorearb.h:4021
static void fillTFIDInfo(o2::framework::ProcessingContext &pc, o2::dataformats::TFIDInfo &ti)
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
Definition Utils.h:44
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
Definition Utils.h:43
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::vector< Digit > digits