This is a python script (python/coords/hetaz.py) that takes a Dec input as floating point value in units of degrees and outputs the HET optimal structure azimuth.
% hetaz.py --help usage: hetaz.py [-h] [-v] arg1 positional arguments: arg1 DEC in floating point degrees optional arguments: -h, --help show this help message and exit -v, --verbose Verbose responses % hetaz.py -v 12.0 Input dec = 12.0 The tuple az properties:3 (2, 115.27876517764319, 244.72123482235679) AZ(east,west) = 115.278765 244.721234822 % hetaz.py 12.0 2 115.278765178 244.721234822
I have wondered how to retrun multiple quantities from a function anf Niv Drory's code (in the form of optaz) showme how. Below I show my calling script (the subject of this page: hetax.py) and then I show Niv's function (which is ni my module scomods.getRAdeg.py). Notice how in the example above, when I run in verbose mode, I print the EAST azimuth as a formatted float, and I print the WEST azimuth as the string from the tuple.
Here is the script: % cat $codes/python/coords/hetaz.py #!/usr/bin/env python """Read dec floating point degrees and use N.Drory routine optaz.py (scomods.getRAdeg.optaz) to compute the opttimal structure azimuth for HET. s""" from scomods.getRAdeg import optaz import argparse as ARGP parser = ARGP.ArgumentParser() parser.add_argument("arg1", help="DEC in floating point degrees") parser.add_argument("-v","--verbose", help="Verbose responses", action="store_true") args = parser.parse_args() # assign some readable names decread = args.arg1 if args.verbose: print "Input dec = %s" % (decread) dec = float(decread) # compute the RA,DEC as floating point in DEGREES # NOTE: optaz returns a tuple, an immutable list az = optaz(dec) if args.verbose: print "The tuple az properties:\n", print type(az) print len(az) print az azE = float(az[1]) azW = az[2] print "AZ(east,west) = %.6f %s\n" % (azE,azW), else: print "%s %s %s \n" % (az), Here is the function: % cat $codes/python/scomods/getRAdeg.py (just the optaz part): def optaz (dec): """ Calculate optimal Azimuth given DEC. Params: dec, input, Declination in degrees. Returns: n_tracks, az1, az2 """ lat = 30.681436/180.0*np.pi # HET latitude alt = 55.055223/180.0*np.pi # HET elevation tsr = 8.2/180.0*np.pi # Tracking sphere angular extent P = np.cos(alt)*np.cos(lat) # HET constants Q = np.sin(alt)*np.sin(lat) dec = dec/180.0*np.pi TDE_N = np.arcsin (P+Q) TDE_S = np.arcsin (-P+Q) if dec>=TDE_S and dec<=TDE_N: az1 = np.arccos((np.sin(dec)-Q)/P) # TR43 eq. 5 az2 = 2.0*np.pi-az1 tracks = 2 elif dec<=TDE_S and dec>=TDE_S-tsr: az1 = az2 = np.pi tracks = 1 elif dec>=TDE_N and dec<=TDE_N+tsr: az1 = 0.0 az2 = 2.0*np.pi tracks = 1 else: az1 = az2 = 0 tracks = 0 return tracks, az1/np.pi*180.0, az2/np.pi*180.0