Skip to content

Commit ce7e945

Browse files
authored
Merge pull request #12 from BogdoKhan/dev-dkc1
Added counts-per-second counter
2 parents 8f72171 + bf57e6f commit ce7e945

File tree

4 files changed

+107
-61
lines changed

4 files changed

+107
-61
lines changed

devices/devices.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -376,10 +376,10 @@ def sendData(self): #get data from channel widget and send it to board via s
376376
self.ini_sets.endGroup()
377377
self.ini_sets.endGroup()
378378

379-
query = "BIAS1?"
380-
self.board.transport.client.write(query)
381-
response = self.board.transport.client.read_raw().decode('utf-8').rstrip()
382-
print(response)
379+
# query = "BIAS1?"
380+
# self.board.transport.client.write(query)
381+
# response = self.board.transport.client.read_raw().decode('utf-8').rstrip()
382+
# print(response)
383383

384384

385385
#Basic widget for connection to single device

spectrometer/spmeter_base.py

+63-55
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def processData(self, data):
6464
self.centroid = str(int(popt[1]))
6565
print("Center: {0}".format(self.centroid))
6666
self.integral = np.sum(self.fitData)
67-
print("Integral: {0}".format(self.integral))
67+
print("Integral: {0}".format(int(self.integral)))
6868

6969
class Spectrometer(QWidget):
7070
name = 'Spectrometer'
@@ -73,7 +73,7 @@ def __init__(self):
7373
super().__init__()
7474
self.m_sp_plotter = PlSpectrometer()
7575

76-
#self.frameTime = 1.0 #frame time = 1 s by default
76+
self.frameTime = 1.0 #frame time = 1 s by default
7777

7878
self.btn_clear = QPushButton("Clear plot")
7979
self.btn_replot_act = QPushButton("Replot only active")
@@ -86,6 +86,10 @@ def __init__(self):
8686

8787
self.btn_clear.clicked.connect(self.m_sp_plotter.clear)
8888

89+
def setDaqTime(self, daqTime):
90+
self.frameTime = daqTime/1000
91+
print("Daq time: {0}".format(self.frameTime))
92+
8993
class PlSpectrometer(PlotWidget):
9094
clr_cycle = ['#000', '#c77', '#0f0', '#00f','#054', '#d21', '#6c5', '#712', '#912', '#a3e', '#f21', '#840']
9195

@@ -156,58 +160,61 @@ def setupUI(self):
156160
class TrendsParams(QWidget):
157161
def __init__(self):
158162
super().__init__()
163+
self.lbl_info = QLabel("Info:")
164+
159165
self.setupUI()
160166
def setupUI(self):
161167
self.layout = QVBoxLayout()
162-
self.groupBox_PeakStab = QtWidgets.QGroupBox()
163-
#self.groupBox_PeakStab.setTitle("Peak stabilization")
164-
self.gridLayout_PeakStab = QtWidgets.QGridLayout(self.groupBox_PeakStab)
165-
166-
#Peak in area
167-
self.m_label_peak_stabil2 = QtWidgets.QLabel(self.groupBox_PeakStab)
168-
self.m_label_peak_stabil2.setText("Peak in area")
169-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil2, 1, 0, 1, 1)
170-
self.m_spin_area_to_track = QtWidgets.QSpinBox(self.groupBox_PeakStab)
171-
self.m_spin_area_to_track.setRange(1,3)
172-
self.m_spin_area_to_track.setProperty("value", 2)
173-
self.gridLayout_PeakStab.addWidget(self.m_spin_area_to_track, 1, 1, 1, 1)
174-
175-
#Step size
176-
self.m_label_peak_stabil_step_size = QtWidgets.QLabel(self.groupBox_PeakStab)
177-
self.m_label_peak_stabil_step_size.setText("Step size")
178-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil_step_size, 2, 0, 1, 1)
179-
self.m_spin_peak_stabil_step_size = QtWidgets.QSpinBox(self.groupBox_PeakStab)
180-
self.m_spin_peak_stabil_step_size.setMinimum(1)
181-
self.m_spin_peak_stabil_step_size.setMaximum(32)
182-
self.gridLayout_PeakStab.addWidget(self.m_spin_peak_stabil_step_size, 2, 1, 1, 1)
183-
184-
#Avg frames for search
185-
self.m_label_peak_stabil1 = QtWidgets.QLabel(self.groupBox_PeakStab)
186-
self.m_label_peak_stabil1.setText("Avg frames for search")
187-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil1, 1, 2, 1, 1)
188-
self.m_spin_compensate_avg_frames = QtWidgets.QSpinBox(self.groupBox_PeakStab)
189-
self.m_spin_compensate_avg_frames.setMaximum(600)
190-
self.m_spin_compensate_avg_frames.setProperty("value", 60)
191-
self.gridLayout_PeakStab.addWidget(self.m_spin_compensate_avg_frames, 1, 3, 1, 1)
192-
193-
#keep on channel
194-
self.m_label_peak_stabil3 = QtWidgets.QLabel(self.groupBox_PeakStab)
195-
self.m_label_peak_stabil3.setText("keep on channel")
196-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil3, 2, 2, 1, 1)
197-
self.m_spin_keep_channel = QtWidgets.QSpinBox(self.groupBox_PeakStab)
198-
self.m_spin_keep_channel.setMaximum(1023)
199-
self.m_spin_keep_channel.setProperty("value", 150)
200-
self.gridLayout_PeakStab.addWidget(self.m_spin_keep_channel, 2, 3, 1, 1)
201-
202-
#Peak found on channel
203-
self.m_label_peak_stabil4 = QtWidgets.QLabel(self.groupBox_PeakStab)
204-
self.m_label_peak_stabil4.setText("Peak found on channel")
205-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil4, 0, 1, 1, 1)
206-
self.m_label_peak_stabil_channel = QtWidgets.QLabel(self.groupBox_PeakStab)
207-
self.m_label_peak_stabil_channel.setText("0.00")
208-
self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil_channel, 0, 2, 1, 1)
209-
210-
self.layout.addWidget(self.groupBox_PeakStab)
168+
self.layout.addWidget(self.lbl_info)
169+
# self.groupBox_PeakStab = QtWidgets.QGroupBox()
170+
# #self.groupBox_PeakStab.setTitle("Peak stabilization")
171+
# self.gridLayout_PeakStab = QtWidgets.QGridLayout(self.groupBox_PeakStab)
172+
173+
# #Peak in area
174+
# self.m_label_peak_stabil2 = QtWidgets.QLabel(self.groupBox_PeakStab)
175+
# self.m_label_peak_stabil2.setText("Peak in area")
176+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil2, 1, 0, 1, 1)
177+
# self.m_spin_area_to_track = QtWidgets.QSpinBox(self.groupBox_PeakStab)
178+
# self.m_spin_area_to_track.setRange(1,3)
179+
# self.m_spin_area_to_track.setProperty("value", 2)
180+
# self.gridLayout_PeakStab.addWidget(self.m_spin_area_to_track, 1, 1, 1, 1)
181+
182+
# #Step size
183+
# self.m_label_peak_stabil_step_size = QtWidgets.QLabel(self.groupBox_PeakStab)
184+
# self.m_label_peak_stabil_step_size.setText("Step size")
185+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil_step_size, 2, 0, 1, 1)
186+
# self.m_spin_peak_stabil_step_size = QtWidgets.QSpinBox(self.groupBox_PeakStab)
187+
# self.m_spin_peak_stabil_step_size.setMinimum(1)
188+
# self.m_spin_peak_stabil_step_size.setMaximum(32)
189+
# self.gridLayout_PeakStab.addWidget(self.m_spin_peak_stabil_step_size, 2, 1, 1, 1)
190+
191+
# #Avg frames for search
192+
# self.m_label_peak_stabil1 = QtWidgets.QLabel(self.groupBox_PeakStab)
193+
# self.m_label_peak_stabil1.setText("Avg frames for search")
194+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil1, 1, 2, 1, 1)
195+
# self.m_spin_compensate_avg_frames = QtWidgets.QSpinBox(self.groupBox_PeakStab)
196+
# self.m_spin_compensate_avg_frames.setMaximum(600)
197+
# self.m_spin_compensate_avg_frames.setProperty("value", 60)
198+
# self.gridLayout_PeakStab.addWidget(self.m_spin_compensate_avg_frames, 1, 3, 1, 1)
199+
200+
# #keep on channel
201+
# self.m_label_peak_stabil3 = QtWidgets.QLabel(self.groupBox_PeakStab)
202+
# self.m_label_peak_stabil3.setText("keep on channel")
203+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil3, 2, 2, 1, 1)
204+
# self.m_spin_keep_channel = QtWidgets.QSpinBox(self.groupBox_PeakStab)
205+
# self.m_spin_keep_channel.setMaximum(1023)
206+
# self.m_spin_keep_channel.setProperty("value", 150)
207+
# self.gridLayout_PeakStab.addWidget(self.m_spin_keep_channel, 2, 3, 1, 1)
208+
209+
# #Peak found on channel
210+
# self.m_label_peak_stabil4 = QtWidgets.QLabel(self.groupBox_PeakStab)
211+
# self.m_label_peak_stabil4.setText("Peak found on channel")
212+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil4, 0, 1, 1, 1)
213+
# self.m_label_peak_stabil_channel = QtWidgets.QLabel(self.groupBox_PeakStab)
214+
# self.m_label_peak_stabil_channel.setText("0.00")
215+
# self.gridLayout_PeakStab.addWidget(self.m_label_peak_stabil_channel, 0, 2, 1, 1)
216+
217+
# self.layout.addWidget(self.groupBox_PeakStab)
211218
self.setLayout(self.layout)
212219
self.setMaximumHeight(400)
213220

@@ -288,12 +295,15 @@ def setupUI(self):
288295
class SpectraDAQ(QObject):
289296
finished = pyqtSignal()
290297
signal_dataReady = pyqtSignal(object, int)
298+
signal_ChanCPFReady = pyqtSignal(object, int)
299+
signal_totCPFReady = pyqtSignal(int)
291300
nEntries = 10
292301
def __init__(self, devicesMap, isCont):
293302
super().__init__()
294303
self.devicesMap = devicesMap
295304
self.isContinuous = isCont
296305
self.setStop = False
306+
self.daqTime = 1.0
297307

298308
@pyqtSlot()
299309
def run(self):
@@ -302,8 +312,6 @@ def run(self):
302312
print("Data acquisition finished")
303313
self.finished.emit()
304314

305-
306-
307315
def get_spectrum(self, nEntries):
308316
data = dict()
309317
self.settings = {'ip':'192.168.0.20', 'port':5000}
@@ -323,12 +331,12 @@ def get_spectrum(self, nEntries):
323331
dataChunk = data[device.ip][chan*1027:(chan+1)*1027-3]
324332
chanIntegral = np.sum(dataChunk) #calculate number of events per frame for each channel
325333
nCountsPerSecondTotal += chanIntegral
326-
print("Channel {0} CPF: {1}".format(device.channels[chan].name, chanIntegral))
334+
self.signal_ChanCPFReady.emit(device.channels[chan].name, chanIntegral)
327335
if self.isContinuous:
328336
device.channels[chan].data = np.add(device.channels[chan].data, dataChunk)
329337
else:
330338
device.channels[chan].data = dataChunk
331-
print("Total CPF: {0}".format(nCountsPerSecondTotal))
339+
self.signal_totCPFReady.emit(nCountsPerSecondTotal)
332340
self.signal_dataReady.emit(self.devicesMap, (entry+1))
333341

334342
if self.setStop:

spectrometer/spmeters.py

+25-2
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@ class ChanSpectrometer(Spectrometer):
3535
def __init__(self):
3636
super().__init__()
3737
#self.frameTime = 1.0 #frame time = 1 s by default
38+
self.chanInfo = QLabel("Channel info: ")
39+
self.chanInfo1 = QLabel("Channel info: ")
40+
41+
3842
self.setupUI()
3943

4044
self.btn_replot_act.clicked.connect(self.replot)
41-
4245
self.devicesMap = None
4346
self.useSum = True
4447

@@ -51,6 +54,9 @@ def setupUI(self):
5154
self.layout_btns.addWidget(self.lbl_entries)
5255

5356
self.layout.addLayout(self.layout_btns)
57+
self.layout.addWidget(self.chanInfo)
58+
self.layout.addWidget(self.chanInfo1)
59+
5460
self.layout.addWidget(self.m_sp_plotter)
5561
self.setLayout(self.layout)
5662

@@ -66,6 +72,8 @@ def slot_on_spec_update(self, devicesMap, entry, useSum):
6672
self.m_sp_plotter.clear()
6773

6874
plotIndex = 0
75+
nCountsPerSecondTotal = 0
76+
6977
for device in self.devicesMap.values():
7078
for chan in device.channels:
7179
if chan.isActive:
@@ -75,6 +83,16 @@ def slot_on_spec_update(self, devicesMap, entry, useSum):
7583
self.lbl_entries.setText("{0} frames".format(entry))
7684
self.btn_replot_act.setEnabled(True)
7785

86+
@pyqtSlot(object, int) #counts per second
87+
def slot_chanCPF(self, chan_name, chan_CPF):
88+
chan_CPS = chan_CPF / self.frameTime
89+
print("Channel {0} CPS: {1}".format(chan_name, chan_CPS))
90+
if (chan_name == "Channel0"):
91+
self.chanInfo.setText("Info: channel {0} CPS: {1}".format(chan_name, chan_CPS))
92+
elif (chan_name == "Channel1"):
93+
self.chanInfo1.setText("Info: channel {0} CPS: {1}".format(chan_name, chan_CPS))
94+
95+
7896
def update_plot(self):
7997
self.m_sp_plotter.clear()
8098

@@ -193,7 +211,6 @@ def slot_on_spec_update(self, devicesMap, entry, useSum):
193211
self.trendFramesX.append(entry)
194212
try:
195213
self.integrator.processData(counts)
196-
print(self.integrator.integral)
197214
except:
198215
self.trendFramesY.append(0)
199216
self.trends.pl_trends.plot(self.trendFramesX, self.trendFramesY, pen=self.trends.pl_trends.pen)
@@ -211,6 +228,12 @@ def slot_on_spec_update(self, devicesMap, entry, useSum):
211228
self.lbl_entries.setText("{0} frames".format(entry))
212229
self.btn_replot_act.setEnabled(True)
213230

231+
@pyqtSlot(object, int) #counts per second
232+
def slot_totCPF(self, tot_CPF):
233+
tot_CPS = tot_CPF / self.frameTime
234+
print("Total CPS: {0}".format(tot_CPS))
235+
self.trends.tabwid.tab_TrendsParams.lbl_info.setText("Info: {0} CPS".format(tot_CPS))
236+
214237
def update_plot(self):
215238
dataSum = 0
216239
self.m_sp_plotter.clear()

test.py

+15
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,18 @@ def __init__(self):
7373

7474
self.worker.signal_dataReady.connect(lambda devicesMap, entry, useSum=True: self.m_sumSpectrometer.slot_on_spec_update(devicesMap, entry, useSum))
7575
self.worker.signal_dataReady.connect(lambda devicesMap, entry, useSum=False: self.m_specWidget.slot_on_spec_update(devicesMap, entry, useSum))
76+
77+
self.worker.signal_ChanCPFReady.connect(lambda chan_name, chan_CPF: self.m_specWidget.slot_chanCPF(chan_name, chan_CPF))
78+
self.worker.signal_totCPFReady.connect(lambda chan_CPF: self.m_sumSpectrometer.slot_totCPF(chan_CPF))
79+
7680
self.worker.finished.connect(self.thr_daq.terminate)
7781

7882
self.thr_daq.started.connect(self.worker.run)
7983
self.daqwidget.btn_get_single_spectrum.clicked.connect(self.get_single_spectrum)
8084
self.daqwidget.btn_get_full_spectrum.clicked.connect(self.get_series_of_spectra)
8185
self.daqwidget.btn_get_full_spectrum.clicked.connect(self.m_sumSpectrometer.clear_data)
86+
87+
self.daqwidget.btn_updAcqTime.clicked.connect(self.sendDaqTimeToSpectrometer)
8288

8389
self.daqwidget.btn_interrupt.clicked.connect(self.setStop)
8490
#create connections for spectrometer widgets
@@ -99,8 +105,17 @@ def get_single_spectrum(self): #shoot only one frame of spectrum
99105
self.thr_daq.start()
100106

101107
def get_series_of_spectra(self): #shoot many frames of spectrum during the data acquisition time
108+
self.sendDaqTimeToSpectrometer()
109+
self.daqwidget.setAcqTime()
110+
102111
self.worker.nEntries = self.daqwidget.nFrames
103112
self.thr_daq.start()
113+
114+
def sendDaqTimeToSpectrometer(self): #send frame time for calc counts per second for each frame
115+
daqTime = float(self.daqwidget.lne_single_daq_time.text())
116+
self.m_specWidget.setDaqTime(daqTime)
117+
self.m_sumSpectrometer.setDaqTime(daqTime)
118+
104119
#ocsope connections for wave dumping
105120
def slot_dump_wave_done(self):
106121
self.daq_cont['dumping_wave'] = False

0 commit comments

Comments
 (0)