Пример #1
0
    def test_GaN_synthetic_empty(self):
        # Reconstruct empty for displacements
        empty_param = self.default_GaN_param()
        del empty_param["object_names"]
        carrier = (np.array(empty_param["sideband_pos"], dtype=float) - 1024) / 2048
        carrier /= np.dot(carrier, carrier)
        holoaverage(empty_param, verbose=self.VERBOSE)
        with h5py.File(empty_param["output_name"], "r") as output:
            empty = output["empty"][...]

        # Create displacements from empty hologram
        shift = np.angle(rescale_fourier(empty, (2048, 2048))) / 2.0 / np.pi
        displacement_file = self.touch_temp_output()
        with h5py.File(displacement_file, "w") as output:
            output.create_dataset("dx", data=shift * carrier[0])
            output.create_dataset("dy", data=shift * carrier[1])

        # Reconstruct data
        object_param = self.default_GaN_param()
        object_param["empty_names"] = "/dev/null/some_invalid_filename"
        object_param["empty_override"] = "/dev/null/some_invalid_filename"
        object_param["synthesize_empty"] = True
        object_param["camera_distortions"] = [displacement_file + "?dataset=dx", displacement_file + "?dataset=dy"]
        holoaverage(object_param, verbose=self.VERBOSE)
        with h5py.File(object_param["output_name"], "r") as output:
            new_empty = output["empty"][...]
            data_convergence = output["data"].attrs["convergence"]

        # Test for empty equivalence
        np.testing.assert_allclose(np.angle(empty / new_empty)[10:-10, 10:-10], 0.0, atol=0.1)

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], 2.25341306e+11, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #2
0
    def test_GaN_separate_empty_and_object(self):
        # Reconstruct empty
        empty_param = self.default_GaN_param()
        del empty_param["object_names"]
        holoaverage(empty_param, verbose=self.VERBOSE)
        with h5py.File(empty_param["output_name"], "r") as output:
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        self.assertTrue(np.allclose(empty_convergence[-1], self.GAN_EMPTY_CONVERGENCE_384, rtol=1e-4))
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Reconstruct data
        object_param = self.default_GaN_param()
        object_param["empty_names"] = "/dev/null/some_invalid_filename"
        object_param["empty_override"] = empty_param["output_name"] + "?dataset=empty"
        holoaverage(object_param, verbose=self.VERBOSE)
        with h5py.File(object_param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], self.GAN_DATA_CONVERGENCE_256, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #3
0
    def test_GaN_single_empty_and_object(self):
        # Reconstruct empty
        param = self.default_GaN_param()
        param["object_last"] = 1
        param["empty_last"] = 1
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data = output["data"][...]
            empty = output["empty"][...]

        # Test for shape
        self.assertEqual(data.shape, (param["object_size"],) * 2)
        self.assertEqual(empty.shape, (param["empty_size"],) * 2)
Пример #4
0
    def test_GaN_no_empty(self):
        param = self.default_GaN_param()
        del param["empty_names"]
        del param["empty_size"]
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            self.assertFalse("empty" in output)
            data_convergence = output["data"].attrs["convergence"]

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], 4.88520723e+13, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #5
0
    def test_GaN_no_objects(self):
        param = self.default_GaN_param()
        del param["object_names"]
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            self.assertFalse("data" in output)
            self.assertFalse("variance" in output)
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        self.assertTrue(np.allclose(empty_convergence[-1], self.GAN_EMPTY_CONVERGENCE_384, rtol=1e-4))
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #6
0
    def test_GaN_example(self):
        param = self.default_GaN_param()
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        self.assertTrue(np.allclose(empty_convergence[-1], self.GAN_EMPTY_CONVERGENCE_384, rtol=1e-4))
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], self.GAN_DATA_CONVERGENCE_256, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #7
0
    def test_GaN_non_square_roi(self):
        param = self.default_GaN_param()
        param["object_last"] = 5    # Smaller series for speed
        param["empty_last"] = 5
        param["roi"] = [256, 640, 1792, 1408]
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Test for data convergence
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #8
0
    def test_GaN_empty_from_raw(self):
        param = self.default_GaN_param()
        empty_raw = self.touch_temp_output(suffix=".dat")
        with open(empty_raw, "wb") as file:
            np.zeros(100000, dtype=np.uint8).tofile(file)
            np.ones(256 * 256, dtype=np.complex64).tofile(file)
        del param["empty_names"]
        del param["empty_size"]
        param["empty_override"] = "%s?type=raw&xsize=256&ysize=256&dtype=complex64&offset=100000" % empty_raw
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            self.assertFalse("empty" in output)
            data_convergence = output["data"].attrs["convergence"]

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], 2.47313565e+14, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #9
0
    def test_GaN_focus_and_tilt_alignment(self):
        param = self.default_GaN_param()
        param["adjust_defocus"] = True
        param["adjust_tilt"] = True
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        self.assertTrue(np.allclose(empty_convergence[-1], self.GAN_EMPTY_CONVERGENCE_384, rtol=1e-1))
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], self.GAN_DATA_CONVERGENCE_256_FOCUS, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #10
0
    def test_GaN_example_disabled_pyfftw(self):
        from holoaverage.fft import pyfftw_present, disable_pyfftw
        if not pyfftw_present():
            return      # Disable test: already tested by other test
        disable_pyfftw()

        param = self.default_GaN_param()
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        self.assertTrue(np.allclose(empty_convergence[-1], self.GAN_EMPTY_CONVERGENCE_384, rtol=1e-4))
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Test for data convergence
        self.assertTrue(np.allclose(data_convergence[-1], self.GAN_DATA_CONVERGENCE_256, rtol=1e-4))
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #11
0
    def test_GaN_filename_list(self):
        param = self.default_GaN_param()
        # Use smaller series for speed
        object_names = param["object_names"]
        empty_names = param["empty_names"]
        param["object_names"] = [object_names % n for n in range(1, 12, 2)]
        param["empty_names"] = [empty_names % n for n in range(1, 12, 2)]
        del param["object_first"]
        del param["object_last"]
        del param["empty_first"]
        del param["empty_last"]
        holoaverage(param, verbose=self.VERBOSE)
        with h5py.File(param["output_name"], "r") as output:
            data_convergence = output["data"].attrs["convergence"]
            empty_convergence = output["empty"].attrs["convergence"]

        # Test for empty convergence
        delta = (empty_convergence[1:] - empty_convergence[:-1]) / empty_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))

        # Test for data convergence
        delta = (data_convergence[1:] - data_convergence[:-1]) / data_convergence[:-1]
        self.assertTrue(np.all(delta < +1e-4))
Пример #12
0
    def test_odd_sizes(self):
        param = self.default_n1_param()

        param["object_size"] = 3**5
        holoaverage(param, verbose=self.VERBOSE)
        phase_mean, phase_std = self.inner_quarter_stats(param)
        self.assertLess(abs(phase_std), 0.15)
        param["object_size"] = 384

        param["empty_size"] = 3**5
        holoaverage(param, verbose=self.VERBOSE)
        phase_mean, phase_std = self.inner_quarter_stats(param)
        self.assertLess(abs(phase_std), 0.15)
        param["empty_size"] = 512

        param["roi"] = [
            param["roi"][0], param["roi"][1], param["roi"][0] + 1215,
            param["roi"][1] + 1215
        ]
        holoaverage(param, verbose=self.VERBOSE)
        phase_mean, phase_std = self.inner_quarter_stats(param)
        self.assertLess(abs(phase_std), 0.15)
Пример #13
0
 def test_same_empty_as_object(self):
     param = self.default_n1_param()
     holoaverage(param, verbose=self.VERBOSE)
     phase_mean, phase_std = self.inner_quarter_stats(param)
     self.assertLess(abs(phase_std), 0.15)