ATLAS Offline Software
Loading...
Searching...
No Matches
TileRawChannelContByteStreamTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5
8
11
16
23
24#include <map>
25#include <stdint.h>
26
27static const InterfaceID IID_ITileRawChannelContByteStreamTool("TileRawChannelContByteStreamTool", 1, 0);
28
32
33// default constructor
34
36 const std::string& name, const IInterface* parent)
37 : AthAlgTool(type, name, parent)
38 , m_tileHWID(0)
39 , m_verbose(false)
40 , m_maxChannels(TileCalibUtils::MAX_CHAN)
41{
42 declareInterface<TileRawChannelContByteStreamTool>(this);
43}
44
45// destructor
46
49
51
52 ATH_MSG_INFO ("Initializing TileRawChannelContByteStreamTool");
53
54 ATH_CHECK( detStore()->retrieve(m_tileHWID, "TileHWID") );
55
56 ToolHandle<TileROD_Decoder> dec("TileROD_Decoder");
57 ATH_CHECK( dec.retrieve() );
58
59 // get TileCondToolEmscale
60 ATH_CHECK( m_tileToolEmscale.retrieve() );
61
62 // get TileBadChanTool
63 ATH_CHECK( m_tileBadChanTool.retrieve() );
64
66
68
69 return StatusCode::SUCCESS;
70}
71
73 ATH_MSG_INFO ("Finalizing TileRawChannelContByteStreamTool successfuly");
74 return StatusCode::SUCCESS;
75}
76
78{
79 bool isTMDB = evtStore()->proxy(rawChannelContainer)->name() == "MuRcvRawChCnt";
80
81 TileFragHash::TYPE contType = rawChannelContainer->get_type();
82 TileRawChannelUnit::UNIT inputUnit = rawChannelContainer->get_unit();
83 TileRawChannelUnit::UNIT outputUnit = inputUnit;
84
85 bool oflCont = (inputUnit < TileRawChannelUnit::OnlineOffset);
86
89
90 ATH_MSG_DEBUG( " Number of raw channel collections... " << rawChannelContainer->size() << " " << evtStore()->proxy(rawChannelContainer)->name());
91
92 std::map<uint32_t, TileROD_Encoder> mapEncoder;
93 std::vector<TileFastRawChannel> channels;
94 channels.reserve (m_tileHWID->channel_hash_max());
95
96 uint32_t reid = 0x0;
97
98 for (const TileRawChannelCollection* rawChannelCollection : *rawChannelContainer) {
99
100 TileRawChannelCollection::ID frag_id = rawChannelCollection->identify();
101
102 if (isTMDB) reid = hid2re->getRodTileMuRcvID(frag_id);
103 else reid = hid2re->getRodID(frag_id);
104
105 TileROD_Encoder& encoder = mapEncoder[reid];
106
107 encoder.setTileHWID(m_tileHWID, m_verbose, 4);
108 encoder.setTypeAndUnit(contType, outputUnit);
110
111 HWIdentifier drawer_id = m_tileHWID->drawer_id(frag_id);
112
113 int ros = m_tileHWID->ros(drawer_id);
114 int drawer = m_tileHWID->drawer(drawer_id);
115 int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
116
117 int nChannels = 0;
118
119 for (const TileRawChannel* rawChannel : *rawChannelCollection) {
120
121 HWIdentifier adc_id = rawChannel->adc_HWID();
122 int channel = m_tileHWID->channel(adc_id);
123 int adc = m_tileHWID->adc(adc_id);
124 float amplitude = rawChannel->amplitude();
125 float time = rawChannel->time();
126 float quality = rawChannel->quality();
127 if (isTMDB) {
128 channels.emplace_back (frag_id, channel, adc, amplitude, 0., 0.);
129 } else {
130 if (oflCont) {
131 if (quality > 15.0) quality = 15.0;
132 if (m_tileBadChanTool->getAdcStatus(drawerIdx, channel, adc).isBad()) quality += 16.;
133 }
134 //amplitude = m_tileToolEmscale->channelCalib(drawerIdx, channel, adc, amplitude, inputUnit, outputUnit);
135 channels.emplace_back (frag_id, channel, adc, amplitude, time, quality);
136 }
137
138 // Don't need to worry about these moving due to the reserve() above.
139 encoder.add(&channels.back());
140 ++nChannels;
141 }
142
143 ATH_MSG_DEBUG( " Collection " << MSG::hex << "0x" << frag_id
144 << " ROD " << "0x" << reid
145 << " number of channels " << MSG::dec << nChannels );
146 }
147
148 // TileROD_Encoder has collected all the channels, now can fill the
149 // ROD block data.
150
151 for (std::pair<const uint32_t, TileROD_Encoder>& reidAndEncoder: mapEncoder) {
152
153 theROD = fea->getRodData(reidAndEncoder.first);
154 TileROD_Encoder& theEncoder = reidAndEncoder.second;
155
156 if ((reidAndEncoder.first & 0xf00)) {
157 theEncoder.fillRODTileMuRcvRawChannel(*theROD);
158 } else {
159 if (m_doFragType4) theEncoder.fillROD4(*theROD);
160 if (m_doFragType5) theEncoder.fillROD5(*theROD);
161 }
162 ATH_MSG_DEBUG( " Number of TileRawChannel words in ROD " << MSG::hex << " 0x" << reidAndEncoder.first << MSG::dec << " : " << theROD->size() );
163 }
164
165 return StatusCode::SUCCESS;
166}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
static const InterfaceID IID_ITileRawChannelContByteStreamTool("TileRawChannelContByteStreamTool", 1, 0)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
ServiceHandle< StoreGateSvc > & evtStore()
const ServiceHandle< StoreGateSvc > & detStore() const
Template class for assembling a full atlas raw event from subfragments.
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
RODDATA * getRodData(uint32_t id)
get a block of ROD data
static const TileCablingService * getInstance()
get pointer to service instance
int getMaxChannels(void) const
Static class providing several utility functions and constants.
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
TYPE
initialize
Provides conversion from TileRawChannel, TileL2 and TMDB (digits,MF raw channel,decision) to ROD form...
void setMaxChannels(int maxChannels)
set maximum number of channels in a drawer
void fillROD5(std::vector< uint32_t > &v)
void setTypeAndUnit(TileFragHash::TYPE type, TileRawChannelUnit::UNIT unit)
set OF algorigtm type and amplitude units for a drawer
void fillRODTileMuRcvRawChannel(std::vector< uint32_t > &v)
void setTileHWID(const TileHWID *tileHWID, bool verbose, unsigned int type=4)
set all necessary parameters for the encoder
void fillROD4(std::vector< uint32_t > &v)
void add(const TileFastRawChannel *rc)
add TileRawChannels to the current list
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
StatusCode convert(CONTAINER *cont, FullEventAssembler< TileHid2RESrcID > *fea) const
Provides conversion from TileRawChannelContainer to BS.
ToolHandle< ITileBadChanTool > m_tileBadChanTool
Handle to Tile bad channel tool.
ToolHandle< TileCondToolEmscale > m_tileToolEmscale
Handle to Tile calibration tool.
SG::ReadCondHandleKey< TileHid2RESrcID > m_hid2RESrcIDKey
TileRawChannelContByteStreamTool(const std::string &type, const std::string &name, const IInterface *parent)
constructor
int m_maxChannels
maximum number of channels in a drawer