27 {
28 uint32_t REId, TEId, TEData, TEOverflow, TETorQ;
29 uint32_t n1buf = tof.
nBuf();
30 uint32_t n2buf = etf.
nBuf();
31 uint32_t nbuf = n1buf + n2buf;
32
33 TofDigi* tofDigi;
34 typedef std::multimap<uint32_t, TofDigi*>::iterator my_iter;
35 std::multimap<uint32_t, TofDigi*> mapIdData;
36 my_iter it;
37
38 for ( uint32_t i = 0; i < nbuf; ++i )
39 {
40 bool isTof = ( i < n1buf );
41 const BufferHolder& rBH = isTof ? tof : etf;
42 uint32_t ii = isTof ? i : ( i - n1buf );
43 uint32_t* buf = rBH( ii );
44 uint32_t bufSize = rBH.
bufSize( ii );
45 for ( uint32_t j = 0; j < bufSize; ++j )
46 {
47 if ( isTof )
48 {
49 m_builder.unPack( buf[j], REId, TEData, TEOverflow, TETorQ );
50 TEId = m_builder.getTEID( REId );
51 }
52 else
53 {
54 this->unPackETF( buf[j], TEId, TEData, TEOverflow, TETorQ );
55 }
56
57 if ( TEId == 0xFFFFFFFF )
58 {
59 uint32_t data_unit = buf[j];
60 if ( ( data_unit >> 25 ) == 0x7F )
61 {
62 tofDigi = new TofDigi( Identifier( 0xFFFFFFFF ), 0x7FFFFFFF, 0x7FFFFFFF );
64 des->push_back( tofDigi );
65 }
66 continue;
67 }
68
69 uint32_t
count = mapIdData.count( TEId );
70
72 {
73 if ( TETorQ )
74 {
75 tofDigi = new TofDigi( Identifier( TEId ), 0x7FFFFFFF, TEData );
77 }
78 else
79 {
80 tofDigi = new TofDigi( Identifier( TEId ), TEData, 0x7FFFFFFF );
82 }
83 mapIdData.insert( make_pair( TEId, tofDigi ) );
84 }
85 else
86 {
87 pair<my_iter, my_iter> range = mapIdData.equal_range( TEId );
88 it = range.first;
89 tofDigi = it->second;
90 if ( TETorQ )
91 {
93 {
96 while ( ( ++it ) != range.second )
97 {
98 tofDigi = it->second;
100 }
101 }
102 else
103 {
105 while ( it != range.second )
106 {
107 tofDigi = ( it++ )->second;
109 }
110 tofDigi = new TofDigi( Identifier( TEId ), 0x7FFFFFFF, TEData );
112 mapIdData.insert( make_pair( TEId, tofDigi ) );
113 }
114 }
115 else
116 {
118 {
121 while ( ( ++it ) != range.second )
122 {
123 tofDigi = it->second;
125 }
126 }
127 else
128 {
130 while ( it != range.second )
131 {
132 tofDigi = ( it++ )->second;
134 }
135 tofDigi = new TofDigi( Identifier( TEId ), TEData, 0x7FFFFFFF );
137 mapIdData.insert( make_pair( TEId, tofDigi ) );
138 }
139 }
140 }
141 }
142 }
143
144 my_iter end = mapIdData.end();
145 for ( it = mapIdData.begin(); it != end; ++it )
146 {
147 TEId = it->first;
148 tofDigi = it->second;
149 if ( ( TEId & 0xFFFF7FFF ) != 0x20000060 ) { des->push_back( tofDigi ); }
150
151 else
152 {
153 if ( des2 != 0 ) { des2->push_back( new LumiDigi( tofDigi ) ); }
154 delete tofDigi;
155 }
156 }
157
158 return StatusCode::SUCCESS;
159}
DOUBLE_PRECISION count[3]
uint32_t bufSize(int i) const
void setChargeChannel(const unsigned int chargeChannel)
unsigned int getChargeChannel() const
void setTimeChannel(const unsigned int timeChannel)
unsigned int getTimeChannel() const
unsigned int getOverflow()
void setOverflow(const unsigned int overflow)