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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: alngraphic.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:48:14  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALNGRAPHIC_HPP
  10. #define ALNGRAPHIC_HPP
  11. /*  $Id: alngraphic.hpp,v 1000.0 2004/06/01 19:48:14 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Jian Ye
  37.  *
  38.  * File Description:
  39.  *   Alignment graphic overview (using HTML table) 
  40.  *
  41.  */
  42. #include <html/html.hpp>
  43. #include <corelib/ncbiobj.hpp>
  44. #include <objects/seqalign/Seq_align_set.hpp>
  45. #include <objmgr/scope.hpp>
  46. #include <util/range.hpp>
  47. BEGIN_NCBI_SCOPE 
  48. BEGIN_SCOPE(objects)
  49. class NCBI_XALNTOOL_EXPORT CAlnGraphic{
  50. public:
  51.     //view options
  52.     enum ViewOption {
  53.         eCompactView = (1 << 0),    //put as many seq as possible on one line
  54.                                     //default sequence with same id on one line
  55.         eMouseOverInfo = (1 << 1),  //show info when mouse over alignment graph
  56.         eAnchorLink = (1 << 2)      //quick link in blast resutl html page
  57.     };
  58.     //graph bar height
  59.     enum BarPixel {       
  60.         e_Height3 = 3,          
  61.         e_Height4 = 4,    //default 
  62.         e_Height5 = 5,           
  63.         e_Height6 = 6,           
  64.         e_Height7 = 7
  65.     };
  66.     
  67.     // Constructors
  68.     CAlnGraphic(const CSeq_align_set& seqalign, CScope& scope);
  69.     // Destructor
  70.     ~CAlnGraphic();
  71.     //view in ViewOption. default eCompactView
  72.     void SetViewOption(int option) { 
  73.         m_View = option;
  74.     }
  75.     void SetImagePath(string path) { //i.e. "mypath/". defaul "./"
  76.         m_ImagePath = path;
  77.     }  
  78.     void SetGraphBarHeight(BarPixel height) { 
  79.         m_BarHeight = height;
  80.     }
  81.     //form name that include the text input area to show 
  82.     //info, i.e. "document.forms[0]"
  83.     void SetMouseOverFormName(string form_name) { 
  84.         m_MouseOverFormName = form_name;
  85.     }
  86.     
  87.     // Display top num seqalign
  88.     void SetNumAlignToShow(int num) {  //internal default = 1000
  89.         m_NumAlignToShow = num;
  90.     }
  91.     /*Number of maximal line to show. Note this is different than 
  92.       alignment number as each line may contains > 1 alignment, especially
  93.       when using eCompactView */
  94.     void SetNumLineToShow(int num) { //internal default = 50
  95.         m_NumLine = num;
  96.     }
  97.     //show alignment graphic view
  98.     void AlnGraphicDisplay(CNcbiOstream& out);
  99. private:
  100.     struct SAlignInfo {
  101.         CConstRef<CSeq_id> id;
  102.         int gi;
  103.         double bits;
  104.         string info;
  105.         CRange<TSeqPos>* range;
  106.     };
  107.     //callback for sorting range
  108.     inline static bool FromRangeAscendingSort(SAlignInfo* const& info1,
  109.                                               SAlignInfo* const& info2)
  110.     {
  111.         return info1->range->GetFrom() < info2->range->GetFrom();
  112.     }
  113.     
  114.     typedef list<SAlignInfo*> TAlnInfoList;
  115.     typedef list<TAlnInfoList*> TAlnInfoListList;
  116.     CConstRef <CSeq_align_set> m_AlnSet; 
  117.     CRef <CScope> m_Scope;
  118.     int m_FormNum;
  119.     int m_NumAlignToShow; 
  120.     int m_View;
  121.     int m_BarHeight;
  122.     string m_ImagePath;
  123.     string m_MouseOverFormName;   //the text input window to show mouseover info
  124.     int m_NumLine;
  125.    
  126.     TAlnInfoListList m_AlninfoListList;
  127.     void x_DisplayMaster(int master_len, CNCBINode* center, 
  128.                          CHTML_table* tbl_box, CHTML_tc*& tbl_box_tc);
  129.     void x_GetAlnInfo(const CSeq_align& aln, const CSeq_id& id, 
  130.                       SAlignInfo* aln_info);
  131.     void x_BuildHtmlTable(int master_len, CHTML_table* tbl_box, 
  132.                           CHTML_tc*& tbl_box_tc);
  133.     CRange<TSeqPos>* x_GetEffectiveRange(TAlnInfoList& alninfo_list);
  134.     void x_MergeDifferentSeq(double pixel_factor);
  135.     void x_MergeSameSeq(TAlnInfoList& alninfo_list);
  136.     void x_PrintTop (CNCBINode* center, CHTML_table* tbl_box, 
  137.                      CHTML_tc*& tbl_box_tc);
  138. };
  139. END_SCOPE(objects)
  140. END_NCBI_SCOPE
  141. /* 
  142. *============================================================
  143. *$Log: alngraphic.hpp,v $
  144. *Revision 1000.0  2004/06/01 19:48:14  gouriano
  145. *PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  146. *
  147. *Revision 1.3  2004/05/03 17:42:13  jianye
  148. *Added def directives
  149. *
  150. *Revision 1.2  2004/05/03 15:10:04  jianye
  151. *Added export symbol
  152. *
  153. *Revision 1.1  2004/04/30 15:44:15  jianye
  154. *Initial checkin
  155. *
  156. *===========================================================
  157. */
  158. #endif