File indexing completed on 2025-02-22 09:39:17
0001
0002
0003
0004
0005 #pragma once
0006
0007 #include "line_builder.h"
0008
0009 #include <cstdint>
0010 #include <list>
0011 #include <vector>
0012
0013 class kcu_event {
0014 private:
0015 uint32_t fpga;
0016 uint32_t samples;
0017 uint32_t found;
0018 uint32_t added;
0019
0020 uint32_t *bunch_counter;
0021 uint32_t *event_counter;
0022 uint32_t *orbit_counter;
0023 uint32_t *timestamp;
0024
0025
0026 long unwrapped_timestamp;
0027 long unwrapped_event_number;
0028
0029 uint32_t *adc[144];
0030 uint32_t *toa[144];
0031 uint32_t *tot[144];
0032
0033 public:
0034 kcu_event(uint32_t fpga, uint32_t samples);
0035 ~kcu_event();
0036
0037 bool is_complete();
0038 bool is_ordered();
0039
0040
0041 long get_timestamp() {return unwrapped_event_number;}
0042 uint32_t get_event_counter() {return event_counter[0];}
0043 uint32_t get_sample_adc(int channel, int sample) {return adc[channel][sample];}
0044 uint32_t get_sample_toa(int channel, int sample) {return toa[channel][sample];}
0045 uint32_t get_sample_tot(int channel, int sample) {return tot[channel][sample];}
0046
0047 uint32_t get_n_samples() {return samples;}
0048
0049 friend class waveform_builder;
0050 };
0051
0052 class waveform_builder {
0053 private:
0054 uint32_t fpga_id;
0055 uint32_t num_samples;
0056
0057 uint32_t attempted;
0058 uint32_t aborted;
0059 uint32_t completed;
0060
0061 std::list<kcu_event*> *in_progress;
0062 std::list<kcu_event*> *complete;
0063
0064 public:
0065 waveform_builder(uint32_t fpga_id, uint32_t num_samples);
0066 ~waveform_builder();
0067 bool build(std::list<sample*> *samples);
0068 void unwrap_counters();
0069 std::list<kcu_event*>* get_complete() {return complete;}
0070 };