docs: def get_string(self):
      """make a string representation of the general error report"""
      ostr = ''
      errtotal = self.deletions['total']+self.insertions['total']+self.mismatches
      ostr += 'from '+str(self.alignment_length)+' bp of alignment'+"\n"
      ostr += '  '+str(float(errtotal)/float(self.alignment_length))+" error rate\n"
      ostr += '    '+str(float(self.mismatches)/float(self.alignment_length))+ " mismatches\n"
      ostr += '    '+str(float(self.deletions['total'])/float(self.alignment_length))+ " deletions\n"
      ostr += '      '+str(float(self.deletions['specific'])/float(self.alignment_length))+ " total deletions\n"
      ostr += '      '+str(float(self.deletions['homopolymer'])/float(self.alignment_length))+ " homopolymer deletions\n"
      ostr += '    '+str(float(self.insertions['total'])/float(self.alignment_length))+ " insertions\n"
      ostr += '      '+str(float(self.insertions['specific'])/float(self.alignment_length))+ " total insertions\n"
      ostr += '      '+str(float(self.insertions['homopolymer'])/float(self.alignment_length))+ " homopolymer insertions\n"
      ostr += '  More specific errors'+"\n"
      poss = ['-','A','C','G','T']
      ostr += '  -    A    C    G    T'+"\n"
      t = 0
      for p1 in poss:
        ostr += p1
        for p2 in poss:
          val = float(self.matrix[p1][p2])/float(self.alignment_length)
          ostr += " "+str(round(val,3))
          t += val
        ostr += "\n"
      ostr += "\n"
      return ostr