def initialize_wavefront(cls, wavelength=1e-10, number_of_points=1000, polarization=Polarization.SIGMA): sA = ScaledArray.initialize( np_array=numpy.full(number_of_points, (1.0 + 0.0j), dtype=complex)) if ((polarization == Polarization.PI) or (polarization == Polarization.TOTAL)): sA_pi = ScaledArray.initialize(np_array=numpy.full( number_of_points, (0.0 + 0.0j), dtype=complex)) else: sA_pi = None return GenericWavefront1D(wavelength, sA, sA_pi)
def test_ScaledArray(self,do_plot=do_plot): # # ScaledArray.initialize + set_scale_from_steps # test_array = numpy.arange(15.0, 18.8, 0.2) print("\nTesting ScaledArray.initialize + set_scale_from_steps...") scaled_array = ScaledArray.initialize(test_array) scaled_array.set_scale_from_steps(test_array[0],0.2) print("Using array: ",test_array) print("Stored array: ",scaled_array.get_values()) print("Using array: ",test_array) print("Stored abscissas: ",scaled_array.get_abscissas()) numpy.testing.assert_almost_equal(test_array,scaled_array.get_values(),11) numpy.testing.assert_almost_equal(test_array,scaled_array.get_abscissas(),11) self.assertAlmostEqual(0.2,scaled_array.delta(),11) self.assertAlmostEqual(15.0,scaled_array.offset(),11) x_in = (18.80,16.22,22.35) x_good = (18.80,16.22,18.8) for i,x in enumerate(x_in): print("interpolated at %3.2f is: %3.2f (must give %3.2f)"%( x,scaled_array.interpolate_value(x), x_good[i] )) self.assertAlmostEqual(scaled_array.interpolate_value(x), x_good[i], 2) # # ScaledArray.initialize + set_scale_from_range ; interpolate vectorized # print("\nTesting ScaledArray.initialize + set_scale_from_range ; interpolate vectorized...") scaled_array = ScaledArray.initialize(test_array) scaled_array.set_scale_from_range(test_array[0],test_array[-1]) x_in = (18.80,16.22,22.35) x_good = (18.80,16.22,18.8) for i,x in enumerate(x_in): print("interpolated at %3.2f is: %3.2f (must give %3.2f)"%( x,scaled_array.interpolate_value(x), x_good[i] )) self.assertAlmostEqual(scaled_array.interpolate_value(x), x_good[i], 2) # # ScaledArray.initialize_from_steps # print("\nTesting ScaledArray.initialize_from_steps...") scaled_array = ScaledArray.initialize_from_steps(test_array, test_array[0], 0.2) x_in = (18.80,16.22,22.35) x_good = (18.80,16.22,18.8) for i,x in enumerate(x_in): print("interpolated at %3.2f is: %3.2f (must give %3.2f)"%( x,scaled_array.interpolate_value(x), x_good[i] )) self.assertAlmostEqual(scaled_array.interpolate_value(x), x_good[i], 2) # # ScaledArray.initialize_from_steps # print("\nTesting ScaledArray.initialize_from_range...") scaled_array = ScaledArray.initialize_from_range(test_array,test_array[0], test_array[-1]) x_in = (18.80,16.22,22.35) x_good = (18.80,16.22,18.8) for i,x in enumerate(x_in): print("interpolated at %3.2f is: %3.2f (must give %3.2f)"%( x,scaled_array.interpolate_value(x), x_good[i] )) self.assertAlmostEqual(scaled_array.interpolate_value(x), x_good[i], 2) # # interpolator # print("\nTesting interpolator...") x = numpy.arange(-5.0, 18.8, 3) y = x**2 scaled_array = ScaledArray.initialize_from_range(y,x[0],x[-1]) print("for interpolation; x=",x) print("for interpolation; offset, delta:=",scaled_array.offset(),scaled_array.delta()) print("for interpolation; abscissas:=",scaled_array.get_abscissas()) x1 = numpy.concatenate( ( numpy.arange(-6, -4, 0.1) , [0], numpy.arange(11, 20.0, 0.1) ) ) y1 = scaled_array.interpolate_values(x1) if do_plot: from srxraylib.plot.gol import plot plot(x,y,x1,y1,legend=["Data",'Interpolated'],legend_position=[0.4,0.8], marker=['','o'],linestyle=['-',''],xrange=[-6,21],yrange=[-5,375]) for i in range(len(x1)): y2 = x1[i]**2 if x1[i] <= x[0]: y2 = y[0] if x1[i] >= x[-1]: y2 = y[-1] print(" interpolated at x=%g is: %g (expected: %g)"%(x1[i],y1[i],y2)) self.assertAlmostEqual(1e-3*y1[i], 1e-3*y2, 2) # interpolate on same grid print("\nTesting interpolation on the same grid...") y1 = scaled_array.interpolate_values(scaled_array.get_abscissas()) if do_plot: from srxraylib.plot.gol import plot plot(scaled_array.get_abscissas(),scaled_array.get_values(), scaled_array.get_abscissas(),y1,legend=["Data",'Interpolated on same grid'],legend_position=[0.4,0.8], marker=['','o'],linestyle=['-','']) numpy.testing.assert_almost_equal(scaled_array.get_values(),y1,5)
def initialize_wavefront(cls, wavelength=1e-10, number_of_points=1000): return Wavefront1D( wavelength, ScaledArray.initialize(np_array=numpy.full( number_of_points, (1.0 + 0.0j), dtype=complex)))
def initialize_wavefront(cls, wavelength=1e-10, number_of_points=1000): return Wavefront1D( wavelength, ScaledArray.initialize(np_array=numpy.full(number_of_points, (1.0 + 0.0j), dtype=complex)) )