Esempio n. 1
0
    def render(self, context):
        qs = context[self.var_name]
        tmp = StringIO.StringIO()

        P = [c.p_bary for c in qs.all() if c.p_bary > 0]

        cv = SVGCanvas(940, 550, background_color='white')
        if P:
            binned = bin_data_log(P, 200)
            pc = PlotContainer(0, -20, 950, 550, color='black', x_log=True)
            pc.bottom.set_label('Period (ms)')
            pc.top.hide_label()
            pc.left.set_label('Count')
            pc.right.hide_label()
            hp = HistogramPlotter(binned, color='black')
            pc.add_plotter(hp)
            cv.add_plot_container(pc)
            # write number of candidates shown:
            tf = TextFragment(50,
                              520,
                              '(Showing %d candidates.)' % len(P),
                              color='black',
                              font_size=15)
            cv.add_plot_container(tf)
        else:
            tf = TextFragment(200,
                              200,
                              'No Candidates found.',
                              color='red',
                              font_size=50)
            cv.add_plot_container(tf)

        tmp = StringIO.StringIO()
        cv.draw(tmp)
        return tmp.getvalue()
Esempio n. 2
0
    def render(self, context):
        qs = context[self.var_name]
        tmp = StringIO.StringIO()

        P = [c.p_bary for c in qs.all() if c.p_bary > 0]

        cv = SVGCanvas(940, 550, background_color='white')
        if P:
            binned = bin_data_log(P, 200)
            pc = PlotContainer(0, -20, 950, 550, color='black', x_log=True)
            pc.bottom.set_label('Period (ms)')
            pc.top.hide_label()
            pc.left.set_label('Count')
            pc.right.hide_label()
            hp = HistogramPlotter(binned, color='black')
            pc.add_plotter(hp)
            cv.add_plot_container(pc)
            # write number of candidates shown:
            tf = TextFragment(50, 520, '(Showing %d candidates.)' %
                              len(P), color='black', font_size=15)
            cv.add_plot_container(tf)
        else:
            tf = TextFragment(200, 200, 'No Candidates found.', color='red',
                              font_size=50)
            cv.add_plot_container(tf)

        tmp = StringIO.StringIO()
        cv.draw(tmp)
        return tmp.getvalue()
Esempio n. 3
0
def plot_snr_scatter(cv, foreground, background, lodm, hidm, marker_dms,
                     fallback):
    '''
    Add SNR versus DM scatter plot pulsetrain diagnostic plot.

    Note: for internal use, call the diagnostic.plot() function in stead.
    '''
    pc2 = PlotContainer(740, 150, 300, 600, data_padding=PADDING)
    pc2.right.hide_label()
    pc2.right.hide_tickmarklabels()
    pc2.left.hide_label()
    pc2.left.hide_tickmarklabels()
    pc2.bottom.hide_label()
    pc2.top.set_label('SNR')
    scp2 = ScatterPlotter([x[1] for x in foreground],
                          [x[0] for x in foreground], color='red')
    scp3 = ScatterPlotter([x[1] for x in background],
                          [x[0] for x in background], color='black')
    pc2.add(scp3, fallback)
    pc2.add(scp2, fallback)
    pc2.set_minimum_y_range(lodm, hidm)
    for m_dm in marker_dms:
        if lodm <= m_dm <= hidm:
            pc2.add(YLimitPlotter(m_dm, color='orange'))
    cv.add(pc2)
Esempio n. 4
0
    def plot_profile(cv, x, y, width, height, bestprof_inst, *args, **kwargs):
        psr_name = kwargs.get('psr_name', '')
        data_set = kwargs.get('data_set', '')
        beam_ra = kwargs.get('beam_ra', None)
        beam_dec = kwargs.get('beam_dec', None)

        if beam_ra != None and beam_dec != None:
            if isintance(beam_ra, BaseString):
                pass
            elif isinstance(beam_ra, RightAscension):
                pass

        # Some futzing with the position and size because the axes are not
        # drawn, normally they get 50 px.
        pc = PlotContainer(x - 50, y - 50, width + 100, height + 100, data_padding=0)
        pc.hide_axes()

        bpf = bestprof_inst

        pp = LinePlotter(bpf.profile, use_markers=False)
        pc.add_plotter(pp)
        TEXTSIZE = 10
        cv.add_plot_container(pc)
        if psr_name:
            cv.add_plot_container(TextFragment(x + 0, y + height + TEXTSIZE,
                'PSR ' + psr_name, font_size=TEXTSIZE))
        elif bpf.psr_name:
            cv.add_plot_container(TextFragment(x + 0, y + height + TEXTSIZE,
                bpf.psr_name, font_size=TEXTSIZE))
        else:
            cv.add_plot_container(TextFragment(x + 0, y + height + TEXTSIZE,
                'PSR UNKNOWN', font_size=TEXTSIZE))
        cv.add_plot_container(TextFragment(x + 0, y + height + 2 * TEXTSIZE, 
            '%.2f ms' % bpf.header.p_bary[0], alignment='start', 
            font_size=TEXTSIZE))
        cv.add_plot_container(TextFragment(x + width, 
            y + height + 2 * TEXTSIZE, '%.3f pc cm^-3' % bpf.header.best_dm,
            alignment='end', font_size=TEXTSIZE))
Esempio n. 5
0
    def plot_profile(cv, x, y, width, height, bestprof_inst, *args, **kwargs):
        psr_name = kwargs.get('psr_name', '')
        data_set = kwargs.get('data_set', '')
        beam_ra = kwargs.get('beam_ra', None)
        beam_dec = kwargs.get('beam_dec', None)

        if beam_ra != None and beam_dec != None:
            if isintance(beam_ra, BaseString):
                pass
            elif isinstance(beam_ra, RightAscension):
                pass

        # Some futzing with the position and size because the axes are not
        # drawn, normally they get 50 px.
        pc = PlotContainer(x - 50,
                           y - 50,
                           width + 100,
                           height + 100,
                           data_padding=0)
        pc.hide_axes()

        bpf = bestprof_inst

        pp = LinePlotter(bpf.profile, use_markers=False)
        pc.add_plotter(pp)
        TEXTSIZE = 10
        cv.add_plot_container(pc)
        if psr_name:
            cv.add_plot_container(
                TextFragment(x + 0,
                             y + height + TEXTSIZE,
                             'PSR ' + psr_name,
                             font_size=TEXTSIZE))
        elif bpf.psr_name:
            cv.add_plot_container(
                TextFragment(x + 0,
                             y + height + TEXTSIZE,
                             bpf.psr_name,
                             font_size=TEXTSIZE))
        else:
            cv.add_plot_container(
                TextFragment(x + 0,
                             y + height + TEXTSIZE,
                             'PSR UNKNOWN',
                             font_size=TEXTSIZE))
        cv.add_plot_container(
            TextFragment(x + 0,
                         y + height + 2 * TEXTSIZE,
                         '%.2f ms' % bpf.header.p_bary[0],
                         alignment='start',
                         font_size=TEXTSIZE))
        cv.add_plot_container(
            TextFragment(x + width,
                         y + height + 2 * TEXTSIZE,
                         '%.3f pc cm^-3' % bpf.header.best_dm,
                         alignment='end',
                         font_size=TEXTSIZE))
Esempio n. 6
0
    def render(self, context):
        qs = context[self.var_name]

        P = [c.p_bary for c in qs.all() if c.best_dm > 0]
        DM = [c.best_dm for c in qs.all() if c.best_dm > 0]
        REDCHISQ = [c.reduced_chi_sq for c in qs.all() if c.best_dm > 0]
        LINKS = [reverse('bestprof_detail', args=[c.pk])
                 for c in qs.all() if c.best_dm > 0]
        RA = [c.ra_deg for c in qs.all() if c.best_dm > 0]
        DEC = [c.dec_deg for c in qs.all() if c.best_dm > 0]

        cv = SVGCanvas(940, 550, background_color='white')
        if P:
            lo_dm = min(DM)
            max_dm = max(DM)
            pc = PlotContainer(0, -20, 880, 550, color='black', x_log=True,
                               y_log=True, data_background_color='gray')
            gr = RGBGradient((lo_dm, max_dm), (0, 0, 1), (1, 0, 0))
            scp = ScatterPlotter(P, REDCHISQ, RA, DEC, DM, gradient=gr,
                                 gradient_i=4, links=LINKS,
                                 symbol=RADECSymbol)
            pc.add_plotter(scp)
#            pc.top.hide_tickmarklabels()
            pc.top.hide_label()
#            pc.right.hide_tickmarklabels()
            pc.right.hide_label()
            pc.left.set_label('Reduced Chi Square')
            pc.bottom.set_label('Period (ms)')
            cv.add_plot_container(pc)
            # Gradient:
            pc = PlotContainer(820, -20, 120, 550, color='black', data_padding=0)
            pc.top.hide_label()
            pc.top.hide_tickmarks()
            pc.left.hide_tickmarks()
            pc.bottom.hide_label()
            pc.bottom.hide_tickmarks()
            pc.left.hide_label()
            pc.right.set_label('Dispersion Measure cm^-3 pc')
            pc.add_plotter(GradientPlotter(gr))
            cv.add_plot_container(pc)
            # write number of candidates shown:
            tf = TextFragment(50, 520,
                              '(Showing %d candidates.)' % len(P),
                              color='black', font_size=15)
            cv.add_plot_container(tf)
        else:
            tf = TextFragment(200, 200, 'No Candidates found.', color='red',
                              font_size=50)
            cv.add_plot_container(tf)

        tmp = StringIO.StringIO()
        cv.draw(tmp)
        return tmp.getvalue()
Esempio n. 7
0
def plot_main_panel(cv, foreground, background, lodm, hidm, marker_dms,
                    fallback):
    '''
    Add main panel to pulsetrain diagnostic plot.

    Note: for internal use, call the diagnostic.plot() function in stead.
    '''
    # Main panel, detections on the time-DM plane
    pc1 = PlotContainer(0, 150, 830, 600, data_padding=PADDING)
    pc1.right.hide_label()
    pc1.right.hide_tickmarklabels()
    pc1.bottom.hide_label()
    pc1.left.set_label('DM')
    pc1.top.set_label('Time (s)')
    pc1.add(DetectionPlotterTuples(background, color='black'), fallback)
    pc1.add(DetectionPlotterTuples(foreground, color='red'), fallback)
    pc1.set_minimum_y_range(lodm, hidm)

    for m_dm in marker_dms:
        if lodm <= m_dm <= hidm:
            pc1.add(YLimitPlotter(m_dm, color='orange'))

    cv.add(pc1)
                collapsed_v = numpy.max(ar, axis=1)

            dt = (options.e - options.s) / len(collapsed_v)
            edges_t = [options.s + i * dt for i in range(len(collapsed_v) + 1)]

            bins_t = []
            for ii, val in enumerate(collapsed_v):
                bins_t.append((edges_t[ii], edges_t[ii + 1], val))

            # Do the plots:
            PLOT_HEIGHT = 600

            TYPE2TITLE = {'N': 'Count', 'M': 'Max(SNR)', 'S': 'Sum(SNR)'}

            # Main panel, color-coded number of detections on DM-trial-time plane:
            pc_main = PlotContainer(0, -30, 900, PLOT_HEIGHT)
            pc_main.bottom.hide_label()
            pc_main.bottom.hide_tickmarklabels()
            pc_main.top.hide_label()
            pc_main.top.hide_tickmarklabels()
            pc_main.right.hide_tickmarklabels()
            pc_main.right.hide_label()
            pc_main.left.set_label('DM Index')
            pc_main.add_plotter(SinglePulsePlotter(png_str, (options.s, min_dmi,
                                options.e, max_dmi)))
            pc_main.set_minimum_data_bbox((options.s, min_dmi, options.e, max_dmi))
            cv.add_plot_container(pc_main)

            # First right-side panel, histogram of number of detections versus DM:
            pc_right1 = PlotContainer(820, -30, 270, PLOT_HEIGHT)
            pc_right1.add_plotter(HistogramPlotter(bins_dmi, False,
Esempio n. 9
0
from brp.svg.plotters.gradient import RGBGradient, GradientPlotter
from brp.svg.plotters.crosshair import CrossHairPlotter
from brp.svg.plotters.limit import XLimitPlotter, YLimitPlotter
from brp.svg.plotters.legend import LegendPlotter, UNDER_PLOT, BOTTOMLEFT
from brp.core.interval import stretch_interval
from brp.svg.plotters.histogram import HistogramPlotter, bin_data
from brp.svg.plotters.error import ErrorPlotter
from brp.svg.plotters.linkbox import LinkBox

if __name__ == '__main__':
    # Draw a simple scatter + line plot to SVG (dumped to standard out).
    cv = SVGCanvas(1000, 2500)
    c = PlotContainer(100,
                      100,
                      600,
                      400,
                      background_color="white",
                      x_log=True,
                      y_log=True)
    TMP = [10 * x + 10 for x in range(99)]
    TMP2 = [10 * x + 10 for x in range(99)]
    TMP2.reverse()

    gr = RGBGradient((200, 800), (1, 0, 0), (0, 0, 1))
    c.add_plotter(
        LinePlotter(TMP,
                    TMP,
                    gradient=gr,
                    gradient_i=1,
                    symbol=BaseSymbol,
                    linepattern='2 2 8 2'))
Esempio n. 10
0
def plot_count_histogram(cv, dms, foreground, background, lodm, hidm,
                         marker_dms):
    '''
    Add candidates per DM histogram to pulse train diagnostic.

    Note: for internal use, call the diagnostic.plot() function in stead.
    '''
    # Determine the brp style histogram bins:
    fg_bins, bg_bins, total_bins = \
        bin_candidates(dms, foreground, background, lodm, hidm)

    # Plot histogram of number of detections per DM trial
    pc3 = PlotContainer(950, 150, 300, 600, data_padding=PADDING)
    pc3.left.hide_label()
    pc3.left.hide_tickmarklabels()
    pc3.bottom.hide_label()
    pc3.top.set_label('N')
    pc3.add(HistogramPlotter(bg_bins, orientation='vertical', color='black'))
    pc3.add(HistogramPlotter(total_bins, orientation='vertical', color='gray'))
    pc3.add(HistogramPlotter(fg_bins, orientation='vertical', color='red'))
    pc3.right.set_label('DM')
    pc3.set_minimum_y_range(lodm, hidm)

    for m_dm in marker_dms:
        if lodm <= m_dm <= hidm:
            pc3.add(YLimitPlotter(m_dm, color='orange'))

    cv.add(pc3)
Esempio n. 11
0
from brp.svg.plotters.symbol import RasterDebugSymbol
from brp.svg.plotters.line import LinePlotter
from brp.svg.plotters.scatter import ScatterPlotter
from brp.svg.plotters.gradient import RGBGradient, GradientPlotter
from brp.svg.plotters.crosshair import CrossHairPlotter
from brp.svg.plotters.limit import XLimitPlotter, YLimitPlotter
from brp.svg.plotters.legend import LegendPlotter, UNDER_PLOT, BOTTOMLEFT
from brp.core.interval import stretch_interval
from brp.svg.plotters.histogram import HistogramPlotter, bin_data
from brp.svg.plotters.error import ErrorPlotter
from brp.svg.plotters.linkbox import LinkBox

if __name__ == "__main__":
    # Draw a simple scatter + line plot to SVG (dumped to standard out).
    cv = SVGCanvas(1000, 2500)
    c = PlotContainer(100, 100, 600, 400, background_color="white", x_log=True, y_log=True)
    TMP = [10 * x + 10 for x in range(99)]
    TMP2 = [10 * x + 10 for x in range(99)]
    TMP2.reverse()

    gr = RGBGradient((200, 800), (1, 0, 0), (0, 0, 1))
    c.add_plotter(LinePlotter(TMP, TMP, gradient=gr, gradient_i=1, symbol=BaseSymbol, linepattern="2 2 8 2"))
    c.add_plotter(ScatterPlotter(TMP, TMP2, symbol=BaseSymbol, gradient=gr, gradient_i=0))
    c.add_plotter(CrossHairPlotter(500, 500))
    c.add_plotter(CrossHairPlotter(200, 700, color="red"))
    c.add_plotter(XLimitPlotter(300))
    c.add_plotter(YLimitPlotter(300))
    c.add_plotter(CrossHairPlotter(1e6, 1e6))
    c.add_plotter(ScatterPlotter([1000], [1000], symbol=CrossHairSymbol, color="lime"))
    c.add_plotter(LinkBox((100, 100, 10000, 10000), "http://www.slashdot.org"))
Esempio n. 12
0
if __name__ == '__main__':

    cv = SVGCanvas(1200, 1800)

# ------------------------------------------------------
# -- For debugging RADECSymbol raster fallback ---------

    NPULSARS = 100
    P = [random.uniform(0.001, 10) for i in range(NPULSARS)]
    DM = [random.uniform(1, 100) for i in range(NPULSARS)]
    RA = [random.uniform(0, 24) for i in range(NPULSARS)]
    DEC = [random.uniform(-90, 90) for i in range(NPULSARS)]
    SIGMA = [random.uniform(2, 15) for i in range(NPULSARS)]

    # plot
    pc = PlotContainer(0, 0, 600, 400)
    pc.add(ScatterPlotter(P, DM, RA, DEC, SIGMA, symbol=RADECSymbol))
    cv.add(pc)

    pc = PlotContainer(600, 0, 600, 400)
    pc.add(ScatterPlotter(P, DM, RA, DEC, SIGMA, symbols=[RADECSymbol]),
           raster=True)
    cv.add(pc)

# ------------------------------------------------------
# -- For debugging error bar raster fallback -----------

# LINEAR TRANSFORM CASE:

#    c = PlotContainer(0, 400, 600, 400, x_log=True, y_log=True)
    c = PlotContainer(600, 400, 600, 400)
Esempio n. 13
0
    def render(self, context):

        qs = context[self.var_name]
        tmp = StringIO.StringIO()

        cv = SVGCanvas(940, 550, background_color='white')

        P = [c.p_bary for c in qs.all() if c.best_dm > 0]
        DM = [c.best_dm for c in qs.all() if c.best_dm > 0]
        REDCHISQ = [c.reduced_chi_sq for c in qs.all() if c.best_dm > 0]
        LINKS = [
            reverse('bestprof_detail', args=[c.pk]) for c in qs.all()
            if c.best_dm > 0
        ]
        RA = [c.ra_deg for c in qs.all() if c.best_dm > 0]
        DEC = [c.dec_deg for c in qs.all() if c.best_dm > 0]

        if P:
            max_redchisq = max(REDCHISQ)
            min_redchisq = min(REDCHISQ)
            # Main panel showing candidate period-DM scatter plot:
            pc = PlotContainer(0,
                               -20,
                               880,
                               550,
                               color='black',
                               x_log=True,
                               y_log=True,
                               data_background_color='gray')
            pc.bottom.set_label('Period (ms)')
            pc.top.hide_label()
            pc.left.set_label('Dispersion Measure (cm^-3 pc)')
            pc.right.hide_label()
            gr = RGBGradient((min_redchisq, max_redchisq), (0, 0, 1),
                             (1, 0, 0))
            scp = ScatterPlotter(P,
                                 DM,
                                 RA,
                                 DEC,
                                 REDCHISQ,
                                 gradient=gr,
                                 gradient_i=4,
                                 links=LINKS,
                                 symbol=RADECSymbol)
            pc.add_plotter(scp)
            cv.add_plot_container(pc)
            # Gradient:
            pc = PlotContainer(820,
                               -20,
                               120,
                               550,
                               color='black',
                               data_padding=0)
            pc.top.hide_label()
            pc.top.hide_tickmarks()
            pc.left.hide_tickmarks()
            pc.bottom.hide_label()
            pc.bottom.hide_tickmarks()
            pc.left.hide_label()
            pc.right.set_label('Candidate Reduced Chi-Square')
            pc.add_plotter(GradientPlotter(copy.deepcopy(scp.gradient)))
            cv.add_plot_container(pc)
            # write number of candidates shown:
            tf = TextFragment(50,
                              520,
                              '(Showing %d candidates.)' % len(P),
                              color='black',
                              font_size=15)
            cv.add_plot_container(tf)
        else:
            tf = TextFragment(200,
                              200,
                              'No Candidates found.',
                              color='red',
                              font_size=50)
            cv.add_plot_container(tf)

        cv.draw(tmp)
        return tmp.getvalue()
Esempio n. 14
0
import sys
from random import random as r

from brp.svg.base import SVGCanvas, PlotContainer
from brp.svg.plotters import newhist2d
from brp.svg.plotters.gradient import GradientPlotter
from brp.svg.plotters.line import LinePlotter

if __name__ == '__main__':

    x_data = [r() for i in range(1000)]
    y_data = [r() for i in range(1000)]

    cv = SVGCanvas(1200, 800)

    p = PlotContainer(0, 0, 600, 400)
    h = newhist2d.Histogram2dPlotter(x_data, y_data, x_bins=100)
    gr = h.get_gradient()
    collapsed_x, yvalues = h.collapse_x()
    xvalues, collapsed_y = h.collapse_y()
    p.add(h)
    cv.add(p)

    p = PlotContainer(800, 0, 160, 400)
    p.add(GradientPlotter(gr, 'vertical'))
    cv.add(p)

    p = PlotContainer(600, 0, 200, 400)
    p.add(LinePlotter(collapsed_x, yvalues))
    cv.add(p)
Esempio n. 15
0
import sys
#sys.path.append('../')

from brp.svg.base import SVGCanvas, PlotContainer, TextFragment
from brp.svg.plotters.histogram import HistogramPlotter, merge_bins

if __name__ == '__main__':
    bins = [(0, 1, 10), (1, 2, 10), (2, 3, 11), (3, 4, 10), (4, 5, 10),
            (5, 6, 7)]

    cv = SVGCanvas(1200, 1200)

    # Histogram testing:
    c = PlotContainer(0, 0, 600, 400)
    c.add(HistogramPlotter(bins))
    cv.add(c)
    cv.add(TextFragment(100, 100, 'Unmerged bins', color='red'))

    merged = merge_bins(bins)

    c2 = PlotContainer(600, 0, 600, 400)
    c2.add(HistogramPlotter(merged))
    cv.add(c2)
    cv.add(TextFragment(700, 100, 'Merged bins', color='red'))

    cv.draw(sys.stdout)