def tumlinson11(): '''Tumlinson, J. et al. 2011, ApJ, 733, 111 J1009+0713 HST/COS Metal columns parsed from Table 1 NHI from LL+Lyman series (uncertain) ''' # Grab ASCII file from ApJ tab_fil = xa_path + "/data/LLS/tumlinson11.tb1.ascii" url = 'http://iopscience.iop.org/0004-637X/733/2/111/suppdata/apj388927t1_ascii.txt' chk_fil = glob.glob(tab_fil) if len(chk_fil) > 0: tab_fil = chk_fil[0] else: print('LLSSurvey: Grabbing table file from {:s}'.format(url)) f = urllib2.urlopen(url) with open(tab_fil, "wb") as code: code.write(f.read()) # Setup radec = xor.stod1('J100902.06+071343.8') # From paper lls = LLSSystem(name='J1009+0713_z0.356', RA=radec[0], Dec=radec[1], zem=0.456, zabs=0.3558, vlim=[-200., 250.] * u.km / u.s, NHI=18.4, sigNHI=np.array([0.41, 0.41])) #lls.mk_subsys(2) # Columns # Start with Table 3 (VPFIT) with open(tab_fil, 'r') as f: flines1 = f.readlines() # Trim flines1 = flines1[18:] # ion_dict = {} line_dict = dict(OI='1302', OVI='1038', MgII='2803^b', SiII='1190', CaII='3934', FeII='2586') ion = None for iline in flines1: isplit = iline.split('\t') if ion == 'FeIII': # Last line break # Ion is2 = isplit[0].split(' ') ion = is2[0] + is2[1] try: gdl = line_dict[ion] except: pass #print('Taking {:s}'.format(isplit[0])) else: if is2[2] != gdl: continue Zion = xai.name_ion(ion) ion_dict[ion] = dict(clm=0., sig_clm=0., flg_clm=0, Z=Zion[0], ion=Zion[1]) # Combine components [could replace with SubSystems some day] for iis in isplit[1:-1]: # Upper limit if (iis.strip()[0] == '<') & (ion_dict[ion]['flg_clm'] == 0): ion_dict[ion]['flg_clm'] = 3 ion_dict[ion]['clm'] = float(iis[1:]) elif (iis.strip()[0] == '>'): # Saturated ion_dict[ion]['flg_clm'] = 2 ion_dict[ion]['clm'] = log_sum( [ion_dict[ion]['clm'], float(iis[1:5])]) elif iis.strip()[0] in ['.', '<']: pass else: if ion_dict[ion]['flg_clm'] == 2: # Add to saturated ion_dict[ion]['clm'] = log_sum( [ion_dict[ion]['clm'], float(iis[0:4])]) else: ion_dict[ion]['flg_clm'] = 1 obj = dict(clm=float(iis[0:4]), sig_clm=float(iis[-4:])) # Add N, sig = xiai.sum_logN(ion_dict[ion], obj) ion_dict[ion]['clm'] = N ion_dict[ion]['sig_clm'] = sig # Finish lls._ionclms = IonClms(idict=ion_dict) lls.Refs.append('Tum11') return lls
def tripp2005(): '''Tripp, T. et al. 2005, ApJ, 2005, 619, 714 PG 1216+069 (LLS in Virgo) HST/STIS, FUSE Metal columns parsed from Tables 2 and 3 Total NHI from damping wings M/H from O/H ''' # Grab ASCII files from ApJ tab_fils = [ xa_path + "/data/LLS/tripp2005.tb3.ascii", xa_path + "/data/LLS/tripp2005.tb2.ascii" ] urls = [ 'http://iopscience.iop.org/0004-637X/619/2/714/fulltext/60797.tb3.txt', 'http://iopscience.iop.org/0004-637X/619/2/714/fulltext/60797.tb2.txt' ] for jj, tab_fil in enumerate(tab_fils): chk_fil = glob.glob(tab_fil) if len(chk_fil) > 0: tab_fil = chk_fil[0] else: url = urls[jj] print('LLSSurvey: Grabbing table file from {:s}'.format(url)) f = urllib2.urlopen(url) with open(tab_fil, "wb") as code: code.write(f.read()) # Setup radec = xor.stod1('J121920.9320+063838.476') # SIMBAD lls = LLSSystem(name='PG1216+069_z0.006', RA=radec[0], Dec=radec[1], zem=0.3313, zabs=0.00632, vlim=[-100., 100.] * u.km / u.s, NHI=19.32, MH=-1.6, sigNHI=np.array([0.03, 0.03])) #lls.mk_subsys(2) # Columns # Start with Table 3 (VPFIT) with open(tab_fils[0], 'r') as f: flines3 = f.readlines() ion_dict = {} for iline in flines3: if (len(iline.strip()) == 0): continue isplit = iline.split('\t') # Ion flg = 2 if (len(isplit[0].strip()) > 0): # & (isplit[0][0] not in ['1','2']): ipos = isplit[0].find('1') ionc = isplit[0][0:ipos - 1].strip() try: Zion = xai.name_ion(ionc) except KeyError: xdb.set_trace() flg = 1 # Column csplit = isplit[3].split(' ') clm = float(csplit[0]) sig = float(csplit[2]) if flg == 1: ion_dict[ionc] = dict(clm=clm, sig_clm=sig, flg_clm=1, Z=Zion[0], ion=Zion[1]) else: # Add it in tmp_dict = dict(clm=clm, sig_clm=sig, flg_clm=1, Z=Zion[0], ion=Zion[1]) logN, siglogN = xiai.sum_logN(ion_dict[ionc], tmp_dict) ion_dict[ionc]['clm'] = logN ion_dict[ionc]['sig_clm'] = siglogN ions = ion_dict.keys() # Now Table 2 for the extras with open(tab_fils[1], 'r') as f: flines2 = f.readlines() # Trim the first 10 lines flines2 = flines2[10:] # Loop for iline in flines2: isplit = iline.split('\t') # ionc = isplit[0].strip() if (len(ionc) == 0) or (ionc in ions): continue # Zion = xai.name_ion(ionc) ion_dict[ionc] = dict(Z=Zion[0], ion=Zion[1], sig_clm=0.) if isplit[4][0] == '<': ion_dict[ionc]['clm'] = float(isplit[4][1:]) ion_dict[ionc]['flg_clm'] = 3 else: raise ValueError('Should not get here') # Finish lls._ionclms = IonClms(idict=ion_dict) lls.Refs.append('Tri05') return lls