// called prior to using the allele in analysis void Allele::update(void) { quality = currentQuality(); lnquality = phred2ln(quality); if (type == ALLELE_REFERENCE) { currentBase = string(1, *currentReferenceBase); basesLeft = bpLeft + referenceOffset(); basesRight = bpRight - referenceOffset(); } else { currentBase = base(); } }
// combines the two alleles into a complex variant, updates important data void Allele::mergeAllele(const Allele& newAllele, AlleleType newType) { //cerr << stringForAllele(*this) << endl << stringForAllele(newAllele) << endl; type = newType; alternateSequence += newAllele.alternateSequence; length += newAllele.length; // hmmm basesRight = newAllele.basesRight; baseQualities.insert(baseQualities.end(), newAllele.baseQualities.begin(), newAllele.baseQualities.end()); currentBase = base(); quality = averageQuality(baseQualities); lnquality = phred2ln(quality); basesRight += newAllele.referenceLength; if (newAllele.type != ALLELE_REFERENCE) { repeatRightBoundary = newAllele.repeatRightBoundary; } cigar = mergeCigar(cigar, newAllele.cigar); referenceLength = referenceLengthFromCigar(); }
// quality of subsequence of allele const long double Allele::lnsubquality(int startpos, int len) const { return phred2ln(subquality(startpos, len)); }
const long double Allele::lncurrentQuality(void) const { return phred2ln(currentQuality()); }
const long double Allele::lnsubquality(const Allele& a) const { return phred2ln(subquality(a)); }
void Allele::setQuality(void) { quality = currentQuality(); lnquality = phred2ln(quality); }