   _selecting : (e, x_, y_) ->
     [x, y] = @mouse_coords(e, e.bokehX, e.bokehY)
     @mset({'current_x' : x, 'current_y' : y})
-    [@xrange, @yrange] = @_get_selection_range_fast(x, y)
+    [@xrange, @yrange] = @_get_selection_range(x, y)
     @trigger('boxselect', @xrange, @yrange)
     return null
 

        select_callback)
      safebind(this, renderer.get_obj('ydata_range'), 'change',
        select_callback)
  eventGeneratorClass : TwoPointEventGenerator
  evgen_options : {keyName:"ctrlKey", buttonText:"Select"}
  tool_events : {
    UpdatingMouseMove: "box_selecting",
    SetBasepoint : "_start_selecting",
    DragEnd: "_selecting",
    deactivated : "_stop_selecting"}

  mouse_coords : (e, x, y) ->

    for renderer in @mget_obj('renderers')
      datasource_id = renderer.get_obj('data_source').id
      _.setdefault(datasource_selections, datasource_id, [])
      #the select call of the render converts the screen coordinates
      #of @xrange and @yrange into data space coordinates
      selected = @plot_view.renderers[renderer.id].select(@xrange, @yrange)
      datasource_selections[datasource_id].push(selected)

    for own k,v of datasource_selections

      #FIXME: I'm not sure why this is here, when will v have more than one element?
      #
      # This next line is the equivalent of calling
      #_.intersection(v[0], v[1], v[2]...) for however many
      #subelements v has.  each member of the v list will have another
      #list inside it.  thus this line finds the intersection of the
      #lists of v.
      selected = _.intersection.apply(_, v)
      ds = datasources[k]
      ds.set('selected', selected)
      #console.log("datasource_selections", k, v, selected)
      #ds.save()
    return null


