
import numpy as np
from astropy import table
from astropy.table import Table

import requests
from celery.local import PromiseProxy
import pyvo.dal

def get_ztf_depot_table(url):
    with requests.get(url) as r:
        deptable = Table.read(r.text, format='ascii.fixed_width',
                              data_start=2, data_end=-1)
    return deptable

client = PromiseProxy(
    pyvo.dal.TAPService,
    ('https://irsa.ipac.caltech.edu/TAP',))

url = 'https://ztfweb.ipac.caltech.edu/ztf/depot/adhoc/' +\
      'specialrefs/SpecialRefImages.txt'
refstable = get_ztf_depot_table(url)

refs = refstable.group_by(['field', 'fid']).groups.aggregate(np.mean)
refs = refs.filled()

refs_grouped_by_field = refs.group_by('field').groups

for field_id, rows in zip(refs_grouped_by_field.keys,
                          refs_grouped_by_field):
    print(field_id[0], rows['fid'].tolist(), rows['maglimcat'].tolist())

dist = 340
distmod = 5.0*(np.log10(dist*1e6)-1.0)

filename = '../input/ZTF.ref'
refs = table.unique(table.Table.read(filename,
    format='ascii', data_start=2, data_end=-1)['field', 'fid', 'rcid'])
reference_images = {group[0]['field']: group['fid'].astype(int).tolist()
    for group in refs.group_by('field').groups}

filename = '../input/ZTF.tess.alternative'
#filename = '../input/ZTF.tess.all'
fields = np.loadtxt(filename,usecols=range(3))
refs_slice = np.array([0,0,0])
refs_all = np.array([0,0,0])
for field_id, ra, dec in fields:
    reference_filter_ids = reference_images.get(field_id, [])
    print(reference_filter_ids)
    for reference_filter_id in reference_filter_ids:
        refs_all[reference_filter_id-1] = refs_all[reference_filter_id-1] + 1
        if (dec >= -28) and (dec <=80):
            refs_slice[reference_filter_id-1] = refs_slice[reference_filter_id-1] + 1

idx = np.where((fields[:,2] >= -28) & (fields[:,2] <=80))[0]
print(100*refs_slice/(len(idx)*64))
print(100*refs_all/(len(fields)*64))

