#!/usr/bin/env python
"""Consolidate all phases into one per-UC-HII deliverable table."""
import numpy as np
from astropy.table import Table, join
LOG=open('make_master_table.log','w')
def p(*a):
    s=' '.join(str(x) for x in a);print(s);print(s,file=LOG);LOG.flush()

co=Table.read('uchii_cores.fits')   # has classification, cores, geometry, ff
ag=Table.read('uchii_atlasgal.fits')
# census summary keyed by Name
cen=Table.read('alma_census.csv',format='csv')
cen_by={str(r['Name']):r for r in cen}

names=[str(x) for x in co['Name']]
def g(col): return np.array(co[col]) if col in co.colnames else np.full(len(co),np.nan)
agm={str(r['Name']):r for r in ag}

out=Table()
out['Name']=names
out['GLON']=np.array(co['GLON'],float)
out['GLAT']=np.array(co['GLAT'],float)
out['Dist_kpc']=np.array(co['Dist'],float)
out['Dpc_radio']=np.array(co['Dpc'],float)
out['radio_class']=[str(x) for x in co['radio_class']]
out['cornish_flux_mJy']=np.array(co['cornish_flux_mJy'],float)
# ALMA census
out['alma_nobs']=[int(float(cen_by[n]['n_obs'])) if n in cen_by else 0 for n in names]
out['alma_bands']=[str(cen_by[n]['bands']) if n in cen_by else '' for n in names]
out['alma_best_res_as']=[float(cen_by[n]['best_res_as']) if n in cen_by and str(cen_by[n]['best_res_as'])!='' else np.nan for n in names]
# clump reservoir
out['clump_Mclump_Msun']=[float(agm[n]['ag_Mclump']) if n in agm else np.nan for n in names]
out['clump_alpha_vir']=[float(agm[n]['ag_alpha_vir']) if n in agm else np.nan for n in names]
# core scale
out['in_almagal']=np.array(co['in_almagal'])
out['core_nearest_sep_pc']=np.array(co['core_nearest_sep_pc'],float)
out['core_nearest_Mcore_Msun']=np.array(co['core_nearest_Mcore'],float)
out['core_Msum_0.1pc_Msun']=np.array(co['core_Msum_0.1pc'],float)
out['core_dustfrac_thin']=np.array(co['core_dustfrac_thin'],float)
out['core_Mdust_ffsubtr_Msun']=np.array(co['core_Mdust_thin'],float)
out['geom_coincident']=np.array(co['geom_coincident'])
# accreting flag (strict): coincident + dust-dominated >=5 Msun
inal=np.array(co['in_almagal']); sep=np.array(co['core_nearest_sep_pc'],float)
Mnear=np.array(co['core_nearest_Mcore'],float); Mdust=np.array(co['core_Mdust_thin'],float)
out['accreting_loose']=inal&(sep<=0.02)                 # any coincident core
out['accreting_strict']=inal&(sep<=0.02)&(Mdust>=5)     # dust-dominated massive core
out.sort('Dpc_radio')
out.write('UCHII_master_deliverable.fits',overwrite=True)
out.write('UCHII_master_deliverable.csv',overwrite=True)
p('Wrote UCHII_master_deliverable.{fits,csv} with',len(out),'UC HII,',len(out.colnames),'cols')
p('cols:',out.colnames)
p('\nSummary flags:')
p('  in ALMAGAL:',int(inal.sum()))
p('  accreting_loose (coincident core):',int(out['accreting_loose'].sum()))
p('  accreting_strict (dust-dom >=5Msun at star):',int(out['accreting_strict'].sum()))
LOG.close()
