const ReadInfo ReadInfoTable::getReadInfo(size_t idx) const
{
    ReadInfo ri(getReadID(idx), getReadLength(idx));
    return ri;
}
Example #2
0
// 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;
}