def METHOD_NAME(cls, atoms):
    """
    Convert from ase.atoms.Atoms to ovito.data.DataCollection
    """
    data = cls()
    # Set the unit cell and origin (if specified in atoms.info)
    cell = SimulationCell()
    matrix = np.zeros((3,4))
    matrix[:, :3] = atoms.get_cell()
    matrix[:, 3]  = atoms.info.get('cell_origin',
                                   [0., 0., 0.])
    cell.matrix = matrix
    cell.pbc = [bool(p) for p in atoms.get_pbc()]
    data.add(cell)
    # Add ParticleProperty from atomic positions
    num_particles = len(atoms)                                  
    position = ParticleProperty.create(ParticleProperty.Type.Position,
                                       num_particles)
    position.mutable_array[...] = atoms.get_positions()
    data.add(position)
    # Set particle types from chemical symbols
    types = ParticleProperty.create(ParticleProperty.Type.ParticleType,
                                    num_particles)
    symbols = atoms.get_chemical_symbols()
    type_list = list(set(symbols))
    for i, sym in enumerate(type_list):
        types.type_list.append(ParticleType(id=i+1, name=sym))
    types.mutable_array[:] = [ type_list.index(sym)+1 for sym in symbols ]
    data.add(types)
    # Add other properties from atoms.arrays
    for name, array in atoms.arrays.iteritems():
        if name in ['positions', 'numbers']:
            continue
        if array.dtype.kind == 'i':
            typ = 'int'
        elif array.dtype.kind == 'f':
            typ = 'float'
        else:
            continue
        num_particles = array.shape[0]
        num_components = 1
        if len(array.shape) == 2:
            num_components = array.shape[1]
        prop = ParticleProperty.create_user(name,
                                            typ,
                                            num_particles,
                                            num_components)
        prop.mutable_array[...] = array
        data.add(prop)
    return data