ATLAS Offline Software
Loading...
Searching...
No Matches
EfexTobPacker.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
5
6#include <iostream>
7#include <cstdlib>
8#include <cmath>
9#include <map>
10
11
12std::vector<FibrePackerBase::myDataWord>
13EfexTobPacker::getPackedData(const std::vector<myDataWord>& inFrame, myDataWord bcNumber, InputDataFrameType /*frameType*/) const
14{
15 size_t sz = inFrame.size();
16 std::vector<myDataWord> dataToLoad(FexDefs::num32BitWordsPerFibre(),0);
17 for ( size_t i = 0 ; i < sz ; ++i )
18 dataToLoad.at(i) = inFrame.at(i);
19 dataToLoad.at(6) = 0x1000; // Is an eFEX
20 dataToLoad.at(6) |= (bcNumber&0xf)<<8; // Lowest bits of BCID
21 dataToLoad.at(6) |= crc9full(dataToLoad,224)<<23; // Add CRC, 224 = 32*7 = full frame
22 dataToLoad.at(6) |= K_28_5; // add K-character
23
24 return dataToLoad;
25
26}
27
28std::vector<FibrePackerBase::myDataWord>
29EfexTobPacker::getPackedControl(const std::vector<myDataWord>& /*inFrame*/, myDataWord /*bcNumber*/, InputDataFrameType /*frameType*/) const
30{
31 std::vector<myDataWord> controlWords(FexDefs::num32BitWordsPerFibre(),0);
32 return controlWords;
33}
34
35bool
36EfexTobPacker::checkCRC(const std::vector<myDataWord>& encodedData, InputDataFrameType /*frameType*/) const
37{
38 auto inputData = encodedData;
39 inputData.at(0) = inputData.at(0) & 0xffffff00;
40 // calculate CRC on 224 bits = 7*32 bit words
41 return (crc9full(inputData,224) == 0);
42}
43
45EfexTobPacker::getBcNumber(const std::vector<myDataWord>& encodedData, InputDataFrameType /*frameType*/) const
46{
47 return ((encodedData.at(6)>>8)&0xf);
48}
49
50std::vector<FibrePackerBase::myDataWord>
51EfexTobPacker::getUnpackedData(const std::vector<myDataWord>& encodedData, InputDataFrameType /*frameType*/) const
52{
53 return encodedData;
54}
55
static Double_t sz
virtual std::vector< myDataWord > getUnpackedData(const std::vector< myDataWord > &encodedData, InputDataFrameType frameType) const override
virtual bool checkCRC(const std::vector< myDataWord > &encodedData, InputDataFrameType frameType) const override
virtual std::vector< myDataWord > getPackedControl(const std::vector< myDataWord > &inFrame, myDataWord bcNumber, InputDataFrameType frameType) const override
Function returning control words.
virtual myDataWord getBcNumber(const std::vector< myDataWord > &encodedData, InputDataFrameType frameType) const override
virtual std::vector< myDataWord > getPackedData(const std::vector< myDataWord > &inFrame, myDataWord bcNumber, InputDataFrameType frameType) const override
Function taking SC energies and other stuff and packing them into a data packet.
static int num32BitWordsPerFibre()
Definition FexDefs.h:17
virtual myDataWord crc9full(const std::vector< myDataWord > &inwords, size_t num_bits) const
Functions calculating CRC over input data.
InputDataFrameType
type of input data frame