Project
Loading...
Searching...
No Matches
GPUWorkflowTPC.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
14
16#include "Headers/DataHeader.h"
17#include "Framework/WorkflowSpec.h" // o2::framework::mergeInputs
25#include "Framework/Logger.h"
45#include "TPCBase/RDHUtils.h"
47#include "GPUO2InterfaceQA.h"
48#include "GPUO2Interface.h"
49#include "GPUO2InterfaceUtils.h"
50#include "CalibdEdxContainer.h"
51#include "ORTRootSerializer.h"
52#include "GPUNewCalibValues.h"
53#include "TPCPadGainCalib.h"
54#include "TPCZSLinkMapping.h"
56#include "TPCBase/Sector.h"
57#include "TPCBase/Utils.h"
64#include "Algorithm/Parser.h"
69#include <filesystem>
70#include <memory> // for make_shared
71#include <vector>
72#include <iomanip>
73#include <stdexcept>
74#include <regex>
75#include <sys/types.h>
76#include <sys/stat.h>
77#include <fcntl.h>
78#include <chrono>
81#include <TStopwatch.h>
82#include <TObjArray.h>
83#include <TH1F.h>
84#include <TH2F.h>
85#include <TH1D.h>
86#include <TGraphAsymmErrors.h>
87
88using namespace o2::framework;
89using namespace o2::header;
90using namespace o2::gpu;
91using namespace o2::base;
92using namespace o2::dataformats;
93
94namespace o2::gpu
95{
96
97void GPURecoWorkflowSpec::initFunctionTPCCalib(InitContext& ic)
98{
99 mTPCDeadChannelMapCreator.reset(new o2::tpc::DeadChannelMapCreator());
100 const auto deadMapSource = (mSpecConfig.tpcDeadMapSources > -1) ? static_cast<tpc::SourcesDeadMap>(mSpecConfig.tpcDeadMapSources) : tpc::SourcesDeadMap::All;
101 mTPCDeadChannelMapCreator->init();
102 mTPCDeadChannelMapCreator->setSource(deadMapSource);
103
104 mCalibObjects.mdEdxCalibContainer.reset(new o2::tpc::CalibdEdxContainer());
105 mTPCVDriftHelper.reset(new o2::tpc::VDriftHelper());
106
108 mConfig->configCalib.fastTransform = mCalibObjects.mFastTransformBuffer.get();
109
110 if (mConfParam->dEdxDisableTopologyPol) {
111 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB");
112 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
113 }
114
115 if (mConfParam->dEdxDisableThresholdMap) {
116 LOGP(info, "Disabling loading of threshold map from CCDB");
117 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalThresholdMap);
118 }
119
120 if (mConfParam->dEdxDisableGainMap) {
121 LOGP(info, "Disabling loading of gain map from CCDB");
122 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap);
123 }
124
125 if (mConfParam->dEdxDisableResidualGainMap) {
126 LOGP(info, "Disabling loading of residual gain map from CCDB");
127 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalResidualGainMap);
128 }
129
130 if (mConfParam->dEdxDisableResidualGain) {
131 LOGP(info, "Disabling loading of residual gain calibration from CCDB");
132 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain);
133 }
134
135 if (mConfParam->dEdxUseFullGainMap) {
136 LOGP(info, "Using the full gain map for correcting the cluster charge during calculation of the dE/dx");
137 mCalibObjects.mdEdxCalibContainer->setUsageOfFullGainMap(true);
138 }
139
140 if (mConfParam->gainCalibDisableCCDB) {
141 LOGP(info, "Disabling loading the TPC pad gain calibration from the CCDB");
142 mUpdateGainMapCCDB = false;
143 }
144
145 // load from file
146 if (!mConfParam->dEdxPolTopologyCorrFile.empty() || !mConfParam->dEdxCorrFile.empty() || !mConfParam->dEdxSplineTopologyCorrFile.empty()) {
147 if (!mConfParam->dEdxPolTopologyCorrFile.empty()) {
148 LOGP(info, "Loading dE/dx polynomial track topology correction from file: {}", mConfParam->dEdxPolTopologyCorrFile);
149 mCalibObjects.mdEdxCalibContainer->loadPolTopologyCorrectionFromFile(mConfParam->dEdxPolTopologyCorrFile);
150
151 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB as it was already loaded from input file");
152 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
153
154 if (std::filesystem::exists(mConfParam->thresholdCalibFile)) {
155 LOG(info) << "Loading tpc zero supression map from file " << mConfParam->thresholdCalibFile;
156 const auto* thresholdMap = o2::tpc::utils::readCalPads(mConfParam->thresholdCalibFile, "ThresholdMap")[0];
157 mCalibObjects.mdEdxCalibContainer->setZeroSupresssionThreshold(*thresholdMap);
158
159 LOGP(info, "Disabling loading of threshold map from CCDB as it was already loaded from input file");
160 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalThresholdMap);
161 } else {
162 if (not mConfParam->thresholdCalibFile.empty()) {
163 LOG(warn) << "Couldn't find tpc zero supression file " << mConfParam->thresholdCalibFile << ". Not setting any zero supression.";
164 }
165 LOG(info) << "Setting default zero supression map";
166 mCalibObjects.mdEdxCalibContainer->setDefaultZeroSupresssionThreshold();
167 }
168 } else if (!mConfParam->dEdxSplineTopologyCorrFile.empty()) {
169 LOGP(info, "Loading dE/dx spline track topology correction from file: {}", mConfParam->dEdxSplineTopologyCorrFile);
170 mCalibObjects.mdEdxCalibContainer->loadSplineTopologyCorrectionFromFile(mConfParam->dEdxSplineTopologyCorrFile);
171
172 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB as splines were loaded from input file");
173 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
174 }
175 if (!mConfParam->dEdxCorrFile.empty()) {
176 LOGP(info, "Loading dEdx correction from file: {}", mConfParam->dEdxCorrFile);
177 mCalibObjects.mdEdxCalibContainer->loadResidualCorrectionFromFile(mConfParam->dEdxCorrFile);
178
179 LOGP(info, "Disabling loading of residual gain calibration from CCDB as it was already loaded from input file");
180 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain);
181 }
182 }
183
184 if (mConfParam->dEdxPolTopologyCorrFile.empty() && mConfParam->dEdxSplineTopologyCorrFile.empty()) {
185 // setting default topology correction to allocate enough memory
186 LOG(info) << "Setting default dE/dx polynomial track topology correction to allocate enough memory";
187 mCalibObjects.mdEdxCalibContainer->setDefaultPolTopologyCorrection();
188 }
189
190 GPUO2InterfaceConfiguration& config = *mConfig.get();
191 mConfig->configCalib.dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
192
193 if (std::filesystem::exists(mConfParam->gainCalibFile)) {
194 LOG(info) << "Loading tpc gain correction from file " << mConfParam->gainCalibFile;
195 const auto* gainMap = o2::tpc::utils::readCalPads(mConfParam->gainCalibFile, "GainMap")[0];
196 mCalibObjects.mTPCPadGainCalib = GPUO2InterfaceUtils::getPadGainCalib(*gainMap);
197
198 LOGP(info, "Disabling loading the TPC gain correction map from the CCDB as it was already loaded from input file");
199 mUpdateGainMapCCDB = false;
200 } else {
201 if (not mConfParam->gainCalibFile.empty()) {
202 LOG(warn) << "Couldn't find tpc gain correction file " << mConfParam->gainCalibFile << ". Not applying any gain correction.";
203 }
204 mCalibObjects.mTPCPadGainCalib = GPUO2InterfaceUtils::getPadGainCalibDefault();
205 mCalibObjects.mTPCPadGainCalib->getGainCorrection(30, 5, 5);
206 }
207 mConfig->configCalib.tpcPadGain = mCalibObjects.mTPCPadGainCalib.get();
208
209 mTPCZSLinkMapping.reset(new TPCZSLinkMapping{tpc::Mapper::instance()});
210 mConfig->configCalib.tpcZSLinkMapping = mTPCZSLinkMapping.get();
211}
212
213void GPURecoWorkflowSpec::finaliseCCDBTPC(ConcreteDataMatcher& matcher, void* obj)
214{
215 const o2::tpc::CalibdEdxContainer* dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
216
217 auto copyCalibsToBuffer = [this, dEdxCalibContainer]() {
218 if (!(mdEdxCalibContainerBufferNew)) {
219 mdEdxCalibContainerBufferNew = std::make_unique<o2::tpc::CalibdEdxContainer>();
220 mdEdxCalibContainerBufferNew->cloneFromObject(*dEdxCalibContainer, nullptr);
221 }
222 };
223
224 if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADGAINFULL", 0)) {
225 LOGP(info, "Updating gain map from CCDB");
226 const auto* gainMap = static_cast<o2::tpc::CalDet<float>*>(obj);
227
228 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap) && mSpecConfig.outputTracks) {
229 copyCalibsToBuffer();
230 const float minGain = 0;
231 const float maxGain = 2;
232 mdEdxCalibContainerBufferNew.get()->setGainMap(*gainMap, minGain, maxGain);
233 }
234
235 if (mUpdateGainMapCCDB && mSpecConfig.caClusterer) {
236 mTPCPadGainCalibBufferNew = GPUO2InterfaceUtils::getPadGainCalib(*gainMap);
237 }
238
239 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADGAINRESIDUAL", 0)) {
240 LOGP(info, "Updating residual gain map from CCDB");
241 copyCalibsToBuffer();
242 const auto* gainMapResidual = static_cast<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>(obj);
243 const float minResidualGain = 0.7f;
244 const float maxResidualGain = 1.3f;
245 mdEdxCalibContainerBufferNew.get()->setGainMapResidual(gainMapResidual->at("GainMap"), minResidualGain, maxResidualGain);
246 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADTHRESHOLD", 0)) {
247 LOGP(info, "Updating threshold map from CCDB");
248 copyCalibsToBuffer();
249 const auto* thresholdMap = static_cast<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>(obj);
250 mdEdxCalibContainerBufferNew.get()->setZeroSupresssionThreshold(thresholdMap->at("ThresholdMap"));
251 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TOPOLOGYGAIN", 0) && !(dEdxCalibContainer->isTopologyCorrectionSplinesSet())) {
252 LOGP(info, "Updating Q topology correction from CCDB");
253 copyCalibsToBuffer();
254 const auto* topologyCorr = static_cast<o2::tpc::CalibdEdxTrackTopologyPolContainer*>(obj);
255 o2::tpc::CalibdEdxTrackTopologyPol calibTrackTopology;
256 calibTrackTopology.setFromContainer(*topologyCorr);
257 mdEdxCalibContainerBufferNew->setPolTopologyCorrection(calibTrackTopology);
258 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TIMEGAIN", 0)) {
259 LOGP(info, "Updating residual gain correction from CCDB");
260 copyCalibsToBuffer();
261 const auto* residualCorr = static_cast<o2::tpc::CalibdEdxCorrection*>(obj);
262 mdEdxCalibContainerBufferNew->setResidualCorrection(*residualCorr);
263 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "IDCPADFLAGS", 0)) {
264 copyCalibsToBuffer();
265 const auto* padFlags = static_cast<o2::tpc::CalDet<o2::tpc::PadFlags>*>(obj);
266 mTPCDeadChannelMapCreator->setDeadChannelMapIDCPadStatus(*padFlags);
267 mTPCDeadChannelMapCreator->finalizeDeadChannelMap();
268 mdEdxCalibContainerBufferNew.get()->setDeadChannelMap(mTPCDeadChannelMapCreator->getDeadChannelMap());
269 LOGP(info, "Updating dead channel map with IDC pad flags: {} / {} dead pads from pad flags / total",
270 mTPCDeadChannelMapCreator->getDeadChannelMapIDC().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
271 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TPCRUNINFO", 0)) {
272 copyCalibsToBuffer();
273 const auto* fee = static_cast<o2::tpc::FEEConfig*>(obj);
274 mTPCDeadChannelMapCreator->setDeadChannelMapFEEConfig(*fee);
275 mTPCDeadChannelMapCreator->finalizeDeadChannelMap();
276 mdEdxCalibContainerBufferNew.get()->setDeadChannelMap(mTPCDeadChannelMapCreator->getDeadChannelMap());
277 LOGP(info,
278 "Updating dead channel map with the FEE info (tag {}) loaded via TPCRUNINFO"
279 " for creation time {}: {} / {} dead pads from FEE info / total, with",
280 std::underlying_type_t<o2::tpc::FEEConfig::Tags>(fee->tag), mCreationForCalib,
281 mTPCDeadChannelMapCreator->getDeadChannelMapFEE().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
282 } else if (mTPCVDriftHelper->accountCCDBInputs(matcher, obj)) {
283 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_C1", 0)) {
284 mConfig->configCalib.nnClusterizerNetworks[0] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
285 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[0])->getONNXModelSize() << " bytes loaded for NN clusterizer: classification_c1";
286 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_C2", 0)) {
287 mConfig->configCalib.nnClusterizerNetworks[0] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
288 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[0])->getONNXModelSize() << " bytes loaded for NN clusterizer: classification_c2";
289 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_R1", 0)) {
290 mConfig->configCalib.nnClusterizerNetworks[1] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
291 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[1])->getONNXModelSize() << " bytes loaded for NN clusterizer: regression_c1";
292 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_R2", 0)) {
293 mConfig->configCalib.nnClusterizerNetworks[2] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
294 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[2])->getONNXModelSize() << " bytes loaded for NN clusterizer: regression_c2";
295 }
296}
297
298template <>
299bool GPURecoWorkflowSpec::fetchCalibsCCDBTPC<GPUCalibObjectsConst>(ProcessingContext& pc, GPUCalibObjectsConst& newCalibObjects, calibObjectStruct& oldCalibObjects)
300{
301 // update calibrations for clustering and tracking
302 mCreationForCalib = pc.services().get<o2::framework::TimingInfo>().creation;
303 bool mustUpdate = false;
304 if ((mSpecConfig.outputTracks || mSpecConfig.caClusterer) && !mConfParam->disableCalibUpdates) {
305 const o2::tpc::CalibdEdxContainer* dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
306
307 // this calibration is defined for clustering and tracking
308 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap) || mUpdateGainMapCCDB) {
309 pc.inputs().get<o2::tpc::CalDet<float>*>("tpcgain");
310 }
311
312 if (mSpecConfig.outputTracks || mSpecConfig.caClusterer) {
313 mTPCCutAtTimeBin = mConfParam->overrideTPCTimeBinCur > 0 ? mConfParam->overrideTPCTimeBinCur : pc.inputs().get<o2::tpc::AltroSyncSignal*>("tpcaltrosync")->getTB2Cut(pc.services().get<o2::framework::TimingInfo>().tfCounter);
314 }
315
316 // these calibrations are only defined for the tracking
317 if (mSpecConfig.outputTracks) {
318 // update the calibration objects in case they changed in the CCDB
320 pc.inputs().get<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>("tpcthreshold");
321 }
322
323 if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::IDCPadStatus)) {
324 pc.inputs().get<o2::tpc::CalDet<tpc::PadFlags>*>("tpcidcpadflags");
325 }
326
327 if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::FEEConfig)) {
328 pc.inputs().get<o2::tpc::FEEConfig*>("tpcruninfo");
329 }
330
332 pc.inputs().get<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>("tpcgainresidual");
333 }
334
335 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol)) {
337 }
338
339 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain)) {
340 pc.inputs().get<o2::tpc::CalibdEdxCorrection*>("tpctimegain");
341 }
342
343 if (mSpecConfig.outputTracks) {
344 mTPCVDriftHelper->extractCCDBInputs(pc);
345 float lumiCTP = (mSpecConfig.enableCTPLumi) ? pc.inputs().get<float>("lumiCTP") : 0;
346 mCalibObjects.mInstLumiCTP = lumiCTP;
347
348 // get the raw buffer and reinterpret as TPCFastTransformPOD
349 oldCalibObjects.mFastTransformBuffer = std::move(mCalibObjects.mFastTransformBuffer); // OLD buffer alive ✓
350 auto const& raw = pc.inputs().get<const char*>("corrMap");
351 const auto* newMap = &gpu::TPCFastTransformPOD::get(raw); // NEW map from DPL
353 std::memcpy(buffer.get(), newMap, newMap->size()); // copy NEW map ✓
354 mCalibObjects.mFastTransformBuffer = std::move(buffer);
355 newCalibObjects.fastTransform = mCalibObjects.mFastTransformBuffer.get();
356 mustUpdate = true;
357 }
358 if (mTPCVDriftHelper->isUpdated()) {
359 // VDrift updated but no new map — just acknowledge, map already has correct VDrift
360 LOGP(info, "VDrift updated (factor {} wrt reference {} from source {}) but map already up to date", mTPCVDriftHelper->getVDriftObject().corrFact, mTPCVDriftHelper->getVDriftObject().refVDrift, mTPCVDriftHelper->getSourceName());
361 mTPCVDriftHelper->acknowledgeUpdate();
362 }
363 }
364
365 if (mdEdxCalibContainerBufferNew) {
366 oldCalibObjects.mdEdxCalibContainer = std::move(mCalibObjects.mdEdxCalibContainer);
367 mCalibObjects.mdEdxCalibContainer = std::move(mdEdxCalibContainerBufferNew);
368 newCalibObjects.dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
369 mustUpdate = true;
370 }
371
372 if (mTPCPadGainCalibBufferNew) {
373 oldCalibObjects.mTPCPadGainCalib = std::move(mCalibObjects.mTPCPadGainCalib);
374 mCalibObjects.mTPCPadGainCalib = std::move(mTPCPadGainCalibBufferNew);
375 newCalibObjects.tpcPadGain = mCalibObjects.mTPCPadGainCalib.get();
376 mustUpdate = true;
377 }
378
379 // NN clusterizer networks
380 if (mSpecConfig.nnLoadFromCCDB) {
381
382 if (mSpecConfig.nnEvalMode[0] == "c1") {
383 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_classification_c1");
384 } else if (mSpecConfig.nnEvalMode[0] == "c2") {
385 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_classification_c2");
386 }
387
388 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_regression_c1");
389 if (mSpecConfig.nnEvalMode[1] == "r2") {
390 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_regression_c2");
391 }
392 }
393 }
394 return mustUpdate;
395}
396
397void GPURecoWorkflowSpec::doTrackTuneTPC(GPUTrackingInOutPointers& ptrs, char* buffout)
398{
400 const auto& trackTune = TrackTunePar::Instance();
401 if (ptrs.nOutputTracksTPCO2 && trackTune.sourceLevelTPC &&
402 (trackTune.useTPCInnerCorr || trackTune.useTPCOuterCorr ||
403 trackTune.tpcCovInnerType != TrackTunePar::AddCovType::Disable || trackTune.tpcCovOuterType != TrackTunePar::AddCovType::Disable)) {
404 if (((const void*)ptrs.outputTracksTPCO2) != ((const void*)buffout)) {
405 throw std::runtime_error("Buffer does not match span");
406 }
407 o2::tpc::TrackTPC* tpcTracks = reinterpret_cast<o2::tpc::TrackTPC*>(buffout);
408 float scale = mCalibObjects.mInstLumiCTP;
409 if (scale < 0.f) {
410 LOGP(warning, "Negative scale factor for TPC covariance correction, setting it to zero");
411 scale = 0.f;
412 }
413 auto diagInner = trackTune.getCovInnerTotal(scale);
414 auto diagOuter = trackTune.getCovOuterTotal(scale);
415
416 for (uint32_t itr = 0; itr < ptrs.nOutputTracksTPCO2; itr++) {
417 auto& trc = tpcTracks[itr];
418 if (trackTune.useTPCInnerCorr) {
419 trc.updateParams(trackTune.tpcParInner);
420 }
421 if (trackTune.tpcCovInnerType != TrackTunePar::AddCovType::Disable) {
422 trc.updateCov(diagInner, trackTune.tpcCovInnerType == TrackTunePar::AddCovType::WithCorrelations);
423 }
424 if (trackTune.useTPCOuterCorr) {
425 trc.getParamOut().updateParams(trackTune.tpcParOuter);
426 }
427 if (trackTune.tpcCovOuterType != TrackTunePar::AddCovType::Disable) {
428 trc.getParamOut().updateCov(diagOuter, trackTune.tpcCovOuterType == TrackTunePar::AddCovType::WithCorrelations);
429 }
430 }
431 }
432}
433
434} // namespace o2::gpu
Definition of the timebin from which syncronization starts.
Simple interface to the CDB manager.
Definition of container class for dE/dx corrections.
Class of a TPC cluster in TPC-native coordinates (row, time)
Container to store compressed TPC cluster data.
A const (ready only) version of MCTruthContainer.
Wrapper container for different reconstructed object types.
Definition of the TPC Digit.
Helper class for memory management of TPC Data Formats, external from the actual data type classes to...
Definition of class for writing debug informations.
Definition of the GeometryManager class.
o2::raw::RawFileWriter * raw
Helper for geometry and GRP related CCDB requests.
This file provides the structs for storing the factorized IDC values and fourier coefficients to be s...
A helper class to iteratate over all parts of all input routes.
Declarations for the wrapper for the set of cylindrical material layers.
Definition of the Names Generator class.
Class to serialize ONNX objects for ROOT snapshots of CCDB objects at runtime.
Utilities for parsing of data sequences.
Type wrappers for enfording a specific serialization method.
class to create TPC fast transformation
Wrapper class for TPC CA Tracker algorithm.
Configurable params for tracks ad hoc tuning.
Helper class to extract VDrift from different sources.
Helper class to obtain TPC clusters / digits / labels from DPL.
Definitions of TPC Zero Suppression Data Headers.
decltype(auto) get(R binding, int part=0) const
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
static std::unique_ptr< TPCPadGainCalib > getPadGainCalibDefault()
static std::unique_ptr< TPCPadGainCalib > getPadGainCalib(const o2::tpc::CalDet< float > &in)
static TPCFastTransformPOD * create(aligned_unique_buffer_ptr< TPCFastTransformPOD > &destVector, const TPCFastTransform &src)
Create POD transform from old flat-buffer one. Provided vector will serve as a buffer.
bool isCorrectionCCDB(const CalibsdEdx calib) const
bool isTopologyCorrectionSplinesSet() const
returns status if the spline correction is set
calibration class for the track topology correction of the dE/dx using multvariate polynomials
void setFromContainer(const CalibdEdxTrackTopologyPolContainer &container)
static Mapper & instance(const std::string mappingDir="")
Definition Mapper.h:44
static TPCFastTransformHelperO2 * instance()
Singleton.
std::unique_ptr< TPCFastTransform > create(int64_t TimeStamp)
_______________ Main functionality ________________________
GLuint buffer
Definition glcorearb.h:655
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
O2 data header classes and API, v0.1.
Definition DetID.h:49
std::vector< CalPad * > readCalPads(const std::string_view fileName, const std::vector< std::string > &calPadNames)
Definition Utils.cxx:190
@ CalTimeGain
flag for residual dE/dx time dependent gain correction
@ CalTopologyPol
flag for a topology correction using polynomials
@ CalResidualGainMap
flag for applying residual gain map
@ CalThresholdMap
flag for using threshold map
@ CalGainMap
flag for using the gain map to get the correct cluster charge
@ FEEConfig
use fee config
@ IDCPadStatus
use idc pad status map
S< o2::tpc::CalibdEdxContainer >::type * dEdxCalibContainer
S< TPCFastTransformPOD >::type * fastTransform
S< TPCPadGainCalib >::type * tpcPadGain
std::vector< std::string > nnEvalMode
const o2::tpc::TrackTPC * outputTracksTPCO2
simple struct to enable writing the MultivariatePolynomialCT to file
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"