Project
Loading...
Searching...
No Matches
LaserTracksCalibratorSpec.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_TPC_LaserTracksCalibratorSpec_H
13#define O2_TPC_LaserTracksCalibratorSpec_H
14
17
21#include "Framework/Task.h"
25#include "CCDB/CcdbApi.h"
26#include "CCDB/CcdbObjectInfo.h"
28
29using namespace o2::framework;
30
31namespace o2::tpc
32{
33
35{
36 public:
37 LaserTracksCalibratorDevice(std::shared_ptr<o2::base::GRPGeomRequest> req) : mCCDBRequest(req) {}
39 {
41 const int minTFs = ic.options().get<int>("min-tfs");
42 const auto slotL = ic.options().get<uint32_t>("tf-per-slot");
43 const auto delay = ic.options().get<uint32_t>("max-delay");
44 const bool debug = ic.options().get<bool>("write-debug");
45
46 mCalibrator = std::make_unique<LaserTracksCalibrator>(minTFs);
47 mCalibrator->setSlotLength(slotL);
48 mCalibrator->setMaxSlotsDelay(delay);
49 mCalibrator->setWriteDebug(debug);
50 }
51
53 {
55 const auto dph = o2::header::get<o2::framework::DataProcessingHeader*>(pc.inputs().get("laserTracks").header);
56 o2::base::TFIDInfoHelper::fillTFIDInfo(pc, mCalibrator->getCurrentTFInfo());
57 auto data = pc.inputs().get<gsl::span<TrackTPC>>("laserTracks");
58 LOGP(detail, "Processing TF {} and {} tracks", mCalibrator->getCurrentTFInfo().tfCounter, data.size());
59
60 mCalibrator->process(data);
61
62 if (mCalibrator->hasCalibrationData()) {
63 sendOutput(pc.outputs());
64 }
65 }
66
67 void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj) final
68 {
70 }
71
73 {
74 LOGP(info, "LaserTracksCalibratorDevice::endOfStream: Finalizing calibration");
75 mCalibrator->checkSlotsToFinalize(o2::calibration::INFINITE_TF);
76 sendOutput(ec.outputs());
77 }
78
79 private:
80 std::unique_ptr<LaserTracksCalibrator> mCalibrator;
81 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
82
83 //________________________________________________________________
84 void sendOutput(DataAllocator& output)
85 {
87 const auto& calibrations = mCalibrator->getCalibPerSlot();
89 for (uint32_t iCalib = 0; iCalib < calibrations.size(); ++iCalib) {
90 const auto& object = calibrations[iCalib];
91 if (!object.isValid()) {
92 LOGP(error, "Invalid Laser calibration (corrections: A-side={}, C-side={}, NTracks: A-side={} C-side={}), will NOT upload to CCDB", object.dvCorrectionA, object.dvCorrectionC, object.nTracksA, object.nTracksC);
93 continue;
94 }
97
98 w.setPath("TPC/Calib/LaserTracks");
99 w.setStartValidityTimestamp(object.firstTime);
100 //w.setEndValidityTimestamp(object.lastTime);
101 w.setEndValidityTimestamp(timeEnd);
102
103 LOGP(info, "Sending object {} / {} of size {} bytes, valid for {} : {} ", w.getPath(), w.getFileName(), image->size(), w.getStartValidityTimestamp(), w.getEndValidityTimestamp());
104 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, "TPC_CalibLtr", iCalib}, *image.get());
105 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, "TPC_CalibLtr", iCalib}, w);
106 }
107 mCalibrator->initOutput();
108 }
109};
110
112{
115
116 std::vector<OutputSpec> outputs;
117 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBPayload, "TPC_CalibLtr"}, Lifetime::Sporadic);
118 outputs.emplace_back(ConcreteDataTypeMatcher{o2::calibration::Utils::gDataOriginCDBWrapper, "TPC_CalibLtr"}, Lifetime::Sporadic);
119 std::vector<InputSpec> inputs{{"laserTracks", "TPC", "LASERTRACKS"}};
120 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(true, // orbitResetTime
121 true, // GRPECS=true
122 false, // GRPLHCIF
123 false, // GRPMagField
124 false, // askMatLUT
126 inputs);
127 return DataProcessorSpec{
128 "tpc-laser-tracks-calibrator",
129 inputs,
130 outputs,
131 AlgorithmSpec{adaptFromTask<device>(ccdbRequest)},
132 Options{
133 {"tf-per-slot", VariantType::UInt32, 5000u, {"number of TFs per calibration time slot"}},
134 {"max-delay", VariantType::UInt32, 3u, {"number of slots in past to consider"}},
135 {"min-tfs", VariantType::Int, 100, {"minimum number of TFs with enough laser tracks to finalize a slot"}},
136 {"write-debug", VariantType::Bool, false, {"write a debug output tree."}},
137 }};
138}
139
140} // namespace o2::tpc
141
142#endif
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
time slot calibration using laser tracks
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)
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
Definition CcdbApi.h:103
static constexpr long INFINITE_TIMESTAMP
LaserTracksCalibratorDevice(std::shared_ptr< o2::base::GRPGeomRequest > req)
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
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
std::vector< ConfigParamSpec > Options
Global TPC definitions and constants.
Definition SimTraits.h:167
DataProcessorSpec getLaserTracksCalibrator()
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