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

Commit 659c61c

Browse files
author
LAKESIDE\LindaT18
committed
implemented h5/pkl viewer, h5 view/plot
1 parent 2692e8b commit 659c61c

7 files changed

Lines changed: 805 additions & 34 deletions

File tree

PythonGUI_apps/DataBrowser.py

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"""
77

88
# system imports
9+
import sys
910
from pathlib import Path
1011

1112
import pyqtgraph as pg
@@ -16,6 +17,8 @@
1617
from FLIM_analysis import FLIM_plot
1718
from UV_Vis_analysis import uv_vis_analysis
1819
from PLQE_analysis import plqe_analysis
20+
from H5_Pkl import h5_pkl_view, h5_view_and_plot
21+
1922
pg.mkQApp()
2023
pg.setConfigOption('background', 'w')
2124

@@ -27,42 +30,49 @@
2730
WindowTemplate, TemplateBaseClass = pg.Qt.loadUiType(uiFile)
2831

2932
class MainWindow(TemplateBaseClass):
30-
31-
def __init__(self):
32-
TemplateBaseClass.__init__(self)
33-
34-
# Create the main window
35-
self.ui = WindowTemplate()
36-
self.ui.setupUi(self)
37-
self.ui.select_comboBox.addItems(["Lifetime Analysis", "Spectrum Analysis", "FLIM Analysis", "UV-Vis Analysis", "PLQE Analysis"])
38-
self.ui.load_pushButton.clicked.connect(self.load_app)
39-
40-
self.show()
33+
34+
def __init__(self):
35+
TemplateBaseClass.__init__(self)
36+
37+
# Create the main window
38+
self.ui = WindowTemplate()
39+
self.ui.setupUi(self)
40+
self.ui.select_comboBox.addItems(["Lifetime Analysis", "Spectrum Analysis", "FLIM Analysis",
41+
"UV-Vis Analysis", "PLQE Analysis", "H5 View/Plot", "H5/PKL Viewer"])
42+
self.ui.load_pushButton.clicked.connect(self.load_app)
43+
44+
self.show()
4145

42-
43-
def load_app(self):
44-
45-
analysis_software = self.ui.select_comboBox.currentText()
46-
47-
if analysis_software == "Lifetime Analysis":
48-
self.lifetime_window = Lifetime_plot_fit.MainWindow()
49-
self.lifetime_window.show()
50-
elif analysis_software == "Spectrum Analysis":
51-
self.spectrum_window = Spectra_plot_fit.MainWindow()
52-
self.spectrum_window.show()
53-
elif analysis_software == "FLIM Analysis":
54-
self.flim_window = FLIM_plot.MainWindow()
55-
self.flim_window.show()
56-
elif analysis_software == "UV-Vis Analysis":
57-
self.uv_vis_window = uv_vis_analysis.MainWindow()
58-
self.uv_vis_window.show()
59-
elif analysis_software == "PLQE Analysis":
60-
self.plqe_window = plqe_analysis.MainWindow()
61-
self.plqe_window.show()
46+
47+
def load_app(self):
48+
49+
analysis_software = self.ui.select_comboBox.currentText()
50+
51+
if analysis_software == "Lifetime Analysis":
52+
self.lifetime_window = Lifetime_plot_fit.MainWindow()
53+
self.lifetime_window.show()
54+
elif analysis_software == "Spectrum Analysis":
55+
self.spectrum_window = Spectra_plot_fit.MainWindow()
56+
self.spectrum_window.show()
57+
elif analysis_software == "FLIM Analysis":
58+
self.flim_window = FLIM_plot.MainWindow()
59+
self.flim_window.show()
60+
elif analysis_software == "UV-Vis Analysis":
61+
self.uv_vis_window = uv_vis_analysis.MainWindow()
62+
self.uv_vis_window.show()
63+
elif analysis_software == "PLQE Analysis":
64+
self.plqe_window = plqe_analysis.MainWindow()
65+
self.plqe_window.show()
66+
elif analysis_software == "H5 View/Plot":
67+
app = h5_view_and_plot.H5ViewPlot(sys.argv)
68+
#sys.exit(app.exec_())
69+
elif analysis_software == "H5/PKL Viewer":
70+
app = h5_pkl_view.H5PklView(sys.argv)
71+
#sys.exit(app.exec_())
6272

6373
def run():
64-
win = MainWindow()
65-
QtGui.QApplication.instance().exec_()
66-
return
74+
win = MainWindow()
75+
QtGui.QApplication.instance().exec_()
76+
return
6777

6878
run()
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
from __future__ import division, print_function, absolute_import
2+
from ScopeFoundry import BaseApp
3+
from ScopeFoundry.helper_funcs import load_qt_ui_file, sibling_path,\
4+
load_qt_ui_from_pkg
5+
from collections import OrderedDict
6+
import os
7+
from qtpy import QtCore, QtWidgets, QtGui
8+
import pyqtgraph as pg
9+
import pyqtgraph.dockarea as dockarea
10+
import numpy as np
11+
from ScopeFoundry.logged_quantity import LQCollection
12+
from scipy.stats import spearmanr
13+
import argparse
14+
from .h5_tree import H5TreeSearchView
15+
from .pkl_tree import PklTreeSearchView
16+
17+
pg.setConfigOption('imageAxisOrder', 'row-major')
18+
19+
class H5PklView(BaseApp):
20+
21+
name = "h5_pkl_view"
22+
23+
def __init__(self, argv):
24+
BaseApp.__init__(self, argv)
25+
self.setup()
26+
parser = argparse.ArgumentParser()
27+
for lq in self.settings.as_list():
28+
parser.add_argument("--" + lq.name)
29+
args = parser.parse_args()
30+
for lq in self.settings.as_list():
31+
if lq.name in args:
32+
val = getattr(args,lq.name)
33+
if val is not None:
34+
lq.update_value(val)
35+
36+
def setup(self):
37+
self.ui_filename = sibling_path(__file__, "h5_pkl_view_gui.ui")
38+
self.ui = load_qt_ui_file(self.ui_filename)
39+
self.ui.show()
40+
self.ui.raise_()
41+
42+
self.views = OrderedDict()
43+
44+
self.settings.New('data_filename', dtype='file')
45+
self.settings.New('auto_select_view',dtype=bool, initial=True)
46+
self.settings.New('view_name', dtype=str, initial='0', choices=('0',))
47+
48+
self.settings.data_filename.add_listener(self.on_change_data_filename)
49+
50+
# UI Connections
51+
self.settings.data_filename.connect_to_browse_widgets(self.ui.data_filename_lineEdit,
52+
self.ui.data_filename_browse_pushButton)
53+
54+
# set views
55+
self.h5treeview = H5TreeSearchView(self)
56+
self.load_view(self.h5treeview)
57+
self.pkltreeview = PklTreeSearchView(self)
58+
self.load_view(self.pkltreeview)
59+
60+
self.settings.view_name.add_listener(self.on_change_view_name)
61+
62+
self.current_view = None
63+
64+
self.ui.show()
65+
66+
def load_view(self, new_view):
67+
# add to views dict
68+
self.views[new_view.name] = new_view
69+
70+
self.ui.dataview_page.layout().addWidget(new_view.ui)
71+
new_view.ui.hide()
72+
73+
# update choices for view_name
74+
self.settings.view_name.change_choice_list(list(self.views.keys()))
75+
return new_view
76+
77+
def on_change_data_filename(self):
78+
#Handle file change
79+
try:
80+
fname = self.settings.data_filename.val
81+
if not self.settings['auto_select_view']:
82+
self.current_view.on_change_data_filename(fname)
83+
else:
84+
view_name = self.auto_select_view(fname)
85+
if self.current_view is None or view_name != self.current_view.name:
86+
# update view (automatically calls on_change_data_filename)
87+
self.settings['view_name'] = view_name
88+
else:
89+
# force update
90+
if os.path.isfile(fname):
91+
self.current_view.on_change_data_filename(fname)
92+
except:
93+
pass
94+
95+
def on_change_view_name(self):
96+
#Handle view change - happens when filetype changes
97+
self.ui.dataview_placeholder.hide()
98+
previous_view = self.current_view
99+
100+
self.current_view = self.views[self.settings['view_name']]
101+
# hide current view
102+
# (handle the initial case where previous_view is None )
103+
if previous_view:
104+
previous_view.ui.hide()
105+
106+
# show new view
107+
self.current_view.ui.show()
108+
109+
# set datafile for new (current) view
110+
fname = self.settings['data_filename']
111+
if os.path.isfile(fname):
112+
self.current_view.on_change_data_filename(self.settings['data_filename'])
113+
114+
def auto_select_view(self, fname):
115+
#return the name of the last supported view for the given fname
116+
for view_name, view in list(self.views.items())[::-1]:
117+
if view.is_file_supported(fname):
118+
return view_name
119+
# return default file_info view if no others work
120+
return "h5_tree_search"
121+
122+
# if __name__ == '__main__':
123+
# import sys
124+
# app = H5PklView(sys.argv)
125+
# sys.exit(app.exec_())
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>MainWindow</class>
4+
<widget class="QMainWindow" name="MainWindow">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>856</width>
10+
<height>925</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>ScopeFoundry Data Browser</string>
15+
</property>
16+
<widget class="QWidget" name="centralwidget">
17+
<layout class="QVBoxLayout" name="verticalLayout_2">
18+
<item>
19+
<widget class="QSplitter" name="splitter">
20+
<property name="orientation">
21+
<enum>Qt::Horizontal</enum>
22+
</property>
23+
<widget class="QGroupBox" name="groupBox">
24+
<property name="title">
25+
<string>File</string>
26+
</property>
27+
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0,0">
28+
<item row="0" column="1" colspan="2">
29+
<widget class="QLineEdit" name="data_filename_lineEdit"/>
30+
</item>
31+
<item row="0" column="0">
32+
<widget class="QLabel" name="label_2">
33+
<property name="text">
34+
<string>File:</string>
35+
</property>
36+
</widget>
37+
</item>
38+
<item row="0" column="3">
39+
<widget class="QPushButton" name="data_filename_browse_pushButton">
40+
<property name="text">
41+
<string>Browse...</string>
42+
</property>
43+
</widget>
44+
</item>
45+
<item row="1" column="0" colspan="4">
46+
<widget class="QTabWidget" name="tabWidget_2">
47+
<property name="enabled">
48+
<bool>true</bool>
49+
</property>
50+
<property name="currentIndex">
51+
<number>0</number>
52+
</property>
53+
<widget class="QWidget" name="dataview_page">
54+
<attribute name="title">
55+
<string>Data View</string>
56+
</attribute>
57+
<layout class="QVBoxLayout" name="verticalLayout">
58+
<item>
59+
<widget class="QLabel" name="dataview_placeholder">
60+
<property name="text">
61+
<string>Once a valid file is loaded, data will show up here.</string>
62+
</property>
63+
</widget>
64+
</item>
65+
</layout>
66+
</widget>
67+
</widget>
68+
</item>
69+
</layout>
70+
</widget>
71+
</widget>
72+
</item>
73+
</layout>
74+
</widget>
75+
<widget class="QMenuBar" name="menubar">
76+
<property name="geometry">
77+
<rect>
78+
<x>0</x>
79+
<y>0</y>
80+
<width>856</width>
81+
<height>31</height>
82+
</rect>
83+
</property>
84+
</widget>
85+
<widget class="QStatusBar" name="statusbar"/>
86+
</widget>
87+
<resources/>
88+
<connections/>
89+
</ui>

0 commit comments

Comments
 (0)