From 4f8d84c3163e6f0d9202d315f78f096c371460ac Mon Sep 17 00:00:00 2001 From: e20632 Date: Wed, 3 May 2023 15:46:48 +0200 Subject: [PATCH] change scan nr for image in submultiimage, set level for reconstruction --- grum/BECAdapter.py | 19 +++++++++------- grum/imgdesc.py | 9 +++++--- grum/mainwin.py | 43 +++++++++++++++++++----------------- grum/mdi/mdisubimg.py | 26 +++++++++++++++++++--- grum/plot_multiple_phases.py | 4 ++-- 5 files changed, 65 insertions(+), 36 deletions(-) diff --git a/grum/BECAdapter.py b/grum/BECAdapter.py index 13dd181..f965234 100644 --- a/grum/BECAdapter.py +++ b/grum/BECAdapter.py @@ -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' diff --git a/grum/imgdesc.py b/grum/imgdesc.py index cc19966..b6fc0db 100644 --- a/grum/imgdesc.py +++ b/grum/imgdesc.py @@ -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) diff --git a/grum/mainwin.py b/grum/mainwin.py index a4c287e..26101bd 100644 --- a/grum/mainwin.py +++ b/grum/mainwin.py @@ -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? diff --git a/grum/mdi/mdisubimg.py b/grum/mdi/mdisubimg.py index 0442182..1fe2582 100644 --- a/grum/mdi/mdisubimg.py +++ b/grum/mdi/mdisubimg.py @@ -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") \ No newline at end of file diff --git a/grum/plot_multiple_phases.py b/grum/plot_multiple_phases.py index 0853f47..f4be883 100644 --- a/grum/plot_multiple_phases.py +++ b/grum/plot_multiple_phases.py @@ -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)