15#include "fairlogger/Logger.h"
64 stream <<
"TrackletHCHeader : Raw:0x" << std::hex << halfchamberheader.
word <<
" "
65 << (
int)halfchamberheader.
format <<
" ;; " << (
int)halfchamberheader.
MCLK <<
" :: "
67 << (
int)halfchamberheader.
stack <<
"," << (
int)halfchamberheader.
layer <<
") on side :"
68 << (
int)halfchamberheader.
side << std::endl;
75 stream <<
"TrackletMCMData: Raw:0x" << std::hex << tracklet.
word <<
" pos=" << tracklet.
pos
76 <<
"::slope=" << tracklet.
slope <<
"::pid=" << tracklet.
pid <<
"::checkbit="
84 stream <<
"TrackletMCMRawHeader: Raw:0x" << std::hex << mcmhead.
word <<
" " << mcmhead.
onea <<
"::"
85 << mcmhead.
pid2 <<
":" << mcmhead.
pid1 <<
":" << mcmhead.
pid0 <<
"::"
86 << mcmhead.
oneb << std::endl;
111 cruhead.datasizes[link].
size =
size;
112 cruhead.errorflags[link].
errorflag = errors;
128 return cruhead.datasizes[link].
size;
134 for (uint32_t link = 0; link < 15; link++) {
142 for (uint32_t link = 0; link < 15; link++) {
154 stream <<
"link sizes : ";
155 for (
int link = 0; link < 15; link++) {
159 stream <<
"link errorflags : ";
160 for (
int link = 0; link < 15; link++) {
164 stream <<
"0x" << std::hex << halfcru.
word0 <<
" 0x" << halfcru.
word12[0] <<
" 0x" << halfcru.
word12[1] <<
" 0x" << halfcru.
word3 <<
" 0x" << halfcru.
word47[0] <<
" 0x" << halfcru.
word47[1] <<
" 0x" << halfcru.
word47[2] <<
" 0x" << halfcru.
word47[3] << std::endl;
172 int detector = hcid / 2;
180 header.
stack = ~stack;
183 header.
MCLK = chipclock;
214 LOGF(info,
"TrackletHCHeader: Raw:0x%08x SM : %d stack %d layer %d side : %d MCLK: 0x%0x Format: 0x%0x Always1:0x%0x",
215 halfchamber.
word, (
int)(~halfchamber.
supermodule) & 0x1f, (
int)(~halfchamber.
stack) & 0x7, (
int)(~halfchamber.
layer) & 0x7, (
int)(~halfchamber.
side) & 0x1, (
int)halfchamber.
MCLK, (
int)halfchamber.
format, (
int)halfchamber.
one);
220 LOGF(info,
"TrackletMCMData: Raw:0x%08x pos:%d slope:%d pid:0x%03x checkbit:0x%02x",
225 LOGF(info,
"MCMRawHeader: Raw:0x%08x 1:%d padrow: 0x%02x col: 0x%01x pid2 0x%02x pid1: 0x%02x pid0: 0x%02x 1:%d",
232 std::array<uint16_t, 15>
sizes;
233 std::array<uint8_t, 15> errorflags;
238 for (
int i = 0;
i < 15;
i++) {
239 LOGF(info,
"Link %d size: %lu eflag: 0x%02x",
i,
sizes[
i], errorflags[
i]);
241 LOG(info) <<
"Raw: " << std::hex << halfcru.
word0 <<
" " << halfcru.
word12[0] <<
" " << halfcru.
word12[1] <<
" " << halfcru.
word3 <<
" " << halfcru.
word47[0] <<
" " << halfcru.
word47[1] <<
" " << halfcru.
word47[2] <<
" " << halfcru.
word47[3];
254 for (
int link = 0; link < 15; ++link) {
271 if (header.
one != 1) {
289 if (header.
onea != 1) {
292 if (header.
oneb != 1) {
301 if (header.
res != 0xc) {
319 std::bitset<NADCMCM> headerMask(
mask.adcmask);
320 return (
counter == headerMask.count());
325 mask.adcmask |= 1UL << channel;
326 int bitcount = (
~mask.c) & 0x1f;
328 mask.c = ~((bitcount)&0x1f);
333 LOGF(info,
"DigitMCMHeader: Raw:0x%08x, res: 0x%02x mcm: 0x%x rob: 0x%x eventcount 0x%05x year(>2007?): 0x%x ",
340 LOGF(info,
"DigitMCMRawData: Raw:0x%08x res:0x%x x: 0x%03x y: 0x%03x z 0x%03x ",
341 digitmcmdata.
word, digitmcmdata.
f, digitmcmdata.
x, digitmcmdata.
y, digitmcmdata.
z);
345 LOGF(info,
"DigitMCMADCMask: Raw:0x%08x j(0xc):0x%01x mask: 0x%05x count: 0x%02x n(0x1) 0x%01x ",
346 digitmcmadcmask.
word, digitmcmadcmask.
j, digitmcmadcmask.
adcmask, digitmcmadcmask.
c, digitmcmadcmask.
n);
355 if ((word & 0x3f) == 0b110001) {
358 if ((word & 0x3f) == 0b110101) {
361 if ((word & 0x3) == 0b01) {
371 LOGF(info,
"Digit HalfChamber Header: Raw:0x%08x reserve:0x%01x side:0x%01x stack:0x%02x layer:0x%02x supermod:0x%02x numberHCW:0x%02x minor:0x%03x major:0x%03x version(>2007):0x%01x",
378 LOGF(info,
"%s Digit HalfChamber Header1 Raw:0x%08x reserve:0x%02x pretriggercount=0x%02x pretriggerphase=0x%02x bunchxing:0x%05x number of timebins : 0x%03x", (good) ?
"" :
"*Corrupt*", header1.
word, header1.
res, header1.
ptrigcount, header1.
ptrigphase, header1.
bunchcrossing, header1.
numtimebins);
383 LOGF(info,
"%s Digit HalfChamber Header2 Raw:0x%08x reserve:0x%08x PedestalFilter:0x%01x GainFilter:0x%01x TailFilter:0x%01x CrosstalkFilter:0x%01x Non-linFilter:0x%01x RawDataBypassFilter:0x%01x DigitFilterCommonAdditive:0x%02x ", (good) ?
"" :
"*Corrupt*", header2.
word, header2.
res, header2.
dfilter, header2.
rfilter, header2.
nlfilter, header2.
xtfilter, header2.
tfilter, header2.
gfilter, header2.
pfilter);
388 LOGF(info,
"%s Digit HalfChamber Header3: Raw:0x%08x reserve:0x%08x readout program revision:0x%08x assembler program version:0x%01x", (good) ?
"" :
"*Corrupt*", header3.
word, header3.
res, header3.
svnrver, header3.
svnver);
398 for (
int countheaderwords = 0; countheaderwords < header.
numberHCW; ++countheaderwords) {
402 header1.
word = headers[countheaderwords];
404 if (header1.
res != 0x1) {
412 header2.
word = headers[countheaderwords];
414 if (header2.
res != 0b110001) {
422 header3.
word = headers[countheaderwords];
424 if (header3.
res != 0b110101) {
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
GLenum GLuint GLint GLint layer
GLint GLint GLsizei GLint GLenum format
constexpr int MAXDATAPERLINK256
max number of linkwords per cru link. (256bit words)
constexpr int NLAYER
the number of layers
constexpr int NSECTOR
the number of sectors
constexpr int NSTACK
the number of stacks per sector
constexpr int MAXHALFCHAMBER
the maximum number of installed half-chambers
constexpr int MAXCRUERRORVALUE
Max possible value for a CRU Halfchamber link error. As of may 2022, can only be 0x0,...
DigitMCMADCMask constructBlankADCMask()
void printHalfCRUHeader(const o2::trd::HalfCRUHeader &halfcru)
void printDigitMCMADCMask(const o2::trd::DigitMCMADCMask &digitmcmadcmask)
bool sanityCheckDigitMCMHeader(const o2::trd::DigitMCMHeader &header)
int getDigitHCHeaderWordType(uint32_t word)
uint8_t getHalfCRULinkErrorFlag(const HalfCRUHeader &cruhead, const uint32_t link)
void printDigitHCHeaders(o2::trd::DigitHCHeader &header, uint32_t headers[3], int index, int offset, bool good)
void printTrackletMCMHeader(const o2::trd::TrackletMCMHeader &mcmhead)
void constructTrackletHCHeader(TrackletHCHeader &header, int hcid, int chipclock, int format)
uint16_t constructTRDFeeID(int supermodule, int side, int endpoint)
void getHalfCRULinkErrorFlags(const HalfCRUHeader &cruheader, std::array< uint8_t, 15 > &linkerrorflags)
uint32_t setHalfCRUHeaderFirstWord(HalfCRUHeader &cruhead, int crurdhversion, int bunchcrossing, int stopbits, int endpoint, int eventtype, int feeid, int cruid)
bool sanityCheckTrackletHCHeader(const o2::trd::TrackletHCHeader &header)
void clearHalfCRUHeader(o2::trd::HalfCRUHeader &halfcru)
void printDigitMCMData(const o2::trd::DigitMCMData &digitmcmdata)
void incrementADCMask(DigitMCMADCMask &mask, int channel)
void setHalfCRUHeaderLinkSizeAndFlags(HalfCRUHeader &cruhead, int link, int size, int errors)
void printTrackletHCHeader(const o2::trd::TrackletHCHeader &tracklet)
bool sanityCheckDigitMCMADCMask(const o2::trd::DigitMCMADCMask &mask)
void getHalfCRULinkDataSizes(const HalfCRUHeader &cruheader, std::array< uint16_t, 15 > &linksizes)
bool halfCRUHeaderSanityCheck(const o2::trd::HalfCRUHeader &header)
uint16_t getHalfCRULinkDataSize(const HalfCRUHeader &cruhead, const uint32_t link)
bool sanityCheckTrackletMCMHeader(const o2::trd::TrackletMCMHeader &header)
void printDigitMCMHeader(const o2::trd::DigitMCMHeader &digitmcmhead)
void printTrackletMCMData(const o2::trd::TrackletMCMData &tracklet)
std::ostream & operator<<(std::ostream &stream, const Digit &d)
void printDigitHCHeader(o2::trd::DigitHCHeader &header, uint32_t headers[3])
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static int getStack(int det)
static int getHCIDFromLinkID(int link)
static int getLayer(int det)
static int getSector(int det)
std::map< int, int > linkIDToHCID
int getHCID(int link) const
void swapLinks(int linkA, int linkB)
int getLink(int hcid) const
std::map< int, int > hcIDToLinkID
Frontend Electronics ID, is made up of supermodule, a/c side and the end point encoded as below.
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"