Exemplo n.º 1
0
def mapAngle(ang, *args, **kwargs):
    """
    Utility routine to map an angle into a specified period
    """
    period = 2.*pi        # radians
    units = angularUnits  # usually

    kwargKeys = list(kwargs.keys())
    for iArg in range(len(kwargKeys)):
        if kwargKeys[iArg] == 'units':
            units = kwargs[kwargKeys[iArg]]
        else:
            raise RuntimeError(
                "Unknown keyword argument: "
                + str(kwargKeys[iArg])
            )

    if units.lower() == 'degrees':
        period = 360.
    elif units.lower() != 'radians':
        raise RuntimeError(
            "unknown angular units: "
            + str(kwargs[kwargKeys[iArg]])
        )

    ang = atleast_1d(nFloat(ang))

    # if we have a specified angular range, use that
    if len(args) > 0:
        angRange = atleast_1d(nFloat(args[0]))

        # divide of multiples of period
        ang = ang - nInt(ang / period) * period

        lb = angRange.min()
        ub = angRange.max()

        if abs(ub - lb) != period:
            raise RuntimeError('range is incomplete!')

        lbi = ang < lb
        while lbi.sum() > 0:
            ang[lbi] = ang[lbi] + period
            lbi = ang < lb
            pass
        ubi = ang > ub
        while ubi.sum() > 0:
            ang[ubi] = ang[ubi] - period
            ubi = ang > ub
            pass
        retval = ang
    else:
        retval = mod(ang + 0.5*period, period) - 0.5*period
    return retval
Exemplo n.º 2
0
def mapAngle(ang, *args, **kwargs):
    """Utility routine to map an angle into a specified period

    actual function is mapAngle(ang[, range], units=angularUnits).  range is
    optional and defaults to the appropriate angle for the unit centered on 0.
    """
    units = angularUnits
    period = periodDict[units]

    kwargKeys = kwargs.keys()
    for iArg in range(len(kwargKeys)):
        if kwargKeys[iArg] == 'units':
            units = kwargs[kwargKeys[iArg]]
        else:
            raise RuntimeError, "Unknown keyword argument: " + str(
                kwargKeys[iArg])

    try:
        period = periodDict[units.lower()]
    except:
        raise RuntimeError, "unknown angular units: " + str(
            kwargs[kwargKeys[iArg]])

    ang = np.atleast_1d(nFloat(ang))

    # if we have a specified angular range, use that
    if len(args) > 0:
        angRange = np.atleast_1d(nFloat(args[0]))

        # divide of multiples of period
        ang = ang - nInt(ang / period) * period

        lb = angRange.min()
        ub = angRange.max()

        if abs(ub - lb) != period:
            raise RuntimeError, 'range is incomplete!'

        lbi = ang < lb
        while lbi.sum() > 0:
            ang[lbi] = ang[lbi] + period
            lbi = ang < lb
            pass
        ubi = ang > ub
        while ubi.sum() > 0:
            ang[ubi] = ang[ubi] - period
            ubi = ang > ub
            pass
        retval = ang
    else:
        retval = np.mod(ang + 0.5 * period, period) - 0.5 * period
    return retval
Exemplo n.º 3
0
def mapAngle(ang, *args, **kwargs):
    """Utility routine to map an angle into a specified period

    actual function is mapAngle(ang[, range], units=angularUnits).  range is
    optional and defaults to the appropriate angle for the unit centered on 0.
    """
    units  = angularUnits
    period = periodDict[units]

    kwargKeys = kwargs.keys()
    for iArg in range(len(kwargKeys)):
        if kwargKeys[iArg] == 'units':
            units = kwargs[ kwargKeys[iArg] ]
        else:
            raise RuntimeError, "Unknown keyword argument: " + str(kwargKeys[iArg])

    try:
        period = periodDict[units.lower()]
    except:
        raise RuntimeError, "unknown angular units: " + str( kwargs[ kwargKeys[iArg] ] )

    ang = np.atleast_1d(nFloat( ang ) )

    # if we have a specified angular range, use that
    if len(args) > 0:
        angRange = np.atleast_1d(nFloat( args[0] ) )

        # divide of multiples of period
        ang = ang - nInt(ang / period) * period

        lb = angRange.min()
        ub = angRange.max()

        if abs(ub - lb) != period:
            raise RuntimeError, 'range is incomplete!'

        lbi = ang < lb
        while lbi.sum() > 0:
            ang[lbi] = ang[lbi] + period
            lbi = ang < lb
            pass
        ubi = ang > ub
        while ubi.sum() > 0:
            ang[ubi] = ang[ubi] - period
            ubi = ang > ub
            pass
        retval = ang
    else:
        retval = np.mod(ang + 0.5*period, period) - 0.5*period
    return retval
Exemplo n.º 4
0
def mapAngle(ang, *args, **kwargs):
    """
    Utility routine to map an angle into a specified period
    """
    units = angularUnits
    period = periodDict[units]

    kwargKeys = list(kwargs.keys())
    for iArg in range(len(kwargKeys)):
        if kwargKeys[iArg] == 'units':
            units = kwargs[kwargKeys[iArg]]
        else:
            raise RuntimeError("Unknown keyword argument: " +
                               str(kwargKeys[iArg]))

    try:
        period = periodDict[units.lower()]
    except (KeyError):
        raise RuntimeError("unknown angular units: " +
                           str(kwargs[kwargKeys[iArg]]))

    ang = np.atleast_1d(nFloat(ang))

    # if we have a specified angular range, use that
    if len(args) > 0:
        angRange = np.atleast_1d(nFloat(args[0]))

        # divide of multiples of period
        ang = ang - nInt(ang / period) * period

        lb = angRange.min()
        ub = angRange.max()

        if abs(abs(ub - lb) - period) > sqrt_epsf:
            raise RuntimeError('range is incomplete!')

        lbi = ang < lb
        while lbi.sum() > 0:
            ang[lbi] = ang[lbi] + period
            lbi = ang < lb
            pass
        ubi = ang > ub
        while ubi.sum() > 0:
            ang[ubi] = ang[ubi] - period
            ubi = ang > ub
            pass
        retval = ang
    else:
        retval = np.mod(ang + 0.5 * period, period) - 0.5 * period
    return retval
Exemplo n.º 5
0
def mapAngle(ang, *args, **kwargs):
    """
    Utility routine to map an angle into a specified period
    """
    period   = 2.*pi                    # radians
    units    = angularUnits             # usually

    kwargKeys = kwargs.keys()
    for iArg in range(len(kwargKeys)):
        if kwargKeys[iArg] == 'units':
            units = kwargs[ kwargKeys[iArg] ]
        else:
            raise RuntimeError, "Unknown keyword argument: " + str(kwargKeys[iArg])

    if units.lower() == 'degrees':
        period = 360.
    elif units.lower() != 'radians':
        raise RuntimeError, "unknown angular units: " + str( kwargs[ kwargKeys[iArg] ] )

    ang = atleast_1d(nFloat( ang ) )

    # if we have a specified angular range, use that
    if len(args) > 0:
        angRange = atleast_1d(nFloat( args[0] ) )

        # divide of multiples of period
        ang = ang - nInt(ang / period) * period

        lb = angRange.min()
        ub = angRange.max()

        if abs(ub - lb) != period:
            raise RuntimeError, 'range is incomplete!'

        lbi = ang < lb
        while lbi.sum() > 0:
            ang[lbi] = ang[lbi] + period
            lbi = ang < lb
            pass
        ubi = ang > ub
        while ubi.sum() > 0:
            ang[ubi] = ang[ubi] - period
            ubi = ang > ub
            pass
        retval = ang
    else:
        retval = mod(ang + 0.5*period, period) - 0.5*period
    return retval