def _get2DList(line_list, start_line, number_of_lines, 
               startCol=None, endCol=None, stride=None):
    """returns a 2D list of data read between ``start_line`` and
    ``start_line + number_of_lines`` of a list

    Parameters
    ----------
    line_list : list
        list of lines read from a file using ``_readLinesFromFile()``
    start_line : integer
        index of line_list
    number_of_lines : integer
        number of lines to read (number of lines which contain the 2D data)
    startCol : integer, optional 
        the column number to start reading in each row (similar to list 
        slicing pattern). Default is `None`
    endCol : integer, optional
        the end column number upto which (but excluding `endCol`) to read
        in each row (similar to list slicing pattern). Default is `None`
    stride : integer, optional  
        stride along each column (similar to list slicing pattern). 
        Default is `None`

    Returns
    -------
    data : list
        data is a 2-d list of float type data read from the lines in
        line_list
    """
    data = []
    end_line = start_line + number_of_lines - 1
    for lineNum, row in enumerate(line_list):
        if start_line <= lineNum <= end_line:
            data.append([float(i) for i in row.split()][startCol:endCol:stride])
    return data