📄 alnvwr.cpp
字号:
pos += screen_width; if (pos + screen_width > aln_len) { screen_width = aln_len - pos; } } while (pos < aln_len);}void CAlnMgrTestApp::View4(int scrn_width){ CAlnMap::TNumrow row, nrows = m_AV->GetNumRows(); vector<string> buffer(nrows); vector<CAlnMap::TSeqPosList> insert_aln_starts(nrows); vector<CAlnMap::TSeqPosList> insert_starts(nrows); vector<CAlnMap::TSeqPosList> insert_lens(nrows); vector<CAlnMap::TSeqPosList> scrn_lefts(nrows); vector<CAlnMap::TSeqPosList> scrn_rights(nrows); // Fill in the vectors for each row for (row = 0; row < nrows; row++) { m_AV->GetWholeAlnSeqString (row, buffer[row], &insert_aln_starts[row], &insert_starts[row], &insert_lens[row], scrn_width, &scrn_lefts[row], &scrn_rights[row]); } // Visualization TSeqPos pos = 0, aln_len = m_AV->GetAlnStop() + 1; do { for (row = 0; row < nrows; row++) { cout << row << "\t" << m_AV->GetSeqId(row).AsFastaString() << "\t" << scrn_lefts[row].front() << "\t" << buffer[row].substr(pos, scrn_width) << "\t" << scrn_rights[row].front() << endl; scrn_lefts[row].pop_front(); scrn_rights[row].pop_front(); } cout << endl; pos += scrn_width; if (pos + scrn_width > aln_len) { scrn_width = aln_len - pos; } } while (pos < aln_len);}// print segmentsvoid CAlnMgrTestApp::View5(){ CAlnMap::TNumrow row; for (row=0; row<m_AV->GetNumRows(); row++) { cout << "Row: " << row << endl; for (int seg=0; seg<m_AV->GetNumSegs(); seg++) { // seg cout << "\t" << seg << ": "; // aln coords cout << m_AV->GetAlnStart(seg) << "-" << m_AV->GetAlnStop(seg) << " "; // type CAlnMap::TSegTypeFlags type = m_AV->GetSegType(row, seg); if (type & CAlnMap::fSeq) { // seq coords cout << m_AV->GetStart(row, seg) << "-" << m_AV->GetStop(row, seg) << " (Seq)"; } else { cout << "(Gap)"; } if (type & CAlnMap::fNotAlignedToSeqOnAnchor) cout << "(NotAlignedToSeqOnAnchor)"; if (CAlnMap::IsTypeInsert(type)) cout << "(Insert)"; if (type & CAlnMap::fUnalignedOnRight) cout << "(UnalignedOnRight)"; if (type & CAlnMap::fUnalignedOnLeft) cout << "(UnalignedOnLeft)"; if (type & CAlnMap::fNoSeqOnRight) cout << "(NoSeqOnRight)"; if (type & CAlnMap::fNoSeqOnLeft) cout << "(NoSeqOnLeft)"; if (type & CAlnMap::fEndOnRight) cout << "(EndOnRight)"; if (type & CAlnMap::fEndOnLeft) cout << "(EndOnLeft)"; cout << NcbiEndl; } } cout << "---------" << endl;}// print chunksvoid CAlnMgrTestApp::View6(){ CArgs args = GetArgs(); CAlnMap::TNumrow row; CAlnMap::TSignedRange range(-1, m_AV->GetAlnStop()+1); for (row=0; row<m_AV->GetNumRows(); row++) { cout << "Row: " << row << endl; //CAlnMap::TSignedRange range(m_AV->GetSeqStart(row) -1, //m_AV->GetSeqStop(row) + 1); CRef<CAlnMap::CAlnChunkVec> chunk_vec = m_AV->GetAlnChunks(row, range, args["cf"].AsInteger()); for (int i=0; i<chunk_vec->size(); i++) { CConstRef<CAlnMap::CAlnChunk> chunk = (*chunk_vec)[i]; cout << "[row" << row << "|" << i << "]"; cout << chunk->GetAlnRange().GetFrom() << "-" << chunk->GetAlnRange().GetTo() << " "; if (!chunk->IsGap()) { cout << chunk->GetRange().GetFrom() << "-" << chunk->GetRange().GetTo(); } else { cout << "(Gap)"; } if (chunk->GetType() & CAlnMap::fSeq) cout << "(Seq)"; if (chunk->GetType() & CAlnMap::fNotAlignedToSeqOnAnchor) cout << "(NotAlignedToSeqOnAnchor)"; if (CAlnMap::IsTypeInsert(chunk->GetType())) cout << "(Insert)"; if (chunk->GetType() & CAlnMap::fUnalignedOnRight) cout << "(UnalignedOnRight)"; if (chunk->GetType() & CAlnMap::fUnalignedOnLeft) cout << "(UnalignedOnLeft)"; if (chunk->GetType() & CAlnMap::fNoSeqOnRight) cout << "(NoSeqOnRight)"; if (chunk->GetType() & CAlnMap::fNoSeqOnLeft) cout << "(NoSeqOnLeft)"; if (chunk->GetType() & CAlnMap::fEndOnRight) cout << "(EndOnRight)"; if (chunk->GetType() & CAlnMap::fEndOnLeft) cout << "(EndOnLeft)"; cout << NcbiEndl; } } cout << "---------" << endl;}// alternative ways to get the sequencevoid CAlnMgrTestApp::View7(){ string buff; CAlnMap::TNumseg seg; CAlnMap::TNumrow row; m_AV->SetGapChar('-'); m_AV->SetEndChar('.'); for (seg=0; seg<m_AV->GetNumSegs(); seg++) { for (row=0; row<m_AV->GetNumRows(); row++) { cout << "row " << row << ", seg " << seg << " "; // if (m_AV->GetSegType(row, seg) & CAlnMap::fSeq) { cout << "[" << m_AV->GetStart(row, seg) << "-" << m_AV->GetStop(row, seg) << "]" << NcbiEndl; for(int i=0; i<m_AV->GetLen(seg); i++) { cout << m_AV->GetResidue(row, m_AV->GetAlnStart(seg)+i); } cout << NcbiEndl; cout << m_AV->GetSeqString(buff, row, m_AV->GetStart(row, seg), m_AV->GetStop(row, seg)) << NcbiEndl; cout << m_AV->GetSegSeqString(buff, row, seg) << NcbiEndl; // } else { // cout << "-" << NcbiEndl; // } cout << NcbiEndl; } }}// Demonstrate obtaining column vector in two alternative ways.// (Use numeric param n to choose alignment position)void CAlnMgrTestApp::View8(int aln_pos){ CAlnMap::TSignedRange rng; rng.Set(aln_pos, aln_pos); // range covers only a single position string buffer; // obtain all individual residues for (CAlnMap::TNumrow row=0; row<m_AV->GetNumRows(); row++) { cout << m_AV->GetAlnSeqString(buffer, row, rng); } cout << NcbiEndl; // get the column at once string column; column.resize(m_AV->GetNumRows()); cout << m_AV->GetColumnVector(column, aln_pos) << NcbiEndl; // %ID cout << m_AV->CalculatePercentIdentity(aln_pos) << NcbiEndl;}void CAlnMgrTestApp::View9(int row0, int row1){ vector<TSignedSeqPos> result; CAlnMap::TRange aln_rng(0, m_AV->GetAlnStop()), rng0, rng1; m_AV->GetResidueIndexMap(row0, row1, aln_rng, result, rng0, rng1); size_t size = result.size(); cout << "(" << rng0.GetFrom() << "-" << rng0.GetTo() << ")" << endl; cout << "(" << rng1.GetFrom() << "-" << rng1.GetTo() << ")" << endl; for (size_t i = 0; i < size; i++) { cout << result[i] << " "; } cout << endl;}//////// GetSeqPosFromAlnPosvoid CAlnMgrTestApp::GetSeqPosFromAlnPosDemo(){ cout << "[" << m_AV->GetSeqPosFromAlnPos(2, 1390, CAlnMap::eForward, false) << "-" << m_AV->GetSeqPosFromAlnPos(2, 1390, (CAlnMap::ESearchDirection)7, false) << "]" << NcbiEndl;}int CAlnMgrTestApp::Run(void){ CArgs args = GetArgs(); if ( args["log"] ) { SetDiagStream( &args["log"].AsOutputFile() ); } LoadDenseg(); cout << "-----" << endl; if (args["a"]) { m_AV->SetAnchor(args["a"].AsInteger()); } int screen_width = args["w"].AsInteger(); int number = args["n"].AsInteger(); int row0 = args["row0"].AsInteger(); int row1 = args["row1"].AsInteger(); m_AV->SetGapChar('-'); m_AV->SetEndChar('.'); if (args["v"]) { switch (args["v"].AsInteger()) { case 1: View1(); break; case 2: View2(screen_width); break; case 3: View3(screen_width); break; case 4: View4(screen_width); break; case 5: View5(); break; case 6: View6(); break; case 7: View7(); break; case 8: View8(number); break; case 9: View9(row0, row1); break; } } return 0;}/////////////////////////////////////////////////////////////////////////////// MAINint main(int argc, const char* argv[]){ // Execute main application function return CAlnMgrTestApp().AppMain(argc, argv, 0, eDS_Default, 0);}/** ===========================================================================** $Log: alnvwr.cpp,v $* Revision 1000.2 2004/06/01 19:40:58 gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.22** Revision 1.22 2004/05/21 21:42:51 gorelenk* Added PCH ncbi_pch.hpp** Revision 1.21 2004/03/03 19:41:59 todorov* +GetResidueIndexMap** Revision 1.20 2004/02/12 22:51:27 todorov* +optinal seq-entry input file to read a local seq** Revision 1.19 2004/02/03 19:52:25 todorov* m_AV declared after m_OM so that its ref to scope is distroyed first** Revision 1.18 2004/01/16 22:11:48 ucko* Explicitly call DumpAsFasta() on Seq-ids intended to appear in FASTA format.** Revision 1.17 2004/01/07 17:37:36 vasilche* Fixed include path to genbank loader.* Moved split_cache application.** Revision 1.16 2003/12/19 19:37:26 todorov* +comments** Revision 1.15 2003/12/18 20:08:53 todorov* Demo GetColumnVector & CalculatePercentIdentity** Revision 1.14 2003/12/11 00:43:47 ucko* Fix typo in previous revision: call Close on the CObjectIStream rather* than the auto_ptr.** Revision 1.13 2003/12/10 23:58:07 todorov* Added CObjectIStream::Close before IStream::seekg** Revision 1.12 2003/12/09 16:13:34 todorov* code cleanup** Revision 1.11 2003/12/08 21:28:04 todorov* Forced Translation of Nucleotide Sequences** Revision 1.10 2003/09/26 15:30:07 todorov* +Print segments** Revision 1.9 2003/07/23 21:01:08 ucko* Revert use of (uncommitted) BLAST DB data loader.** Revision 1.8 2003/07/23 20:52:07 todorov* +width, +aln_starts for the inserts in GetWhole..** Revision 1.7 2003/07/17 22:48:17 todorov* View4 implemented in CAlnVec::GetWholeAlnSeqString** Revision 1.6 2003/07/17 21:06:44 todorov* -v is now required param** Revision 1.5 2003/07/14 20:25:18 todorov* Added another, even faster viewer** Revision 1.4 2003/07/08 19:27:46 todorov* Added an speed-optimized viewer** Revision 1.3 2003/06/04 18:20:40 todorov* read seq-submit** Revision 1.2 2003/06/02 16:06:41 dicuccio* Rearranged src/objects/ subtree. This includes the following shifts:* - src/objects/asn2asn --> arc/app/asn2asn* - src/objects/testmedline --> src/objects/ncbimime/test* - src/objects/objmgr --> src/objmgr* - src/objects/util --> src/objmgr/util* - src/objects/alnmgr --> src/objtools/alnmgr* - src/objects/flat --> src/objtools/flat* - src/objects/validator --> src/objtools/validator* - src/objects/cddalignview --> src/objtools/cddalignview* In addition, libseq now includes six of the objects/seq... libs, and libmmdb* replaces the three libmmdb? libs.** Revision 1.1 2003/04/03 21:17:48 todorov* Adding demo projects*** ===========================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -