18#ifndef ALICEO2_FIT_RAWREADERFIT_H_
19#define ALICEO2_FIT_RAWREADERFIT_H_
37template <
typename RawReaderType,
bool useTrgInput = false>
49 typedef typename DigitBlockFIT_t::Digit_t
Digit_t;
55 typedef std::make_index_sequence<std::tuple_size_v<typename DigitBlockFIT_t::TupleVecDigitObjs_t>>
IndexesAllDigits;
59 typedef typename std::conditional<DigitBlockFIT_t::sNSubDigits != 1, SubDigitTmp_t, std::tuple<SubDigitTmp_t>>
::type SubDigit_t;
60 typedef typename std::conditional<DigitBlockFIT_t::sNSingleSubDigits != 1, SingleSubDigitTmp_t, std::tuple<SingleSubDigitTmp_t>>
::type SingleSubDigit_t;
79 reserveSubDigits1<DigitBlockFIT_t>(nSubDigits);
97 std::apply([](
auto&... subDigit) {
98 ((subDigit.clear()), ...);
103 std::apply([](
auto&... singleSubDigit) {
104 ((singleSubDigit.clear()), ...);
110 template <std::size_t... IsubDigits, std::size_t... IsingleSubDigits>
111 auto callGetDigit(std::index_sequence<IsubDigits...>, std::index_sequence<IsingleSubDigits...>)
119 template <std::size_t... IDigits>
123 RawReader_t::getDigits(
getRefVec<std::tuple_element_t<IDigits, typename DigitBlockFIT_t::TupleVecDigitObjs_t>>(pc)...,
getRefVec<
typename std::vector<DetTrigInput_t>>(pc));
125 RawReader_t::getDigits(
getRefVec<std::tuple_element_t<IDigits, typename DigitBlockFIT_t::TupleVecDigitObjs_t>>(pc)...);
128 template <std::size_t... IsubDigits, std::size_t... IsingleSubDigits>
129 auto callPrint(std::index_sequence<IsubDigits...>, std::index_sequence<IsingleSubDigits...>)
const
148 outputSpec.emplace_back(
mDataOrigin, Digit_t::sChannelNameDPL, 0, o2::framework::Lifetime::Timeframe);
150 std::apply([&](
const auto&... subDigit) {
151 ((outputSpec.emplace_back(
mDataOrigin, (std::decay<
decltype(subDigit)>::type::value_type::sChannelNameDPL), 0, o2::framework::Lifetime::Timeframe)), ...);
156 std::apply([&](
const auto&... singleSubDigit) {
157 ((outputSpec.emplace_back(
mDataOrigin, (std::decay<
decltype(singleSubDigit)>::type::value_type::sChannelNameDPL), 0, o2::framework::Lifetime::Timeframe)), ...);
162 outputSpec.emplace_back(
mDataOrigin, DetTrigInput_t::sChannelNameDPL, 0, o2::framework::Lifetime::Timeframe);
164 outputSpec.emplace_back(
mDataOrigin,
"RawDataMetric", 0, o2::framework::Lifetime::Timeframe);
170 std::apply([&](
const auto&... subDigit) {
176 std::apply([&](
const auto&... singleSubDigit) {
186 template <
typename VecDigitType>
RawReader_t::DigitBlockFIT_t DigitBlockFIT_t
std::make_index_sequence< std::tuple_size_v< typename DigitBlockFIT_t::TupleVecDigitObjs_t > > IndexesAllDigits
void dumpRawDataMetrics() const
void accumulateDigits(o2::framework::ProcessingContext &pc)
RawReaderFIT(o2::header::DataOrigin dataOrigin, bool dumpData)
SingleSubDigit_t mVecSingleSubDigit
DigitBlockHelper::GetSubDigitField< typenameDigitBlockFIT_t::VecSingleSubDigit_t >::vector_type SingleSubDigitTmp_t
std::conditional< DigitBlockFIT_t::sNSingleSubDigits!=1, SingleSubDigitTmp_t, std::tuple< SingleSubDigitTmp_t > >::type SingleSubDigit_t
DigitBlockFIT_t::LookupTable_t LookupTable_t
bool mEnableEmptyTFprotection
auto callGetDigit(std::index_sequence< IsubDigits... >, std::index_sequence< IsingleSubDigits... >)
static constexpr bool sSingleSubDigitExists
void makeSnapshot(o2::framework::ProcessingContext &pc) const
auto & getRefVec(o2::framework::ProcessingContext &pc)
RawReaderType RawReader_t
std::make_index_sequence< DigitBlockFIT_t::sNSubDigits > IndexesSubDigit
std::vector< DetTrigInput_t > mVecTrgInput
auto callGetDigitDirectly(o2::framework::ProcessingContext &pc, std::index_sequence< IDigits... >)
Digit_t::DetTrigInput_t DetTrigInput_t
std::vector< Digit_t > mVecDigit
std::make_index_sequence< DigitBlockFIT_t::sNSingleSubDigits > IndexesSingleSubDigit
auto callPrint(std::index_sequence< IsubDigits... >, std::index_sequence< IsingleSubDigits... >) const
void enableEmptyTFprotection()
DigitBlockFIT_t::SubDigit_t SubDigitTmp_t
static constexpr bool sSubDigitExists
auto reserveSubDigits1(std::size_t nElements) -> std::enable_if_t<(T::sNSubDigits< 1)>
std::conditional< DigitBlockFIT_t::sNSubDigits!=1, SubDigitTmp_t, std::tuple< SubDigitTmp_t > >::type SubDigit_t
RawReaderFIT(const RawReaderFIT &)=default
auto reserveSubDigits1(std::size_t nElements) -> std::enable_if_t<(T::sNSubDigits > 0)>
static constexpr bool sUseTrgInput
DigitBlockFIT_t::Digit_t Digit_t
void configureOutputSpec(std::vector< o2::framework::OutputSpec > &outputSpec) const
o2::header::DataOrigin mDataOrigin
std::vector< RawDataMetric > mVecRawDataMetric
RawReader_t::RawDataMetric_t RawDataMetric_t
void reserveVecDPL(std::size_t nDigits, std::size_t nSubDigits)
void snapshot(const Output &spec, T const &object)
decltype(auto) make(const Output &spec, Args... args)
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type
TFitResultPtr fit(const size_t nBins, const T *arr, const T xMin, const T xMax, TF1 &func, std::string_view option="")
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"