import csv, numpy as np # best distances from the 9 literature-search agents: Gname -> (dist_kpc, method, ref, conf) B = { 'G010.3208-00.1570A':(2.9,'maser-parallax','Li2022','high'),'G010.3208-00.1570B':(2.9,'maser-parallax','Li2022','high'), 'G010.8411-02.5919':(1.4,'Gaia-cloud','Zucker2020','med'),'G012.8062-00.1987':(2.40,'maser-parallax','Immer2013','high'), 'G012.9090-00.2607':(2.40,'maser-parallax','Immer2013','high'),'G014.3313-00.6397':(1.12,'maser-parallax','Sato2010','high'), 'G014.9958-00.6732':(1.91,'maser-parallax','Wu2019','high'),'G015.0357-00.6795':(1.91,'maser-parallax','Wu2019','high'), 'G015.1288-00.6717':(1.91,'maser-parallax','Wu2019','high'),'G017.6380+00.1566':(2.2,'kinematic','Lumsden2013','med'), 'G018.3029-00.3910':(2.8,'kinematic','Urquhart2018','med'),'G018.3412+01.7681':(3.0,'kinematic','Marseille2008','med'), 'G026.3819+01.4057A':(2.4,'Gaia','Pandey2023','med'),'G026.4207+01.6858':(2.4,'Gaia','Pandey2023','med'), 'G026.4488+01.7425B':(2.46,'Gaia','Pandey2023','high'),'G030.8667+00.1141':(2.5,'HISA-amb','Urquhart2018','med'), 'G035.1979-00.7427':(2.19,'maser-parallax','Zhang2009','high'),'G035.1992-01.7424':(3.27,'maser-parallax','Zhang2009','high'), 'G040.5451+02.5961A':(2.3,'kinematic','Urquhart2018','med'),'G040.5451+02.5961B':(2.3,'kinematic','Urquhart2018','med'), 'G043.1650-00.0285':(11.11,'maser-parallax','Zhang2014','high'),'G059.7831+00.0648':(2.16,'maser-parallax','Xu2009','high'), 'G060.8828-00.1295A':(2.1,'kinematic','Chen2003','med'),'G060.8828-00.1295B':(2.1,'kinematic','Chen2003','med'), 'G061.4736+00.0908A':(2.0,'kinematic','Evans1981','medlow'),'G061.4736+00.0908B':(2.0,'kinematic','Evans1981','medlow'), 'G061.4736+00.0908C':(2.0,'kinematic','Evans1981','medlow'),'G061.4736+00.0908D':(2.0,'kinematic','Evans1981','medlow'), 'G069.5395-00.9754':(2.57,'maser-parallax','Rygl2010','high'),'G076.3829-00.6210':(1.30,'maser-parallax','Xu2013','high'), 'G077.9637-00.0075':(1.40,'maser-parallax','Rygl2012','high'),'G078.4373+02.6584B':(1.40,'kinematic-unc','Rygl2012','low'), 'G080.8645+00.4197':(1.40,'maser-parallax','Rygl2012','high'),'G080.9383-00.1268':(1.40,'maser-parallax','Rygl2012','high'), 'G081.6802+00.5405B':(1.50,'maser-parallax','Rygl2012','high'),'G081.8789+00.7822':(1.30,'maser-parallax','Rygl2012','high'), 'G083.0936+03.2724':(1.52,'kinematic','Panja2024','med'),'G111.5234+00.8004A':(2.65,'maser-parallax','Moscadelli2009','high'), 'G111.5423+00.7776':(2.65,'maser-parallax','Moscadelli2009','high'),'G111.5671+00.7517':(2.65,'maser-parallax','Moscadelli2009','high'), 'G111.6115+00.3735':(2.63,'spectrophot','Humphreys1978','low'),'G133.6923+01.2270':(1.95,'maser-parallax','Xu2006','high'), 'G133.6945+01.2166A':(1.95,'maser-parallax','Xu2006','high'),'G133.6945+01.2166B':(1.95,'maser-parallax','Xu2006','high'), 'G133.7150+01.2155':(1.95,'maser-parallax','Xu2006','high'),'G133.7184+01.2237':(1.95,'maser-parallax','Xu2006','high'), 'G133.7354+01.1827':(1.95,'maser-parallax','Xu2006','high'),'G133.9476+01.0648':(1.95,'maser-parallax','Xu2006','high'), 'G138.2957+01.5552':(2.9,'kinematic','Urquhart2014','low'),'G189.0307+00.7821':(2.10,'maser-parallax','Reid2009','high'), 'G192.6005-00.0479':(1.78,'maser-parallax','Burns2016','high'),'G196.4542-01.6777':(4.15,'maser-parallax','QuirogaNunez2019','high'), 'G232.6207+00.9959':(1.637,'maser-parallax','Hyland2023','high'),'G268.4222-00.8490':(1.7,'Gaia','Getman2019','high'), 'G281.5576-02.4775':(2.3,'HISA','Urquhart2012','med'),'G281.5857-00.9706':(3.7,'kinematic','Caswell1987','med'), 'G284.3372-00.2831':(2.8,'kinematic','Urquhart2018','low'),'G287.4373-00.6129':(2.35,'Gaia','Shull2021','high'), 'G290.3745+01.6615':(2.7,'spectrophot','CarattioGaratti2020','med'),'G307.5606-00.5871':(7.4,'HISA-far','Urquhart2012','medhigh'), 'G316.8112-00.0566':(2.6,'HISA','Green2011','high'),'G320.2046+00.8626A':(2.5,'HISA','Urquhart2018','medhigh'), 'G321.7209+01.1711':(2.8,'kinematic','Urquhart2014','med'),'G326.6618+00.5207':(1.82,'spectrophot','Moises2011','med'), 'G326.7249+00.6159A':(1.82,'spectrophot','Moises2011','med'),'G326.7249+00.6159B':(1.82,'spectrophot','Moises2011','med'), 'G328.2523-00.5320B':(2.5,'kinematic','Csengeri2017','med'),'G328.2523-00.5320A':(2.5,'kinematic','Csengeri2017','med'), 'G328.8074+00.6324':(3.1,'kinematic','Dodson2004','med'),'G336.4917-01.4741B':(1.295,'Gaia','Sheikh2025','high'), 'G336.4917-01.4741A':(2.0,'kinematic','Lumsden2013','med'),'G338.3340+00.1315':(12.8,'HISA-far','Urquhart2012','high'), 'G338.3829+00.1632':(12.8,'HISA-far','Urquhart2012','high'),'G338.4357+00.0591':(13.1,'HISA-far','Urquhart2012','high'), 'G339.6221-00.1209':(2.8,'kinematic','Lumsden2013','med'),'G339.8838-01.2588':(2.1,'maser-parallax','Krishnan2015','high'), 'G342.1156-03.7089':(1.7,'kinematic-near','Lumsden2013','med'),'G343.1261-00.0623':(2.9,'kinematic','Garay2003','med'), 'G343.5024-00.0145':(2.7,'HISA-amb','Lumsden2013','low'),'G344.2207-00.5953':(2.5,'HISA','Urquhart2012','high'), 'G345.0034-00.2240A':(3.1,'HISA','Whitaker2017','med'),'G345.0052+01.8209':(1.8,'kinematic','Lopez2011','med'), 'G345.0061+01.7944C':(1.8,'kinematic','Lopez2011','medhigh'),'G345.2244+01.0304':(1.8,'kinematic','Lopez2011','med'), 'G345.4881+00.3148':(2.4,'kinematic','Urquhart2018','med'),'G345.4938+01.4677':(1.7,'kinematic','Guzman2014','high'), 'G345.5043+00.3480':(2.4,'kinematic','Urquhart2018','med'),'G348.5312-00.9714':(2.84,'HISA','Urquhart2012','med'), 'G348.6972-01.0263':(3.38,'maser-parallax','Wu2012','high'),'G348.7250-01.0435':(3.38,'maser-parallax','Wu2012','high'), } rows=list(csv.DictReader(open('candidate_distances.csv'))) out=[] for r in rows: nm=r['Name']; Lrms=float(r['Lbol_RMS']); drms=float(r['Dist_RMS']) if nm in B: d,meth,ref,conf=B[nm] Lbest=Lrms*(d/drms)**2 else: d,meth,ref,conf=drms,'RMS','Lumsden2013','low'; Lbest=Lrms in2 = (d<2.0) and (Lbest>1e4); in3=(d<3.0) and (Lbest>1e4) out.append(dict(Name=nm,Type=r['Type'],GLON=r['GLON'],GLAT=r['GLAT'], d_RMS=drms,d_best=d,method=meth,ref=ref,conf=conf, Lbol_RMS=int(Lrms),Lbol_best=int(Lbest),in_2kpc=in2,in_3kpc=in3)) import csv as _c with open('master_distances.csv','w',newline='') as f: w=_c.DictWriter(f,fieldnames=list(out[0].keys())); w.writeheader(); w.writerows(out) print('wrote master_distances.csv', len(out))