From 539eb9974abb0de8c402c7cf001f739a5abfcd7b Mon Sep 17 00:00:00 2001 From: "Wang, Yuheng (DLSLtd, RAL, SCI)" Date: Wed, 8 Nov 2023 13:30:43 +0000 Subject: [PATCH] fixed zero order reflection and added print statements --- pgmcomponents/elements/grating.py | 8 ++++++-- pgmcomponents/elements/pgm.py | 4 +++- pgmcomponents/gui/gui_widgets.py | 20 ++++---------------- pgmcomponents/gui/main.py | 15 ++++++++------- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/pgmcomponents/elements/grating.py b/pgmcomponents/elements/grating.py index 1a2c758..722e363 100644 --- a/pgmcomponents/elements/grating.py +++ b/pgmcomponents/elements/grating.py @@ -502,7 +502,7 @@ def compute_corners(self)-> np.ndarray: return self._corners - def reflect(self, *args)-> list: + def reflect(self, *args, zero_order = False)-> list: """ A method to reflect rays off the grating. @@ -536,7 +536,11 @@ def reflect(self, *args)-> list: continue ray_array = ray.vector grating_normal = self._grating_plane.normal - reflected_ray_array = ray_array - 2 * np.dot(ray_array, grating_normal) * grating_normal + if zero_order: + + reflected_ray_array = ray_array - 2 * np.dot(ray_array, -grating_normal) * grating_normal + else: + reflected_ray_array = ray_array - 2 * np.dot(ray_array, grating_normal) * grating_normal reflected_ray_array = reflected_ray_array / np.linalg.norm(reflected_ray_array) reflected_ray = Ray3D(plane_intersection, reflected_ray_array) reflected_rays.append(reflected_ray) diff --git a/pgmcomponents/elements/pgm.py b/pgmcomponents/elements/pgm.py index cd82971..669bae5 100644 --- a/pgmcomponents/elements/pgm.py +++ b/pgmcomponents/elements/pgm.py @@ -442,7 +442,9 @@ def draw_sideview(self, ax): line = Line2D(r_z, r_x, color='green', linewidth=1, label='Dispersed Rays') ax.add_line(line) - zero_order_rays = self.grating.reflect(self.rays) + zero_order_rays = self.grating.reflect(self.rays, zero_order=True) + + for index, ray in enumerate(zero_order_rays): r_z = np.array([ grating_int[index].z, diff --git a/pgmcomponents/gui/gui_widgets.py b/pgmcomponents/gui/gui_widgets.py index 98880a6..979f32d 100644 --- a/pgmcomponents/gui/gui_widgets.py +++ b/pgmcomponents/gui/gui_widgets.py @@ -445,15 +445,12 @@ def window(self, pgm: PGM, window: sg.Window)-> None: float(values['distance']), float(values['id_length']), num_of_sigmas=float(values['num_of_sigmas'])) - print('save Beam size h is ', beam_size_h) beam_size_v = calc_beam_size(float(values['electron_size_v']), float(values['electron_div_v']), pgm.wavelength, float(values['distance']), float(values['id_length']), num_of_sigmas=float(values['num_of_sigmas'])) - - print('save Beam size v is ', beam_size_v) self.beam_size_h = beam_size_h self.beam_size_v = beam_size_v pgm.beam_width = beam_size_h @@ -517,15 +514,6 @@ def window(self, pgm: PGM, window: sg.Window)-> None: if check_fill() and values['calculate_q']: try: - print("called in second loop") - print('Wavelength is ', pgm.wavelength) - print('Distance is ', float(values['distance'])) - print('ID length is ', float(values['id_length'])) - print('Number of sigmas is ', float(values['num_of_sigmas'])) - print('Electron size h is ', float(values['electron_size_h'])) - print('Electron size v is ', float(values['electron_size_v'])) - print('Electron div h is ', float(values['electron_div_h'])) - print('Electron div v is ', float(values['electron_div_v'])) beam_size_h = calc_beam_size(float(values['electron_size_h']), float(values['electron_div_h']), @@ -533,7 +521,7 @@ def window(self, pgm: PGM, window: sg.Window)-> None: float(values['distance']), float(values['id_length']), num_of_sigmas=float(values['num_of_sigmas'])) - print('tick Beam size h is ', beam_size_h) + beam_size_v = calc_beam_size(float(values['electron_size_v']), float(values['electron_div_v']), @@ -548,7 +536,7 @@ def window(self, pgm: PGM, window: sg.Window)-> None: self.beam_size_v = beam_size_v pgm.beam_height = beam_size_v pgm.beam_width = beam_size_h - print('tick Beam size v is ', beam_size_v) + pass except Exception as e: @@ -579,7 +567,7 @@ class OffsetsControl(object): def __init__(self, values, key): self.values = values - print('values:',values) + self.key = key layout = [ @@ -857,7 +845,7 @@ def update_and_draw(window, """ - print(Fore.RED + 'updated in fn' + Style.RESET_ALL) + energy_input = float(values['-ENERGY-']) cff_input = float(values['-CFF-']) order_input = int(values['-ORDER-']) diff --git a/pgmcomponents/gui/main.py b/pgmcomponents/gui/main.py index 952ad6d4..14457ed 100644 --- a/pgmcomponents/gui/main.py +++ b/pgmcomponents/gui/main.py @@ -27,7 +27,7 @@ def main(): version = sg.__version__ version_str = version.split('.') print(Fore.GREEN,"Welcome to pgm-gui!", Fore.RESET) - print("Checking PySimpleGUI version...") + print(Fore.YELLOW,"Checking PySimpleGUI version...", Fore.RESET) if len(version_str) <= 3: print(Fore.RED + "PySimpleGUI is not up-to-date, see popup!" + Fore.RESET) response = sg.PopupOKCancel(f"Your PySimpleGUI version is {version}\nThis program requires version the github dev version.\n Press OK to begin upgrade sequence.") @@ -48,7 +48,7 @@ def main(): menu = [['File', ['Open workspace', 'Save workspace', 'Exit']], ['Export', ['Export Mirror', 'Export Grating', 'Export Beams', 'Export All']], ['Help', 'About...'], ] - print("Initialising control widgets...") + print(Fore.CYAN,"Initialising control widgets...", Fore.RESET) energy_control = EPICScontrol('Energy (eV)', 250.,10., '-ENERGY-', pgm=pgm) cff_control = EPICScontrol(u'Cff', 2.,0.1, '-CFF-',pgm=pgm) order_control = EPICScontrol('Order', 1,1, '-ORDER-',pgm=pgm) @@ -58,8 +58,9 @@ def main(): offsets_control = OffsetsControl(offset_defaults, '-OFFSETS-') up_events = {'-ENERGY-_up':energy_control, '-CFF-_up':cff_control, '-ORDER-_up':order_control, '-LINE_DENSITY-_up':line_density_control} down_events = {'-ENERGY-_down':energy_control, '-CFF-_down':cff_control, '-ORDER-_down':order_control, '-LINE_DENSITY-_down':line_density_control} + print(Fore.GREEN, "Control widgets initialised!", Fore.RESET) - print("Initialising widgets...") + print(Fore.CYAN, "Initialising widgets...", Fore.RESET) beam_config = Beam_Config() topview_widget = Topview_Widget(pgm, size=(1000,500)) @@ -83,9 +84,10 @@ def main(): ], [sideview_widget.frame] ]] - print("Initialising window...") + print(Fore.GREEN, "Widgets initialised!", Fore.RESET) + print(Fore.CYAN, "Initialising window...", Fore.RESET) window = sg.Window('PGM Simulation', layout, finalize=True,icon='icon.png', resizable=True, return_keyboard_events=True) - + print(Fore.GREEN, "Window initialised!", Fore.RESET) _,_ = pgm.grating.compute_angles() _=pgm.mirror.compute_corners() @@ -110,8 +112,7 @@ def main(): ] while True: event, values = window.read() - print(event) - print(pgm.beam_height, pgm.beam_width, pgm.beam_offset) + print(Fore.LIGHTYELLOW_EX, 'Event:',Fore.RESET, event) if event in update_events: update_and_draw(window, pgm, values, topview_widget, sideview_widget, energy_control, cff_control, order_control, line_density_control, offsets_control)