diff --git a/redPoscdaq.py b/redPoscdaq.py index 62218ba23d902e64aa4d899fe8071b306af83589..e975fe6fb70817ba529de665429f1239b55311e1 100755 --- a/redPoscdaq.py +++ b/redPoscdaq.py @@ -95,7 +95,7 @@ class rpControl(QMainWindow, Ui_MCPHA): """ Args: - interactive: if True run in interactive mode, else run as mimoCoRB client + callback: function receiving recorded waveforms """ super(rpControl, self).__init__() self.callback_function = callback @@ -175,7 +175,7 @@ class rpControl(QMainWindow, Ui_MCPHA): help='trigger channel') parser.add_argument('--trigger_mode', type=str, choices={'norm','auto'}, default='norm', help='trigger mode') - parser.add_argument('-s', '--sample_size', type=int, default=4096, + parser.add_argument('-s', '--sample_size', type=int, default=2048, help='size of waveform sample') parser.add_argument('-p', '--pretrigger_fraction', type=float, default=0.05, help='pretrigger fraction') @@ -643,13 +643,6 @@ class OscDAQ(QWidget, Ui_OscDisplay): self.ax.set_xlabel("sample number " + self.xunit) self.canvas.draw() - def yield_data(self): - """ for mimoCoRB interface: - data as a numpy array of shape (n_channels, n_samples_per_channel) - """ - yield (self.data, None) - - def update_osci_display(self): self.curve1.set_ydata(self.buffer[0::2]) self.curve2.set_ydata(self.buffer[1::2]) @@ -851,7 +844,27 @@ class redP_consumer(): status_txt = "active: {:.1f}s trigger rate: {:.2f} Hz, data rate: {:.4g} MB/s".format(T_active, r, r*l_tot*4e-6) print(status_txt, end='\r') - +from mimocorb.buffer_control import rbPut +class redP_mimocorb(): + def __init__(self, source_list=None, sink_list=None, observe_list=None, config_dict=None, + **rb_info): + # initialize mimoCoRB interface + self.action = rbPut(config_dict=config_dict, sink_list=sink_list, **rb_info) + self.number_of_channels = len(self.action.sink.dtype) + self.events_required = 1000 if "eventcount" not in config_dict else config_dict["eventcount"] + + self.event_count = 0 + self.active=True + + def data_sink(self, data): + """function called by redPoscdaq + this simple version calculates statistics only + """ + while (self.events_required == 0 or self.event_count < self.events_required) and self.active: + # deliver pulse data and no metadata + active = self.action(data/5000., None) + self.event_count += 1 + def run_rpControl(callback=None): # start redPidaya GUI under Qt5 app = QApplication(sys.argv) @@ -866,4 +879,5 @@ if __name__ == '__main__': # -------------------------------------------- # run_rpControl() sink = redP_consumer() + print(sys.argv) run_rpControl(callback=sink.data_sink)