def lscan(writables, readables, start, end, steps, latency=0.0, relative=False, passes=1, zigzag=False, before_read=None, after_read=None, title=None):
    """Line Scan: positioners change together, linearly from start to end positions.

    Args:
        writables(list of Writable): Positioners set on each step.
        readables(list of Readable): Sensors to be sampled on each step.
        start(list of float): start positions of writables.
        end(list of float): final positions of writables.
        steps(int or float or list of float): number of scan steps (int) or step size (float).
        relative (bool, optional): if true, start and end positions are relative to 
            current at start of the scan
        latency(float, optional): settling time for each step before readout, defaults to 0.0.
        passes(int, optional): number of passes
        zigzag(bool, optional): if true writables invert direction on each pass.
        before_read (function, optional): callback on each step, before each readout. Callback may have as 
            optional parameters list of positions.
        after_read (function, optional): callback on each step, after each readout. Callback may have as 
            optional parameters a ScanRecord object. 
        title(str, optional): plotting window name.

    Returns:
        ScanResult object.

    """    
    latency_ms=int(latency*1000)
    writables=to_list(string_to_obj(writables))
    readables=to_list(string_to_obj(readables))
    start=to_list(start)
    end=to_list(end)    
    if type(steps) is float or is_list(steps):
        steps = to_list(steps)
    scan = LineScan(writables,readables, start, end , steps, relative, latency_ms, passes, zigzag)
    scan.before_read=before_read
    scan.after_read=after_read
    scan.setPlotTitle(title)
    scan.start()
    ret = scan.getResult()     
    return ret
    

a= lscan(inp, (sin,out), 0, 4, 10, 0.1)

x = a.getPositions(0)
y= a.getReadable(0)



plt = plot(None,name="data")[0]
plt.addSeries(LinePlotSeries("1"))
plt.addSeries(LinePlotSeries("2"))
plt.getSeries(0).setData(x,y)
plt.getSeries(1).setData(list(x), list(y))
plt.getSeries(2).setData(to_array(x,'d'), to_array(y,'d'))


