void DNASequenceGenerator::evaluateBaseContent(const MultipleSequenceAlignment& ma, QMap<char, qreal>& result) { QList< QMap<char, qreal> > rowsContents; foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) { QMap<char, qreal> rowContent; evaluate(row->getData(), rowContent); rowsContents.append(rowContent); } QListIterator< QMap<char, qreal> > listIter(rowsContents); while (listIter.hasNext()) { const QMap<char, qreal>& cm = listIter.next(); QMapIterator<char, qreal> mapIter(cm); while (mapIter.hasNext()) { mapIter.next(); char ch = mapIter.key(); qreal freq = mapIter.value(); if (!result.keys().contains(ch)) { result.insertMulti(ch, freq); } else { result[ch] += freq; } } } int rowsNum = ma->getNumRows(); QMutableMapIterator<char, qreal> i(result); while (i.hasNext()) { i.next(); i.value() /= rowsNum; } }
void convertMAlignment2SecVect(SeqVect& sv, const MultipleSequenceAlignment& ma, bool fixAlpha) { sv.Clear(); MuscleContext *ctx = getMuscleContext(); ctx->fillUidsVectors(ma->getNumRows()); unsigned i=0; unsigned seq_count = 0; foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) { Seq *ptrSeq = new Seq(); QByteArray name = row->getName().toLocal8Bit(); ptrSeq->FromString(row->getCore().constData(), name.constData()); //stripping gaps, original Seq::StripGaps fails on MSVC9 Seq::iterator newEnd = std::remove(ptrSeq->begin(), ptrSeq->end(), U2Msa::GAP_CHAR); ptrSeq->erase(newEnd, ptrSeq->end()); if (ptrSeq->Length()!=0) { ctx->tmp_uIds[seq_count] = ctx->input_uIds[i]; sv.push_back(ptrSeq); seq_count++; } i++; } if (fixAlpha) { sv.FixAlpha(); } }