Project
Loading...
Searching...
No Matches
TOFDiagnosticCalibratorSpec.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_TOF_DIAGNOSTIC_CALIBRATOR_H
13#define O2_TOF_DIAGNOSTIC_CALIBRATOR_H
14
17
21#include "Framework/Task.h"
25#include "CCDB/CcdbApi.h"
26#include "CCDB/CcdbObjectInfo.h"
29
30using namespace o2::framework;
31
32namespace o2
33{
34namespace calibration
35{
36
38{
39 public:
40 TOFDiagnosticCalibDevice(std::shared_ptr<o2::base::GRPGeomRequest> req, int runnumber = -1, int rowinMin = 100000) : mCCDBRequest(req), mRunNumber(runnumber), mMinROwin(rowinMin) {}
42 {
44 auto slotL = ic.options().get<uint32_t>("tf-per-slot");
45 auto delay = ic.options().get<uint32_t>("max-delay");
46 mCalibrator = std::make_unique<o2::tof::TOFDiagnosticCalibrator>();
47 mCalibrator->setSlotLength(slotL);
48 mCalibrator->setMaxSlotsDelay(delay);
49 mCalibrator->setRunNumber(mRunNumber);
50 mCalibrator->setMinROwin(mMinROwin);
51 }
52
53 void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj) final
54 {
56 }
57
59 {
61 o2::base::TFIDInfoHelper::fillTFIDInfo(pc, mCalibrator->getCurrentTFInfo());
62 auto const data = pc.inputs().get<o2::tof::Diagnostic*>("input");
63 LOG(debug) << "Processing TF " << mCalibrator->getCurrentTFInfo().tfCounter;
64 mCalibrator->process<o2::tof::Diagnostic>(*data);
65 sendOutput(pc.outputs());
66 }
67
69 {
70 LOG(info) << "Finalizing calibration";
71 mCalibrator->checkSlotsToFinalize(o2::calibration::INFINITE_TF);
72 sendOutput(ec.outputs());
73 }
74
75 private:
76 std::unique_ptr<o2::tof::TOFDiagnosticCalibrator> mCalibrator;
77 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
78 int mRunNumber = -1;
79 int mMinROwin = 100000;
80
81 //________________________________________________________________
82 void sendOutput(DataAllocator& output)
83 {
84 // extract CCDB infos and calibration objects, convert it to TMemFile and send them to the output
85 // TODO in principle, this routine is generic, can be moved to Utils.h
87 const auto& payloadVec = mCalibrator->getDiagnosticVector();
88 auto& infoVec = mCalibrator->getDiagnosticInfoVector(); // use non-const version as we update it
89 assert(payloadVec.size() == infoVec.size());
90 for (uint32_t i = 0; i < payloadVec.size(); i++) {
91 auto& w = infoVec[i];
92 auto image = o2::ccdb::CcdbApi::createObjectImage(&payloadVec[i], &w);
93 LOG(info) << "Sending object " << w.getPath() << "/" << w.getFileName() << " of size " << image->size()
94 << " bytes, valid for " << w.getStartValidityTimestamp() << " : " << w.getEndValidityTimestamp();
95 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "TOF_Diagnostic", i}, *image.get()); // vector<char>
96 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "TOF_Diagnostic", i}, w); // root-serialized
97 }
98 if (payloadVec.size()) {
99 mCalibrator->initOutput(); // reset the outputs once they are already sent
100 }
101 }
102};
103
104} // namespace calibration
105
106namespace framework
107{
108
109DataProcessorSpec getTOFDiagnosticCalibDeviceSpec(int runnumber, int rowinMin)
110{
113
114 std::vector<OutputSpec> outputs;
115 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBPayload, "TOF_Diagnostic"}, Lifetime::Sporadic);
116 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBWrapper, "TOF_Diagnostic"}, Lifetime::Sporadic);
117 std::vector<InputSpec> inputs{{"input", "TOF", "DIAFREQ"}};
118
119 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(true, // orbitResetTime
120 true, // GRPECS=true
121 false, // GRPLHCIF
122 false, // GRPMagField
123 false, // askMatLUT
125 inputs);
126 return DataProcessorSpec{
127 "tof-diagnostic-calibration",
128 inputs,
129 outputs,
130 AlgorithmSpec{adaptFromTask<device>(ccdbRequest, runnumber, rowinMin)},
131 Options{
132 {"tf-per-slot", VariantType::UInt32, 5u, {"number of TFs per calibration time slot"}},
133 {"max-delay", VariantType::UInt32, 3u, {"number of slots in past to consider"}}}};
134}
135
136} // namespace framework
137} // namespace o2
138
139#endif
Utils and constants for calibration and related workflows.
std::ostringstream debug
int32_t i
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 endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void init(o2::framework::InitContext &ic) final
void run(o2::framework::ProcessingContext &pc) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
TOFDiagnosticCalibDevice(std::shared_ptr< o2::base::GRPGeomRequest > req, int runnumber=-1, int rowinMin=100000)
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
Definition CcdbApi.h:103
Diagnostic class for TOF.
Definition Diagnostic.h:32
GLeglImageOES image
Definition glcorearb.h:4021
GLboolean * data
Definition glcorearb.h:298
GLubyte GLubyte GLubyte GLubyte w
Definition glcorearb.h:852
constexpr TFType INFINITE_TF
Definition TimeSlot.h:30
Defining PrimaryVertex explicitly as messageable.
Definition Cartesian.h:288
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
Definition Utils.h:44
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
Definition Utils.h:43
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"