code: def backbone(self):
          
          try:
              backbone = OrderedDict([('N', self.atoms['N']),
                                      ('CA', self.atoms['CA']),
                                      ('C', self.atoms['C']),
                                      ('O', self.atoms['O'])])
          except KeyError:
              missing_atoms = filter(lambda x: x not in self.atoms.keys(),
                                     ('N', 'CA', 'C', 'O')
                                     )
              raise KeyError('Error in residue {} {} {}, missing ({}) atoms. '
                             '`atoms` must be an `OrderedDict` with coordinates '
                             'defined for the backbone (N, CA, C, O) atoms.'
                             .format(self.ampal_parent.id, self.mol_code,
                                     self.id, ', '.join(missing_atoms)))
          bb_monomer = Residue(backbone, self.mol_code, monomer_id=self.id,
                               insertion_code=self.insertion_code,
                               is_hetero=self.is_hetero)
          return bb_monomer
docs: Returns a new `Residue` containing only the backbone atoms.
  
          Returns
          -------
          bb_monomer : Residue
              `Residue` containing only the backbone atoms of the original
              `Monomer`.
  
          Raises
          ------
          IndexError
              Raise if the `atoms` dict does not contain the backbone
              atoms (N, CA, C, O).