def _plot_sample(self):
        if not optimised.a_count:
            return
        (x1, y1, x2, y2) = self.parameters['density_rectangle']
        density_c = 0
        density = 0.0
        density_area = (y2-y1)*(x2-x1)
        velocities = list()
        for i in xrange(optimised.a_count):
            (x,y) = optimised.a_property(i, "position")
            r = optimised.a_property(i, "radius")
            velocities.append(optimised.a_property(i, "velocity"))
            if x+r >= x1 and x-r <= x2 and y+r >= y1 and y-r <= y2:
                density_c += 1

        flowrates = []
        for i in xrange(len(self.parameters["flowrate_lines"])):
            (x1,y1,x2,y2) = self.parameters["flowrate_lines"][i][:4]
            flow_length = math.sqrt((x2-x1)**2+(y2-y1)**2)
            flow_count = optimised.flow_count(i)
            flowrate = flow_count/constants.plot_sample_frequency/flow_length
            flowrates.append(flowrate)

        density = density_c / density_area
        self.plots.add_sample(self.time, 
                density=density,
                velocities=velocities, 
                flowrate=flowrates)
    def _draw(self):
        self._canvas("clear_screen")
        for i in xrange(optimised.a_count):
            (x,y) = optimised.a_property(i, "position")
            r = optimised.a_property(i, "radius")
            t = optimised.a_property(i, "target")
            self._canvas("draw_pedestrian", x,y,r,t)

        self._canvas("draw_text", "t = %.2f" % self.time, not self.create_images)
        for t in self.parameters['targets']:
            self._canvas("draw_target", *t)
        for w in self.parameters['walls']:
            self._canvas("draw_wall", w)
        if self.options.show_simulation:
            self.show_canvas.update()
        if self.create_images:
            self.image_canvas.create_image(self.frames)