Project
Loading...
Searching...
No Matches
TDCCalibSpec.cxx
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
15
16#include <iostream>
17#include <vector>
18#include <string>
19#include <filesystem>
22#include "CCDB/CcdbApi.h"
23#include "Framework/Logger.h"
46
47using namespace o2::framework;
48
49namespace o2
50{
51namespace zdc
52{
53
55{
56 mTimer.Stop();
57 mTimer.Reset();
58}
59
61{
62 mTimer.Stop();
63 mTimer.Reset();
64}
65
67{
68 mVerbosity = ic.options().get<int>("verbosity-level");
69 mWorker.setVerbosity(mVerbosity);
70 mTimer.Start(false);
71}
72
74{
75 // we call these methods just to trigger finaliseCCDB callback
76 pc.inputs().get<o2::zdc::ZDCTDCParam*>("tdccalib");
77 pc.inputs().get<o2::zdc::TDCCalibConfig*>("tdccalibconfig");
78}
79
81{
82 if (matcher == ConcreteDataMatcher("ZDC", "TDCCALIB", 0)) {
83 // TDC calibration object
84 auto* config = (const o2::zdc::ZDCTDCParam*)obj;
85 if (mVerbosity > DbgZero) {
86 config->print();
87 }
88 mWorker.setTDCParam(config);
89 }
90 if (matcher == ConcreteDataMatcher("ZDC", "TDCCALIBCONFIG", 0)) {
91 // TDC calibration configuration
92 auto* config = (const o2::zdc::TDCCalibConfig*)obj;
93 if (mVerbosity > DbgZero) {
94 config->print();
95 }
96 mWorker.setTDCCalibConfig(config);
97 }
98}
99
101{
102 if (!mInitialized) {
103 mInitialized = true;
105 mOutput = &(pc.outputs());
106 mHistoFileMetaData = std::make_unique<o2::dataformats::FileMetaData>();
107 mHistoFileMetaData->setDataTakingContext(pc.services().get<o2::framework::DataTakingContext>());
108 mTimer.Stop();
109 mTimer.Reset();
110 mTimer.Start(false);
111 }
112 if (mRunStartTime == 0) {
113 const auto& tinfo = pc.services().get<o2::framework::TimingInfo>();
114 mRunStartTime = tinfo.creation; // approximate time in ms
115 mRunNumber = tinfo.runNumber;
116 }
117 std::vector<InputSpec> filterHisto = {{"tdc_1dh", ConcreteDataTypeMatcher{"ZDC", "TDC_1DH"}, Lifetime::Timeframe}};
118 for (auto const& inputRef : InputRecordWalker(pc.inputs(), filterHisto)) {
119 auto const* dh = framework::DataRefUtils::getHeader<o2::header::DataHeader*>(inputRef);
120 o2::dataformats::FlatHisto1D<float> histoView(pc.inputs().get<gsl::span<float>>(inputRef));
121 mWorker.add(dh->subSpecification, histoView);
122 }
123 auto data = pc.inputs().get<TDCCalibData>("tdccalibdata");
124 mWorker.process(data);
125}
126
128{
129 mWorker.endOfRun();
130 mTimer.Stop();
131 sendOutput(ec);
132 LOGF(info, "ZDC TDC calibration total timing: Cpu: %.3e Real: %.3e s in %d slots", mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1); // added by me
133}
134
135//________________________________________________________________
137{
138 std::string fn = "ZDC_TDCCalib";
140
141 // extract CCDB infos and calibration objects, convert it to TMemFile and send them to the output
142 // TODO in principle, this routine is generic, can be moved to Utils.h
144 const auto& payload = mWorker.getTDCParamUpd(); // new
145 auto& info = mWorker.getCcdbObjectInfo();
146 const auto& opt = CalibParamZDC::Instance();
147 opt.updateCcdbObjectInfo(info);
148
149 auto image = o2::ccdb::CcdbApi::createObjectImage<ZDCTDCParam>(&payload, &info); // new
150 LOG(info) << "Sending object " << info.getPath() << "/" << info.getFileName() << " of size " << image->size()
151 << " bytes, valid for " << info.getStartValidityTimestamp() << " : " << info.getEndValidityTimestamp();
152 if (mVerbosity > DbgMinimal) {
153 payload.print();
154 }
155 mOutput->snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "ZDC_TDCcalib", 0}, *image.get()); // vector<char>
156 mOutput->snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "ZDC_TDCcalib", 0}, info); // root-serlized
157 // TODO: reset the outputs once they are already sent (is it necessary?)
158 // mWorker.init();
159
160 if (opt.rootOutput == true) {
161 mOutputDir = opt.outputDir;
162 if (mOutputDir.compare("/dev/null")) {
163 mHistoFileName = fmt::format("{}{}{}_{}.root", mOutputDir, mOutputDir.back() == '/' ? "" : "/", fn, mRunNumber);
164 int rval = mWorker.write(mHistoFileName);
165 if (rval) {
166 LOG(error) << "Cannot create output file " << mHistoFileName;
167 return;
168 }
169 std::string metaFileDir = opt.metaFileDir;
170 if (metaFileDir.compare("/dev/null")) {
171 mHistoFileMetaData->fillFileData(mHistoFileName);
172 mHistoFileMetaData->type = "calib";
173 mHistoFileMetaData->priority = "high";
174 std::string metaFileNameTmp = metaFileDir + (metaFileDir.back() == '/' ? "" : "/") + fmt::format("{}_{}.tmp", fn, mRunNumber);
175 std::string metaFileName = metaFileDir + (metaFileDir.back() == '/' ? "" : "/") + fmt::format("{}_{}.done", fn, mRunNumber);
176 try {
177 std::ofstream metaFileOut(metaFileNameTmp);
178 metaFileOut << *mHistoFileMetaData.get();
179 metaFileOut.close();
180 std::filesystem::rename(metaFileNameTmp, metaFileName);
181 } catch (std::exception const& e) {
182 LOG(error) << "Failed to store ZDC meta data file " << metaFileName << ", reason: " << e.what();
183 }
184 LOG(info) << "Stored metadata file " << metaFileName << ".done";
185 } else {
186 LOG(info) << "Did not store metafile as meta-dir=" << metaFileDir;
187 }
188 } else {
189 LOG(warn) << "Do not create output file since output dir is " << mOutputDir;
190 }
191 }
192}
193
195{
196 using device = o2::zdc::TDCCalibSpec;
198
199 std::vector<InputSpec> inputs;
200 inputs.emplace_back("tdccalibconfig", "ZDC", "TDCCALIBCONFIG", 0, Lifetime::Condition, o2::framework::ccdbParamSpec(fmt::format("{}", o2::zdc::CCDBPathTDCCalibConfig.data())));
201 inputs.emplace_back("tdccalib", "ZDC", "TDCCALIB", 0, Lifetime::Condition, o2::framework::ccdbParamSpec(fmt::format("{}", o2::zdc::CCDBPathTDCCalib.data())));
202 inputs.emplace_back("tdccalibdata", "ZDC", "TDCCALIBDATA", 0, Lifetime::Sporadic);
203 inputs.emplace_back("tdc_1dh", ConcreteDataTypeMatcher{"ZDC", "TDC_1DH"}, Lifetime::Sporadic);
204
205 std::vector<OutputSpec> outputs;
206 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBPayload, "ZDC_TDCcalib"}, Lifetime::Sporadic);
207 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBWrapper, "ZDC_TDCcalib"}, Lifetime::Sporadic);
208
209 return DataProcessorSpec{
210 "zdc-tdccalib",
211 inputs,
212 outputs,
213 AlgorithmSpec{adaptFromTask<device>()},
214 Options{{"verbosity-level", o2::framework::VariantType::Int, 1, {"Verbosity level"}}}};
215}
216
217} // namespace zdc
218} // namespace o2
#define verbosity
Class to describe fired triggered and/or stored channels for the BC and to refer to channel data.
ZDC calibration common parameters.
A helper class to iteratate over all parts of all input routes.
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
Definition of the Names Generator class.
Class to describe pedestal data accumulated over the orbit.
Class to describe reconstructed ZDC event (single BC with signal in one of detectors)
ZDC reconstruction parameters.
Configuration of ZDC TDC calibration procedure.
TDC calibration intermediate data.
ZDC TDC calibratin.
Parameters to correct TDCs (produced by QA)
Container class to store NTimeBinsPerBC ADC values of single ZDC channel.
void snapshot(const Output &spec, T const &object)
ConfigParamRegistry const & options()
Definition InitContext.h:33
A helper class to iteratate over all parts of all input routes.
decltype(auto) get(R binding, int part=0) const
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
void sendOutput(o2::framework::EndOfStreamContext &ec)
void run(o2::framework::ProcessingContext &pc) final
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj) final
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
void init(o2::framework::InitContext &ic) final
void updateTimeDependentParams(o2::framework::ProcessingContext &pc)
void add(int ih, o2::dataformats::FlatHisto1D< float > &h1)
Definition TDCCalib.cxx:165
CcdbObjectInfo & getCcdbObjectInfo()
Definition TDCCalib.h:61
void setTDCParam(const ZDCTDCParam *param)
Definition TDCCalib.h:63
void setVerbosity(int v)
Definition TDCCalib.h:68
void setTDCCalibConfig(const TDCCalibConfig *param)
Definition TDCCalib.h:65
const ZDCTDCParam & getTDCParamUpd() const
Definition TDCCalib.h:56
int write(const std::string fn="ZDCTDCCalib.root")
Definition TDCCalib.cxx:196
int process(const gsl::span< const o2::zdc::BCRecData > &bcrec, const gsl::span< const o2::zdc::ZDCEnergy > &energy, const gsl::span< const o2::zdc::ZDCTDCData > &tdc, const gsl::span< const uint16_t > &info)
GLeglImageOES image
Definition glcorearb.h:4021
GLboolean * data
Definition glcorearb.h:298
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ConfigParamSpec > Options
struct o2::upgrades_utils::@463 zdc
structure to keep FT0 information
framework::DataProcessorSpec getTDCCalibSpec()
const std::string CCDBPathTDCCalibConfig
Definition Constants.h:222
const std::string CCDBPathTDCCalib
Definition Constants.h:221
constexpr int DbgMinimal
Definition Constants.h:208
constexpr int DbgZero
Definition Constants.h:207
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
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"