blast_format.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_format.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:41:00  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: blast_format.cpp,v 1000.3 2004/06/01 19:41:00 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's offical duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================*/
  33. /*****************************************************************************
  34. File name: blast_format.cpp
  35. Author: Ilya Dondoshansky
  36. Contents: Formatting of BLAST results (SeqAlign)
  37. Detailed Contents: 
  38. ******************************************************************************
  39.  * $Revision: 1000.3 $
  40.  * */
  41. static char const rcsid[] = "$Id: blast_format.cpp,v 1000.3 2004/06/01 19:41:00 gouriano Exp $";
  42. #include <ncbi_pch.hpp>
  43. #include <objmgr/object_manager.hpp>
  44. #include <objects/seqloc/Seq_interval.hpp>
  45. #include <objmgr/util/sequence.hpp>
  46. #include <objtools/alnmgr/util/blast_format.hpp>
  47. BEGIN_NCBI_SCOPE
  48. BEGIN_SCOPE(blast)
  49. USING_SCOPE(objects);
  50. CBlastFormatOptions::CBlastFormatOptions(EProgram program, 
  51.     CNcbiOstream &ostr) THROWS((CBlastException))
  52.         : m_ostr(&ostr)
  53. {
  54.    m_believe_query = FALSE;
  55.    m_descriptions = BLAST_NUM_DESCRIPTIONS;
  56.    m_alignments = BLAST_NUM_ALIGNMENTS;
  57.    
  58.    m_print_options = 0;
  59.    m_align_options = 0;
  60.    m_align_options += ALIGN_COMPRESS;
  61.    m_align_options += ALIGN_END_NUM;
  62.    m_align_options += ALIGN_SHOW_GI;
  63.    m_print_options += ALIGN_SHOW_GI;
  64.    
  65.    m_align_options += ALIGN_MATRIX_VAL;
  66.    m_align_options += ALIGN_SHOW_QS;
  67.    if (program == eBlastx)
  68.       m_align_options += ALIGN_BLASTX_SPECIAL;
  69.    
  70.    m_align_view = BLAST_ALIGN_VIEW;
  71. }
  72. CBlastFormatOptions::~CBlastFormatOptions()
  73. {
  74. }
  75. static void 
  76. SetDisplayParameters(CDisplaySeqalign &display, 
  77.     const CBlastFormatOptions* format_options, EProgram program)
  78. {
  79.     bool db_is_na = (program == eBlastn ||
  80.                      program == eTblastn ||
  81.                      program == eTblastx);
  82.     bool query_is_na = (program == eBlastn ||
  83.                         program == eBlastx ||
  84.                         program == eTblastx);
  85.     display.SetDbType(db_is_na);
  86.     display.SetQueryType(query_is_na);
  87.     
  88.     int AlignOption=0;
  89.     int align_view = format_options->GetAlignView();
  90.     if (align_view == 1 ){
  91.         AlignOption += CDisplaySeqalign::eMultiAlign;
  92.         AlignOption += CDisplaySeqalign::eMasterAnchored;
  93.         AlignOption += CDisplaySeqalign::eShowIdentity;
  94.     } else if (align_view == 2){
  95.         AlignOption += CDisplaySeqalign::eMultiAlign;
  96.         AlignOption += CDisplaySeqalign::eMasterAnchored;
  97.     } else if (align_view == 3 ) {
  98.         AlignOption += CDisplaySeqalign::eMultiAlign;
  99.         AlignOption += CDisplaySeqalign::eShowIdentity;
  100.     } else if (align_view ==  4) {
  101.         AlignOption += CDisplaySeqalign::eMultiAlign;
  102.     }
  103.     
  104.     AlignOption += CDisplaySeqalign::eShowMiddleLine;
  105.     if(program == eBlastn){
  106.       display.SetMiddleLineStyle (CDisplaySeqalign::eBar); 
  107.       display.SetAlignType(CDisplaySeqalign::eNuc);
  108.     } else {
  109.         display.SetMiddleLineStyle (CDisplaySeqalign::eChar);
  110.         display.SetAlignType(CDisplaySeqalign::eProt);
  111.     }
  112.     AlignOption += CDisplaySeqalign::eShowBlastInfo;
  113.     AlignOption += CDisplaySeqalign::eShowBlastStyleId;
  114.     if(format_options->GetHtml()){
  115.         AlignOption += CDisplaySeqalign::eHtml;
  116.     }
  117.     display.SetAlignOption(AlignOption);
  118. }
  119. int
  120. BLAST_FormatResults(TSeqAlignVector &seqalignv, 
  121.     EProgram program, const TSeqLocVector &query,
  122.     TSeqLocInfoVector &maskv, const CBlastFormatOptions* format_options, 
  123.     bool is_ooframe)
  124. {
  125.     unsigned int index;
  126.     
  127.     list <CDisplaySeqalign::FeatureInfo*> featureInfo;
  128.     
  129.     for (index = 0; index < seqalignv.size(); ++index) {
  130.         if (!seqalignv[index]->IsSet())
  131.             continue;
  132.         
  133.         query[index].scope->AddDataLoader("BLASTDB");
  134.         CDisplaySeqalign display(*seqalignv[index], maskv[index], 
  135.                                  featureInfo, 0, *query[index].scope);
  136.         SetDisplayParameters(display, format_options, program);
  137.         display.DisplaySeqalign(*format_options->GetOstream());
  138.     }
  139.     return 0;
  140. }
  141. END_SCOPE(blast)
  142. END_NCBI_SCOPE