from astrometry.util.file import *
from astrometry.util.starutil import *

def parse_mwgc_part1_line(s):
	gcid = s[0:10].strip()
	ra = hmsstring2ra(s[23:33])
	dec = dmsstring2dec(s[35:44])
	dist = float(s[62:67].strip())
	#print '>>%s<<' % gcid, ra, dec, dist
	return (gcid,ra,dec,dist)

def parse_mwgc_part3_line(s):
	gcid = s[0:10].strip()
	fehstr = s[12:17].strip()
	if len(fehstr):
		feh = float(fehstr)
	else:
		feh = float('nan')
	return (gcid,feh)

# Returns a list of (name, ra, dec, distance, [Fe/H])
#   ra,dec in degrees
#   distance in kpc
#   [Fe/H] in dex
def parse_mwgc(fn='mwgc.dat'):
	s = read_file(fn)
	# starting and ending lines (inclusive) of positional data part.
	part1 = (74,223)
	# metallicity part
	part3 = (419,568)
	lines = s.split('\n')
	part1data = []
	part3data = []
	for l in lines[part1[0]:part1[1]+1]:
		X = parse_mwgc_part1_line(l)
		part1data.append(X)
	for l in lines[part3[0]:part3[1]+1]:
		X = parse_mwgc_part3_line(l)
		part3data.append(X)

	mwgc = []
	for (x1,x3) in zip(part1data, part3data):
		assert(x1[0] == x3[0])
		mwgc.append(x1 + x3[1:])
	return mwgc

if __name__ == '__main__':
	print parse_mwgc('mwgc.dat')
	

