DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
rawdatautils.unpack.utils.TDEEthUnpacker Class Reference
Inheritance diagram for rawdatautils.unpack.utils.TDEEthUnpacker:
[legend]
Collaboration diagram for rawdatautils.unpack.utils.TDEEthUnpacker:
[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)
 
- 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.tde
 
 frame_obj = fddetdataformats.TDEEthFrame
 
float SAMPLING_PERIOD = 31.25
 
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 592 of file utils.py.

Constructor & Destructor Documentation

◆ __init__()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 600 of file utils.py.

600 def __init__(self,channel_map=None,ana_data_prescale=1,wvfm_data_prescale=None):
601 super().__init__(ana_data_prescale=ana_data_prescale, wvfm_data_prescale=wvfm_data_prescale)
602 if 'TPC' in channel_map:
603 self.channel_map = detchannelmaps.make_tpc_map(channel_map)
604 elif 'PDS' in channel_map:
605 self.channel_map = detchannelmaps.make_pds_map(channel_map)
606 else:
607 self.channel_map = NullChannelMap
608

Member Function Documentation

◆ get_daq_header_version()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 612 of file utils.py.

612 def get_daq_header_version(self,frag):
613 return self.frame_obj(frag.get_data()).get_daqheader().version
614

◆ get_det_crate_slot_stream()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 621 of file utils.py.

621 def get_det_crate_slot_stream(self,frag):
622 dh = self.frame_obj(frag.get_data()).get_daqheader()
623 return dh.det_id, dh.crate_id, dh.slot_id, dh.stream_id
624

◆ get_det_data_all()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 667 of file utils.py.

667 def get_det_data_all(self,frag):
668 frh = frag.get_header()
669 trigger_number = frh.trigger_number
670
671 get_ana_data = (self.ana_data_prescale is not None and (trigger_number % self.ana_data_prescale)==0)
672 get_wvfm_data = (self.wvfm_data_prescale is not None and (trigger_number % self.wvfm_data_prescale)==0)
673
674 #print(f'\t\tTrigger number {trigger_number}: get_ana_data? {get_ana_data} get_wvfm_data? {get_wvfm_data}')
675
676 if not (get_ana_data or get_wvfm_data):
677 return None,None
678
679 ana_data = None
680 wvfm_data = None
681
682 adcs = self.unpacker.np_array_adc(frag)
683 det, crate, slot, stream = self.get_det_crate_slot_stream(frag)
684 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) ]
685 planes = [ self.channel_map.get_plane_from_offline_channel(uc) for uc in channels ]
686 elements = [ self.channel_map.get_element_id_from_offline_channel(uc) for uc in channels ]
687 tde_chans = range(self.N_CHANNELS_PER_FRAME)
688
689 if get_ana_data:
690 adc_mean = np.mean(adcs,axis=0)
691 adc_rms = np.std(adcs,axis=0)
692 adc_max = np.max(adcs,axis=0)
693 adc_min = np.min(adcs,axis=0)
694 adc_median = np.median(adcs,axis=0)
695 ana_data = [ TDEEthAnalysisData(run=frh.run_number,
696 trigger=frh.trigger_number,
697 sequence=frh.sequence_number,
698 src_id=frh.element_id.id,
699 channel=channels[i_ch],
700 plane=planes[i_ch],
701 element=elements[i_ch],
702 tde_chan=tde_chans[i_ch],
703 adc_mean=adc_mean[i_ch],
704 adc_rms=adc_rms[i_ch],
705 adc_max=adc_max[i_ch],
706 adc_min=adc_min[i_ch],
707 adc_median=adc_median[i_ch]) for i_ch in range(self.N_CHANNELS_PER_FRAME) ]
708 if get_wvfm_data:
709 timestamps = self.unpacker.np_array_timestamp(frag)
710 ffts = np.abs(np.fft.rfft(adcs,axis=0))
711 wvfm_data = [ TDEEthWaveformData(run=frh.run_number,
712 trigger=frh.trigger_number,
713 sequence=frh.sequence_number,
714 src_id=frh.element_id.id,
715 channel=channels[i_ch],
716 plane=planes[i_ch],
717 element=elements[i_ch],
718 tde_chan=tde_chans[i_ch],
719 timestamps=timestamps,
720 adcs=adcs[:,i_ch],
721 fft_mag=ffts[:,i_ch]) for i_ch in range(self.N_CHANNELS_PER_FRAME) ]
722
723 return ana_data, wvfm_data
724

◆ get_det_data_version()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 618 of file utils.py.

618 def get_det_data_version(self,frag):
619 return self.frame_obj(frag.get_data()).get_tdeheader().version
620

◆ get_det_header_data()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 625 of file utils.py.

625 def get_det_header_data(self,frag):
626 frh = frag.get_header()
627
628 n_frames = self.get_n_obj(frag)
629
630 errors_arr = np.empty(n_frames)
631 tai_time_arr = np.empty(n_frames)
632
633 for i in range(n_frames):
634 tdeh = self.frame_obj(frag.get_data(i*self.frame_obj.sizeof())).get_tdeheader()
635
636 errors_arr[i] = tdeh.tde_errors
637 tai_time_arr[i] = tdeh.TAItime
638
639 errors_change_idx, errors_change_val, _ = sparsify_array_diff_locs_and_vals(errors_arr)
640
641 tai_time_diff = np.diff(tai_time_arr)
642 tai_time_diff_change_idx, tai_time_diff_change_val, _ = sparsify_array_diff_locs_and_vals(tai_time_diff)
643
644 ts_arr = self.unpacker.np_array_timestamp(frag)
645 ts_diff_change_idx, ts_diff_change_val, _ = sparsify_array_diff_locs_and_vals(np.diff(ts_arr))
646
647 tdeh = self.frame_obj(frag.get_data()).get_tdeheader()
648 ts_diff_vals, ts_diff_counts = np.unique(np.diff(self.unpacker.np_array_timestamp(frag)),return_counts=True)
649 return [ TDEEthHeaderData(run=frh.run_number,
650 trigger=frh.trigger_number,
651 sequence=frh.sequence_number,
652 src_id=frh.element_id.id,
653 channel_id=tdeh.channel,
654 tde_header=tdeh.tde_header,
655 version=tdeh.version,
656 errors_vals=errors_change_val, errors_idx=errors_change_idx,
657 tai_time_diff_vals=tai_time_diff_change_val,
658 tai_time_diff_idx=tai_time_diff_change_idx,
659 tai_time_first=tai_time_arr[0],
660 timestamp_dts_diff_vals=ts_diff_change_val,
661 timestamp_dts_diff_idx=ts_diff_change_idx,
662 timestamp_dts_first=ts_arr[0],
663 n_frames=n_frames,
664 n_channels=self.N_CHANNELS_PER_FRAME,
665 sampling_period=self.SAMPLING_PERIOD) ]
666

◆ get_n_obj()

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

Reimplemented from rawdatautils.unpack.utils.FragmentUnpacker.

Definition at line 609 of file utils.py.

609 def get_n_obj(self,frag):
610 return self.unpacker.get_n_frames(frag)
611

◆ get_timestamp_first()

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

Reimplemented from rawdatautils.unpack.utils.DetectorFragmentUnpacker.

Definition at line 615 of file utils.py.

615 def get_timestamp_first(self,frag):
616 return self.frame_obj(frag.get_data()).get_timestamp()
617

Member Data Documentation

◆ channel_map

rawdatautils.unpack.utils.TDEEthUnpacker.channel_map = detchannelmaps.make_tpc_map(channel_map)

Definition at line 603 of file utils.py.

◆ frame_obj

rawdatautils.unpack.utils.TDEEthUnpacker.frame_obj = fddetdataformats.TDEEthFrame
static

Definition at line 595 of file utils.py.

◆ N_CHANNELS_PER_FRAME

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

Definition at line 598 of file utils.py.

◆ SAMPLING_PERIOD

float rawdatautils.unpack.utils.TDEEthUnpacker.SAMPLING_PERIOD = 31.25
static

Definition at line 597 of file utils.py.

◆ unpacker

rawdatautils.unpack.utils.TDEEthUnpacker.unpacker = rawdatautils.unpack.tde
static

Definition at line 594 of file utils.py.


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