def __init__(self, ts=[], ids=[], index_cycles=[], slices=None,
                 time_bounds=[], select_ids={}, container_label=None,
                 experiment_label=None):
        # ts is a Coordinates instance
        self.container_label = container_label
        self.experiment_label = experiment_label
        if isinstance(ts, Coordinates):
            self._timeseries = ts
        # ts is a numpy array (structured if possible)
        elif isinstance(ts, np.ndarray):
            # convert structured arrays to 2d ndarrays
            if ts.dtype.names is not None:
                _arr = ts.view((float, len(ts.dtype.names)))
                _x_name, _y_name = ts.dtype.names[:2]  # take only first 2 cols
            else:
                _arr = ts
                _x_name, _y_name = 'x', 'y'
            _x = _arr[:, 0]
            _y = _arr[:, 1]
            self._timeseries = Coordinates(_x, _y,
                                           x_name=_x_name, y_name=_y_name)
        # ... list of couples
        elif isinstance(ts, collections.Iterable):
            _ts = list(ts)
            _x, _y = map(np.array, zip(*_ts))
            self._timeseries = Coordinates(_x, _y)
        self.time_bounds = time_bounds
        self.slices = []
        if index_cycles:  # array indices corresponding to (first, last) frame for each cell
            self.index_cycles = index_cycles
            slices = []
            for item in index_cycles:
                if item is None:
                    slices.append(None)
                    # indices are reported as a single None
                    # when no data is reported for a given cell
                else:
                    i, j = item
                    if j is not None:
                        slices.append(slice(i, j+1))
                    else:
                        slices.append(slice(i, None))
            self.slices = slices
        elif slices is not None:
            self.slices = slices
            index_cycles = []
            for item in slices:
                if item is None:
                    index_cycles.append(None)
                else:
                    if item.stop is not None:
                        index_cycles.append((item.start, item.stop - 1))
                    else:
                        index_cycles.append((item.start, None))
            self.index_cycles = index_cycles
        self.ids = ids
        if len(select_ids.keys()) > 0:  # master is already defined
            self.selections = select_ids
        else:  # nothing is defined, we define master here
            self.selections = {'master': [True for _ in self.ids]}
        return