ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetEventCnv
TRT_RawDataByteStreamCnv
src
TRT_RodEncoder.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Implementation of TRT_RodEncoder class
6
7
#include <deque>
8
9
#include "
TRT_RodEncoder.h
"
10
11
#include "
ByteStreamData/RawEvent.h
"
12
#include "
InDetIdentifier/TRT_ID.h
"
13
#include "
InDetRawData/TRT_RDORawData.h
"
14
#include "
TRT_Cabling/ITRT_CablingSvc.h
"
15
16
#include "GaudiKernel/ISvcLocator.h"
17
#include "GaudiKernel/Bootstrap.h"
18
#include "GaudiKernel/MsgStream.h"
19
#include "GaudiKernel/IMessageSvc.h"
20
23
TRT_RodEncoder::TRT_RodEncoder
()
24
:
m_trt_id
( nullptr ),
25
m_CablingSvc
(
"TRT_CablingSvc"
,
"TRT_RodEncoder"
),
26
m_RodBlockVersion
( 0 )
27
{}
28
31
TRT_RodEncoder::~TRT_RodEncoder
() =
default
;
32
35
StatusCode
36
TRT_RodEncoder::fillROD
( std::vector<uint32_t>& v32rod )
37
{
38
if
( !
m_CablingSvc
)
39
return
StatusCode::FAILURE;
40
41
int
TRT_MaxBufferSize = 120*16;
42
// Make sure vector is big enough, fill it with 0
43
v32rod.resize(TRT_MaxBufferSize,0 );
44
45
VRDO::iterator rdo_it =
m_RDOs
.begin();
46
const
VRDO::iterator rdo_it_end =
m_RDOs
.end();
47
48
const
RDO
* rawdata;
49
uint32_t StrawWord;
50
Identifier
StrawID;
51
uint32_t BufferOffset;
52
53
while
( rdo_it != rdo_it_end )
54
{
55
rawdata = *rdo_it;
56
57
StrawWord = rawdata->
getWord
();
58
StrawID = rawdata->
identify
();
59
60
BufferOffset =
m_CablingSvc
->getBufferOffset( StrawID );
61
62
// if ( 0 == BufferOffset )
63
// cout << m_trt_id->print_to_string( StrawID ) << " ->"
64
// << BufferOffset << "<- " << endl;
65
66
v32rod[BufferOffset] = StrawWord;
67
68
++rdo_it;
69
}
70
71
return
StatusCode::SUCCESS;
72
}
// end of fillROD(...)
73
76
StatusCode
77
TRT_RodEncoder::fillROD3
( std::vector<uint32_t>& v32rod )
78
{
79
if
( !
m_CablingSvc
)
80
return
StatusCode::FAILURE;
81
82
const
int
TRT_MaxBufferSize = 120*16;
83
int
tmp_data[TRT_MaxBufferSize] = {0};
// does init to 0 for all !
84
85
std::deque<bool> bitstowrite;
86
87
VRDO::iterator rdo_it =
m_RDOs
.begin();
88
const
VRDO::iterator rdo_it_end =
m_RDOs
.end();
89
90
const
RDO
* rawdata;
91
uint32_t StrawWord;
92
Identifier
StrawID;
93
uint32_t BufferOffset;
94
95
while
( rdo_it != rdo_it_end )
96
{
97
rawdata = *rdo_it;
98
99
StrawWord = rawdata->
getWord
();
100
StrawID = rawdata->
identify
();
101
102
BufferOffset =
m_CablingSvc
->getBufferOffset( StrawID );
103
104
// if ( 0 == BufferOffset )
105
// cout << m_trt_id->print_to_string( StrawID ) << " ->"
106
// << BufferOffset << "<- " << endl;
107
108
tmp_data[BufferOffset] = StrawWord;
109
110
++rdo_it;
111
}
112
113
for
(
int
i=0; i<TRT_MaxBufferSize; i++ )
114
{
115
if
( tmp_data[i] )
116
{
117
/*
118
* Push escape code
119
*/
120
bitstowrite.push_back( 0 );
121
bitstowrite.push_back( 0 );
122
bitstowrite.push_back( 0 );
123
bitstowrite.push_back( 0 );
124
bitstowrite.push_back( 0 );
125
126
/*
127
* Push Straw Word
128
*/
129
130
//for ( int j=27-1; j>=0; j-- )
131
for
(
int
j=0; j<27; j++ )
132
bitstowrite.push_back( (tmp_data[i] >> j) & 1 );
133
}
134
else
135
bitstowrite.push_back( 1 );
136
}
137
138
139
140
int
bit_in_word = 0;
141
int
out_word = 0;
142
while
( ! bitstowrite.empty() )
143
{
144
out_word = out_word | ( (bitstowrite.front()?1:0) << bit_in_word );
145
bitstowrite.pop_front();
146
bit_in_word++;
147
148
if
( bit_in_word > 31 )
149
{
150
v32rod.push_back( out_word );
151
out_word = 0;
152
bit_in_word = 0;
153
}
154
}
155
156
if
( 0 != bit_in_word )
157
v32rod.push_back( out_word );
158
159
return
StatusCode::SUCCESS;
160
}
// end of fillROD(...)
161
162
ITRT_CablingSvc.h
RawEvent.h
TRT_ID.h
This is an Identifier helper class for the TRT subdetector.
TRT_RDORawData.h
TRT_RodEncoder.h
InDetRawData::identify
virtual Identifier identify() const override final
Definition
InDetRawData.h:41
InDetRawData::getWord
unsigned int getWord() const
Definition
InDetRawData.h:47
TRT_RodEncoder::m_RDOs
VRDO m_RDOs
Definition
TRT_RodEncoder.h:60
TRT_RodEncoder::m_RodBlockVersion
unsigned short m_RodBlockVersion
Definition
TRT_RodEncoder.h:59
TRT_RodEncoder::~TRT_RodEncoder
~TRT_RodEncoder()
destructor
TRT_RodEncoder::m_trt_id
const TRT_ID * m_trt_id
Definition
TRT_RodEncoder.h:57
TRT_RodEncoder::RDO
TRT_RDORawData RDO
Definition
TRT_RodEncoder.h:26
TRT_RodEncoder::fillROD3
StatusCode fillROD3(std::vector< uint32_t > &v)
conversion of ROD into compressed ROD fragment
Definition
TRT_RodEncoder.cxx:77
TRT_RodEncoder::fillROD
StatusCode fillROD(std::vector< uint32_t > &v)
conversion of ROD into ROD fragment
Definition
TRT_RodEncoder.cxx:36
TRT_RodEncoder::m_CablingSvc
ServiceHandle< ITRT_CablingSvc > m_CablingSvc
Definition
TRT_RodEncoder.h:58
TRT_RodEncoder::TRT_RodEncoder
TRT_RodEncoder()
constructor
Definition
TRT_RodEncoder.cxx:23
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0