# Simple indexing#

There are many ways to view the atoms in the molecule. One is to use the index, e.g.

```>>> atom = mol[0]
>>> print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
```

or

```>>> atom = mol.atom(0)
>>> print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
```

would access the first atom in the molecule. The `num_atoms()` function returns the total number of atoms.

```>>> print(mol.num_atoms())
74
```

You can loop over all of the atoms via the atoms() function e.g.

```>>> for atom in mol.atoms():
...     print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
Atom( C:2     [   0.00,   -0.00,    0.00] )
Atom( C:3     [   0.66,   -0.52,    1.29] )
Atom( C:4     [   1.42,    2.06,   -0.00] )
Atom( C:5     [   2.16,    1.44,    1.17] )
Atom( C:6     [   2.81,    2.24,    1.98] )
etc.
```

You can also loop over a slice of atoms, e.g.

```>>> for atom in mol[0:5]:
...     print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
Atom( C:2     [   0.00,   -0.00,    0.00] )
Atom( C:3     [   0.66,   -0.52,    1.29] )
Atom( C:4     [   1.42,    2.06,   -0.00] )
Atom( C:5     [   2.16,    1.44,    1.17] )
```

or

```>>> for atom in mol.atoms(range(0, 5)):
...     print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
Atom( C:2     [   0.00,   -0.00,    0.00] )
Atom( C:3     [   0.66,   -0.52,    1.29] )
Atom( C:4     [   1.42,    2.06,   -0.00] )
Atom( C:5     [   2.16,    1.44,    1.17] )
```

or

```>>> for atom in mol.atoms([0, 2, 5, 8]):
...     print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
Atom( C:3     [   0.66,   -0.52,    1.29] )
Atom( C:6     [   2.81,    2.24,    1.98] )
Atom( C:9     [   4.65,   -0.26,    4.19] )
```

Molecules can be divided into residues, chains and segments. A residue is a collection of atoms, a chain is a collection of residues, and a segment is an arbitrary, but often-larger collection of atoms within a molecule.

You can access residues, chains and segments in similar ways to accessing atoms, e.g.

```>>> res = mol.residue(0)
>>> print(res)
Residue( MOL:1   num_atoms=74 )
```
```>>> for res in mol.residues():
...     print(res)
Residue( MOL:1   num_atoms=74 )
```

You access atoms in a residue, chain or segment in a similar way, e.g.

```>>> res = mol.residue(0)
>>> atom = res.atom(0)
>>> print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
```
```>>> for atom in res.atoms([0, 2, 4]):
...     print(atom)
Atom( C:1     [  -0.02,    1.53,    0.01] )
Atom( C:3     [   0.66,   -0.52,    1.29] )
Atom( C:5     [   2.16,    1.44,    1.17] )
```