# How to construct a claterate structure without using enums

I have read ICET – A Python Library for Constructing and Sampling Alloy Cluster Expansions,in the '‘6.2. Chemical Ordering in an Inorganic Clathrate’'it said “The unit cell contains 46 framework sites, which prevents an enumeration approach for structure generation. Instead, 240 occupations of the primitive unit cell for x = (13 … 16) were produced by randomly distributing Al and Si atoms over the host lattice.”,hou should i do this ?Anyone can help me ?

What more precisely are you struggling with?

If you have the structure as an ASE atoms object, you can manipulate the concentration and occupations by changing `atoms.symbols`.

I don’t know how to do ? Becase my structure is complex and i am a new to ase,so can you give me some example about this

Here is a quick example for NaCl where Cl atoms are randomly substituted with I atoms to achieve a given concentration. I think something similar could be adopted for your case.

``````import numpy as np
from ase.build import bulk
from ase.visualize import view

# build ideal NaCl supercell
prim = bulk('NaCl', 'rocksalt', a=5.5, cubic=True)
atoms = prim.repeat(3)
print('number of atoms', len(atoms))
view(atoms)

# Randomly occupy Cl-sublattice with Cl and I at some concentration
active_indices = atoms.symbols.indices()['Cl']
print('number of atoms on Cl sublattice', len(active_indices))

c_Cl = 0.75
n_Cl = round(len(atoms) / 2 * c_Cl)
n_I = len(active_indices) - n_Cl
print('number of Cl atoms', n_Cl)
print('number of I atoms', n_I)

random_occupations = ['Cl'] * n_Cl + ['I'] * n_I
np.random.shuffle(random_occupations)
print('random occupations of Cl sublattice', random_occupations)

atoms.symbols[active_indices] = random_occupations
view(atoms)
``````

And possibly the `occupy_structure_randomly` function in `icet` could be useful.