14 uint32_t numChansPerAsicSts = 128;
15 uint32_t numAsicsPerModuleSts = 16;
17 constexpr u8 SystemVersion = 0x20;
20 for (
auto& equip : equipIdsSts) {
23 par.fNumChansPerAsic = numChansPerAsicSts;
24 par.fNumAsicsPerModule = numAsicsPerModuleSts;
26 for (
size_t elink = 0; elink < numElinks; elink++) {
29 elinkPar.
fAddress = mapEntry.moduleAddress;
30 elinkPar.
fAsicNr = mapEntry.asicNumber;
38 par.fElinkParams.push_back(elinkPar);
40 auto algo = std::make_unique<UnpackMS>(par);
41 fAlgos[{equip, SystemVersion}] = std::move(algo);
42 L_(debug) <<
"--- Configured equipment " << equip <<
" with " << numElinks <<
" elinks";
45 L_(info) <<
"--- Configured " <<
fAlgos.size() <<
" unpacker algorithms for STS.";
51 auto result =
DoUnpack(Subsystem::STS, ts);
58 std::map<u32, size_t> digisPerModule;
59 for (
const auto& digi : digis) {
60 digisPerModule[digi.GetAddress()]++;
62 for (
const auto& [module, numDigis] : digisPerModule) {
63 L_(info) <<
"Module " << std::hex << module << std::dec <<
" has " << numDigis <<
" digis";
Result_t DoUnpack(const fles::Subsystem subsystem, const fles::Timeslice &ts) const
std::map< UnpackKey, std::unique_ptr< Unpack_t > > fAlgos
size_t GetNumElinks(u16 equipmentId)
Number of elinks of a component.
std::vector< bool > MaskMap(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to channel mask flags.
Entry Map(u16 equipId, u16 elink)
API: Mapping from component and elink to address / ASIC number + pulser flag.
std::vector< u16 > GetEquipmentIds()
Equipment in the configuration.
uint32_t AdcCutMap(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to minimum adc cut.
detail::UnpackBase::Result_t Result_t
Unpack(const Config &config)
Result_t operator()(const fles::Timeslice &) const
void PrintDigisPerModule(const PODVector< CbmStsDigi > &digis) const
std::vector< double > Get(int32_t modAddress, uint16_t asic)
API: Mapping from module address and ASIC number to walk coefficients.
i32 GetSystemTimeOffset()
Get system time offset.
std::vector< T, PODAllocator< T > > PODVector
PODVector is a std::vector that doesn't initialize its elements.
uint64_t fTimeOffset
Time calibration parameter.
double fAdcGain
Charge calibration parameter.
int32_t fAddress
CbmStsAddress for the connected module.
double fAdcOffset
Charge calibration parameter.
uint32_t fAdcMinCut
Minimum Acd cut.
std::vector< bool > fChanMask
Channel masking flags.
std::vector< double > fWalk
Walk correction coefficients.
uint32_t fAsicNr
Number of connected ASIC within the module.
bool fWriteAux
Write auxiliary data for module.