132 {
133
134
136
137 G4int tofDigiCollID = -1;
138 tofDigiCollID = m_DigiMan->GetDigiCollectionID( "BesTofDigitsCollection" );
139
140 if ( tofDigiCollID >= 0 )
141 {
144 G4int nDigi = tofDC->entries();
145 if ( nDigi > 0 )
146 {
147
148 BesTofDigi* digi;
149 vector<BesTofDigi*>* vecDC = tofDC->GetVector();
150 for ( int i = 0; i < nDigi - 1; i++ )
151 {
152 for ( int j = i + 1; j < nDigi; j++ )
153 {
154 if ( ( *vecDC )[i]->GetTrackIndex() > ( *vecDC )[j]->GetTrackIndex() )
155 {
156 digi = ( *vecDC )[i];
157 ( *vecDC )[i] = ( *vecDC )[j];
158 ( *vecDC )[j] = digi;
159 }
160 }
161 }
162
163
164 for ( int i = 0; i < nDigi; i++ )
165 {
166 digi = ( *tofDC )[i];
167
168
169
171
172
173
175
177 {
178 unsigned int layer = 0;
180 {
181 layer = 1;
183 }
184
185
186 Identifier ident =
TofID::cell_id( barrel_ec, layer, scinNum, 0 );
191
192 unsigned int charge;
194 {
195
197
198 if ( charge >= 8192 )
199 {
200
201 charge = ( charge | 0x080000 );
202 }
203 charge =
204 ( (
time & 0x07e000 ) | charge );
205 }
206 else { charge = 0; }
207
208 TofDigi* tofDigi =
new TofDigi( ident,
time, charge );
209 if ( charge & 0x80000 )
210 {
212 }
214 aTofDigiCol->push_back( tofDigi );
215
216
221
223 {
224
226
227 if ( charge >= 8192 )
228 {
229
230 charge = ( charge | 0x080000 );
231 }
232 charge =
233 ( (
time & 0x07e000 ) | charge );
234 }
235 else { charge = 0; }
236
237 tofDigi =
new TofDigi( ident,
time, charge );
238 if ( charge & 0x80000 )
239 {
241 }
243 aTofDigiCol->push_back( tofDigi );
244 }
245 else
246 {
247 if ( barrel_ec == 3 || barrel_ec == 4 )
248 {
249 unsigned int endcap = 0;
251 unsigned int strip = digi->
GetStrip();
252 if ( barrel_ec == 4 )
253 {
254 endcap = 1;
255 }
256
257
259 unsigned int tleading;
262 else { tleading = 0; }
263 unsigned int ttrailing;
266 else { ttrailing = 0; }
267 TofDigi* tofDigi = new TofDigi( ident, tleading, ttrailing );
269 aTofDigiCol->push_back( tofDigi );
270
271
272
273
274
275
276
280 else { tleading = 0; }
283 else { ttrailing = 0; }
284 tofDigi = new TofDigi( ident, tleading, ttrailing );
286 aTofDigiCol->push_back( tofDigi );
287 }
288 }
289 }
290 }
291 }
292
293
294 StatusCode scTof = m_evtSvc->registerObject( "/Event/Digi/TofDigiCol", aTofDigiCol );
295 if ( scTof != StatusCode::SUCCESS )
296 { G4cout << "Could not register TOF digi collection" << G4endl; }
297 return;
298}
ObjectVector< TofDigi > TofDigiCol
G4TDigiCollection< BesTofDigi > BesTofDigitsCollection
static unsigned int TofTimeChannel(double time)
void setOverflow(const unsigned int overflow)
static Identifier cell_id(int barrel_ec, int layer, int phi_module, int end)
For a single crystal.
static bool is_scin(const Identifier &id)
static value_type getPHI_BARREL_MAX()
static bool is_barrel(const Identifier &id)
Test for barrel.