CbmRoot
Loading...
Searching...
No Matches
sts/UnpackMS.h
Go to the documentation of this file.
1/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau, Volker Friese [committer] */
4#pragma once
5
6#include "CbmStsDigi.h"
7#include "MicrosliceDescriptor.hpp"
8#include "StsXyterMessage.h"
11
12#include <cassert>
13#include <cstddef>
14#include <cstdint>
15#include <memory>
16#include <vector>
17
18namespace cbm::algo::sts
19{
20
27 int32_t fAddress = 0;
28 uint32_t fAsicNr = 0;
29 int64_t fTimeOffset = 0;
30 double fAdcOffset = 0.;
31 double fAdcGain = 0.;
32 uint32_t fAdcMinCut = 0;
33 std::vector<double> fWalk;
34 std::vector<bool> fChanMask;
35 };
36
37
43 struct UnpackPar {
44 uint32_t fNumChansPerAsic = 0;
45 uint32_t fNumAsicsPerModule = 0;
46 std::vector<UnpackElinkPar> fElinkParams = {};
47 bool fWriteAux = false;
48 };
49
50
87
93 struct QaDigi {
94
95 QaDigi(bool missed, int32_t addr, int32_t chan, uint32_t t, uint16_t c, uint16_t e)
96 : missedEvent(missed)
97 , address(addr)
98 , channel(chan)
99 , time(t)
100 , charge(c)
101 , elink(e)
102 {
103 }
104
106 int32_t address;
107 int32_t channel;
108 uint32_t time;
109 uint16_t charge;
110 uint16_t elink;
111 };
112
119 std::vector<QaDigi> fQaDigis;
120 };
121
128 class UnpackMS : public UnpackMSBase<CbmStsDigi, UnpackMonitorData, UnpackAuxData> {
129
130 public:
132 UnpackMS(const UnpackPar& pars);
133
134
136 ~UnpackMS() override;
137
138
145 Result_t operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr,
146 const uint64_t tTimeslice) const override;
147
151 void SetParams(std::unique_ptr<UnpackPar> params) { fParams = *(std::move(params)); }
152
153 private: // types
163
164 private: // methods
171 void ProcessHitMessage(const stsxyter::Message& message, const TimeSpec& time, std::vector<CbmStsDigi>& digiVec,
172 UnpackMonitorData& monitor, UnpackAuxData& aux) const;
173
177 void ProcessTsmsbMessage(const stsxyter::Message& message, TimeSpec& time) const;
178
179
180 private: // members
182
185
188
190 static constexpr uint32_t fkClockCycleNom = stsxyter::kulClockCycleNom;
191 static constexpr uint32_t fkClockCycleDen = stsxyter::kulClockCycleDen;
192
195 };
196
197} /* namespace cbm::algo::sts */
std::tuple< std::vector< Digi_t >, Monitor_t, Aux_t > Result_t
void ProcessTsmsbMessage(const stsxyter::Message &message, TimeSpec &time) const
Process an epoch message (TS_MSB)
static constexpr uint32_t fkClockCycleNom
UnpackPar fParams
Parameter container.
void ProcessHitMessage(const stsxyter::Message &message, const TimeSpec &time, std::vector< CbmStsDigi > &digiVec, UnpackMonitorData &monitor, UnpackAuxData &aux) const
Process a hit message.
static constexpr uint32_t fkClockCycleDen
Result_t operator()(const uint8_t *msContent, const fles::MicrosliceDescriptor &msDescr, const uint64_t tTimeslice) const override
Algorithm execution.
void SetParams(std::unique_ptr< UnpackPar > params)
Set the parameter container.
static constexpr uint64_t fkEpochsPerCycle
static constexpr uint64_t fkCycleLength
~UnpackMS() override
Destructor.
UnpackMS(const UnpackPar &pars)
Default constructor.
static constexpr uint64_t fkEpochLength
uint64_t u64
Definition Definitions.h:23
uint32_t u32
Definition Definitions.h:21
static constexpr uint32_t kulClockCycleDen
Clock cycle denominator, equivalent to 2*160 MHz clock.
static constexpr uint32_t kuHitNbTsBinsBinning
static constexpr uint32_t kulClockCycleNom
Clock cycle nominator [ns], equivalent to 2*160 MHz clock.
static constexpr uint32_t kuTsMsbNbTsBinsBinning
QaDigi(bool missed, int32_t addr, int32_t chan, uint32_t t, uint16_t c, uint16_t e)
std::vector< QaDigi > fQaDigis
int64_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.
Structure to hold the current time information for the current microslice.
u64 currentEpochTime
Current epoch time relative to timeslice in clock cycles.
u64 currentTsTime
Unix time of timeslice in units of epoch length.
u64 currentCycle
Current epoch cycle.
u32 currentEpoch
Current epoch number within epoch cycle.
uint32_t fNumErrInvalidMsSize
Microslice size is not multiple of message size.
uint32_t fNumErrElinkOutOfRange
Elink not contained in parameters.
void add(const UnpackMonitorData &rhs)
uint32_t fNumErrTimestampOverflow
Overflow in 64 bit time stamp.
uint32_t fNumErrTimestampUnderflow
Underflow in 64 bit time stamp if offsetting.
uint32_t fNumErrInvalidFirstMessage
First message is not TS_MSB or second is not EPOCH.
bool fWriteAux
Write auxiliary data for module.
uint32_t fNumAsicsPerModule
Number of ASICS per module.
uint32_t fNumChansPerAsic
Number of channels per ASIC.
std::vector< UnpackElinkPar > fElinkParams
Parameters for each eLink.