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