ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
L1CaloFEX
L1CaloFEXByteStream
src
infraL1Calo
src
GenericCrc.cxx
Go to the documentation of this file.
1
#include "
infraL1Calo/GenericCrc.h
"
2
3
#include <iostream>
4
5
uint32_t
GenericCrc::crc9fibre
(
const
std::vector<uint32_t>& inwords,
size_t
num_bits )
const
6
{
14
15
size_t
num_words = inwords.size();
16
if
( (num_bits+31)/32 > num_words )
17
{
18
std::cout <<
"ERROR: not enough words ("
<< num_words <<
") for "
<< num_bits <<
"-bit CRC calculation."
<< std::endl;
19
return
0;
20
}
21
uint32_t val = 0x1ff;
22
for
(
size_t
i = 0 ; i < num_bits ; ++i )
23
{
24
if
( (inwords.at(i/32)>>(i%32)) & 1 )
25
val ^= 1;
26
if
( val&1 )
27
val ^= 0x37d;
// 1101111101 = polynomial reversed
28
val >>= 1;
29
}
30
return
val;
31
}
32
33
uint32_t
GenericCrc::crc20rod
(
const
std::vector<uint32_t>& inwords,
size_t
num_bits )
const
34
{
35
int
order = 20;
36
uint32_t val = 0xfffff;
37
//<<uint32_t poly = 0x18349f; // Old, wrong, polynomial used until December 2021
38
uint32_t poly = 0x18359f;
39
size_t
num_words = inwords.size();
40
if
( (num_bits+31)/32 > num_words )
41
{
42
std::cout <<
"ERROR: not enough words ("
<< num_words <<
") for "
<< num_bits <<
"-bit CRC calculation."
<< std::endl;
43
return
0;
44
}
45
for
(
int
i = 0 ; i < order ; ++i )
46
{
47
int
flip = val&1;
48
val >>= 1;
49
if
( flip )
50
val ^= (poly>>1);
51
}
52
for
(
size_t
i = 0 ; i < num_bits ; ++i )
53
{
54
val <<= 1;
55
val |= (inwords[i/32]>>(31-i%32))&1;
56
if
((val>>order)&1)
57
val ^= poly;
58
}
59
for
(
int
i = 0 ; i < order ; ++i )
60
{
61
val <<= 1;
62
if
((val>>order)&1)
63
val ^= poly;
64
}
65
return
val;
66
}
67
GenericCrc.h
GenericCrc::crc20rod
uint32_t crc20rod(const std::vector< uint32_t > &inwords, size_t num_bits) const
Definition
GenericCrc.cxx:33
GenericCrc::crc9fibre
uint32_t crc9fibre(const std::vector< uint32_t > &inwords, size_t num_bits) const
Functions calculating CRC over input data.
Definition
GenericCrc.cxx:5
Generated on
for ATLAS Offline Software by
1.17.0