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
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
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
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
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