![]() |
ATLAS Offline Software
|
Decoder for Run 3 data formats: eFEX, jFEX, gFEX and phase 1 Topo. More...
#include <L1CaloBsDecoderRun3.h>
Classes | |
| class | Logging |
| Interface class for logging, can be overriden to e.g. More... | |
Public Member Functions | |
| L1CaloBsDecoderRun3 () | |
| void | setVerbosity (bool verbosity) |
| void | setLogger (std::unique_ptr< Logging > &&logger) |
| void | decodeEfexData (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoEfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) const |
| Decode eFEX input fibre data. | |
| void | decodeEfexTobs (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoEfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) const |
| Decode eFEX TOBs and XTOBs. | |
| void | decodeJfexData (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoJfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode jFEX input fibre data. | |
| void | decodeJfexTobs (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoJfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode jFEX TOBs and XTOBs. | |
| void | decodeGfexData (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoGfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode gFEX input fibre data. | |
| void | decodeGfexTobs (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoGfexTob > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode gFEX TOBs. | |
| void | decodePh1TopoData (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoEfexTob > &etob, std::list< L1CaloRdoJfexTob > &jtob, std::list< L1CaloRdoGfexTob > >ob, std::list< L1CaloRdoMuonTob > &mtob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode Ph1Topo input data: these are TOBs from FEXes and MuCTPI. | |
| void | decodePh1TopoHits (const uint32_t *beg, const uint32_t *end, std::list< L1CaloRdoPh1TopoHit > &hit, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode Ph1Topo hit results. | |
Private Member Functions | |
| void | decodeOneEfexTob (const uint32_t word[], const uint32_t shelfNumber, const uint32_t efexNumber, const uint32_t fpgaNumber, const uint32_t errorMask, const uint32_t numSlices, const uint32_t sliceNum, L1CaloRdoFexTob::TobType tobType, L1CaloRdoFexTob::TobSource tobSource, std::list< L1CaloRdoEfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) const |
| Decode word(s) for one eFEX TOB (or xTOB) and create one RDO. | |
| uint32_t | decodeEfexDataChan (const uint32_t payload[], const uint32_t efexNumber, const uint32_t shelfNumber, const uint32_t errorMask, std::list< L1CaloRdoEfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) const |
| Decode the data from one eFEX input fibre (only ever one slice). | |
| bool | decodeEfexTobSlice (const uint32_t payload[], size_t &index, const uint32_t efexNumber, const uint32_t shelfNumber, const uint32_t numSlices, const uint32_t errorMask, std::list< L1CaloRdoEfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) const |
| Decode one eFEX FPGA block of TOBs and XTOBs for one slice. | |
| uint32_t | decodeJfexDataChan (const uint32_t payload[], const uint32_t jfexNumber, const uint32_t fpgaNumber, const uint32_t errorMask, std::list< L1CaloRdoJfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode the data from one jFEX input fibre (only ever one slice). | |
| bool | decodeJfexTobSlice (const uint32_t payload[], size_t blockSize, size_t &index, const uint32_t jfexNumber, const uint32_t fpgaNumber, const uint32_t sliceNumber, const uint32_t numSlices, const uint32_t errorMask, std::list< L1CaloRdoJfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode one jFEX FPGA block of TOBs and XTOBs for one slice. | |
| uint32_t | decodeGfexDataChan (const uint32_t payload[], const uint32_t fpgaNumber, const uint32_t chanNumber, const uint32_t errorMask, std::list< L1CaloRdoGfexTower > &dat, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode the data from one gFEX input fibre (only ever one slice). | |
| bool | decodeGfexTobSlice (const uint32_t payload[], const uint32_t blockType, const uint32_t sliceNumber, const uint32_t numSlices, const uint32_t errorMask, std::list< L1CaloRdoGfexTob > &tob, std::list< L1CaloRdoRodInfo >::const_iterator rodInfo) |
| Decode one gFEX FPGA block of TOBs for one slice. | |
| bool | checkFibreCRC (std::vector< uint32_t > &data) const |
| Check the CRC in an input fibre block of words. | |
Private Attributes | |
| int | m_verbosity |
| std::unique_ptr< Logging > | m_logger |
Decoder for Run 3 data formats: eFEX, jFEX, gFEX and phase 1 Topo.
Utility methods shared with Runs 1 & 2 are now in L1CaloBsDecoderUtil.
Definition at line 22 of file L1CaloBsDecoderRun3.h.
| L1CaloBsDecoderRun3::L1CaloBsDecoderRun3 | ( | ) |
Definition at line 48 of file L1CaloBsDecoderRun3.cxx.
|
private |
Check the CRC in an input fibre block of words.
The CRC field should be the top 9 bits in the 7 word block. This means we calculate the CRC over the remaining 215 bits.
| data | vector of 7 input fibre words |
Definition at line 669 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeEfexData | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoEfexTower > & | tower, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) const |
Decode eFEX input fibre data.
For the EM layer we have up to 10 supercell values per tower though there is still just a single hadronic value. It seemed overkill to have an RDO per supercell, so instead the main RDO "Value" is set to the sum of 10 EM supercells with the individual supercell Ets saved in a separate vector. These are always stored in 1441 order (PS, F0-F3, M0-M3, BK) even in regions where some supercells are missing. The flag field is used for status/error bits.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 85 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode the data from one eFEX input fibre (only ever one slice).
| payload | payload vector starting at this 8 word block |
| efexNumber | number of this eFEX in its shelf |
| shelfNumber | shelf number (here 0 or 1) |
| errorMask | global error bits set for this ROD fragment |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 187 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeEfexTobs | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoEfexTob > & | tob, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) const |
Decode eFEX TOBs and XTOBs.
The RDO value encodes the cluster Et in the value field and the isolation bits and other information in the flag.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 363 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode one eFEX FPGA block of TOBs and XTOBs for one slice.
| payload | entire ROD fragment payload vector |
| index | just past end of block for this slice (this method updates it to the start of the block) |
| efexNumber | number of this eFEX in its shelf |
| shelfNumber | shelf number |
| numSlices | number of TOB slices read out in this event |
| errorMask | global error bits set for this ROD fragment |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 487 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeGfexData | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoGfexTower > & | tower, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode gFEX input fibre data.
We create one RDO per tower using the value field for its Et. The flag field is used for status/error bits.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1184 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode the data from one gFEX input fibre (only ever one slice).
| payload | payload vector starting at this 7 word block |
| fpgaNumber | FPGA number (0-2 for A-C) |
| errorMask | global error bits set for this ROD fragment |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1260 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeGfexTobs | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoGfexTob > & | tob, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode gFEX TOBs.
We create one RDO per TOB using the value field for its Et. The flag field is used for status/error bits. FIXME We also create one RDO for the energy TOBs.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1393 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode one gFEX FPGA block of TOBs for one slice.
See https://edms.cern.ch/ui/file/1492098/1/L1CaloTOBFormats_v010.pdf
| payload | pointer to this slice in ROD fragment payload |
| blockType | code for Jet or MET TOB |
| sliceNumber | number of this readout slice |
| numSlices | total number of TOB slices read out in this event |
| errorFlags | global error bits set for this subblock (or ROD fragment?) |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1463 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeJfexData | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoJfexTower > & | tower, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode jFEX input fibre data.
We create one RDO per tower using the value field for its Et. The flag field is used for status/error bits.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 695 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode the data from one jFEX input fibre (only ever one slice).
| payload | payload vector starting at this 8 word block |
| jfexNumber | number of this jFEX in its shelf |
| fpgaNumber | FPGA number |
| errorMask | global error bits set for this ROD fragment |
| tower | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 766 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodeJfexTobs | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoJfexTob > & | tob, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode jFEX TOBs and XTOBs.
The RDO value encodes the cluster Et in the value field and the isolation bits and other information in the flag.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 905 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode one jFEX FPGA block of TOBs and XTOBs for one slice.
| payload | entire ROD fragment payload vector |
| index | just past end of block for this slice (this method updates it to the start of the block) |
| jfexNumber | number of this jFEX in its shelf |
| fpgaNumber | FPGA number |
| sliceNumber | number of this readout slice |
| numSlices | total number of TOB slices read out in this event |
| errorMask | global error bits set for this ROD fragment |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 988 of file L1CaloBsDecoderRun3.cxx.
|
private |
Decode word(s) for one eFEX TOB (or xTOB) and create one RDO.
FIXME Document other parameters when stable!
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 594 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodePh1TopoData | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoEfexTob > & | etob, | ||
| std::list< L1CaloRdoJfexTob > & | jtob, | ||
| std::list< L1CaloRdoGfexTob > & | gtob, | ||
| std::list< L1CaloRdoMuonTob > & | mtob, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode Ph1Topo input data: these are TOBs from FEXes and MuCTPI.
We create one RDO per TOB using the value field for its Et. The flag field is used for status/error bits.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| etob | list of eFEX TOB RDOs to be filled |
| jtob | list of jFEX TOB RDOs to be filled |
| gtob | list of gFEX TOB RDOs to be filled |
| mtob | list of muon TOB RDOs to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1549 of file L1CaloBsDecoderRun3.cxx.
| void L1CaloBsDecoderRun3::decodePh1TopoHits | ( | const uint32_t * | beg, |
| const uint32_t * | end, | ||
| std::list< L1CaloRdoPh1TopoHit > & | hit, | ||
| std::list< L1CaloRdoRodInfo >::const_iterator | rodInfo ) |
Decode Ph1Topo hit results.
The format is common to jFEX TOBs (and much like eFEX TOBs). So there could be better code reuse than this cut & paste job.
| beg | pointer to start of rod data payload |
| end | pointer to end of rod data payload |
| tob | list of RDO to be filled |
| rodInfo | iterator to ROD information for this block |
Definition at line 1674 of file L1CaloBsDecoderRun3.cxx.
|
inline |
Definition at line 40 of file L1CaloBsDecoderRun3.h.
| void L1CaloBsDecoderRun3::setVerbosity | ( | bool | verbosity | ) |
|
private |
Definition at line 136 of file L1CaloBsDecoderRun3.h.
|
private |
Definition at line 135 of file L1CaloBsDecoderRun3.h.