def load_and_convert_spectra(globname): speclist = [ pyspeckit.Spectrum(fn) for fn in glob.glob(paths.spath(globname)) ] for sp in speclist: sp.data -= np.nanpercentile(sp.data, 25) spectra = pyspeckit.Spectra(speclist) beam = radio_beam.Beam.from_fits_header(spectra.header) # "baseline" #spectra.data -= np.nanpercentile(spectra.data, 10) spectra.data *= beam.jtok(spectra.xarr) spectra.unit = 'K' spectra.xarr.refX = 220 * u.GHz # hackalack return spectra
def load_and_convert_spectra(globname): import glob import paths from astropy import wcs import pyspeckit import radio_beam speclist = [pyspeckit.Spectrum(fn) for fn in glob.glob(paths.spath(globname))] for sp in speclist: sp.data -= np.nanpercentile(sp.data, 25) spectra = pyspeckit.Spectra(speclist) beam = radio_beam.Beam.from_fits_header(spectra.header) # "baseline" #spectra.data -= np.nanpercentile(spectra.data, 10) spectra.data *= beam.jtok(spectra.xarr) spectra.unit='K' spectra.xarr.refX = 220*u.GHz # hackalack return spectra
warnings.filterwarnings('ignore', category=MaskedArrayFutureWarning) line_table = table.Table.read(paths.apath('full_line_table.csv')) line_table.sort('Species') regions = (pyregion.open(paths.rpath("cores.reg"))) # check that it will finish before running everything for region in regions: name = region.attr[1]['text'] if region.name == 'point': # when we're using peak pixels from the photometry catalog, the 'point' # objects can be skipped continue spectral_files = glob.glob(paths.spath('{0}_spw[0123]_peak.fits'.format(name))) #background_spectral_files = glob.glob(paths.spath('{0}_spw[0123]_background_mean.fits'.format(name))) assert len(spectral_files) == 4#len(background_spectral_files) == 4 vcen = velo_guesses.guesses[name] for region in regions: name = region.attr[1]['text'] if region.name == 'point': # when we're using peak pixels from the photometry catalog, the 'point' # objects can be skipped continue spectral_files = glob.glob(paths.spath('{0}_spw[0123]_peak.fits'.format(name))) #background_spectral_files = glob.glob(paths.spath('{0}_spw[0123]_background_mean.fits'.format(name))) assert len(spectral_files) == 4#len(background_spectral_files) == 4 spectra = pyspeckit.Spectra(spectral_files)
return myclass pyspeckit.spectrum.fitters.default_Registry.add_fitter('hnco_absorption',hnco_absorption_fitter(),5) if __name__ == "__main__" and False: import glob import pyspeckit import paths import radio_beam target = 'e2nw' spectra = pyspeckit.Spectra(glob.glob(paths.spath("*{0}*fits".format(target)))) beam = radio_beam.Beam.from_fits_header(spectra.header) # "baseline" spectra.data -= 0.15 spectra.data *= beam.jtok(spectra.xarr) spectra.plotter() spectra.specfit.Registry.add_fitter('hnco', hnco_fitter(), 4) spectra.specfit(fittype='hnco', guesses=[55, 4, 200, 5e15], limitedmin=[True]*4, limitedmax=[True]*4, limits=[(50,70), (1,8), (20, 1000), (1e13, 1e18)])
(True, False), (True, False)], parlimits=[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)], shortvarnames=(r'\Delta x', r'\sigma', 'T_{ex}', 'N', 'T_{BG}'), centroid_par='shift', ) myclass.__name__ = "ch3cn_absorption" return myclass pyspeckit.spectrum.fitters.default_Registry.add_fitter( 'ch3cn_absorption', ch3cn_absorption_fitter(), 5) if __name__ == "__main__": sp = pyspeckit.Spectrum(paths.spath('e2e_radial_bin_0.00to0.38_spw2.fits')) sp.specfit.register_fitter('13ch3cn_spw', ch3cn_spw_fitter(), 12) sp.xarr.convert_to_unit(u.GHz) sp.plotter(xmin=231.88, xmax=232.52) F = False T = True sp.baseline.basespec[:] = 0.380 sp.baseline.baselinepars = [0, 0.380] limits = [ (54, 59), (1.5, 5), ] + [(0.01, 0.25)] * 9 + [(0.0, 0.01)] fixed = [ F, T, ] + [T] * 6 + [F] * 3 + [T]
line_table = table.Table.read(paths.apath('full_line_table.csv')) line_table.sort('Species') regions = (pyregion.open(paths.rpath("cores.reg"))) # check that it will finish before running everything for region in regions: name = region.attr[1]['text'] if region.name == 'point': # when we're using peak pixels from the photometry catalog, the 'point' # objects can be skipped continue spectral_files = glob.glob( paths.spath('{0}_spw[0123]_peak.fits'.format(name))) #background_spectral_files = glob.glob(paths.spath('{0}_spw[0123]_background_mean.fits'.format(name))) assert len(spectral_files) == 4 #len(background_spectral_files) == 4 vcen = velo_guesses.guesses[name] for region in regions: name = region.attr[1]['text'] if region.name == 'point': # when we're using peak pixels from the photometry catalog, the 'point' # objects can be skipped continue spectral_files = glob.glob( paths.spath('{0}_spw[0123]_peak.fits'.format(name))) #background_spectral_files = glob.glob(paths.spath('{0}_spw[0123]_background_mean.fits'.format(name))) assert len(spectral_files) == 4 #len(background_spectral_files) == 4
myvtbl = Table.read(paths.tpath('core_velocities.txt'), # write as ascii.fixed_width format='ascii.fixed_width', delimiter='|') line_table = Table.read(paths.apath('full_line_table.csv')) all_line_ids = {"{0}_{1}".format(row['Species'], row['Resolved QNs']): (row['Freq-GHz'] if row['Freq-GHz'] else row['Meas Freq-GHz'])*u.GHz for row in line_table} all_line_ids.update(line_ids) for row in myvtbl: speclist = [pyspeckit.Spectrum(fn) for fn in glob.glob(paths.spath("{0}_spw*_peak.fits".format(row['source'])))] if len(speclist) == 0: continue for sp in speclist: beam = radio_beam.Beam.from_fits_header(sp.header) sp.data *= beam.jtok(sp.xarr) sp.unit='K' plot_whole_spectrum(speclist, title=row['source'], line_id=all_line_ids, figname='fullspectra/ALLLINES_{0}.png'.format(row['source']), velocity=row['velocity']*u.km/u.s, )
import velo_guesses import radio_beam import warnings from numpy.ma.core import MaskedArrayFutureWarning warnings.filterwarnings('ignore', category=MaskedArrayFutureWarning) line_table = table.Table.read(paths.apath('full_line_table.csv')) line_table.sort('Species') regions = (pyregion.open(paths.rpath("cores.reg"))) for region in regions: name = region.attr[1]['text'] spectral_files = glob.glob(paths.spath('{0}_spw[0123]_mean.fits'.format(name))) #background_spectral_files = glob.glob(paths.spath('{0}_spw[0123]_background_mean.fits'.format(name))) assert len(spectral_files) == 4#len(background_spectral_files) == 4 spectra = pyspeckit.Spectra(spectral_files) #bgspectra = pyspeckit.Spectra(background_spectral_files) stats = spectra.stats() err = stats['std'] # overly conservative guess for sp in spectra: sp.data -= np.nanpercentile(sp.data, 25) #med = stats['median'] #if med < 0: # med = 0 line_table.add_column(table.Column(name='{0}FittedAmplitude'.format(name), data=np.zeros(len(line_table)))) line_table.add_column(table.Column(name='{0}FittedCenter'.format(name), data=np.zeros(len(line_table))))
if __name__ == "__main__": import glob import pyspeckit from astropy import wcs from astropy import coordinates import pyregion import paths import radio_beam target = 'e2e' spectra = pyspeckit.Spectra( glob.glob(paths.spath("*{0}_spw[0-9]_mean.fits".format(target)))) beam = radio_beam.Beam.from_fits_header(spectra.header) # "baseline" spectra.data -= np.nanpercentile(spectra.data, 10) spectra.data *= beam.jtok(spectra.xarr) spectra.plotter() spectra.specfit.Registry.add_fitter('ch3oh', ch3oh_fitter(), 4) spectra.specfit(fittype='ch3oh', guesses=[55, 4, 200, 5e15], limitedmin=[True] * 4, limitedmax=[True] * 4, limits=[(50, 70), (1, 4), (20, 1000), (1e13, 1e18)]) ok = slaim['Species'] == 'CH3OHvt=0'
format='ascii.fixed_width', delimiter='|') line_table = Table.read(paths.apath('full_line_table.csv')) all_line_ids = { "{0}_{1}".format(row['Species'], row['Resolved QNs']): (row['Freq-GHz'] if row['Freq-GHz'] else row['Meas Freq-GHz']) * u.GHz for row in line_table } all_line_ids.update(line_ids) for row in myvtbl: speclist = [ pyspeckit.Spectrum(fn) for fn in glob.glob( paths.spath("{0}_spw*_peak.fits".format(row['source']))) ] if len(speclist) == 0: continue for sp in speclist: beam = radio_beam.Beam.from_fits_header(sp.header) sp.data *= beam.jtok(sp.xarr) sp.unit = 'K' plot_whole_spectrum( speclist, title=row['source'], line_id=all_line_ids, figname='fullspectra/ALLLINES_{0}.png'.format(row['source']), velocity=row['velocity'] * u.km / u.s,
cubefn = paths.dpath('12m/fullcube_cutouts/e2cutout_full_W51_spw{0}_lines.fits' .format(spw)) print(cubefn) spectra = spectra_from_cubefn(cubefn, reg, bins_arcsec, coordinate) pl.figure(1).clf() for bins, (key, spectrum) in zip(bins_arcsec, spectra.items()): include = np.isfinite(spectrum) & np.array([(bm.major < 1*u.arcsec) & (bm.minor < 1*u.arcsec) for bm in spectrum.beams]) avg_beam = spectral_cube.cube_utils.average_beams(spectrum.beams, includemask=include) spectrum.meta['beam'] = avg_beam spectrum.write(paths.spath('e2e_radial_bin_{0:0.2f}to{1:0.2f}_spw{2}.fits' .format(bins[0], bins[1], spw)), overwrite=True ) pl.plot(spectrum.spectral_axis.to(u.GHz).value, spectrum.value, label='{0:0.1f}-{1:0.1f}'.format(*bins)) pl.xlabel("Frequency (GHz)") pl.ylabel("Intensity (Jy)") pl.gca().ticklabel_format(useOffset=False) pl.gca().get_xaxis().get_major_formatter().set_scientific(False) pl.gca().get_yaxis().get_major_formatter().set_scientific(False) pl.legend(loc='best') pl.savefig(paths.fpath('radial_spectra/e2e_radial_spectra_spw{0}.png'
from line_parameters import frequencies, freq_name_mapping, yoffset cores = pyregion.open(paths.rpath('cores.reg')) minvelo = 45*u.km/u.s maxvelo = 90*u.km/u.s data = {} for corereg in cores: name = corereg.attr[1]['text'] data[name] = {} fn = "{name}_spw{ii}_mean.fits" spectra = pyspeckit.Spectra([paths.spath(fn.format(name=name, ii=ii)) for ii in range(4)]) spectra.data[(233.84*u.GHz<spectra.xarr) & (spectra.xarr>234.036*u.GHz)] = np.nan spectra.data[(230.00*u.GHz<spectra.xarr) & (spectra.xarr>230.523*u.GHz)] = np.nan scaling = np.nanmax(spectra.data) - np.nanpercentile(spectra.data, 20) assert not np.isnan(scaling) print("Scaling for {fn} = {scaling}".format(fn=fn.format(name=name, ii=0), scaling=scaling)) fig = pl.figure(1) fig.clf() for spwnum,sp in enumerate(spectra): if spwnum == 3: # flag out the middle section where apparently many antennae have been flagged sp.data[1600:1984] = np.nan elif spwnum == 2:
'e2se': -0.005, 'north': 0.2, } velo = {'e8mm': 61*u.km/u.s, 'e2e': 56*u.km/u.s, 'ALMAmm14': 62*u.km/u.s, 'ALMAmm41': 55*u.km/u.s, 'e2nw': 55.626*u.km/u.s, 'e2se': 54*u.km/u.s, 'north': 58*u.km/u.s, } pl.figure(1).clf() for target in snu_min: files = glob.glob(paths.spath("*{0}*fits".format(target))) if len(files) == 0: print("No matches for {0}".format(target)) continue spectra = pyspeckit.Spectra(files) for ii in range(4): spectra[ii].plotter(figure=pl.figure(1)) species_names = [x[0] for x in line_to_image_list] frequencies = u.Quantity([float(x[1].strip("GHz")) for x in line_to_image_list], unit=u.GHz) spectra[ii].plotter.axis.set_ylim(snu_min[target], spectra[ii].plotter.axis.get_ylim()[1])
if __name__ == "__main__": import glob import pyspeckit from astropy import wcs from astropy import coordinates import pyregion import paths import radio_beam target = 'e2e' spectra = pyspeckit.Spectra(glob.glob(paths.spath("*{0}_spw[0-9]_mean.fits".format(target)))) beam = radio_beam.Beam.from_fits_header(spectra.header) # "baseline" spectra.data -= np.nanpercentile(spectra.data, 10) spectra.data *= beam.jtok(spectra.xarr) spectra.plotter() spectra.specfit.Registry.add_fitter('ch3oh', ch3oh_fitter(), 4) spectra.specfit(fittype='ch3oh', guesses=[55, 4, 200, 5e15], limitedmin=[True]*4, limitedmax=[True]*4, limits=[(50,70), (1,4), (20, 1000), (1e13, 1e18)])
for key in colnames ] data_list.insert(0, names) tbl = Table(data_list) tbl.sort('SourceID') tbl.write(paths.tpath("dendro_core_velocities_7m12mspectra.ipac"), format="ascii.ipac") # 12m only data = {} for row in pruned_ppcat: name = row['_idx'] fn = paths.spath("dendro{name:03d}_spw{ii}_mean.fits") result = spectral_overlays.spectral_overlays( fn, name=name, freq_name_mapping=freq_name_mapping, frequencies=frequencies, yoffset=yoffset, minvelo=minvelo, maxvelo=maxvelo, ) if result: data[name] = result firstentry = list(data.keys())[0] colnames = list(data[firstentry].keys())
'north': 0.3, 'e2nw': 0.1, } velo = { 'e8mm': 61 * u.km / u.s, 'e2e': 56 * u.km / u.s, 'e2nw': 55.626 * u.km / u.s, 'ALMAmm14': 62 * u.km / u.s, 'north': 55 * u.km / u.s, } pl.figure(1).clf() for target, species_list in spectra_to_species.items(): spectra = pyspeckit.Spectra( glob.glob(paths.spath("*{0}*fits".format(target)))) for species_tuple in species_list: species_name, chemid, tmax = species_tuple for ii in range(4): cat = Splatalogue.query_lines(spectra[ii].xarr.min(), spectra[ii].xarr.max(), chemical_name=chemid, energy_max=tmax, energy_type='eu_k', noHFS=True, line_lists=['SLAIM']) spectra[ii].plotter(figure=pl.figure(1)) spectra[ii].plotter.axis.set_ylim( snu_min[target], spectra[ii].plotter.axis.get_ylim()[1])
from line_parameters import frequencies, freq_name_mapping, yoffset cores = pyregion.open(paths.rpath('cores.reg')) minvelo = 45 * u.km / u.s maxvelo = 90 * u.km / u.s data = {} for corereg in cores: name = corereg.attr[1]['text'] data[name] = {} fn = "{name}_spw{ii}_mean.fits" spectra = pyspeckit.Spectra( [paths.spath(fn.format(name=name, ii=ii)) for ii in range(4)]) spectra.data[(233.84 * u.GHz < spectra.xarr) & (spectra.xarr > 234.036 * u.GHz)] = np.nan spectra.data[(230.00 * u.GHz < spectra.xarr) & (spectra.xarr > 230.523 * u.GHz)] = np.nan scaling = np.nanmax(spectra.data) - np.nanpercentile(spectra.data, 20) assert not np.isnan(scaling) print("Scaling for {fn} = {scaling}".format(fn=fn.format(name=name, ii=0), scaling=scaling)) fig = pl.figure(1) fig.clf() for spwnum, sp in enumerate(spectra): if spwnum == 3: # flag out the middle section where apparently many antennae have been flagged
data_list.insert(0, names) tbl = Table(data_list) tbl.sort('SourceID') tbl.write(paths.tpath("core_velocities_7m12m_hires.ipac"), format="ascii.ipac", overwrite=True) # 12m only data = {} for corereg in cores: name = corereg.attr[1]['text'] fn = paths.spath("{name}_spw{ii}_mean.fits") result = spectral_overlays.spectral_overlays(fn, name=name, freq_name_mapping=freq_name_mapping, frequencies=frequencies, yoffset=yoffset, minvelo=minvelo, maxvelo=maxvelo, ) if result: data[name] = result firstentry = list(data.keys())[0] colnames = list(data[firstentry].keys()) coltypes = {k:type(data[firstentry][k]) for k in colnames} names = Column([name for name in data], name='SourceID')
import paths import pyspeckit import glob import matplotlib matplotlib.use('Qt4Agg') import os import pylab as pl tbl = Table.read(paths.mpath('diffuse_lines_mainonly.ipac'), format='ascii.ipac') rfreq = tbl['FreqGHz'] rfreq[rfreq.mask] = tbl['MeasFreqGHz'][rfreq.mask] freq = rfreq * (1-65*u.km/u.s/constants.c) for fn in glob.glob(paths.spath("*.fits")): sp = pyspeckit.Spectrum(fn) sp.xarr.convert_to_unit('GHz') sp.plotter(figure=pl.figure(1), clear=True) sp.plotter.line_ids(tbl['Species'], freq*u.GHz, unit='GHz') outname = os.path.splitext(os.path.split(fn)[1])[0] sp.plotter.savefig(paths.sppath("{0}.png".format(outname))) """ import paths import pyspeckit import numpy as np import glob sp = pyspeckit.Spectrum('ionization_front_circle_SgrB2_12m_spw0_lines.fits') sp.plotter()
spw)) print(cubefn) spectra = spectra_from_cubefn(cubefn, reg, bins_arcsec, coordinate) pl.figure(1).clf() for bins, (key, spectrum) in zip(bins_arcsec, spectra.items()): include = np.isfinite(spectrum) & np.array( [(bm.major < 1 * u.arcsec) & (bm.minor < 1 * u.arcsec) for bm in spectrum.beams]) avg_beam = spectral_cube.cube_utils.average_beams( spectrum.beams, includemask=include) spectrum.meta['beam'] = avg_beam spectrum.write(paths.spath( 'e2e_radial_bin_{0:0.2f}to{1:0.2f}_spw{2}.fits'.format( bins[0], bins[1], spw)), overwrite=True) pl.plot(spectrum.spectral_axis.to(u.GHz).value, spectrum.value, label='{0:0.1f}-{1:0.1f}'.format(*bins)) pl.xlabel("Frequency (GHz)") pl.ylabel("Intensity (Jy)") pl.gca().ticklabel_format(useOffset=False) pl.gca().get_xaxis().get_major_formatter().set_scientific(False) pl.gca().get_yaxis().get_major_formatter().set_scientific(False) pl.legend(loc='best') pl.savefig(
for key in colnames] data_list.insert(0, names) tbl = Table(data_list) tbl.sort('SourceID') tbl.write(paths.tpath("dendro_core_velocities_7m12mspectra.ipac"), format="ascii.ipac") # 12m only data = {} for row in pruned_ppcat: name = row['_idx'] fn = paths.spath("dendro{name:03d}_spw{ii}_mean.fits") result = spectral_overlays.spectral_overlays(fn, name=name, freq_name_mapping=freq_name_mapping, frequencies=frequencies, yoffset=yoffset, minvelo=minvelo, maxvelo=maxvelo, ) if result: data[name] = result firstentry = list(data.keys())[0] colnames = list(data[firstentry].keys()) coltypes = {k:type(data[firstentry][k]) for k in colnames} names = Column([name for name in data], name='SourceID')
myvtbl = Table.read(paths.tpath('core_velocities.txt'), # write as ascii.fixed_width format='ascii.fixed_width', delimiter='|') line_table = Table.read(paths.apath('full_line_table.csv')) all_line_ids = {"{0}_{1}".format(row['Species'], row['Resolved QNs']): (row['Freq-GHz'] if row['Freq-GHz'] else row['Meas Freq-GHz'])*u.GHz for row in line_table} all_line_ids.update(line_ids) for row in myvtbl: speclist = [pyspeckit.Spectrum(fn) for fn in glob.glob(paths.spath("{0}_spw*fits".format(row['source'])))] for sp in speclist: beam = radio_beam.Beam.from_fits_header(sp.header) sp.data *= beam.jtok(sp.xarr) sp.unit='K' plot_whole_spectrum(speclist, title=row['source'], line_id=all_line_ids, figname='fullspectra/ALLLINES_{0}.png'.format(row['source']), velocity=row['velocity']*u.km/u.s, )
"e2nw": [("formamide", "NH2CHO", 500), ("methylformate", "CH3OCHO", 1500), ("dimethylether", "CH3OCH3", 1500)], "ALMAmm14": [("methanol", "CH3OH", 500)], } snu_min = {"e8mm": 0.3, "e2e": 0.3, "ALMAmm14": 0.0, "north": 0.3, "e2nw": 0.1} velo = { "e8mm": 61 * u.km / u.s, "e2e": 56 * u.km / u.s, "e2nw": 55.626 * u.km / u.s, "ALMAmm14": 62 * u.km / u.s, "north": 55 * u.km / u.s, } pl.figure(1).clf() for target, species_list in spectra_to_species.items(): spectra = pyspeckit.Spectra(glob.glob(paths.spath("*{0}*fits".format(target)))) for species_tuple in species_list: species_name, chemid, tmax = species_tuple for ii in range(4): cat = Splatalogue.query_lines( spectra[ii].xarr.min(), spectra[ii].xarr.max(), chemical_name=chemid, energy_max=tmax, energy_type="eu_k", noHFS=True, line_lists=["SLAIM"], ) spectra[ii].plotter(figure=pl.figure(1))
import paths import pyspeckit import glob import matplotlib matplotlib.use('Qt4Agg') import os import pylab as pl tbl = Table.read(paths.mpath('diffuse_lines_mainonly.ipac'), format='ascii.ipac') rfreq = tbl['FreqGHz'] rfreq[rfreq.mask] = tbl['MeasFreqGHz'][rfreq.mask] freq = rfreq * (1 - 65 * u.km / u.s / constants.c) for fn in glob.glob(paths.spath("*.fits")): sp = pyspeckit.Spectrum(fn) sp.xarr.convert_to_unit('GHz') sp.plotter(figure=pl.figure(1), clear=True) sp.plotter.line_ids(tbl['Species'], freq * u.GHz, unit='GHz') outname = os.path.splitext(os.path.split(fn)[1])[0] sp.plotter.savefig(paths.sppath("{0}.png".format(outname))) """ import paths import pyspeckit import numpy as np import glob sp = pyspeckit.Spectrum('ionization_front_circle_SgrB2_12m_spw0_lines.fits') sp.plotter() tbl = Table.read('/Users/adam/work/sgrb2/molecules/diffuse_lines_mainonly.ipac',format='ascii.ipac') freq = tbl['FreqGHz']