39 uint32_t TEId, REId, TEData, TEOverflow, TETorQ;
41 typedef pair<uint32_t, uint32_t> PairII;
42 vector<uint32_t> vHits;
48 uint32_t nbuf = src.
nBuf();
50 for ( uint32_t i = 0; i < nbuf; ++i )
52 uint32_t* buf = src( i );
53 uint32_t* bufend = buf + src.
bufSize( i );
54 for ( ; buf < bufend; ++buf )
57 if ( ( ( digi >> 18 ) & 0x3FFF ) == 0 )
63 m_builder.unPack( digi, REId, TEData, TEOverflow, TETorQ );
65 TEId = m_builder.getTEID( REId );
66 if ( TEId == 0xFFFFFFFF )
continue;
68 curTag = m_mdcTag[REId];
72 curTag[1] = 0x7FFFFFFF;
73 curTag[2] = 0x7FFFFFFF;
78 for ( std::vector<IdFixRule>::iterator it = m_idFixRules.begin();
79 it != m_idFixRules.end(); ++it )
81 IdFixRule& rule = ( *it );
82 if ( m_runId >= rule.run_from && m_runId <= rule.run_to )
84 if ( ( TEId & rule.mask ) == rule.value1 )
86 TEId = ( TEId & rule.reverse_mask ) | rule.value2;
89 else if ( ( TEId & rule.mask ) == rule.value2 )
91 TEId = ( TEId & rule.reverse_mask ) | rule.value1;
108 curTag[0] = ( TEId << 2 );
110 vHits.push_back( REId );
115 if ( ( curTag[0] & 1 ) == 0 )
119 curTag[3] |= TEOverflow;
124 if ( TEData >= curTag[1] )
126 if ( TEOverflow ) TEData |= ( 1 << 31 );
127 vmTDC.push_back( make_pair( REId, TEData ) );
131 if ( curTag[3] & 1 ) curTag[1] |= ( 1 << 31 );
132 vmTDC.push_back( make_pair( REId, curTag[1] ) );
134 curTag[3] &= ( 0xFFFFFFFF - 1 );
135 curTag[3] |= TEOverflow;
143 if ( TEOverflow ) curTag[3] |= 2;
149 if ( m_runMode == 1 )
151 for ( vector<PairII>::iterator it = vmTDC.begin(); it != vmTDC.end(); ++it )
153 curTag = m_mdcTag[it->first];
154 if ( ( curTag[0] & 3 ) == 3 )
156 uint32_t
data = it->second;
157 if (
data >> 31 )
continue;
161 des->push_back( mdcDigi );
165 for ( vector<uint32_t>::iterator it = vHits.begin(); it != vHits.end(); ++it )
167 curTag = m_mdcTag[*it];
168 if ( ( curTag[0] & 3 ) == 3 )
170 if ( ( ( curTag[3] & 3 ) > 0 ) ||
171 ( ( ( curTag[3] & 12 ) != 12 ) && ( ( curTag[3] & 12 ) != 0 ) ) )
178 des->push_back( mdcDigi );
185 for ( vector<PairII>::iterator it = vmTDC.begin(); it != vmTDC.end(); ++it )
187 curTag = m_mdcTag[it->first];
188 uint32_t
data = it->second;
191 des->push_back( mdcDigi );
194 for ( vector<uint32_t>::iterator it = vHits.begin(); it != vHits.end(); ++it )
196 curTag = m_mdcTag[*it];
199 des->push_back( mdcDigi );
205 return StatusCode::SUCCESS;