1#include "Gaudi/Interfaces/IOptionsSvc.h"
2#include "GaudiKernel/Bootstrap.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/Parsers.h"
5using Gaudi::Interfaces::IOptionsSvc;
7#include "Identifier/MucID.h"
8#include "RawDataCnv/EventManagement/MucBuilder.h"
13 if ( !m_fec2idFile.empty() )
return;
18 auto jobSvc = Gaudi::svcLocator()->service<IOptionsSvc>(
"JobOptionsSvc" );
19 Gaudi::Parsers::parse( m_fec2idFile, jobSvc->get(
"MucBuilder.Fec2IdMap" ) );
21 m_re2te =
new uint32_t[1024];
22 strSqcVec =
new uint32_t[1024];
23 memset( (
void*)m_re2te, 0xFF, 1024 *
sizeof( uint32_t ) );
24 memset( (
void*)strSqcVec, 0, 1024 *
sizeof( uint32_t ) );
36 uint32_t fecAddr = ( reDigi & 0xFFFF0000 ) >> 16;
37 uint32_t module = ( fecAddr & 0xF800 ) >> 5;
38 REId = ( fecAddr & 0x07FF ) | module;
39 FecData = reDigi & 0xFFFF;
40 StrSqc = strSqcVec[REId];
47 cerr <<
"MdcBuilder::pack can't get digiCol" << endl;
48 return StatusCode::FAILURE;
51 uint32_t size = 0, index;
52 uint32_t teid, reid, channel;
54 MucDigiCol::const_iterator pMucDigi = digiCol->begin();
55 for ( pMucDigi; pMucDigi != digiCol->end(); pMucDigi++ )
57 teid = ( *pMucDigi )->getIntId();
58 reid =
getREID( teid & 0xFFFFFFF0 );
60 ( strSqcVec[reid] == 0 ) ? ( 0x8000 >> ( teid & 0xF ) ) : ( 0x1 << ( teid & 0xF ) );
62 for ( index = 0; index < size; index++ )
64 if ( (
m_buf[index] >> 16 ) == reid )
66 m_buf[index] |= channel;
71 if ( index == size )
m_buf[size++] = ( ( reid << 16 ) | ( channel ) );
76 return StatusCode::SUCCESS;
81 ifstream
fs( fec2idFile.c_str() );
84 cerr <<
"Error: could not open file " << fec2idFile << endl;
85 return StatusCode::FAILURE;
88 fs.ignore( 256,
'\n' );
90 int fec, part, seg, layer, firstStr, strSqc;
92 for (
int i = 0; i < 572; i++ )
94 fs >> fec >> part >> seg >> layer >> firstStr >> strSqc;
100 m_re2te[reid] = teid;
101 strSqcVec[reid] = strSqc + 1;
102 m_te2reMap.insert( TE2REMAP::value_type( teid, reid ) );
106 return StatusCode::SUCCESS;
110 TE2REMAP::iterator itr = m_te2reMap.find( teid );
112 if ( itr == m_te2reMap.end() )
114 cout <<
"wrong teid in muc " << teid << endl;
eformat::write::FullEventFragment WriteRawEvent
ObjectVector< MucDigi > MucDigiCol
void append2event(WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
virtual StatusCode pack(MucDigiCol *digiCol, WriteRawEvent *&re)
virtual void unPack(uint32_t reDigi, uint32_t &REId, uint32_t &FecData, uint32_t &StrSqc)
virtual StatusCode initialize(string &initFile)
virtual uint32_t getREID(uint32_t teid)
static value_type getIntID(int barrel_ec, int segment, int layer, int channel)