Exemple #1
0
 def testNonUniformAxes(self):
     im = np.array(
         [
             [0., 1., 2.],
             [30., 10., 50.],
             [8., 9., 6.],
             [-10., 0., 22.]
             ]
         )
     x = FieldContainer(np.array([1., 10., 200.]), unit=Quantity('1 m'))
     y = FieldContainer(np.array([0., 2., 4., 8.]), unit=Quantity('1 cm'))
     fc = FieldContainer(im, unit=Quantity('5 V'), dimensions=[y, x])
     fc.seal()
     grad_y, grad_x = np.gradient(fc.data)
     grad_y /= np.gradient(y.data).reshape((4, 1))
     grad_x /= np.gradient(x.data).reshape((1, 3))
     grad_y = FieldContainer(
         grad_y, unit=fc.unit / y.unit,
         dimensions=copy.deepcopy(fc.dimensions)
         )
     grad_x = FieldContainer(
         grad_x, unit=fc.unit / x.unit,
         dimensions=copy.deepcopy(fc.dimensions)
         )
     grad_x = grad_x.inUnitsOf(grad_y)
     expected_result = FieldContainer(
         (grad_x.data ** 2 + grad_y.data ** 2) ** 0.5,
         unit=copy.deepcopy(grad_y.unit),
         dimensions=copy.deepcopy(fc.dimensions)
         )
     result = Gradient().gradientWorker(fc)
     self.assertEqual(expected_result, result)
Exemple #2
0
 def testRatiosUpToTenPercentError(self):
     delta = .1
     from ImageProcessing.CoverageWorker import CoverageWorker
     from ImageProcessing import FEATURE_COLOR, BACKGROUND_COLOR
     from pyphant.quantities import Quantity
     cworker = CoverageWorker()
     for rho1Fac in [0.1, 0.25, 0.5, 1.0, 1.5, 2.0, 5.0, 10.0]:
         rho1 = '%s mC / m ** 3' % (3000. * rho1Fac, )
         rho2 = '3 C / m ** 3'
         cworker.paramRho1.value = rho1
         cworker.paramRho2.value = rho2
         rho1 = Quantity(rho1)
         rho2 = Quantity(rho2)
         for ratio in numpy.arange(0.0, 1.01, 0.01):
             cworker.paramW1.value = '%s%%' % (ratio * 100., )
             result = cworker.threshold(self.image)
             self.assertEqual(result.dimensions, self.image.dimensions)
             stuff1 = numpy.where(result.data == FEATURE_COLOR, True,
                                  False).sum()
             stuff2 = numpy.where(result.data == BACKGROUND_COLOR, True,
                                  False).sum()
             self.assertEqual(stuff1 + stuff2, result.data.size)
             stuff1 = (stuff1 * rho1).inUnitsOf('C / m ** 3').value
             stuff2 = (stuff2 * rho2).inUnitsOf('C / m ** 3').value
             actualRatio = stuff1 / (stuff1 + stuff2)
             self.assertTrue(abs(ratio - actualRatio) <= delta)
Exemple #3
0
 def setUp(self):
     self.arrays = []
     self.arrays.append([1, 2, 3])
     self.arrays.append([1.9, -2.2, 3.4])
     self.matrix = [[3.8, 4.5], [-3.4, 546.6]]
     self.shapes = []
     self.shapes.append((5, np.array([6])))
     self.shapes.append((5, np.array([6.])))
     self.shapes.append(((3, 2), np.array([6])))
     self.shapes.append(((3, 2), np.array([6.])))
     self.angles = []
     self.angles.append(Quantity('1.4 rad'))
     self.angles.append(Quantity('2 rad'))
     self.angles.append(Quantity('30 deg'))
     self.angles.append(Quantity('-40 deg'))
     self.length = Quantity('5.3 m')
     self.phyunit = PhysicalUnit('m', 1., [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
     self.phyunit **= 5
     self.exps = [
         0, 1, 2, 1. / 5, 1. / (5. + 1e-12), 1. / (5. - 1e-12),
         -1. / (5. + 1e-12), -1. / (5. - 1e-12)
     ]
     self.badexps = [
         2., 1. / 6, 1. / (5. + 1e-8), 1. / (5. - 1e-8), -1. / (5. + 1e-8),
         -1. / (5. - 1e-8)
     ]
     self.values = [0, 1, 0., 1e-10, 4.049, 10.05, 3 - 1e-10]
     self.values += [-1, -1e-10, -4.049, -10.05, -(3 - 1e-10)]
Exemple #4
0
 def testLoadOneRow(self):
     result = self.load('onerow.fmf')
     t = FieldContainer(numpy.array([1.0]), unit=Quantity('1 s'),
                        shortname='t', longname='time')
     s = FieldContainer(numpy.array([2.0]), unit=Quantity('1 m'),
                        shortname='s', longname='distance')
     self.checkExpected([t, s], result)
Exemple #5
0
    def setUp(self):
        super(SampleContainerInSampleContainerTestCase, self).setUp()
        sample1 = SampleContainer([self.dependent, self.field],
                                  longname='First Sample',
                                  shortname='X',
                                  attributes=copy.copy(self.attributes).update(
                                      {'isSample': 'It seems so.'}))
        self.independent2 = FieldContainer(
            0.3 * numpy.linspace(0, 1, self.testData.shape[0] * 10),
            longname='independent variable',
            shortname='x',
            unit=Quantity('1 mg'),
            attributes=copy.copy(self.attributes).update({'independent':
                                                          True}))
        self.dependent2 = FieldContainer(9.81 * self.independent2.data,
                                         dimensions=[self.independent2],
                                         longname='dependent variable',
                                         shortname='f',
                                         unit=Quantity('9.81 nN'),
                                         attributes=copy.copy(
                                             self.attributes).update(
                                                 {'independent': False}))

        sample2 = SampleContainer([self.dependent2, self.independent2],
                                  longname='Second Sample',
                                  shortname='Y',
                                  attributes=copy.copy(self.attributes).update(
                                      {'sample Nr.': 2}))
        self.sample = SampleContainer([sample1, sample2],
                                      longname='SampleContainer with Samples',
                                      shortname='(X,Y)',
                                      attributes=copy.copy(
                                          self.attributes).update(
                                              {'isSample': 'It seems so.'}))
        self.sample.seal()
Exemple #6
0
 def testFloatAccuracy(self):
     result = str2unit('16.8 mm', FMFversion='1.0')
     diff = result - Quantity('16.8 mm')
     self.assertEqual(abs(diff.value) < 2e-14,True)
     result = str2unit('16.8 mm', FMFversion='1.0')
     diff = Quantity('16.8 mm')
     self.assertEqual(result, diff)
 def threshold(self, image, subscriber=0):
     th = float(self.paramThreshold.value)
     if self.paramUnit.value.lower() != 'ignore':
         from pyphant.quantities import Quantity, isQuantity
         try:
             unit = float(self.paramUnit.value)
             assert not isQuantity(image.unit)
         except ValueError:
             try:
                 unit = Quantity(self.paramUnit.value)
             except TypeError:
                 unit = Quantity(1.0, self.paramUnit.value)
             assert isQuantity(image.unit)
             assert unit.isCompatible(image.unit.unit)
         th *= unit / image.unit
     resultArray = scipy.where(image.data < th,
                               ImageProcessing.FEATURE_COLOR,
                               ImageProcessing.BACKGROUND_COLOR)
     result = DataContainer.FieldContainer(resultArray,
                                           dimensions=copy.deepcopy(
                                               image.dimensions),
                                           longname=u"Binary Image",
                                           shortname=u"B")
     result.seal()
     return result
Exemple #8
0
 def loadImageAsGreyScale(self, subscriber=0):
     im = Image.open(self.paramFilename.value)
     if im.mode == "I;16":
         im = im.convert("I")
         data = scipy.misc.fromimage(im).astype("int16")
     else:
         data = scipy.misc.fromimage(im, flatten=True)
     Ny, Nx = data.shape
     xUnit = Quantity(self.paramXScale.value.encode('utf-8'))
     xAxis =  DataContainer.FieldContainer(scipy.linspace(0.0, xUnit.value,
                                                          Nx, True),
                                           xUnit / xUnit.value,
                                           longname = 'x-coordinate',
                                           shortname = 'x')
     if self.paramYScale.value == 'link2X':
         yUnit = xUnit * float(Ny) / Nx
     else:
         yUnit = Quantity(self.paramYScale.value.encode('utf-8'))
     yAxis =  DataContainer.FieldContainer(scipy.linspace(0.0, yUnit.value,
                                                          Ny, True),
                                           yUnit / yUnit.value,
                                           longname = 'y-coordinate',
                                           shortname = 'y')
     try:
         FieldUnit = Quantity(self.paramFieldUnit.value.encode('utf-8'))
     except AttributeError:
         FieldUnit = self.paramFieldUnit.value
     result = DataContainer.FieldContainer(data,
                                           FieldUnit,
                                           longname="Image",
                                           shortname="I",
                                           dimensions=[yAxis, xAxis])
     result.seal()
     return result
Exemple #9
0
 def testLoadOneRowDep(self):
     result = self.load('onerow_dep.fmf')
     t = FieldContainer(numpy.array([1.0]), unit=Quantity('1 s'),
                        shortname='t', longname='time')
     s = FieldContainer(numpy.array([5.0]), unit=Quantity('1 m'),
                        shortname='s', longname='distance')
     s.dimensions[0] = deepcopy(t)
     self.checkExpected([t, s], result)
Exemple #10
0
 def setUp(self):
     self.quants = []
     self.quants.append(Quantity("1000 m"))
     self.quants.append(Quantity("1 km"))
     self.quants.append(Quantity("1000.1 m"))
     self.quants.append(0)
     self.quants.append(None)
     self.quants.append(Quantity("1000 s"))
Exemple #11
0
 def testHourPlanck(self):
     """
     In FMF 1.0 unit 'h' denotes hours,
     while in FMF 1.1 'h' denotes the Planck constant.
     """
     result = str2unit('1h')
     self.assertEqual(result, Quantity('6.62606896e-34 J*s'))
     result = str2unit('1h', FMFversion='1.0')
     self.assertEqual(result, Quantity('3600s'))
Exemple #12
0
def normation(normationStr):
    try:
        unit = Quantity(str(normationStr))
    except:
        try:
            unit = Quantity(1.0, str(normationStr))
        except:
            unit = float(normationStr)
    return unit
Exemple #13
0
 def testUnits(self):
     data = (np.arange(0, 256, .01)).reshape((80, 320))
     image = FieldContainer(data, unit=Quantity('1 mJ'))
     for dim in image.dimensions:
         dim.unit = Quantity('1 cm')
     image.seal()
     gradient = Gradient()
     result = gradient.gradientWorker(image)
     self.assertEqual(result.dimensions, image.dimensions)
     self.assertEqual(result.unit, Quantity('1 mJ / cm'))
Exemple #14
0
 def testVariable(self):
     column = [('T', Quantity('22.4 degC'), Quantity('0.5 degC')),
               ('T', Quantity('11.2 degC'), Quantity('0.5 degC'))]
     result = LoadFMF.column2FieldContainer('temperature', column)
     expectedResult = FieldContainer(numpy.array([22.4, 11.2]),
                                     error=numpy.array([0.5, 0.5]),
                                     mask=numpy.array([False, False]),
                                     unit='1 degC',
                                     longname='temperature',
                                     shortname='T')
     assertEqual(result, expectedResult)
Exemple #15
0
 def testVariableFirstNaN(self):
     column = [('T', 'NaN', Quantity('0.5 degC')),
               ('T', Quantity('11.2 degC'), None)]
     result = LoadFMF.column2FieldContainer('temperature', column)
     expectedResult = FieldContainer(numpy.array([numpy.NaN, 11.2]),
                                     error=numpy.array([0.5, 0.0]),
                                     mask=numpy.array([True, False]),
                                     unit='1 degC',
                                     longname='temperature',
                                     shortname='T')
     assertEqual(result, expectedResult)
Exemple #16
0
    def visit_Str(self, node):
        quantity = Quantity(node.s)

        class QuantityDummy(object):
            pass

        dummy = QuantityDummy()
        dummy.unit = Quantity(1.0, quantity.unit)
        dummy.data = quantity.value
        dummy.dimensions = None
        newName = self.getName(dummy)
        return Name(newName, Load())
Exemple #17
0
 def testUnits(self):
     from ImageProcessing.Gradient import Gradient
     from pyphant.core.DataContainer import FieldContainer
     from pyphant.quantities import Quantity
     data = (numpy.arange(0, 256, .01)).reshape((80, 320))
     image = FieldContainer(data, unit=Quantity('1 mJ'))
     for dim in image.dimensions:
         dim.unit = Quantity('1 cm')
     image.seal()
     gradient = Gradient()
     result = gradient.gradientWorker(image)
     self.assertEqual(result.dimensions, image.dimensions)
     self.assertEqual(result.unit, Quantity('1 mJ / cm'))
Exemple #18
0
    def getDimension(self, axis, length):
        from pyphant.quantities import Quantity
        from pyphant.core.DataContainer import FieldContainer
        import numpy
        delta = Quantity(self.getParam('d' + axis).value)
        start = Quantity(self.getParam('start' + axis).value)

        start = start.inUnitsOf(delta.unit)
        data = start.value + numpy.arange(0, length, dtype=float) * delta.value
        dim = FieldContainer(data,
                             unit=Quantity(1.0, delta.unit),
                             shortname=axis,
                             longname='%s-Axis' % (axis.upper(), ))
        return dim
Exemple #19
0
def slice2ind(arg, dim):
    if isinstance(arg, type("")):
        sl = ["0" + a for a in arg.split(':')
              ]  #Hack for quantities. which does not recognize .6 as a number.
        unit = dim.unit
        try:
            hi = Quantity(sl[1])
            try:
                li = Quantity(sl[0])
            except:
                li = Quantity(float(sl[0]), hi.unit)
            try:
                li, hi = [
                    i.inUnitsOf(unit.unit).value / unit.value
                    for i in [li, hi]
                ]
            except TypeError:
                raise TypeError(
                    "IncompatibleUnits: Dimension %s: %s [%s] can not be sliced with \"%s\"."
                    % (dim.longname, dim.shortname, dim.unit, arg))
        except SyntaxError:
            li, hi = [float(i) / unit for i in sl]
        f = dim.data
        intervallElements = numpy.logical_and(f >= li, f < hi)
        if numpy.alltrue(intervallElements):
            start = 0
            end = len(intervallElements) + 1
        else:
            dma = numpy.diff(intervallElements).nonzero()
            if len(dma[0]) == 0:
                raise NotImplementedError(
                    "This slice needs interpolation, which is not implemented yet."
                )
            if li <= f.min():
                start = 0
                end = dma[0][0] + 1
            elif hi > f.max():
                start = dma[0][0] + 1
                end = len(intervallElements) + 1
            elif hi == f.max():
                start = dma[0][0] + 1
                end = len(intervallElements)
            else:
                start, end = dma[0] + 1
        return slice(start, end)
    elif isinstance(arg, type(2)):
        return slice(arg, arg + 1)
    else:
        return arg
Exemple #20
0
 def loadImageAsGreyScale(self, subscriber=0):
     import os
     import re
     from scipy.misc import imread
     import numpy
     from pyphant.core.DataContainer import FieldContainer
     from pyphant.quantities import Quantity
     path = os.path.realpath(self.paramPath.value)
     if os.path.isfile(path):
         path = os.path.dirname(path)
     pattern = re.compile(self.paramRegex.value)
     filenames = filter(lambda x: pattern.match(x) is not None,
                        os.listdir(path))
     filenames.sort()
     filenames = [os.path.join(path, fname) for fname in filenames]
     print path
     zClip = self.getClip(self.paramZClip.value)
     filenames = filenames[zClip[0]:zClip[1]]
     assert len(filenames) >= 1
     yClip = self.getClip(self.paramYClip.value)
     xClip = self.getClip(self.paramXClip.value)
     dtype = self.paramDtype.value
     data = []
     for i, fn in enumerate(filenames):
         subscriber %= 1 + 99 * i / len(filenames)
         data.append(imread(fn, True)[yClip[0]:yClip[1], xClip[0]:xClip[1]])
     data = numpy.array(data, dtype=dtype)
     axes = ['z', 'y', 'x']
     dimensions = [
         self.getDimension(a, data.shape[i]) for i, a in enumerate(axes)
     ]
     try:
         unit = Quantity(self.paramFieldUnit.value)
     except AttributeError:
         unit = self.paramFieldUnit.value
     longname = self.paramLongname.value
     shortname = self.paramShortname.value
     image = FieldContainer(data=data,
                            dimensions=dimensions,
                            unit=unit,
                            longname=longname,
                            shortname=shortname,
                            attributes={
                                'yFactor': Quantity(self.paramDy.value),
                                'xFactor': Quantity(self.paramDx.value)
                            })
     image.seal()
     subscriber %= 100
     return image
 def setUp(self):
     super(SampleContainerTestCase,self).setUp()
     self.independent = FieldContainer(0.3*numpy.linspace(0,1,self.testData.shape[0]),
                                       longname='independent variable',
                                       shortname='x',
                                       unit = Quantity('1 mg'),
                                       attributes = copy.copy(self.attributes).update({'independent':True}))
     self.dependent = FieldContainer(9.81*self.independent.data,
                                     dimensions=[self.independent],
                                     longname='dependent variable',
                                     shortname='f',
                                     unit = Quantity('9.81 nN'),
                                     attributes = copy.copy(self.attributes).update({'independent':False}))
     self.sample = SampleContainer([self.dependent,self.field],longname='Sample',shortname='X',
                                   attributes = copy.copy(self.attributes).update({'isSample':'It seems so.'}))
     self.sample.seal()
Exemple #22
0
def createFieldContainer(key, array):
    def longname2unit(name):
        reg = re.compile(r"\[([^]]*)\]")
        m = reg.search(name)
        if not m or m.group(1) == "counts" or m.group(1) == "":
            return 1.0
        else:
            return Quantity('1 ' + str(m.group(1)))

    fieldUnit = longname2unit(key)
    if isQuantity(fieldUnit):
        fieldContainer = DataContainer.FieldContainer(numpy.array(array),
                                                      unit=fieldUnit,
                                                      longname=key)
    else:
        try:
            quantities = [
                Quantity(string.encode('latin-1')) for string in array
            ]
            firstUnit = quantities[0].unit
            scaledArray = [
                quant.inUnitsOf(firstUnit).value for quant in quantities
            ]
            fieldContainer = DataContainer.FieldContainer(
                numpy.array(scaledArray),
                unit='1. %s' % firstUnit.name(),
                longname=key)
        except:
            fieldContainer = DataContainer.FieldContainer(numpy.array(array),
                                                          unit=fieldUnit,
                                                          longname=key)
    return fieldContainer
Exemple #23
0
 def longname2unit(name):
     reg = re.compile(r"\[([^]]*)\]")
     m = reg.search(name)
     if not m or m.group(1) == "counts" or m.group(1) == "":
         return 1.0
     else:
         return Quantity('1 ' + str(m.group(1)))
Exemple #24
0
 def testLoadOneColumn(self):
     result = self.load('onecolumn.fmf')
     t = FieldContainer(numpy.array([1, 2, 3, 4]),
                        unit=Quantity('1 s'),
                        shortname='t',
                        longname='time')
     self.checkExpected([t], result)
Exemple #25
0
 def testLoadOneValue(self):
     result = self.load('onevalue.fmf')
     t = FieldContainer(numpy.array([1.0]),
                        unit=Quantity('1 s'),
                        shortname='t',
                        longname='time')
     self.checkExpected([t], result)
Exemple #26
0
 def setUp(self):
     import tempfile
     import os
     self.dir = tempfile.mkdtemp()
     self.dbase = self.dir + os.path.sep + "testcase.sqlite3"
     self.wrapper = pyphant.core.SQLiteWrapper.SQLiteWrapper(self.dbase)
     with self.wrapper:
         self.wrapper.setup_dbase()
     self.summary = {
         'id': 'emd5://PC/aheld/'
         '2009-01-01_12:00:00.123456/12345678910.field',
         'longname': 'name',
         'shortname': 'sn',
         'creator': 'aheld',
         'date': '2009-01-01_12:00:00.123456',
         'machine': 'PC',
         'type': 'field',
         'unit': Quantity('10.03e-8 mm**-1'),
         'attributes': {
             'attribute1': 'bla1',
             'attribute2': 'bla2'
         },
         'hash': '12345678910',
         'dimensions': [im_id]
     }
     self.sc_summary = self.summary.copy()
     self.sc_summary['id'] = self.summary['id'][:-5] + 'sample'
     self.sc_summary.pop('unit')
     self.sc_summary.pop('dimensions')
     self.sc_summary['columns'] = [self.summary['id'], self.summary['id']]
     self.sc_summary['type'] = 'sample'
     self.sc_summary['longname'] = u'name2'
     self.sc_summary['shortname'] = u'sn2'
Exemple #27
0
 def testPowersOfUnits(self):
     expected = (1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
     result = pyphant.core.SQLiteWrapper.quantity2powers(Quantity('1m'))
     self.assertEqual(
         expected, result,
         "The number of basic units determining a quantity does not fit. The SQTLiteWrapper is expecting"
     )
Exemple #28
0
 def calcAbsorption(self, osc, subscriber=0):
     I = osc[u'I']
     I_d = osc[u'I_d']
     I_0 = osc[u'I_0']
     A = - ((I.data - I_d.data) / (I_0.data - I_d.data) - 1)
     if self.paramClipping.value == 1:
         A[A > 1] = 1
         A[A < 0] = 0
     Abso = DataContainer.FieldContainer(A,
                                         longname=u'absorption',
                                         shortname=ur'\tilde{A}')
     Abso.dimensions[-1] = I.dimensions[-1]
     if self.paramMask_lamp.value == 1:
         removePeak(Abso, Quantity('654nm'), Quantity('660nm'))
         removePeak(Abso, Quantity('920nm'), Quantity('980nm'))
     Abso.seal()
     return Abso
Exemple #29
0
 def testSimpleQuantity(self):
     """
     The the conversion of a simple textual quantity specification
     to a quantity object.
     """
     expected = Quantity('1V')
     result = str2unit('1V')
     self.assertEqual(expected, result)
Exemple #30
0
class OscPlotPanel(PlotPanel):
    x_key = 0
    y_key = 1
    c_key = 2
    radius = Quantity('0.4mm')
    vmin = None
    vmax = None

    def __init__(self, parent, dataContainer):
        self.dataContainer = dataContainer
        PlotPanel.__init__(self, parent)

    def draw(self):
        self.x = self.dataContainer[self.x_key]
        self.y = self.dataContainer[self.y_key]
        self.c = self.dataContainer[self.c_key]
        if self.vmin is not None:
            self.vmin /= self.c.unit
        if self.vmax is not None:
            self.vmax /= self.c.unit
        self.figure.clear()
        self.ax = self.figure.add_subplot(111)
        self.figure.subplots_adjust(hspace=0.8)
        aspect = self.y.unit / self.x.unit
        if not isinstance(aspect, Quantity):
            self.ax.set_aspect(aspect)
        try:
            if self.c.mask != None:
                mask = numpy.logical_not(self.c.mask)
                x = self.x.data[mask]
                y = self.y.data[mask]
                c = self.c.data[mask]
            else:
                x = self.x.data
                y = self.y.data
                c = self.c.data
            self.scat = self.ax.scatter(x,
                                        y,
                                        s=numpy.pi *
                                        (self.radius / self.x.unit)**2,
                                        c=c,
                                        vmin=self.vmin,
                                        vmax=self.vmax)
            self.colorbar = self.figure.colorbar(self.scat,
                                                 format=F(self.c),
                                                 ax=self.ax)
            self.rescale(self.ax)
        except Exception, e:
            print e
        self.ax.set_xlabel(self.x.label)
        self.ax.set_ylabel(self.y.label)
        try:
            self.ax.set_title(self.dataContainer.attributes['title'])
        except (KeyError, TypeError):
            pass
        self.ax.callbacks.connect('xlim_changed', self.rescale)
        self.ax.callbacks.connect('ylim_changed', self.rescale)
        self.canvas.draw()