change scan nr for image in submultiimage, set level for reconstruction

This commit is contained in:
e20632
2023-05-03 15:46:48 +02:00
parent 4414202f92
commit 4f8d84c316
5 changed files with 65 additions and 36 deletions

View File

@ -26,7 +26,7 @@ class BECAdapter:
self.scan_nr = None
self.scan_running = False
self.eaccount = "e20633" # for jeff: 20633
self.eaccount = "e20632" #change for each new beamtime
# To decide what should be plotted
self.monitor = monitor
@ -131,15 +131,18 @@ class BECAdapter:
mypath = "/sls/X12SA/data/" + self.eaccount + "/Data10/analysis/" + ending_path
recon_file = self.get_recon_file(mypath)
with h5py.File(mypath + '/' + recon_file, 'r') as hf:
recon_img_abs, recon_img_angle = self.get_recon_imgs(hf)
recon_img_abs, recon_img_phase = self.get_recon_imgs(hf)
# PLOT
print("max(recon_img_abs)", max(max(recon_img_abs)))
print("max(recon_img_phase)", max(max(recon_img_phase)))
print('plotting new image with scan_nr: ', self.latest_reconstructed)
xlab = str(self.latest_reconstructed)
if self.recon:
self.grum_client_recon_abs.new_image( "Absorption", {'image': recon_img_abs, "xlabel": xlab})
self.grum_client_recon_abs.new_image( "Absorption", {'image': recon_img_abs, "xlabel": xlab, "levels":[0.9, 1.1]})
# self.grum_client_recon_phase.new_image( f"Phase for scan_nr: {self.latest_reconstructed}", {'image': recon_img_angle, "xlabel": xlab}) #, "colormap":"CET-C1"})
self.grum_client_recon_phase.new_image( "Phase", {'image': recon_img_angle, "xlabel": xlab}) #, "colormap":"CET-C1"})
self.grum_client_recon_phase.new_image( "Phase", {'image': recon_img_phase, "xlabel": xlab, "levels": [-1,1]}) #, "colormap":"CET-C1"})
self.last_plotted_scan_nr = self.latest_reconstructed
time.sleep(10)
@ -162,14 +165,14 @@ class BECAdapter:
recon_object =np.array(recon_object)
recon_object_abs = np.abs(recon_object)
recon_object_angle = np.angle(recon_object)
recon_object_phase = np.angle(recon_object)
recon_object_abs = np.rot90(recon_object_abs,3)
recon_object_angle = np.rot90(recon_object_angle, 3)
recon_object_phase = np.rot90(recon_object_phase, 3)
recon_img_abs = recon_object_abs.tolist()
recon_img_angle = recon_object_angle.tolist()
return recon_img_abs, recon_img_angle
recon_img_phase = recon_object_phase.tolist()
return recon_img_abs, recon_img_phase
def update_latest_reconstructed(self):
mypath = '/sls/X12SA/Data10/' + self.eaccount + '/analysis/online/ptycho/gallery'

View File

@ -6,14 +6,14 @@ from .theme import pg_legend_style
class ImageDescription:
def __init__(self, name, title=None, xlabel=None, ylabel=None, image=None, colormap=None):
def __init__(self, name, title=None, xlabel=None, ylabel=None, image=None, colormap=None, levels=None):
self.name = name
self.title = title
self.xlabel = xlabel
self.ylabel = ylabel
self.image = image
self.colormap = colormap
self.levels = levels
@property
def data(self):
return np.asarray(self.image)
@ -31,7 +31,10 @@ class ImageDescription:
def make_plot(self, plotwidget, style):
res = plotwidget.setImage(self.data)
if self.levels:
res = plotwidget.setImage(self.data, levels = self.levels)
else:
res = plotwidget.setImage(self.data)
# plotwidget.colormap()
if self.title:
plotwidget.setTitle(self.title)

View File

@ -173,17 +173,23 @@ class MainWindow(QMainWindow):
"""
Plot images from list
"""
images = []
i =1
# images = []
# selected_items = []
# i =1
for img in image_desc_list:
self.new_image(img[0], img[1])
# desc = ImageDescription(img[0], **img[1])
print("new image, ", img[0])
desc = self.add_new_desc_to_list(img[0], img[1], Desc=ImageDescription) # best solution for now
# item = self.lst.get(img[0]) # this is also a neew window
# selected_items.append(item)
# self.new_image(img[0], img[1])
# desc = ImageDescription(img[0], **img[1]) #TODO: this pops up in new window, no images
# dlistitem = DictListItem(f"Phase: {i}", desc)
# images.append(dlistitem)
# i+=1
# self.plot_multiple_images(images)
# self.plot_multiple_images(selected_items)
# self.plot_multiple_images(images) # new window
# Signal callbacks
@ -289,21 +295,18 @@ class MainWindow(QMainWindow):
self.activate_or_make_subwin(MDISubMultiPlot, name, descs)
def plot_multiple_images(self, images):
if type(images[0]) == list:
print('it is a list')
else:
print("this is imgdesc now: ", images)
for i in images:
i.timestamps.access.update()
i.set_alarm(False)
descs = {i.key: i.value for i in images}
names = descs.keys()
name = " | ".join(names)
print(names)
self.activate_or_make_subwin(MDISubMultiImage, name, descs)
print("this is imgdesc now: ", images)
for i in images:
i.timestamps.access.update()
i.set_alarm(False)
descs = {i.key: i.value for i in images}
names = descs.keys()
name = " | ".join(names)
print(names)
self.activate_or_make_subwin(MDISubMultiImage, name, descs)
#TODO: the following two could be methods to MDIArea?

View File

@ -15,6 +15,8 @@ class MDISubImage(MDISubImageBase):
super().__init__(name, *args, **kwargs)
self.pw = pw = pg.ImageView()
# self.pw.setLevels(1,2) # changing levels for histogram levels colors
# self.pw.getHistogramWidget().setLevels(500, 501)
self.setWidget(pw)
# connect to plot mouse-over event
@ -56,6 +58,8 @@ class MDISubMultiImage(MDISubImageBase):
self.pw = pw = pg.ImageView()
self.slider = QSlider(Qt.Horizontal)
self.slider.setRange(0,len(descs)-1)
style = pg_plot_style()
self.layout = QGridLayout(self.central_widget)
self.layout.addWidget(self.button_next,1,2)
@ -73,7 +77,6 @@ class MDISubMultiImage(MDISubImageBase):
desc = self.descriptions[0]
style = pg_plot_style()
plot = desc.make_plot(self.pw, style)
self.plots = {name: plot}
self.image = desc.data
@ -83,12 +86,29 @@ class MDISubMultiImage(MDISubImageBase):
# self.update_timer.timeout.connect(self.update_movie)
def update_img_next(self):
self.pw.setImage(self.descriptions[1].data)
self.slider.setValue(self.slider.value()+1)
self.pw.setImage(self.descriptions[self.slider.value()].data)
self.set_title()
def update_img_previous(self):
self.pw.setImage(self.descriptions[0].data)
self.slider.setValue(self.slider.value()-1)
self.pw.setImage(self.descriptions[self.slider.value()].data)
self.set_title()
def update_img(self, value):
self.pw.setImage(self.descriptions[value].data)
self.set_title()
def set_title(self):
print("setting title")
vbox = self.pw.getView()
allchildren = vbox.allChildren()
for child in allchildren:
if isinstance(child, pg.LabelItem):
vbox.removeItem(child)
vbox.addItem(pg.LabelItem(self.descriptions[self.slider.value()].xlabel, size='50pt'))
print("changed title")

View File

@ -9,7 +9,7 @@ class plotPhases:
self.start = start
self.end = end
self.step =step
self.eaccount = "e20633" # for jeff: 20633
self.eaccount = "e20632" # for jeff: 20633
self.grum_client = RPCClient("localhost", 8000) # this is outgoing
self.image_description_list = []
@ -25,7 +25,7 @@ class plotPhases:
recon_img_phase = self.get_recon_phase(hf)
xlab = str(scan_nr)
self.image_description_list.append([f"Phase: {scan_nr}", {'image': recon_img_phase, "xlabel": xlab}])
self.image_description_list.append([f"{scan_nr} Phase", {'image': recon_img_phase, "xlabel": xlab}])
print("calling plot images from list")
self.grum_client.plot_images_from_list(self.image_description_list)