Converts a full event fragment, from the old to new format, using the space of contiguous memory storage area given. If the event given is already on v3.0 format, no conversion takes place.
244 {
246
248 {
251 }
252
253
256 {
257 memcpy( dest, src, sizeof( uint32_t ) * src[1] );
258 return src[1];
259 }
262
263
264 old::FullEventFragment fe( src );
265 fe.check_tree();
266
267
268
269
270 eformat::write::FullEventFragment nfe(
convert_source( fe.source_id() ),
271
272 fe.date(), fe.global_id(), fe.run_no(), fe.lvl1_id(),
273 fe.lvl1_trigger_type(), fe.lvl2_trigger_info(),
274 fe.event_filter_info() );
275 nfe.status( fe.nstatus(), fe.status() );
276 nfe.minor_version( version.minor2() );
277
278
279
280
281
282 std::vector<eformat::write::SubDetectorFragment*> acc_sd;
283 std::vector<eformat::write::ROSFragment*> acc_ros;
284 std::vector<eformat::write::ROBFragment*> acc_rob;
285
286 for ( size_t i = 0; i < fe.noffset(); ++i )
287 {
288 old::SubDetectorFragment sd( fe.child( i ) );
289
290
291
292
293 eformat::write::SubDetectorFragment* nsd =
294 new eformat::write::SubDetectorFragment(
convert_source( sd.source_id() ) );
295
296 nsd->
status( sd.nstatus(), sd.status() );
297 helper::Version sd_version( sd.version() );
299
300 for ( size_t j = 0; j < sd.noffset(); ++j )
301 {
302 old::ROSFragment ros( sd.child( j ) );
303
304
305
306
307 eformat::write::ROSFragment* nros = new eformat::write::ROSFragment(
308 convert_source( ros.source_id() ), ros.run_no(), ros.lvl1_id(), ros.bc_id() );
309
310 nros->
status( ros.nstatus(), ros.status() );
311 helper::Version ros_version( ros.version() );
313
314 for ( size_t k = 0; k < ros.noffset(); ++k )
315 {
316 old::ROBFragment rob( ros.child( k ) );
317 uint32_t source_id = rob.source_id();
318
319 for ( size_t l = 0; l < rob.noffset(); ++l )
320 {
321 old::RODFragment rod( rob.rod( l ) );
322 if ( rob.noffset() != 1 ) source_id = rod.source_id();
323
324
325 eformat::write::ROBFragment* nrob = new eformat::write::ROBFragment
326
327 (
convert_source( source_id ), rod.run_no(), rod.lvl1_id(), rod.bc_id(),
328 rod.lvl1_trigger_type(), rod.detev_type(), rod.ndata(), rod.data(),
329 rod.status_position() );
330 nrob->
status( rob.nstatus(), rob.status() );
331 nrob->
rod_status( rod.nstatus(), rod.status() );
332 helper::Version rob_version( rob.version() );
334 helper::Version rod_version( rod.version() );
336
337
339
340 acc_rob.push_back( nrob );
341 }
342 }
343
345
346 acc_ros.push_back( nros );
347 }
348
349 nfe.append( nsd );
350
351 acc_sd.push_back( nsd );
352 }
353
354
356
358
359
360 for ( size_t i = 0; i < acc_rob.size(); ++i ) delete acc_rob[i];
361 for ( size_t i = 0; i < acc_ros.size(); ++i ) delete acc_ros[i];
362 for ( size_t i = 0; i < acc_sd.size(); ++i ) delete acc_sd[i];
363
364 return retval;
365}
uint32_t convert_ros(const uint32_t *src, uint32_t *dest, uint32_t max)