def calcPositionAngleEofNRelativeToCenterInDegreesSpherical(vec,center): from math import pi, cos, sin, acos from physics import calcAngularSeparation if len(vec) != 2: print "ERROR in calcPositionAngleEofNRelativeToCenterInDegrees: Vector not of dimension 2!" return try: if (vec == center): return None if (vec[0] == center[0]): return 90.0 if (vec[1] == center[1]): return 0.0 # Convert coordinates to radians and calculate relative to equator a = (90.0 - vec[1]) * pi/180. b = (90.0 - center[1]) * pi/180. c = calcAngularSeparation(vec[0],vec[1],center[0],center[1]) # Using spherical law of cosines to calculate the angle A cosAngleA = ( cos(a) - cos(c)*cos(b) ) / ( sin(c)*sin(b) ) angleA = acos(cosAngleA) positionAngle = angleA * 180./pi return positionAngle except ValueError: print "ERROR in calcPositionAngleEofNRelativeToCenterInDegrees: Type error!" print "BCG position = ", center print "Galaxy position = ", vec print "Position difference = [", center[0]-vec[0], ", ", center[1]-vec[1], "]" return