Example #1
0
import mosaic
import pyfits

pos = mosaic.read_positions()
tables = dict(
    Hgamma = mosaic.read_fits_table("Hgamma_mosaic_sb.fits"),
    Hdelta = mosaic.read_fits_table("Hdelta_mosaic_sb.fits")
    )

# Write a FITS file for each data column of each emission line
for emline, table in tables.items():
    for name in table.names:
        im = mosaic.interpolate_image(pos.x, pos.y, table[name], delta=0.5)
        pyfits.writeto(
            "%s-%s.fits" % (emline, name), 
            im[:,::-1], 
            clobber=True)

# And do the flux ratio of the two lines
ratio = tables["Hdelta"].flux / tables["Hgamma"].flux
im = mosaic.interpolate_image(pos.x, pos.y, ratio, delta=0.5)
pyfits.writeto("Hd-Hg-ratio.fits", im[:,::-1], clobber=True)
Example #2
0
def compare(lineid, specid, column='flux', posid="positions_mosaic"):
    fieldpairs = mosaic.find_overlaps(posid=posid)
    fitsfilename = "%s_mosaic_%s.fits" % (lineid, specid)
    table = mosaic.read_fits_table(fitsfilename)

    # initialise a table to save the results
    outtable = dict(field1=list(), field2=list(), 
                    s_mean=list(), s_std=list(), N=list(), 
                    rat_med=list(), rat_q25=list(), rat_q75=list())
    for fieldpair, indices in fieldpairs.items():
        field, otherfield = fieldpair
        values = table[column][[i-1 for i in indices.keys()]]
        otherindices = list()
        seps = list()
        for neighbours in indices.values():
            # first attempt - just use the nearest neighbour
            sep, otherindex = neighbours[0]
            otherindices.append(otherindex)
            seps.append(sep)
        othervalues = table[column][[i-1 for i in otherindices]]
        seps = np.array(seps)

        # plot the data
        try:
            datamax = 1.1*max(values.max(), othervalues.max())
        except ValueError:
            # something wrong with this pair: skip it
            continue
        # The color of the points represents the separations
        plt.scatter(x=values, y=othervalues, c=seps, 
                    marker="o", vmin=0.0, vmax=2.68, alpha=0.6)
        plt.axis([0.0, datamax, 0.0, datamax])
        cb = plt.colorbar()
        cb.set_label("aperture\nseparation")
        # plt.axis('scaled')
        plt.xlabel(field)
        plt.ylabel(otherfield)

        # plot line y =x
        x = np.linspace(0.0, datamax)
        plt.plot(x, x, 'r--')

        # Median gradient
        medgrad = np.median(othervalues/values)
        quart25 = scipy.stats.scoreatpercentile(othervalues/values, 25)
        quart75 = scipy.stats.scoreatpercentile(othervalues/values, 75)
        dyplus = quart75 - medgrad
        dyminus = medgrad - quart25
        y = medgrad*x
        plt.plot(x, y, 'g')

        # Add info to title
        plt.title("%s %s %s\n N = %i, median(%s/%s) = %.2f + %.2f - %.2f\n sep = %.2f +/- %.2f" 
                  % (lineid, specid, column, len(values),
                     otherfield, field, medgrad, dyplus, dyminus,
                     seps.mean(), seps.std()),
                  fontsize="small")

        plt.savefig("%s-%s-compare-%s-%s-%s.png" 
                    % (lineid, specid, column, field, otherfield))
        plt.clf()

        # save the data to the output table
        outtable["field1"].append(field)
        outtable["field2"].append(otherfield)
        outtable["s_mean"].append(seps.mean())
        outtable["s_std"].append(seps.std())
        outtable["N"].append(len(values))
        outtable["rat_med"].append(medgrad)
        outtable["rat_q25"].append(quart25)
        outtable["rat_q75"].append(quart75)

    # Write output table to file
    fmt = "%.3f"
    fmts = dict(s_mean=fmt, s_std=fmt, 
                rat_med=fmt, rat_q25=fmt, rat_q75=fmt)
    asciitable.write(outtable, 
                     "%s-%s-compare-%s.dat" %  (lineid, specid, column),
                     delimiter="\t", formats=fmts)