Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 09:39:17

0001 /*
0002 Collects individual samples built by line_builder and builds waveforms from them.
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     // Maybe we can simplifly things by unwrapping the counter
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     // uint32_t get_timestamp() {return timestamp[0];}
0040     // long get_timestamp() {return unwrapped_timestamp;}
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 };