If ignore_bad_chains is True then any chains containing all Xs as the sequence will be silently skipped.
           The default behavior is to raise a MalformedSequenceException in this case.

def align(self, alignment_tool = 'clustalw', gap_opening_penalty = 0.2, ignore_bad_chains = False):
        '''If ignore_bad_chains is True then any chains containing all Xs as the sequence will be silently skipped.
           The default behavior is to raise a MalformedSequenceException in this case.'''
        if len(self.pdb_chains) > 1:
            sa = SequenceAligner(alignment_tool = alignment_tool, gap_opening_penalty = gap_opening_penalty)
            for pdb_chain in self.pdb_chains:
                sa.add_sequence('%s_%s' % (pdb_chain['pdb_id'], pdb_chain['chain_id']), pdb_chain['sequence'], ignore_bad_chains = ignore_bad_chains)
            best_matches = sa.align()
            return sa.alignment_output, best_matches
        else:
            raise Exception('Cannot align sequences - less than two chains were specified.')