19 REId = ( reDigi & m_idMask ) >> m_idIndex;
22 TEData = reDigi & m_dataMask;
23 overFlow = ( reDigi & m_overflowMask ) >> m_overflowIndex;
24 TorQ = ( reDigi & m_TQMask ) >> m_TQIndex;
33 cerr <<
"MdcBuilder::pack can't get digiCol" << endl;
34 return StatusCode::FAILURE;
38 uint32_t teid = 0, tetdc = 0, teadc = 0, reid = 0, redigi = 0, overflow = 0;
40 MdcDigiCol::const_iterator pMdcDigi = digiCol->begin();
41 for ( pMdcDigi; pMdcDigi != digiCol->end(); pMdcDigi++ )
46 if ( layer == 20 && wire < 8 ) { layer = 42; }
47 else if ( layer == 42 && wire < 8 ) { layer = 20; }
48 else if ( layer == 40 )
50 if ( wire >= 200 && wire < 208 ) { wire += 8; }
51 else if ( wire >= 208 && wire < 216 ) { wire -= 8; }
57 tetdc = ( *pMdcDigi )->getTimeChannel();
58 teadc = ( *pMdcDigi )->getChargeChannel();
60 uint32_t overflow_tmp = ( *pMdcDigi )->getOverflow();
62 if ( tetdc != 0x7FFFFFFF )
64 overflow = ( ( tetdc > m_dataMask ) ? 1 : 0 ) | ( overflow_tmp & 1 );
65 redigi = ( tetdc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
66 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
67 ( ( 0 << m_TQIndex ) & m_TQMask );
68 m_buf[size++] = redigi;
71 if ( teadc != 0x7FFFFFFF )
73 overflow = ( ( teadc > m_dataMask ) ? 1 : 0 ) | ( ( overflow_tmp >> 1 ) & 1 );
74 redigi = ( teadc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
75 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
76 ( ( 1 << m_TQIndex ) & m_TQMask );
77 m_buf[size++] = redigi;
83 return StatusCode::SUCCESS;
91 uint32_t NRELAYERPOS, NREWIREPOS, NREEAWEPOS;
92 uint32_t NRELAYERMASK, NREWIREMASK, NREEAWEMASK;
96 f.open( initFile.c_str() );
98 if (
f.bad() || !
f.is_open() )
100 cerr <<
"Error: could not open file " << initFile << endl;
101 return StatusCode::FAILURE;
106 cerr <<
"Error: could not find '##MdcDigiConf' in file " << initFile << endl;
107 return StatusCode::FAILURE;
117 return StatusCode::FAILURE;
122 uint32_t nRELayerPos, nREWirePos, nREEaWePos;
123 uint32_t nRELayerMask, nREWireMask, nREEaWeMask;
130 uint32_t layer, wire;
132 nRELayerPos = NRELAYERPOS;
133 nREWirePos = NREWIREPOS;
134 nRELayerMask = NRELAYERMASK;
135 nREWireMask = NREWIREMASK;
137 for ( uint32_t TELayer = 0; TELayer <= TELayerMax; TELayer++ )
145 nRELayerMask = nRELayerMask & 0xFFFFFBFF;
146 nREWireMask = nREWireMask | 0x00000400;
155 for ( uint32_t TEWire = 0; TEWire <= TEWireMax; TEWire++ )
158 uint32_t reid = ( ( ( layer << nRELayerPos ) & nRELayerMask ) |
159 ( ( wire << nREWirePos ) & nREWireMask ) ) >>
170 cerr <<
"Error: REID overflow !" << reid << endl;
175 m_re2te[reid] = teid;
176 m_te2reMap.insert( TE2REMAP::value_type( teid, reid ) );
181 return StatusCode::SUCCESS;