mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-08-08 04:02:26 +02:00
Dev/ctb/display counter images (#1471)
Build on RHEL9 docker image / build (push) Successful in 4m36s
Build on RHEL8 docker image / build (push) Successful in 5m16s
Build and Deploy on local RHEL9 / build (push) Successful in 2m7s
Build and Deploy on local RHEL8 / build (push) Successful in 5m0s
Run Simulator Tests on local RHEL9 / build (push) Successful in 18m39s
Run Simulator Tests on local RHEL8 / build (push) Successful in 22m7s
Build on RHEL9 docker image / build (push) Successful in 4m36s
Build on RHEL8 docker image / build (push) Successful in 5m16s
Build and Deploy on local RHEL9 / build (push) Successful in 2m7s
Build and Deploy on local RHEL8 / build (push) Successful in 5m0s
Run Simulator Tests on local RHEL9 / build (push) Successful in 18m39s
Run Simulator Tests on local RHEL8 / build (push) Successful in 22m7s
* WIP * show image coordinates * passing frame and plot values dynamically * WIP * succesfully show each counter as one image * added checkboxes for different images * only display counters for transceiver samples and image plot * fixed layout * dont reshape already done in transform --------- Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
This commit is contained in:
@@ -133,6 +133,7 @@ class AcquisitionTab(QtWidgets.QWidget):
|
||||
self.view.labelDigital.setDisabled(True)
|
||||
self.view.labelTransceiver.setDisabled(True)
|
||||
self.view.spinBoxTransceiver.setDisabled(True)
|
||||
self.plotTab.enableallCounterCheckBox(False)
|
||||
case readoutMode.DIGITAL_ONLY:
|
||||
self.view.spinBoxAnalog.setDisabled(True)
|
||||
self.view.labelAnalog.setDisabled(True)
|
||||
@@ -140,6 +141,7 @@ class AcquisitionTab(QtWidgets.QWidget):
|
||||
self.view.labelDigital.setEnabled(True)
|
||||
self.view.labelTransceiver.setDisabled(True)
|
||||
self.view.spinBoxTransceiver.setDisabled(True)
|
||||
self.plotTab.enableallCounterCheckBox(False)
|
||||
case readoutMode.ANALOG_AND_DIGITAL:
|
||||
self.view.spinBoxAnalog.setEnabled(True)
|
||||
self.view.labelAnalog.setEnabled(True)
|
||||
@@ -147,6 +149,7 @@ class AcquisitionTab(QtWidgets.QWidget):
|
||||
self.view.labelDigital.setEnabled(True)
|
||||
self.view.labelTransceiver.setDisabled(True)
|
||||
self.view.spinBoxTransceiver.setDisabled(True)
|
||||
self.plotTab.enableallCounterCheckBox(False)
|
||||
case readoutMode.TRANSCEIVER_ONLY:
|
||||
self.view.spinBoxAnalog.setDisabled(True)
|
||||
self.view.labelAnalog.setDisabled(True)
|
||||
@@ -154,6 +157,7 @@ class AcquisitionTab(QtWidgets.QWidget):
|
||||
self.view.labelDigital.setDisabled(True)
|
||||
self.view.labelTransceiver.setEnabled(True)
|
||||
self.view.spinBoxTransceiver.setEnabled(True)
|
||||
self.plotTab.enableallCounterCheckBox(self.plotTab.view.radioButtonImage.isChecked()) # enable counter checkboxes for matterhorn
|
||||
case _:
|
||||
self.view.spinBoxAnalog.setDisabled(True)
|
||||
self.view.labelAnalog.setDisabled(True)
|
||||
@@ -161,6 +165,7 @@ class AcquisitionTab(QtWidgets.QWidget):
|
||||
self.view.labelDigital.setEnabled(True)
|
||||
self.view.labelTransceiver.setEnabled(True)
|
||||
self.view.spinBoxTransceiver.setEnabled(True)
|
||||
self.plotTab.enableallCounterCheckBox(self.plotTab.view.radioButtonImage.isChecked()) # enable counter checkboxes for matterhorn
|
||||
|
||||
self.view.comboBoxROMode.currentIndexChanged.connect(self.setReadOut)
|
||||
self.view.spinBoxAnalog.editingFinished.connect(self.setAnalog)
|
||||
|
||||
@@ -4,7 +4,7 @@ import random
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
from PyQt5 import QtWidgets, QtGui, uic
|
||||
from PyQt5 import QtWidgets, QtGui, QtCore, uic
|
||||
|
||||
from aare import transform, ReadoutMode
|
||||
from aare._aare import Matterhorn10, Matterhorn02, Moench04
|
||||
@@ -43,6 +43,7 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.pedestalApply: bool = True
|
||||
self.__acqFrames = None
|
||||
self.logger = logging.getLogger('PlotTab')
|
||||
self.plotSplitter = None
|
||||
|
||||
def setup_ui(self):
|
||||
self.signalsTab = self.mainWindow.signalsTab
|
||||
@@ -51,10 +52,17 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.adcTab = self.mainWindow.adcTab
|
||||
self.initializeColorMaps()
|
||||
|
||||
# TODO use list comprehension
|
||||
self.checkBoxCounters = [self.view.checkBoxCounter0, self.view.checkBoxCounter1, self.view.checkBoxCounter2, self.view.checkBoxCounter3]
|
||||
|
||||
for checkBox in self.checkBoxCounters:
|
||||
checkBox.setChecked(False)
|
||||
checkBox.setEnabled(False)
|
||||
|
||||
self.imagePlots = (
|
||||
self.mainWindow.plotAnalogImage,
|
||||
self.mainWindow.plotDigitalImage,
|
||||
self.mainWindow.plotTransceiverImage,
|
||||
self.transceiverTab.transceiverImageViews,
|
||||
)
|
||||
|
||||
def connect_ui(self):
|
||||
@@ -93,12 +101,54 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.view.radioButtonFixed.clicked.connect(partial(self.setColorRangeMode, Defines.colorRange.fixed))
|
||||
self.view.radioButtonCenter.clicked.connect(partial(self.setColorRangeMode, Defines.colorRange.center))
|
||||
|
||||
for plot in self.imagePlots:
|
||||
plot.scene.sigMouseMoved.connect(partial(self.showPlotValues, plot))
|
||||
plot.getHistogramWidget().item.sigLevelChangeFinished.connect(partial(self.handleHistogramChange, plot))
|
||||
for index, checkBox in enumerate(self.checkBoxCounters):
|
||||
checkBox.stateChanged.connect(partial(self.displayCounter, index))
|
||||
|
||||
# show image Values for analog image
|
||||
nMaxY = lambda : self.mainWindow.nAnalogRows
|
||||
nMaxX = lambda : self.mainWindow.nAnalogCols
|
||||
frame = lambda : self.mainWindow.analog_frame
|
||||
plot = self.mainWindow.plotAnalogImage
|
||||
plot.scene.sigMouseMoved.connect(partial(self.showPlotValues, plot, nMaxX, nMaxY, frame))
|
||||
plot.getHistogramWidget().item.sigLevelChangeFinished.connect(partial(self.handleHistogramChange, plot))
|
||||
|
||||
# show image Values for digital image
|
||||
nMaxY = lambda : self.mainWindow.nDigitalRows
|
||||
nMaxX = lambda : self.mainWindow.nDigitalCols
|
||||
frame = lambda : self.mainWindow.digital_frame
|
||||
plot = self.mainWindow.plotDigitalImage
|
||||
plot.scene.sigMouseMoved.connect(partial(self.showPlotValues, plot, nMaxX, nMaxY, frame))
|
||||
plot.getHistogramWidget().item.sigLevelChangeFinished.connect(partial(self.handleHistogramChange, plot))
|
||||
|
||||
# show image Values for transceiver image
|
||||
nMaxY = lambda : self.transceiverTab.nTransceiverRows
|
||||
nMaxX = lambda : self.transceiverTab.nTransceiverCols
|
||||
|
||||
for index, image_view in enumerate(self.transceiverTab.transceiverImageViews):
|
||||
frame = lambda : image_view.getImageItem().image
|
||||
image_view.scene.sigMouseMoved.connect(partial(self.showPlotValues, image_view, nMaxX, nMaxY, frame))
|
||||
image_view.getHistogramWidget().item.sigLevelChangeFinished.connect(partial(self.handleHistogramChange, image_view))
|
||||
|
||||
self.view.checkBoxShowLegend.stateChanged.connect(self.toggleLegend)
|
||||
|
||||
|
||||
def displayCounter(self, index : int, state : int):
|
||||
# toggle the display of the counter i and update the splitter
|
||||
self.transceiverTab.shownCounters[index] = (state == QtCore.Qt.Checked)
|
||||
self.transceiverTab.update_ImageSplitter()
|
||||
|
||||
def setCounterCheckBox(self, index : int, check : bool):
|
||||
self.checkBoxCounters[index].setChecked(check)
|
||||
|
||||
def enableCounterCheckBox(self, index : int, enabled : bool):
|
||||
is_transceiver = self.mainWindow.romode.value in [3, 4]
|
||||
is_image = self.view.radioButtonImage.isChecked()
|
||||
self.checkBoxCounters[index].setEnabled(enabled and is_transceiver and is_image)
|
||||
|
||||
def enableallCounterCheckBox(self, enabled : bool):
|
||||
for checkBox in self.checkBoxCounters:
|
||||
checkBox.setEnabled(enabled)
|
||||
|
||||
def refresh(self):
|
||||
self.getZMQHWM()
|
||||
|
||||
@@ -262,7 +312,11 @@ class PlotTab(QtWidgets.QWidget):
|
||||
updates UI views should be called after every change to cmin or cmax
|
||||
"""
|
||||
for plot in self.imagePlots:
|
||||
plot.getHistogramWidget().item.setLevels(min=self.cmin, max=self.cmax)
|
||||
if isinstance(plot, list): # hacky for now only transceiver image is a PlotSplitter
|
||||
for p in plot:
|
||||
p.getHistogramWidget().item.setLevels(min=self.cmin, max=self.cmax)
|
||||
else:
|
||||
plot.getHistogramWidget().item.setLevels(min=self.cmin, max=self.cmax)
|
||||
self.view.cminSpinBox.setValue(self.cmin)
|
||||
self.view.cmaxSpinBox.setValue(self.cmax)
|
||||
|
||||
@@ -271,7 +325,9 @@ class PlotTab(QtWidgets.QWidget):
|
||||
# print(f'color map:{self.comboBoxColorMap.currentText()}')
|
||||
self.mainWindow.plotAnalogImage.setColorMap(cm)
|
||||
self.mainWindow.plotDigitalImage.setColorMap(cm)
|
||||
self.mainWindow.plotTransceiverImage.setColorMap(cm)
|
||||
for i, showncounter in enumerate(self.transceiverTab.shownCounters):
|
||||
if showncounter:
|
||||
self.transceiverTab.transceiverImageViews[i].setColorMap(cm)
|
||||
|
||||
def getZMQHWM(self):
|
||||
|
||||
@@ -343,11 +399,11 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.mainWindow.transceiverPlots[i].hide()
|
||||
|
||||
def addAllSelectedTransceiverPlots(self):
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
self.addSelectedTransceiverPlots(i)
|
||||
|
||||
def removeAllTransceiverPlots(self):
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
self.mainWindow.transceiverPlots[i].hide()
|
||||
|
||||
def showPlot(self):
|
||||
@@ -356,7 +412,7 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.mainWindow.plotTransceiverWaveform.hide()
|
||||
self.mainWindow.plotAnalogImage.hide()
|
||||
self.mainWindow.plotDigitalImage.hide()
|
||||
self.mainWindow.plotTransceiverImage.hide()
|
||||
self.transceiverTab.transceiverImageSplitter.hide()
|
||||
self.view.labelDigitalWaveformOption.setDisabled(True)
|
||||
self.view.radioButtonOverlay.setDisabled(True)
|
||||
self.view.radioButtonStripe.setDisabled(True)
|
||||
@@ -379,7 +435,10 @@ class PlotTab(QtWidgets.QWidget):
|
||||
if self.view.radioButtonWaveform.isChecked():
|
||||
self.mainWindow.plotTransceiverWaveform.show()
|
||||
elif self.view.radioButtonImage.isChecked():
|
||||
self.mainWindow.plotTransceiverImage.show()
|
||||
for i, showncounter in enumerate(self.transceiverTab.shownCounters):
|
||||
self.transceiverTab.transceiverImageViews[i].setVisible(showncounter)
|
||||
|
||||
self.transceiverTab.transceiverImageSplitter.show()
|
||||
|
||||
def plotOptions(self):
|
||||
|
||||
@@ -404,14 +463,18 @@ class PlotTab(QtWidgets.QWidget):
|
||||
'bottom', "<span style=\"color:black;font-size:14px\">Transceiver Sample [#]</span>")
|
||||
|
||||
self.view.stackedWidgetPlotType.setCurrentIndex(0)
|
||||
self.enableallCounterCheckBox(False) # disable counter checkboxes for waveform
|
||||
|
||||
elif self.view.radioButtonImage.isChecked():
|
||||
self.view.stackedWidgetPlotType.setCurrentIndex(2)
|
||||
is_transceiver = self.mainWindow.romode.value in [3, 4]
|
||||
self.enableallCounterCheckBox(is_transceiver) # enable counter checkboxes for matterhorn
|
||||
self.setDecoder()
|
||||
|
||||
if self.view.radioButtonNoPlot.isChecked():
|
||||
self.view.labelPlotOptions.hide()
|
||||
self.view.stackedWidgetPlotType.hide()
|
||||
self.enableallCounterCheckBox(False) # disable counter checkboxes when no plot is selected
|
||||
# enable plotting
|
||||
else:
|
||||
self.view.labelPlotOptions.show()
|
||||
@@ -419,40 +482,48 @@ class PlotTab(QtWidgets.QWidget):
|
||||
self.mainWindow.read_timer.start(Defines.Time_Plot_Refresh_ms)
|
||||
|
||||
def setDecoder(self):
|
||||
# TODO: really dont like to set attributes on the fly - hard to understand whats going on
|
||||
if self.view.comboBoxPlot.currentText() == "Matterhorn02":
|
||||
print("Initializing decoder for Matterhorn02")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn02.nRows
|
||||
self.mainWindow.nTransceiverCols = Matterhorn02.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn02.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn02.nCols
|
||||
self.transceiverTab.update_numCounters(1)
|
||||
self.mainWindow.decoder = transform.Matterhorn02TransceiverTransform()
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_16bit_1_counter":
|
||||
print("Initializing decoder for Matterhorn1 with 1 counter 16 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(1)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(16, 1)
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_16bit_4_counters":
|
||||
print("Initializing decoder for Matterhorn1 with 4 counters 16 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows*4
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(4)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(16, 4)
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_8bit_1_counter":
|
||||
print("Initializing decoder for Matterhorn1 with 1 counter 8 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(1)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(8, 1)
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_8bit_4_counters":
|
||||
print("Initializing decoder for Matterhorn1 with 4 counters 8 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows*4
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(4)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(8, 4)
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_4bit_4_counters":
|
||||
print("Initializing decoder for Matterhorn1 with 4 counters 4 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows*4
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(4)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(4, 4)
|
||||
elif self.view.comboBoxPlot.currentText() == "Matterhorn1_4bit_1_counter":
|
||||
print("Initializing decoder for Matterhorn1 with 1 counter 4 bit dynamic range")
|
||||
self.mainWindow.nTransceiverRows = Matterhorn10.nRows
|
||||
self.mainWindow.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.nTransceiverRows = Matterhorn10.nRows
|
||||
self.transceiverTab.nTransceiverCols = Matterhorn10.nCols
|
||||
self.transceiverTab.update_numCounters(1)
|
||||
self.mainWindow.decoder = transform.Matterhorn10Transform(4, 1)
|
||||
elif self.view.comboBoxPlot.currentText() == "Moench04":
|
||||
self.mainWindow.nAnalogRows = Moench04.nRows
|
||||
@@ -533,21 +604,13 @@ class PlotTab(QtWidgets.QWidget):
|
||||
# get the RGB Values
|
||||
# print(color.getRgb())
|
||||
|
||||
def showPlotValues(self, sender, pos):
|
||||
def showPlotValues(self, sender, get_nMaxX, get_nMaxY, get_frame, pos):
|
||||
x = sender.getImageItem().mapFromScene(pos).x()
|
||||
y = sender.getImageItem().mapFromScene(pos).y()
|
||||
val = 0
|
||||
nMaxY = self.mainWindow.nAnalogRows
|
||||
nMaxX = self.mainWindow.nAnalogCols
|
||||
frame = self.mainWindow.analog_frame
|
||||
if sender == self.mainWindow.plotDigitalImage:
|
||||
nMaxY = self.mainWindow.nDigitalRows
|
||||
nMaxX = self.mainWindow.nDigitalCols
|
||||
frame = self.mainWindow.digital_frame
|
||||
elif sender == self.mainWindow.plotTransceiverImage:
|
||||
nMaxY = self.mainWindow.nTransceiverRows
|
||||
nMaxX = self.mainWindow.nTransceiverCols
|
||||
frame = self.mainWindow.transceiver_frame
|
||||
nMaxX = get_nMaxX()
|
||||
nMaxY = get_nMaxY()
|
||||
frame = get_frame()
|
||||
if 0 <= x < nMaxX and 0 <= y < nMaxY and not np.array_equal(frame, []):
|
||||
val = frame[int(y), int(x)]
|
||||
message = f'[row, col]: [{y:.2f}, {x:.2f}] = {val:.2f}'
|
||||
|
||||
@@ -2,7 +2,7 @@ from functools import partial
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
from PyQt5 import QtWidgets, uic
|
||||
from PyQt5 import QtWidgets, QtCore, uic
|
||||
import pyqtgraph as pg
|
||||
from pyqtgraph import LegendItem
|
||||
|
||||
@@ -24,11 +24,18 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
self.plotTab = None
|
||||
self.legend: LegendItem | None = None
|
||||
self.acquisitionTab = None
|
||||
|
||||
self.nCounters: int = Defines.transceiver.maxcount
|
||||
self.nTransceiverRows : int = 0
|
||||
self.nTransceiverCols : int = 0
|
||||
self.shownCounters: list[bool] = [True] * Defines.transceiver.maxcount # per default show all 4 counters
|
||||
self.transceiverImageSplitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
|
||||
self.transceiverImageViews : list = [] # pg image view for each counter
|
||||
self.firstTransceiverImage : list[bool] = [True] * Defines.transceiver.maxcount # to keep track of first image for each counter to maintain zoom state
|
||||
|
||||
def setup_ui(self):
|
||||
self.plotTab = self.mainWindow.plotTab
|
||||
self.acquisitionTab = self.mainWindow.acquisitionTab
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
self.setTransceiverButtonColor(i, self.plotTab.getRandomColor())
|
||||
self.initializeAllTransceiverPlots()
|
||||
|
||||
@@ -39,7 +46,7 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
self.plotTab.subscribeToggleLegend(self.updateLegend)
|
||||
|
||||
def connect_ui(self):
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
getattr(self.view, f"checkBoxTransceiver{i}").stateChanged.connect(partial(self.setTransceiverEnable, i))
|
||||
getattr(self.view,
|
||||
f"checkBoxTransceiver{i}Plot").stateChanged.connect(partial(self.setTransceiverEnablePlot, i))
|
||||
@@ -55,7 +62,7 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
"""
|
||||
enabledPlots = []
|
||||
self.legend.clear()
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
if getattr(self.view, f'checkBoxTransceiver{i}Plot').isChecked():
|
||||
plotName = getattr(self.view, f"labelTransceiver{i}").text()
|
||||
enabledPlots.append((self.mainWindow.transceiverPlots[i], plotName))
|
||||
@@ -104,7 +111,7 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
trans_array = self._processWaveformData(data, dSamples, self.mainWindow.romode.value,
|
||||
self.mainWindow.nDBitEnabled, self.nTransceiverEnabled)
|
||||
idx = 0
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
checkBoxPlot = getattr(self.view, f"checkBoxTransceiver{i}Plot")
|
||||
checkBoxEn = getattr(self.view, f"checkBoxTransceiver{i}")
|
||||
if checkBoxEn.isChecked() and checkBoxPlot.isChecked():
|
||||
@@ -133,9 +140,7 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
transceiverOffset += nDBitEnabled * (nbitsPerDBit // 8)
|
||||
trans_array = np.array(np.frombuffer(data, offset=transceiverOffset, dtype=np.uint8))
|
||||
|
||||
tmp = self.mainWindow.decoder(trans_array)
|
||||
|
||||
return tmp
|
||||
return self.mainWindow.decoder(trans_array)
|
||||
|
||||
def processImageData(self, data, dSamples):
|
||||
"""
|
||||
@@ -145,28 +150,47 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
data: raw image data
|
||||
"""
|
||||
# get zoom state
|
||||
viewBox = self.mainWindow.plotTransceiverImage.getView()
|
||||
|
||||
state = viewBox.getState()
|
||||
image_states = [image_view.getView().getState() for image_view in self.transceiverImageViews]
|
||||
|
||||
transceiver_frame : np.ndarray = None
|
||||
try:
|
||||
self.mainWindow.transceiver_frame = self._processImageData(data, dSamples, self.mainWindow.romode.value,
|
||||
transceiver_frame = self._processImageData(data, dSamples, self.mainWindow.romode.value,
|
||||
self.mainWindow.nDBitEnabled)
|
||||
self.plotTab.ignoreHistogramSignal = True
|
||||
self.mainWindow.plotTransceiverImage.setImage(self.mainWindow.transceiver_frame)
|
||||
|
||||
for i in range(transceiver_frame.shape[0]):
|
||||
self.transceiverImageViews[i].setImage(transceiver_frame[i])
|
||||
except Exception as e:
|
||||
self.mainWindow.statusbar.setStyleSheet("color:red")
|
||||
self.acquisitionTab.updateCurrentFrame('Invalid Image')
|
||||
self.mainWindow.statusbar.showMessage(str(e))
|
||||
print("Error: ", str(e))
|
||||
|
||||
self.plotTab.setFrameLimits(self.mainWindow.transceiver_frame)
|
||||
self.plotTab.setFrameLimits(transceiver_frame)
|
||||
|
||||
# keep the zoomed in state (not 1st image)
|
||||
if self.mainWindow.firstTransceiverImage:
|
||||
self.mainWindow.firstTransceiverImage = False
|
||||
else:
|
||||
viewBox.setState(state)
|
||||
return self.mainWindow.transceiver_frame
|
||||
for idx, image_view in enumerate(self.transceiverImageViews):
|
||||
if(self.firstTransceiverImage[idx] and self.shownCounters[idx]):
|
||||
self.firstTransceiverImage[idx] = False
|
||||
else:
|
||||
image_view.getView().setState(image_states[idx])
|
||||
|
||||
return transceiver_frame
|
||||
|
||||
def update_numCounters(self, num_counters):
|
||||
# update the number of counters and adjust the image splitter accordingly
|
||||
self.nCounters = num_counters
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
self.shownCounters[i] = i < self.nCounters
|
||||
self.plotTab.setCounterCheckBox(i, self.shownCounters[i]) # check the counter checkbox
|
||||
self.plotTab.enableCounterCheckBox(i, self.shownCounters[i]) # disable counter checkbox
|
||||
|
||||
self.update_ImageSplitter() # update the splitter to show/hide image views based on the number of counters
|
||||
|
||||
|
||||
def update_ImageSplitter(self):
|
||||
for i, showncounter in enumerate(self.shownCounters):
|
||||
self.transceiverImageViews[i].setVisible(showncounter)
|
||||
|
||||
def initializeAllTransceiverPlots(self):
|
||||
self.mainWindow.plotTransceiverWaveform = pg.plot()
|
||||
@@ -174,7 +198,7 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
self.mainWindow.verticalLayoutPlot.addWidget(self.mainWindow.plotTransceiverWaveform, 5)
|
||||
self.mainWindow.transceiverPlots = {}
|
||||
waveform = np.zeros(1000)
|
||||
for i in range(Defines.transceiver.count):
|
||||
for i in range(Defines.transceiver.maxcount):
|
||||
pen = pg.mkPen(color=self.getTransceiverButtonColor(i), width=1)
|
||||
legendName = getattr(self.view, f"labelTransceiver{i}").text()
|
||||
self.mainWindow.transceiverPlots[i] = self.mainWindow.plotTransceiverWaveform.plot(waveform,
|
||||
@@ -182,16 +206,19 @@ class TransceiverTab(QtWidgets.QWidget):
|
||||
name=legendName)
|
||||
self.mainWindow.transceiverPlots[i].hide()
|
||||
|
||||
self.mainWindow.plotTransceiverImage = pg.ImageView()
|
||||
self.mainWindow.nTransceiverRows = 0
|
||||
self.mainWindow.nTransceiverCols = 0
|
||||
self.mainWindow.transceiver_frame = np.zeros(
|
||||
(self.mainWindow.nTransceiverRows, self.mainWindow.nTransceiverCols))
|
||||
self.mainWindow.plotTransceiverImage.setImage(self.mainWindow.transceiver_frame)
|
||||
self.mainWindow.verticalLayoutPlot.addWidget(self.mainWindow.plotTransceiverImage, 6)
|
||||
|
||||
# initialize image
|
||||
cm = pg.colormap.get('CET-L9') # prepare a linear color map
|
||||
self.mainWindow.plotTransceiverImage.setColorMap(cm)
|
||||
|
||||
for i in range(self.nCounters):
|
||||
imageView = pg.ImageView()
|
||||
imageView.setColorMap(cm)
|
||||
self.transceiverImageViews.append(imageView)
|
||||
self.transceiverImageSplitter.addWidget(imageView)
|
||||
|
||||
self.update_ImageSplitter() # update the splitter
|
||||
self.mainWindow.verticalLayoutPlot.addWidget(self.transceiverImageSplitter, 6)
|
||||
|
||||
|
||||
|
||||
def getTransceiverEnableReg(self):
|
||||
retval = self.det.transceiverenable
|
||||
|
||||
+1113
-654
File diff suppressed because it is too large
Load Diff
@@ -35,8 +35,8 @@ class Defines:
|
||||
loops_count = 6
|
||||
|
||||
class transceiver:
|
||||
count = 4
|
||||
tabIndex = 4
|
||||
maxcount = 4
|
||||
maxtabIndex = 4
|
||||
|
||||
class slowAdc:
|
||||
tabIndex = 2
|
||||
|
||||
Reference in New Issue
Block a user