Esempio n. 1
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)
    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)
Esempio n. 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')
Esempio n. 4
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)
Esempio n. 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)
Esempio n. 6
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)
Esempio n. 7
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)
Esempio n. 8
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])
Esempio n. 9
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, use_random_fraction=.1)
    assert_allclose(coster.flattened_difference({'n' : .5}), 0)
Esempio n. 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])
Esempio n. 11
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)
Esempio n. 12
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, OrderedDict([('r',
    0.2003609439787491), ('x', 5.0128083665603995), ('y', 5.0125252883133617),
    ('z', 4.9775097284878775)]), rtol=1e-3)
Esempio n. 13
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')
Esempio n. 14
0
import scipy
from holopy.scattering.scatterer import Sphere, Spheres
from holopy.core import ImageSchema, Optics
from holopy.scattering.theory import Mie
import matplotlib.pyplot as plt

sphere = Sphere(n = 1.59+.0001j, r = .5, center = (4, 3, 5))

schema = ImageSchema(shape = 100, spacing = .1,
                     optics = Optics(wavelen = .660, index = 1.33,
                                     polarization = [1,0]))

s1 = Sphere(center=(5, 5, 5), n = 1.59, r = .5)
s2 = Sphere(center=(4, 4, 5), n = 1.59, r = .5)
collection = Spheres([s1, s2])
holo = Mie.calc_holo(collection, schema)

scipy.misc.imsave('holoTest.png',holo)
plt.imshow(holo)
plt.show()


Esempio n. 15
0
import holopy as hp
from holopy.scattering.theory import Mie
from holopy.scattering.scatterer import Sphere, Spheres
from holopy.core import ImageSchema, Optics
schema = ImageSchema(shape=100,
                     spacing=.1,
                     optics=Optics(wavelen=.660,
                                   index=1.33,
                                   polarization=[1, 0]))
s1 = Sphere(center=(5, 5, 5), n=1.59, r=.5)
s2 = Sphere(center=(4, 4, 5), n=1.59, r=.5)
collection = Spheres([s1, s2])
holo = Mie.calc_holo(collection, schema)
hp.show(holo)
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)
Esempio n. 17
0
import holopy as hp
from holopy.scattering.scatterer import Sphere
from holopy.core import ImageSchema, Optics
from holopy.scattering.theory import Mie

sphere = Sphere(n=1.59 + .0001j, r=.5, center=(4, 3, 5))

schema = ImageSchema(shape=100,
                     spacing=.1,
                     optics=Optics(wavelen=.660,
                                   index=1.33,
                                   polarization=[1, 0]))

holo = Mie.calc_holo(sphere, schema)
hp.show(holo)
Esempio n. 18
0
import holopy as hp
from holopy.scattering.scatterer import Sphere
from holopy.core import ImageSchema, Optics
from holopy.scattering.theory import Mie

sphere = Sphere(n = 1.59+.0001j, r = .5, center = (4, 3, 5))

schema = ImageSchema(shape = 100, spacing = .1,
                     optics = Optics(wavelen = .660, index = 1.33,
                                     polarization = [1,0]))

holo = Mie.calc_holo(sphere, schema)
hp.show(holo)
    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() + 0.0001j,
            r=self.lcd4.value(),
            center=(256 * self.scale, 256 * self.scale, self.lcd3.value()),
        )

        sphere2 = Sphere(
            n=self.lcd5.value() + 0.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)
Esempio n. 20
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)
    def calculateHologram(self): #calculate hologram with current settings
        #schema is generic to all scattering theories
        schema = ImageSchema(shape = [int(self.heightText.text()),int(self.widthText.text())], spacing = float(self.pxsizeText.text()),
            optics = Optics(wavelen = float(self.waveText.text()), 
            index = float(self.mindexText.text()), polarization = [1.0,0.0]))
        self.schemaObject.setText(str(repr(schema)))

        #first sphere is general for both single sphere and two sphere cases
        sphere = Sphere(n = self.lcd5.value()+.0001j, 
            r = self.lcd4.value(), 
            center = (self.lcd.value(),self.lcd2.value(),self.lcd3.value()))

        if self.reconstruct.isChecked():
            self.slideZ(sphere, schema)
            start = end = 0 #fake time since reconstruction time is odd to keep track of here

        else:
            scale = self.scale
            sender = self.sender()

            start = time.time()

            if self.onesphere.checkState() == 2:
                self.sphObject.setText(repr(sphere))

                #we have two theories to choose from for computing single sphere holograms
                if sphere.parameters != self.oldscattererparameters:
                    #when changing parameters, always use GPU because it's fast enough
                    self.gpu.toggle()

                if self.cpu.isChecked():
                    if sphere.parameters == self.oldMieCPUparameters and repr(schema) == repr(self.oldMieCPUschema):
                        self.holo = self.oldMieCPUHolo
                        print 'loaded cached mie hologram'
                    else:
                        self.holo = Mie.calc_holo(sphere,schema)
                        print 'freshly calculated mie hologram'
                        self.oldMieCPUHolo = self.holo
                        self.oldMieCPUparameters = sphere.parameters
                        self.oldMieCPUschema = schema

                else:
                    if sphere.parameters == self.oldscattererparameters and repr(schema) == repr(self.oldMieGPUschema):
                        self.holo = self.oldMieGPUHolo
                        print 'loaded cached GPU hologram'
                    else:
                        self.holo = gpuMie.calc_holo(sphere, schema)
                        self.oldMieGPUHolo = self.holo                        
                        self.oldscattererparameters = sphere.parameters
                        self.oldMieGPUschema = schema
                        self.oldscatterer = sphere
                        self.oldschema = schema

            else:
                #we have three theories to choose from for computing single sphere holograms
                s1 = sphere
                s2 = Sphere(n = self.lcd5.value()+.0001j, 
                    r = self.lcd4.value(), 
                    center = (self.lcd7.value(),self.lcd8.value(),self.lcd9.value()))

                cluster = Spheres([s1, s2])
                self.sphObject.setText(repr(cluster))

                if cluster.parameters != self.oldscatterer.parameters:
                    self.gpu.toggle()

                if self.cpu.isChecked():
                    if cluster.parameters == self.oldMieCPUparameters and repr(schema) == repr(self.oldMieCPUschema):
                        self.holo = self.oldMieCPUHolo
                        print 'loaded cached CPU superposition hologram'
                    else:
                        self.holo = Mie.calc_holo(cluster, schema)
                        self.oldMieCPUHolo = self.holo
                        self.oldMieCPUschema = schema
                        self.oldMieCPUparameters = cluster.parameters

                if self.multisphere.isChecked():
                    if cluster.parameters == self.oldMultiparameters and repr(schema) == repr(self.oldMultischema):
                        self.holo = self.oldMultiHolo
                        print 'loaded cached CPU multisphere hologram'
                    else:
                        self.holo = Multisphere.calc_holo(cluster, schema)
                        self.oldtheory = 'multi'
                        self.oldMultiHolo = self.holo
                        self.oldMultiparameters = cluster.parameters
                        self.oldMultischema = schema
                        print 'multisphere calculation done'

                if self.gpu.isChecked():
                    if cluster.parameters == self.oldscattererparameters and repr(schema) == repr(self.oldschema):
                        self.holo = self.oldMieGPUHolo
                        print 'loaded cached GPU hologram'
                    else:
                        self.holo = gpuMie.calc_holo(cluster, schema)
                        self.oldMieGPUHolo = self.holo
                        self.oldschema = schema
                        self.oldscatterer = cluster
                        self.oldscattererparameters = cluster.parameters

            end = time.time()

        #display the hologram
        im = scipy.misc.toimage(self.holo) #PIL image

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

        #set size of displayed image with max width or height = 500 px
        if float(self.widthText.text()) == float(self.heightText.text()):
            scaledsize = [500,500]
        else:
            if float(self.widthText.text()) > float(self.heightText.text()):
                scaledsize = [500,500/float(self.widthText.text())*float(self.heightText.text())]
            else:
                scaledsize = [500/float(self.heightText.text())*float(self.widthText.text()),500]

        myScaledPixmap = pixmap.scaled(QtCore.QSize(scaledsize[0],scaledsize[1]))

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

        if end-start > 0.03:
            self.timer.setText('Calc. Time: '+str(round(end-start,4))+' s')
        else:
            self.timer.setText('')

        if self.lcd3.value()<2*self.lcd4.value() or self.lcd9.value()<2*self.lcd4.value():
            self.warning.setText('z < sphere diameter')

        if self.lcd.value() > float(self.heightText.text())*float(self.pxsizeText.text()):
            self.warning.setText('x out of range, move slider or increase height')

        if self.lcd2.value() > float(self.widthText.text())*float(self.pxsizeText.text()):
            self.warning.setText('y out of range, move slider or increase width')

        if float(self.pxsizeText.text()) <= 0:
            self.warning.setText('pixel scale must be greater than 0')