|
@@ -318,8 +318,8 @@ class Ui_MainWindow(object):
|
|
|
self.spinBox_int_time.setSizePolicy(sizePolicy)
|
|
|
self.spinBox_int_time.setMaximumSize(QtCore.QSize(300, 16777215))
|
|
|
self.spinBox_int_time.setObjectName(_fromUtf8("spinBox_int_time"))
|
|
|
- self.spinBox_int_time.setRange(0,1024)
|
|
|
- self.spinBox_int_time.setSingleStep(1)
|
|
|
+ self.spinBox_int_time.setRange(8,1024)
|
|
|
+ self.spinBox_int_time.setSingleStep(8)
|
|
|
self.gridLayout.addWidget(self.spinBox_int_time, 2, 1, 1, 1)
|
|
|
|
|
|
## Int. Delay
|
|
@@ -340,7 +340,7 @@ class Ui_MainWindow(object):
|
|
|
self.spinBox_int_delay.setMaximumSize(QtCore.QSize(300, 16777215))
|
|
|
self.spinBox_int_delay.setObjectName(_fromUtf8("spinBox_int_delay"))
|
|
|
self.spinBox_int_delay.setRange(1,1023)
|
|
|
- self.spinBox_int_delay.setSingleStep(1)
|
|
|
+ self.spinBox_int_delay.setSingleStep(8)
|
|
|
self.gridLayout.addWidget(self.spinBox_int_delay, 3, 1, 1, 1)
|
|
|
|
|
|
## GOTT gain
|
|
@@ -667,6 +667,16 @@ class Ui_MainWindow(object):
|
|
|
self.status_bar.setObjectName(_fromUtf8("status_bar"))
|
|
|
self.verticalLayout_9.addWidget(self.status_bar)
|
|
|
|
|
|
+
|
|
|
+ self.status_bar_fr = QtGui.QStatusBar(self.centralwidget)
|
|
|
+ self.status_bar_fr.showMessage("Framerate display:")
|
|
|
+ self.status_bar_fr.setSizeGripEnabled(0)
|
|
|
+ self.status_bar_fr.setMaximumSize(QtCore.QSize(900, 100))
|
|
|
+ self.status_bar_fr.setObjectName(_fromUtf8("status_bar_fr"))
|
|
|
+ self.verticalLayout_9.addWidget(self.status_bar_fr)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
self.textEdit = QtGui.QTextEdit(self.centralwidget)
|
|
|
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
|
|
|
sizePolicy.setHorizontalStretch(0)
|
|
@@ -1052,6 +1062,7 @@ class Ui_MainWindow(object):
|
|
|
self.textEdit.append(u'\u26A0' + ' Data file does not exist!')
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
|
|
|
|
|
|
|
|
@@ -1073,6 +1084,7 @@ class Ui_MainWindow(object):
|
|
|
self.textEdit.append(u'\u26A0' + ' Data file does not exist!')
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
else:
|
|
|
self.pushButton_run.setStyleSheet("background-color : green")
|
|
|
self.pushButton_run.setText(_translate("MainWindow", "RUN", None))
|
|
@@ -1095,17 +1107,18 @@ class Ui_MainWindow(object):
|
|
|
else:
|
|
|
self.status_bar.showMessage('Initializing board...', 5000)
|
|
|
subprocess.call(['./full_sequence.sh'])
|
|
|
- self.spinBox_int_time.setValue(2)
|
|
|
+ self.spinBox_int_time.setValue(8)
|
|
|
self.spinBox_int_delay.setValue(0)
|
|
|
self.spinBox_gott_gain.setValue(2)
|
|
|
self.spinBox_total_samples.setValue(1024)
|
|
|
self.spinBox_skip_samples.setValue(0)
|
|
|
- self.spinBox_int_trig.setValue(252)
|
|
|
+ self.spinBox_int_trig.setValue(63)
|
|
|
rst_slow_trigger_samples()
|
|
|
self.status_bar.showMessage('Board initialized', 1000)
|
|
|
self.textEdit.insertPlainText(subprocess.check_output(['./status.sh']))
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
|
|
|
def init_board_ex_rf():
|
|
|
self.textEdit.clear()
|
|
@@ -1115,27 +1128,69 @@ class Ui_MainWindow(object):
|
|
|
else:
|
|
|
self.status_bar.showMessage('Initializing board...', 5000)
|
|
|
subprocess.call(['./full_sequence_ex_rf.sh'])
|
|
|
- self.spinBox_int_time.setValue(2)
|
|
|
+ self.spinBox_int_time.setValue(8)
|
|
|
self.spinBox_int_delay.setValue(0)
|
|
|
self.spinBox_gott_gain.setValue(2)
|
|
|
self.spinBox_total_samples.setValue(1024)
|
|
|
self.spinBox_skip_samples.setValue(0)
|
|
|
- self.spinBox_int_trig.setValue(252)
|
|
|
+ self.spinBox_int_trig.setValue(63)
|
|
|
rst_slow_trigger_samples()
|
|
|
self.status_bar.showMessage('Board initialized with external RF parameters', 1000)
|
|
|
self.textEdit.insertPlainText(subprocess.check_output(['./status.sh']))
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
+
|
|
|
|
|
|
+#######################################################################################################################
|
|
|
+
|
|
|
+ def framerate_calc():
|
|
|
+ acq_time = read_register("FRAME_RATE", hex = False)
|
|
|
+ acq_time = float(acq_time*0.2)
|
|
|
+ total_samples = read_register("FT_ACQ", hex = False)
|
|
|
+ framerate = float(total_samples / acq_time)
|
|
|
+ #self.status_bar_fr.showMessage('Framerate (Hz): '+framerate + ' : ' + value, 1000)
|
|
|
+ #self.status_bar_fr.showMessage('Framerate (Mfps):' +str(framerate), 1000)
|
|
|
+ self.textEdit.append('Framerate (Mfps):'+ str(framerate))
|
|
|
+ return framerate
|
|
|
+
|
|
|
+
|
|
|
+ def read_int_time_value():
|
|
|
+ integration_time_rd = read_register("INTEG_DURATION", hex = False)
|
|
|
+ integration_time_r = integration_time_rd * 8
|
|
|
+ return integration_time_r
|
|
|
+
|
|
|
+ def write_int_time_value():
|
|
|
+ integration_time_wr = self.spinBox_int_time.text()
|
|
|
+ integration_time_w = int(float(integration_time_wr) )// 8
|
|
|
+ integration_time_w = str(integration_time_w)
|
|
|
+ write_reg("INTEG_DURATION",integration_time_w)
|
|
|
+ return integration_time_w
|
|
|
+
|
|
|
+
|
|
|
+ def read_int_delay_value():
|
|
|
+ integration_delay_rd = read_register("INTEG_DELAY", hex = False)
|
|
|
+ integration_delay_r = integration_delay_rd * 8
|
|
|
+ return integration_delay_r
|
|
|
+
|
|
|
+ def write_int_delay_value():
|
|
|
+ integration_delay_wr = self.spinBox_int_delay.text()
|
|
|
+ integration_delay_w = int(float(integration_delay_wr) )// 8
|
|
|
+ integration_delay_w = str(integration_delay_w)
|
|
|
+ write_reg("INTEG_DELAY",integration_delay_w)
|
|
|
+ return integration_delay_w
|
|
|
+
|
|
|
+########################################################################################################################
|
|
|
def timescan():
|
|
|
self.textEdit.setText(timestamp())
|
|
|
if os.path.isfile('temp_bg.bin'):
|
|
|
os.system('pci -w 0x9020 0x80')
|
|
|
self.textEdit.insertPlainText(subprocess.check_output(['./timescan.sh']))
|
|
|
self.textEdit.append('Timescan complete')
|
|
|
- timescan_plot.timescan_plot('timescan_data.out', 128 ,1023)
|
|
|
+ timescan_plot.timescan_plot('timescan_data.out', 8 ,512)
|
|
|
+ #timescan_plot.timescan_plot('timescan_data.out', 128 ,1023)
|
|
|
self.status_bar.showMessage('Timescan', 1000)
|
|
|
- write_total_samples()
|
|
|
+ #write_total_samples()
|
|
|
else:
|
|
|
self.textEdit.append(u'\u26A0' + ' Take background measurement first!')
|
|
|
|
|
@@ -1168,6 +1223,7 @@ class Ui_MainWindow(object):
|
|
|
self.textEdit.append(u'\u26A0' + ' Data file does not exist!')
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
|
|
|
def readout_background():
|
|
|
global background_data
|
|
@@ -1196,6 +1252,7 @@ class Ui_MainWindow(object):
|
|
|
self.textEdit.append(u'\u26A0' + ' Data file does not exist!')
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
|
|
|
|
|
|
def readout_unmodulated():
|
|
@@ -1225,6 +1282,7 @@ class Ui_MainWindow(object):
|
|
|
self.textEdit.append(u'\u26A0' + ' Data file does not exist!')
|
|
|
check_status()
|
|
|
led_update()
|
|
|
+ framerate_calc()
|
|
|
|
|
|
def poweroff():
|
|
|
self.textEdit.setText(timestamp())
|
|
@@ -1328,8 +1386,8 @@ class Ui_MainWindow(object):
|
|
|
self.status_bar.showMessage('Error!', 1000)
|
|
|
self.textEdit.insertPlainText(u'\u26A0' + ' Communication failed with FPGA board... Check FPGA, the PCI-Express connection and reboot')
|
|
|
else:
|
|
|
- self.spinBox_int_time.setValue(read_register("INTEG_DURATION"))
|
|
|
- self.spinBox_int_delay.setValue(read_register("INTEG_DELAY"))
|
|
|
+ self.spinBox_int_time.setValue(read_int_time_value())
|
|
|
+ self.spinBox_int_delay.setValue(read_int_delay_value())
|
|
|
self.spinBox_gott_gain.setValue(read_register("GOTT_GAIN"))
|
|
|
self.spinBox_total_samples.setValue(read_register("FT_TO_ACQ"))
|
|
|
self.spinBox_skip_samples.setValue(read_register("FT_SKIP"))
|
|
@@ -1346,19 +1404,19 @@ class Ui_MainWindow(object):
|
|
|
status_1 = read_register("STATUS_1", hex=True)
|
|
|
status_1 = int(status_1,16)
|
|
|
status_1 = '{:032b}'.format(status_1)
|
|
|
- if (status_1 == '0000000000000000000000000000000000000000'):
|
|
|
- self.status_bar.showMessage(u'Status: \u2713', 5000)
|
|
|
- else:
|
|
|
- self.status_bar.showMessage(u'Status: \u26A0 error detected!', 5000)
|
|
|
- self.textEdit.setTextColor(QtGui.QColor(255, 50, 0))
|
|
|
- if (status_1[0] != '0'):
|
|
|
- self.textEdit.append(u'\u26A0' + ' Fast trigger is too fast or integration time is too high!')
|
|
|
- if (status_1[6] != '0'):
|
|
|
- self.textEdit.append(u'\u26A0' + ' ADC fifos full! Problem with onboard DDR memory, turn on/off FPGA board and reboot the system.')
|
|
|
- if (status_1[8] != '0'):
|
|
|
- self.textEdit.append(u'\u26A0' + ' DDR fifo is full during data readout! Re-init, check PCIe connection')
|
|
|
- if (status_1[16] != '0'):
|
|
|
- self.textEdit.append(u'\u26A0' + ' Synchronization lost during operation! Check RF-CLK and re-init the system')
|
|
|
+ #if (status_1 == '0000000000000000000000000000000000000000'):
|
|
|
+ # self.status_bar.showMessage(u'Status: \u2713', 5000)
|
|
|
+ #else:
|
|
|
+ # self.status_bar.showMessage(u'Status: \u26A0 error detected!', 5000)
|
|
|
+ # self.textEdit.setTextColor(QtGui.QColor(255, 50, 0))
|
|
|
+ #if (status_1[0] != '0'):
|
|
|
+ # self.textEdit.append(u'\u26A0' + ' Fast trigger is too fast or integration time is too high!')
|
|
|
+ #if (status_1[6] != '0'):
|
|
|
+ # self.textEdit.append(u'\u26A0' + ' ADC fifos full! Problem with onboard DDR memory, turn on/off FPGA board and reboot the system.')
|
|
|
+ #if (status_1[8] != '0'):
|
|
|
+ # self.textEdit.append(u'\u26A0' + ' DDR fifo is full during data readout! Re-init, check PCIe connection')
|
|
|
+ #if (status_1[16] != '0'):
|
|
|
+ # self.textEdit.append(u'\u26A0' + ' Synchronization lost during operation! Check RF-CLK and re-init the system')
|
|
|
|
|
|
self.textEdit.setTextColor(QtGui.QColor(0, 0, 0))
|
|
|
return
|
|
@@ -1387,39 +1445,39 @@ class Ui_MainWindow(object):
|
|
|
self.led12.value=False
|
|
|
else:
|
|
|
# True = red = error
|
|
|
- if (status_led[4] != '1'):
|
|
|
- self.led1.value=True
|
|
|
- if (status_led[5] != '1'):
|
|
|
- self.led2.value=True
|
|
|
+ if (status_led[4] != '0'):
|
|
|
+ self.led12.value=True
|
|
|
+ if (status_led[5] != '0'):
|
|
|
+ self.led11.value=True
|
|
|
if (status_led[17] != '0'):
|
|
|
- self.led3.value=True
|
|
|
+ self.led10.value=True
|
|
|
if (status_led[18] != '0'):
|
|
|
- self.led4.value=True
|
|
|
+ self.led9.value=True
|
|
|
if (status_led[19] != '0'):
|
|
|
- self.led5.value=True
|
|
|
- if (status_led[20] != '1'):
|
|
|
- self.led6.value=True
|
|
|
- if (status_led[21] != '1'):
|
|
|
- self.led7.value=True
|
|
|
- if (status_led[22] != '1'):
|
|
|
self.led8.value=True
|
|
|
- if (status_led[23] != '1'):
|
|
|
- self.led9.value=True
|
|
|
- if (status_led[25] != '1'):
|
|
|
- self.led10.value=True
|
|
|
- if (status_led[26] != '0'):
|
|
|
- self.led11.value=True
|
|
|
- if (status_led[27] != '0'):
|
|
|
- self.led12.value=True
|
|
|
+ if (status_led[20] != '0'):
|
|
|
+ self.led7.value=True
|
|
|
+ if (status_led[21] != '0'):
|
|
|
+ self.led6.value=True
|
|
|
+ if (status_led[22] != '0'):
|
|
|
+ self.led5.value=True
|
|
|
+ if (status_led[23] != '0'):
|
|
|
+ self.led4.value=True
|
|
|
+ if (status_led[25] != '0'):
|
|
|
+ self.led3.value=True
|
|
|
+ if (status_led[26] != '1'):
|
|
|
+ self.led2.value=True
|
|
|
+ if (status_led[27] != '1'):
|
|
|
+ self.led1.value=True
|
|
|
return
|
|
|
|
|
|
- def framerate_calc():
|
|
|
- acq_time = read_register("FRAME_RATE", hex = False)
|
|
|
- acq_time = acq_time*200/1000000000
|
|
|
- total_samples = read_register("FT_TO_ACQ", hex = False)
|
|
|
- framerate = float(total_samples / acq_time)
|
|
|
+ #def framerate_calc():
|
|
|
+ # acq_time = read_register("FRAME_RATE", hex = False)
|
|
|
+ # acq_time = acq_time*200/1000000000
|
|
|
+ # total_samples = read_register("FT_TO_ACQ", hex = False)
|
|
|
+ # framerate = float(total_samples / acq_time)
|
|
|
|
|
|
- return framerate
|
|
|
+ #return framerate
|
|
|
|
|
|
|
|
|
with open('kalypso_registers.json') as registers_file:
|
|
@@ -1429,8 +1487,8 @@ class Ui_MainWindow(object):
|
|
|
self.log_conf = json.load(log_conf_file)
|
|
|
|
|
|
# BUTTONS ACTIONS
|
|
|
- self.spinBox_int_time.valueChanged.connect(lambda: write_reg("INTEG_DURATION",self.spinBox_int_time.text()))
|
|
|
- self.spinBox_int_delay.valueChanged.connect(lambda: write_reg("INTEG_DELAY",self.spinBox_int_delay.text()))
|
|
|
+ self.spinBox_int_time.valueChanged.connect(lambda: write_int_time_value())
|
|
|
+ self.spinBox_int_delay.valueChanged.connect(lambda: write_int_delay_value())
|
|
|
self.spinBox_gott_gain.valueChanged.connect(lambda: write_reg("GOTT_GAIN",self.spinBox_gott_gain.text()))
|
|
|
self.spinBox_total_samples.valueChanged.connect(lambda: write_reg("FT_TO_ACQ",self.spinBox_total_samples.text()))
|
|
|
self.spinBox_skip_samples.valueChanged.connect(lambda: write_reg("FT_SKIP",self.spinBox_skip_samples.text()))
|
|
@@ -1484,8 +1542,8 @@ class Ui_MainWindow(object):
|
|
|
self.label_settings.setText(_translate("MainWindow", "KALYPSO settings", None))
|
|
|
self.pushButton_readsettings.setText(_translate("MainWindow", "Read-back", None))
|
|
|
self.label_settings.setFont(boldFont)
|
|
|
- self.label_int_time.setText(_translate("MainWindow", "Integration Time (16 ns step)", None))
|
|
|
- self.label_int_delay.setText(_translate("MainWindow", "Integration Delay (16 ns step)", None))
|
|
|
+ self.label_int_time.setText(_translate("MainWindow", "Integration Time (ns)", None))
|
|
|
+ self.label_int_delay.setText(_translate("MainWindow", "Integration Delay (ns)", None))
|
|
|
self.label_gott_gain.setText(_translate("MainWindow", "GOTTHARD Gain", None))
|
|
|
self.label_disp_settings.setText(_translate("MainWindow", "Display settings", None))
|
|
|
self.label_disp_settings.setFont(boldFont)
|
|
@@ -1500,7 +1558,7 @@ class Ui_MainWindow(object):
|
|
|
self.label_controls.setText(_translate("MainWindow", "KALYPSO operation", None))
|
|
|
self.label_controls.setFont(boldFont)
|
|
|
self.pushButton_init_board.setText(_translate("MainWindow", "Init Board", None))
|
|
|
- self.pushButton_init_board_ex_rf.setText(_translate("MainWindow", "Init Board (Soleil)", None))
|
|
|
+ self.pushButton_init_board_ex_rf.setText(_translate("MainWindow", "Init Board (EX_RF)", None))
|
|
|
|
|
|
|
|
|
self.pushButton_timescan.setText(_translate("MainWindow", "Timescan", None))
|