447 def get_det_header_data(self,frag):
448 frh = frag.get_header()
449
450 n_frames = self.get_n_obj(frag)
451
452 pulser_arr = np.empty(n_frames)
453 calibration_arr = np.empty(n_frames)
454 ready_arr = np.empty(n_frames)
455 context_arr = np.empty(n_frames)
456 wib_sync_arr = np.empty(n_frames)
457 femb_sync_arr = np.empty(n_frames)
458 cd_arr = np.empty(n_frames)
459 crc_err_arr = np.empty(n_frames)
460 link_valid_arr = np.empty(n_frames)
461 lol_arr = np.empty(n_frames)
462 colddata_ts0_arr = np.empty(n_frames)
463 colddata_ts1_arr = np.empty(n_frames)
464
465 for i in range(n_frames):
466 wh = self.frame_obj(frag.get_data(i*self.frame_obj.sizeof())).get_wibheader()
467
468 pulser_arr[i] = wh.pulser
469 calibration_arr[i] = wh.calibration
470 ready_arr[i] = wh.ready
471 context_arr[i] = wh.context
472
473 wib_sync_arr[i] = wh.wib_sync
474 femb_sync_arr[i] = wh.femb_sync
475
476 cd_arr[i] = wh.cd
477 crc_err_arr[i] = wh.crc_err
478 link_valid_arr[i] = wh.link_valid
479 lol_arr[i] = wh.lol
480
481 colddata_ts0_arr[i] = wh.colddata_timestamp_0
482 colddata_ts1_arr[i] = wh.colddata_timestamp_1
483
484 pulser_change_idx, pulser_change_val, _ = sparsify_array_diff_locs_and_vals(pulser_arr)
485 calibration_change_idx, calibration_change_val, _ = sparsify_array_diff_locs_and_vals(calibration_arr)
486 ready_change_idx, ready_change_val, _ = sparsify_array_diff_locs_and_vals(context_arr)
487 context_change_idx, context_change_val, _ = sparsify_array_diff_locs_and_vals(context_arr)
488
489 wib_sync_change_idx, wib_sync_change_val, _ = sparsify_array_diff_locs_and_vals(wib_sync_arr)
490 femb_sync_change_idx, femb_sync_change_val, _ = sparsify_array_diff_locs_and_vals(femb_sync_arr)
491
492 cd_change_idx, cd_change_val, _ = sparsify_array_diff_locs_and_vals(cd_arr)
493 crc_err_change_idx, crc_err_change_val, _ = sparsify_array_diff_locs_and_vals(crc_err_arr)
494 link_valid_change_idx, link_valid_change_val, _ = sparsify_array_diff_locs_and_vals(link_valid_arr)
495 lol_change_idx, lol_change_val, _ = sparsify_array_diff_locs_and_vals(context_arr)
496
497 colddata_ts0_diff = np.diff(colddata_ts0_arr)
498 colddata_ts0_diff[colddata_ts0_diff<0] = colddata_ts0_diff[colddata_ts0_diff<0]+0x8000
499 colddata_ts0_diff_change_idx, colddata_ts0_diff_change_val, _ = sparsify_array_diff_locs_and_vals(colddata_ts0_diff)
500
501 colddata_ts1_diff = np.diff(colddata_ts1_arr)
502 colddata_ts1_diff[colddata_ts1_diff<0] = colddata_ts1_diff[colddata_ts1_diff<0]+0x8000
503 colddata_ts1_diff_change_idx, colddata_ts1_diff_change_val, _ = sparsify_array_diff_locs_and_vals(colddata_ts1_diff)
504
505 ts_arr = self.unpacker.np_array_timestamp(frag)
506 ts_diff_change_idx, ts_diff_change_val, _ = sparsify_array_diff_locs_and_vals(np.diff(ts_arr))
507
508 wh = self.frame_obj(frag.get_data()).get_wibheader()
509 ts_diff_vals, ts_diff_counts = np.unique(np.diff(self.unpacker.np_array_timestamp(frag)),return_counts=True)
510 return [ WIBEthHeaderData(run=frh.run_number,
511 trigger=frh.trigger_number,
512 sequence=frh.sequence_number,
513 src_id=frh.element_id.id,
514 femb_id=(wh.channel>>1)&0x3,
515 colddata_id=wh.channel&0x1,
516 version=wh.version,
517 pulser_vals=pulser_change_val, pulser_idx=pulser_change_idx,
518 calibration_vals=calibration_change_val, calibration_idx=calibration_change_idx,
519 ready_vals=ready_change_val, ready_idx=ready_change_idx,
520 context_vals=context_change_val, context_idx=context_change_idx,
521 wib_sync_vals=wib_sync_change_val, wib_sync_idx=wib_sync_change_idx,
522 femb_sync_vals=femb_sync_change_val, femb_sync_idx=femb_sync_change_idx,
523 cd_vals=cd_change_val, cd_idx=cd_change_idx,
524 crc_err_vals=crc_err_change_val, crc_err_idx=crc_err_change_idx,
525 link_valid_vals=link_valid_change_val, link_valid_idx=link_valid_change_idx,
526 lol_vals=lol_change_val, lol_idx=lol_change_idx,
527 colddata_timestamp_0_diff_vals=colddata_ts0_diff_change_val,
528 colddata_timestamp_0_diff_idx=colddata_ts0_diff_change_idx,
529 colddata_timestamp_0_first=colddata_ts0_arr[0],
530 colddata_timestamp_1_diff_vals=colddata_ts1_diff_change_val,
531 colddata_timestamp_1_diff_idx=colddata_ts1_diff_change_idx,
532 colddata_timestamp_1_first=colddata_ts1_arr[0],
533 timestamp_dts_diff_vals=ts_diff_change_val, timestamp_dts_diff_idx=ts_diff_change_idx,
534 timestamp_dts_first=ts_arr[0],
535 n_frames=n_frames,
536 n_channels=self.N_CHANNELS_PER_FRAME,
537 sampling_period=self.SAMPLING_PERIOD) ]
538