def calculateHologram(self): #calculate hologram with current settings
        self.warning.setText('Calculating...')

        #self.compute.setChecked(True)
        scale = self.scale
        sender = self.sender()

        ######## hologram calculation (4x big to allow scrolling)
        start = time.time()
        sphere = Sphere(n = self.lcd5.value()+.0001j, 
            r = self.lcd4.value(), 
            center = (256*self.scale,256*self.scale,self.lcd3.value()))

        sphere2 = Sphere(n = self.lcd5.value()+.0001j, 
            r = self.lcd4.value(), 
            center = (self.lcd.value(),self.lcd2.value(),self.lcd3.value()))

        self.sphObject.setText(repr(sphere2))

        schema = ImageSchema(shape = 512, spacing = float(self.pxsizeText.text()),
		    optics = Optics(wavelen = float(self.waveText.text()), 
            index = float(self.mindexText.text()), polarization = [1,0]))

        schema2 = ImageSchema(shape = 256, spacing = float(self.pxsizeText.text()),
            optics = Optics(wavelen = float(self.waveText.text()), 
            index = float(self.mindexText.text()), polarization = [1,0]))

        self.schemaObject.setText(str(repr(schema2)))
        self.holo = Mie.calc_holo(sphere, schema)
        self.lastholo = self.holo
        self.lastZ = self.lcd3.value()

        end = time.time()

        #now take only the part that you want to display
        x = round(self.sld.value())
        y = round(self.sld2.value())
        im = toimage(self.holo[256-x:512-x,256-y:512-y]) #PIL image

        #https://github.com/shuge/Enjoy-Qt-Python-Binding/blob/master/image/display_img/pil_to_qpixmap.py
        #myQtImage = ImageQt(im)
        #qimage = QtGui.QImage(myQtImage)
        if im.mode == "RGB":
            pass
        elif im.mode == "L":
            im = im.convert("RGBA")
        data = im.tostring('raw',"RGBA")
        qim = QtGui.QImage(data, 256, 256, QtGui.QImage.Format_ARGB32)
        pixmap = QtGui.QPixmap.fromImage(qim)

        myScaledPixmap = pixmap.scaled(QtCore.QSize(400,400))

        self.warning.setText('')
        self.hologram.setPixmap(myScaledPixmap)

        #self.hologram.setScaledContents(True)
        #myScaledPixmap.scaledToWidth(True)

        self.timer.setText('Calc. Time: '+str(round(end-start,4))+' s')
        self.timer.setAlignment(QtCore.Qt.AlignBottom | QtCore.Qt.AlignCenter)
示例#2
0
def test_dda_fit():
    s = Sphere(n=1.59, r=.2, center=(5, 5, 5))
    o = Optics(wavelen=.66, index=1.33, pixel_scale=.1)

    schema = ImageSchema(optics=o, shape=100)

    h = Mie.calc_holo(s, schema)

    def make_scatterer(r, x, y, z):
        local_s = Sphere(r=r, center=(x, y, z))
        return Scatterer(local_s.indicators, n=s.n)

    parameters = [
        par(.18, [.1, .3], name='r', step=.1),
        par(5, [4, 6], 'x'),
        par(5, [4, 6], 'y'),
        par(5.2, [4, 6], 'z')
    ]

    p = Parametrization(make_scatterer, parameters)

    model = Model(p, DDA.calc_holo)

    res = fit(model, h)

    assert_parameters_allclose(res.parameters,
                               dict([('r', 0.2003609439787491),
                                     ('x', 5.0128083665603995),
                                     ('y', 5.0125252883133617),
                                     ('z', 4.9775097284878775)]),
                               rtol=1e-3)
示例#3
0
def test_serialization():
    par_s = Sphere(center=(par(.567e-5, [0, 1e-5]), par(.576e-6, [0, 1e-5]),
                           par(15e-6, [1e-5, 2e-5])),
                   r=par(8.5e-7, [1e-8, 1e-5]),
                   n=par(1.59, [1, 2]))

    alpha = par(.6, [.1, 1], 'alpha')

    schema = ImageSchema(shape=100,
                         spacing=.1151e-6,
                         optics=Optics(.66e-6, 1.33))

    model = Model(par_s, Mie.calc_holo, alpha=alpha)

    holo = Mie.calc_holo(model.scatterer.guess, schema, model.alpha.guess)

    result = fit(model, holo)

    temp = tempfile.NamedTemporaryFile()
    save(temp, result)

    temp.flush()
    temp.seek(0)
    loaded = load(temp)

    assert_obj_close(result, loaded, context='serialized_result')
示例#4
0
def test_image_io():
    holo = get_example_data('image0001.yaml')
    t = tempfile.mkdtemp()

    filename = os.path.join(t, 'image0001.tif')
    save(filename, holo)
    l = load(filename)
    assert_obj_close(l, holo)

    # check that it defaults to saving as tif
    filename = os.path.join(t, 'image0002')
    save_image(filename, holo)
    l = load(filename + '.tif')
    assert_obj_close(l, holo)

    # check saving 16 bit
    filename = os.path.join(t, 'image0003')
    save_image(filename, holo, scaling=None, depth=16)
    l = load(filename + '.tif')
    assert_obj_close(l, holo)

    # test that yaml save works corretly with a string instead of a file
    filename = os.path.join(t, 'image0001.yaml')
    save(filename, holo)
    loaded = load(filename)
    assert_obj_close(loaded, holo)

    f = get_example_data_path('image0001.yaml')
    spacing = .1
    optics = Optics(.66, 1.33, (1, 0))
    with warnings.catch_warnings(record=True) as w:
        warnings.simplefilter('always')
        h = load(f, spacing=spacing, optics=optics)
        assert_obj_close(h.optics, optics)
        assert_equal(h.spacing, spacing)
        assert_equal(len(w), 1)
        assert "Overriding spacing and optics of loaded yaml" in w[-1].message

    with warnings.catch_warnings(record=True) as w:
        warnings.simplefilter('always')
        h = load(f, optics=optics)
        assert_obj_close(h.optics, optics)
        assert_equal(h.spacing, holo.spacing)
        assert_equal(len(w), 1)
        assert ("WARNING: overriding optics of loaded yaml without "
                "overriding spacing, this is probably incorrect."
                in w[-1].message)

    with warnings.catch_warnings(record=True) as w:
        warnings.simplefilter('always')
        h = load(f, spacing=spacing)
        assert_obj_close(h.optics, holo.optics)
        assert_equal(h.spacing, spacing)
        assert_equal(len(w), 1)
        assert ("WARNING: overriding spacing of loaded yaml without "
                "overriding optics, this is probably incorrect."
                in w[-1].message)

    shutil.rmtree(t)
示例#5
0
def test_layered():
    s = Sphere(n = (1,2), r = (1, 2), center = (2, 2, 2))
    sch = ImageSchema((10, 10), .2, Optics(.66, 1, (1, 0)))
    hs = Mie.calc_holo(s, sch)

    guess = hp.scattering.scatterer.sphere.LayeredSphere((1,2), (par(1.01), par(.99)), (2, 2, 2))
    model = Model(guess, Mie.calc_holo)
    res = fit(model, hs)
    assert_allclose(res.scatterer.t, (1, 1), rtol = 1e-12)
示例#6
0
def test_load_optics():
    optics_yaml = """wavelen: 785e-9
polarization: [1.0, 0]
divergence: 0
pixel_size: [6.8e-6, 6.8e-6]
pixel_scale: [3.3e-7, 3.3e-7]"""
    t = tempfile.TemporaryFile()
    t.write(optics_yaml)
    t.seek(0)

    o = Optics(**load(t))

    assert_obj_close(
        o,
        Optics(wavelen=7.85e-07,
               polarization=[1.0, 0.0],
               divergence=0,
               pixel_size=[6.8e-06, 6.8e-06],
               pixel_scale=[3.3e-07, 3.3e-07]))
示例#7
0
def test_fit_multisphere_noisydimer_slow():
    optics = Optics(wavelen=658e-9, polarization = [0., 1.0],
                       divergence = 0., pixel_scale = [0.345e-6, 0.345e-6],
                       index = 1.334)

    holo = normalize(get_example_data('image0002.yaml'))

    # Now construct the model, and fit
    parameters = [Parameter(name = 'x0', guess = 1.64155e-5,
                            limit = [0, 1e-4]),
                  Parameter(1.7247e-5, [0, 1e-4], 'y0'),
                  Parameter(20.582e-6, [0, 1e-4], 'z0'),
                  Parameter(.6856e-6, [1e-8, 1e-4], 'r0'),
                  Parameter(1.6026, [1, 2], 'nr0'),
                  Parameter(1.758e-5, [0, 1e-4], 'x1'),
                  Parameter(1.753e-5, [0, 1e-4], 'y1'),
                  Parameter(21.2698e-6, [1e-8, 1e-4], 'z1'),
                  Parameter(.695e-6, [1e-8, 1e-4], 'r1'),
                  Parameter(1.6026, [1, 2], 'nr1')]

    def make_scatterer(x0, x1, y0, y1, z0, z1, r0, r1, nr0, nr1):
        s = Spheres([
                Sphere(center = (x0, y0, z0), r=r0, n = nr0+1e-5j),
                Sphere(center = (x1, y1, z1), r=r1, n = nr1+1e-5j)])
        return s

    # initial guess
    #s1 = Sphere(n=1.6026+1e-5j, r = .6856e-6,
    #            center=(1.64155e-05, 1.7247e-05, 20.582e-6))
    #s2 = Sphere(n=1.6026+1e-5j, r = .695e-6,
    #            center=(1.758e-05, 1.753e-05, 21.2698e-6))
    #sc = Spheres([s1, s2])
    #alpha = 0.99

    #lb1 = Sphere(1+1e-5j, 1e-8, 0, 0, 0)
    #ub1 = Sphere(2+1e-5j, 1e-5, 1e-4, 1e-4, 1e-4)
    #step1 = Sphere(1e-4+1e-4j, 1e-8, 0, 0, 0)
    #lb = Spheres([lb1, lb1]), .1
    #ub = Spheres([ub1, ub1]), 1
    #step = Spheres([step1, step1]), 0

    model = Model(parameters, Multisphere, make_scatterer=make_scatterer, alpha
    = Parameter(.99, [.1, 1.0], 'alpha'))
    result = fit(model, holo)
    print result.scatterer

    gold = np.array([1.642e-5, 1.725e-5, 2.058e-5, 1e-5, 1.603, 6.857e-7,
                     1.758e-5, 1.753e-5, 2.127e-5, 1e-5, 1.603,
                     6.964e-7])
    gold_alpha = 1.0

    assert_parameters_allclose(result.scatterer, gold, rtol=1e-2)
    # TODO: This test fails, alpha comes back as .9899..., where did
    # the gold come from?
    assert_approx_equal(result.alpha, gold_alpha, significant=2)
示例#8
0
def test_csg_dda():
    s = Sphere(n = 1.6, r=.1, center=(5, 5, 5))
    st = s.translated(.03, 0, 0)
    pacman = Difference(s, st)
    sch = ImageSchema(10, .1, Optics(.66, 1.33, (0, 1)))
    h = DDA.calc_holo(pacman, sch)
    verify(h, 'dda_csg')

    hr = DDA.calc_holo(pacman.rotated(np.pi/2, 0, 0), sch)
    rotated_pac = pacman.rotated(np.pi/2, 0, 0)
    verify(h/hr, 'dda_csg_rotated_div')
示例#9
0
def test_fit_superposition():
    """
    Fit Mie superposition to a calculated hologram from two spheres
    """
    # Make a test hologram
    optics = Optics(wavelen=6.58e-07,
                    index=1.33,
                    polarization=[0.0, 1.0],
                    divergence=0,
                    spacing=None,
                    train=None,
                    mag=None,
                    pixel_scale=[2 * 2.302e-07, 2 * 2.302e-07])

    s1 = Sphere(n=1.5891 + 1e-4j, r=.65e-6, center=(1.56e-05, 1.44e-05, 15e-6))
    s2 = Sphere(n=1.5891 + 1e-4j, r=.65e-6, center=(3.42e-05, 3.17e-05, 10e-6))
    sc = Spheres([s1, s2])
    alpha = .629

    theory = Mie(optics, 100)
    holo = theory.calc_holo(sc, alpha)

    # Now construct the model, and fit
    parameters = [
        Parameter(name='x0', guess=1.6e-5, limit=[0, 1e-4]),
        Parameter('y0', 1.4e-5, [0, 1e-4]),
        Parameter('z0', 15.5e-6, [0, 1e-4]),
        Parameter('r0', .65e-6, [0.6e-6, 0.7e-6]),
        Parameter('nr', 1.5891, [1, 2]),
        Parameter('x1', 3.5e-5, [0, 1e-4]),
        Parameter('y1', 3.2e-5, [0, 1e-4]),
        Parameter('z1', 10.5e-6, [0, 1e-4]),
        Parameter('r1', .65e-6, [0.6e-6, 0.7e-6])
    ]

    def make_scatterer(x0, x1, y0, y1, z0, z1, r0, r1, nr):
        s = Spheres([
            Sphere(center=(x0, y0, z0), r=r0, n=nr + 1e-4j),
            Sphere(center=(x1, y1, z1), r=r1, n=nr + 1e-4j)
        ])
        return s

    model = Model(parameters,
                  Mie,
                  make_scatterer=make_scatterer,
                  alpha=Parameter('alpha', .63, [.5, 0.8]))
    result = fit(model, holo)

    assert_obj_close(result.scatterer, sc)
    assert_approx_equal(result.alpha, alpha, significant=4)
    assert_equal(result.model, model)
    assert_read_matches_write(result)
示例#10
0
def test_integer_correctness():
    # we keep having bugs where the fitter doesn't
    schema = ImageSchema(shape = 100, spacing = .1,
                         optics = Optics(wavelen = .660, index = 1.33, polarization = (1, 0)))
    s = Sphere(center = (10.2, 9.8, 10.3), r = .5, n = 1.58)
    holo = Mie.calc_holo(s, schema)

    par_s = Sphere(center = (par(guess = 10, limit = [5,15]), par(10, [5, 15]), par(10, [5, 15])),
                   r = .5, n = 1.58)

    model = Model(par_s, Mie.calc_holo, alpha = par(.6, [.1, 1]))
    result = fit(model, holo)
    assert_allclose(result.scatterer.center, [10.2, 9.8, 10.3])
示例#11
0
def test_n():
    sph = Sphere(par(.5), 1.6, (5,5,5))
    sch = ImageSchema(shape=[100, 100], spacing=[0.1, 0.1],
                      optics=Optics(wavelen=0.66,
                                    index=1.33,
                                    polarization=[1, 0],
                                    divergence=0.0),
                      origin=[0.0, 0.0, 0.0])

    model = Model(sph, Mie.calc_holo, alpha=1)
    holo = Mie.calc_holo(model.scatterer.guess, sch)
    coster = CostComputer(holo, model, random_subset=.1)
    assert_allclose(coster.flattened_difference({'n' : .5}), 0)
示例#12
0
import holopy as hp
from holopy.scattering.scatterer import Sphere
from holopy.scattering.theory import Mie
from holopy.core import ImageSchema, Optics
schema = ImageSchema(shape=100,
                     spacing=.1,
                     optics=Optics(wavelen=.660,
                                   index=1.33,
                                   polarization=[1, 0]))
cs = Sphere(center=(2.5, 5, 5), n = (1.59, 1.42),\
            r = (0.3, 0.6))
holo = Mie.calc_holo(cs, schema)
hp.show(holo)
示例#13
0
import matplotlib.pyplot as plt
import numpy as np
from holopy.core import Schema, Angles, Optics
from holopy.scattering.scatterer import Sphere
from holopy.scattering.theory import Mie
schema = Schema(positions=Angles(np.linspace(0, np.pi, 100)),
                optics=Optics(wavelen=.66, index=1.33, polarization=(1, 0)))

sphere = Sphere(r=.5, n=1.59)

matr = Mie.calc_scat_matrix(sphere, schema)
# It is typical to look at scattering matrices on a semilog plot.
# You can make one as follows:
plt.figure()
plt.semilogy(np.linspace(0, np.pi, 100), abs(matr[:, 0, 0])**2)
plt.semilogy(np.linspace(0, np.pi, 100), abs(matr[:, 1, 1])**2)
plt.show()