def make_mega_cell(atoms, traAN, traBN, traCN, vectors, alt_multi=False):
    """
    Make a bigger supercell out of an input cell.

    The cell is multiplied positively and negatively through each lattice
    vector so that the supercluster ends up being
    (1+2*traAN)*(1+2*traBN)*(1+2*traCN) times larger. For example if the
    input is 1,1,1 for a cubic unit cell, the output will be the original unit
    cell surrounded by 26 other unit cells forming a total 3x3x3 cube.

    Alternatively, the multiplication can be centered around a corner of the
    unit cell instead of the centre. In that case the supercluster ends up being
    only (2*traAN)*(2*traBN)*(2*traCN)

    Parameters
    ----------
    atoms : list of Atom objects
        Atoms in the cell
    traAN,traBN,traCN : ints
        Number of times the cell should be multiplied in each cell direction,
        positively and negatively
    vectors : 3x3 matrix
        Lattice vectors
    alt_multi : bool
        Determines the kind of multiplication. True is centre of the cell as
        the origin, False is corner of the cell.
    Returns
    -------
    mega_cell : list of Atom objects
        The resulting supercell

    """
    mega_cell = []
    if alt_multi:
        traA = range(-traAN, traAN)
        traB = range(-traBN, traBN)
        traC = range(-traCN, traCN)
    else:
        traA = range(-traAN, traAN + 1)
        traB = range(-traBN, traBN + 1)
        traC = range(-traCN, traCN + 1)
    for i in traA:
        for j in traB:
            for k in traC:
                traX = vectors[0][0] * i + vectors[1][0] * j + vectors[2][0
                    ] * k
                traY = vectors[0][1] * i + vectors[1][1] * j + vectors[2][1
                    ] * k
                traZ = vectors[0][2] * i + vectors[1][2] * j + vectors[2][2
                    ] * k
                for atom in atoms:
                    mega_cell.append(atom.translated(traX, traY, traZ))
    return mega_cell
