示例#1
0
def KBv(input_wavefront):
    optical_element = WOIdealLens(name='', focal_x=0.099946, focal_y=None)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoom1D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_1D')
    return output_wavefront
示例#2
0
def apply_M3_focusing(wf_in,focal_x=2.407000):
    #
    # ===== Example of python code to create propagate current element =====
    #

    #
    # Import section
    #
    import numpy
    from wofry.propagator.propagator import PropagationManager, PropagationElements, PropagationParameters
    from syned.beamline.beamline_element import BeamlineElement
    from syned.beamline.element_coordinates import ElementCoordinates
    from wofry.propagator.propagators1D.fresnel_zoom import FresnelZoom1D

    input_wavefront = wf_in.duplicate()

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 2.407 m # Focal length in x [horizontal]
    #        focal_y: None m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='', focal_x=focal_x, focal_y=None)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(optical_element=optical_element,
                                       coordinates=ElementCoordinates(p=0.000000, q=0.000000,
                                                                      angle_radial=numpy.radians(0.000000),
                                                                      angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
                                                   propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoom1D())
    except:
        pass
    output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
                                                 handler_name='FRESNEL_ZOOM_1D')
    return output_wavefront
示例#3
0
def apply_lens(wf, focal_length):
    propagation_elements = PropagationElements()
    propagation_elements.add_beamline_element(
        BeamlineElement(optical_element=WOIdealLens("IdealLens",
                                                    focal_x=focal_length,
                                                    focal_y=focal_length),
                        coordinates=ElementCoordinates(p=0.0, q=0.0)))

    propagation_parameters = PropagationParameters(
        wavefront=wf, propagation_elements=propagation_elements)

    if USE_PROPAGATOR == 'fft':
        wfout = propagator.do_propagation(propagation_parameters,
                                          Fresnel2D.HANDLER_NAME)
    elif USE_PROPAGATOR == 'convolution':
        wfout = propagator.do_propagation(propagation_parameters,
                                          FresnelConvolution2D.HANDLER_NAME)

    return wfout
示例#4
0
    def propagation_with_lens(self,do_plot=do_plot,method='fft',
                                wavelength=1.24e-10,
                                pixelsize_x=1e-6,npixels_x=2000,pixelsize_y=1e-6,npixels_y=2000,
                                propagation_distance=30.0,defocus_factor=1.0,propagation_steps=1,show=1):


        method_label = "fresnel (%s)"%method
        print("\n#                                                             ")
        print("# near field fresnel (%s) diffraction and focusing  "%(method_label))
        print("#                                                             ")

        #                               \ |  /
        #   *                           | | |                      *
        #                               / | \
        #   <-------    d  ---------------><---------   d   ------->
        #   d is propagation_distance

        # wf = Wavefront2D.initialize_wavefront_from_steps(x_start=-pixelsize_x*npixels_x/2,
        #                                                         x_step=pixelsize_x,
        #                                                         y_start=-pixelsize_y*npixels_y/2,
        #                                                         y_step=pixelsize_y,
        #                                                         wavelength=wavelength,
        #                                                         number_of_points=(npixels_x,npixels_y))

        wf = GenericWavefront2D.initialize_wavefront_from_range(x_min=-pixelsize_x*npixels_x/2,x_max=pixelsize_x*npixels_x/2,
                                                         y_min=-pixelsize_y*npixels_y/2,y_max=pixelsize_y*npixels_y/2,
                                                         number_of_points=(npixels_x,npixels_y),wavelength=wavelength)
        propagation_elements = PropagationElements()

        spherical_or_plane_and_lens = 1
        if spherical_or_plane_and_lens == 0:
            # set spherical wave at the lens entrance (radius=distance)
            wf.set_spherical_wave(complex_amplitude=1.0,radius=-propagation_distance)

            propagation_elements.add_beamline_element(BeamlineElement(optical_element=WOScreen(),
                                                                      coordinates=ElementCoordinates(p=0, q=propagation_distance)))

        else:
            # apply lens that will focus at propagation_distance downstream the lens.
            # Note that the vertical is a bit defocused
            wf.set_plane_wave_from_complex_amplitude(1.0+0j)

            focal_length = propagation_distance # / 2

            propagation_elements.add_beamline_element(BeamlineElement(optical_element=
                WOIdealLens("IdealLens",focal_x=focal_length, focal_y=focal_length),
                coordinates=ElementCoordinates(p=0, q=propagation_distance)))

        print("Incident intensity: ", wf.get_intensity().sum())

        propagator = PropagationManager.Instance()
        propagation_parameters = PropagationParameters(wavefront=wf,
                                                       propagation_elements=propagation_elements)

        if method == 'fft':
            propagation_parameters.set_additional_parameters("shift_half_pixel", True)
            wf1 = propagator.do_propagation(propagation_parameters, Fresnel2D.HANDLER_NAME)
        elif method == 'convolution':
            propagation_parameters.set_additional_parameters("shift_half_pixel", True)
            wf1 = propagator.do_propagation(propagation_parameters, FresnelConvolution2D.HANDLER_NAME)
        elif method == 'fraunhofer':
            propagation_parameters.set_additional_parameters("shift_half_pixel", True)
            wf1 = propagator.do_propagation(propagation_parameters, Fraunhofer2D.HANDLER_NAME)
        elif method == 'zoom':
            propagation_parameters.set_additional_parameters("shift_half_pixel", True)
            propagation_parameters.set_additional_parameters("magnification_x", 1.5)
            propagation_parameters.set_additional_parameters("magnification_y", 2.5)
            wf1 = propagator.do_propagation(propagation_parameters, FresnelZoomXY2D.HANDLER_NAME)
        else:
            raise Exception("Not implemented method: %s"%method)

        horizontal_profile = wf1.get_intensity()[:, int(wf.size()[1]/2)]
        horizontal_profile /= horizontal_profile.max()
        print("FWHM of the horizontal profile: %g um"%(1e6*line_fwhm(horizontal_profile)*wf1.delta()[0]))
        vertical_profile = wf1.get_intensity()[int(wf1.size()[0]/2),:]
        vertical_profile /= vertical_profile.max()
        print("FWHM of the vertical profile: %g um"%(1e6*line_fwhm(vertical_profile)*wf1.delta()[1]))

        if do_plot:
            from srxraylib.plot.gol import plot,plot_image
            plot_image(wf1.get_intensity(),wf1.get_coordinate_x(),wf1.get_coordinate_y(),title='intensity (%s)'%method,show=0)
            plot_image(wf1.get_phase(),wf1.get_coordinate_x(),wf1.get_coordinate_y(),title='phase (%s)'%method,show=0)

            plot(wf1.get_coordinate_x(),horizontal_profile,
                 wf1.get_coordinate_y(),vertical_profile,
                 legend=['Horizontal profile','Vertical profile'],title="%s"%method,show=show)

        print("Output intensity: ",wf1.get_intensity().sum())
        return wf1.get_coordinate_x(),horizontal_profile
示例#5
0
def get_wofry_beamline_elements():

    BEAMLINE_ELEMENTS = []
    HANDLERS = []
    SPECIFIC = []

    #
    # info on current oe
    #
    #
    #    -------WOScreen---------
    #        -------BoundaryShape---------
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.screen import WOScreen

    optical_element = WOScreen()

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=28.300000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),    propagation_elements = propagation_elements)
    # #self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 8.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 10.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,    handler_name='FRESNEL_ZOOM_XY_2D')

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 8.0,
        'magnification_y': 8.0
    })

    # input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.0018849 m # x (width) minimum (signed)
    #        x_right: 0.0018849 m # x (width) maximum (signed)
    #        y_bottom: -0.0018849 m # y (length) minimum (signed)
    #        y_top: 0.0018849 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.0018849,
                               x_right=0.0018849,
                               y_bottom=-0.0018849,
                               y_top=0.0018849)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),    propagation_elements = propagation_elements)
    # #self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 1.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,    handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    #
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 8.319 m # Focal length in x [horizontal]
    #        focal_y: 99999999999999.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=8.319000,
                                  focal_y=99999999999999.000000)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),    propagation_elements = propagation_elements)
    # #self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 1.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,    handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    #
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -2.5e-05 m # x (width) minimum (signed)
    #        x_right: 2.5e-05 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-2.5e-05,
                               x_right=2.5e-05,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=11.700000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),    propagation_elements = propagation_elements)
    # #self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 0.010000)
    # propagation_parameters.set_additional_parameters('magnification_y', 1.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,    handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 0.01,
        'magnification_y': 1.0
    })

    #
    #
    # #########################   KB  #########################################
    #
    #

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.025 m # x (width) minimum (signed)
    #        x_right: 0.025 m # x (width) maximum (signed)
    #        y_bottom: -0.00045 m # y (length) minimum (signed)
    #        y_top: 0.00045 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.025,
                               x_right=0.025,
                               y_bottom=-0.00045,
                               y_top=0.00045)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=144.900000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
    #                                                propagation_elements=propagation_elements)
    # # self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 440.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 5.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
    #                                              handler_name='FRESNEL_ZOOM_XY_2D')
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 440.0,
        'magnification_y': 5.0
    })

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 100000000.0 m # Focal length in x [horizontal]
    #        focal_y: 0.09994594594594594 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=100000000.000000,
                                  focal_y=0.099946)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
    #                                                propagation_elements=propagation_elements)
    # # self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 1.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
    #                                              handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.000195 m # x (width) minimum (signed)
    #        x_right: 0.000195 m # x (width) maximum (signed)
    #        y_bottom: -0.0065 m # y (length) minimum (signed)
    #        y_top: 0.0065 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    # from syned.beamline.shape import Rectangle
    # boundary_shape = Rectangle(x_left=-0.000195, x_right=0.000195, y_bottom=-0.0065, y_top=0.0065)
    #
    # from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    # optical_element = WOSlit(boundary_shape=boundary_shape)
    #
    # #
    # # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    # #
    # #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.050000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
    #                                                propagation_elements=propagation_elements)
    # # self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 0.500000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
    #                                              handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 0.05
    })

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 0.049982758620701014 m # Focal length in x [horizontal]
    #        focal_y: 100000000.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=0.049983,
                                  focal_y=100000000.000000)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
    #                                                propagation_elements=propagation_elements)
    # # self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 1.000000)
    # propagation_parameters.set_additional_parameters('magnification_y', 1.000000)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
    #                                              handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.5 m # x (width) minimum (signed)
    #        x_right: 0.5 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.5,
                               x_right=0.5,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    # propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.050000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    # propagation_elements.add_beamline_element(beamline_element)
    # propagation_parameters = PropagationParameters(wavefront=input_wavefront.duplicate(),
    #                                                propagation_elements=propagation_elements)
    # # self.set_additional_parameters(propagation_parameters)
    # #
    # propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    # propagation_parameters.set_additional_parameters('magnification_x', 0.000070)
    # propagation_parameters.set_additional_parameters('magnification_y', 0.000090)
    # #
    # propagator = PropagationManager.Instance()
    # try:
    #     propagator.add_propagator(FresnelZoomXY2D())
    # except:
    #     pass
    # output_wavefront = propagator.do_propagation(propagation_parameters=propagation_parameters,
    #                                              handler_name='FRESNEL_ZOOM_XY_2D')
    #
    #
    # input_wavefront = output_wavefront

    BEAMLINE_ELEMENTS.append(beamline_element)
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 0.000070,
        'magnification_y': 0.000090
    })

    return BEAMLINE_ELEMENTS, HANDLERS, SPECIFIC
def ideal_lens_KBh(input_wavefront):

    #
    # ===== Example of python code to create propagate current element =====
    #

    #
    # Import section
    #
    import numpy
    from wofry.propagator.propagator import PropagationManager, PropagationElements, PropagationParameters
    from syned.beamline.beamline_element import BeamlineElement
    from syned.beamline.element_coordinates import ElementCoordinates
    from wofry.propagator.propagators2D.fresnel_zoom_xy import FresnelZoomXY2D

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 0.049982758620701014 m # Focal length in x [horizontal]
    #        focal_y: 100000000.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=0.049983,
                                  focal_y=100000000.000000)

    #
    # propagating
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    #self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    return output_wavefront, beamline_element
示例#7
0
    def test_spherical_wave(self, do_plot=do_plot):
        #
        # plane wave
        #
        print("#                                                             ")
        print("# Tests for a 2D spherical wave                               ")
        print("#                                                             ")

        wavelength = 1.24e-10

        wavefront_length_x = 400e-6
        wavefront_length_y = wavefront_length_x

        npixels_x = 1024
        npixels_y = npixels_x

        x = numpy.linspace(-0.5 * wavefront_length_x, 0.5 * wavefront_length_x,
                           npixels_x)
        y = numpy.linspace(-0.5 * wavefront_length_y, 0.5 * wavefront_length_y,
                           npixels_y)

        wf1 = GenericWavefront2D.initialize_wavefront_from_steps(
            x_start=x[0],
            x_step=numpy.abs(x[1] - x[0]),
            y_start=y[0],
            y_step=numpy.abs(y[1] - y[0]),
            number_of_points=(npixels_x, npixels_y),
            wavelength=wavelength)

        numpy.testing.assert_almost_equal(x, wf1.get_coordinate_x(), 9)
        numpy.testing.assert_almost_equal(y, wf1.get_coordinate_y(), 9)

        wf2 = GenericWavefront2D.initialize_wavefront_from_steps(
            x_start=x[0],
            x_step=numpy.abs(x[1] - x[0]),
            y_start=y[0],
            y_step=numpy.abs(y[1] - y[0]),
            number_of_points=(npixels_x, npixels_y),
            wavelength=wavelength)

        numpy.testing.assert_almost_equal(x, wf2.get_coordinate_x(), 9)
        numpy.testing.assert_almost_equal(y, wf2.get_coordinate_y(), 9)
        # an spherical wavefront is obtained 1) by creation, 2) focusing a planewave

        wf1.set_spherical_wave(-5.0, 3 + 0j)
        wf1.clip_square(-50e-6, 10e-6, -20e-6, 40e-6)

        wf2.set_plane_wave_from_complex_amplitude(3 + 0j)

        ideal_lens = WOIdealLens("test", 5.0, 5.0)
        ideal_lens.applyOpticalElement(wf2)

        wf2.clip_square(-50e-6, 10e-6, -20e-6, 40e-6)

        if do_plot:
            from srxraylib.plot.gol import plot_image
            plot_image(wf1.get_phase(),
                       wf2.get_coordinate_x(),
                       wf2.get_coordinate_y(),
                       title="Phase of spherical wavefront",
                       show=0)
            plot_image(wf2.get_phase(),
                       wf2.get_coordinate_x(),
                       wf2.get_coordinate_y(),
                       title="Phase of focused plane wavefront",
                       show=0)
            plot_image(
                wf1.get_phase(from_minimum_intensity=0.1),
                wf2.get_coordinate_x(),
                wf2.get_coordinate_y(),
                title="Phase of spherical wavefront (for intensity > 0.1)",
                show=0)
            plot_image(
                wf2.get_phase(from_minimum_intensity=0.1),
                wf2.get_coordinate_x(),
                wf2.get_coordinate_y(),
                title="Phase of focused plane wavefront (for intensity > 0.1)",
                show=1)

        numpy.testing.assert_almost_equal(wf1.get_phase(), wf2.get_phase(), 5)
示例#8
0
def run_wofry():
    #
    # create/import your input_wavefront (THIS IS A PLACEHOLDER - REPLACE WITH YOUR SOURCE)
    #
    #
    from wofry.propagator.wavefront2D.generic_wavefront import GenericWavefront2D
    input_wavefront = GenericWavefront2D.load_h5_file(
        "/users/srio/Working/paper-hierarchical/WORKSPACES/tmp.h5", "wfr")
    # initialize_wavefront_from_range(-10e-6,10e-6,-100e-6,100e-6,(200,100),1e-10)

    #
    # info on current oe
    #
    #
    #    -------WOScreen---------
    #        -------BoundaryShape---------
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.screen import WOScreen

    optical_element = WOScreen()

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=28.300000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    #self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     8.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     10.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.0018849 m # x (width) minimum (signed)
    #        x_right: 0.0018849 m # x (width) maximum (signed)
    #        y_bottom: -0.0018849 m # y (length) minimum (signed)
    #        y_top: 0.0018849 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.0018849,
                               x_right=0.0018849,
                               y_bottom=-0.0018849,
                               y_top=0.0018849)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    #self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 8.319 m # Focal length in x [horizontal]
    #        focal_y: 99999999999999.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=8.319000,
                                  focal_y=99999999999999.000000)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    #self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -2.5e-05 m # x (width) minimum (signed)
    #        x_right: 2.5e-05 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-2.5e-05,
                               x_right=2.5e-05,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=11.700000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    #self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     0.010000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    #
    # #########################   KB  #########################################
    #
    #

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.025 m # x (width) minimum (signed)
    #        x_right: 0.025 m # x (width) maximum (signed)
    #        y_bottom: -0.00045 m # y (length) minimum (signed)
    #        y_top: 0.00045 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.025,
                               x_right=0.025,
                               y_bottom=-0.00045,
                               y_top=0.00045)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=144.900000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     440.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     5.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 100000000.0 m # Focal length in x [horizontal]
    #        focal_y: 0.09994594594594594 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=100000000.000000,
                                  focal_y=0.099946)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.000195 m # x (width) minimum (signed)
    #        x_right: 0.000195 m # x (width) maximum (signed)
    #        y_bottom: -0.0065 m # y (length) minimum (signed)
    #        y_top: 0.0065 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.000195,
                               x_right=0.000195,
                               y_bottom=-0.0065,
                               y_top=0.0065)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.050000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     0.500000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 0.049982758620701014 m # Focal length in x [horizontal]
    #        focal_y: 100000000.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=0.049983,
                                  focal_y=100000000.000000)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.000000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     1.000000)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     1.000000)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    #
    # info on current oe
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.5 m # x (width) minimum (signed)
    #        x_right: 0.5 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.5,
                               x_right=0.5,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    #
    # propagating (***  ONLY THE ZOOM PROPAGATOR IS IMPLEMENTED ***)
    #
    #
    propagation_elements = PropagationElements()
    beamline_element = BeamlineElement(
        optical_element=optical_element,
        coordinates=ElementCoordinates(
            p=0.050000,
            q=0.000000,
            angle_radial=numpy.radians(0.000000),
            angle_azimuthal=numpy.radians(0.000000)))
    propagation_elements.add_beamline_element(beamline_element)
    propagation_parameters = PropagationParameters(
        wavefront=input_wavefront.duplicate(),
        propagation_elements=propagation_elements)
    # self.set_additional_parameters(propagation_parameters)
    #
    propagation_parameters.set_additional_parameters('shift_half_pixel', 1)
    propagation_parameters.set_additional_parameters('magnification_x',
                                                     0.000070)
    propagation_parameters.set_additional_parameters('magnification_y',
                                                     0.000090)
    #
    propagator = PropagationManager.Instance()
    try:
        propagator.add_propagator(FresnelZoomXY2D())
    except:
        pass
    output_wavefront = propagator.do_propagation(
        propagation_parameters=propagation_parameters,
        handler_name='FRESNEL_ZOOM_XY_2D')

    input_wavefront = output_wavefront

    return input_wavefront
示例#9
0
def get_wofry_beamline_elements():

    ELEMENTS = []
    COORDINATES = []
    HANDLERS = []
    SPECIFIC = []

    #
    # info on current oe 0
    #
    #
    #    -------WOScreen---------
    #        -------BoundaryShape---------
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.screen import WOScreen
    optical_element = WOScreen()

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.0,
                           q=28.30,
                           angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 8.0,
        'magnification_y': 10.0
    })

    #
    # info on current oe 1
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.0018849 m # x (width) minimum (signed)
    #        x_right: 0.0018849 m # x (width) maximum (signed)
    #        y_bottom: -0.0018849 m # y (length) minimum (signed)
    #        y_top: 0.0018849 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.0018849,
                               x_right=0.0018849,
                               y_bottom=-0.0018849,
                               y_top=0.0018849)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.0, q=0.0, angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe 2
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 8.319 m # Focal length in x [horizontal]
    #        focal_y: 99999999999999.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=8.319000,
                                  focal_y=99999999999999.000000)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.0, q=0.0, angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe 3
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -2.5e-05 m # x (width) minimum (signed)
    #        x_right: 2.5e-05 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-2.5e-05,
                               x_right=2.5e-05,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=11.70,
                           q=0.0,
                           angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 0.01,
        'magnification_y': 1.0
    })

    #
    #
    # #########################   KB  #########################################
    #
    #

    #
    # info on current oe 4
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.025 m # x (width) minimum (signed)
    #        x_right: 0.025 m # x (width) maximum (signed)
    #        y_bottom: -0.00045 m # y (length) minimum (signed)
    #        y_top: 0.00045 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.025,
                               x_right=0.025,
                               y_bottom=-0.00045,
                               y_top=0.00045)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=144.9,
                           q=0.0,
                           angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 440.0,
        'magnification_y': 5.0
    })

    #
    # info on current oe 5
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 100000000.0 m # Focal length in x [horizontal]
    #        focal_y: 0.09994594594594594 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=100000000.000000,
                                  focal_y=0.099946)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.0, q=0.0, angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe 6
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.000195 m # x (width) minimum (signed)
    #        x_right: 0.000195 m # x (width) maximum (signed)
    #        y_bottom: -0.0065 m # y (length) minimum (signed)
    #        y_top: 0.0065 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.000195,
                               x_right=0.000195,
                               y_bottom=-0.0065,
                               y_top=0.0065)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.05,
                           q=0.0,
                           angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 0.5
    })

    #
    # info on current oe 7
    #
    #
    #    -------WOIdealLens---------
    #        focal_x: 0.049982758620701014 m # Focal length in x [horizontal]
    #        focal_y: 100000000.0 m # Focal length in y [vertical]
    #

    #
    # define current oe
    #
    from wofry.beamline.optical_elements.ideal_elements.lens import WOIdealLens

    optical_element = WOIdealLens(name='',
                                  focal_x=0.049983,
                                  focal_y=100000000.000000)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.0, q=0.0, angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 1.0,
        'magnification_y': 1.0
    })

    #
    # info on current oe 8
    #
    #
    #    -------WOSlit---------
    #        -------Rectangle---------
    #        x_left: -0.5 m # x (width) minimum (signed)
    #        x_right: 0.5 m # x (width) maximum (signed)
    #        y_bottom: -0.5 m # y (length) minimum (signed)
    #        y_top: 0.5 m # y (length) maximum (signed)
    #

    #
    # define current oe
    #
    from syned.beamline.shape import Rectangle
    boundary_shape = Rectangle(x_left=-0.5,
                               x_right=0.5,
                               y_bottom=-0.5,
                               y_top=0.5)

    from wofry.beamline.optical_elements.absorbers.slit import WOSlit
    optical_element = WOSlit(boundary_shape=boundary_shape)

    ELEMENTS.append(optical_element)
    COORDINATES.append(
        ElementCoordinates(p=0.05,
                           q=0.0,
                           angle_radial=0.0,
                           angle_azimuthal=0.0))
    HANDLERS.append('FRESNEL_ZOOM_XY_2D')
    SPECIFIC.append({
        'shift_half_pixel': 1,
        'magnification_x': 0.000070,
        'magnification_y': 0.000090
    })

    return ELEMENTS, COORDINATES, HANDLERS, SPECIFIC