Get the realtive quality score (i.e. the phred quality score) for a given
    base.

    :raise: NGSReadError if the index is less than 0 or more than l-1 where l
            is the length of the read; NGSReadError if the encoded quality
            score at the given location is outside the expected range;
            NGSReadError if the read has no quality string; NGSReadError if
            sepficied encoding scheme is unknown.

def getRelativeQualityScore(self, i, score_type="ILLUMINA_PHRED_PLUS_33"):
    """
    Get the realtive quality score (i.e. the phred quality score) for a given
    base.

    :raise: NGSReadError if the index is less than 0 or more than l-1 where l
            is the length of the read; NGSReadError if the encoded quality
            score at the given location is outside the expected range;
            NGSReadError if the read has no quality string; NGSReadError if
            sepficied encoding scheme is unknown.
    """
    # error out if no quality string, or index is out of range
    if self.seq_qual is None:
      raise NGSReadError("Error finding realtive quality for base call at " +
                         "location " + str(i) + " in read " + self.name +
                         "; read has no quality string")
    if i < 0 or i > self.seq_qual:
      raise NGSReadError("Error finding relative quality for base call at " +
                         "location " + str(i) + " in read " + self.name +
                         "; outside of range for read with quality score " +
                         "string of length " + str(len(self.seq_qual)))

    val = self.seq_qual[i]
    if score_type == "ILLUMINA_PHRED_PLUS_33":
      return ord(val) - self.LOWSET_SCORE_ILL_18_PHRD_33
    elif score_type == "ILLUMINA_PHRED_PLUS_64":
      return ord(val) - self.LOWSET_SCORE
    else:
      raise NGSReadError("Unknown score type: " + score_type)