def test_cgmsurvey_from_fields_sightlines(): # Instantiate fields and add galaxies field1 = ('PG1407+265', 212.349634 * u.deg, 26.3058650 * u.deg) fieldobj1 = IgmGalaxyField((field1[1], field1[2]), name=field1[0], verbose=False) field2 = ('PG1148+549', 177.83526042 * u.deg, 54.625855 * u.deg) fieldobj2 = IgmGalaxyField((field2[1], field2[2]), name=field2[0], verbose=False) f1ras = [212.33310891, 212.329875] * u.deg f1decs = [26.3722716934, 26.3084391667] * u.deg f1zs = [0.974413514137, 0.22016787529] f1gals = Table([f1ras, f1decs, f1zs], names=['RA', 'DEC', 'Z']) f2ras = [177.835229336, 178.536958333] * u.deg f2decs = [54.625851084, 54.6176108333] * u.deg f2zs = [0.0595485754311, 0.00385531364009] f2gals = Table([f2ras, f2decs, f2zs], names=['RA', 'DEC', 'Z']) fieldobj1.galaxies = f1gals fieldobj2.galaxies = f2gals fields = [fieldobj1, fieldobj2] # Instantiate sightlines sl1coord = SkyCoord(field1[1], field1[2], unit='deg') sl2coord = SkyCoord(field2[1], field2[2], unit='deg') comp11 = AbsComponent(sl1coord, (8, 6), 0.9743, [-200, 200] * u.km / u.s) comp12 = AbsComponent(sl1coord, (1, 1), 0.9743, [-200, 200] * u.km / u.s) al11 = AbsLine('OVI 1031') al11.attrib['coord'] = sl1coord al11.analy['spec'] = 'files/J0042-1037.358_9.fits.gz' al12 = AbsLine('HI 1215') al12.attrib['coord'] = sl1coord al12.analy['spec'] = 'files/J0042-1037.358_9.fits.gz' comp11.add_absline(al11, chk_sep=False, chk_vel=False) comp12.add_absline(al12, chk_sep=False, chk_vel=False) sys1 = IGMSystem.from_components([comp11, comp12]) sl1 = IGMSightline.from_systems([sys1]) comp21 = AbsComponent(sl2coord, (6, 4), 0.0037, [-200, 200] * u.km / u.s) comp22 = AbsComponent(sl2coord, (1, 1), 0.0037, [-200, 200] * u.km / u.s) al21 = AbsLine('CIV 1548') al21.attrib['coord'] = sl1coord al21.analy['spec'] = 'files/J0042-1037.358_9.fits.gz' al22 = AbsLine('HI 1215') al22.attrib['coord'] = sl1coord al22.analy['spec'] = 'files/J0042-1037.358_9.fits.gz' comp21.add_absline(al21, chk_sep=False, chk_vel=False) comp22.add_absline(al22, chk_sep=False, chk_vel=False) sys2 = IGMSystem.from_components([comp21, comp22]) sl2 = IGMSightline.from_systems([sys2]) sightlines = [sl1, sl2] # Run function csurvey = cgmsurvey_from_sightlines_fields(fields, sightlines) assert isinstance(csurvey, CGMAbsSurvey)
def load_coolgas(self): """ Load data on cool gas (CII, CIV, SiII, SiIII) Richter+17 """ llist = LineList('ISM') # Ricther+17 print('Loading Richter+17 for CII, CIV, SiII, SiIII') r17_a1_file = resource_filename('pyigm', '/data/CGM/Galaxy/richter17_A1.fits') r17_a1 = Table.read(r17_a1_file) r17_a2_file = resource_filename('pyigm', '/data/CGM/Galaxy/richter17_A2.fits') r17_a2 = Table.read(r17_a2_file) # Coords coords = SkyCoord(ra=r17_a1['_RAJ2000'], dec=r17_a1['_DEJ2000'], unit='deg') gc = coords.transform_to('galactic') ra = np.zeros((len(r17_a2))) dec = np.zeros((len(r17_a2))) # Loop on Sightlines for kk, row in enumerate(r17_a1): if self.debug and (kk == 5): break a2_idx = np.where(r17_a2['Name'] == row['Name'])[0] if len(a2_idx) == 0: continue ra[a2_idx] = row['_RAJ2000'] dec[a2_idx] = row['_DEJ2000'] # Generate the components icoord = gc[kk] alines = [] for jj, idx in enumerate(a2_idx): # Transition trans = '{:s} {:d}'.format(r17_a2['Ion'][idx].strip(), int(r17_a2['lambda0'][idx])) try: aline = AbsLine(trans, linelist=llist) except ValueError: pdb.set_trace() aline.attrib['coord'] = icoord # Skip EW=0 lines if r17_a2['e_W'][idx] == 0: continue # Velocity z = 0. aline.setz(z) vlim = np.array([r17_a2['vmin'][idx], r17_a2['vmax'][idx] ]) * u.km / u.s aline.limits.set(vlim) # These are v_LSR # EW aline.attrib['flag_EW'] = 1 aline.attrib['EW'] = r17_a2['W'][idx] / 1e3 * u.AA aline.attrib['sig_EW'] = r17_a2['e_W'][idx] / 1e3 * u.AA # Column if np.isnan( r17_a2['logN'] [idx]): # Odd that some lines had an error but no value aline.attrib['flag_N'] = 0 elif r17_a2['l_logN'][idx] == '>': aline.attrib['flag_N'] = 2 aline.attrib['sig_logN'] = 99.99 else: aline.attrib['flag_N'] = 1 aline.attrib['sig_logN'] = r17_a2['e_logN'][idx] aline.attrib['logN'] = r17_a2['logN'][idx] # Fill linear _, _ = linear_clm(aline.attrib) alines.append(aline) # Generate components from abslines comps = ltiu.build_components_from_abslines(alines, chk_sep=False, chk_vel=False) # Limits vmin = np.min([icomp.limits.vmin.value for icomp in comps]) vmax = np.max([icomp.limits.vmax.value for icomp in comps]) # Instantiate s_kwargs = dict(name=row['Name'] + '_z0') c_kwargs = dict(chk_sep=False, chk_z=False) abssys = IGMSystem.from_components(comps, vlim=[vmin, vmax] * u.km / u.s, s_kwargs=s_kwargs, c_kwargs=c_kwargs) # CGM Abs rho, ang_sep = calc_Galactic_rho(abssys.coord) cgmabs = CGMAbsSys(self.galaxy, abssys, rho=rho, ang_sep=ang_sep, cosmo=self.cosmo) # Add to cgm_abs self.abs.cgm_abs.append(cgmabs) # Finish r17_a2['RA'] = ra r17_a2['DEC'] = dec self.richter17 = r17_a2 # Reference if len(self.refs) > 0: self.refs += ',' self.refs += 'Richter+17'