17#ifndef O2_TPCFOURIERTRANSFORMEPNSPEC_H
18#define O2_TPCFOURIERTRANSFORMEPNSPEC_H
21#include <fmt/format.h>
45 TPCFourierTransformEPNSpec(
const std::vector<uint32_t>& crus,
const unsigned int nFourierCoefficientsSend,
const unsigned int rangeIDC,
const std::vector<o2::tpc::Side>& sides) : mCRUs{crus}, mIDCFourierTransform{rangeIDC, nFourierCoefficientsSend}, mSides{sides} {};
49 mDumpFFT = ic.options().get<
bool>(
"dump-coefficients-epn");
56 if (mReceivedCRUs == 0) {
58 }
else if (mCurrentTF != currTF) {
59 LOGP(error,
"Received TF {} expected TF {}", currTF, mCurrentTF);
64 auto const* tpcCRUHeader = o2::framework::DataRefUtils::getHeader<o2::header::DataHeader*>(
ref);
65 const int cru = tpcCRUHeader->subSpecification >> 7;
67 const auto descr = tpcCRUHeader->dataDescription;
70 LOGP(
debug,
"Receiving IDC1 for TF {} for CRU {}", currTF, cru);
73 LOGP(
debug,
"Receiving IDC1 weights for TF {} for CRU {}", currTF, cru);
78 LOGP(
debug,
"Received data {} of a total of {}", mReceivedCRUs, 2 * mCRUs.size());
79 if (mReceivedCRUs != 2 * mCRUs.size()) {
86 LOGP(
debug,
"normalize IDCs");
88 for (
const auto side : mSides) {
89 mIDCFourierTransform.setIDCs(std::move(mIDCOneAggregator).get(
side));
90 LOGP(
debug,
"calculate fourier coefficients");
94 LOGP(info,
"dumping FT to file");
98 sendOutput(pc.outputs(),
side);
111 const std::vector<uint32_t> mCRUs{};
113 std::vector<Side> mSides{};
115 bool mDumpFFT{
false};
116 int mReceivedCRUs = 0;
117 uint32_t mCurrentTF{0};
134 std::vector<OutputSpec> outputSpecs;
135 for (
const auto side : sides) {
143 AlgorithmSpec{adaptFromTask<TPCFourierTransformEPNSpec>(crus, nFourierCoefficientsSend, rangeIDC, sides)},
145 {
"dump-coefficients-epn", VariantType::Bool,
false, {
"Dump fourier coefficients to file"}}}};
TPC device for processing on FLPs.
const std::vector< Side > & getSides() const
Helper class for aggregation of 1D-IDCs from different CRUs.
void aggregate1DIDCsWeights(const o2::tpc::Side side, const std::vector< unsigned int > &idcCount)
void aggregate1DIDCs(const o2::tpc::Side side, const std::vector< float > &idc)
static constexpr header::DataDescription getDataDescription1DIDCEPNWeights()
return data description for buffered weights for 1D IDCs for EPNs
static constexpr header::DataDescription getDataDescription1DIDCEPN()
return data description for buffered 1D IDCs for EPNs
constexpr o2::header::DataOrigin gDataOriginTPC
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > Options
uint32_t getCurrentTF(o2::framework::ProcessingContext &pc)
Global TPC definitions and constants.
DataProcessorSpec getTPCFourierTransformEPNSpec(const std::vector< uint32_t > &crus, const unsigned int rangeIDC, const unsigned int nFourierCoefficientsSend)
uint32_t tfCounter
the orbit the TF begins