35 cerr <<
"TofBuilder::pack can't get digiCol" << endl;
36 return StatusCode::FAILURE;
40 uint32_t teid = 0, tetdc = 0, teadc = 0, reid = 0, redigi = 0, overflow = 0;
41 std::vector<TofDigi*> vEtfDigi;
44 TofDigiCol::const_iterator pTofDigi = digiCol->begin();
45 for ( pTofDigi; pTofDigi != digiCol->end(); pTofDigi++ )
49 vEtfDigi.push_back( *pTofDigi );
52 teid = ( *pTofDigi )->getIntId();
53 if ( teid == 0xFFFFFFFF )
55 m_buf[size++] = ( *pTofDigi )->getOverflow();
59 if ( ( teid & 0x4001 ) == 1 )
continue;
61 tetdc = ( *pTofDigi )->getTimeChannel();
62 teadc = ( *pTofDigi )->getChargeChannel();
64 uint32_t overflow_tmp = ( *pTofDigi )->getOverflow();
66 if ( tetdc != 0x7FFFFFFF )
68 overflow = ( ( tetdc > m_dataMask ) ? 1 : 0 ) | ( overflow_tmp & 1 );
69 redigi = ( tetdc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
70 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
71 ( ( 0 << m_TQIndex ) & m_TQMask );
72 m_buf[size++] = redigi;
75 if ( teadc != 0x7FFFFFFF )
77 overflow = ( ( teadc > m_dataMask ) ? 1 : 0 ) | ( ( overflow_tmp >> 1 ) & 1 );
78 redigi = ( teadc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
79 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
80 ( ( 1 << m_TQIndex ) & m_TQMask );
81 m_buf[size++] = redigi;
88 uint32_t shift = size;
89 for ( std::vector<TofDigi*>::const_iterator pEtfDigi = vEtfDigi.begin();
90 pEtfDigi != vEtfDigi.end(); ++pEtfDigi )
92 teid = ( *pEtfDigi )->getIntId();
93 if ( teid == 0xFFFFFFFF )
95 m_buf[size++] = ( *pEtfDigi )->getOverflow();
99 tetdc = ( *pEtfDigi )->getTimeChannel();
100 teadc = ( *pEtfDigi )->getChargeChannel();
102 if ( tetdc != 0x7FFFFFFF )
104 redigi = ( tetdc & 0x7FFFF ) |
106 ( ( reid << 20 ) & 0xFFF00000 );
107 m_buf[size++] = redigi;
110 if ( teadc != 0x7FFFFFFF )
113 ( teadc & 0x7FFFF ) | ( ( 1 << 19 ) & 0x80000 ) | ( ( reid << 20 ) & 0xFFF00000 );
114 m_buf[size++] = redigi;
118 if ( size != shift )
append2event( re, 0xa70000, size - shift, shift );
120 return StatusCode::SUCCESS;
128 uint32_t nRELayerPos, nRECellPos, nREEaWePos;
129 uint32_t nRELayerMask, nRECellMask, nREEaWeMask;
133 f.open( initFile.c_str() );
137 cerr <<
"Error: could not open file " << initFile << endl;
138 return StatusCode::FAILURE;
143 cerr <<
"Error: could not find '##TofDigiConf' in file " << initFile << endl;
144 return StatusCode::FAILURE;
155 return StatusCode::FAILURE;
164 uint32_t TELayerMax, TEphiMax, TEBaEaWe;
165 uint32_t eawe = 0, layer = 0, cell = 0;
167 if ( barrel_ec_eawe == 1 )
181 for ( TEBaEaWe = 0; TEBaEaWe < 2; TEBaEaWe++ )
183 if ( barrel_ec_eawe != 1 && TEBaEaWe > 0 )
break;
184 eawe = TEBaEaWe + ( barrel_ec_eawe / 2 );
185 for ( uint32_t TELayer = 0; TELayer <= TELayerMax; TELayer++ )
187 if ( barrel_ec_eawe == 1 ) { layer = TELayer + 1; }
196 for ( uint32_t TEphi = 0; TEphi <= TEphiMax; TEphi++ )
199 uint32_t reid = ( ( ( eawe << nREEaWePos ) & nREEaWeMask ) |
200 ( ( layer << nRELayerPos ) & nRELayerMask ) |
201 ( ( cell << nRECellPos ) & nRECellMask ) );
202 uint32_t teid =
TofID::getIntID( barrel_ec_eawe, TELayer, TEphi, TEBaEaWe );
209 m_re2te[reid] = teid;
210 m_te2reMap.insert( TE2REMAP::value_type( teid, reid ) );
219 for ( uint32_t module = 0;
module < 36; ++module )
221 for ( uint32_t strip = 0; strip < 12; ++strip )
228 m_te2reMap.insert( TE2REMAP::value_type( teid, ( teid & 0xFFF ) ) );
230 m_te2reMap.insert( TE2REMAP::value_type( teid, ( teid & 0xFFF ) ) );
232 m_te2reMap.insert( TE2REMAP::value_type( teid, ( teid & 0xFFF ) ) );
234 m_te2reMap.insert( TE2REMAP::value_type( teid, ( teid & 0xFFF ) ) );
239 return StatusCode::SUCCESS;