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"
68#include <filesystem>
69#include <memory> // for make_shared
70#include <vector>
71#include <iomanip>
72#include <stdexcept>
73#include <regex>
74#include <sys/types.h>
75#include <sys/stat.h>
76#include <fcntl.h>
77#include <chrono>
80#include <TStopwatch.h>
81#include <TObjArray.h>
82#include <TH1F.h>
83#include <TH2F.h>
84#include <TH1D.h>
85#include <TGraphAsymmErrors.h>
86
87using namespace o2::framework;
88using namespace o2::header;
89using namespace o2::gpu;
90using namespace o2::base;
91using namespace o2::dataformats;
92
93namespace o2::gpu
94{
95
96void GPURecoWorkflowSpec::initFunctionTPCCalib(InitContext& ic)
97{
98 mTPCDeadChannelMapCreator.reset(new o2::tpc::DeadChannelMapCreator());
99 const auto deadMapSource = (mSpecConfig.tpcDeadMapSources > -1) ? static_cast<tpc::SourcesDeadMap>(mSpecConfig.tpcDeadMapSources) : tpc::SourcesDeadMap::All;
100 mTPCDeadChannelMapCreator->init();
101 mTPCDeadChannelMapCreator->setSource(deadMapSource);
102
103 mCalibObjects.mdEdxCalibContainer.reset(new o2::tpc::CalibdEdxContainer());
104 mTPCVDriftHelper.reset(new o2::tpc::VDriftHelper());
105
107 mConfig->configCalib.fastTransform = mCalibObjects.mFastTransformBuffer.get();
108
109 if (mConfParam->dEdxDisableTopologyPol) {
110 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB");
111 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
112 }
113
114 if (mConfParam->dEdxDisableThresholdMap) {
115 LOGP(info, "Disabling loading of threshold map from CCDB");
116 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalThresholdMap);
117 }
118
119 if (mConfParam->dEdxDisableGainMap) {
120 LOGP(info, "Disabling loading of gain map from CCDB");
121 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap);
122 }
123
124 if (mConfParam->dEdxDisableResidualGainMap) {
125 LOGP(info, "Disabling loading of residual gain map from CCDB");
126 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalResidualGainMap);
127 }
128
129 if (mConfParam->dEdxDisableResidualGain) {
130 LOGP(info, "Disabling loading of residual gain calibration from CCDB");
131 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain);
132 }
133
134 if (mConfParam->dEdxUseFullGainMap) {
135 LOGP(info, "Using the full gain map for correcting the cluster charge during calculation of the dE/dx");
136 mCalibObjects.mdEdxCalibContainer->setUsageOfFullGainMap(true);
137 }
138
139 if (mConfParam->gainCalibDisableCCDB) {
140 LOGP(info, "Disabling loading the TPC pad gain calibration from the CCDB");
141 mUpdateGainMapCCDB = false;
142 }
143
144 // load from file
145 if (!mConfParam->dEdxPolTopologyCorrFile.empty() || !mConfParam->dEdxCorrFile.empty() || !mConfParam->dEdxSplineTopologyCorrFile.empty()) {
146 if (!mConfParam->dEdxPolTopologyCorrFile.empty()) {
147 LOGP(info, "Loading dE/dx polynomial track topology correction from file: {}", mConfParam->dEdxPolTopologyCorrFile);
148 mCalibObjects.mdEdxCalibContainer->loadPolTopologyCorrectionFromFile(mConfParam->dEdxPolTopologyCorrFile);
149
150 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB as it was already loaded from input file");
151 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
152
153 if (std::filesystem::exists(mConfParam->thresholdCalibFile)) {
154 LOG(info) << "Loading tpc zero supression map from file " << mConfParam->thresholdCalibFile;
155 const auto* thresholdMap = o2::tpc::utils::readCalPads(mConfParam->thresholdCalibFile, "ThresholdMap")[0];
156 mCalibObjects.mdEdxCalibContainer->setZeroSupresssionThreshold(*thresholdMap);
157
158 LOGP(info, "Disabling loading of threshold map from CCDB as it was already loaded from input file");
159 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalThresholdMap);
160 } else {
161 if (not mConfParam->thresholdCalibFile.empty()) {
162 LOG(warn) << "Couldn't find tpc zero supression file " << mConfParam->thresholdCalibFile << ". Not setting any zero supression.";
163 }
164 LOG(info) << "Setting default zero supression map";
165 mCalibObjects.mdEdxCalibContainer->setDefaultZeroSupresssionThreshold();
166 }
167 } else if (!mConfParam->dEdxSplineTopologyCorrFile.empty()) {
168 LOGP(info, "Loading dE/dx spline track topology correction from file: {}", mConfParam->dEdxSplineTopologyCorrFile);
169 mCalibObjects.mdEdxCalibContainer->loadSplineTopologyCorrectionFromFile(mConfParam->dEdxSplineTopologyCorrFile);
170
171 LOGP(info, "Disabling loading of track topology correction using polynomials from CCDB as splines were loaded from input file");
172 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol);
173 }
174 if (!mConfParam->dEdxCorrFile.empty()) {
175 LOGP(info, "Loading dEdx correction from file: {}", mConfParam->dEdxCorrFile);
176 mCalibObjects.mdEdxCalibContainer->loadResidualCorrectionFromFile(mConfParam->dEdxCorrFile);
177
178 LOGP(info, "Disabling loading of residual gain calibration from CCDB as it was already loaded from input file");
179 mCalibObjects.mdEdxCalibContainer->disableCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain);
180 }
181 }
182
183 if (mConfParam->dEdxPolTopologyCorrFile.empty() && mConfParam->dEdxSplineTopologyCorrFile.empty()) {
184 // setting default topology correction to allocate enough memory
185 LOG(info) << "Setting default dE/dx polynomial track topology correction to allocate enough memory";
186 mCalibObjects.mdEdxCalibContainer->setDefaultPolTopologyCorrection();
187 }
188
189 GPUO2InterfaceConfiguration& config = *mConfig.get();
190 mConfig->configCalib.dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
191
192 if (std::filesystem::exists(mConfParam->gainCalibFile)) {
193 LOG(info) << "Loading tpc gain correction from file " << mConfParam->gainCalibFile;
194 const auto* gainMap = o2::tpc::utils::readCalPads(mConfParam->gainCalibFile, "GainMap")[0];
195 mCalibObjects.mTPCPadGainCalib = GPUO2InterfaceUtils::getPadGainCalib(*gainMap);
196
197 LOGP(info, "Disabling loading the TPC gain correction map from the CCDB as it was already loaded from input file");
198 mUpdateGainMapCCDB = false;
199 } else {
200 if (not mConfParam->gainCalibFile.empty()) {
201 LOG(warn) << "Couldn't find tpc gain correction file " << mConfParam->gainCalibFile << ". Not applying any gain correction.";
202 }
203 mCalibObjects.mTPCPadGainCalib = GPUO2InterfaceUtils::getPadGainCalibDefault();
204 mCalibObjects.mTPCPadGainCalib->getGainCorrection(30, 5, 5);
205 }
206 mConfig->configCalib.tpcPadGain = mCalibObjects.mTPCPadGainCalib.get();
207
208 mTPCZSLinkMapping.reset(new TPCZSLinkMapping{tpc::Mapper::instance()});
209 mConfig->configCalib.tpcZSLinkMapping = mTPCZSLinkMapping.get();
210}
211
212void GPURecoWorkflowSpec::finaliseCCDBTPC(ConcreteDataMatcher& matcher, void* obj)
213{
214 const o2::tpc::CalibdEdxContainer* dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
215
216 auto copyCalibsToBuffer = [this, dEdxCalibContainer]() {
217 if (!(mdEdxCalibContainerBufferNew)) {
218 mdEdxCalibContainerBufferNew = std::make_unique<o2::tpc::CalibdEdxContainer>();
219 mdEdxCalibContainerBufferNew->cloneFromObject(*dEdxCalibContainer, nullptr);
220 }
221 };
222
223 if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADGAINFULL", 0)) {
224 LOGP(info, "Updating gain map from CCDB");
225 const auto* gainMap = static_cast<o2::tpc::CalDet<float>*>(obj);
226
227 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap) && mSpecConfig.outputTracks) {
228 copyCalibsToBuffer();
229 const float minGain = 0;
230 const float maxGain = 2;
231 mdEdxCalibContainerBufferNew.get()->setGainMap(*gainMap, minGain, maxGain);
232 }
233
234 if (mUpdateGainMapCCDB && mSpecConfig.caClusterer) {
235 mTPCPadGainCalibBufferNew = GPUO2InterfaceUtils::getPadGainCalib(*gainMap);
236 }
237
238 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADGAINRESIDUAL", 0)) {
239 LOGP(info, "Updating residual gain map from CCDB");
240 copyCalibsToBuffer();
241 const auto* gainMapResidual = static_cast<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>(obj);
242 const float minResidualGain = 0.7f;
243 const float maxResidualGain = 1.3f;
244 mdEdxCalibContainerBufferNew.get()->setGainMapResidual(gainMapResidual->at("GainMap"), minResidualGain, maxResidualGain);
245 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "PADTHRESHOLD", 0)) {
246 LOGP(info, "Updating threshold map from CCDB");
247 copyCalibsToBuffer();
248 const auto* thresholdMap = static_cast<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>(obj);
249 mdEdxCalibContainerBufferNew.get()->setZeroSupresssionThreshold(thresholdMap->at("ThresholdMap"));
250 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TOPOLOGYGAIN", 0) && !(dEdxCalibContainer->isTopologyCorrectionSplinesSet())) {
251 LOGP(info, "Updating Q topology correction from CCDB");
252 copyCalibsToBuffer();
253 const auto* topologyCorr = static_cast<o2::tpc::CalibdEdxTrackTopologyPolContainer*>(obj);
254 o2::tpc::CalibdEdxTrackTopologyPol calibTrackTopology;
255 calibTrackTopology.setFromContainer(*topologyCorr);
256 mdEdxCalibContainerBufferNew->setPolTopologyCorrection(calibTrackTopology);
257 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TIMEGAIN", 0)) {
258 LOGP(info, "Updating residual gain correction from CCDB");
259 copyCalibsToBuffer();
260 const auto* residualCorr = static_cast<o2::tpc::CalibdEdxCorrection*>(obj);
261 mdEdxCalibContainerBufferNew->setResidualCorrection(*residualCorr);
262 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "IDCPADFLAGS", 0)) {
263 copyCalibsToBuffer();
264 const auto* padFlags = static_cast<o2::tpc::CalDet<o2::tpc::PadFlags>*>(obj);
265 mTPCDeadChannelMapCreator->setDeadChannelMapIDCPadStatus(*padFlags);
266 mTPCDeadChannelMapCreator->finalizeDeadChannelMap();
267 mdEdxCalibContainerBufferNew.get()->setDeadChannelMap(mTPCDeadChannelMapCreator->getDeadChannelMap());
268 LOGP(info, "Updating dead channel map with IDC pad flags: {} / {} dead pads from pad flags / total",
269 mTPCDeadChannelMapCreator->getDeadChannelMapIDC().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
270 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TPCRUNINFO", 0)) {
271 copyCalibsToBuffer();
272 const auto* fee = static_cast<o2::tpc::FEEConfig*>(obj);
273 mTPCDeadChannelMapCreator->setDeadChannelMapFEEConfig(*fee);
274 mTPCDeadChannelMapCreator->finalizeDeadChannelMap();
275 mdEdxCalibContainerBufferNew.get()->setDeadChannelMap(mTPCDeadChannelMapCreator->getDeadChannelMap());
276 LOGP(info,
277 "Updating dead channel map with the FEE info (tag {}) loaded via TPCRUNINFO"
278 " for creation time {}: {} / {} dead pads from FEE info / total, with",
279 std::underlying_type_t<o2::tpc::FEEConfig::Tags>(fee->tag), mCreationForCalib,
280 mTPCDeadChannelMapCreator->getDeadChannelMapFEE().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
281 } else if (mTPCVDriftHelper->accountCCDBInputs(matcher, obj)) {
282 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_C1", 0)) {
283 mConfig->configCalib.nnClusterizerNetworks[0] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
284 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[0])->getONNXModelSize() << " bytes loaded for NN clusterizer: classification_c1";
285 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_C2", 0)) {
286 mConfig->configCalib.nnClusterizerNetworks[0] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
287 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[0])->getONNXModelSize() << " bytes loaded for NN clusterizer: classification_c2";
288 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_R1", 0)) {
289 mConfig->configCalib.nnClusterizerNetworks[1] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
290 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[1])->getONNXModelSize() << " bytes loaded for NN clusterizer: regression_c1";
291 } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "NNCLUSTERIZER_R2", 0)) {
292 mConfig->configCalib.nnClusterizerNetworks[2] = static_cast<o2::tpc::ORTRootSerializer*>(obj);
293 LOG(info) << "(NN CLUS) " << (mConfig->configCalib.nnClusterizerNetworks[2])->getONNXModelSize() << " bytes loaded for NN clusterizer: regression_c2";
294 }
295}
296
297template <>
298bool GPURecoWorkflowSpec::fetchCalibsCCDBTPC<GPUCalibObjectsConst>(ProcessingContext& pc, GPUCalibObjectsConst& newCalibObjects, calibObjectStruct& oldCalibObjects)
299{
300 // update calibrations for clustering and tracking
301 mCreationForCalib = pc.services().get<o2::framework::TimingInfo>().creation;
302 bool mustUpdate = false;
303 if ((mSpecConfig.outputTracks || mSpecConfig.caClusterer) && !mConfParam->disableCalibUpdates) {
304 const o2::tpc::CalibdEdxContainer* dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
305
306 // this calibration is defined for clustering and tracking
307 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalGainMap) || mUpdateGainMapCCDB) {
308 pc.inputs().get<o2::tpc::CalDet<float>*>("tpcgain");
309 }
310
311 if (mSpecConfig.outputTracks || mSpecConfig.caClusterer) {
312 mTPCCutAtTimeBin = mConfParam->overrideTPCTimeBinCur > 0 ? mConfParam->overrideTPCTimeBinCur : pc.inputs().get<o2::tpc::AltroSyncSignal*>("tpcaltrosync")->getTB2Cut(pc.services().get<o2::framework::TimingInfo>().tfCounter);
313 }
314
315 // these calibrations are only defined for the tracking
316 if (mSpecConfig.outputTracks) {
317 // update the calibration objects in case they changed in the CCDB
319 pc.inputs().get<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>("tpcthreshold");
320 }
321
322 if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::IDCPadStatus)) {
323 pc.inputs().get<o2::tpc::CalDet<tpc::PadFlags>*>("tpcidcpadflags");
324 }
325
326 if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::FEEConfig)) {
327 pc.inputs().get<o2::tpc::FEEConfig*>("tpcruninfo");
328 }
329
331 pc.inputs().get<std::unordered_map<std::string, o2::tpc::CalDet<float>>*>("tpcgainresidual");
332 }
333
334 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalTopologyPol)) {
336 }
337
338 if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalTimeGain)) {
339 pc.inputs().get<o2::tpc::CalibdEdxCorrection*>("tpctimegain");
340 }
341
342 if (mSpecConfig.outputTracks) {
343 mTPCVDriftHelper->extractCCDBInputs(pc);
344 float lumiCTP = (mSpecConfig.enableCTPLumi) ? pc.inputs().get<float>("lumiCTP") : 0;
345 mCalibObjects.mInstLumiCTP = lumiCTP;
346
347 // get the raw buffer and reinterpret as TPCFastTransformPOD
348 oldCalibObjects.mFastTransformBuffer = std::move(mCalibObjects.mFastTransformBuffer); // OLD buffer alive ✓
349 auto const& raw = pc.inputs().get<const char*>("corrMap");
350 const auto* newMap = &gpu::TPCFastTransformPOD::get(raw); // NEW map from DPL
352 std::memcpy(buffer.get(), newMap, newMap->size()); // copy NEW map ✓
353 mCalibObjects.mFastTransformBuffer = std::move(buffer);
354 newCalibObjects.fastTransform = mCalibObjects.mFastTransformBuffer.get();
355 mustUpdate = true;
356 }
357 if (mTPCVDriftHelper->isUpdated()) {
358 // VDrift updated but no new map — just acknowledge, map already has correct VDrift
359 LOGP(info, "VDrift updated (factor {} wrt reference {} from source {}) but map already up to date", mTPCVDriftHelper->getVDriftObject().corrFact, mTPCVDriftHelper->getVDriftObject().refVDrift, mTPCVDriftHelper->getSourceName());
360 mTPCVDriftHelper->acknowledgeUpdate();
361 }
362 }
363
364 if (mdEdxCalibContainerBufferNew) {
365 oldCalibObjects.mdEdxCalibContainer = std::move(mCalibObjects.mdEdxCalibContainer);
366 mCalibObjects.mdEdxCalibContainer = std::move(mdEdxCalibContainerBufferNew);
367 newCalibObjects.dEdxCalibContainer = mCalibObjects.mdEdxCalibContainer.get();
368 mustUpdate = true;
369 }
370
371 if (mTPCPadGainCalibBufferNew) {
372 oldCalibObjects.mTPCPadGainCalib = std::move(mCalibObjects.mTPCPadGainCalib);
373 mCalibObjects.mTPCPadGainCalib = std::move(mTPCPadGainCalibBufferNew);
374 newCalibObjects.tpcPadGain = mCalibObjects.mTPCPadGainCalib.get();
375 mustUpdate = true;
376 }
377
378 // NN clusterizer networks
379 if (mSpecConfig.nnLoadFromCCDB) {
380
381 if (mSpecConfig.nnEvalMode[0] == "c1") {
382 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_classification_c1");
383 } else if (mSpecConfig.nnEvalMode[0] == "c2") {
384 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_classification_c2");
385 }
386
387 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_regression_c1");
388 if (mSpecConfig.nnEvalMode[1] == "r2") {
389 pc.inputs().get<o2::tpc::ORTRootSerializer*>("nn_regression_c2");
390 }
391 }
392 }
393 return mustUpdate;
394}
395
396void GPURecoWorkflowSpec::doTrackTuneTPC(GPUTrackingInOutPointers& ptrs, char* buffout)
397{
399 const auto& trackTune = TrackTunePar::Instance();
400 if (ptrs.nOutputTracksTPCO2 && trackTune.sourceLevelTPC &&
401 (trackTune.useTPCInnerCorr || trackTune.useTPCOuterCorr ||
402 trackTune.tpcCovInnerType != TrackTunePar::AddCovType::Disable || trackTune.tpcCovOuterType != TrackTunePar::AddCovType::Disable)) {
403 if (((const void*)ptrs.outputTracksTPCO2) != ((const void*)buffout)) {
404 throw std::runtime_error("Buffer does not match span");
405 }
406 o2::tpc::TrackTPC* tpcTracks = reinterpret_cast<o2::tpc::TrackTPC*>(buffout);
407 float scale = mCalibObjects.mInstLumiCTP;
408 if (scale < 0.f) {
409 LOGP(warning, "Negative scale factor for TPC covariance correction, setting it to zero");
410 scale = 0.f;
411 }
412 auto diagInner = trackTune.getCovInnerTotal(scale);
413 auto diagOuter = trackTune.getCovOuterTotal(scale);
414
415 for (uint32_t itr = 0; itr < ptrs.nOutputTracksTPCO2; itr++) {
416 auto& trc = tpcTracks[itr];
417 if (trackTune.useTPCInnerCorr) {
418 trc.updateParams(trackTune.tpcParInner);
419 }
420 if (trackTune.tpcCovInnerType != TrackTunePar::AddCovType::Disable) {
421 trc.updateCov(diagInner, trackTune.tpcCovInnerType == TrackTunePar::AddCovType::WithCorrelations);
422 }
423 if (trackTune.useTPCOuterCorr) {
424 trc.getParamOut().updateParams(trackTune.tpcParOuter);
425 }
426 if (trackTune.tpcCovOuterType != TrackTunePar::AddCovType::Disable) {
427 trc.getParamOut().updateCov(diagOuter, trackTune.tpcCovOuterType == TrackTunePar::AddCovType::WithCorrelations);
428 }
429 }
430 }
431}
432
433} // 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.
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"