Ver Fonte

push from soleil pc

meghana-soleil-pc há 3 anos atrás
pai
commit
b1d93f523e
9 ficheiros alterados com 201 adições e 62 exclusões
  1. 105 48
      GUI.py
  2. 15 0
      kalypso_log_conf.json
  3. 13 10
      normal_acq.sh
  4. 5 1
      pll_62_5_KARA.sh
  5. 60 0
      read_data.sh
  6. 3 3
      strip_data.py
  7. BIN
      strip_data.pyc
  8. BIN
      temp.bin
  9. BIN
      timescan_plot.pyc

+ 105 - 48
GUI.py

@@ -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))
@@ -1100,12 +1112,13 @@ class Ui_MainWindow(object):
                 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(92)
                 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()
@@ -1120,13 +1133,54 @@ class Ui_MainWindow(object):
                 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(92)
                 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'):
@@ -1168,6 +1222,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 +1251,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 +1281,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 +1385,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 +1403,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 +1444,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 +1486,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 +1541,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 +1557,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))

+ 15 - 0
kalypso_log_conf.json

@@ -0,0 +1,15 @@
+{
+  "log_entries":[
+    "INTEG_DURATION",
+    "INTEG_DELAY",
+    "GOTT_GAIN",
+    "FT_ACQ",
+    "FT_TO_ACQ",
+    "FT_SKIP",
+    "ST_ACQ",
+    "ST_TO_ACQ",
+    "ST_SKIP",
+    "STATUS_1",
+    "VERSION_REG"
+  ]
+}

+ 13 - 10
normal_acq.sh

@@ -37,11 +37,11 @@ sleep 0.1
 #sleep 0.0001
 
 
-echo "reset TOP/BOTTOM"
-pci -w 0x904C 0x2
-sleep 0.001
-pci -w 0x904C 0x0
-sleep 0.001
+#echo "reset TOP/BOTTOM"
+#pci -w 0x904C 0x2
+#sleep 0.001
+#pci -w 0x904C 0x0
+#sleep 0.001
 pci -w 0x9024 0x0
 sleep 0.001
 
@@ -55,15 +55,18 @@ sleep 0.01
 
 echo "Start Normal acquisition + ENABLE Readout to DDR + HEADER"
 pci -w 0x9040 0x1021FF00
-sleep 0.5
+sleep 0.1
+echo $output_file
+echo "*DMA: Reading data..."
+pci -r dma0 --multipacket -o $output_file --timeout=10000000
+
+sleep 0.1
 #./status.sh
 echo "IDLE"
 pci -w 0x9040 0x10210F00
-sleep 0.5
+
 #./status.sh
-echo $output_file
-echo "*DMA: Reading data..."
-pci -r dma0 --multipacket -o $output_file --timeout=1000000
+
 
 #pci -r dma0 --multipacket -o test_data.out --timeout=1000000
 

+ 5 - 1
pll_62_5_KARA.sh

@@ -28,7 +28,11 @@ pci -w 0x9064 0x80000100 # OUTPUT 500MHZ FPGA
 sleep 0.2
 
 #echo "*PLL: R0 "
-pci -w 0x9064 0x00030100 # OUTPUT 500 MHZ FPGA
+#pci -w 0x9064 0x00030100 # OUTPUT 500 MHZ FPGA
+#sleep 0.2
+
+echo "*PLL: R0 "
+pci -w 0x9064 0x00070400 # OUTPUT 500 MHZ to 62.5 Mhz FPGA
 sleep 0.2
 
 

+ 60 - 0
read_data.sh

@@ -0,0 +1,60 @@
+#! /bin/bash
+export PCILIB_MODEL=ipedma
+#!/bin/sh
+
+dt=$(date +%Y_%m_%d_%Hh_%Mm_%Ss)
+
+
+echo "Number of acquisitions to acquire (Slow Trig.)= 1"
+pci -w 0x9024 0x1
+sleep 0.0001
+
+echo "Number of acquisitions to skip (Slow Trig.)= 0"
+pci -w 0x902C 0x0
+sleep 0.0001
+
+
+
+#pci -r 0x9020 $num_frames
+echo "Number of frame to acquire (Fast Trig.)= 1024"
+pci -w 0x9020 0xF4240   #1 million frames
+#pci -w 0x9020 0x400   #small frames
+#pci -w 0x9020 0x1E8480  #2 million frames
+
+#pci -w 0x9020 0x400
+sleep 0.0001
+
+pci -w 0x9024 0x0
+sleep 0.0001
+
+echo "ADD Reset DDR"
+pci -w 0x9040 0x10210F50
+sleep 0.1
+
+pci -w 0x9040 0x10210F00
+sleep 0.1
+
+echo "Start Normal acquisition + ENABLE Readout to DDR + HEADER"
+pci -w 0x9040 0x1021FF00
+sleep 0.1
+pci -r dma0 --multipacket -o /home/kapture/Desktop/dummy_data/kalypso_${dt}.bin --timeout=10000000
+
+#sleep 3
+#sleep 4
+#./status.sh
+echo "IDLE"
+pci -w 0x9040 0x10210F00
+#sleep 0.1
+./status.sh
+
+
+
+#echo "*DMA: Reading data..."
+#pci -r dma0 --multipacket -o /home/soleil/kalypso/data/bench.out --timeout=10000000
+
+#pci -r dma0 --multipacket -o /home/kapture/Desktop/dummy_data/kalypso_${dt}.bin --timeout=10000000
+#pci -r dma0 --multipacket -o /dev/null --timeout=100000
+
+#./status.sh
+
+#./dumpFile.sh bench.out

+ 3 - 3
strip_data.py

@@ -1,6 +1,6 @@
 import numpy as np
 import sys
-
+import scipy.signal as ss
 
 pixels = 512*2
 TAIL = [0xba98,0xfedc]*16
@@ -167,9 +167,9 @@ def strip_data(filename, number_pixels, orbits, offset = None):
 
         data = np.reshape(data,(-1,pixels))
 
-        data = data[:,final_1024_index_interleaved]
+        data = data[:,final_1024_index_concatenated]
         data = data >> 2
-        data = ss.savgol_filter(data, 51, 3) # window size 51, polynomial order 3
+        #data = ss.savgol_filter(data, 11, 3) # window size 51, polynomial order 3
         orb, pix = np.shape(data)
 
         return (data, orb)

BIN
strip_data.pyc


BIN
temp.bin


BIN
timescan_plot.pyc