17#ifndef ALICEO2_FIT_DIGITBLOCKFIT_H_
18#define ALICEO2_FIT_DIGITBLOCKFIT_H_
38namespace DigitBlockFIThelper
43template <
typename ChannelDataType,
typename PMDataType>
46 pmData.pmBits = chData.ChainQTC;
48 pmData.time = chData.CFDTime;
49 pmData.charge = chData.QTCAmpl;
52template <
typename ChannelDataType,
typename PMDataType>
53auto ConvertChData2EventData(
const ChannelDataType& chData, PMDataType& pmData,
int channelID) -> std::enable_if_t<std::is_same<decltype(std::declval<ChannelDataType>().mChargeADC), int16_t>
::value>
55 pmData.pmBits = chData.mFEEBits;
57 pmData.time = chData.mTime;
58 pmData.charge = chData.mChargeADC;
63template <
typename DigitType,
typename TCMDataType>
66 tcmData.orA = digit.mTriggers.getOrA();
67 tcmData.orC = digit.mTriggers.getOrC();
68 tcmData.sCen = digit.mTriggers.getSCen();
69 tcmData.cen = digit.mTriggers.getCen();
70 tcmData.vertex = digit.mTriggers.getVertex();
71 tcmData.laser = digit.mTriggers.getLaser();
72 tcmData.outputsAreBlocked = digit.mTriggers.getOutputsAreBlocked();
73 tcmData.dataIsValid = digit.mTriggers.getDataIsValid();
74 tcmData.nChanA = digit.mTriggers.getNChanA();
75 tcmData.nChanC = digit.mTriggers.getNChanC();
76 const int64_t thresholdSignedInt17bit = 65535;
77 if (digit.mTriggers.getAmplA() > thresholdSignedInt17bit) {
78 tcmData.amplA = thresholdSignedInt17bit;
80 tcmData.amplA = digit.mTriggers.getAmplA();
82 if (digit.mTriggers.getAmplC() > thresholdSignedInt17bit) {
83 tcmData.amplC = thresholdSignedInt17bit;
85 tcmData.amplC = digit.mTriggers.getAmplC();
87 tcmData.timeA = digit.mTriggers.getTimeA();
88 tcmData.timeC = digit.mTriggers.getTimeC();
94template <
typename DigitType,
typename TCMDataType>
97 using TriggerType =
decltype(digit.mTriggers);
98 auto& trg = digit.mTriggers;
99 trg.setTriggers((
bool)tcmData.orA, (
bool)tcmData.orC, (
bool)tcmData.vertex, (
bool)tcmData.cen, (
bool)tcmData.sCen,
101 (int16_t)tcmData.timeA, (int16_t)tcmData.timeC, (
bool)tcmData.laser, (
bool)tcmData.outputsAreBlocked, (
bool)tcmData.dataIsValid);
106template <
typename LookupTableType,
typename ChannelDataType,
typename PMDataType,
typename RawDataMetricType>
107auto ConvertEventData2ChData(std::vector<ChannelDataType>& vecChData,
const PMDataType& pmData, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<std::is_same<decltype(std::declval<ChannelDataType>().QTCAmpl), int16_t>
::value>
110 const auto globalChID = LookupTableType::Instance().getChannel(linkID, ep, pmData.channelID,
isValid);
112 vecChData.emplace_back(
static_cast<uint8_t>(globalChID),
static_cast<int>(pmData.time),
static_cast<int>(pmData.charge),
static_cast<uint8_t>(pmData.pmBits));
114 static int warningCount = 0;
115 metric.addStatusBit(RawDataMetricType::EStatusBits::kWrongChannelMapping);
116 if (warningCount++ < 100) {
117 LOG(warning) <<
"Incorrect global channel! linkID: " << linkID <<
" | EndPoint: " << ep <<
" | LocalChID: " <<
static_cast<uint16_t>(pmData.channelID);
122template <
typename LookupTableType,
typename ChannelDataType,
typename PMDataType,
typename RawDataMetricType>
123auto ConvertEventData2ChData(std::vector<ChannelDataType>& vecChData,
const PMDataType& pmData, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<std::is_same<decltype(std::declval<ChannelDataType>().mChargeADC), int16_t>
::value>
126 const auto globalChID = LookupTableType::Instance().getChannel(linkID, ep, pmData.channelID,
isValid);
128 vecChData.emplace_back(
static_cast<uint8_t>(globalChID),
static_cast<int>(pmData.time),
static_cast<int>(pmData.charge),
static_cast<uint8_t>(pmData.pmBits));
130 metric.addStatusBit(RawDataMetricType::EStatusBits::kWrongChannelMapping);
131 static int warningCount = 0;
132 if (warningCount++ < 100) {
133 LOG(warning) <<
"Incorrect global channel! linkID: " << linkID <<
" | EndPoint: " << ep <<
" | LocalChID: " <<
static_cast<uint16_t>(pmData.channelID);
141 return digit.mIntRecord;
146template <
typename LookupTableType,
typename DigitType,
typename ChannelDataType>
153 template <
typename... Args>
161 template <
class DataBlockType,
typename RawDataMetricType>
162 auto processDigits(
const DataBlockType& dataBlock, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockPM, DataBlockType>::value>
164 const int nElements = dataBlock.DataPM::mNelements;
165 for (
int iEventData = 0; iEventData < nElements; iEventData++) {
166 const auto& pmData = dataBlock.DataPM::mData[iEventData];
171 template <
class DataBlockType,
typename RawDataMetricType>
172 auto processDigits(
const DataBlockType& dataBlock, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockTCM, DataBlockType>::value>
175 auto& tcmData = dataBlock.DataTCM::mData[0];
180 template <
class DataBlockType>
181 auto decomposeDigits(
const typename RawDataMetric::Status_t& status)
const -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockPM, DataBlockType>::value, std::map<typename LookupTable_t::Topo_t, DataBlockType>>
183 using Topo_t =
typename LookupTable_t::Topo_t;
185 std::map<Topo_t, DataBlockType> mapResult;
186 std::map<Topo_t, std::reference_wrapper<const ChannelDataType>> mapTopo2SortedCh;
187 std::map<Topo_t, std::size_t> mapTopoCounter;
190 auto topoPM = LookupTable_t::Instance().getTopoPM(
static_cast<int>(
entry.getChannelID()));
191 mapTopo2SortedCh.insert({topoPM,
entry});
192 auto pairInserted = mapTopoCounter.insert({LookupTable_t::makeGlobalTopo(topoPM), 0});
193 pairInserted.first->second++;
196 for (
const auto&
entry : mapTopo2SortedCh) {
197 auto pairInserted = mapResult.insert({LookupTable_t::makeGlobalTopo(
entry.first), {}});
198 DataBlockType& refDataBlock = pairInserted.first->second;
199 if (pairInserted.second) {
201 refDataBlock.HeaderPM::mStatusBits |= status;
205 refDataBlock.HeaderPM::mData[0].startDescriptor = 0x0;
207 refDataBlock.HeaderPM::mData[0].startDescriptor = 0xf;
209 std::size_t nElements = mapTopoCounter.find(pairInserted.first->first)->second;
210 std::size_t nWords = nElements / 2 + nElements % 2;
213 refDataBlock.HeaderPM::mData[0].nGBTWords = 0;
215 refDataBlock.HeaderPM::mData[0].nGBTWords = nWords;
217 refDataBlock.HeaderPM::mNelements = 1;
220 refDataBlock.DataPM::mStatusBits |= status;
221 auto& refPos = refDataBlock.DataPM::mNelements;
222 auto& refData = refDataBlock.DataPM::mData[refPos];
224 int localChannelID = LookupTable_t::Instance().getLocalChannelID(
entry.first);
227 localChannelID = 0xf;
234 template <
class DataBlockType>
235 auto decomposeDigits(
const typename RawDataMetric::Status_t& status)
const -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockTCM, DataBlockType>::value, std::pair<typename LookupTable_t::Topo_t, DataBlockType>>
237 DataBlockType dataBlockTCM{};
239 dataBlockTCM.HeaderTCM::mStatusBits |= status;
243 dataBlockTCM.HeaderTCM::mData[0].startDescriptor = 0x0;
245 dataBlockTCM.HeaderTCM::mData[0].startDescriptor = 0xf;
249 dataBlockTCM.HeaderTCM::mData[0].nGBTWords = 0;
251 dataBlockTCM.HeaderTCM::mData[0].nGBTWords = 1;
254 dataBlockTCM.HeaderTCM::mNelements = 1;
255 auto& refTCMdata = dataBlockTCM.DataTCM::mData[0];
256 dataBlockTCM.DataTCM::mStatusBits |= status;
257 dataBlockTCM.DataTCM::mNelements = 1;
260 return {LookupTable_t::Instance().getTopoTCM(), dataBlockTCM};
263 template <
typename DigitBlockProcType>
266 assert(inputTree !=
nullptr);
267 std::vector<DigitBlockFIT_t> vecResult;
268 std::vector<typename DigitBlockBase_t::Digit_t> vecDigit;
269 std::vector<typename DigitBlockBase_t::Digit_t>* ptrVecDigit = &vecDigit;
272 inputTree->SetBranchAddress(
decltype(vecDigit)::value_type::sDigitBranchName, &ptrVecDigit);
273 inputTree->SetBranchAddress(
decltype(vecChannelData)::value_type::sDigitBranchName, &ptrVecChannelData);
274 for (
int iEntry = 0; iEntry < inputTree->GetEntries(); iEntry++) {
275 inputTree->GetEntry(iEntry);
276 LOG(detail) <<
"Processing TF " << iEntry;
277 digitBlockProc.processDigitBlockPerTF(DigitBlockBase_t::template makeDigitBlock<DigitBlockFIT_t>(vecDigit, vecChannelData));
280 template <
typename VecDigitType,
typename VecChannelDataType,
typename VecDetTrigInputType>
281 void getDigits(VecDigitType& vecDigits, VecChannelDataType& vecChannelData, VecDetTrigInputType& vecTriggerInput)
286 template <
typename VecDigitType,
typename VecChannelDataType>
287 void getDigits(VecDigitType& vecDigits, VecChannelDataType& vecChannelData)
291 static void print(
const std::vector<DigitType>& vecDigit,
const std::vector<ChannelDataType>& vecChannelData)
293 for (
const auto& digit : vecDigit) {
295 LOG(info) <<
"______________CHANNEL DATA____________";
296 for (
int iChData = digit.ref.getFirstEntry(); iChData < digit.ref.getFirstEntry() + digit.ref.getEntries(); iChData++) {
297 vecChannelData[iChData].printLog();
299 LOG(info) <<
"______________________________________";
309template <
typename LookupTableType,
typename DigitType,
typename ChannelDataType,
typename TriggersExtType>
317 template <
typename... Args>
325 template <
class DataBlockType,
typename RawDataMetricType>
326 auto processDigits(
const DataBlockType& dataBlock, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockPM, DataBlockType>::value>
328 const int nElements = dataBlock.DataPM::mNelements;
329 for (
int iEventData = 0; iEventData < nElements; iEventData++) {
330 const auto& pmData = dataBlock.DataPM::mData[iEventData];
335 template <
class DataBlockType,
typename RawDataMetricType>
336 auto processDigits(
const DataBlockType& dataBlock, RawDataMetricType& metric,
int linkID,
int ep) -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockTCMext, DataBlockType>::value>
338 auto& tcmData = dataBlock.DataTCM::mData[0];
341 const int nElements = dataBlock.DataTCMext::mNelements;
342 for (
int iTriggerWord = 0; iTriggerWord < nElements; iTriggerWord++) {
348 template <
class DataBlockType>
349 auto decomposeDigits(
const typename RawDataMetric::Status_t& status)
const -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockPM, DataBlockType>::value, std::map<typename LookupTable_t::Topo_t, DataBlockType>>
351 using Topo_t =
typename LookupTable_t::Topo_t;
352 std::map<Topo_t, DataBlockType> mapResult;
353 std::map<Topo_t, std::reference_wrapper<const ChannelDataType>> mapTopo2SortedCh;
354 std::map<Topo_t, std::size_t> mapTopoCounter;
357 auto topoPM = LookupTable_t::Instance().getTopoPM(
static_cast<int>(
entry.getChannelID()));
358 mapTopo2SortedCh.insert({topoPM,
entry});
359 auto pairInserted = mapTopoCounter.insert({LookupTable_t::makeGlobalTopo(topoPM), 0});
360 pairInserted.first->second++;
363 for (
const auto&
entry : mapTopo2SortedCh) {
364 auto pairInserted = mapResult.insert({LookupTable_t::makeGlobalTopo(
entry.first), {}});
365 auto& refDataBlock = pairInserted.first->second;
366 if (pairInserted.second) {
371 refDataBlock.HeaderPM::mData[0].startDescriptor = 0x0;
373 refDataBlock.HeaderPM::mData[0].startDescriptor = 0xf;
375 std::size_t nElements = mapTopoCounter.find(pairInserted.first->first)->second;
376 std::size_t nWords = nElements / 2 + nElements % 2;
379 refDataBlock.HeaderPM::mData[0].nGBTWords = 0;
381 refDataBlock.HeaderPM::mData[0].nGBTWords = nWords;
383 refDataBlock.HeaderPM::mNelements = 1;
386 auto& refPos = refDataBlock.DataPM::mNelements;
387 auto& refData = refDataBlock.DataPM::mData[refPos];
389 int localChannelID = LookupTable_t::Instance().getLocalChannelID(
entry.first);
392 localChannelID = 0xf;
399 template <
class DataBlockType>
400 auto decomposeDigits(
const typename RawDataMetric::Status_t& status)
const -> std::enable_if_t<DigitBlockHelper::IsSpecOfType<DataBlockTCMext, DataBlockType>::value, std::pair<typename LookupTable_t::Topo_t, DataBlockType>>
402 DataBlockType dataBlockTCM{};
407 dataBlockTCM.HeaderTCMext::mData[0].startDescriptor = 0x0;
409 dataBlockTCM.HeaderTCMext::mData[0].startDescriptor = 0xf;
413 dataBlockTCM.HeaderTCMext::mData[0].nGBTWords = 0;
415 dataBlockTCM.HeaderTCMext::mData[0].nGBTWords = 1;
417 dataBlockTCM.HeaderTCMext::mNelements = 1;
418 auto& refTCMdata = dataBlockTCM.DataTCM::mData[0];
421 dataBlockTCM.DataTCM::mNelements = 1;
424 for (
int i = 0;
i < std::decay<
decltype(dataBlockTCM.DataTCMext::mData[0])>::type::MaxNelements;
i++) {
427 dataBlockTCM.DataTCMext::mNelements = 1;
428 return {LookupTable_t::Instance().getTopoTCM(), dataBlockTCM};
430 template <
typename VecDigitType,
typename VecChannelDataType,
typename VecTriggersExtType,
typename VecDetTrigInputType>
431 void getDigits(VecDigitType& vecDigits, VecChannelDataType& vecChannelData, VecTriggersExtType& vecTriggersExt, VecDetTrigInputType& vecTriggerInput)
434 getDigits(vecDigits, vecChannelData, vecTriggersExt);
436 template <
typename VecDigitType,
typename VecChannelDataType,
typename VecTriggersExtType>
437 void getDigits(VecDigitType& vecDigits, VecChannelDataType& vecChannelData, VecTriggersExtType& vecTriggersExt)
442 static void print(
const std::vector<DigitType>& vecDigit,
const std::vector<ChannelDataType>& vecChannelData,
const std::vector<TriggersExtType>& vecTriggersExt)
444 for (
const auto& digit : vecDigit) {
446 LOG(info) <<
"______________CHANNEL DATA____________";
447 for (
int iChData = digit.ref.getFirstEntry(); iChData < digit.ref.getFirstEntry() + digit.ref.getEntries(); iChData++) {
448 vecChannelData[iChData].printLog();
450 LOG(info) <<
"______________________________________";
452 LOG(info) <<
"______________EXTENDED TRIGGERS____________";
453 for (
const auto& trgExt : vecTriggersExt) {
456 LOG(info) <<
"______________________________________";
unsigned short int uint16_t
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc Replace constant variables static by constexpr expressions Compile RTC in deterministic with NO_FAST_MATH flags and GPUCA_DETERMINISTIC_MODE define Use RTC to optimize GPU code h configStandalone Processing proc_rtctech Use a file lock to serialize access to the cache folder int32_t
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc bool
auto getSubDigits(VecDigit &vecDigits, VecSubDigits &... vecSubDigits) -> std::enable_if_t< sizeof...(VecSubDigits)==sNSubDigits >
auto getSingleSubDigits(T &... vecSingleSubDigits) -> std::enable_if_t< sizeof...(T)==sNSingleSubDigits >
SingleSubDigit_t mSingleSubDigit
DigitBlockHelper::GetSubDigitField< VecSubDigit_t >::vector_type SubDigit_t
void getDigits(VecDigitType &vecDigits, VecChannelDataType &vecChannelData)
auto decomposeDigits(const typename RawDataMetric::Status_t &status) const -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockTCM, DataBlockType >::value, std::pair< typename LookupTable_t::Topo_t, DataBlockType > >
static void print(const std::vector< DigitType > &vecDigit, const std::vector< ChannelDataType > &vecChannelData)
DigitBlockFIT(Args &&... args)
auto processDigits(const DataBlockType &dataBlock, RawDataMetricType &metric, int linkID, int ep) -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockPM, DataBlockType >::value >
DigitBlockBase< DigitType, ChannelDataType > DigitBlockBase_t
DigitBlockFIT(const DigitBlockFIT &other)=default
auto processDigits(const DataBlockType &dataBlock, RawDataMetricType &metric, int linkID, int ep) -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockTCM, DataBlockType >::value >
void getDigits(VecDigitType &vecDigits, VecChannelDataType &vecChannelData, VecDetTrigInputType &vecTriggerInput)
static void processDigitBlocks(TTree *inputTree, DigitBlockProcType &digitBlockProc)
auto decomposeDigits(const typename RawDataMetric::Status_t &status) const -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockPM, DataBlockType >::value, std::map< typename LookupTable_t::Topo_t, DataBlockType > >
LookupTableType LookupTable_t
DigitBlockFIText()=default
~DigitBlockFIText()=default
LookupTableType LookupTable_t
auto decomposeDigits(const typename RawDataMetric::Status_t &status) const -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockTCMext, DataBlockType >::value, std::pair< typename LookupTable_t::Topo_t, DataBlockType > >
static void print(const std::vector< DigitType > &vecDigit, const std::vector< ChannelDataType > &vecChannelData, const std::vector< TriggersExtType > &vecTriggersExt)
void getDigits(VecDigitType &vecDigits, VecChannelDataType &vecChannelData, VecTriggersExtType &vecTriggersExt, VecDetTrigInputType &vecTriggerInput)
auto processDigits(const DataBlockType &dataBlock, RawDataMetricType &metric, int linkID, int ep) -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockTCMext, DataBlockType >::value >
auto decomposeDigits(const typename RawDataMetric::Status_t &status) const -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockPM, DataBlockType >::value, std::map< typename LookupTable_t::Topo_t, DataBlockType > >
auto processDigits(const DataBlockType &dataBlock, RawDataMetricType &metric, int linkID, int ep) -> std::enable_if_t< DigitBlockHelper::IsSpecOfType< DataBlockPM, DataBlockType >::value >
DigitBlockBase< DigitType, ChannelDataType, TriggersExtType > DigitBlockBase_t
void getDigits(VecDigitType &vecDigits, VecChannelDataType &vecChannelData, VecTriggersExtType &vecTriggersExt)
DigitBlockFIText(const DigitBlockFIText &other)=default
DigitBlockFIText(Args &&... args)
GLsizei const GLfloat * value
auto ConvertDigit2TCMData(const DigitType &digit, TCMDataType &tcmData)
auto ConvertEventData2ChData(std::vector< ChannelDataType > &vecChData, const PMDataType &pmData, RawDataMetricType &metric, int linkID, int ep) -> std::enable_if_t< std::is_same< decltype(std::declval< ChannelDataType >().QTCAmpl), int16_t >::value >
auto GetIntRecord(const T &digit)
auto ConvertTCMData2Digit(DigitType &digit, const TCMDataType &tcmData)
auto ConvertChData2EventData(const ChannelDataType &chData, PMDataType &pmData, int channelID) -> std::enable_if_t< std::is_same< decltype(std::declval< ChannelDataType >().QTCAmpl), int16_t >::value >
const track::TrackFitContext< NLayers > & fit
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
bool isValid(std::string alias)
static bool isBitActive(Status_t metric, EStatusBits statusBit)
VectorOfTObjectPtrs other
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"