Generates a PDB string for the Assembly.

        Parameters
        ----------
        ligands : bool, optional
            If `True`, will include ligands in the output.
        alt_states : bool, optional
            If `True`, will include alternate conformations in the output.
        pseudo_group : bool, optional
            If `True`, will include pseudo atoms in the output.
        header : bool, optional
            If `True` will write a header for output.
        footer : bool, optional
            If `True` will write a footer for output.

        Returns
        -------
        pdb_str : str
            String of the pdb for the Assembly. Generated by collating
            Polymer().pdb calls for the component Polymers.

def make_pdb(self, ligands=True, alt_states=False, pseudo_group=False, header=True, footer=True):
        """Generates a PDB string for the Assembly.

        Parameters
        ----------
        ligands : bool, optional
            If `True`, will include ligands in the output.
        alt_states : bool, optional
            If `True`, will include alternate conformations in the output.
        pseudo_group : bool, optional
            If `True`, will include pseudo atoms in the output.
        header : bool, optional
            If `True` will write a header for output.
        footer : bool, optional
            If `True` will write a footer for output.

        Returns
        -------
        pdb_str : str
            String of the pdb for the Assembly. Generated by collating
            Polymer().pdb calls for the component Polymers.
        """
        base_filters = dict(ligands=ligands, pseudo_group=pseudo_group)
        restricted_mol_types = [x[0] for x in base_filters.items() if not x[1]]
        in_groups = [x for x in self.filter_mol_types(restricted_mol_types)]

        pdb_header = 'HEADER {:<80}\n'.format(
            'ISAMBARD Model {}'.format(self.id)) if header else ''
        pdb_body = ''.join([x.make_pdb(
            alt_states=alt_states, inc_ligands=ligands) + '{:<80}\n'.format('TER') for x in in_groups])
        pdb_footer = '{:<80}\n'.format('END') if footer else ''
        pdb_str = ''.join([pdb_header, pdb_body, pdb_footer])
        return pdb_str