Apply the gblocks filtering algorithm to the alignment.
        See http://molevol.cmima.csic.es/castresana/Gblocks/Gblocks_documentation.html
        Need to rename all sequences, because it will complain with long names.

def gblocks(self,
                new_path = None,
                seq_type = 'nucl' or 'prot'):
        """Apply the gblocks filtering algorithm to the alignment.
        See http://molevol.cmima.csic.es/castresana/Gblocks/Gblocks_documentation.html
        Need to rename all sequences, because it will complain with long names."""
        # Temporary path #
        if new_path is None: final = self.__class__(new_temp_path())
        else:                final = self.__class__(new_path)
        # Mapping every sequence name with a random name #
        orig_name_to_temp = {seq.description: 'name' + str(i) for i,seq in enumerate(self)}
        temp_name_to_orig = {v: k for k, v in orig_name_to_temp.items()}
        # Rename every sequence with a random name #
        temp_fasta = self.rename_sequences(orig_name_to_temp)
        # Options #
        if seq_type == 'nucl': t_option = "-t=d"
        if seq_type == 'prot': t_option = "-t=p"
        # Run it #
        result = sh.gblocks91(temp_fasta.path, t_option, '-p=n', "-b4=3", "-b3=20", "-b5=a", _ok_code=[0,1])
        created_file = temp_fasta.path + '-gb'
        assert os.path.exists(created_file)
        # Check errors #
        if "Execution terminated" in result.stdout: raise Exception("gblocks crashed again.")
        # Back #
        temp_fasta.rename_sequences(temp_name_to_orig, final)
        # Return #
        return final