void DNASequenceGeneratorTask::addSequencesToMsaDoc( Document *source ) { const QSet<QString> &supportedFormats = source->getDocumentFormat( )->getSupportedObjectTypes( ); SAFE_POINT( supportedFormats.contains( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT ), "Invalid document format", ); SAFE_POINT( NULL != generateTask, "Invalid generate task", ); const U2DbiRef dbiRef = generateTask->getDbiRef( ); const DNAAlphabet *alp = cfg.alphabet; SAFE_POINT( NULL != alp, "Generated sequence has invalid alphabet", ); const QString baseSeqName = cfg.getSequenceName( ); const QList<U2Sequence> seqs = generateTask->getResults( ); MultipleSequenceAlignment msa(tr( "Generated MSA" ), alp); DbiConnection con( dbiRef, stateInfo ); for ( int sequenceNum = 0, totalSeqCount = seqs.size( ); sequenceNum < totalSeqCount; ++sequenceNum ) { const QString seqName = ( 1 < totalSeqCount ) ? ( baseSeqName + " " + QString::number( sequenceNum + 1 ) ) : baseSeqName; // TODO: large sequences will cause out of memory error here const QByteArray seqContent = con.dbi->getSequenceDbi( )->getSequenceData( seqs[sequenceNum].id, U2_REGION_MAX, stateInfo ); msa->addRow( seqName, seqContent, sequenceNum); } MultipleSequenceAlignmentObject *alnObject = MultipleSequenceAlignmentImporter::createAlignment( source->getDbiRef( ), msa, stateInfo ); CHECK_OP( stateInfo, ); source->addObject( alnObject ); }
int main(int argc, char* argv[]) { MSA msa(argc, argv); return 0; }