const ReadInfo ReadInfoTable::getReadInfo(size_t idx) const { ReadInfo ri(getReadID(idx), getReadLength(idx)); return ri; }
// pull out the bases that aren't clipped out void AlignedRead::getUnclippedBases() { int readLen = getReadLength(); readBases = new byte[readLen]; readBasesLen = readLen; baseQuals = new byte[readLen]; baseQualsLen = readLen; const char *actualReadBases = read->AlignedBases.c_str();//read.getReadBases(); const char *actualBaseQuals = read->Qualities.c_str();//read.getBaseQualities(); int fromIndex = 0, toIndex = 0; int qualD = 0; //cout << CigarToString(read->CigarData) << endl; for(Cigar::iterator itr = read->CigarData.begin(); itr != read->CigarData.end(); itr++) { CigarOp ce = *itr; int elementLength = ce.Length; //ce.getLength(); switch(ce.Type) { case 'D': fromIndex += elementLength; qualD += elementLength; break; case 'S': qualD -= elementLength; break; case 'M': case 'I': //System.arraycopy(actualReadBases, fromIndex, readBases, toIndex, elementLength); for(int i = 0; i < elementLength; i++) { readBases[toIndex + i] = actualReadBases[fromIndex + i]; } //System.arraycopy(actualBaseQuals, fromIndex, baseQuals, toIndex, elementLength); for(int i = 0; i < elementLength; i++) { baseQuals[toIndex + i] = actualBaseQuals[fromIndex + i - qualD] - 33; //CONVERT FROM FASTQ TO PHRED } fromIndex += elementLength; toIndex += elementLength; break; default: break; } } // cout << "###\t" << toIndex << endl; // if we got clipped, trim the array if(fromIndex != toIndex) { char *trimmedRB = new char[toIndex]; char *trimmedBQ = new char[toIndex]; //System.arraycopy(readBases, 0, trimmedRB, 0, toIndex); for(int i = 0; i < toIndex; i++) { trimmedRB[i] = readBases[i]; } //System.arraycopy(baseQuals, 0, trimmedBQ, 0, toIndex); for(int i = 0; i < toIndex; i++) { trimmedBQ[i] = baseQuals[i]; } delete[] readBases; delete[] baseQuals; readBases = trimmedRB; readBasesLen = toIndex; baseQuals = trimmedBQ; baseQualsLen = toIndex; } readBasesLen = toIndex; }