Skip to content
This repository was archived by the owner on Apr 1, 2026. It is now read-only.

Commit 01ef75e

Browse files
stop y-axis from inverting, origin now in bottom left as in the data collection app
1 parent eaf68f5 commit 01ef75e

2 files changed

Lines changed: 121 additions & 118 deletions

File tree

PythonGUI_apps/FLIM_analysis/FLIM_plot.py

Lines changed: 118 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -25,124 +25,127 @@
2525
WindowTemplate, TemplateBaseClass = pg.Qt.loadUiType(uiFile)
2626

2727
class MainWindow(TemplateBaseClass):
28-
29-
def __init__(self):
30-
super(TemplateBaseClass, self).__init__()
31-
32-
# Create the main window
33-
self.ui = WindowTemplate()
34-
self.ui.setupUi(self)
35-
36-
self.ui.load_scan_pushButton.clicked.connect(self.open_pkl_file)
37-
self.ui.plot_intensity_sums_pushButton.clicked.connect(self.plot_intensity_sums)
38-
self.ui.plot_raw_hist_data_pushButton.clicked.connect(self.plot_raw_scan)
39-
self.ui.save_intensities_image_pushButton.clicked.connect(self.save_intensities_image)
40-
self.ui.save_intensities_array_pushButton.clicked.connect(self.save_intensities_array)
41-
self.ui.compare_checkBox.stateChanged.connect(self.switch_compare)
42-
43-
self.show()
44-
45-
"""Open Scan Files"""
46-
def open_pkl_file(self):
47-
try:
48-
self.filename = QtWidgets.QFileDialog.getOpenFileName(self)
49-
self.pkl_file = pickle.load(open(self.filename[0], 'rb'))
50-
except Exception as err:
51-
print(format(err))
52-
53-
def plot_intensity_sums(self):
54-
try:
55-
data = self.pkl_file
56-
numb_pixels_X = int((data['Scan Parameters']['X scan size (um)'])/(data['Scan Parameters']['X step size (um)']))
57-
numb_pixels_Y = int((data['Scan Parameters']['Y scan size (um)'])/(data['Scan Parameters']['Y step size (um)']))
58-
# TODO test line scan plots
59-
60-
hist_data = data["Histogram data"]
61-
hist_data = np.reshape(hist_data, newshape=(hist_data.shape[0], numb_pixels_X*numb_pixels_Y))
62-
self.intensity_sums = np.sum(hist_data, axis=0)
63-
self.intensity_sums = np.reshape(self.intensity_sums, newshape=(numb_pixels_X, numb_pixels_Y))
64-
self.ui.intensity_sums_viewBox.setImage(self.intensity_sums, scale=
65-
(data['Scan Parameters']['X step size (um)'],
66-
data['Scan Parameters']['Y step size (um)']))
67-
scale = pg.ScaleBar(size=1,suffix='um')
68-
scale.setParentItem(self.ui.intensity_sums_viewBox.view)
69-
scale.anchor((1, 1), (1, 1), offset=(-30, -30))
70-
except Exception as err:
71-
print(format(err))
72-
73-
def plot_raw_scan(self):
74-
try:
75-
data = self.pkl_file
76-
numb_pixels_X = int((data['Scan Parameters']['X scan size (um)'])/(data['Scan Parameters']['X step size (um)']))
77-
numb_pixels_Y = int((data['Scan Parameters']['Y scan size (um)'])/(data['Scan Parameters']['Y step size (um)']))
78-
# TODO test line scan plots
79-
hist_data = data['Histogram data']
80-
81-
self.hist_image = np.reshape(hist_data, newshape=(hist_data.shape[0],numb_pixels_X,numb_pixels_Y))
82-
83-
time_data = data['Time data']
84-
self.times = time_data[:, 0, 0]*1e-3
85-
self.ui.raw_hist_data_viewBox.setImage(self.hist_image, scale=
86-
(data['Scan Parameters']['X step size (um)'],
87-
data['Scan Parameters']['Y step size (um)']), xvals=self.times)
88-
if self.ui.compare_checkBox.isChecked():
89-
self.ui.imv2.setImage(self.hist_image, scale= (data['Scan Parameters']['X step size (um)'],
90-
data['Scan Parameters']['Y step size (um)']), xvals=self.times)
91-
92-
scale = pg.ScaleBar(size=1,suffix='um')
93-
scale.setParentItem(self.ui.raw_hist_data_viewBox.view)
94-
scale.anchor((1, 1), (1, 1), offset=(-30, -30))
95-
96-
except Exception as err:
97-
print(format(err))
98-
99-
def switch_compare(self):
100-
"""
101-
Handles compare checkbox. If checked, show second ROI that user can use for comparison to first ROI.
102-
"""
103-
if self.ui.compare_checkBox.isChecked():
104-
self.imv2 = pg.ImageView()
105-
if hasattr(self, "hist_image"):
106-
self.imv2.setImage(self.hist_image, scale= (self.pkl_file['Scan Parameters']['X step size (um)'],
107-
self.pkl_file['Scan Parameters']['Y step size (um)']), xvals=self.times)
108-
self.ui.gridLayout.addWidget(self.imv2, 10, 4)
109-
else:
110-
self.ui.gridLayout.removeWidget(self.imv2)
111-
self.imv2.hide()
112-
113-
def save_intensities_image(self):
114-
try:
115-
filename_ext = os.path.basename(self.filename[0])
116-
filename = os.path.splitext(filename_ext)[0] #get filename without extension
117-
save_to = os.getcwd() + "\\" + filename + "_intensity_sums.png"
118-
cpm.plot_confocal(self.intensity_sums, stepsize=np.abs(self.pkl_file['Scan Parameters']['X step size (um)']))
119-
cpm.plt.savefig(save_to, bbox_inches='tight', dpi=300)
120-
except:
121-
pass
122-
123-
def save_intensities_array(self):
124-
try:
125-
filename_ext = os.path.basename(self.filename[0])
126-
filename = os.path.splitext(filename_ext)[0] #get filename without extension
127-
save_to = os.getcwd() + "\\" + filename + "_intensity_sums.txt"
128-
np.savetxt(save_to, self.intensity_sums.T, fmt='%f') #save transpoed intensity sums, as original array handles x in cols and y in rows
129-
except:
130-
pass
131-
132-
def close_application(self):
133-
choice = QtGui.QMessageBox.question(self, 'EXIT!',
134-
"Do you want to exit the app?",
135-
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
136-
if choice == QtGui.QMessageBox.Yes:
137-
sys.exit()
138-
else:
139-
pass
28+
29+
def __init__(self):
30+
super(TemplateBaseClass, self).__init__()
31+
32+
# Create the main window
33+
self.ui = WindowTemplate()
34+
self.ui.setupUi(self)
35+
36+
self.ui.load_scan_pushButton.clicked.connect(self.open_pkl_file)
37+
self.ui.plot_intensity_sums_pushButton.clicked.connect(self.plot_intensity_sums)
38+
self.ui.plot_raw_hist_data_pushButton.clicked.connect(self.plot_raw_scan)
39+
self.ui.save_intensities_image_pushButton.clicked.connect(self.save_intensities_image)
40+
self.ui.save_intensities_array_pushButton.clicked.connect(self.save_intensities_array)
41+
self.ui.compare_checkBox.stateChanged.connect(self.switch_compare)
42+
43+
self.show()
44+
45+
"""Open Scan Files"""
46+
def open_pkl_file(self):
47+
try:
48+
self.filename = QtWidgets.QFileDialog.getOpenFileName(self)
49+
self.pkl_file = pickle.load(open(self.filename[0], 'rb'))
50+
except Exception as err:
51+
print(format(err))
52+
53+
def plot_intensity_sums(self):
54+
try:
55+
data = self.pkl_file
56+
numb_pixels_X = int((data['Scan Parameters']['X scan size (um)'])/(data['Scan Parameters']['X step size (um)']))
57+
numb_pixels_Y = int((data['Scan Parameters']['Y scan size (um)'])/(data['Scan Parameters']['Y step size (um)']))
58+
# TODO test line scan plots
59+
60+
hist_data = data["Histogram data"]
61+
hist_data = np.reshape(hist_data, newshape=(hist_data.shape[0], numb_pixels_X*numb_pixels_Y))
62+
self.intensity_sums = np.sum(hist_data, axis=0)
63+
self.intensity_sums = np.reshape(self.intensity_sums, newshape=(numb_pixels_X, numb_pixels_Y))
64+
self.ui.intensity_sums_viewBox.view.invertY(False) # stop y axis invert
65+
self.ui.intensity_sums_viewBox.setImage(self.intensity_sums, scale=
66+
(data['Scan Parameters']['X step size (um)'],
67+
data['Scan Parameters']['Y step size (um)']))
68+
scale = pg.ScaleBar(size=1,suffix='um')
69+
scale.setParentItem(self.ui.intensity_sums_viewBox.view)
70+
scale.anchor((1, 1), (1, 1), offset=(-30, -30))
71+
except Exception as err:
72+
print(format(err))
73+
74+
def plot_raw_scan(self):
75+
try:
76+
data = self.pkl_file
77+
numb_pixels_X = int((data['Scan Parameters']['X scan size (um)'])/(data['Scan Parameters']['X step size (um)']))
78+
numb_pixels_Y = int((data['Scan Parameters']['Y scan size (um)'])/(data['Scan Parameters']['Y step size (um)']))
79+
# TODO test line scan plots
80+
hist_data = data['Histogram data']
81+
82+
self.hist_image = np.reshape(hist_data, newshape=(hist_data.shape[0],numb_pixels_X,numb_pixels_Y))
83+
84+
time_data = data['Time data']
85+
self.times = time_data[:, 0, 0]*1e-3
86+
self.ui.raw_hist_data_viewBox.view.invertY(False) # stops y-axis invert
87+
self.ui.raw_hist_data_viewBox.setImage(self.hist_image, scale=
88+
(data['Scan Parameters']['X step size (um)'],
89+
data['Scan Parameters']['Y step size (um)']), xvals=self.times)
90+
if self.ui.compare_checkBox.isChecked():
91+
self.ui.imv2.setImage(self.hist_image, scale= (data['Scan Parameters']['X step size (um)'],
92+
data['Scan Parameters']['Y step size (um)']), xvals=self.times)
93+
94+
scale = pg.ScaleBar(size=1,suffix='um')
95+
scale.setParentItem(self.ui.raw_hist_data_viewBox.view)
96+
scale.anchor((1, 1), (1, 1), offset=(-30, -30))
97+
98+
except Exception as err:
99+
print(format(err))
100+
101+
def switch_compare(self):
102+
"""
103+
Handles compare checkbox. If checked, show second ROI that user can use for comparison to first ROI.
104+
"""
105+
if self.ui.compare_checkBox.isChecked():
106+
self.imv2 = pg.ImageView()
107+
if hasattr(self, "hist_image"):
108+
self.imv2.setImage(self.hist_image, scale= (self.pkl_file['Scan Parameters']['X step size (um)'],
109+
self.pkl_file['Scan Parameters']['Y step size (um)']), xvals=self.times)
110+
self.imv2.view.invertY(False) # stop y-axis invert
111+
self.ui.gridLayout.addWidget(self.imv2, 10, 4)
112+
else:
113+
self.ui.gridLayout.removeWidget(self.imv2)
114+
self.imv2.hide()
115+
116+
def save_intensities_image(self):
117+
try:
118+
filename_ext = os.path.basename(self.filename[0])
119+
filename = os.path.splitext(filename_ext)[0] #get filename without extension
120+
save_to = os.getcwd() + "\\" + filename + "_intensity_sums.png"
121+
cpm.plot_confocal(self.intensity_sums, stepsize=np.abs(self.pkl_file['Scan Parameters']['X step size (um)']))
122+
cpm.plt.savefig(save_to, bbox_inches='tight', dpi=300)
123+
except:
124+
pass
125+
126+
def save_intensities_array(self):
127+
try:
128+
filename_ext = os.path.basename(self.filename[0])
129+
filename = os.path.splitext(filename_ext)[0] #get filename without extension
130+
save_to = os.getcwd() + "\\" + filename + "_intensity_sums.txt"
131+
np.savetxt(save_to, self.intensity_sums.T, fmt='%f') #save transpoed intensity sums, as original array handles x in cols and y in rows
132+
except:
133+
pass
134+
135+
def close_application(self):
136+
choice = QtGui.QMessageBox.question(self, 'EXIT!',
137+
"Do you want to exit the app?",
138+
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
139+
if choice == QtGui.QMessageBox.Yes:
140+
sys.exit()
141+
else:
142+
pass
140143

141144
"""Run the Main Window"""
142145
def run():
143-
win = MainWindow()
144-
QtGui.QApplication.instance().exec_()
145-
return win
146+
win = MainWindow()
147+
QtGui.QApplication.instance().exec_()
148+
return win
146149

147150
#Uncomment below if you want to run this as standalone
148151
#run()

PythonGUI_apps/Spectrum_analysis/Spectra_plot_fit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def plot_fit_scan(self):
236236
else:
237237
self.ui.fit_scan_viewbox.setImage(self.img)
238238

239-
# self.ui.fit_scan_viewbox.invertY(False) # Only Manual re-invert is working -- can't get it to stop inverting
239+
self.ui.fit_scan_viewbox.view.invertY(False)
240240

241241
except Exception as e:
242242
self.ui.result_textBrowser.append(str(e))
@@ -255,7 +255,7 @@ def plot_raw_scan(self):
255255

256256
wavelengths = data['Wavelengths']
257257

258-
# self.ui.raw_scan_viewbox.invertY(False) # Only Manual re-invert is working -- can't get it to stop inverting
258+
self.ui.raw_scan_viewbox.view.invertY(False)
259259
self.ui.raw_scan_viewbox.setImage(intensities, scale=
260260
(data['Scan Parameters']['X step size (um)'],
261261
data['Scan Parameters']['Y step size (um)']), xvals=wavelengths)
@@ -287,7 +287,7 @@ def plot_intensity_sums(self):
287287
self.ui.intensity_sums_viewBox.setImage(sums, scale=
288288
(data['Scan Parameters']['X step size (um)'],
289289
data['Scan Parameters']['Y step size (um)']))
290-
# self.ui.intensity_sums_viewBox.invertY(False)# Only Manual re-invert is working -- can't get it to stop inverting
290+
self.ui.intensity_sums_viewBox.view.invertY(False)
291291

292292
scale = pg.ScaleBar(size=2,suffix='um')
293293
scale.setParentItem(self.ui.intensity_sums_viewBox.view)

0 commit comments

Comments
 (0)