14#if defined(__has_include)
15#if defined(__linux__) && (defined(__x86_64) || defined(__x86_64__)) && __has_include(<emmintrin.h>) && __has_include(<immintrin.h>) && defined(FT0_DECODER_AVX512)
17#ifndef O2_FT0DATADECODERDPLSPEC_H
18#define O2_FT0DATADECODERPLSPEC_H
48class FT0DataDecoderDPLSpec :
public Task
51 FT0DataDecoderDPLSpec() =
default;
52 ~FT0DataDecoderDPLSpec()
override =
default;
56 static constexpr int sNorbits = 256;
57 static constexpr int sNBC = 3564;
58 static constexpr int sNlinksMax = 24;
59 using NChDataBC_t = std::array<uint32_t, sNBC + 4>;
60 using NChDataOrbitBC_t = std::array<NChDataBC_t, sNlinksMax>;
61 std::array<std::array<uint32_t, 16>, sNlinksMax> mLUT;
62 NChDataOrbitBC_t mPosChDataPerLinkOrbit[sNorbits];
66 auto ccdbUrl = ic.options().get<std::string>(
"ccdb-path");
67 auto lutPath = ic.options().get<std::string>(
"lut-path");
68 mEnableEmptyTFprotection = !ic.options().get<
bool>(
"disable-empty-tf-protection");
69 mVecDigits.resize(sNorbits * sNBC);
70 mVecChannelData.resize(31 * sNorbits * sNBC);
71 mVecTriggers.resize(sNBC);
73 mVecChannelDataBuf.resize(143);
75 LookupTable_t::setCCDBurl(
ccdbUrl);
78 LookupTable_t::setLUTpath(lutPath);
80 LookupTable_t::Instance().printFullMap();
82 const auto& lut = LookupTable_t::Instance().getMapEntryPM2ChannelID();
83 const auto& tcm = LookupTable_t::Instance().getEntryCRU_TCM();
84 mFEEID_TCM = tcm.mLinkID + 12 * tcm.mEndPointID;
85 std::array<uint32_t, 16> tmpChunk;
86 std::fill_n(tmpChunk.begin(), 16, 0xff);
87 std::fill_n(mLUT.begin(), 16, tmpChunk);
88 for (
const auto&
entry : lut) {
91 const auto feeID =
key.mEntryCRU.mLinkID + 12 *
key.mEntryCRU.mEndPointID;
93 if (feeID >= sNlinksMax ||
key.mLocalChannelID >= 16) {
94 LOG(warning) <<
"Incorrect entry: " <<
key.mEntryCRU.mFEEID <<
" " <<
key.mLocalChannelID;
96 mLUT[feeID][
key.mLocalChannelID] =
value;
100 std::vector<o2::ft0::ChannelData> mVecChannelData;
101 std::vector<std::array<o2::ft0::ChannelData, 25 * 216>> mVecChannelDataBuf;
102 std::vector<o2::ft0::Digit> mVecDigits;
103 std::vector<o2::fit::Triggers> mVecTriggers;
104 bool mEnableEmptyTFprotection;
110 std::vector<OutputSpec> outputSpec;
115 inputSpec.emplace_back(
"STFDist",
"FLP",
"DISTSUBTIMEFRAME", 0, Lifetime::Timeframe);
117 std::string dataProcName =
"ft0-datadecoder-dpl";
118 LOG(info) << dataProcName;
123 adaptFromTask<FT0DataDecoderDPLSpec>(),
126 o2::framework::ConfigParamSpec{
"disable-empty-tf-protection", VariantType::Bool,
false, {
"Disable empty TF protection. In case of empty payload within TF, only dummy ChannelData object will be sent."}}}};
A raw page parser for DPL input.
Type wrappers for enfording a specific serialization method.
GLsizei const GLfloat * value
constexpr o2::header::DataOrigin gDataOriginFT0
uint8_t itsSharedClusterMap uint8_t
Defining PrimaryVertex explicitly as messageable.
o2::fit::SingleLUT< o2::detectors::DetID::FT0, o2::fit::LookupTableBase<> > SingleLUT
struct o2::upgrades_utils::@462 ft0
structure to keep V0C information
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"