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) : mCCDBRequest(req), mRunNumber(runnumber) {}
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 }
51
52 void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj) final
53 {
55 }
56
58 {
60 o2::base::TFIDInfoHelper::fillTFIDInfo(pc, mCalibrator->getCurrentTFInfo());
61 auto const data = pc.inputs().get<o2::tof::Diagnostic*>("input");
62 LOG(debug) << "Processing TF " << mCalibrator->getCurrentTFInfo().tfCounter;
63 mCalibrator->process<o2::tof::Diagnostic>(*data);
64 sendOutput(pc.outputs());
65 }
66
68 {
69 LOG(info) << "Finalizing calibration";
70 mCalibrator->checkSlotsToFinalize(o2::calibration::INFINITE_TF);
71 sendOutput(ec.outputs());
72 }
73
74 private:
75 std::unique_ptr<o2::tof::TOFDiagnosticCalibrator> mCalibrator;
76 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
77 int mRunNumber = -1;
78
79 //________________________________________________________________
80 void sendOutput(DataAllocator& output)
81 {
82 // extract CCDB infos and calibration objects, convert it to TMemFile and send them to the output
83 // TODO in principle, this routine is generic, can be moved to Utils.h
85 const auto& payloadVec = mCalibrator->getDiagnosticVector();
86 auto& infoVec = mCalibrator->getDiagnosticInfoVector(); // use non-const version as we update it
87 assert(payloadVec.size() == infoVec.size());
88 for (uint32_t i = 0; i < payloadVec.size(); i++) {
89 auto& w = infoVec[i];
90 auto image = o2::ccdb::CcdbApi::createObjectImage(&payloadVec[i], &w);
91 LOG(info) << "Sending object " << w.getPath() << "/" << w.getFileName() << " of size " << image->size()
92 << " bytes, valid for " << w.getStartValidityTimestamp() << " : " << w.getEndValidityTimestamp();
93 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "TOF_Diagnostic", i}, *image.get()); // vector<char>
94 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "TOF_Diagnostic", i}, w); // root-serialized
95 }
96 if (payloadVec.size()) {
97 mCalibrator->initOutput(); // reset the outputs once they are already sent
98 }
99 }
100};
101
102} // namespace calibration
103
104namespace framework
105{
106
107DataProcessorSpec getTOFDiagnosticCalibDeviceSpec(int runnumber)
108{
111
112 std::vector<OutputSpec> outputs;
113 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBPayload, "TOF_Diagnostic"}, Lifetime::Sporadic);
114 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBWrapper, "TOF_Diagnostic"}, Lifetime::Sporadic);
115 std::vector<InputSpec> inputs{{"input", "TOF", "DIAFREQ"}};
116
117 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(true, // orbitResetTime
118 true, // GRPECS=true
119 false, // GRPLHCIF
120 false, // GRPMagField
121 false, // askMatLUT
123 inputs);
124 return DataProcessorSpec{
125 "tof-diagnostic-calibration",
126 inputs,
127 outputs,
128 AlgorithmSpec{adaptFromTask<device>(ccdbRequest, runnumber)},
129 Options{
130 {"tf-per-slot", VariantType::UInt32, 5u, {"number of TFs per calibration time slot"}},
131 {"max-delay", VariantType::UInt32, 3u, {"number of slots in past to consider"}}}};
132}
133
134} // namespace framework
135} // namespace o2
136
137#endif
Utils and constants for calibration and related workflows.
int32_t i
Helper for geometry and GRP related CCDB requests.
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
std::ostringstream debug
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
TOFDiagnosticCalibDevice(std::shared_ptr< o2::base::GRPGeomRequest > req, int runnumber=-1)
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
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 TFIDInfo.h:20
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"