DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
rawdatautils.unpack.utils.WIBEthUnpacker Class Reference
Inheritance diagram for rawdatautils.unpack.utils.WIBEthUnpacker:
[legend]
Collaboration diagram for rawdatautils.unpack.utils.WIBEthUnpacker:
[legend]

Public Member Functions

 __init__ (self, channel_map=None, ana_data_prescale=1, wvfm_data_prescale=None)
 
 get_n_obj (self, frag)
 
 get_daq_header_version (self, frag)
 
 get_timestamp_first (self, frag)
 
 get_det_data_version (self, frag)
 
 get_det_crate_slot_stream (self, frag)
 
 get_det_header_data (self, frag)
 
 get_det_data_all (self, frag)
 
- Public Member Functions inherited from rawdatautils.unpack.utils.DetectorFragmentUnpacker
 get_daq_header_data (self, frag)
 
 get_det_data (self, frag)
 
- Public Member Functions inherited from rawdatautils.unpack.utils.FragmentUnpacker
 get_trg_data (self, in_data)
 
 get_frh_data (self, frag)
 
 get_all_data (self, in_data)
 
- Public Member Functions inherited from rawdatautils.unpack.utils.Unpacker

Public Attributes

 channel_map = detchannelmaps.make_tpc_map(channel_map) if channel_map else NullChannelMap
 
- Public Attributes inherited from rawdatautils.unpack.utils.DetectorFragmentUnpacker
 ana_data_prescale = None if not ana_data_prescale else int(ana_data_prescale)
 
 wvfm_data_prescale = None if not wvfm_data_prescale else int(wvfm_data_prescale)
 
- Public Attributes inherited from rawdatautils.unpack.utils.Unpacker
 index = index
 

Static Public Attributes

 unpacker = rawdatautils.unpack.wibeth
 
 frame_obj = fddetdataformats.WIBEthFrame
 
int SAMPLING_PERIOD = 32
 
int N_CHANNELS_PER_FRAME = 64
 
- Static Public Attributes inherited from rawdatautils.unpack.utils.DetectorFragmentUnpacker
bool is_detector_unpacker = True
 
- Static Public Attributes inherited from rawdatautils.unpack.utils.FragmentUnpacker
bool is_fragment_unpacker = True
 
bool is_detector_unpacker = False
 
bool is_trigger_unpacker = False
 
- Static Public Attributes inherited from rawdatautils.unpack.utils.Unpacker
bool is_fragment_unpacker = False
 
bool is_detector_unpacker = False
 
bool is_trigger_unpacker = False
 

Detailed Description

Definition at line 413 of file utils.py.

Constructor & Destructor Documentation

◆ __init__()

rawdatautils.unpack.utils.WIBEthUnpacker.__init__ ( self,
channel_map = None,
ana_data_prescale = 1,
wvfm_data_prescale = None )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 421 of file utils.py.

421 def __init__(self,channel_map=None,ana_data_prescale=1,wvfm_data_prescale=None):
422 super().__init__(ana_data_prescale=ana_data_prescale, wvfm_data_prescale=wvfm_data_prescale)
423 self.channel_map = detchannelmaps.make_tpc_map(channel_map) if channel_map else NullChannelMap
424

Member Function Documentation

◆ get_daq_header_version()

rawdatautils.unpack.utils.WIBEthUnpacker.get_daq_header_version ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 428 of file utils.py.

428 def get_daq_header_version(self,frag):
429 return self.frame_obj(frag.get_data()).get_daqheader().version
430

◆ get_det_crate_slot_stream()

rawdatautils.unpack.utils.WIBEthUnpacker.get_det_crate_slot_stream ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 437 of file utils.py.

437 def get_det_crate_slot_stream(self,frag):
438 dh = self.frame_obj(frag.get_data()).get_daqheader()
439 return dh.det_id, dh.crate_id, dh.slot_id, dh.stream_id
440

◆ get_det_data_all()

rawdatautils.unpack.utils.WIBEthUnpacker.get_det_data_all ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 533 of file utils.py.

533 def get_det_data_all(self,frag):
534 frh = frag.get_header()
535 trigger_number = frh.trigger_number
536
537 get_ana_data = (self.ana_data_prescale is not None and (trigger_number % self.ana_data_prescale)==0)
538 get_wvfm_data = (self.wvfm_data_prescale is not None and (trigger_number % self.wvfm_data_prescale)==0)
539
540 #print(f'\t\tTrigger number {trigger_number}: get_ana_data? {get_ana_data} get_wvfm_data? {get_wvfm_data}')
541
542 if not (get_ana_data or get_wvfm_data):
543 return None,None
544
545 ana_data = None
546 wvfm_data = None
547
548 adcs = self.unpacker.np_array_adc(frag)
549 det, crate, slot, stream = self.get_det_crate_slot_stream(frag)
550 channels = [ self.channel_map.get_offline_channel_from_det_crate_slot_stream_chan(det, crate, slot, stream, c) for c in range(self.N_CHANNELS_PER_FRAME) ]
551 planes = [ self.channel_map.get_plane_from_offline_channel(uc) for uc in channels ]
552 elements = [ self.channel_map.get_element_id_from_offline_channel(uc) for uc in channels ]
553 wib_chans = range(self.N_CHANNELS_PER_FRAME)
554
555 if get_ana_data:
556 adc_mean = np.mean(adcs,axis=0)
557 adc_rms = np.std(adcs,axis=0)
558 adc_max = np.max(adcs,axis=0)
559 adc_min = np.min(adcs,axis=0)
560 adc_median = np.median(adcs,axis=0)
561 ana_data = [ WIBEthAnalysisData(run=frh.run_number,
562 trigger=frh.trigger_number,
563 sequence=frh.sequence_number,
564 src_id=frh.element_id.id,
565 channel=channels[i_ch],
566 plane=planes[i_ch],
567 element=elements[i_ch],
568 wib_chan=wib_chans[i_ch],
569 adc_mean=adc_mean[i_ch],
570 adc_rms=adc_rms[i_ch],
571 adc_max=adc_max[i_ch],
572 adc_min=adc_min[i_ch],
573 adc_median=adc_median[i_ch]) for i_ch in range(self.N_CHANNELS_PER_FRAME) ]
574 if get_wvfm_data:
575 timestamps = self.unpacker.np_array_timestamp(frag)
576 ffts = np.abs(np.fft.rfft(adcs,axis=0))
577 wvfm_data = [ WIBEthWaveformData(run=frh.run_number,
578 trigger=frh.trigger_number,
579 sequence=frh.sequence_number,
580 src_id=frh.element_id.id,
581 channel=channels[i_ch],
582 plane=planes[i_ch],
583 element=elements[i_ch],
584 wib_chan=wib_chans[i_ch],
585 timestamps=timestamps,
586 adcs=adcs[:,i_ch],
587 fft_mag=ffts[:,i_ch]) for i_ch in range(self.N_CHANNELS_PER_FRAME) ]
588
589 return ana_data, wvfm_data
590
591

◆ get_det_data_version()

rawdatautils.unpack.utils.WIBEthUnpacker.get_det_data_version ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 434 of file utils.py.

434 def get_det_data_version(self,frag):
435 return self.frame_obj(frag.get_data()).get_wibheader().version
436

◆ get_det_header_data()

rawdatautils.unpack.utils.WIBEthUnpacker.get_det_header_data ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 441 of file utils.py.

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

◆ get_n_obj()

rawdatautils.unpack.utils.WIBEthUnpacker.get_n_obj ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.FragmentUnpacker.

Definition at line 425 of file utils.py.

425 def get_n_obj(self,frag):
426 return self.unpacker.get_n_frames(frag)
427

◆ get_timestamp_first()

rawdatautils.unpack.utils.WIBEthUnpacker.get_timestamp_first ( self,
frag )

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 431 of file utils.py.

431 def get_timestamp_first(self,frag):
432 return self.frame_obj(frag.get_data()).get_timestamp()
433

Member Data Documentation

◆ channel_map

rawdatautils.unpack.utils.WIBEthUnpacker.channel_map = detchannelmaps.make_tpc_map(channel_map) if channel_map else NullChannelMap

Definition at line 423 of file utils.py.

◆ frame_obj

rawdatautils.unpack.utils.WIBEthUnpacker.frame_obj = fddetdataformats.WIBEthFrame
static

Definition at line 416 of file utils.py.

◆ N_CHANNELS_PER_FRAME

int rawdatautils.unpack.utils.WIBEthUnpacker.N_CHANNELS_PER_FRAME = 64
static

Definition at line 419 of file utils.py.

◆ SAMPLING_PERIOD

int rawdatautils.unpack.utils.WIBEthUnpacker.SAMPLING_PERIOD = 32
static

Definition at line 418 of file utils.py.

◆ unpacker

rawdatautils.unpack.utils.WIBEthUnpacker.unpacker = rawdatautils.unpack.wibeth
static

Definition at line 415 of file utils.py.


The documentation for this class was generated from the following file: