2525WindowTemplate , TemplateBaseClass = pg .Qt .loadUiType (uiFile )
2626
2727class 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"""
142145def 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()
0 commit comments