예제 #1
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 quantities.Quantity('1 ' + str(m.group(1)))
예제 #2
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 quantities.Quantity('1 ' + str(m.group(1)))

    fieldUnit = longname2unit(key)
    if quantities.isQuantity(fieldUnit):
        fieldContainer = DataContainer.FieldContainer(numpy.array(array),
                                                      unit=fieldUnit,
                                                      longname=key)
    else:
        try:
            quantities = [
                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
예제 #3
0
 def testSimpleYScale(self):
     """Check for correct handling of yScale."""
     unit = "57 m"
     punit = pq.Quantity(unit)
     self.worker.paramYScale.value = unit
     gs = self.worker.plugLoadImageAsGreyScale.getResult()
     self.assertEqual(gs.dimensions[-2].unit.unit, punit.unit)
     self.assertEqual(gs.dimensions[-2].unit.value, 1)
     self.assertAlmostEqual(gs.dimensions[-2].data.max(), punit.value)
예제 #4
0
 def testLink2X(self):
     """Check for correct inferrence of yScale from set xScale."""
     unit = "32 m"
     punit = pq.Quantity(unit)
     self.worker.paramXScale.value = unit
     self.worker.paramYScale.value = "link2X"
     gs = self.worker.plugLoadImageAsGreyScale.getResult()
     self.assertEqual(gs.dimensions[-2].unit.unit, punit.unit)
     self.assertEqual(gs.dimensions[-2].unit.value, 1)
     self.assertAlmostEqual(gs.dimensions[-1].data.max(), punit.value)
     self.assertEqual(gs.dimensions[-1].unit.unit, punit.unit)
     self.assertEqual(gs.dimensions[-1].unit.value, 1)
     ny, nx = gs.data.shape
     self.assertAlmostEqual(gs.dimensions[-2].data.max(), punit.value*ny/nx)
예제 #5
0
    def calcCurrentDensity(self, osc, model, subscriber=0):
        #Compute conversion factor between units
        #{u'\\Psi_{1}': Quantity(1.0,'mA/cm**2'),
        # u'\\Psi_{2}': 1.0, u'\\Psi_{3}': Quantity(1.0,'nm'),
        # u'\\Psi_{4}': 1.0, u'\\Psi_{0}': 1.0}
        unit = model._units[u'\\Psi_{3}']
        inputUnit = osc.unit
        assert inputUnit.isCompatible(
            unit.unit), 'Units of input and output data are not compatible.'
        factor = inputUnit.inUnitsOf(unit.unit).value
        #Get model
        modelOperator = createModel(model)
        #Apply model
        inputData = factor * osc.data
        resultData = modelOperator(inputData)
        if resultData.min() == 0 and resultData.max() == 0:
            _logger.warning("The model does not describe the considered data.")
        #Incorporate area of probe
        if self.paramDiameter.value == 'unknown':
            factor = 1.0
        else:
            diameter = quantities.Quantity(
                self.paramDiameter.value.encode('latin-1'))
            factor = 0.25 * numpy.pi * diameter**2

        scaledUnit = factor * model._units[u'\\Psi_{1}']
        #Build Fieldcontainer
        result = DataContainer.FieldContainer(
            resultData,
            mask=osc.mask,
            longname=u'maximal short current density',
            shortname=u'\sigma',
            unit=scaledUnit,
            rescale=True,
            dimensions=copy.deepcopy(osc.dimensions))
        result.seal()
        return result
예제 #6
0
파일: MRA.py 프로젝트: scre583/pyphant1
 def mra(self, field, subscriber=0):
     dim = field.dimensions[-1]
     try:
         scale = quantities.Quantity(self.paramScale.value.encode('utf-8'))
     except:
         scale = float(self.paramScale.value)
     numb_edge = 100.0 / self.paramNumb_edge.value
     d = scipy.diff(dim.data)
     numpy.testing.assert_array_almost_equal(d.min(), d.max(), 4)
     sigmaMax = scale / (d[0] * dim.unit)
     if len(field.data.shape) > 1:
         p_e = []
         inc = 100. / len(field.data)
         acc = 0.
         for field1d in field:
             try:
                 p_e.append(mra1d(dim, field1d, sigmaMax, numb_edge))
             except MraError:
                 p_e.append((([], []), ([], [])))
             acc += inc
             subscriber %= acc
         minima, maxima = zip(*p_e)
         n_min, pos_min, err_min = pos_error_to_data_container(minima)
         n_max, pos_max, err_max = pos_error_to_data_container(maxima)
         dims_min = [
             DataContainer.generateIndex(0, n_min), field.dimensions[0]
         ]
         dims_max = [
             DataContainer.generateIndex(0, n_max), field.dimensions[0]
         ]
     else:
         (pos_min, err_min), (pos_max,
                              err_max) = mra1d(dim, field, sigmaMax,
                                               numb_edge)
         dims_min = [DataContainer.generateIndex(0, len(pos_min))]
         dims_max = [DataContainer.generateIndex(0, len(pos_max))]
         subscriber %= 100.
     minima = DataContainer.FieldContainer(
         pos_min.transpose(),
         error=err_min.transpose(),
         unit=dim.unit,
         dimensions=dims_min,
         mask=numpy.isnan(pos_min).transpose(),
         longname="%s of the local %s of %s" %
         (dim.longname, "minima", field.longname),
         shortname="%s_{min}" % dim.shortname)
     maxima = DataContainer.FieldContainer(
         pos_max.transpose(),
         error=err_max.transpose(),
         unit=dim.unit,
         dimensions=dims_max,
         mask=numpy.isnan(pos_max).transpose(),
         longname="%s of the local %s of %s" %
         (dim.longname, "maxima", field.longname),
         shortname="%s_{max}" % dim.shortname)
     roots = DataContainer.SampleContainer(
         [minima, maxima],
         longname="%s of the local %s of %s" %
         (dim.longname, "extrema", field.longname),
         shortname="%s_{extrem}" % dim.shortname)
     if self.paramLongname.value != 'default':
         roots.longname = self.paramLongname.value
     if self.paramSymbol.value != 'default':
         roots.shortname = self.paramSymbol.value
     roots.seal()
     return roots
예제 #7
0
 def testArbitraryFieldUnit(self):
     """Check for correct setting of field unit in an arbitrary case."""
     unit = "2345 V/m"
     self.worker.paramFieldUnit.value = unit
     gs = self.worker.plugLoadImageAsGreyScale.getResult()
     self.assertEqual(gs.unit, pq.Quantity(unit))