diff --git a/README.md b/README.md index c2ffcf636410a2ef1a872e016a746df7bdd4adb4..a345885637c0866685796ec82a290c82713609f2 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ the server and pulls the data to the client computer. - *README.md* this documentation - *mchpa.py* client program - - *rePosci.py* a simple oscilloscope and daq client using the mcpha server + - *rePoscidaq.py* a simple oscilloscope and daq client using the mcpha server - *rpControl.ui* qt5 tab for *redPosci* application - *mcpha_daq.ui* qt5 tab for oscilloscope with daq mode - *redP_mimocorb.py* runs *redPoscdaq* as a client of the buffer manager *mimoCoRB* diff --git a/redPoscdaq.py b/redPoscdaq.py index 64407bfcb77ced5dfcec37c308d12777a8d1dd16..b8d7298a43be144e8ca461c51463ed63ab811317 100755 --- a/redPoscdaq.py +++ b/redPoscdaq.py @@ -111,14 +111,14 @@ class rpControl(QMainWindow, Ui_MCPHA): plt.style.use("default") # set graphics style self.callback_function = callback + # initialize parameters self.confd = {} if conf_dict is None else conf_dict - self.callback = True if callback is not None else False - # get configuration from command line or config dict + self.parse_confd() + # get configuration from command line if conf_dict is None: self.parse_args() - else: - self.parse_confd() - + self.callback = True if callback is not None else False + # set physical units (for axis labels) self.get_physical_units() self.setupUi(self) @@ -180,35 +180,55 @@ class rpControl(QMainWindow, Ui_MCPHA): else: self.addrValue.setStyleSheet("color: darkorange") + def parse_confd(self): + # all relevant parameters are here + self.daq_mode = False # True + self.ip_address ='192.168.1.100' if "ip_address" not in self.confd \ + else self.confd["ip_address"] + self.sample_size = 2048 if "number_of_samples" not in self.confd \ + else self.confd["number_of_samples"] + self.pretrigger_fraction = 0.05 if "pre_trigger_samples" not in self.confd \ + else self.confd["pre_trigger_samples"]/self.sample_size + self.trigger_mode = 0 if "trigger_mode" not in self.confd \ + else 1 if self.confd["trigger_mode"] == "auto" else 0 + self.trigger_source = 0 if "trigger_channel" not in self.confd \ + else int(self.confd["trigger_channel"])-1 + self.trigger_level = 500 if "trigger_level" not in self.confd else self.confd["trigger_level"] + self.trigger_slope = 0 if "trigger_direction" not in self.confd else\ + 0 if self.confd["trigger_direction"] == "rising" else 1 + self.decimation_index = 1 if "decimation_index" not in self.confd else \ + self.confd["decimation_index"] + self.invert1 = 0 if "invert_channel1" not in self.confd else self.confd["invert_channel1"] + self.invert2 = 0 if "invert_channel2" not in self.confd else self.confd["invert_channel2"] + self.readInterval = 1000 # used to control update of oscilloscope display + # other parameters + self.filename = '' # file name for data export + def parse_args(self): parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('-c', '--connect_ip', type=str, default = '192.168.178.109', + parser.add_argument('-c', '--connect_ip', type=str, default=self.ip_address, help='connect IP address of RedPitaya') # for oscilloscope display - parser.add_argument('-i', '--interval', type=int, default=500, + parser.add_argument('-i', '--interval', type=int, default=self.readInterval, help='interval for readout (in ms)') # trigger mode - parser.add_argument('-t', '--trigger_level', type=int, default=500, + parser.add_argument('-t', '--trigger_level', type=int, default=self.trigger_level, help='trigger level in ADC counts') - parser.add_argument('--trigger_slope', type=str, choices={'rising','falling'}, - default='rising', help='trigger slope') - parser.add_argument('--trigger_source', type=int, choices={1, 2}, default=1, - 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=2048, + parser.add_argument('--trigger_slope', type=str, choices={0, 1}, + default=self.trigger_slope, help='trigger slope') + parser.add_argument('--trigger_source', type=int, choices={1, 2}, + default=self.trigger_source+1, help='trigger channel') + parser.add_argument('--trigger_mode', type=str, choices={0 , 1}, + default=self.trigger_mode, help='trigger mode') + parser.add_argument('-s', '--sample_size', type=int, default=self.sample_size, help='size of waveform sample') - parser.add_argument('-p', '--pretrigger_fraction', type=float, default=0.05, - help='pretrigger fraction') - # for daq mode - parser.add_argument('--no-daq', dest='daq_mode', action='store_false', - help='do not start in DAQ mode' ) + parser.add_argument('-p', '--pretrigger_fraction', type=float, + default=self.pretrigger_fraction, help='pretrigger fraction') parser.add_argument('-f', '--file', type=str, default='', help='file name') args = parser.parse_args() # all relevant parameters are here self.ip_address = args.connect_ip - self.daq_mode = args.daq_mode self.sample_size = args.sample_size self.pretrigger_fraction = args.pretrigger_fraction self.readInterval = args.interval # used to control oscilloscope display @@ -218,34 +238,8 @@ class rpControl(QMainWindow, Ui_MCPHA): self.trigger_mode = 0 if args.trigger_mode == 'norm' else 1 self.trigger_slope = 0 if args.trigger_slope == 'rising' else 1 # other parameters - self.invert1 = 0 - self.invert2 = 0 - self.decimation_index = 1 self.filename = args.file - def parse_confd(self): - # all relevant parameters are here - self.daq_mode = False # True - if "ip_address" in self.confd: - self.ip_address = self.confd["ip_address"] - self.sample_size = 2048 if "number_of_samples" in self.confd else self.confd["number_of_samples"] - self.pretrigger_fraction = 0.05 if "pre_trigger_samples" in self.confd \ - else self.confd["pre_trigger_samples"]/self.sample_size - self.trigger_mode = 0 if "trigger_mode" not in self.confd else\ - 1 if self.confd["trigger_mode"] == "auto" else 0 - self.trigger_source = 0 if "trigger_channel" not in self.confd \ - else int(self.confd["trigger_channel"])-1 - self.trigger_level = 500 if "trigger_level" not in self.confd else self.confd["trigger_level"] - self.trigger_slope = 0 if "trigger_direction" not in self.confd else\ - 0 if self.confd["trigger_direction"] == "rising" else 1 - self.decimation_index = 1 if "decimation_index" not in self.confd else \ - self.confd["decimation_index"] - self.invert1 = 0 if "invert_channel1" in self.confd else self.confd["invert_channel1"] - self.invert2 = 0 if "invert_channel2" in self.confd else self.confd["invert_channel2"] - self.readInterval = 1000 # used to control update of oscilloscope display - # other parameters - self.filename = '' # file name for data export - def get_physical_units(self): """get physical units corresponding to ADC units and channel numbers