26#include <Gaudi/Property.h>
27#include <GaudiKernel/IProperty.h>
28#include <GaudiKernel/SmartIF.h>
43 const std::string& name,
const IInterface* parent)
49 declareInterface<TileRawChannelContByteStreamTool>(
this);
59 ATH_MSG_INFO (
"Initializing TileRawChannelContByteStreamTool");
63 ToolHandle<TileROD_Decoder> dec(
"TileROD_Decoder");
66 const Gaudi::Details::PropertyBase& demoFragIDsProperty = SmartIF<IProperty>(dec.get())->getProperty(
"DemoFragIDs");
67 const IntegerArrayProperty& demoFragIDs =
dynamic_cast<const IntegerArrayProperty&
>(demoFragIDsProperty);
70 for (
const auto fragID : demoFragIDs.value()) {
75 std::ostringstream os;
80 os <<
" 0x" << std::hex << fragID << std::dec;
84 ATH_MSG_INFO(
"Enable channel remapping for demonstrator modules" << os.str());
90 std::vector<std::pair<std::reference_wrapper<std::vector<int>>,
91 std::reference_wrapper<const std::vector<int>>>>
95 for (std::pair<std::reference_wrapper<std::vector<int>>,
96 std::reference_wrapper<
const std::vector<int>>>
97 legacyAndDemoChanMap : legacyAndDemoChanMaps) {
99 std::vector<int>& legacy2DemoChannel = legacyAndDemoChanMap.first;
100 const std::vector<int>& demoChanMap = legacyAndDemoChanMap.second;
101 if (!demoChanMap.empty()) {
103 for (
unsigned int demoChannel = 0; demoChannel < demoChanMap.size(); ++demoChannel) {
104 int legacyChannel = demoChanMap[demoChannel];
105 if ((legacyChannel >= 0) && (legacyChannel <
m_maxChannels)) {
106 legacy2DemoChannel[legacyChannel] = demoChannel;
123 return StatusCode::SUCCESS;
127 ATH_MSG_INFO (
"Finalizing TileRawChannelContByteStreamTool successfuly");
128 return StatusCode::SUCCESS;
133 const EventContext& ctx = Gaudi::Hive::currentContext();
134 bool isTMDB =
evtStore()->proxy(rawChannelContainer)->name() ==
"MuRcvRawChCnt";
145 ATH_MSG_DEBUG(
" Number of raw channel collections... " << rawChannelContainer->size() <<
" " <<
evtStore()->proxy(rawChannelContainer)->name());
147 std::map<uint32_t, TileROD_Encoder> mapEncoder;
148 std::vector<TileFastRawChannel> channels;
149 channels.reserve (
m_tileHWID->channel_hash_max());
157 if (isTMDB) reid = hid2re->getRodTileMuRcvID(frag_id);
158 else reid = hid2re->getRodID(frag_id);
172 const std::vector<uint32_t> & drawer_info = hid2re->getDrawerInfo(frag_id);
173 int drawer_type = drawer_info.size() > 2 ?
static_cast<int>(drawer_info[2]) : -1;
178 std::vector<std::reference_wrapper<TileFastRawChannel>> drawerChannels;
179 drawerChannels.reserve(rawChannelCollection->size());
186 float amplitude = rawChannel->amplitude();
187 float time = rawChannel->time();
188 float quality = rawChannel->quality();
190 channels.emplace_back (frag_id, channel, adc, amplitude, 0., 0.);
193 if (quality > 15.0) quality = 15.0;
194 if (
m_tileBadChanTool->getAdcStatus(drawerIdx, channel, adc, ctx).isBad()) quality += 16.;
200 << channel <<
" -> " << legacy2DemoChannel[channel]);
201 channel = legacy2DemoChannel[channel];
204 channels.emplace_back (frag_id, channel, adc, amplitude, time, quality);
205 drawerChannels.push_back(channels.back());
212 std::sort(drawerChannels.begin(), drawerChannels.end(),
214 return a.channel() < b.channel();
221 encoder.
add(&channel);
225 <<
" ROD " <<
"0x" << reid
226 <<
" number of channels " << MSG::dec << nChannels );
232 for (std::pair<const uint32_t, TileROD_Encoder>& reidAndEncoder: mapEncoder) {
234 theROD = fea->
getRodData(reidAndEncoder.first);
237 if ((reidAndEncoder.first & 0xf00)) {
243 ATH_MSG_DEBUG(
" Number of TileRawChannel words in ROD " << MSG::hex <<
" 0x" << reidAndEncoder.first << MSG::dec <<
" : " << theROD->size() );
246 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Helpers for checking error return status codes and reporting errors.
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 std::string getDrawerString(unsigned int ros, unsigned int drawer)
Return the drawer name, e.g.
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
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
std::map< std::string, std::string > remap
list of directories to be explicitly remapped
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.